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

Синхронизация времени в системе Electro

При синхронизации времени в устройствах в качестве эталонного времени используется время сервера на котором запущены ядро Electro и драйвер устройства.

Поддержку эталонного времени в сервере рекомендуется настраивать штатными средствами синхронизации времени в операционной системе согласно протокола NTP.
Как исключение, синхронизацию времени в сервере можно настроить средствами системы Electro. В частности, администратор Electro может указать в свойствах некоторого устройства флаг MASTCLOCK (см. документ DllOption.doc), что указывает на то что драйверу устройства разрешено рассматривать время в устройстве в качестве источника эталонного времени. В этом случае Ядро, получая от Драйвера устройства сообщения с метками точного времени, осуществляет корректировку темпа хода часов сервера на плюс-минус 2 секунды в минуту (системный вызов SetSystemTimeAdjustment()).

В комплекте Электро имеется драйвер GPS.dll назначение которого – прием метки времени от GPS-приемника и передача в Ядро. См. DllOption.doc

Автоматическая синхронизация времени в устройстве выполняется драйвером (см. описание флага AUTOSYNCH в документе DllOption.doc). Механизм корректировки зависит от конкретного протокола передачи данных. Основной принципы:
1. в часах устройства разрешено менять только разряды секунд.. Например, время в устройстве необходимо (увеличить) на +50 секунд. В некоторый момент драйвер готов выдать команду установки времени. Пусть время в устройстве в этот момент ЧЧ:ММ:25 (это время известно, так как ранее драйвер обязательно должен был прочесть время из устройства, при этом фиксируется текущее время в сервере). Согласно декларируемому принципу, можно изменить только значение секунд – с 25 до 57 (оставляем запас до завершения минуты), т.е. значение корректировки составляет +32 секунды.
Так как допустимое в данный момент значение корректировки (+32 секунды) не компенсирует имеющееся рассогласование (+50 секунд), то команда будет выдана при AUTOSYNCH=2 (см. DllOption.doc).
Если же установлен флаг AUTOSYNCH=1, то корректировка выполняться не будет.
2. Драйвер отказывается выполнять автоматическую корректировку, если рассогласование превышает MAXDELTA (300..600 секунд, в зависимости от реализации драйвера). В этом случае необходимо выполнить прямую установку времени – средствами фирменного программного обеспечения либо через драйвер путем передачи ему команды (job) “SYNCH=1” (см. следующий пункт).
3. Ручная установка времени в устройстве может быть выполнена утилитой GetDev.exe из комплекта Электро. Собственно установка времени выполняется Драйвером, после получения от GetDev.exe специального задания “SYNCH=1”.

В БД Electro использовалась таблица Trend. В новой версии системы появилась таблица Trend2. Что это такое?

Таблица Trend (см. документ ElectroCNF.doc) накапливает результаты опроса устройств. Со временем и в зависимости от количества устройств и интенсивности опроса она может достигать значительных размеров.
Справка. От одного электронного счетчика электроэнергии в сутки поступает до 500 значений, необходимых для коммерческого учета (графики нагрузки, сохраненные значения и прочее). За три года (рекомендуемый срок хранения коммерческих данных) – 600,000 значений. Хранение одного значения в файле БД требует около 50 байт.
Таким образом, база коммерческих данных крупной системы (100 счетчиков) может хранить 60 млн. значений и достигать размера 3 Гб. Опыт эксплуатации системы Electro с БД такого размера показывает что в принципе система остается работоспособной на стандартном компьютере (~2Ггц) и с использованием «легкой» СУБД MySQL. Однако, начинают ощущаться задержки выборки данных.

Как правило, система Electro используется не только для формирования коммерческих отчетов, но и для технического учета и оперативного контроля. При этом счетчики опрашиваются каждые 1..5 минут. За каждый опрос с счетчика считывается до 100 значений, за сутки соответственно сохраняется до 100 тыс. значений с одного счетчика. За три месяца (рекомендуемый срок хранения оперативных данных) размер БД может достигать 5..10 млн. значений для одного счетчика.


Приведенные расчеты и опыт эксплуатации указывают на необходимость использования более производительного сервера БД в случае применения Electro в режиме оперативного контроля.

Учитывая вышеизложенное, в новой версии Electro используется более эффективный механизм хранения данных в таблице Trend2. Кратко, информация по каждому параметру сблокирована на отрезках оси времени и хранится в одной двоичной записи. Также, используется эффективный алгоритм сжатия такой двоичной записи.
Ранее накопленная в таблице Trend информация переносится в таблицу Trend2 с помощью специальной программы ConvertDB.exe. При этом физический размер БД сокращается в 4..5 раз (до приблизительно 10 байт на запись). Скорость доступа увеличивается более чем в 10 раз.


Для систем оперативного контроля на базе Electro Trend2 с количеством счетчиков до 30..40 специальных решений с производительным сервером БД не требуется. Для более крупных систем решение принимается после анализа технических требований.

Вся поступающая информация заносится в Trend2, это основное хранилище данных.
Одновременно, коммерческая (=периодическая) информация дублируется в Trend. Это сделано для повышения надежности хранения – в случае проблем с Trend2 коммерческая информация может быть восстановлена с помощью программы ConvertDB.

Формат запуска ConvertDB
CONVERTDB DELETE={0|1| FROMOID={0|oid| WRITE={1|0| SEL={3|2|1|0|
(Красным цветом указано значение ключа по умолчанию).
Ключ DELETE=1 устанавливает режим удаления информации из Trend (после того как она была внесена в Trend2).
Ключ FROMOID используется когда нужно продолжить работу с указанного параметра – например если предыдущее выполнение программы ConvertDB был прервано.
Ключ WRITE=0 отключает запись в Trend2.
Ключ SEL устанавливет комбинацию (двоичных бит) из 1 и 2. Наличие 1 пропускает обработку периодичных параметров. Наличие 2 пропускает обработку НЕпериодичных параметров.

Процесс выполнения программы CONVERTDB отражается в файле electro/logs/convertdb.log

Примеры:
CONVERTDB - в Trend2 переносятся периодичные параметры. Удаление из Trend не выполняется.
CONVERTDB DELETE=1 SEL=1 - в Trend2 переносятся непериодичные параметры (с удалением из Trend)

Как организовать сьем информации с устройств через коммутируемый канал связи?

1. При конфигурировании устройства необходимо использовать Модем типа AT modem (в т.ч. и при применении GSM-модемов).

2. В свойствах Соединения необходимо указать ключ
PHB=тел_номер
Указанный телефонный номер будет передан в модем командой “ATDтел_номер”. Соответственно, в нотации тел_номер разрешается использование набора символов команды ATD для конкретного модема.
Ключ PHB можно указать и в свойствах устройства. Однако, в отличии от других ключей, значение ключа PHB сохраняется в драйвере как свойство канала связи, а не как свойство устройства. Другими словами, если в некотором Соединении имеется несколько Устройств, то будет действовать только одно значение ключа PHB (какое именно из нескольких – не регламентируется).

3. Учитывая изложенное в п.2, необходимо для каждого направления связи создавать отдельное Cоединение с соответствующим ключем PHB. Для данного Соединения необходимо группировать соответствующие Устройства.

Замечания, рекомендации.

В случае подключения нескольких счетчиков к одному модему их необходимо соответствующим образом параметрировать – назначить сетевые номера, указать скорость, соответствующую скорости порта модема. Со стороны драйвера необходимо использовать ключи DEVADDR (протокол IEC1107; также необходимо воспользоваться ключем NEWRATE для избежания изменения скорости) или DEVNUM (протоколы DLMS/COSEM, Модемный протокол ABB).

Следует понимать, что (1) скорость передачи данных в канале связи (между модемами), (2) скорость между модемом и компьютером, (3) скорость между модемом и счетчиком – не связаны жестко между собой!.
На стороне компьютера это не вызывает особых проблем, так как модем автоматически подстраивается под скорость компьютера по первым символам AT-команды. На стороне счетчика модему неизвестно на какой скорости работать с оборудованием. Необходимо явно указать эту скорость (команда AT+IPR=n для GSM-модемов). Не забудьте сохранить эти установки в энергонезависимой памяти!


Типичный набор команд настройки модема на стороне устройства:
ATS0=1 автоответ после первого звонка
AT+IPR=9600 скорость в последовательном порту
AT&D0 игнорировать DTR (для 3-х-проводного кабеля к модему)
AT&W0 сохраняем установки

Другие полезные команды модема:
AT&V просмотр текущей конфигурации модема
AT+CSQ [Siemens GSM MC35] Проверка качества сигнала. Первое число (0..31):

  • менее -113dBm

1..30 -111db .. -53dBm Желательно >15
31 более -51dBm

 

Также, известно что протокол IEC1107 регламентирует начало работы на скорости 300 бод (т.е. счетчик ожидает рукопожатия на этой скорости). В процессе рукопожатия выполняется переход на более высокую скорость. Однако, в процес се работы модем не сможет поменять скорость. Ключем настройки NEWRATE=0 вы сообщаете драйверу что необходимо остаться на скорости 300бод (см. DllOption.doc).

При настройке опроса устройств не рекомендуется в одном XML-задании размещать Устройства с различными Соединениями, так как это может вызвать неэффективною (лишнюю) перекоммутацию в процессе последовательного опроса устройств.
Также следует помнить, что каждое XML-задание завершается раскоммутацией канала связи. Т.е. даже непосредственно следующее задание для того же Соединения потребует повторной коммутации.

Как организовать формирование и автоматическую посылку макетов 30817 и др

В функции ElectroXML() ядра системы (Electro.dll) имеется режим генерации макетов 817 (суточная сводка), 30817 (суточная сводка с почасовым ГН), 30818 (сводка на конец суток) или 30917 (суточная сводка с получасовым ГН). Оболочкой для данной функции является консольное приложение XmlGen.exe:

XmlGen ACTION=9 [INPUT=шаблон.xml] OUTPUT=maket.txt [DATE=date] [CODE=m] [MODES=f]

Необязательный параметр INPUT указывает имя файла с шаблоном макета. В случае отсутствия ключа используется стандартный шаблон
Electro\Settings\MakGen.xml
В случае отсутствия данного файла шаблона таковой будет автоматически создан. В раздел макета 30817 будут включены все параметры с периодом 3600 секунд:
организовать формирование и автоматическую посылку макетов

Обычно, автоматически созданный файл MakGen.xml используют в качестве основы для создания желаемого шаблона макета (удаляются ненужные строки, изменяются значения ключей obj, subj, name).
Ключ DATE задает дату по которой будет сформирован макет (если ключ отсутствует, то за прошедшие сутки). Значение date имеет вид DAYn либо yyyymmddT либо yyyy/mm/dd, например
DAY1 - вчера:
DAY2 – позавчера (в общем, DAYn это сегодня-n);
20041231T – 31 декабря 2004года.
2004/12/31 – 31 декабря 2004года.

Ключ CODE задает формат макета и может принимать значение 817 (суточная сводка), 30817 (суточная сводка с почасовым ГН), 30818 (сводка на конец суток) или 30917 (суточная сводка с получасовым ГН). Ключ указывает секцию шаблона <maket code=”m”> используемую для генерации макета.

Ключ MODES содержит набор флагов управления генерацией макета. Десятичное число f рассматриваем как сумму из чисел 1, 2, 4, 8 :

  • - размещать в макете дополнительную (отладочную) информацию;
  • – использовать для дробной части запятую ‘,’ (по умолчанию – точка).

4 - использовать формат даты ММДД

 

Например
Xmlgen ACTION=9 OUTPUT=c:/mak30817.txt DATE=20050115T
Даст результат

 

В имени выходного файла (OUTPUT=maket.txt) можно использовать специальные комбинации
%b Abbreviated month name
%B Full month name
%d Day of month as decimal number (01 – 31)
%j Day of year as decimal number (001 – 366)
%m Month as decimal number (01 – 12)
%U Week of year as decimal number, with Sunday as first day of week (00 – 51)
%w Weekday as decimal number (0 – 6; Sunday is 0)
%W Week of year as decimal number, with Monday as first day of week (00 – 51)
%y Year without century, as decimal number (00 – 99)
%Y Year with century, as decimal number
%a Abbreviated weekday name
%A Full weekday name
%c Date and time representation appropriate for locale
%H Hour in 24-hour format (00 – 23)
%I Hour in 12-hour format (01 – 12)
%M Minute as decimal number (00 – 59)
%p Current locale's A.M./P.M. indicator for 12-hour clock
%S Second as decimal number (00 – 59)
%U Week of year as decimal number, with Sunday as first day of week (00 – 51)
%x Date representation for current locale
%X Time representation for current locale
%z, %Z Time-zone name or abbreviation; no characters if time zone is unknown
%% Percent sign
Замещения для перечисленных комбинаций формируются по дате макета. Например,
Xmlgen ACTION=9 OUTPUT=c:/%Y_%m_%d.txt DATE=050115T
Даст результат

ВНИМАНИЕ! Внутри командного файла (*.bat) необходимо продублировать символы ‘%’, т.е. использовать строку
Xmlgen ACTION=9 OUTPUT=c:/%%Y_%%m_%%d.txt DATE=050115T

 

Программа XmlGen.exe формирует код завершения 1 в случае успешного завершения. Это может быть использовано, например, для создания скрипта автоматической генерации макета и отправки его по электронной почте:
Xmlgen ACTION=9 OUTPUT=c:/mak30817.txt DATE=DAY1
if ERRORLEVEL 1 GOTO err1
"c:/Program Files/The Bat!/THEBAT" /MAILU=tec;TO=obl@mail.ua;S=maket;ATTACH= c:/mak30817.txt;SEND /EXIT
if ERRORLEVEL 1 GOTO err3
exit 1
:err1
echo ОШИБКА ГЕНЕРАЦИИ МАКЕТА
exit -10
:err3
echo ОШИБКА ОТПРАВКИ ПОЧТЫ
exit -100