Главная страница
Навигация по странице:

  • Базовые типы

  • Модификаторы

  • Названия визуальных новелл. Официальное описание протокола обмена по RS485 приборов фирмы ОВ. Протокола обмена между пэвм и приборами овен согласовано Начальник онр новиков И. В


    Скачать 1.6 Mb.
    НазваниеПротокола обмена между пэвм и приборами овен согласовано Начальник онр новиков И. В
    АнкорНазвания визуальных новелл
    Дата14.10.2022
    Размер1.6 Mb.
    Формат файлаdoc
    Имя файлаОфициальное описание протокола обмена по RS485 приборов фирмы ОВ.doc
    ТипПротокол
    #733688
    страница4 из 7
    1   2   3   4   5   6   7

    4.5Хеширование имен параметров и
    вычисление контрольной суммы сообщения



    Для вычисления hash-функции и CRC-суммы используется один и тот же полином, а именно:
    x16+x15+x11+x10+x9+x8+x6+x4+x2+x1+x0.
    Алгоритм вычисления hash-функции и контрольной суммы следующий:

    unsigned Hash(char Byte, char nbit, unsigned CRC)

    {

    for (int i = 0; i < nbit; i++, Byte <<= 1)

    {

    if ( ( Byte ^ (CRC>>8) ) & 0x80 )

    {

    CRC <<= 1; CRC ^= 0x8F57;

    }

    else CRC <<= 1;

    }

    return CRC;

    }

    Обратите внимание на то, что «добавление» очередного байта к hash-свертке или к контрольной сумме начинается со старшего бита. Для представления символа сетевого имени параметра используется 7 бит, вследствие чего, при расчете hash-свертки имени, старшим битом считается именно 7-й, а не 8-й, всегда равный нулю бит. 8-й бит символа в вычислении hash-свертки имени никогда не участвует:
    crc = Hash(command [3] << 1, 7,

    Hash(command [2] << 1, 7,

    Hash(command [1] << 1, 7,

    Hash(command [0] << 1, 7, 0))));

    4.6Поле данных уровня представления


    Формат представления поля данных описан в п.5.1. Структура поля данных зависит от формата и конкретного параметра.

    4.7Структура квитанции


    Если в сообщении, принятом ведомым узлом, не обнаружены ошибки, передается квитанция, аналогичная посылке, но с признаком удаленного запроса равным «0».

    5Уровень ПРИЛОЖЕНИЯ протокола ОВЕН

    5.1Формат представления поля данных



    Передаваемая в 15 байтах поля данных информация содержит различные типы данных. Это позволяет использовать в сети информацию и от достаточно простых приборов, которые оперируют лишь ограниченным количеством типов данных. Устройства приемники данных должны уметь преобразовывать данные принимаемых типов в требуемый внутренний формат в случае их несовпадения. Информация о типе данных источника вводится в приемник на этапе конфигурирования, одновременно с информацией об идентификаторе принимаемого параметра.

    Базовые типы:

    • Формат числа с плавающей точкой

    • Знаковое число с односторонней десятичной точкой в двоичном виде

    • Знаковое число с односторонней десятичной точкой в двоично-десятичном виде

    • Часовой формат данных в двоичном виде

    • Часовой формат данных в двоично-десятичном виде

    • Нетипизированные целые числа в двоичном виде

    • Нетипизированные целые числа в двоично-десятичном виде

    • Строковый тип


    Модификаторы базовых типов:

    1) Временной модификатор (+2 байта времени в младших байтах поля данных, но перед (в более старшем байте) индексом, если наличествуют оба модификатора)

    2) Индексный модификатор (+2 байт индекса в младших байтах поля данных)

    Для удобства базовым типам присвоены номера, которые должен использовать каждый прибор в сети при задании формата данных фильтруемого параметра. С учетом того, что существуют также два модификатора базовых типов (времени и индексов) получится всего 8*4=32 формата.

    5.1.1Формат числа с плавающей точкой


    Формат числа с плавающей точкой - это просто стандартное 4-байтовое плавающее число в IEEE-формате, или усеченное 3-х байтовое (PIC-формат) - то же, что и IEEE, но с отброшенным младшим байтом мантиссы. Если известно, что формат плавающий, то усеченный и полный IEEE-форматы можно различить по битам размера информационного поля. Внутренние поля представлены только в двоичном, но не в двоично-десятичном виде.

    5.1.2Знаковое число с односторонней десятичной точкой


    Имеет знак (S), десятичный порядок (Exponent), выраженный БЕЗЗНАКОВЫМ числом и указывающий положение ДЕСЯТИЧНОЙ точки (0 для целого числа, 1 для числа с десятыми долями и т.п.) и ненормализованную мантиссу (Mantissa).

    S - старший бит

    Exponent - 3 следующих бита

    Mantissa - остальные биты (длина мантиссы определяется размером поля данных)
    Суммарная длина должна составлять целое число байтов

    Значение числа можно вычислить, как

    (-1)^S * 10^(-Exponent) * Mantissa

    Мантисса может выражаться как в двоичном, так и в двоично-десятичном виде.

    Например:

    -10.38 выражается как 0xA01038 при двоично-десятичном представлении мантиссы

    или как 0xA40E, то есть на байт короче, при ее двоичном представлении.

    5.1.3Часовой формат данных


    Шаблоном для представления числа в часовом формате является последовательность блоков данных, содержащих следующую информацию о времени (начиная со старшего байта):

    Y..Y - год (*от 00 до 99 кодируются только две младшие цифры года)

    M..M - месяц (*от 0 до 11)

    D..D - день (*от 0 до 30)

    h..h - часы (*от 0 до 23)

    m..m - минуты (*от 0 до 59)

    s..s - секунды (*от 0 до 59)

    c..c - сотые доли секунд (*от 0 до 99)

     * Ограничения не относятся к первому блоку посылки, который к тому же может иметь длину более одного байта.

    Каждый из блоков может состоять из одного (для любого блока в посылке) или нескольких байт (для самого старшего блока в посылке). Формат числа в часовом формате предусматривает передачу любой "сплошной" части этого шаблона не нарушающей границ байтов. Число в данном формате (от "старших" цифр к младшим) представляется в виде байтов шаблона, начиная с произвольного байта и кончая произвольным байтом шаблона, вслед за которыми идет байт, старшая тетрада которого содержит количество (Number) передаваемых блоков в посылке, а младшая - цену младшего блока (Price).

    Количество передаваемых блоков может быть от 1 до 7.

    Цена младшего разряда может принимать следующие значения:

    0 если младшим байтом являются сотые доли секунды

    1 если младшим байтом являются секунды

    2 если младшим байтом являются минуты

    3 если младшим байтом являются часы

    4 если младшим байтом являются дни

    5 если младшим байтом являются месяцы

    6 если младшим байтом являются годы
    Пример 1:

    Посылка вида hh|mm|ss|0x31 - будет иметь размер поля данных Size= 4 байта. При приеме такой посылки младшая тетрада байта под номером 0 (в данном случае 1) указывает на то, что в 1-ом байте находятся секунды, в следующем (если таковой есть) минуты и затем часы. hh (поле часов) является последним полем, на что указывает количество блоков данных - 3 в старшей тетраде байта под номером 0. Длина этого последнего поля в принципе может быть произвольной, но в данном случае она, как и у остальных полей составляет один байт. Длина последнего поля вычисляется по формуле Size-Number=4-3=1.
    Пример 2:

    Посылка вида mmmm|ss|0x21 - также будет иметь размер поля данных Size= 4 байта. При приеме такой посылки младшая тетрада байта под номером 0 (в данном случае 1) указывает на то, что в 1-ом байте находятся секунды). Второе поле mm (поле минут) является последним полем, на что указывает количество блоков данных - 2 в старшей тетраде байта под номером 0. Длина этого последнего поля в данном случае составляет 2 байта. Длина последнего поля вычисляется по формуле Size-Number=4-2=2.

    Каждое из полей шаблона может быть выражено как в двоичном, так и в двоично-десятичном формате, при этом общая длина данных от этого не зависит.

    5.1.4Нетипизированные целые числа или наборы битов


    Если нетипизированные целые задаются как тип данных чужого параметра, фильтруемого фильтром, то в зависимости от длины поля данных могут соотноситься с типами:

    unsigned char; //(1 байт)

    unsigned short int; //(2 байта)

    unsigned long int; //(4 байта),

    но могут иметь и любой нестандартный размер в пределах от 1 до 15 байтов.

    Выделенных полей (типа знака, порядка и т.п.) не имеют, хотя фактически, как мы увидим в дальнейшем, такие поля могут в них быть. Байты могут кодироваться как в двоичном, так и в двоично-десятичном форматах.

    Нетипизированные целые числа могут применяться также для обмена по сети произвольными данными при "двухточечном" соединении (в том числе, данными типа float), если их типы одинаковы или заведомо известны на приемной и передающей сторонах, и если эти данные никогда не используются третьими лицами. Примером может служить случай, когда master-устройство устанавливает конфигурационные параметры в slave-устройстве.

    Таким образом, нетипизированные целые числа могут представлять и плавающие числа, и данные с фиксированной запятой, и даже знаковые числа, в двоичном случае трактуемые как числа в дополнительном коде, а в двоично-десятичном случае - как число со знаком, заданным в старшей тетраде (<0xa - все число считается положительным, а цифра засчитывается как цифра числа; >=0xa - тетрада считается отрицательным знаком всего числа и как цифра не засчитывается, т.е. считается равной 0).

    5.1.5Строковый тип


    Используется для передачи строк или данных непредусмотренных выше типов с помощью конвертирования их в строку.

    Строка может состоять из от 1 до 15 ASCII-символов. Несмотря на то, что она сама составлена из ASCII символов, каждый символ (байт) строки и в этом случае разбивается на тетрады нижним уровнем и представляется 2-мя ASCII символами (из разрешенного набора "G".."V").

     Строка передается байтом с наибольшим индексом (старшим байтом) вперед.

    5.1.6Составной тип данных с информацией о времени


    Такие параметры, как температура, влажность, давление и т.п. как правило, должны сопровождаться и временем, сообщающим о моменте, когда данное измерение было сделано. В этом случае прибор, имеющий в своем составе ПИД-регулятор, прослушивая сеть, может перехватывать данные параметры и осуществлять полноценное регулирование, в том числе и по интегральному и дифференциальному каналам, не внося дополнительных ошибок, связанных с несоответствием действительного времени измерения, которое определяется внутренней синхронизацией прибора-источника, и фактическим временем передачи параметра по сети, которое определяется моментом запроса параметра master'ом. Причем синхронизации времен разных приборов в сети не потребуется, поскольку для преследуемых нами целей используется только относительное время, т.е. разность между временем предыдущего и текущего измерений. Важно только иметь единую единицу измерения времени. В качестве такой единицы выбрана 0.01 sec, поскольку, с одной стороны, это время достаточно мало, чтобы обеспечить приемлемую точность расчета производной и интеграла контролируемого сигнала, а с другой стороны оно достаточно легко получается при обычно используемых частотах регенерации индикации (обычно "круглые" сотни Гц).

    Если по сети передавать 2-байтовое циркулярное значение времени, то этого окажется достаточным для нормальной работы ПИД-регулятора с периодичностью получения результатов измерения до 655,36 секунд = 10,922(6) минут, что представляется вполне приемлемым.

    Все перечисленные выше типы данных, кроме, может быть данных в часовом формате, для которых это не имеет смысла, могут иметь и варианты с 2-х байтовым временем с 0,01-секундным разрешением. При этом эти 2 байта являются младшими и всегда выражены в двоичном виде, даже если базовый тип выражен в двоично-десятичном.

    5.1.7Составной тип данных с дополнительным полем индексации


    Для передачи индекса конфигурационных параметров (см. п. 5.2 и 5.3.1) используются составной тип данных с дополнительным полем индекса, равным 2-м байтам. Такие комбинированные типы данных могут быть образованы от любого из вышеперечисленных базовых типов с добавлением к ним со стороны младшего байта дополнительного одномерного индекса.
    1   2   3   4   5   6   7


    написать администратору сайта