Добрый день. Помогите решить проблему. Опрашиваю СПК105 (slave) ПЛК100(master). Обмен идет, на СПК моргает com, в конфигураторе плк100, ошибок по modbus не наблюдается, НО в регистрах 0,1,2 лежат значения 1,2,3, независимо от значений в СПК.
Вид для печати
Добрый день. Помогите решить проблему. Опрашиваю СПК105 (slave) ПЛК100(master). Обмен идет, на СПК моргает com, в конфигураторе плк100, ошибок по modbus не наблюдается, НО в регистрах 0,1,2 лежат значения 1,2,3, независимо от значений в СПК.
А где сам проект?
Вот проекты.
Судя по проекту вы считываете с СПК две переменные (2 слова). Почему тогда пишите "НО в регистрах 0,1,2 лежат значения 1,2,3..."? Откуда взялся регистр № 2?
вот здесь, где стоят цифры 3, поставьте двойки.
Просто пробовал разные варианты. Поставил двойки, результат тот же. Еще вместо значений 1,2 сейчас лежат нули, хотя обмен идет без ошибок
Попробуйте считывать значения с помощью функции 04.
Дело в том, что у меня тоже были проблемы с передачей данных с СПК на OPC сервер, помогло только использование функции 04 вместо 03.
Спасибо большое, все заработало.
Коллеги, добрый день!
Чтобы не плодить темы, решил написать в этой ветке, хотя проблема несколько другая, чем у ее родоначальника.
На праздниках решил позаниматься CoDeSys 3.5 и нарвался на непонятки с Модбасом. Я опрашиваю МК110-8ДН.4Р с помощью СПК107. С помощью библиотек Modbus,ModulsOwenLib,OwenNet я делал разные варианты программы опроса и все работало, и по Модбасу, и по ОВЕНу. Но тут я решил использовать встроенные возможности (добавил устройство Modbus_COM, к нему Modbus_Master_COM_Port, к нему, соответственно, Modbus_Slave_COM_Port), и ничего не работает... Нет опроса совсем, светодиод СОМ на СПК не мигает, как и светодиод RS485 на МК110.
Прошу совета, чего делал не так? Прошивка СПК 3.939, таргет 3.5.4.20 сборка 023, CoDeSys 3.5SP5. Архив проекта с несколькими поясняющими скриншотами прилагается.
Судя по скрину опрос то идет, а вы переменные привязали?
P.S:Проект не смотрел...
Сразу бросилось в глаза как вы соотносите переменные С1 и С0 в конфигурации, они же у вас не Array а почти Word, вот
и поставте их в строке где каналы 0[0], 1[0] тип word...времена циклов на запись и чтение я бы поставил одинаковые, а таймаут по логике не должен быть больше цикла...у меня компиляция не пошла, что-то с библиотеками наверно, сейчас нет времени копать
RomAl, спасибо, что заметили ошибку. Но ее исправление не помогло, к сожалению. С библиотеками все время свистопляска, приходится править версии все время. И еще момент. Не совсем врубился в данном конкретном случае, когда Modbus_COM конфигурим, то чтобы физический СОМ1 указать, на вкладке ставим СОМ2?
Коллеги, всем спасибо! В конце концов получилось. Дело в том, что почему-то не активен выключатель "auto-restart communication", а я не стал заморачиваться, уповая на то, что вся система собрана на столе, длина связи - сантиметров 40. Ан нет... Пришлось вставить код возобновления связи, приведенный в соседней ветке "восстановление связи по modbus СПК107" - и все заработало. Спасибо всем, кто пытался помочь! На всякий случай, если кому-то понадобится, прилагаю архив проекта.
У меня немного обратная ситуация вышла. Я опрашивал ТРМ201 при помощи СПК110
CoDeSys 3.5 у меня SP5 не работал ни по библиотекам ни при помощи встроенного Modbus.
Установил SP4 Patch4 сразу получилось подключиться по внутреннему Modbus.
При помощи библиотек ModbusOwenLib, Modbus и OwenNet я смог связаться без проблем только по протоколу Owen.
По модбасу как я не менял типы и версии библиотек у меня выходило примерно одно и тоже:
- Лампочки обмена моргали и на СПК110 и на ТРМ201
- Буффер всё время менял байты с данными туда сюда, среди которыхВложение 15990Вложение 15991 проскакивают и действительные значения с ТРМ201 (Как это понять?)
Т.е. Прибор вроде как отвечает, а вот программа не может правильно обработать как я понимаю.
Скрины приложил.
Если кто знает чего делать подскажите.
Видио буффера и архив
https://yadi.sk/d/MYYXQIhcdmviT
https://yadi.sk/d/LyVREhg7dmvk5
Есть подозрение, что у Вас с временами что-то не чисто. Попробуйте на вход Enable блока MB_RD_HOLD_REG просто подать TRUE. А то у вас импульс в 1 мс туда проскакивает
Если просто TRUE, то лампочка на ТРМ201 начинает непрерывно гореть, а на СПК110 бешено моргать
и в буфере беспорядочно меняются значения всех байт, не выдерживая ни какой структуры ModbusRTU.
Поэтому я сделал опрос раз в секунду по импульсу, но всё равно в буфере данные не соответствуют структуре ответа Modbus.
Не раз в секунду по импульсу а так:
1. Вызываем POU с Enable:= TRUE
2. В следующем цикле вызываем POU с Enable:= FALSE до тех пор, пока Complete <> TRUE
3. В этот момент POU отработал, анализируем Exception. Если Exception = 0, то все в норме, в буффере принятые данные.
И так в цикле. Или переходим к следующему POU с обменом по шине.
То же самое вышло. Дело не в том как организована программа, дело в самом ModbusLIB.
Прикладываю последовательно фото 8 циклов программы с точкой останова в ModbusLIB.
Вложение 15998 Вложение 15999 Вложение 16000 Вложение 16001
Вложение 16002 Вложение 16003 Вложение 16004 Вложение 16005
Я не спец конечно в Modbus библиотеках, но по-моему это косяк.
Хотелось бы услышать мнение администрации.
Андрей, у меня под рукой нет ТРМ201, но есть МК110-224.8ДФ.4Р. На нем я попробовал MB_RD_HOLD_REG. В принципе все работает корректно, если правильно обрабатывать выходы блока. В буфере, который у Вас называется Buffer, циферки во время работы пляшут по разному, просто их требуется считать/обработать в нужный момент. Прилагаю архив проекта, с помощью которого я считывал входы своего модуля.
Благодарю за ответ. Теперь до меня дошло.
Я так понял буфер не абы как меняется, я у него есть три стадии (и на фотках они как раз и отразились):
- первая мне не ясна, в ней присутствует из понятной информации только Адрес прибора Байт[0] и Функция чтения Байт[1];
- вторая содержит посылку от прибора так как она выглядит на самом деле;
- а вот третья это уже только байты запрошенных данных.
У меня в связи с этим только один вопрос остался, а где хоть описание понятное есть,
в документации к этой библиотеке в примере чёрт ногу сломит.
Только вот версия CoDeSys3.5 SP5 Patch4 так и не работает, приборы вообще не видит ни так ни эдак.
Только на SP4 Patch4 работает обмен с моей СПК110.
вопрос может не этой теме, но другой не нашел, так как форум работал с перебоями.
собственно интересует возможность работы устройства в режиме master и slave по одному порту или все же придется использовать два порта.
п.с. по двум портам понятно, но планируется один порт использовать для опроса устройства по RS-232 и хотелось бы для RS-485 master и slave задействовать один порт.
спасибо
upd. забыл уточнить используется СПК107