fatlortroll Чёрт! Вот это телепатия! )) Я вчера перетряхнул проект на OwenCommunication!
У меня в среднем в каждом проекте около 100 BOOL входов и 100 BOOL выходов.
Мои требования были такие:
а) Не привязывать переменные программного IO к дереву конфигурации. То есть, не вписывать туда все-все переменные IO, чтобы если в дереве надо что-то удалить или заменить, потом их не перенабивать руками (о том, что их можно выгрузить-загрузить в CSV я знаю).
б) Получать статус каждого устройства в дереве программно. То есть если у меня один модуль IO отвалится, я хочу про него знать. И даже в визуализации я делаю системную страницу, где показываю состояние всего IO аппаратно. Например, мне ж надо знать что у меня отвалился модуль термодатчиков - и аварийно отключать нагрев.
в) Ускорить опрос или сделать его контролируемым - чтобы точно знать, что и как будет опрашиваться и в какой последовательности.
В итоге в соотнесении IO я забираю одну-две переменную (например для модулей IO - битовую маску и счётчик входов), а потом прям в коде разбираю их побитно как мне надо. Если именится способ опроса устройства или что-то будет копипаститься между проектами, то код копипастить проще.
OCLка укорила опрос в 1,5 раза. Я вчера (как раз Евгению Кислову слал на мыло) написал под неё свою обёртку - массив, где задаются построчно данные, которые надо писать-читать, чтобы наглядно всё было.
Оно рработает, и работает хорошо! В далёком будущем я думаю для себя написать какую-то простую программку (может на Visual Basic), в которой можно будет создавать модули IO, их переменные и привязку к битам, а она мне будет генерировать тот самый код для опроса этого всего.
Прикладываю картинки, хвастаюсь:
Вот так обычно обращаются через OCL к устройствам OCL-MB-Request-1.gif
Из-за этого получается жёсткая копипаста, в которой надо не забывать менять адреса и регистры: OCL-MB-Request-2.gif
Я замутил структуру, которая у меня описывает один регистр. Получился аналог "Канал IO" в штатном Slave-устройстве CodeSys: OCL-MB-Request-3.gif
Дальше описал все свои "каналы" в виде массива этих структур: OCL-MB-Request-4.gif
Ну и всё, дальше циклически беру из массива нужные данные и даже FB опроса, и выполняю: OCL-MB-Request-5.gif
Страница с инфой про IO выглядит у меня так: OCL-MB-Request-6.gif
Инфу для IO и программы я беру вот так (тут канал 1 берётся из OCL, а каналы 2 и 3 - из штатного дерева устройств): OCL-MB-Request-7.gif
И побитово я всё IO после OCL разбираю примерно так: OCL-MB-Request-8.gif
Вот для формирования этого всего кода я в будущем хочу накатать скрипт, хоть какой-то =)
ИТОГО: OCL я буду применять для простого и быстрого опроса модулей IO в щите. А для внешних линий пока останусь на штатных средствах.
Сорри, меня понесло! Для меня OCL, моя обёртка, и идея набросать себе программу-скрипт для генерации кода опроса - это ща прям открытие! Не мог не поделиться! =)