#define ALLPAR_BYMASK 1 // Бит0: 0 - выборка согласно списка устройств/параметров в секции query

// 1 - список игнорируется, выборка согласно флагов ALLPAR_xxx

#define ALLPAR_DEVICE 2 // Бит1: учитывать список устройств

#define ALLPAR_PERIOD 4 // Бит2: выборка периодичных пареметров

#define ALLPAR_NOPERIOD 8 // Бит3: выборка непериодичных пареметров

// один из флагов ALLPAR_NOPERIOD и ALLPAR_PERIOD д. б. указан

#define ALLPAR_ORIG 16 // Бит4: параметры, появляющиеся в БД "извне" (ATTR_ORIG+ATTR_HAND).

#define ALLPAR_CALC 32 // Бит5: вычисляемые параметры

// хотя бы один из флагов ALLPAR_ORIG и ALLPAR_CALC д. б. указан.

// Обычно, используется ALLPAR_ORIG

#define ALLPAR_FORMAT 64 // Бит6: Генерировать в выходной документ упрощенный формат данных.

// По умолчанию (Бит6 не установлен) данные генерируются в упакованном формате.

// Это сокращает расход памяти и времени при передаче и последующем импорте (ACTION=3)

// Однако для сторонних систем появляются некоторые трудности при анализе упакованного

// формата. В этом сл. рекомендуется установить Бит6 для вывода в упрощенном формате.

// Примеры:

// 0 - строго по списку в XML-документе

// BYMASK+DEVICE+ORIG+PERIOD+NOPERIOD - все оригинальные параметры для указанных устройств

// BYMASK+ORIG+PERIOD - все оригинальные периодические параметры для всех устройств

В имени выходного файла (OUTPUT= file) можно использовать специальные комбинации

%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

Замещения для перечисленных комбинаций формируются по текущей метке времени либо, в случае ACTION=9 по дате макета (ключ DATE). Например, команда

Xmlgen ACTION=9 OUTPUT=c:/%Y_%m_%d. txt DATE=050115T

Создаст файл c:/2005_01_15.txt

В качестве имени входного файла (INPUT= file) можно указывать шаблон. В этом случае утилита XmlGen.exe (версия, начиная от 01.01.2001) будет последовательно выполнять команду для всех файлов. Например

XMLGEN ACTION=3 INPUT=*.xml FDELETE=1

выполнит импорт всех файлов *.xml и удалит успешно выполненные файлы.

Пример. В файле OPROS.xml перечислены некоторые переменные БД Electro. Нам необходимо выполнить чтение этих переменных из устройства, причем необходимо указать диапазон выборки данных:

XMLGEN ACTION=5 INPUT=opros. xml OUTPUT=result. xml FROM=DAY4 TO=DAY1

4.3.1 Генерация макетов

Для генерации стандартных макетов 30817, 30818, 30917 и 817 используется вызов консольного приложения XmlGen.exe:

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

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

Ключ OUTPUT указывает имя файла для результата. В имени файла можно указывать специальные комбинации, например OUTPUT=c:/maket_%Y_%m_%d.txt (см. предыдущий раздел).

Ключ DATE указывает метку времени которая будет использована для генерации макета. Синтаксис метки –

CURDAY текущий день

LASTDAY предыдущий день

DAYr DAY0=CURDAY, DAY1=LASTDAY, DAY2 – предпредыдущий день и т.д.

LASTMON предыдущий месяц

MONTHr MONTH0 – текущ.месяц, MONTH1= LASTMON, MONTH2 – предпредыдущий месяц и т.д.

yyyy год

yyyy/mm

yyyy/mm/dd

Если ключ DATE отсутствует, используется значение LASTDAY.

Ключ CODE указывает код (тип) генерируемого макета. В настоящее время реализована генерация макетов

30817 - суточная сводка с почасовым ГН. Первое число в строке – суточное потребление.

30818 - сводка на конец суток

30917 - суточная сводка с получасовым ГН

817 - суточная сводка

Ключ MODES указывает набор флагов управления генерацией макета. Десятичное число f следует представить в виде суммы чисел (флагов) 1, 2, 4, 8, 16. Например, 11=8+2+1. Значения флагов:

1 - размещать в макете дополнительную (отладочную) информацию. Используется только на этапе отладки генерации макетов;

2 - использовать для дробной части запятую ‘,’ (по умолчанию – точка) в представлении данных;

4 - использовать сокращенный формат даты ММДД (без года) в заголовке макета;

