Просмотр полной версии : ModBus мастер в ПЛК73
У меня ПЛК73 с двумя RS485, надо один канал отдать компьютерной сети с протоколом ОВЕН (программе ОПМ),
а другой что более сейчас актуально, использовать по ModBus для опроса датчика.
Как я понял, Модбас мастер можно сделать только программно. Сделал программку по документу
"Описание интерфейса библиотеки ФБ для работы с ModBus.(Master)"
с использованием библиотек ModBus SisLibCom ComServise из примеров ив документе.
Для проверки (так как датчика пока нет) считываю в ТРМ138 уставки по функции 03.
Но что-то неправильно работает.
Во-первых очень долго инициализация порта идёт-несколько минут порт не открывается.
Потом вдруг открывается но считывает с ошибкой 255 (тайм-аут), а в буфере приёма какие-то
странные числа.
Какой указывать порт? 1 или 2 ? дело в том, что результат одинаковый...
И где же ошибка? Всё что я изменил по сравнению с примером это поменял MB_ASC на MB_RTU и номера регистров...
пример по своему названию не может содержать ошибку, ведь он наверняка проверялся в работе или даже страшно подумать...
Я думал, этот пример не работает на СПК в КДС3.5 , а он и в ПЛК в КДС2.3 не работает?
Если в примере положенном в диск ошибка и об этой ошибке знают в Овене, то это уже не пример, а диверсия подрывающая
российскую экономику..
Да, ещё: в док. "Номера портов контроллеров ОВЕН для библ SysLibCom" для ПЛК73 написано что RS1-Com0. Но если
номер порта устанавливаешь 0, при работе в кодесис ошибка INVALID:0
Гарчев Евгений
17.06.2015, 13:34
Нумерация портов:
RS1 - Com0
RS2 - Com1
На счет ошибки кодесис при обращении к порту Com0 - давно избитая на форуме тема. Перечисление Ports из библиотеки SysLibCom начинается с Com1, поэтом кодесис выводит ошибку при обращении к Com0, но при этом порт успешно открывается и функционирует.
При организации опроса устройств через библиотеку Modbus.lib - необходимо после установки флага разрешения работы блока "enable" сразу же его снять и ожидать завершения работы блока "complete", после чего уже анализировать наличие ошибки и разбирать буфер. При использовании ф.б. записи формировать буфер на запись при работе блока нельзя.
Посмотрите во вложении пример для ПЛК73 опроса модуля МВ110-1(4)ТД.
Понял, форум вместо документации.. почему Овен упорно
снабжает новые приборы дисками с неработающими примерами
если всем известно что они не работающие?
Сидят как в бункере..
Кстати, что-то похожее на правду ПЛК читает, но впереди несколько
регистров содержащих адрес, номер регистра и ещё что-то.
Что интересно, поставил в программе номер порта 1, но читает
почти одинаково оба порта. А почему открытие порта происходит только через
3-5минут?
Ладно, спасибо за пример сейчас посмотрю..
Пока читает почти тоже самое что и моя программа, т.е. похожее на правду, но
вначале непонятно откуда взявшиеся регистры с адресом, номером регистра
ЗЫ: после того как уменьшил период опроса до 10мс, стало читать вроде бы
то что надо. Странно..
Гарчев Евгений
17.06.2015, 17:42
А Вы в какой момент буфер разбираете? Просто смотрите значения в буфере, который используется с ф.б. из ModBus.lib? Этот буфер используется и для запросов и для ответов, необходимо в нужный момент (после того как блок отработал, но не запустился снова) разбирать данные ответа.
На счет долгого открытия порта - покажите свой проект, как Вы работаете с портом.
Да, правильно, в буфере не корректно смотреть. Сейчас сделал тестовую программку чтения регистров на основе вашей - читает всё правильно и порт быстро открывается.Спасибо.
Единственно, мне кажется, она перегружена таймерами и флагами- попробую упростить.
И ещё, при увеличении цикла программы до 50мс, перестаёт работать- постоянно ошибка таймаута. При 20 ещё работает, а при 50 всё...
Гарчев Евгений
18.06.2015, 12:23
Да, правильно, в буфере не корректно смотреть. Сейчас сделал тестовую программку чтения регистров на основе вашей - читает всё правильно и порт быстро открывается.Спасибо.
Единственно, мне кажется, она перегружена таймерами и флагами- попробую упростить.
И ещё, при увеличении цикла программы до 50мс, перестаёт работать- постоянно ошибка таймаута. При 20 ещё работает, а при 50 всё...
В приемре всего один таймер для каждого ф.б. - таймер задержки после отработки блока.
время цикла 50мс - это многовато для ПЛК, время цикла не должно превышать 20-30мс (по возможности следите за временем цикла и при необходимости разбивайте функционал по разным циклам - оператор Case, чтобы не было превышения 20мс), иначе могут возникать сбои в работе ПЛК, в первую очередь сбои в работе портов.
Тайм-аут был 150мс, делал и 50- без разницы, нужен почему-то частый опрос. Хотя почему бы считанным данным не полежать и не подождать пока я их заберу?
А мне частый опрос не нужен, раз в 2-3 сек и достаточно, зачем зря загружать ПЛК.
Я работу с модбасом хочу в отдельный процесс, чтоб собирал данные, ложил их например в глобальную память. А оттуда уже по мере необходимости брать из основного цикла для обработки и индикации. Я так делал на СПК110 и нормально работает.
На счёт того что 50мс много очень удивлён.. считал что чем больше - тем лучше, никаких быстрых технологических процессов у меня нет. Я даже 100мс. сделал, так как в программе много всяких дел, например, ЖК экраны.
Тайм-аут был 150мс, делал и 50- без разницы, нужен почему-то частый опрос. Хотя почему бы считанным данным не полежать и не подождать пока я их заберу?
А мне частый опрос не нужен, раз в 2-3 сек и достаточно, зачем зря загружать ПЛК.
Я работу с модбасом хочу в отдельный процесс, чтоб собирал данные, ложил их например в глобальную память. А оттуда уже по мере необходимости брать из основного цикла для обработки и индикации. Я так делал на СПК110 и нормально работает.
На счёт того что 50мс много очень удивлён.. считал что чем больше - тем лучше, никаких быстрых технологических процессов у меня нет. Я даже 100мс. сделал, так как в программе много всяких дел, например, ЖК экраны.
А Вы не путаете время цикла ПЛК и период опроса Modbus. Выше было сказано про время цикла ПЛК <= 20 мс, а период опроса данных по Modbus можете сделать хоть один раз в час.
Да вроде не путаю я это. В данном мне примере период опроса Модбаса затягивается с помощью таймера.
Я его переделал так что при цикле ПЛК 10мс, период опроса Модбас стал 1000мс и работает.
Но мне зачем такой маленький основной цикл? Кроме модбаса много чего надо делать..
Но если я создаю конфигурацию задач и например создаю 2 задачи, одна основной
цикл 100мс, а другая работа с modbus с циклом 10мс то установленный цикл ПЛК вообще не играет..
Но что-то пока никак не заработает, хотя всё аналогично делаю..
Так всё-таки откуда такая информация, что цикл ПЛК не рекомендуется делать меньше 20мс?
Первый раз такое слышу, наоборот предупреждают чтоб он не был слишком мал.
Гарчев Евгений
18.06.2015, 16:04
То время, которое Вы указываете в конфигурации задач, это период вызова указанной программы, а не время выполнения цикла программы. А, как раз, время выполнения цикла программы не должно превышать 20 мс.
В примере программа и так разбита по циклам, каждый ф.б. в примере выполняется в 3 цикла, поэтому если Вы вызываете программу раз в 100мс, то тайм-аут должен быть не менее 300мс.
В прочем, конфигурация задач Вам совершенно не нужна, в примере таймер задержки после отработки ф.б. - это и есть период опроса, укажите для этого таймера необходимый Вам период опроса (переменная polling time).
То время, которое Вы указываете в конфигурации задач, это период вызова указанной программы, а не время выполнения цикла программы. А, как раз, время выполнения цикла программы не должно превышать 20 мс.
В примере программа и так разбита по циклам, каждый ф.б. в примере выполняется в 3 цикла, поэтому если Вы вызываете программу раз в 100мс, то тайм-аут должен быть не менее 300мс.
В прочем, конфигурация задач Вам совершенно не нужна, в примере таймер задержки после отработки ф.б. - это и есть период опроса, укажите для этого таймера необходимый Вам период опроса (переменная polling time).
ну да циклом всегда называют время между запусками программы и читал, что время выполнения программы не должно занимать более ..кажется 80% от цикла, а вот ограничение
в абсолютном значении 20мс для времени выполнения программы в цикле .. такого нигде не читал
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot