Приложение 2

<< Click to Display Table of Contents >>

Navigation:  Проект > Элементы дерева объектов > Палитра ФБ > Служебные > Master PLC SmartLink >

Приложение 2

Пример работы функционального блока "MasterPLC SmartLink" с широко используемой в системах панелью DK8070.

 

Запрос буфера клавиатуры:

 

Запрос буфера клавиатуры

$AAK[chk](cr)

, где

$ - символ начала команды

AA - адрес терминала

K - 'K', команда запроса буфера

[chk] - 2-хсимвольная контрольная сумма, отключается в настройках прибора

(cr) - символ возврата каретки 0x0D

 

Пусть адрес терминала = 23.

 

Зарезервируем метки 0 и 1 для обрамления подконтрольной части, тогда выражение для нее будет выглядеть так:

{Fcrc1(0-1):2t:h}

Fcrc1 - остаток от деления на 256

(0-1) - байты между 0 и 1 меткой

2t - два байта в текстовом режиме

h - в шестнадцатеричном представлении

 

тогда шаблон запроса будет таким:

{L:0}$23K{L:1}{Fcrc1(0-1):2t:h}\0D

если же контрольная сумма не используется, то следует убрать два выражения-метки и выражение Fcrc1, останется лишь $23K\0D

 

 

Ответ на запрос буфера клавиатуры

!AAV(данные)[chk](cr) - в случае правильной команды

?AA[chk](cr) - в случае неправильной команды

, где

V - признак переполнения буфера клавиатуры

V = 0 если нажато менее 33 клавиш

V = 1 если нажато более 32 клавиш после последнего чтения.

 

MasterPLC smart link "не понимает" переменную длину в ответах, поэтому

придется составить 32 шаблона на каждое количество нажатых символов,

более 32 нажатых клавиш считается переполнением буфера. Также

понадобится 32 выхода для каждого сивола и еще один для признака

переполнения.

Выражение, посылающее каждый символ буфера клавиатуры на выходы ФБ с 0

по n-й будет выглядеть так:

{P(0-n):1b:i}, бинарный формат указан потому, что символы не обязательно

будут цифрами.

признак переполнения посылаем на выход 33

{P(33-33):1t:h}

а весь шаблон так:

{L:0}!23{P(33-33):1t:h}{P(0-n):1b:i}{L:1}{Fcrc1(0-1):2t:h}\0D

И таких шаблонов нужно сделать 32, подставляя числа от 0 до 31 вместо n

и разделяя шаблоны выражением {Next}

{L:0}!23{P(33-33):1t:h}{P(0-0):1b:i}{L:1}{Fcrc1(0-1):2t:h}\0D{Next}{L:0}!23{P(33-33):1t:h}{P(0-1):1b:i}{L:1}{Fcrc1(0-1):2t:h}\0D{Next}

и т д. до {L:0}!23{P(33-33):1t:h}{P(0-31):1b:i}{L:1}{Fcrc1(0-1):2t:h}\0D

или без контрольной суммы

!23{P(33-33):1t:h}{P(0-0):1b:i}\0D{Next}!23{P(33-33):1t:h}{P(0-1):1b:i}\0D{Next}

и т д. до !23{P(33-33):1t:h}{P(0-31):1b:i}\0D

 

Теперь составим шаблон для неправильной команды ?AA[chk](cr). Он похож

на шаблон запроса

 

и его нужно присоединить посредством {Next} в конце всех выражений.

 

 

 

Вывод числа

 

У терминала есть функция вывода произвольной строки, но из-за

ограничений Smart link-а произвольную строку вывести затруднительно, но

чаще возникает необходимость вывести некоторые значения с входов ФБ, а

эта задача уже по силам Smart link-у.

 

Синтаксис:

$AAO(данные)[chk](cr)

 

Пусть на входы 0 и 1 у ФБ подаются числа, которые нужно выводить на

терминал. Если записать оба входа одним выражением, между ними не будет

разделителя, поэтому придется использовать два выражения, разделив их,

например, тремя пробелами. Для вещественных чисел в текстовом формате

пришлось бы предварительно разделять целую и дробную части. Допустим,

числа целые (в выражении пишем :d) и не более трех знаков (:3t). Получается

{P(0-0):3t:d} и {P(1-1):3t:d}

Кстати, два разных выражения позволяют выводить числа в разных форматах.

Целиком же шаблон запроса-вывода получается следующий (напоминаем, 23 -

это адрес терминала):

{L:0}$23O{P(0-0):3t:d} {P(1-1):3t:d}{L:1}{Fcrc1(0-1):2t:h}\0D

 

Правильный ответ на запрос !AA[chk](cr)

{L:0}!23{L:1}{Fcrc1(0-1):2t:h}\0D

 

Неправильный ответ такой же как при запросе буфера клавиатуры - ?AA[chk](cr)

{L:0}?23{L:1}{Fcrc1(0-1):2t:h}\0D

или без контрольной суммы

?23\0D