8 - взять последнее значение в интервале выборки. Флаг влияет на генерацию макетов 817, 30818. Для этих макетов интервалом выборки являются «сутки» и флаг указывает, какое значение в выборке (первое или последнее) будет выбрано для размещения в макете.

В случае, если требуемый формат макета отличается от генерируемого утилитой XmlGen, рекомендуем решить поставленную задачу с помощью ГенератораОтчетов системы Электро – см. пример шаблона отчёта MakGen.xls. Используется следующий принцип – формируется отчёт, содержащий набор данных необходимых для генерации отчета. Затем запускается макрос, выполняющий запись данных с листа Excel в файл требуемого формата.

Данный процесс можно автоматизировать – запустить пакетный ГенераторОтчетов RepGen.exe (см. описание):

REPGEN RID=ИдентОтчета DT1=МеткаВремени RUN=ИмяМакроса


Консольное приложение mak2xml.exe выполняет преобразование макетов 30817, 30917 и т. п. в xml-формат, применяемый в системе Электро для импорта данных. Синтаксис командной строки:

Mak2xml file [DELETE] [IMPORT]

где

file – имя файла с макетом. Можно указывать шаблон имени, например *.txt. В этом случае выполняется обработка всех подходящих файлов;

DELETE – удалять успешно обработанные файлы. Файлы, в процессе обработки которых возникла ошибка, не удаляются! Для поиска причины ошибки см. файл electro/logs/mak2xml.log;

IMPORT – выполнять импорт сгенерированного xml-файла.

В результате работы утилиты Mak2xml создаются выходные файлы с именем входного файла и расширением xml.

Работа утилиты Mak2xml протоколируется в файле electro/Logs/Mak2Xml.log

Утилита возвращает код завершения 1 при успешном выполнении либо -1 в в случае ошибки.

Использование ключа IMPORT, например

Mak2xml test30817.txt IMPORT

идентично выполнению последовательности

Mak2xml test30817.txt

Xmlgen ACTION=3 INPUT= test30817.xml

Требования к входному файлу с макетом. Макет – это текстовый файл, состоящий из первой строки (заголовок), строк данных и последней строки (концевик).

Заголовок – это строка вида

((//code: [[yy]yy]mmdd:obj[наименование][:subj]:++

где code - код макета (30817 и т. п.);

mmdd - (либо yymmdd либо yyyymmdd) – дата макета. В случае отсутствия года (yy) его значение устанавливается эмпирически, в зависимости от текущего времени (это может быть текущий либо предыдущий год);

obj - код объекта;

subj - дополнительный код объекта.

Строка данных имеет вид

(line[наименование]):val1 [*размерность][:val2 …]

где line - код присоединения. Код должен состоять из десятичных цифр (не более 7 цифр);

val1 - (val2, val3 и т. д.) – значения (целые либо вещественные числа). Количество и смысл значений определяется кодом макета;

наименование, размерность - дополнительные (необязательные) свойства. Эти свойства отсутствуют в общепринятом формате макетов, однако помогают упорядочить БД Electro, формируемую при импорте макетов.

Концевик имеет вид

==))

Принцип работы программы. В системе Электро данные идентифицируются серийным номером устройства и индексом параметра в устройстве (так называемый memind).

Некоторый макет рассматривается системой как сообщение, поступившее от некоторого устройства с серийным номером obj (либо obj_subj).

Параметрам, находящимся в строке line, присваиваются индексы

memind = line*100 + n*10 + k

где n - число (0,1, ..9) сопоставляемое коду макета (0 для 30817, 1 для 30917, 2 для 30818);

k - число (0,1, ..9) используемое для индексации типов значений в строке.

Используя вышеприведенные соглашения, программа mak2xml преобразует текст макета в xml-формат, принятый в системе Электро для экспорта/импорта данных. Вид xml-документа для некоторого макета см. в примере ниже.

Формат строки данных макета 30817 (суточное потребление с часовым графиком нагрузки).

Первое поле (индекс line*100+0*10+0, период сутки) содержит суточное потребление. Следующие 24 поля содержат часовой график нагрузки (индекс line*100+0*10+1, период 3600). Для дня перехода летнее <-> зимнее время указываетсязначений в порядке естественного следования.

Формат строки данных макета 30917 (суточное потребление с получасовым графиком нагрузки).

Первое поле (индекс line*100+1*10+0, период сутки) содержит суточное потребление. Следующие 48 поля содержат получасовой график нагрузки (индекс line*100+1*10+1, период 1800). Для дня перехода летнее <-> зимнее время указываетсязначений в порядке естественного следования.

