Материал: ModbusProtocol-VKT7_ТЕД3

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

ВКТ-7

Реализация протокола МОДБАС

с. 16

 

 

 

4.11 Запрос “Запись состояний дискретных выходов”

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

Начальный адрес = 0x3FEE. Количество регистров = 0х0000.

Пример:

Frame [0 ] = 0x00;

Frame [1 ] = 0x10; Frame [2 ] = 0x3F; Frame [3 ] = 0xEE; Frame [4 ] = 0x00; Frame [5 ] = 0x00; Frame [6 ] = 0x01;

Frame [7 ] = Состояние выхода №1 (0 или 1); Frame [8 ] = Состояние выхода №2 (0 или 1); Frame [9 ] = CheckSum l;

Frame [10] = CheckSum h;

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

0x00 0x10 0x3f 0xee 0x00 0x00 0x01 0x00 0x01 0x43 0xb1

Прибор присылает ответ в виде стандартного подтверждения записи. Возможный код ошибки: 7 – дискретные выходы не являются управляемыми

дистанционно.

ВКТ-7

Реализация протокола МОДБАС

с. 17

 

 

 

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

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

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

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

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

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

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

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

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

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

если величина представлена не вещественным числом, отделить от конца строки заданное в «свойствах» количество знаков и поставить запятую (или точку).

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

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

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

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

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

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

ВКТ-7

Реализация протокола МОДБАС

с. 18

 

 

 

enum

{

t1_1Type,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,DopInpImp_Type=SizePrint,MittType,

P3_Type=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,tswTyp

eM,taTypeM,

MgTypeM,QoTypeM,QgTypeM,QntTypeHIM,QntTypeM,

FractDigNumM1, tTypeFractDig-

Num=FractDigNumM1,GTypeFractDigNum1,VTypeFractDigNum1,MTypeFra

ctDigNum1, PTypeFractDig-

Num1,dtTypeFractDigNum1,tswTypeFractDigNum1,taTypeFractDigNum1,

MgTypeFractDigNum1,QoTypeFractDigNum1,

FractDigNumM2, tTypeFractDig-

Num2=FractDigNumM2,GTypeFractDigNum2,VTypeFractDigNum2,MTypeFr

actDigNum2, PTypeFractDig-

Num2,dtTypeFractDigNum2,tswTypeFractDigNum2,taTypeFractDigNum2, MgTypeFractDigNum2,QoTypeFractDigNum2 ,SizePropertyM, NSPrintTypeM_1=SizePropertyM,NSPrintTypeM_2, QntNS_1,QntNS_2,

DopInpImpP_Type, P3P_Type, SizeAllesModb

};

Первой части этого перечисления (до 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"}

ВКТ-7

Реализация протокола МОДБАС

с. 19

 

 

 

Элементам перечисления NSPrintTypeM_1,NSPrintTypeM_2, QntNS_1,QntNS_2,DopInpImpP_Type,P3P_Type соответствуют символьные наименования НС.1", "НС.2", "НСв2.1", "НСв2.2", "DI", "P3".

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

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

TTypeM

(единицы измерения t),

GtypeM

(единицы измерения расхода),

VtypeM

(единицы измерения объема),

MtypeM

(единицы измерения массы),

PtypeM

(единицы измерения давления),

QoTypeM

(единицы измерения тепла),

QntTypeHIM

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

QntTypeM

(В зависимости от того задействован или нет дополнительных

 

вход (определяется по активности элемента DopInpImpP_Type)

 

– это или единицы измерения счетчиков времени, или единицы

 

измерения величины на дополнительном входе.).

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

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

Пример элемента массива для единиц измерения: Условный адрес: 0x40000000 | tTypeM;

Размер: 0x0007;

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

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

Размер: 0x0001;

При обработке ответа на чтение свойств следует иметь ввиду, что в зависимости от состояния поля «Версия сервера» (см. запрос «Начало сеанса связи») единицы измерения могут передаваться различными способами:

«Версия сервера» равна 0. Наименование единиц измерения величин передаются в виде массива из семи символов;

«Версия сервера» равна 1. Наименование единиц измерения величин передаются в виде структуры, имеющей два поля. Первое поле (типа unsigned short (16 бит)) определяет длину строки в байтах. Второе поле является массивом байт, имеющим длину, указанную в первом поле.

ВКТ-7

Реализация протокола МОДБАС

с. 20

 

 

 

5.3Порядок получения необходимых данных

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

Размер элемента данных (получен при ответе на запрос «Чтение перечня активных элементов»);

Количество знаков в дробной части и наименование единиц измерения (получены при чтении «свойств»).

5.4Получение архивных данных

Для получения архивных данных за интересующую клиента дату необходимо выполнить приведенную ниже последовательность запросов:

запрос на запись типа значений с номером 0-3 в зависимости от желаемого типа данных;

запрос на чтение перечня активных элементов;

запрос на запись перечня элементов для чтения;

запрос на запись даты;

запрос на чтение данных в соответствии с записанным перечнем элементов для чтения.

Если выполняется циклическое чтение архивных данных, то первые три операции нужно выполнить единожды.

ВНИМАНИЕ! ПРИБОР ПРИСЫЛАЕТ ОТВЕТ С ДАННЫМИ, ОТНОСЯЩИМИСЯ К ТОЙ ДАТЕ, КОТОРАЯ БЫЛА ЗАПИСАНА В ПОСЛЕДНИЙ РАЗ.

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

5.5Получение текущих и итоговых текущих данных

Для получения текущих и итоговых текущих данных необходимо выполнить последовательность запросов:

запрос на запись типа значений с номером 4 или 5 соответственно;

запрос на чтение перечня активных элементов;

запрос на запись перечня элементов для чтения;

запрос на чтение данных в соответствии с записанным перечнем элементов для чтения.