PLC_dll.dll предназначена для сетевого взаимодействия между контроллером
(системой исполнения) или группой контроллеров ADAM 5510, управляющими
технологическим процессом, и системой визуализации данных - программы
отображения технологического процесса (далее программы) с использованием
протокола Plcnet. Количество участников сети может достигать 64 контроллера.
Данная PLC_dll.dll не является модификацией или аналогом Ultranet.dll
из комплекта системы UltraLogik, а создана с нуля на ASM 32 как полностью
независимая альтернатива для встраивания в свою программу верхнего уровня.
Все экспортируемые функции передают и получают параметры по соглашению
stdcall и Вы имеете возможность использовать данную dll совместно со
своими программами визуализации, созданными с использованием Visual Basic,
Visual С++, Delphi. Если не указано явно, то вызываемая функция синхронная!
PLC_dll.dll работает напрямую с драйвером COM порта, независимо от версии
Windows, что позволяет использовать её в ОС Win 98, Win Me, Win 2000, Win XP.
P.S. Вам необходимо один раз написать шаблон программы верхнего
уровня с использованием функций PLC_dll.dll и в дальнейшем вы будете только
модифицировать свою программу под текущие потребности. Вам нет необходимости
использовать OPC сервер и SCADA. Вы и только Вы определяете как будет работать
Ваша система сбора и отображения данных!
Назад
==================================
Основные возможности
- сетевой
обмен по протоколу Plcnet с 64 контроллерами ADAM 5510
- работа с
COM1..COM6. В beta версии только с COM1, COM2
- до 2500
сетевых переменных (Float, Integer, Boolean, Timer). В beta версии до 200
- создание,
сохранение конфигурации сетевого обмена
- управление
активностью отдельных групп (контроллеров) и отдельных сетевых переменных в
группах
- опрос и
передача данных выделены в отдельный поток и не влияют на скорость выполнения
вашей программы
- проверка
качества полученных данных, в случае bad данные запрашиваются повторно, это
позволяет на порядок уменьшить количество сбоев связи при примерно 10-15%
уменьшении скорости передачи
- запись
осуществляется после опроса данных, с подтверждением от контроллера и
трехкратной пере отправкой в случаях сбоя в одном цикле опроса, если не
записалось, то повторяется в следующем цикле и т.д., что позволяет
гарантированно записать данные в контроллер
- функции
для установки адресов ваших переменных для значений тегов, тогда функция опроса
контроллеров будет устанавливать значения тегов в вашей программе во время
своего цикла опроса и отпадет необходимость в накладных расходах на получение
данных
- реализован
таймаут, когда dll не опрашивает контроллеры чаще установленного значения (по
умолчанию раз в 500 ms)
Новые
возможности в версии 2.0 (в полной версии)
- поддержка
1 функции обратного вызова (Callback) пользователя. Вызывается после
завершения цикла опроса и передачи данных. Реализовано для отображения,
обработки данных в программе пользователя
- поддержка
2 функции обратного вызова (Callback) пользователя. Вызывается сразу
после завершения цикла опроса и перед началом цикла записи данных. Реализовано
для передачи данных с одного контроллера в другой контроллер (эмуляция удаленных
переменных)
Примечание:
использование Callback приведет к увеличению общего времени цикла опроса
на время затраченное на выполнение данных функций!
Назад
==================================
Структурные схемы
Структурная
схема, иллюстрирующая взаимодействие программ и потоки данных,
представлена на
рис. 1.
Структурная
схема, иллюстрирующая работу цикла опроса и передачи данных,
представлена на
рис. 2.
Назад
==================================
О скорости
На один символ в физической линии приходится 11 бит (включая стартовый бит).
Поэтому, на прием 100 тегов типа Float, при условии нулевого интервала
между приемом последовательных символов уйдет примерно времени (идеальные
условия):
Передача запроса:
360 * 11 / 9600 = 0,4125 (412.5
миллисекунд) для скорости 9600
360 * 11 / 19200 = 0,20625 (206.2
миллисекунд) для скорости 19200
360 * 11 / 38400 = 0,1031 (103.1
миллисекунд) для скорости 38400
360 * 11 / 57600 = 0,0687 (68.7
миллисекунд) для скорости 57600
360 * 11 / 115200 = 0,0343 (34.3
миллисекунды) для скорости 115200
Получение данных:
460 * 11 /
9600 = 0,5270 (527 миллисекунд) для скорости 9600
460 * 11 / 19200 =
0,2635 (263.5 миллисекунд) для скорости 19200
460 * 11 / 38400 = 0,1317
(131.7 миллисекунд) для скорости 38400
460 * 11 / 57600 = 0,0878 (87.8
миллисекунд) для скорости 57600
460 * 11 / 115200 = 0,0439 (43.9
миллисекунд) для скорости 115200
Общее время:
412.5 + 527 =
939,5 миллисекунд для скорости 9600
206.2 + 263.5 = 469,7 миллисекунд для
скорости 19200
103.1 + 131.7 = 234,8 миллисекунд для скорости 38400
68.7 + 87.8 = 156,5 миллисекунд для скорости 57600
34.3 + 43.9 =
78,2 миллисекунд для скорости 115200
Из этого следует, что 2500 тегов
в идеальных условия будут считываться минимум 2 секунды, при скорости 115200 и
большее количество тегов практически применять нереально!
На практике 62
тега считываются с контроллера за 65 ms, при этом dll использует процессорное
время 3 ms (WinMe P3 - 750)(на Win2000 P4 - 1400 63 ms 1 ms). Dll написана на
ASM и скорость обработки данных очень высока.
На прямое получение
значения тега из массива данных функцией ValTegFloatC уходит 2 такта + вызов
самой функции. Если вы установите функцией SetAddrValFloat адрес переменной для
получения значения тега, то передача значения уже входит в цикл опроса (65 ms "3
ms") и вы не тратите дополнительного процессорного времени!
К тому же вы
можете в ходе выполнения программы устанавливать или сбрасывать активность групп
и тегов (управление опросом). Это значит что Вы определяете, что в данный момент
опрашивается, а что нет! (значит определяете и скорость опроса данных)
Назад
==================================
Скачать
Архив с PLC_dll.dll и программой (примером с исходником на VB6) конфигуратором и описанием функций:
Plc_Dll.pas - файл описаний функций для Delphi-4 - создатель и разработчик
Лунев Игорь!
plcnet32.zip - пример использования PLC_dll.dll для Delphi-4 - создатель и разработчик
Лунев Игорь!
Назад
==================================