Формат строки данных макета 30818 (показания счетчиков на конец суток).

Строка в общем случае может содержать до десяти полей. Каждое поле индексируется отдельно (индекс line*100+2*10+i для i-го поля, период 0).

Внимание! Данные привязываются к метке времени следующих суток.

Пример. Имеем файл макета test30817.txt

((//30817:080101:0000001:222:++

(1000):300:1:2:3:4:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:

==))

Расширенный формат может иметь следующий вид:

((//30817:080101:0000001”Киевский ЛВЗ:222:++

(1000Приём А+):300*kWh:1:2:3:4:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:

==))

Выполнение команды Mak2xml test30817.txt IMPORT приведет к появлению в БД Электро информации

Промежуточным результатом работы программы был xml-документ


Консольное приложение LGXml2xml.exe выполняет преобразование файлов специального формата (C300 Dialog Center) в xml-формат, применяемый в системе Электро для импорта данных. Синтаксис командной строки:

LGXml2xml file [DELETE] [IMPORT]

где

file – имя входного файла. Можно указывать шаблон имени, например *.txt. В этом случае выполняется обработка всех подходящих файлов;

DELETE – удалять успешно обработанные файлы. Файлы, в процессе обработки которых возникла ошибка, не удаляются! Для поиска причины ошибки см. файл electro/logs/LGXlm2xml.log;

IMPORT – выполнять импорт сгенерированного xml-файла.

В результате работы утилиты LGXml2xml создаются выходные файлы с именем rzИмяВхФайла.xml.

Работа утилиты LGXml2xml протоколируется в файле electro/Logs/LGXml2Xml.log

Утилита возвращает код завершения 1 при успешном выполнении либо -1 в в случае ошибки.

Использование ключа IMPORT, например

LGXml2xml test.xml IMPORT

идентично выполнению последовательности

LGXml2xml test.xml

Xmlgen ACTION=3 INPUT= rztest. xml

Пример входного файла

Результат преобразования

Результат импорта в БД Электро


Задача контроля поступления данных особенно актуальна при большом количестве счетчиков и при передаче данных по инициативе клиента (макеты типа 30817, УППД-клиент и т. п.).

Утилита ChkData позволяет несколько упростить эту задачу. Принцип её работы – показать пользователю количество значений в БД Electro с разбивкой по суткам и устройствам/параметрам:

При этом красным цветом показываются счётчики, значения которых отличаются от максимума в строке. Например, по устройству Meter SL7_ стандартное (максимальное) количество контролируемых значений за сутки – 240. По дате 29 марта имеем 230 значений (это день перехода на летнее время). По датам 7-8 апреля значения отсутствуют.

При установке флажка Показывать список параметров выводится расширенная сводка с перечнем контролируемых параметров:

Отметив на сводке некоторый элемент, можно вызвать утилиты DBView (кнопка Просмотреть значения), GetDev (Опросить устройство), ManInput (Ручной ввод). Утилиты запускаются с целеуказанием, что облегчает дальнейшие действия.

По нажатию Обновить данные производится перерасчёт сводки (например, после опроса некоторого устройства).

Состав контролируемых параметров настраивается файлом electro/settings/chkdata.xml – это стандартный формат electroxml.query.select, его можно отредактировать утилитой ElectroXML.exe (что собственно и делается по нажатию кнопки Редактор конфигурации):

5. Конфигуратор Электро

В терминологии Электро МОДЕМ – это абстракция некоторой среды передачи данных (СПД), которой пользуется ДРАЙВЕР (абстракцией драйвера является СОЕДИНЕНИЕ).

Модем типа TCPIP(LAN) – это СПД «IP-сеть».

Пример – имеется устройство Moxa NPort к которому по последовательному интерфейсу подключен счётчик. Устройство имеет ip-адрес, например, 192.168.0.10 и сокет (порт) 4001 соответствует последовательному интерфейсу. Всё что драйвер будет передавать на 192.168.0.10:4001, устройство будет ретранслировать в счётчик и наборот.

Модем типа TCPIP(RAS) – это СПД «Удалённая IP-сеть».

В его конфигурации указывается

rasname,IPADDRESS=ip

порт n

TCPIP(RAS) является обобщением случая TCPIP(LAN), когда целевой ip-адрес (например, того же устройства Moxa NPort) не является постоянно доступным. В операционной системе необходимо создать сетевое подключение (с именем rasname), которое обеспечивает связь с сетью, в которой находится целевой ip-адрес.

