<< Click to Display Table of Contents >> Navigation: Проект > Элементы дерева объектов > Палитра ФБ > Служебные > Master PLC SmartLink > Описание шаблонов кадров |
Содержание кадров запросов или ответов можно условно разбить на части, как это обычно делается в описаниях протоколов (например: адрес, сумма байт данных, значения, контрольная сумма, и. т. п.) Каждая часть кадра соответствует выражению в шаблоне.
Можно выделить следующие части, из которых состоят кадры и которые необходимо описывать:
•Статический (символ начала, конца, адрес и т.п.)
•Данные входов-выходов ФБ
•Результат вычислений, зависящий от текущего содержания кадра (CRC, количество байт)
Для описания шаблона кадра используется строка специального формата.
Ниже перечислены выражения, с помощью которых описываются шаблоны:
Используются для описания тех частей кадра, которые не меняются в режиме исполнения, например: символ начала кадра, адрес опрашиваемого устройства. Статическое выражение помещается в кадр (а при получении ответа - сравнивается) в виде ASCII кодов символов, записанных пользователем в шаблоне. Это наиболее удобно для текстовых протоколов. Если же требуется употребить в выражении бинарные данные, используйте знак ‘\’ перед значением каждого байта, записанного в шестнадцатеричном формате (\xx – символ с кодом xx).
Можно также использовать следующие символы:
\r – <CR> - возврат каретки (код 0D);
\n - <LF> - перевод строки;
\\ - символ ‘\’
Примеры:
шаблон |
кадр (пробелы вставлены для наглядности) |
123\r |
31 32 33 0D |
\31\32\33\0D |
31 32 33 0D |
Специальные – это все выражения кроме статических. Они должны быть обрамлены фигурными скобками - {выражение}. Не допускается рекурсия (т.е. выражения, вложенные, в другие выражения).
Выражения-метки не попадают в кадр запроса и не ожидаются в кадрах ответов. Они используются для выделения какого-то участка кадра. Например, контрольная сумма часто рассчитывается без учета байт самой контрольной суммы, а также начального и конечного символов. Чтобы пометить определенные места, в шаблоне употребляются метки с идентификаторами, а эти идентификаторы затем используются в тех выражениях шаблона, где необходимо указать отмеченный метками участок.
Общий вид:
{L:<ИД>}
‘L’ – символ, указывающий, что выражение является меткой, через двоеточие указывается <ид> - идентификатор метки. Идентификатором метки может быть любой символ от 0 до 9 (то есть максимально 10 меток).
Например:
xxxх{L:0}xxxх{L:5}xxxх{L:2}
Ввиду многообразия существующих протоколов, для значений необходимо указывать несколько атрибутов, позволяющих его правильно интерпретировать в(из) последовательность байт.
Общий вид:
{P(<Нач_вх>-<Кон_вх>): <Длина_в_кадре><Формат_кадра> : <Формат_данных>}
<Нач_вх> и <Кон_вх> - это индексы начального и конечного входов/выходов ФБ в группе, индексирование начинается с 0.
<Длина_в_кадре> – количество байт, которое занимает в кадре одно передаваемое значение;
<Формат_кадра> - как представлены данные в кадре. Может принимать одно из 2-х значений:
•b – бинарный. В кадре находятся сами байты, из которых состоит значение. При использовании бинарных протоколов обратите внимание на свойство High-Low. Если свойство High-Low установлено истина, то число помещается в кадр старшим байтом вперед, если ложь, то младшим байтом вперед.
•t – текст. В кадре содержатся коды цифр значения. Например, для передачи числа 5 в кадр помещается число пятьдесят три (в шестнадцатеричном представлении, младшим байтом вперед 0х35) – значение символа ‘5’ в кодировке ASCII. Перед этим может быть вставлено необходимое количество нулей, если <длина в кадре> превышает количество символов числа.
<Формат_данных>
Это поле зависит от того, какой указан формат кадра.
Может принимать значения:
Для бинарных форматов кадров (‘b’):
•i – данные представляют целое число
•f – данные представляют 4-байтное вещественное число. Длина в кадре в этом случае должна быть равна 4-м
Для текстовых (‘t’)
•d – означает, что символы в кадре представляют собой число в десятеричной системе;
•h - символы в кадре представляют собой число в шестнадцатеричной системе, цифры a-f в нижнем регистре;
•H - символы в кадре представляют собой число в шестнадцатеричной системе, цифры A-F в верхнем регистре;
•i – при разборе выражения типа {P(_-_):_t:i} начальные символы, не являющиеся цифрами, не будут игнорироваться, кроме пробелов и нулей, а также распознается знак;
•f – символы в кадре представляют десятичное вещественное число с точкой, отделяющей дробную часть. Вещественные числа, содержащие в тексте десятичную точку (запятую), также распознаются со знаком, несмотря на пробелы «_» в начале или в конце, например:
«-0.123»
«+123.456»
«_123.456_»
Например, текстовый кадр содержит байты 31 32, что соответствует символам «1» и «2». Если указано, что формат данных десятеричный (d), то значение будет распознаваться как «двенадцать», если шестнадцатеричный (h), то значение – «восемнадцать».
Примеры:
пусть имеются четыре входа ФБ с индексами от 0 до 3 и значениями 10, 20, 30, 40 соответственно (в шестнадцатеричном формате 0xA, 0x14, 0x1E, 0x28).
в шаблоне |
в кадре |
{P(0-3):4t:d} |
00 00 31 30 00 00 32 30 00 00 33 30 00 00 34 30 |
{P(0-3):2t:h} |
00 41 31 34 31 45 32 38 |
{P(0-3):2b:i} |
00 0A 00 14 00 1E 00 28 |
{F<Идентификатор_формулы>(<ид_н_м>-<ид_к_м>):< Длина_в_кадре><Формат_кадра> : <Формат_данных>}
F<Идентификатор_формулы> определяет по какому из заданных алгоритмов вычисляется значение. Может принимать значения:
Fcrc1 – сумма байт без переноса (остаток от деления суммы байт на 256)
Fcrc2 – контрольная сумма CRC16, применяемая в протоколах, подобных «Modbus RTU»
Flen – просто количество байт
Fxor – исключающее или всех байт между метками
принимаются заявки
<ид_н_м>-<ид_к_м> - идентификаторы меток. Значение формулы вычисляется на основе байт, лежащих между первой и второй меткой. Требуется чтобы в строке шаблона оба выражения-метки, используемые в выражении-формуле находились слева от выражения-формулы!
Остальные поля описывают представление значения в массиве байт и полностью идентичны выражению «Значения входов».
Например:
в шаблоне |
в кадре |
{L:3}\01\02\03{L:5}{Fcrc1(3-5):1b:i} |
01 02 03 06 |
{L:3}\01\02\03{L:5}{Fcrc1(3-5):4t:h} |
01 02 03 30 30 30 36 |
{L:1}\00\00\00{L:2}{Flen(1-2):4t:d} |
00 00 00 30 30 30 33 |
Смотрите также: