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

ABB Альфа, ЕвроАльфа

Для опроса устройств Альфа (круглый), ЕвроАльфа используется драйвер EMFFLAG.dll.
Поддерживается несколько типов протоколов (ключ PROTMODE в свойствах устройства):
PROTMODE=0 Оптопорт Альфа. От счетчика каждую секунду на скорости 1200 бод следуют команды "Are you ok?" (02 83 C7 89). Компьютер отвечает.
PROTMODE=1 Оптопорт ЕвроАльфа. Компьютер начинает взаимодействие на скорости 300 бод согласно протоколу IEC1107. Используются значения ключей DEVADDR, NEWRATE.
PROTMODE=2 «Модемный протокол» Альфа. Компьютер начинает взаимодействие, обычно на скорости 9600 бод. Используется значение ключа DEVNUM.
PROTMODE=3 «Модемный протокол» ЕвроАльфа. Аналогично PROTMODE=2. Имеются отличия в структуре принимаемых данных; поддерживается расширенный набор классов.

Для модемных протоколов (PROTMODE=2,3) ключ DEVNUM (значение от 0 до 255) задает номер счетчика. Отвечать будет счетчик с заданным номером. Значение DEVNUM=0 зарезервировано для широковещания.
На практике зачастую неизвестно, на какой номер и какую скорость запрограммирован счетчик. Подключитесь к счетчику через оптопорт (PROTMODE=0,1) и наблюдайте диагностическую информацию вида
Read class 33 (offs=0, len=0):
- answ Stat=33 Len=64
rspeed=5 devnum=1

где rspeed может принимать значения:
0 – модемный протокол отключен;
1 - 300 бод; 2 - 1200 бод; 3 - 2400 бод; 4 - 4800 бод; 5 - 9600 бод; 6 - 19200 бод

Счетчики ЕвроАльфа могут иметь коммуникационный интерфейс, тип которого можно определить из обозначения счетчика.
Пример записи типа счётчика: ЕА02RАLX -Р3BF -4
В данном примере ЕА – ЕвроАльфа; 02 – класс точности (0.2S); RА – измерение активной и реактивной энергии; LX – наличие функций L - Многотарифность и хранение данных графика нагрузки X - Расширенная память данных ГН; P3 – конфигурация Телеметрических выходов; Позиция B - Цифровые интерфейсы:
С ИРПС «токовая петля»
B RS-485
S Модемный RS-232
S1 RS-232 (активный)

Счетчики Альфа могут иметь коммуникационный интерфейс «токовая петля» или RS422/485, наличие которого можно определить из обозначения счетчика. Пример – A1R-4-AL-C8-T
A – Альфа; 1 – класс точности (0.2S); R – режим измерения; 4 – четырехпроводная линия; AL – тип дополнительной платы A+; C8 - тип дополнительной платы C (реле).
Интерфейс «токовая петля» имеется в платах реле C4, C8, C24, C28
Интерфейс RS422/485 имеется в платах реле C25, C29

 

Здравствуйте NNN,
по Вашему вопросу относительно ГН для ЕвроАльфы сообщаю следующее:
Блок данных ГН (Class 17) поступающий от счетчика имеет фиксированный размер и содержит информацию за сутки.

Блок данных состоит из заголовка и интервальных записей.
Количество записей фиксировано. Например, для ГН с интервалом 30
минут блок данных всегда содержит 48 записей.

Заголовок содержит дату (день, месяц, год).
Интервальные записи блока содержат информацию о импульсах за соответствующий интервал. В случае если импульсы за интервал не сформированы, используется специальное значение.

Для суток перехода на летнее время (перевод часов вперед) соответствующие интервальные записи помечаются как "не сформированы".

Для суток перехода на зимнее время (перевод часов назад) соответствующие интервальные записи [предположительно] имеют "удвоенное" значение. К сожалению, я не могу утверждать это на 100% (в документации об этом ничего не сказано). Необходимо обождать очередного перехода на зимнее время (на обьекте у меня имеется доступный счетчик).

ДАЛЕЕ, что делает драйвер EMFFLAG.dll с массивом из 48 записей. Маркировка производится метками времени по Гринвичу. Очередная
запись (i = 0..47) снабжается меткой
mktime(день, месяц, год, 0, 0, 0) + i * 1800
где
mktime() - стандартная функция -
"mktime() returns the specified calendar time encoded as a value of type time_t. If timeptr references a date before midnight, January 1, 1970, or if the calendar time cannot be represented, the function returns –1 cast to type time_t"
(день, месяц, год) - Значение из заголовка блока данных ГН.

Алгоритм формирования memind

Информация от устройства приходит в виде набора данных (классов) с номером cl. Внутри класса элементы данных нумеруются порядковым номером ind. Дополнительно, флаг saved указывает содержит ли класс сохраненные (saved=1) либо текущие значения (saved=0). Значение memind вычисляется функцией
memind = CalcMemInd(cl,ind,saved);

//-----------------------------------------------------------------------------
// Convert symbol to 40-based digit (0..39)
// '0'..'9' <==> 0..9
// 'A'..'Z' <==> 11..36
// '.' <==> 37
// (10,38,39 - rezerved)
int Symb2Int(char ch) {
if (ch=='.')
return 37;
if (ch<'0')
return -1;
if (ch<='9')
return ch-'0';
if ((ch<'A')||(ch>'Z'))
return -1;
return (ch-'A')+11;
//-----------------------------------------------------------------------------
DWORD CalcInd(char *s) {
DWORD rez;
int n;
if (strlen(s)>5)
return 0; // error, max 5 symbols
strupr(s);
rez = 0;
for(;*s;s++) {
if ((n=Symb2Int(*s))<0)
return 0;
rez = rez*40 + n;
return rez;
//----------------------------------------------------------------------------
DWORD CalcMemInd(int cl, int ind, int saved) {
char name[32];
sprintf(name, "%X", cl);
return (CalcInd(name)*100 + ind)*4 + 1000 + saved;
//----------------------------------------------------------------------------

Табл.1 Счетчик ЕвроАльфа


cl

ind

saved

Пример

Cl=0
Графики Нагрузки

Ind=1 – Канал1
Ind=2 – Канал2
и т.д.

1

Memind=1005
ГН Канал1

Cl=11
TOU текущего чтения

Класс содержит четыре (i=0,1,2,3) программируемых блока данных.
Каждый блок содержит определенный тип информации.
Например, Блок1 - "kWh received", Блок2 - "kVAh received"
и т.п. Содержимое блока задается на этапе программирования счетчика
Внутри каждого блока содержится четыре (j=0,1,2,3) тарифа
ind = (i*4+j)*4 + 0; - энергия по блоку i в тарифе j
ind = (i*4+j)*4 + 1; - max demand по блоку i в тарифе j
ind = (i*4+j)*4 + 2; - cumulative demand по блоку i в тарифе j

0

Memind=5800
Rate A energy, [1] block 1 (kWh delivered)

Cl=12
TOU предыдущего чтения

Аналогично cl=11

1

Memind=6201
Rate A energy, [1] block 1 (kWh delivered)

Cl=13
TOU предыдущего сезона

Аналогично cl=11

1

Memind=6601
Rate A energy, [1] block 1 (kWh delivered)

Cl = 100 + F*30 + V

где
F – номер фазы (0,1,2 – А,B,C соотв.);
V – номер (тип) измерения:
1 frequency
2 current*10
3 total power factor (arithmetic)
4 kVA
5 current
6 voltage
7 kVAR
8 power factor angle
9 kW
10 2nd harmonic current magnitude
11 voltage angle
12 current angle
13 percent 2nd harmonic voltage
14 total power kVARs
15 total power kW
16 total VA (vectorial)
17 total power factor (0..1)
18 total power factor angle (0..360)
19 V THD
20 I THD
21 arithmetic total power kVA
22 arithmetic total kVAR
23 total power factor (arithmetic)
24 single phase power factor (0..1)

Ind=0

0

 

 

 

 

 

Табл.2 Альфа


Cl

Ind

Saved

пример

Cl=0
Графики Нагрузки

Ind=1 – Канал1
Ind=2 – Канал2
и т.д.

1

Memind=1005
ГН Канал1

Cl=11
TOU текущего чтения

Класс содержит четыре (i=0,1,2,3) программируемых блока данных.
Каждый блок содержит определенный тип информации.
Например, Блок1 - "kWh received", Блок2 - "kVAh received"
и т.п. Содержимое блока задается на этапе программирования счетчика
Внутри каждого блока содержится четыре (j=0,1,2,3) тарифа
ind = i*13 + 0; Общая энергия по блоку i
ind = i*13 + j*3 + 1; Энергия по блоку i в тарифе j
ind = i*13 + j*3 + 2; max demand по блоку i в тарифе j

0

Memind=5804
Rate A energy, [1] block 1 (kWh delivered)

Cl=12
TOU предыдущего чтения

Аналогично cl=11

1

Memind=6205
Rate A energy, [1] block 1 (kWh delivered)

Cl=13
TOU предыдущего сезона

Аналогично cl=11

1

Memind=6605
Rate A energy, [1] block 1 (kWh delivered)