Модем типа Windows TAPI указывает на использование созданного в операционной системе модема, например с именем «Standart 9600bps modem». Это имя и указываем в настройке.

Отметим что альтернатива модему типа Windows TAPI в Конфигурации Электро служит модем типа AT-модем, т. е. все настройки модема перенесены в Конфигуратор Электро.

Модем типа «Модемный пул» - это надстройка над некоторым списком других модемов в Конфигурации Электро.

Поясним это на примере большого объекта с десятками подстанций, с которыми связываемся через AT-модем. Но производительности одного модема недостаточно, поэтому принимается решение поставить четыре AT-модема. Однако, появляется неудобство – приходится «расписывать» подстанции по модемам («пс№1 и пс№2 опрашивать через модем№1, пс№3 – через модем №2 и т. п.»). А если мы хотим временно отключить один модем? Выход – создать «Модемный пул», в котором перечислить идентификаторы AT-модемов – например так - @1,2,3,4 (вместо 1,2,3,4 подставить конкретные значения ModId каждого модема.

Теперь весь опрос будем производить через единственный модем «Модемный пул» - ядро Электро будет самостоятельно выбирать какой AT-модем использовать для связи.

6. Настройка внешних СУБД

Вариант Ядра electro_odbc.exe (для использования переименовывается в electro.dll) предназначен для работы с внешней СУБД с ODBC-интерфейсом. Тип используемой СУБД указывается в лицензии electro. ini.

В соответствии с указанным типом СУБД, Ядро Электро учитывает особенности настройки и поведения конкретного ODBC-драйвера (хотя ODBC – это стандарт, однако его реализации для различных СУБД имеют отличия).

Ядро Электро использует два системных ODBC-источника данных с именами ELECTRO и ELECTROCNF (ПанельУправления à Администрирование à ИсточникиДанных(ODBC)):

При запуске, Ядро Электро проверяет наличие этих ODBC-источников. Если ODBC-источник отсутствует, выполняется попытка его автоматического создания.

Также проверяется имя драйвера. Если оно не соответствует указанному в electro.ini типу, ODBC-источник удаляется, после чего выполняется попытка его автоматического создания.

Как правило, требуется дополнительная (ручная) настройка ODBC-источник (кнопка Configure..) (описывается далее, применительно к конкретной СУБД).

В частности, может понадобиться указание userpassword. Отметим, что Ядро Электро будет использовать userpassword указанный в реестре Виндовз:

Зачастую при ручной настройке приходится выполнять действия по созданию [файла] БД. Обычно это делается с помощью инструментария конкретной СУБД.

Если процесс настройки ODBC-источника заканчивается неудачно, можно выполнить «откат» - удалить источник, после чего снова запустить Электро.

Также можно полностью вручную создать и настроить ODBC-источники ELECTRO и ELECTROCNF и только после этого запустить Электро.

Процесс настройки ODBC-источников как правило выполняется итеративно – после появления ошибки останавливаем Электро, выполняем очередной шаг настройки, после чего снова запускаем Электро.

6.2.1. Особенности работы с СУБД FireBird (SQL=FIREBIRD)

Бесплатную СУБД FireBird можно скачать с официального сайта http://www. firebirdsql. org/

Также, необходимо отдельно скачать и установить ODBC-драйвер - http://www. firebirdsql. org/index. php? op=files&id=odbc

Рекомендуется также установить какой-нибудь инструментарий по обслуживанию СУБД FireBird - http://www. /main. nfs? a=ibphoenix&s=:628496&page=ibp_admin_tools

Инструментарий понадобится впоследствии при обслуживании БД FireBird.

После того как ODBC-источники ELECTRO и ELECTROCNF созданы (автоматически системой Электро либо вручную), необходимо вручную доопределить некоторые свойства:

Изначально, FireBird использует login ‘SYSDBAс паролем masterkey’. Укажите эту информацию в реестре Виндовз (см. выше).

Необходимо создать пустую БД (в скриншоте указан c:/electro/electrocnf.gdb). Это делается с помощью стандартной утилиты Firebird ISQL tool:

6.2.2. Работа системы с СУБД Microsoft SQL Server (SQL=MSSQL)

Перед запуском системы Электро необходимо вручную создать два ODBC-источника данных - electro и electrocnf.

При конфигурировании ODBC-источника использовались стандартные установки –

ШАГ1:

ШАГ2:

ШАГ3:

ШАГ4:

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4