Материал: ModbusProtocol-VKT7

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

ВКТ-7

Реализация протокола Модбас

с. 11

4.5Запрос на чтение данных

Запрос предназначен для получения информации по тем элементам данных, условные адреса которых присутствовали в перечне элементов для чтения.

Начальный адрес = 0x3FFE; Количество регистров = 0х0000. Пример:

Frame [0] = 0x00; Frame [1] = 0x03; Frame [2] = 0x3F; Frame [3] = 0xFE; Frame [4] = 0x00; Frame [5] = 0x00; Frame [6] = CheckSum l; Frame [7] = CheckSum h;

Готовый вариант запроса:

0x00 0x03 0x3f 0xfe 0x00 0x00 0x29 0xff

Прибор присылает ответ в виде последовательности элементов разной длины. Элемент последовательности имеет следующий вид:

само значение (размер – в соответствии со значением в поле «размер…», полученным в ответ на запрос «Чтение перечня активных элементов» для соответствующей величины);

байт качества;

байт нештатных ситуаций (НС).

Значения байта качества

(ЧисленныезначениясимвольныхконстанткачестваприведенывПриложенииБ):

OPC_QUALITY_BAD | OPC_QUALITY_DEVICE_FAILURE – значение элемента находится вне диапазона (в приборе в данном случае на месте числового значения индицируется надпись “нет значения”);

OPC_QUALITY_UNCERTAIN | OPC_QUALITY_SENSOR_CAL – у данно-

го элемента есть нештатная ситуация;

OPC_QUALITY_BAD | OPC_QUALITY_CONFIG_ERROR –элемент отсут-

ствует в расчетной схеме.

Байт НС

Содержит код нештатной ситуации для данного элемента.

Если код равен 0 - НС отсутствуют, если 0xff - НС для данного элемента отсутствует, но есть НС у других элементов списка. Любое другое значение означает наличие нештатной ситуации у данного элемента.

Возможный код ошибки: 5 – зафиксировано изменение схемы измерения. В этом случае нужно следовать рекомендациям, описанным в разделе «Принципы организации данных, доступных через сеть, в тепловычислителе ВКТ-7».

4.6Запрос на чтение служебной информации

Запрос предназначен для получения служебной информации (номер версии ПО, схема измерений, идентификатор абонента, сетевой номер, дата отчета и модель исполнения).

Начальный адрес = 0x3FF9;

ВКТ-7

Реализация протокола Модбас

с. 12

Количество регистров = 0х0000. Пример:

Frame [0] = 0x00; Frame [1] = 0x03; Frame [2] = 0x3F; Frame [3] = 0xF9; Frame [4] = 0x00; Frame [5] = 0x00; Frame [6] = CheckSum l; Frame [7] = CheckSum h;

Готовый вариант запроса:

0x00 0x03 0x3f 0xf9 0x00 0x00 0x98 0x3e

Сегмент данных ответа состоит из следующих элементов: Для версии ПО менее 1.5:

дата отчета целое 8-ми разрядное число; Для версии ПО 1.5 и более:

номер версии ПО.................... целое 8-ми разрядное число;

схема измерения по ТВ1×2 ... целое 16-ти разрядное число;

схема измерения по ТВ2×2 ... целое 16-ти разрядное число;

идентификатор абонента ....... 8 байт формата ASCI;

сетевой номер прибора.......... целое 8-ми разрядное число;

дата отчета.............................. целое 8-ми разрядное число;

модель исполнения................. целое 8-ми разрядное число. Примечания:

1.Номер версии ПО отображается в двух тетрадах. Старшая – номер версии, младшая – номер реализации. Например, версия 1.8 имеет вид

0001 1000=0х18.

2.При обработке для получения номера схемы измерений необходимо выполнить логический сдвиг 16-ти разрядного числа вправо на 1 бит.

4.7Запрос “Начало сеанса связи”

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

Начальный адрес = 0x3FFF; Количество регистров = 0х0000. Пример:

Frame [0 ] = 0x00;

Frame [1 ] = 0x10; Frame [2 ] = 0x3F; Frame [3 ] = 0xFF; Frame [4 ] = 0x00; Frame [5 ] = 0x00; Frame [6 ] = 0xCC; Frame [7 ] = 0x80; Frame [8 ] = 0x00; Frame [9 ] = 0x00; Frame [10] = 0x00;

ВКТ-7

Реализация протокола Модбас

с. 13

Frame [11] = CheckSum l; Frame [12] = CheckSum h;

Готовый вариант запроса:

0x00 0x10 0x3f 0xff 0x00 0x00 0xcc 0x80 0x00 0x00 0x00 0x64 0x54

Ответ от вычислителя анализировать не нужно.

4.8Запрос “Чтение интервала дат”

Запрос предназначен для получения дат начала/конца архива в приборе и текущей даты (только для версий ПО прибора 1.7 и более).

Начальный адрес = 0x3FF6; Количество регистров = 0х0000. Пример:

Frame [0 ] = 0x00;

Frame [1 ] = 0x03; Frame [2 ] = 0x3F; Frame [3 ] = 0xF6; Frame [4 ] = 0x00; Frame [5 ] = 0x00; Frame [6 ] = CheckSum l; Frame [7 ] = CheckSum h;

Готовый вариант запроса:

0x00 0x03 0x3f 0xf6 0x00 0x00 0xa8 0x3d

Прибор присылает ответ следующего формата:

Дата начала часового архива;

Текущая дата;

Дата начала суточного архива (только для версий ПО прибора 1.6 и более).

Даты передаются в формате VT_DATA_RAP (см. Приложение Б).

5 Порядок следования запросов

5.1Начало сеанса связи

Первым запросом должен быть запрос «Начало сеанса связи». Ответ вычислителя на этот запрос анализировать не нужно. Далее необходимо сделать запрос на «Чтение данных». Ответ также анализировать не нужно. После этого необходимо получить «свойства» (см. ниже), после чего можно приступать к получению архивных/текущих данных.

5.2Получение «свойств»

Для корректной расшифровки ответов прибора необходимо получить так называемые «свойства».

К «свойствам» относятся:

количество знаков дробной части для различных величин;

наименование единиц измерения различных величин.

Вычислитель ВКТ-7 передает данные системе верхнего уровня в виде целых чисел (полученных в результате масштабирования вещественных), вещественных

ВКТ-7

Реализация протокола Модбас

с. 14

(только величины расхода), а также просто целых чисел. Для получения верного строкового представления величины нужно выполнить следующие операции:

преобразовать полученное число в строку. Если величина – это не расход, то преобразовывать в строку следует как целое число (при реализации на языке программирования С это может быть вызов функции sprintf с параметром %d). В противном случае, преобразование должно выполняться как для вещественного числа (sprintf с параметром %f);

если величина – это не расход, отделить от конца строки заданное в «свой-

ствах» количество знаков и поставить запятую (или точку).

Например, от прибора получено значение (и это какая-либо величина, но не расход), которое после преобразования в строку дало «12345», и из «свойств» известно, что количество знаков после запятой равно 2. В этом случае окончательное строковое представление величины будет иметь вид «123,45».

Для получения «свойств» следует выполнить приведенную ниже последовательность запросов:

1.Запись типа значение с номером 6 («свойства»);

2.Запись перечня элементов для чтения (формирование перечня для «свойств» будет описано ниже);

3.Чтениеданныхвсоответствиисзаписаннымперечнем. Приполученииответа наэтотзапросанализироватьбайтыкачестваинештатныхситуацийненужно.

Для определения величин и свойств в тепловычислителе ВКТ-7 использовано следующее перечисление:

enum

