ОПИСАНИЯ
  история версий
  основной модуль (dia)
  модуль dia_pro
  модуль dia_file
  модуль dia_mysql
РАЗНОЕ
  протокол DTP/DIA 1.1.15
  русский перевод LGPL
  коммерческая лицензия
DOWNLOAD
  исходники
Win32:Linux:
dia dia
dia_pro* dia_pro*
dia_file dia_file
 dia_mysql
* - для доступа требуется авторизация

УНИВЕРСАЛЬНЫЙ ВСПОМОГАТЕЛЬНЫЙ МОДУЛЬ (dia_pro)
ver.2.3 build 0028B, 2002-02-05

Описание

Данный продукт является дополнительным модулем для программы поддержки распределенного сбора данных (DIA). Он реализует каналы для приема / передачи пакетов DTP/DIA 1.1.15 по TCP/IP (типы TCP-RX, TCP-TX), для приема / передачи информации по UDP/IP (типы UDP-RX, UDP-TX), каналы, обеспечивающие протоколирование данных в текстовых файлах (LOG) и канал, обеспечивающий наблюдение за состоянием программы и изменение ее настроек в процессе работы (CTRL).

Модуль распространяется БЕЗ ВСЯКИХ ГАРАНТИЙ. Данный модуль не является свободным программным обеспечением, вы не можете свободно распространять его. Ознакомьтесь с условиями использования этого модуля.

Модуль скомпилирован для двух платформ: Linux и Win32.

Linux-версия тестировалась на ядрах 2.2.xx, требует библиотеки GNU libc 2.хх.

Win32-версия тестировалась под Windows 95/98, Windows 2000 и Windows XP. Кроме основного модуля (dia.exe), требуются только стандартные библиотеки: kernel32.dll, user32.dll, advapi32.dll и wsock32.dll.

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

Использование TCP

Модуль предлагает две схемы передачи информации по TCP/IP.
Источник
(ретранслятор)
 Сборщик
TCP-TX TCP-RX
listen
 
accept
send

<-- <-- <--
 
--> --> -->

connect
 
recv
Источник
(ретранслятор)
 Сборщик
TCP-TX TCP-RX

connect
 
send

--> --> -->
 
--> --> -->
listen
 
accept
recv

В первом случае источник привязывается к определенному TCP-порту, при этом он должен иметь IP-адрес доступный для всех сборщиков. Эта схема ориентирована на ИИС, в которых один источник передает данные нескольким сборщикам.

Вторая схема требует, чтобы сборщик привязывался к определенному TCP-пору и имел доступный для всех источников IP-адрес. Такая схема ориентирована на ИИС, в которых один сборщик получает данные от нескольких источников.

Та или иная схема выбирается при помощи ключей Listen или Connect.

Следует отметить, что на функционирование каналов этого типа влияет значение ключа StrictConn из секции <General>. Когда этот ключ имеет ненулевое значение, после установки соединения источник обязательно посылает предложение идентификации, а если не получает корректный запрос устройства, то разрывает соединение. Более того, если сборщик после установки соединения не получает предложение идентификации, то он по своей инициативе разрывает соединение. Таким образом, возможна следующая ситуация: источник предоставляет данные только с одного устройства, а ключ StrictConn=0; в настройках сборщика указано ненулевое значение StrictConn; после установки соединения сборщик, не получив предложение идентификации, разрывает соединение. Чтобы избежать подобной ситуации, надо с обеих сторон либо определить, либо не определять ключ StrictConn.

Для каналов этого типа существует несколько глобальных параметров, они задаются в секции <TCP defaults>:

Ключ ReuseAddr
 Win32[+] Linux[+]
Когда этот ключ присутствует, к сокетам каналов, у которых задан ключ Listen, применяется TCP-опция SO_REUSEADDR. Обычно сокет не может быть привязан к локальному адресу (TCP-порту), который уже используется. Тем не менее, любое соединение идентифицируется парой адресов: локальным и удаленным. Таким образом, существование двух (и более) сокетов с одинаковыми локальными адресами не является проблемой до тех пор, пока их удаленные адреса различаются. Опция SO_REUSEADDR позволяет использовать эту возможность. В некоторых случаях система не позволяет программе привязаться к только что освобожденному порту, пока не дождется подтверждения приема всех данных, передававшихся через соответствующий сокет. В таком случае можно использовать этот ключ.
По умолчанию: опция не применяется.
Ключ KeepAlive
 Win32[+] Linux[+]
Когда этот ключ присутствует, к сокетам каналов применяется TCP-опция SO_KEEPALIVE. Использование этой опции позволяет посылать TCP-пакеты "keep-alive" при длительном отсутствии активности в TCP-соединении. Такие пакеты позволяют убедиться, что соединение еще существует. Период посылки таких пакетов определяется настройками операционной системы (порядка 1-3 часов). По умолчанию: опция не применяется.
Ключ MaxBacklog
 Win32[+] Linux[+]
