Содержание материала

Рекомендации по организации опроса устройств

Elvin ET

Для опроса счетчика Elvin ET ( http://www.elvin.com.ua ) используется драйвер SLB.dll. В счетчике реализован протокол IEC1107.
Начальной скоростью может быть 300бод либо указанная при параметризации счетчика. Необходимая информация может быть определена из байта конфигурации последовательного порта , 8 бит которого имеют следующий смысл:

Номер бита

Пояснения

2,1,0

Скорость обмена по последовательному порту, биты 2,1,0:
0 0 0 - 300 бод
0 0 1 - 600 бод
0 1 0 - 1200 бод
0 1 1 - 2400 бод
1 0 0 - 4800 бод
1 0 1 - 9600 бод

3

Начальная скорость обмена
0 - 300 бод
1 - скорость обмена, определяемая битами 2,1,0

4

Зарезервирован

5

Адрес устройства:
0 - 2-х разрядное число в Addr RS
1 - 4 младших цифры серийного номера

7,6

Конфигурация порта, биты 7,6:
0 0 - нет порта
0 1 - оптопорт
1 0 - стандартный интерфейс
1 1 - стандартный интерфейс + оптопорт

Для единственного в канале связи счетчика Адрес Устройства (ключ DEVADDR) можно не указывать. Иначе (ветвь RS485, токовой петли; модемный доступ RS232) необходимо назначить счетчикам различные адреса и указывать их в ключе DEVADDR. Адрес устройства задается либо четирьмя последними цифрами серийного номера, либо двухразрядным числов (см. таблицу выше).
Режим синхронизации времени требует указания пароля счетчика. Заводская установка – '0000’:
PASSW=0000


Счетчики Elvin ET могут иметь коммуникационный интерфейс, тип которого можно определить из обозначения счетчика. Пример записи типа счётчика:
EТ 2А5E9HLMT
Где – тип счетчика; Класс точности: 2 – 0,5S; А - номинальные напряжения 100, 100/√3 В; 5 - номинальный ток 5 А; E - измерение активной и реактивной энергии; 9 - трех/четырехпроводная; H – тарифный; L- двунаправленный;
Число выходов: M - телеметрический выход (ТВ) от 1 до 4реле; N - M + управление нагрузкой; R - M + токовая петля; V - M + RS 232; Z - M + RS 485

Shlumberger Indigo+

Для опроса счетчика Indigo+ используется драйвер SLB.dll

Необходимо указывать пароль (уровня L1, заводская установка ‘123456’):
PASSW=123456

Если на одной линии подключены несколько счетчиков, необходимо использовать ключ DEVADDR. Так, при установке DEVADDR=001 будет выдаваться, согласно протокола IEC1107, запрос /?001!<CR><LF>. Отметим что параметр счетчика Outstation Address необходимо указывать в виде трехсимвольной комбинации, т.е. номер 1 необходимо задать через
DEVADDR=001

Подключение к счетчику выполняется на скорости, указанной в свойствах модема (см. описание конфигуратора системы). Согласно IEC1107 рекомендуемая начальная скорость - 300 бод, однако счетчик м.б. запрограммирован и на другую начальную скорость. В результате обмена идентификационными сообщениями («рукопожатие») драйвер переходит на скорость, рекомендуемую счетчиком. Новую скорость можно принудительно указать командой
NEWRATE=n (0:300, 1:600, 2:1200, 3:2400, 4:4800, 5:9600 бод)
однако счетчик Indigo++ не поддерживает скорость свыше указанной им в идентификационном сообщении.

Landis & Gyr ZxB

Для опроса счетчиков семейства Landis&Gyr ZxB (протокол IEC1107) используется драйвер SLB.dll Драйвер работает как через оптопорт, так и через дополнительный интерфейс счетчика (токовая петля). При необходимости применяются ключи DEVADDR, NEWRATE, PASSW, FLAGS.

Замечания.

  • При первом опросе счетчика драйвер присваивает сохраненным параметрам период МЕСЯЦ. Впоследствии администратор может (должен) изменить это свойство в конфигураторе системы. Если период указан неверно, возможна неправильная работа опроса в режиме “smart”.
  • Время счетчика читается командой R2<STX>C003() в режиме программирования, что возможно только в случае наличия пароля доступа (ключ PASSW=nnnnnnn, заводские значения P1=’00000000’ P2=’1234567’).
  • На одном объекте были замечены проблемы с посуточным вычитыванием ГН. Проблема была решена с помощью режима чтения ГН порциями по двое суток. Для этого необходимо использовать ключ FLAGS=4
  • По поводу использования ключа NEWRATE см. комментарии к счетчику Indigo+.
  • Встречаются счетчики у которых в readout-данных отсутствует информация о серийном номере (идентификаторе) устройства – передается в параметре “0” либо “C.1.0”. С 15августа2007г драйвер не фиксирует ошибку а использует стандартное значение "LGZ00000000". Дополнительно, вы можете использовать ключ FLAGS=64 который заставляет драйвер использовать значение серийного номера из конфигурации системы Электро.

Landis & Gyr ZxD

Для опроса счетчиков семейства Landis&Gyr ZxD (протокол IEC1107) используется драйвер SLB.dll
Необходимо использовать ключ 'FLAGS=16’
В случае нескольких счетчиков на петле использовать ключ ‘DEVADDR=сетевой_номер' (обычно – серийный номер устройства).

Shlumberger SL7000

Для опроса счетчика SL7000 используется драйвер SLB.dll Драйвер работает как через оптопорт, так и через дополнительные интерфейсы счетчика (RS232, RS485).
При работе через оптопорт взаимодействие начинается согласно процедуре рукопожатия IEC1107, в этом случае актуальны команды DEVADDR, NEWRATE.
Для работы через дополнительные интерфейсы необходимо указать команду
PROTMODE=10
В этом случае сразу выполняется попытка связи согласно протокола COSEM / HDLC. Команды DEVADDR, NEWRATE игнорируются. Важные команды – DEVNUM, TERM, CLIENT, PASSW:
PASSW=ABCDEFGH (заводская установка).
TERM=17 - Логический Адрес Устройства, см. далее
DEVNUM =n - Физический Адрес Устройства
Заводская установка DEVNUM=17. При программировании счетчика номер («физический адрес») обычно указывают равным последним (две, четыре) цифрам серийного номера устройства.
CLIENT=k
По умолчанию драйвер использует CLIENT=3 (см. Таблицу). Комбинация ключей PASSW и CLIENT определяет права доступа драйвера к счетчику.

 

Client

SAP

Allowed logical devices

Electricity Utility Laboratory

1

Management Logical device
Electricity logical device

Electricity Utility Field

2

Management Logical device
Electricity logical device

Electricity Reader

3

Management Logical device
Electricity logical device

Gas Reader

4

Management Logical device
Gas logical device

Water Reader

5

Management Logical device
Water logical device

Heat Reader

6

Management Logical device
Heat logical device

End Customer

7

Customer logical device

Manufacturer

120

Management Logical device
Electricity logical device
Gas logical device
Water logical device
Heat logical device
Manufacturer logical device

Resources Upgrader

121

Management Logical device

Engineer

122

Management Logical device
Electricity logical device
Gas logical device
Water logical device
Heat logical device
Electricity logical device

 

Ключ TERM= задает так называемый Логический Адрес Устройства (Cosem logical address). Возможные значения:
01 – Management COSEM Logical Device
17 – Electricity Meter COSEM Logical Device
18 – Gas Meter COSEM Logical Device
19 – Water Meter COSEM Logical Device
20 – Heat Meter COSEM Logical Device
21 – Customer COSEM Logical Device
23 – Manufacturer COSEM Logical Device
По умолчанию, драйвер использует значение TERM=17.
Однако, встречались случаи, когда приходилось использовать установку TERM=1

Драйвер читает журнал событий счетчика (LogBook) и сохраняет его в текстовом файле LogBook_serial.txt в рабочем каталоге либо в указанном опцией PATH, например
PATH=c:/Electro/Logs

При оптимизации протокола взаимодействия обратите внимание на использование ключей RESP, REVERS, HIST, FLAGS. В частности:

  • Ключ RESP задает время ожидания ответа, в миллисекундах (стандартное значение – 5000мс). Иногда требуется увеличить это значение – о необходимости этого сигнализирует регулярное появление кода ошибки -8 («истекло время ожидания ответа») .
  • Ключ REVERS задает время задержки передачи очередного запроса. Время (стандартное значение – 600мс) отсчитывается от момента приема последнего байта из канала связи. Если линия связи «шумит», т.е. периодически читаются случайные байты, отсчет времени REVERS начинается с нуля. Для предотвращения бесконечного ожидания драйвер контролирует период 20*REVERS, по истечении которого происходит безусловный переход на передачу запроса. На чистых линиях связи рекомендуется установить минимальное значение, например REVERS=10. Это существенно ускорит сьем данных.
  • Использование ключа HIST. Счетчик SL7000 хранит 18 «фотографий» регистров данных, сделанных согласно указанного расписания. Чтение всех 18-ти наборов исторических данных занимает достаточно большое время (порядка 5 минут). Ключ HIST указывает драйверу глубину чтения наборов данных.

Значение ключа HIST действует, если драйвер не имеет более приоритетного указания. Например, программа GetDev в режиме «Чтение ГН» со снятой отметкой “smart read” посылает в драйвер команду ‘Читать сохраненные данные, глубина n дней’. Однако, применительно к BillingData это (‘глубина n дней’) не имеет адекватной интерпретации и драйвер использует значение ключа HIST.
Администратор может изменить поведение драйвера. Например, если счетчик запрограммирован на ежесуточное сохранение исторических данных, установите соответствующий период для параметра “Billing Data/ЧТЕНИЕ BillingData”. Это псевдопараметр, в котором драйвер фиксирует факт прочтения набора данных за некоторый интервал (в нашем случае – сутки). Теперь программа GetDev (либо иной механизм опроса) с установленным флагом “smart read” будет выдавать в драйвер команды на чтение конкретных параметров (в т.ч. псевдопараметра “Billing Data/ЧТЕНИЕ BillingData”) за конкретные интервалы времени.

Пример ГН за 30 Октября 2005г (день перехода на зимнее время):

ARRAY [50] [пятдесят получасов]
STRUCTURE [8] запись для 00:00 - 00:30
STRUCTURE [2] start of interval : used to record a new date or the new time when the interval started unusually.
Start of measurement
New time of long clock setting (including EOR or greater than the threshold)
New time of power failure – power down - (including EOR)
New time of long external clock synchro
New time of DST
BYTES 07 D5 0A 1E FF FF FF FF FF FF FF FF 2005 / 10 / 30 XX:XX:XX
BITSTR 0;0;0;0;0;0; status bits : It is a bitstring. Length 6
Bit 5 : Watch dog reset
Bit 4 : DST
Bit 3 : External Clock Synchro
Bit 2 : Clock Setting
Bit 1 : Power failure
Bit 0 : Start of measurement
NULL end of interval : used to record old time when interval stopped unusually.
Old time of long clock setting (including EOR or greater than the threshold)
Old time of long power failure – power up- (including EOR)
Old time of long external clock synchro
Old time of DST
NULL time 1 : used to record old time in case of short disruptions inside the EOR
Old time of short clock setting (smaller than the threshold)
Old time of power failure – power down –
Old time of DST
NULL time 2 : used to record new time in case of short disruptions inside the EOR
New time of short clock setting (smaller than the threshold)
New time of power failure – power down –
New time of DST
INT16 0 канал-1
INT16 51 канал-2
INT16 0 канал-3
INT16 30 канал-4
STRUCTURE [8] запись для 00:30 - 01:00
NULL
NULL
NULL
NULL
INT16 0
INT16 33
INT16 0
INT16 26
STRUCTURE [8] запись для 01:00 - 01:30
NULL
NULL
NULL
NULL
INT16 0
INT16 15
INT16 0
INT16 23
STRUCTURE [8] запись для 01:30 - 02:00
NULL
NULL
NULL
NULL
INT16 0
INT16 20
INT16 0
INT16 25
STRUCTURE [8] запись для 02:00 - 02:30
NULL
NULL
NULL
NULL
INT16 0
INT16 18
INT16 0
INT16 24
STRUCTURE [8] запись для 02:30 - 03:00
NULL
NULL
NULL
NULL
INT16 0
INT16 15
INT16 0
INT16 24
STRUCTURE [8] запись для 03:00 - 03:30
NULL
NULL
NULL
NULL
INT16 0
INT16 22
INT16 0
INT16 27
STRUCTURE [8] запись для 03:30 - 04:00
NULL start of interval
STRUCTURE [2] end of interval
BYTES FF FF FF FF FF 04 00 00 FF FF FF FF XXXX / XX / XX 04:00:00
BITSTR 0;0;0;0;1;0;
NULL
NULL
INT16 0
INT16 24
INT16 0
INT16 26
STRUCTURE [8] запись по-новому для 03:00 - 03:30
STRUCTURE [2] start of interval
BYTES FF FF FF FF FF 03 00 00 FF FF FF FF XXXX / XX / XX 03:00:00
BITSTR 0;0;0;0;1;0; bit4 : DST
NULL end of interval
NULL
NULL
INT16 0
INT16 22
INT16 0
INT16 27
STRUCTURE [8] запись повторная для 03:30 - 04:00
NULL
NULL
NULL
NULL
INT16 0
INT16 22
INT16 0
INT16 26
И так далее…

Из данного фрагмента ясно, что часы счетчика досчитали до 04:00 (по локальному времени), после чего произошла установка в 03:00. Также следует обратить внимание что меткой времени снабжена только первая структура (получас), далее метки времени присутствуют только при необходимости.
Получив информацию от счетчика, драйвер выдает ее «наверх» отдельными элементами, каждый из которых снабжен меткой времени по ГРИНВИЧУ. Так, в результате обработки вышеприведенного примера имеем 50 элементов данных. Алгоритм маркировки элементов следующий.

  • Исходное значение внутренней переменной tm устанавливается априорно на начало суток – tm=MakeSec(2005,10,30,0,0,0); где функция MakeSec() следующая:

#define YEARBASE 70
DWORD MakeSec(int year, int mon, int day, int hour, int min, int sec) {
struct tm Tm;
Tm.tm_hour = hour;
Tm.tm_isdst = -1;
Tm.tm_mday = day;
Tm.tm_min = min;
Tm.tm_mon = mon-1;
Tm.tm_sec = sec;
// tm_year must be "current year minus 1900"
if (year<YEARBASE) year += 2000;
else if (year<1900) year += 1900;
Tm.tm_year = year - 1900;
return mktime(&Tm);
Отметим что преобразование в Гринвич выполняет библиотечная функция mktime() которая, естественно, работает согласно установок материнского компъютера.

  • Рассматриваем очередной элемент данных ГН
  • Если в элементе данных есть start-of-interval, выполняется установка tm=MakeSec(year,mon,day,hour,min,sec) с выравниванием на начало периода (period=1800 секунд в нашем примере).
  • Метка времени очередному элементу присваивается от внутренней переменной tm.
  • tm = tm + period
  • переход к п 1)

Алгоритм преобразования OBIS à memind

В счетчике SL7000 все параметры идентифицируются согласно рекомендациям ассоциации DLMS. Каждый элемент данных снабжается уникальным идентификатором, состоящим из последовательности шести групп чисел:

A

B

C

D

E

F

каждая из которых имеет некоторое смысловое значение:
A - Характеристика объекта, который будет идентифицирован (абстрактный объект либо обьект имеющий отношение к электричеству, газу, теплу, воде);
B - физический номер канала для идентификации источника данных;
C - Физическое значение соответствующего источника информации (Ток, Напряжение, Мощность, Объем, Температура и т.п.);
D - определяет результат обработки источника информации согласно определенному алгоритму;
E - детализирует тип измерения, как определено группами значений А – D, для различных вариантов считывания;
F - далее подразделяет результаты, которые частично определены группами значений A-E. Типичным использованием является распределение по различным периодам времени (периоды сброса).
В текстовом виде полный идентификатор может быть представлен в виде комбинации чисел разделенных точкой:
cosid=”A.B.C.D.E.F”

Для преобразования шести-байтового cosid в memind (четырех-байтовое целое без знака) используется функция
//-----------------------------------------------------------------------------
typedef struct { // OBIS-код, упакованный в DWORD
unsigned long E:7; // lo bits
unsigned long D:8;
unsigned long C:8;
unsigned long B:7;
unsigned long A:2; // hi bits
shc;

typedef struct {
union {
shc ShC;
DWORD MemInd;
;
shcosem;
//-----------------------------------------------------------------------------
DWORD Cosem2Memind(BYTE *a) {
shcosem ShCosem;
ShCosem.MemInd = 0;
ShCosem.ShC.A = (a[0]==255) ? 3 : a[0];
ShCosem.ShC.B = (a[1]==255) ? 127 : a[1];
ShCosem.ShC.C = a[2];
ShCosem.ShC.D = a[3];
ShCosem.ShC.E = (a[4]==255) ? 127 : a[4];
return ShCosem.MemInd + 1000;

Специальные OBIS-коды используемые в счетчике SL7000 и драйвере SLB

В счетчике SL7000 практикуется использование специальных OBIS-кодов, для которых при использовании их в запросах на чтение счетчик ведет себя специальныи образом («макрокоды»).


OBIS-код

memind

 

1.1.98.128.1.255

1085359081

Мгновенные значения/ ЧТЕНИЕ ПО СПИСКУ Instantaneous data (phase angle)

1.1.98.128.2.255

1085359082

Мгновенные значения/ ЧТЕНИЕ ПО СПИСКУ Instantaneous data (neutral)

1.1.98.128.3.255

1085359083

Мгновенные значения/ ЧТЕНИЕ ПО СПИСКУ Instantaneous data (Power)

1.1.98.128.4.255

1085359084

Мгновенные значения/ ЧТЕНИЕ ПО СПИСКУ Instantaneous data (RMS)

1.1.98.128.5.255

1085359085

Мгновенные значения/ ЧТЕНИЕ ПО СПИСКУ Instantaneous data (Power factor)

1.1.98.128.6.255

1085359086

Мгновенные значения/ ЧТЕНИЕ ПО СПИСКУ Instantaneous data (phase offset)

255.255.98.133.1.255

-5159319
4289807977

ЧТЕНИЕ ПО СПИСКУ Energy rate registers

255.255.98.133.2.255

-5159318
4289807978

ЧТЕНИЕ ПО СПИСКУ Total Energy Registers

0.0.98.133.5.255

3229293

ЧТЕНИЕ ПО СПИСКУ Demand registers

0.0.99.1.0.255

3245160

ЧТЕНИЕ ГН

0.0.99.98.0.255

3257576

ЧТЕНИЕ LogBook

0.1.98.1.0.100

11601000

ЧТЕНИЕ BillingData

 

 

 

 

 

 

 

 

 

 

 

 

ЦТ5000, ИТЕК-210 с протоколом ЦBase

Для опроса устройств ЦТ5000, ITEK-210 по протоколу ЦBase используется драйвер ITEK.dll.
В Настройке режима необходимо указать сетевой номер устройства:
TERM=n
Дополнительный ключ
MASTCLOCK=1
в настройке режима устройства указывает драйверу Itek.dll режим передачи в Ядро системы Electro специальной команды, содержащей время устройства (Команда передается каждый раз при чтении времени из устройства). По данной команде система выполняет мягкую корректировку времени в компьютере.
Ключ MASTCLOCK=1 применяется, когда к ИТЕК=210 подключено устройство приема сигналов точного времени ItekTIME.