понедельник, 7 октября 2024 г.

Продолжение по Owen и Codesys

В прошлый раз писал о том как запустить опрос нескольких устройств по протоколу modbus чтобы опрос велся в пакетном режиме - тогда советовали использовать символы, и приходилось делать еще множество преобразований, а еще чтобы сделать опрос сразу 30 устройств пришлось даже расширять память. Оказалось что Овен выпустили давным давно библиотеку, которая так же в пакетном режиме опрашивает модбас устройства и преобразований становится меньше.

Удобно то что добавлять и убирать опрашиваемые устройства можно в коде и гораздо проще чем через конфиг контроллера, хотя и сделал я это немного странновато, но работает. Удобно что в Кодесис есть экспорт программы, который экспортируется целиком в текстовом формате - можно экспортировать кусок программы, лишь один блок FB, что я и сделал и скопировал его в гитхаб гист. Этот блок вызывается из главной программы, и в него передается количество оправшиваемых модбас устройств, адреса которых записаны в отдельном массиве. Вообще там есть еще и множество глобальных переменных, но пока решил не добавлять 


Еще хотел бы написать еще об одной интересной штучке, подсмотрел на форуме, но хочу сохранить еще раз - логика для отображения времени скана программы:


Простейший принцип - фиксируется время каждого цикла и отнимается от времени предыдущего цикла - сработает на любом другом ПЛК, интересно даже проверить это потом как-нибудь.

Еще одна интересная фишка - есть и в документации и снова как всегда пишу тут чтобы не искать в документации:

Как видно на картинке можно задать разные цвета заливки для блока с восклицательным знаком - при разных условиях цвет будет разный. При этом удобно использовать массив цветов (в данном случае cell_err, причем обратить внимание на тип DINT - цвет требует больше памяти чем просто INT) и цикл для задания цветов для нескольких устройств. Конечно же даже если условий сработает несколько, то цвет останется в итоге по последнему условию, но в данном случае такое поведение не принципиально, потому что при любом раскладе требуется обратить внимание на состоянии ячейки. Чтобы при нормальной работе не отображать восклицательный знак - его показ можно скрыть по условию если цвет будет равен нулю, но в конструкции добавляется NOT - потому что свойство невидимости (или тогда <>0 без NOT)
.cell_err[1]=0
И еще кое-что. Для того чтобы реализовать мигающий красный восклицательный знак, пришлось добавить мигающий бит в программу. Сначала сделал на таймерах ,а потом увидел что есть готовый блок в библиотеке Utils:


Комментариев нет:

Отправить комментарий