Для контроллера Modicon M238:
Эт как бы дефолт, а не рекомендация. Честно говоря, не понимаю о каком именно производителе Вы говорите?Задача MAST (главная задача) может конфигурироваться как периодическая или циклическая.
По умолчанию задача MAST автоматически создаётся как циклическая, со средним уровнем
приоритета (15) и с интервалом 20 мс
И тут как бы несколько иная ситуация, так что сравнивать вообще неуместно:http://i.imgur.com/QxzPEqL.png
Последний раз редактировалось spectrum48k; 21.09.2015 в 14:46.
Про CASE в опросе... Таки да, есть смысл его оптимизировать. По крайней мере с одним тензопреобразователем, у которого свой, но похожий на модбас протокол, наблюдается существенная разница. Задача как раз стоит опрашивать его как можно чаще. Сильно вдаваться в подробности не хочу; простой переделкой кейса как в посте 114 удалось повысить частоту опроса со 180 до 220 сэмплов в секунду.
Появилось желание посмотреть внутренности библиотеки modbus.lib. Но тот экземпляр, что есть у меня не позволяет просмотреть код ФБ.
Я часто встречал рекомендацию посмотреть код библиотеки, значит раньше он был открыт. Кто-нибудь может поделиться открытым экземпляром?
Спасибо, помогло.
Добрый вечер, уважаемые форумчане.
Разобрал библиотеку Modbus.lib.
Хочу поделиться важными замечаниями.
1. Для проведения опроса требуется минимум 3 цикла обращения к соответствующему блоку.
На 1-м цикле: блок формирует посылку, отсылает ее в порт;
На 2-м цикле: блок занимается чтением из порта (циклов чтения может быть много);
На 3-м цикле: завершается опрос.
Данные выводы следуют из анализа ФБ MB_UNI_IO (см. рисунок MB_UNI_IO).
Почему я обращаю на это внимание?
Потому что, если ваша PLC_PRG выполняется, например, 15 мс (у меня есть реальный проект, где такое время выполнения на ПЛК110 старой модификации), то на опрос даже 1 регистра на любой скорости сети!!! вы будете тратить 30 мс.
Для решения данной проблемы необходимо вынести вызов ФБ Modbusа в отдельную задачу, которую вызывать чаще чем основную PLC_PRG (см. этот пост).
2. При использовании блока MB_WR_REGS (запись регистров хранения), в том случае, если блок вернул ошибку, то перед повторным вызовом данного блока необходимо заново формировать буфер посылки. В противном случае вы пошлете не то, что ожидаете, так как MB_WR_REG использует переданный ему буфер для формирования полной посылки Modbus.
Последний раз редактировалось Спорягин Кирилл; 31.08.2016 в 17:14.
Ессно. Или предлагаете не выходя из цикла ждать у моря погоды ?
Тогда не удивительно что
По мне, так сижу как на иголках коли цикл на МО1 уходит за 2-3мс.ваша PLC_PRG выполняется, например, 15 мс (у меня есть реальный проект, где такое время выполнения на ПЛК110 старой модификации
Про RTU. (Ascii не юзаю, но в том же ключе)
1.Отправили запрос. Ну и кого ждем ? Вышли
2.Умудрились получить все данные. А это не данные, а просто мусор. Даже если очень похож на правильный ответ. В пакет этот мусор превращается после соотв.паузы. А откуда паузу отчитывать если не знаем когда пришел последний байт ? Для нас последний байт пришел именно сейчас. Выходим. Не ждать же паузу в цикле.
3.В порту - тихо, время вышло. Тот кусок мусора оказываецца - пакет. Надоть его разобрать. Разобрали ? Вот тут можно прям в этом цикле перейти к п.1
За каким PLC_PRG вызывать реже модбас-блока ? Какое отношение цикл опроса имеет к циклу ПЛК ?Для решения данной проблемы необходимо вынести вызов ФБ Modbusа в отдельную задачу, которую вызывать чаще чем основную PLC_PRG
ПЛК встал, поел-попил, глянул почту, и убежал по своим делам. Какое ему дело до графика движения почтальона ?
А причем тут MB_WR_REGS ? Перед любым вызовом любого блока формируется необходимый на данный момент буфер. Буфер это тарелка в столовой. Каждый ее наполняет чем хочет перед использованием.в том случае, если блок вернул ошибку, то перед повторным вызовом данного блока необходимо заново формировать буфер посылки
Последний раз редактировалось Валенок; 31.08.2016 в 18:30.
Важно, что в 2 цикла он не уложится, т.е. на 1-м цикле отослал, а на 2-м получил - так не получается. Всегда есть 3-й цикл, в котором авторы библиотеки Modbus.lib проверяют, что
больше ничего не приходит. Поэтому всегда на опрос устройства тратится время >= 2*MinCycleLength.
1.Кому важно ?
2.Циклы попутали - см.выше
3.А получается - см. выше и ниже. Правда за счет непонятного замедления PLC_PRG. И накой это ?
Поправлю :
"авторы Modbus.lib проверяют..."
Иначе это не модбас.
А совместить 1й и 3й можно. И это останется модбасом.