Версия 2.4
  • история версий
  • описание
     канал ALRM
     канал CTRL
     канал DEMO
     канал FILE
     канал LOG
     канал MYSQL
     канал RS232
     каналы SSL-TX/SSL-RX
     каналы TCP-TX/TCP-RX
     каналы UDP-TX/UDP-RX
  • лицензия (GPL): rus, eng
  • download
  • протокол DTP/DIA
    Версия 2.3
  • описания:
     dia
     dia_pro
     dia_file
  • dia-on-floppy (lite)
  • download (for win32 only)
  • лицензия:
     (LGPL) rus, eng
     коммерческая
    ENGLISH
  • short description
  • thermo on Palm OS
  • IETF internet draft of DTP/DIA

    DIA
    ver.2.4, build 0032, 2007-05-03

    Описание

    Программа содержит набор объектов для реализации сборщиков / источников данных в соответствии с протоколом DTP/DIA. В роли источника данных программа выступает, передавая (ретранслируя) пакеты DTP/DIA. Программа может быть использована для построения мелких и средних распределенных информационно-измерительных систем (ИИС) (до ~100-500 устройств).

    Программа распространяется БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. Данная программа является свободным программным обеспечением, вы можете распространять ее в соответствии с условиями Общей Публичной Лицензии GNU.

    В этом описании следующие термины имеют специальное значение:

    Компиляция

    Программа может быть скомпилирована под Linux или FreeBSD. Перед компиляцией следует запустить сценарий configure, который в зависимости от системы и различных настроек подготовит необходимый сценарий компиляции Makefile.

    Состав программного обеспечения:

    Сценарий автоконфигурирования допускает следующие опции (краткую подсказку можно получить по команде ./configure --help):
    --with-dl
    --without-dl
    Компилировать с поддержкой dynamic linking loader. Если опция не указана, сценарий пытается автоматически определить поддержку системой библиотеки dl. Если программа скомпилирована без поддержки dl, она сможет использовать только встроенные каналы (ключ ModList не распознается).
    --enable-all Все каналы, за исключением указанных явно, компилируются как встроенные.
    --disable-all Ни один канал, за исключением явно указанных, не встраивается в основной блок программы.
    Если не указан ни один из ключей --enable-all и --disable-all, используются явно указанные опции и настройки по умолчанию (см.ниже).
    --enable-CHNL Указанный канал CHNL компилируется как встроенный.
    --enable-CHNL=MODULE Указанный канал CHNL компилируется в модуле dia_MODULE.so.
    --disable-CHNL Указанный канал CHNL не компилируется.
    Если не указан ни один из ключей --enable-CHNL и --disable-CHNL, компиляция канала CHNL определяется ключом --enable-all или --disable-all, а если не указаны и они, то настройками по умолчанию:
    CHNLalrmctrldemofilelogmysqlrs232ssltcpudp
    компилируется?нетданетнетданетданетданет
    --enable-ctrl-select
    --disable-ctrl-select
    Если FIFO канала CTRL открыт в режиме неблокирующего чтения, то в некоторых системах (FreeBSD) вызов select сообщает, что данные доступны (достигнут конец файла), если другой процесс не подсоединен к этому FIFO, что не позволяет использовать select для обнаружения подсоединения другого процесса к FIFO. В таком случае эта ситуация проверяется периодически по таймеру. Когда указан ключ --enable-ctrl-select дескриптор FIFO проверяется вызовом select. Если указан ключ --disable-ctrl-select дескриптор FIFO опрашивается по таймеру вызовом IOCTL FIONREAD. Если не указан ни один из ключей, сценарий определяет необходимый механизм автоматически.

    Сценарий автоконфигурирования тестировался в оболочке bash 2.x.

    Программа тестировалась на Linux RedHat 6.0, Linux Mandrake 8.2/9.0 (ядра 2.2.5, 2.2.14, 2.2.25, 2.4.7, 2.4.18-2.4.21; gcc 2.91.66, 2.96, 3.0-3.2; GNU libc 2.1.1, 2.1.3, 2.2.4, 2.2.5) и FreeBSD 4.5-RELEASE.

    Запуск

    При запуске программы в командной строке можно указать имя файла конфигурации. Если файл конфигурации не указан, используется файл "dia.ini" в текущем каталоге.

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

    Программа может быть запущена как консольное приложение либо как демон - режим работы определяется ключом SilentMode. Журнал программы создается в файле, заданном ключом Journal. Если ключ отсутствует, то в консольном режиме журнал выдается на стандартный вывод (stdout), а в режиме демона журнал не ведется.

    В режиме демона программу можно запускать на стадии инициализации системы, поместив предлагаемый сценарий (diad) в каталог /etc/rc.d/init.d. Этот сценарий может быть использован с одним из трех параметров: start, stop или restart. Перед использованием сценария следует корректно установить переменные окружения, заданные в начале файла:

    Чтобы запуск демона происходил автоматически при старте системы, следует создать соответствующие ссылки при помощи команды /sbin/chkconfig. Например:
     /sbin/chkconfig --level 35 diad on
    В результате выполнения этой команды сценарий diad будет запускаться автоматически при переходе системы в обычный многопользовательский режим (run-level 3) или режим X-Windows (run-level 5).

    Работа программы завершается при получении сигнала SIGTERM или SIGINT (При этом в журнал заносится сообщение 'Caught termination signal...')

    Сигнал SIGHUP вызывает перезапуск программы (при этом заново перечитывается файл конфигурации).

    При возникновении нештатной ситуации, повлекшей за собой генерацию сигнала SIGSEGV (Segmentation fault), в журнал заносится сообщение 'Caught SIGSEGV, aborting...' и восстанавливается стандартная последовательность действий в этой ситуации: аварийное завершение работы программы и создание файла-образа процесса (core dump).

    Настройки программы

    В конфигурационном файле игнорируются пустые строки, строки, начинающиеся с символов '#' или ';', а также текст вне секций (кроме "сокращенного" объявления каналов - см. ниже). Маркеры начала и конца секции (<SectName> и </SectName>) должны находиться в начале строки.

    В текущей версии программы маркер конца секции распознается только по первым двум символам '</', остальные символы до конца строки игнорируются (т.е. можно ввести "упрощенную" форму маркера типа '</>', однако не гарантируется, что в последующих версиях программы эта возможность останется...)

    В одной строке может находиться лишь один ключ:
     KeyName=KeyValue
    Имени ключа (KeyName) может предшествовать любое количество пробелов и табуляций. Имена ключей чувствительны к регистру букв. Нераспознанные ключи игнорируются без предупреждения. Если ключ не требует присваивания значения, то знак равно ('=') можно не указывать. Если ключу задается какое-то значение (KeyValue), то "вокруг" знака присваивания пробелов, не относящихся к значению ключа, не должно быть. За значением ключа строка должна сразу же завершаться. Численные значения ключей могут быть заданы в десятичном или шестнадцатиричном виде (в последнем случае перед числом указывается '0x'). Максимальный размер строки - 256 символов. Ключи в секциях могут быть расположены в любом порядке. Если специально не оговорено, то ключ в секции может быть задан только один раз (все последующие определения будут проигнорированы без предупреждения).

    Секция <General> - общие настройки программы.

    Ключ SilentMode
     Win32[+] Unix[+]
    Win32: Если ключ присутствует, программа пытается запуститься как сервис (или псевдо-сервис - в Windows 95/98).
    Linux: Если ключ присутствует, программа запускается в фоновом режиме (как демон).
    Ключ Journal
     Win32[+] Unix[+]
    Если этот ключ присутствует и содержит корректное имя файла, указанный файл используется как журнал программы, в него заносятся информационные и диагностические сообщения. Если ключ отсутствует, журнал не ведется (в Linux в консольном режиме выдается на stdout).
    Ключ ExtraJrnMsg
     Win32[+] Unix[+]
    Когда ключ присутствует, в журнал помещаются дополнительные сообщения о ходе работы программы (регистрация / добавление / удаление каналов источников / ретрансляторов, создание / удаление устройств). Если ключ отсутствует, в журнал выводятся только важные сообщения.
    Ключ TimerInterval
     Win32[+] Unix[+]
    Данные будут фиксироваться и ретранслироваться не чаще, чем через заданное этим ключом время (в сек). Если за этот промежуток времени придет несколько значений, то зафиксировано будет среднее арифметическое.
    По умолчанию: 60. Мин.значение: 1.
    Ключ RetryOnError
     Win32[+] Unix[+]
    Если при работе с каким-либо каналом произойдет ошибка, то канал будет переинициализирован не позже, чем через заданное этим ключом время (в сек).
    По умолчанию: 60. Мин.значение: 5.
    Ключ StrictConn
     Win32[+] Unix[+]
    Если этот ключ имеет ненулевое значение, то сборщику после инициализации канала обязательно посылается предложение идентификации. Если от сборщика не приходит корректный запрос устройства, то не позже, чем через заданное этим ключом время (в сек), соединение разрывается. По умолчанию ключ имеет нулевое значение: предложение идентификации отсылается сборщикам только, если доступно более одного устройства, а пакет запроса устройства от сборщика ожидается бесконечно долго.
    Ключ ModList
     Win32[+] Unix[+]
    Содержит список модулей (не более 16), загружаемых в начале работы. Имена файлов модулей разделяются запятыми. В Linux-версии важно указать точный путь к файлу (например: './dia_pro.so'). Если ключ отсутствует, то загружаются все динамические библиотеки в текущем каталоге, имена которых начинаются на 'dia_'. Чтобы предотвратить загрузку любых библиотек, надо использовать этот ключ с пустым значением. Если программа скомпилирована с опцией --without-dl, ключ не распознается.
    Ключ ModVersCheck
     Win32[+] Unix[+]
    Если ключ присутствует, то перед загрузкой каждого модуля проверяется его версия. Если версия модуля не совпадает с версией программы, то модуль не загружается. При отсутствии ключа такая проверка не выполняется. Если программа скомпилирована с опцией --without-dl, ключ не распознается.

    Секция <Device> - описание устройства.

    В конфигурационном файле может быть любое количество таких секций. Встретив такую секцию, программа создает объект-устройство с указанными параметрами. Если устройство с указанным идентификатором уже объявлено, то секция игнорируется без предупреждения.

    Ключ ID
     Win32[+] Unix[+]
    Задает идентификатор устройства в формате, описанном в спецификации DTP/DIA. Секция без этого ключа игнорируется.
    Ключ Adjust
     Win32[+] Unix[+]
    Для ретранслирующих каналов, у которых указан ключ Adjusted последнее полученное значение (X) перед посылкой будет корректироваться в соответствии с полиномом:
     a0+a1*X+a2*X2+a3*X3+...
    При этом усреднение не выполняется. Коэффициенты a0,a1,... задаются через запятую. Количество коэффициентов ограничено размером строки (256 симв). Если ключ отсутствует, то корректировка не выполняется.
    Ключ RxChannel
     Win32[+] Unix[+]
    Определяет канал, по которому будут поступать данные от этого устройства. Канал может быть задан тремя способами:
    1. RxChannel=ANY - данные с этого устройства могут поступать по любому каналу.
    2. RxChannel=ChnlName - данные с этого устройства могут поступать по каналу с именем "ChnlName".
    3. RxChannel=(ParmName1=ParmVal1;ParmName2=ParmVal2;...) - создается канал с указанными параметрами и ассоциируется с этим устройством. Обязательно надо указать тип канала. Автоматически подставляется параметр ID, равный идентификатору устройства. Среди параметров можно указать имя устройства и использовать его в дальнейшем.
    Таких ключей в одной секции может быть несколько. Значение по умолчанию отсутствует.
    Ключ TxChannel
     Win32[+] Unix[+]
    Определяет канал, по которому разрешается передавать данные от этого устройства. (Регистрация канала, как ретранслятора, происходит во время работы программы). Канал может быть задан тремя способами:
    1. TxChannel=ANY - данные с этого устройства могут ретранслироваться по любому каналу.
    2. TxChannel=ChnlName - данные с этого устройства разрешено ретранслировать по каналу с именем "ChnlName".
    3. TxChannel=(ParmName1=ParmVal1;ParmName2=ParmVal2;...) - создается канал с указанными параметрами и включается в список разрешенных. Обязательно надо указать тип канала. Автоматически подставляется параметр ID, равный идентификатору устройства. Среди параметров можно указать имя устройства и использовать его в дальнейшем.
    Таких ключей в одной секции может быть несколько. Значение по умолчанию отсутствует.

    Секция <Channel> - описание канала.

    В конфигурационном файле может быть любое количество таких секций. Встретив такую секцию, программа создает канал с указанными параметрами. Обязательно наличие ключа "Type". Секция без этого параметра игнорируется без предупреждения. Виды ключей зависят от типа канала. Можно использовать "сокращенный" вариант объявления канала (записывается с начала строки вне других секций):
     (ParmName1=ParmVal1;ParmName2=ParmVal2;...)

    Общие для всех типов каналов ключи:
    Ключ Type
     Win32[+] Unix[+]
    Задает тип канала. Ключ обязателен.
    Ключ Name
     Win32[+] Unix[+]
    Задает имя канала (макс. - 47 симв.) Имя должно быть уникальным. Программа без предупреждения сама назначит имя каналу, если имя не указано или неуникальное.
    Ключ Adjusted
     Win32[+] Unix[+]
    Используется только для ретранслирующих каналов при использовании корректировки (ключ Adjust в секции <Device>). Если ключ присутствует, то в канал передается откорректированное последнее значение, в противном случае - среднее за TimerInterval значение.
    Ключ MinVal
      Unix[+]
    Определяет диапазон значений, принимаемых за корректные. Если пакет содержит значение, меньше заданного этим ключом, значение отбрасывается, а в журнал программы заносится соответствующее предупреждение (должна быть включена опция ExtraJrnMsg). По умолчанию проверка диапазона не выполняется.
    Ключ MaxVal
      Unix[+]
    Определяет диапазон значений, принимаемых за корректные. Если пакет содержит значение, больше заданного этим ключом, значение отбрасывается, а в журнал программы заносится соответствующее предупреждение (должна быть включена опция ExtraJrnMsg). По умолчанию проверка диапазона не выполняется.

    Пример файла конфигурации:

    <General>
     Journal=dia.log
     ExtraJrnMsg
     TimerInterval=60
     RetryOnError=300
     StrictConn=23
    ;Использование ключа ModList без значения предотвращает
    ;загрузку дополнительных модулей
     ModList
    </General>
    ;Отсутствие ключа SilentMode приводит к запуску программы в нормальном режиме.
    
    <Device>
     ID=0.1/1
     Adjust=-1.25,1,-1.1E-16
     RxChannel=(Type=RS232;Device=/dev/ttyS1)
     TxChannel=ANY
    <Device>