Версия 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_pro)
    ver.2.3 build 0028B, 2002-02-05

    Описание

    Данный продукт является дополнительным модулем для программы поддержки распределенного сбора данных (DIA). Он реализует каналы для приема / передачи пакетов DTP/DIA по 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>
      то будет создано устройство и два канала с соответствующими параметрами.