Ключ определяет размер очереди запросов на соединение для сокетов каналов, у которых задан ключ Listen. Если программа не успевает выбирать запросы из этой очереди, новые запросы отвергаются (другая сторона получает "Connection refused").
В Linux для ядра 2.2.x этот параметр задает очередь уже подтвержденных запросов, тогда как размер очереди запросов определяется в настройках операционной системы.
По умолчанию: 5.
Win32: Макс.значение: 5?
Linux: Макс.значение: 128 (можно изменить в настройках системы).
Ключ Socks5srv
 Win32[+] Linux[+]
Ключ определяет имя SOCKS5 сервера. Имя задается в виде IP:port или domainname:port (в последнем случае IP-адрес определяется при инициализации модуля). Если порт не указан, подразумевается 1080. Использование SOCKS5 возможно (но не обязательно) только, если этот ключ определен.
Ключ Socks5user
 Win32[+] Linux[+]
Ключ определяет имя пользователя при аутентификации на SOCKS5 сервере.
По умолчанию аутентификация не используется.
Ключ Socks5pass
 Win32[+] Linux[+]
Ключ определяет пароль при аутентификации на SOCKS5 сервере.
По умолчанию аутентификация не используется.

Параметры каналов:

Ключи Listen и Connect взаимоисключающие. Приоритет имеет Listen (используется по умолчанию).

Ключ Type
 Win32[+] Linux[+]
Задает тип канала. Ключ обязателен. Для канала-источника (ретранслятора) надо указать TCP-TX, а для канала-сборщика - TCP-RX.
Ключ Listen
 Win32[+] Linux[+]
Программа привязывается к указанному порту и "слушает" его, ожидая соединения.
По умолчанию для TCP-RX: 5015.
По умолчанию для TCP-TX: 5014.
Ключ Connect
 Win32[+] Linux[+]
Программа устанавливает соединение по указанному адресу. Адрес задается в виде: IP:port или domainname:port.
По умолчанию для TCP-RX: 127.0.0.1:5014.
По умолчанию для TCP-TX: 127.0.0.1:5015.
Ключ UseSocks5
 Win32[+] Linux[+]
Когда этот ключ присутствует, для канала соединение устанавливается через SOCKS5 сервер. Имеет смысл только при наличии ключа "Connect" (но не "Listen"!). Ключ игнорируется, если в секции <TCP defaults> отсутствует адрес SOCKS5 сервера (ключ "Socks5srv").
Ключ InitStr
 Win32[+] Linux[+]
Сразу после установки соединения посылается заданная строка. Можно использовать для передачи логина/пароля:
    InitStr=\~user\rpassword\r
По умолчанию: отсутствует.
Специальные комбинации:
    \a символ с кодом 7 (bell);
    \n символ с кодом 10 (new line);
    \r символ с кодом 13 (carriage return);
    \t символ с кодом 9 (tab);
    \\ символ с кодом 92 (backslash);
    \~ перед посылкой очередного символа делается задержка 1 сек.
Использование UDP

Модуль предлагает следующую схему использования UDP:

Источник
(ретранслятор)
 Сборщик
UDP-TX UDP-RX

sendto

--> --> -->
bind
recv

Т.е. один канал-источник (ретранслятор) может передавать данные только одному сборщику. При этом сборщик должен обладать известным всем и доступным IP-адресом. Один канал-сборщик может получать данные от различных источников.

Параметры каналов:

Ключ Type
 Win32[+] Linux[+]
Задает тип канала. Ключ обязателен. Для канала-источника (ретранслятора) надо указать UDP-TX, а для канала-сборщика - UDP-RX.
Ключ Listen
 Win32[+] Linux[+]
Программа привязывается к указанному порту и "слушает" его, ожидая соединения. Ключ применим только для UDP-RX.
По умолчанию: 5014.
Ключ Destination
 Win32[+] Linux[+]
Программа отсылает датаграммы по указанному адресу. Адрес задается в виде: IP:port или domainname:port. Ключ применим только для UDP-TX.
По умолчанию: 127.0.0.1:5014.
Использование протоколов

Каналы этого типа обеспечивают протоколирование данных для каждого устройства в независимых файлах. Протокол может вестись в одном из двух форматов: в обычном (в конец файла дописываются время, полученное значение и маркировка физ. величины) и в альтернативном (в файл протокола записываются не больше GraphSize последних значений без времени и единиц измерения). Файл протокола открывается только в момент записи, так что в остальное время он полностью доступен другим программам.

Вывод единицы измерения в протоколе обычного типа можно предотвратить при помощи ключа LogSuppressUnits в секции <General>.

Ключ LogSuppressUnits
 Win32[+] Linux[+]
Если ключ отсутствует, используется обычный формат протокола. Если ключ присутствует, то единица измерения в протокол не заносится.