{

t1_1Type=0,t2_1Type, t3_1Type, V1_1Type,V2_1Type,V3_1Type, M1_1Type,M2_1Type,M3_1Type, P1_1Type,P2_1Type,Mg_1TypeP, Qo_1TypeP,Qg_1TypeP,dt_1TypeP,tswTypeP,taTypeP,QntType_1HIP, QntType_1P,SizeOut,NSPrintTypeP=SizeOut,SizePrint,MittType, ItogType,G1Type=SizeOut,G2Type,G3Type,SizeOutModb, t1_2Type=SizeOutModb,t2_2Type,t3_2Type,V1_2Type,V2_2Type, V3_2Type,M1_2Type,M2_2Type,M3_2Type,P1_2Type,P2_2Type, Mg_2TypeP,Qo_2TypeP,Qg_2TypeP,dt_2TypeP,tsw_2TypeP, ta_2TypeP,Qnt_2TypeHIP,Qnt_2TypeP,G1_2Type,G2_2Type,G3_2Type,

SizeOutModbP,

UnitTypeM=SizeOutModbP,

tTypeM=UnitTypeM,GTypeM,VTypeM,MTypeM,PTypeM,dtTypeM,tswTypeM,

taTypeM,MgTypeM,QoTypeM,QgTypeM,QntTypeHIM,QntTypeM,

FractDigNumM1,

tTypeFractDigNum=FractDigNumM1,GTypeFractDigNum1,

VTypeFractDigNum1,MTypeFractDigNum1,

PTypeFractDigNum1,dtTypeFractDigNum1,tswTypeFractDigNum1,

taTypeFractDigNum1,MgTypeFractDigNum1,QoTypeFractDigNum1,

FractDigNumM2,tTypeFractDigNum2=FractDigNumM2,

GTypeFractDigNum2,VTypeFractDigNum2,MTypeFractDigNum2,

PTypeFractDigNum2,dtTypeFractDigNum2,tswTypeFractDigNum2,

taTypeFractDigNum2,MgTypeFractDigNum2,QoTypeFractDigNum2, SizeAllesModb

ВКТ-7

Реализация протокола Модбас

с. 15

};

Первой части этого перечисления (до SizeOutModbP) соответствует массив символьных наименований элементов данных:

char* const TxtList[]=

{

"t1.1","t2.1","t3.1",

"V1.1","V2.1","V3.1","M1.1","M2.1","M3.1", "P1.1","P2.1","Mг.1","Qо.1","Qг.1", "dt.1","tх","ta","BНP.1","BOC.1", "G1.1","G2.1","G3.1","t1.2","t2.2","t3.2", "V1.2","V2.2","V3.2","M1.2","M2.2","M3.2", "P1.2","P2.2","Mг.2","Qо.2","Qг.2", "dt.2", "", "","BНP.2", "BOC.2", "G1.2","G2.2","G3.2"}

Причем в обозначениях величин первый числовой индекс соответствует номеру величины (t1, t2 и т.д.), а второй – номер теплового ввода, в котором измеряется величина.

При формировании запроса на запись перечня элементов для чтения (для элементов данных «свойств»), массив должен состоять из следующих элементов:

TTypeM (единицы измерения t), GtypeM (единицы измерения расхода), VtypeM (единицы измерения объема), MtypeM (единицы измерения массы), PtypeM (единицы измерения давления), QoTypeM (единицы измерения тепла),

QntTypeHIM (единицы измерения счетчиков времени),

tTypeFractDigNum(количество знаков после запятой для t), VTypeFractDigNum1(количество знаков после запятой для объема ТВ1), MTypeFractDigNum1(количество знаков после запятой для массы ТВ1), PTypeFractDigNum1(количество знаков после запятой для давления), QoTypeFractDigNum1(количество знаков после запятой для тепла ТВ1), MTypeFractDigNum2(количество знаков после запятой для массы ТВ2), VTypeFractDigNum2(количество знаков после запятой для объема ТВ2), QoTypeFractDigNum2(количество знаков после запятой для тепла ТВ2) ,

Для единиц измерения размер в элементе массива равен 7 байт, для количества знаков после запятой–1 байт.

Пример элемента массива для единиц измерения:

Условный адрес: 0x40000000 | tTypeM; Размер: 0x0007;

Пример элемента массива для количества знаков после запятой:

Условный адрес: 0x40000000 | QoTypeFractDigNum2; Размер: 0x0001;

При обработке ответа на чтение свойств следует иметь ввиду, что наименование единиц измерения величин передаются в виде массива из семи символов.

Источник: https://studfile.net/preview/16521248/