Рекомендую для панели выставлять команду 0х04, а для корректора - 0х03
Рекомендую для панели выставлять команду 0х04, а для корректора - 0х03
Уважаемый Владислав, год назад подобный вопрос подымался, и вот Ваш ответЯ обратил внимание на то, что Modbus-master не фиксирует ошибочный адрес в ответе slave-устройства, и как быть в том случае, когда кроме перечисленных устройств на шине появятся еще модули ввода-вывода, у которых тоже будут свои адреса.Рекомендация такова:
Если вы опрашиваете ряд регистров на 1 устройстве, то чтобы избежать "сдвига данных" желательно либо чередовать команды (например 0x03 и 0х04), либо чередовать опросы устройств. В этом случае при задержке ответа мастер по неверному адресу/команде может идентифицировать такую ситуацию и данные не попадут в соседнюю ячейку.
Да, адрес в нек-х случая может не детектироваться. В новой пошивке эту функцию реализуем в полном объёме.
Однако и в текущих версиях проблем не возникнет. Главное, чтобы чередовались коды команд при запросвх
У меня сложилось впечатление, что в Modbus-мастере чудес заложено больше, чем во всём остальном контроллере.
Не удивлюсь уже, если возможно возникновение такой ситуации:
Мастер посылает запрос на чтение строки длиной в 200 байт и ждёт ответ. Ответ не пришел в допустимое время. Мастер посылает другой запрос чтения, на этот раз одного регистра. И тут начинает поступать ответ на предыдущий запрос. Мастер принимает его и, т.к. не проверяет адрес отвечающего (CRC хоть проверяет?), то записывает всю 200-байтовую строку в область ввода, начиная с адреса регистра, который он запросил второй командой. Затирая тем самым ячейки памяти, лежащие за этим регистром...
Оценивая свой опыт борьбы с этим чудом, совсем не удивлюсь, если так и будет. Кстати, таким образом можно ведь и содержимое системной памяти повредить (если регистр последний в модуле, а модуль последний в конфигураторе)?
Теперь опишу, как я победил проблему с постоянными перезагрузками контроллера, описанную в начале ветки.
Всё просто. Против лома нет приёма. Модуль Modbus-мастер был удалён из конфигурации контроллера. А затем в течении пяти дней была написана и отлажена библиотека, реализующая команды 3 и 16 Modbus ASCII мастера. И всё.
Вся аппаратная конфигурация осталась прежней. Абсолютно. Те же радиомодемы. Те же ведомые. Те же физические подключения.
Более того. После завершения отладки библиотеки я продолжил дорабатывать основную программу. И она выросла ещё где-то на треть. И никаких проблем. Никаких резетов по watchdog. Стреляет очередями запросов и не спотыкается.
Так что ищите суслика в своём драйвере. А то и не одного.
P.S. А для себя пришлось сделать вывод: модуль Modbus Master для ПЛК100 не существует. То что имеется на данный момент - это не продуманное и не прошедшее тестирования НЕЧТО, способное работать лишь в самых простых конфигурациях.
P.S. А про надёжность модуля Modbus Slave плохого сказать нечего. Нормально работает. Быстрее бы ему доработали конфигуратор. Очень много времени отнимает нынешний, если переменных много.
Последний раз редактировалось Serj_N; 23.12.2008 в 14:55.
Также поделюсь своим опытом последнего общения с Modbus.
ПЛК154 (Master) - ИП320 (Slave) - МДВВ - МВА.
Прошивка 2.06.3.
Загружаю проект в контроллер. Смотрю в online на PLC Configuration, всё хорошо, Modbus master работает с подчиненными, ошибки обмена возникают редко, в основном при работе с ИП320. Период опроса 400мс, 100-150мс время ожидания ответа, естественно чередуем команды 0x03, 0x04 при опросе регистров ведомых, в общем, все для надёжности из лучших рекомендаций форума.
Запускаю выполнение программы. Обмен с подчиненными останавливается, мастер выдает код ошибки 81 (нет ответа), лампы индикации обмена по интерфейсу на МВА и МДВВ не моргают. Ну, думаю, залепуха какая-то в программе, все гляделки проглазел, с областью конфигурации ввода/вывода никаких непотребных действий не выполняю. Программа написана на LAD со своими маленькими ФБ на ST, приблизительно 100 строк, где самые тяжелые позиции - это 4 ФБ ПИДа.
Останавливаю выполнение программы и все становится в порядке с обменом.
С программой в режиме СТОП каши не сваришь, поэтому рассудил так.
Отчего-то сам факт выполнения программы мешает нормальной работе элементов, заложенных в конфигурации. Может ядро с новой прошивкой, в котором "существенно уменьшен цикл выполнения программы" стало меньше выделять времени на элементы конфигурации. Посмотрел -цикл выполнения программы 0,7-1,1 мс. Короче, решил разгрузить процессор контроллера от бесконечно быстрого выполнения моего алгоритма, мне достаточно будет 20мс. Полез в Task configuration, зарядил выполнение моей программы через задуманный интервал и спустя минутку всё заработало без проблем.
Может кто-нибудь из разработчиков сделать предположение, почему проект не заработал в своем исходном исполнении без сконфигурированной в Task configuration задачи на 20мс?
Добрый день.
Столкнулся с такой проблемой: на ПЛК100 при попытке связаться по Модбас RTU с МДВВ(да и вообще с любым слэйвом) контроллер перезагружается. Если в "Конфигурации ПЛК" Подключить модуль модбас мастер и оставить его пустым (не добавлять никаких опрашиваемых регистров) то контроллер исправно работает, но если добавить хотя бы один регистр, то контроллер после загрузки программы перезагружается, секунды, этак, через полторы. Это происходит при любых настройках протокола, скорости, наличии/отсутствия слэйва(тобишь ответа от него), за исключением режима Work mode: если врок мод By command, то перезагрузка наступит, соответственно по команде.
Перед перезагрузкой контроллер выдаёт необъяснимый запрос по указанному каналу связи, например при подключении готового модуля OWEN_MDVV контроллер пишет (хекс) 10 03 00 49 00 01 56 9D. Собственно пытается получить данные десятого счётчика входа.
Версия прошивки 2.10.9
таргет файл версии 2.10
у вас, вероятно, контроллер с аппаратной ошибкой. надо допаять резистор. описание как и куда допаивать - есть на форуме.
если это не так - пришлите проект, посмотрим.
если я правильно понял, то речь идёт про подтягивающий резистор к Adm485?
но проблема не изчезает при использованнии 232го.
Допаял резистор между 1 и 8 ногой Adm485, сначала 10 кОм, ситуация не изменилась, потом 5 кОм, и опять же, ничего не изменилось.
Ну проэкт например такой. С ним контроллер перезагружается через некоторое время (секунды).first.rarесли это не так - пришлите проект, посмотрим