#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..) (описывается далее, применительно к конкретной СУБД).
В частности, может понадобиться указание user – password. Отметим, что Ядро Электро будет использовать user – password указанный в реестре Виндовз:

Зачастую при ручной настройке приходится выполнять действия по созданию [файла] БД. Обычно это делается с помощью инструментария конкретной СУБД.
Если процесс настройки 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 |