Формат времени задается ключом LogTimeFormat в секции <General>. Допустимые спецификаторы:

По умолчанию: %c. Если ключу присвоено пустое значение, то время в проотокол не заносится.


Параметры каналов LOG:

Ключ ID
 Win32[+] Linux[+]
Задает идентификатор устройства в формате, описанном в спецификации DTP/DIA. Данные с этого устройства будут помещаться в указанный файл.
По умолчанию: 0.0/1.
Ключ File
 Win32[+] Linux[+]
Имя файла-лога данных с устройства.
По умолчанию соответствует файлу журнала.
Ключ Alternative
 Win32[+] Linux[+]
Задает порядок помещения данных в протокол альтернативного формата.
 Alternative=ASC - протокол содержит данные в порядке поступления (новые в конце).
 Alternative=DESC - протокол содержит данные в порядке, обратном поступлению (новые в начале).
Если ключ отсутствует, протокол ведется в обычном формате.
Использование управляющего канала

Один экземпляр управляющего канала создается при инициализации модуля (в момент загрузки его основным модулем). Предотварить создание управляющего канала можно при помощи ключа CtrlFifoName в секции <General>. Управляющий канал нельзя создать вручную. Управляющий канал может быть удален средствами, которые он предоставляет. Восстановить управляющий канал можно будет только перезапуском программы.

Ключ CtrlFifoName
 Win32[+] Linux[+]
Ключ задает имя FIFO-файла (Linux) или конвейера - named pipe - (WinNT), через который передаются команды для управляющего канала. Если ключу присваивается пустое значение, то при инициализации модуля управляющий канал не создается. Если ключ отсутствует, то используется значение по умолчанию.
По умолчанию: dia.ctrl

В Linux-версии управляющий канал создает файл типа FIFO, через который программа получает команды. Этот файл открывается программой для чтения. После того, как другая программа откроет этот файл для записи, поместит в него команду и закроет файл, управляющий канал прочитает этот файл, закроет его, выполнит команду и вновь откроет файл для чтения. Такой алгоритм позволяет для записи команд в файл использовать echo или cat.

В Win32-версии управляющий канал позволяет создавать консольное окно для ввода команд и отображения результата их выполнения. Консоль открывается при помощи команды Control Console в меню View или в меню иконки System Tray. Чтобы набрать многострочную команду в консоли, используйте '\' перед тем, как нажать [Enter], тогда команда будет продлена на следующую строку.

Чтобы использовать консоль в Windows 95/98 надо в системном реестре установить в 1 значение двоичного ключа HKEY_LOCAL_MACHINE\Software\Lab127 Team\Dia\Win95Legacy (можно импортировать предлагаемый файл con4w95.reg). В Windows 95/98 консоль принадлежит основному процессу, поэтому если щелкнуть по значку, закрывающему консоль, работа программы будет прервана. Чтобы убрать консоль, используйте команду hide. Если программа запущена как псевдо-сервис и иконка в System Tray отсутствует, то отрыть управляющую консоль невозможно.

В Windows NT консоль создается в отдельном процессе и может быть вызвана не только с помощью команды меню, но и непосредственным обращением к функции DiaCtrlConsole в модуле dia_pro.dll с помощью предлагаемого сценария (con4nt.cmd). Взаимодействие консольного процесса и основного процесса осуществляется через конвейер (named pipe). При запуске программа помещает имя конвейера в системный реестр, откуда его потом читает консольный процесс (ключ HKEY_LOCAL_MACHINE\Software\Lab127 Team\Dia\CtrlPipe). Таким образом, даже когда программа работает как сервис, управляющая консоль позволяет оперативно определять состояние программы и выполнять некоторые управляющие действия. Доступ к конвейеру, через который передаются команды, санкционирован только от имени пользователя, с чьими правами была запущена программа. Кроме того, управляющая консоль может быть запущена на другой машине. Для обеспечения работоспособности в этом случае надо вручную указать в реестре правильный сетевой путь к конвейру команд программы (например: \\LAB127_8\pipe\dia.ctrl).

Распознаются следующие команды:

Примеры:

echo chnlstat >dia.ctrl
  В журнал выводится список каналов и их состояние.
echo chnldel TCP#4 >dia.ctrl
  Удаляется канал с именем 'TCP#4'.
echo "add (Type=DEMO;ID=0.0/9)" >dia.ctrl
  Добавляется канал типа DEMO. В этом примере требуются кавычки, т.к. скобки и точка с запятой для командного интерпретатора имеют специальное значение.
cat prof >dia.ctrl
  Если файл prof имеет такое содержание:
add
<Device>
 ID=0.1/9
 RxChannel=(Type=DEMO)
 TxChannel=(Type=LOG;File=9.log)
</Device>
  то будет создано устройство и два канала с соответствующими параметрами.