PDA

Просмотр полной версии : Обмен через RS485 ModBus



RadistDog
12.05.2014, 14:25
Имеется система из мастера (СПК207) и четырёх слейвов (МВУ8-И - 1 шт., МВА8 - 2 шт., МУ110.16Р - 1 шт.)
Связь через RS-485-9600-8-N-1 по ModBus-RTU.
Настроен циклический опрос каждого слейва один раз в секунду.
Связь с каждым из слейвов организована последовательностями слов. То есть со смещения 0х0000 читается/пишется сразу все регистры устройства скопом.
Судя по лампочкам на устройствах - между обращениями к модулям остаётся ещё довольно прилично времени, так что коллизий быть вроде не должно.
При этом наблюдаю странную картину.
Иногда случаются ошибки связи. Они, конечно, обрабатываются, но хочется понять принципиально - откуда берутся эти ошибки!
Анализ показал, что на ровном месте берутся следующие ошибки:
RESPONSE_TIMEOUT 16#A1 (The was no response in time) [не было ответа в ожидаемое время]; (*получается что слейв был так занят в течение секунды, что не успел ответить? Но такая же ошибка возникает и при 3-х секундном цикле опроса!*)
RESPONSE_WRONG_SLAVE 16#A3 (The response is not from the expected slave) [ответил не тот слейв, ответ от которого ожидался]. (*то есть запрос отправили уже следующему слейву, а ответил тот слейв, который сильно задержался в предыдущем цикле?*)
Есть идеи, объясняющие данную ситуацию? А ещё лучше - идеи как устранить данное безобразие?
ЗЫ: Если сделать на слейвах по нескольку каналов и каждый из них опрашивать/записывать отдельной переменной, то при ежесекундном опросе лампочка порта на СПК горит почти не потухая. Т.е. порт занят под завязку.
ЗЗЫ: Как узнать гарантированное время ответа для вышеуказанных модулей, сконфигурённых на работу со всеми имеющимися входами/выходами???

RadistDog
12.05.2014, 15:21
Ещё вопрос родился.
У меня устройства на шине RS485 последовательно подключены в следующем порядке:
Мастер -> МВА8 -> МВА8 -> МУ110 -> МВУ8.
При этом адреса у них назначены следующим образом:
Мастер -> 16 -----> 8 -----> 24 ------> 40.
То, что адреса в цепочке в разнобой (не по ранжиру) для 485 интерфейса не проблема, случайно?

Трофимов Артем
12.05.2014, 17:16
то что адреса в разнобой - не проблема. длина линии связи какова? задержка ответа у модулей установлена сколько? можете выложить архив проекта?

RadistDog
12.05.2014, 20:52
Длина линий итого меньше метра(макет на столе). Проект можно посмотреть по ссылке http://yadi.sk/d/s6FfTrn5PWWcH
Задержку выставлял разную, 1-2-3 секунды. Без каких либо успехов.
В последнем эксперименте поставил циклический опрос четырех слейвов с трехсекундным интервалом. Задержки всем поставил по 1000мс. Результат тот же.

RadistDog
13.05.2014, 08:40
Дальнейшие исследования показали, что на возникновение ошибок явно влияют такие параметры, как тайм-аут отклика и время между фреймами Мастера, и тайм-аут ответа для слейвов.
Какова в точности эта зависимость экспериментально мне установить пока не удалось, но обнаружились важные грабли!
Грабли заключаются в том, что при определённых значениях, установленных в вышеуказанных параметрах, сначала может всё заработать и уже хочется воскликнуть УРА! [и, вероятно, многие неопытные новички типа меня так поначалу и делают] ... но потом, (иногда минут через 10 - 30!!!) вдруг начинают опять валиться ошибки 16#A1 и 16#A3.
Причём при некоторых параметрах пересброс порта .xReset даже почему то не помогает, т.е. связь со слейвом не восстанавливается! А сделаешь сброс контроллера и опять минут 10-30 всё будет работать, но с тем же исходом.
Всё это наводит на мысли о некорректных сетевых настройках всех участников коммуникации.
И, возможно, неоптимальности работы планировщика связи через RS485 в самом мастере.
Отсюда вопрос - какова методика настройки параметров связи через RS-485 всего зоопарка устройств в проекте??

capzap
13.05.2014, 09:18
Так может пора уйти от конфигуратора и попробовать себя в роли программиста, написать свой код пл работе с портом, по работе с модбас, создать свой планировщик когда и сколько кого опоашивать

RadistDog
13.05.2014, 09:40
Так может пора уйти от конфигуратора и попробовать себя в роли программиста, написать свой код пл работе с портом, по работе с модбас, создать свой планировщик когда и сколько кого опоашивать

... я б в программеры ком-портов пошёл, пусть меня научат! (*покажут пример как и с чего начать*)

... правда сразу пришла вторая мысль - а когда выбирал платформу, думал, что основные решения уже проработаны и тебе останется только разработать прикладную часть ... Видимо, это пока не так?

capzap
13.05.2014, 09:45
Ищите на форуме ключевое слово comservice и появяться у Вас примеры работы с портом,
для простых задач конфигуратора достаточно, а с таким набором у Вас будут проблемы и в КДС2.3

Валенок
13.05.2014, 11:34
Мастер -> МВА8 -> МВА8 -> МУ110 -> МВУ8...
работу со всеми имеющимися входами/выходами
МВА8 обе, опрос через 3.2c
МУ110, МВУ8 - запись по изменению + запись циклическая 1-2c (по человечьи "по изменению, но не реже чем") Таймаут в конфигураторе модулей 2-3с.

RadistDog
13.05.2014, 12:12
МВА8 обе, опрос через 3.2c
МУ110, МВУ8 - запись по изменению + запись циклическая 1-2c (по человечьи "по изменению, но не реже чем") Таймаут в конфигураторе модулей 2-3с.

Спасибо за расчеты и рекомендации! А можно узнать объяснение указанных периодов?

Со своей стороны пока что доложу - задолбавшись исследовать "связь через RS-485-9600-8-N-1 по ModBus-RTU", решил поменять что нибудь в своей жизни более кардинально (*посмотрев на форуме общение про комсервис с сислибкомом, понял, что это дело, конечно, благодарное, но не настолько я богат временем, чтобы осваивать и эту тему*).
Взял и стал исследовать "связь через RS-485-57600-8-N-1 по ModBus-RTU"
Как ни странно - полёт нормальный уже как пол часа! )))
Добавлю - таймауты мастера и всех слейвов установлены на 1000 мс, время между фреймами мастера - 10мс, ответы всех модулей через 2 мс (параметр RS.dl в их конфигураторах).

RadistDog
13.05.2014, 14:53
После проверки работы системы на скорости 57600 в течение нескольких часов стало понятно, что число ошибок уменьшилось примерно в 10-15 раз.
Типы ошибок остались прежними.

RadistDog
14.05.2014, 10:03
По результатам тестового суточного забега системы из мастера и четырёх слейвов, опрашивающихся в цикле каждые три секунды, произошло около 55 нарушений связи.
Из них с ошибкой "Слейв не ответил в назначенное время" (161) примерно 50 раз.
С ошибкой "Получен ответ не от того слева" (163) примерно 5 раз.
Ошибка 163 происходит в те же моменты (вернее - сразу после того как), когда появляется ошибка 161, просто случается она редко.
Для себя я решил, что бороться с этой проблемой дальше не стану, не настолько она существенна, чтобы тратить на неё дальше время )))
Но на скорости 9600 всё ГОРАЗДО хуже. Там без подробного разбора ситуации наверное не обойтись было бы. Благо у меня ситуация позволяет использовать бОльшую скорость.

Айдар
14.05.2014, 11:40
RadistDog, а у вас при ошибках связь восстанавливается без проблем? а то у меня примерно похожая ситуация, только связь восстанавливается один раз, потом только перезапуск(перезагрузкой). Я уже готов не обращать внимания на то, что возникают ошибки, лишь бы связь восстанавливалась без проблем.

RadistDog
14.05.2014, 12:17
МВА8 обе, опрос через 3.2c
МУ110, МВУ8 - запись по изменению + запись циклическая 1-2c (по человечьи "по изменению, но не реже чем") Таймаут в конфигураторе модулей 2-3с.

Проверил на всякий случай рекомендации товарища Валенка (правда на скорости 57600).
Установил циклический опрос МВА8 через 3.3 Сек., МУ110 и МВУ8 - через 1650 мСек., тайм-ауты везде поставил по 3 секунды.
Запись в МУ110 и МВУ8 по изменению переменных не стал делать, ибо это вносило бы дополнительную неразбериху в итак, повидимому, нелёгкую работу планировщика фреймов порта в СПК. Ограничился циклом ровно в пловину от цикла МВА8.

Ашипки не ушли.

RadistDog
14.05.2014, 12:18
RadistDog, а у вас при ошибках связь восстанавливается без проблем? а то у меня примерно похожая ситуация, только связь восстанавливается один раз, потом только перезапуск(перезагрузкой). Я уже готов не обращать внимания на то, что возникают ошибки, лишь бы связь восстанавливалась без проблем.

Айдар, Вы разобрались с тем что такое .xReset ??

У Вас программа на ST?

Айдар
14.05.2014, 12:41
Айдар, Вы разобрались с тем что такое .xReset ??

У Вас программа на ST?
ну это же вход для перезапуска модуля.
plc_prg на ST.

RadistDog
14.05.2014, 12:45
ну это же вход для перезапуска модуля.
plc_prg на ST.

То есть у вас имеется кусок программы типа:
IF MVA8.xError THEN
BL(ENABLE:= TRUE, TIMELOW:= T#1S, TIMEHIGH:= T#100MS);
MVA8.xReset:= BL.OUT;
END_IF

???

Айдар
14.05.2014, 12:53
да это все имеется, но как я и говорю, почему то только один раз перезапускает и все.

RadistDog
14.05.2014, 14:15
Предлагаю сверить версии МодБас устройств и причастных к нему объектов.
На начальном этапе у меня были другие версии и всё работало гораздо хуже. Правда и сейчас я не уверен что у меня правильный зоопарк версий!
У меня сейчас:
Modbus COM 3.4.0.0
Modbus Master 3.5.3.50
Modbus Slave (все) 3.5.3.0

При этом таргет СПК207 3.5.3.40
библиотека IoDrvModbus 3.5.3.50 (младше таргета)

Айдар
14.05.2014, 15:31
У меня:
Modbus COM 3.4.0.0
Modbus Master 3.5.3.0
Modbus Slave 3.5.3.0

таргет СПК107 3.5.3.40
библиотека IoDrvModbus 3.5.3.50

Айдар
14.05.2014, 16:00
правда конечно у меня библиотека была серым цветом. установил заново, пока что дольше обычного работает.

RadistDog
30.05.2014, 08:11
Предлагаю сверить версии МодБас устройств и причастных к нему объектов.
На начальном этапе у меня были другие версии и всё работало гораздо хуже. Правда и сейчас я не уверен что у меня правильный зоопарк версий!
У меня сейчас:
Modbus COM 3.4.0.0
Modbus Master 3.5.3.50
Modbus Slave (все) 3.5.3.0

При этом таргет СПК207 3.5.3.40
библиотека IoDrvModbus 3.5.3.50 (младше таргета)

Ахтунг!
Для тех, кто так же как и я поимел проблемы с нестабильной работой 485 интерфейса, подтверждаю - приведённые в цитате версии таргетов и библиотек нормально работают. Т.е. слейвы перезапускаются как положено. Переменные срабатывают как нужно.

Другие варианты версий мастера и слейвов имеют те или иные проблемы (у меня). Набор проблем изменяется в зависимости от набора версий!

bezbel
18.06.2014, 17:50
Подскажите, где посмотреть коды ошибок xError и byModbusError?

RV9WFJ
19.06.2014, 10:33
Если еще не разобрались то МВА8 с групповым запросом и МВУ-И вместе не работают. СПК тут не причем, проблема в МВУ-И. Способ лечения - разбивать групповой запрос на МВА8 на 2..3 части.

pqqp
28.10.2014, 20:00
Столкнулся с такой-же проблемой: ошибки RESPONSE_TIMEOUT и RESPONSE_WRONG_SLAVE. Сначала меня это не сильно беспокоило, поскольку ошибок было не много. Потом случился незаметный обрыв витой пары, в результате легла вся сеть и все 16 устройств отвечали ошибкой RESPONSE_WRONG_SLAVE.
Сначала я попробовал выяснить что не так с передачей данных непосредственно на линии rs485, для этого подключился к ней с помощью китайского преобразователя rs485-usb и терминала: как ни странно передача и ответ были полностью корректными и никаких посторонних данных в линии не наблюдалось.
Поскольку на линии всё казалось исправным, решил поиграть с версиями библиотек - результат нулевой. Плюнул, решил реализовать функционал IoDrvModbus самостоятельно и работать с библиотекой SysCom напрямую, чтобы было видно что работает не так. Спустя несколько часов, библиотека была готова и тут выяснилось, что перед каждым ответом от устройства принимается несколько байт со значением 0xff, именно на них IoDrvModbus ругается RESPONSE_WRONG_SLAVE, хотя я в этом случае почему-то ожидал RESPONSE_CRC_FAIL или что-то подобное.
Далее я решил просто читать все данные приходящие на COM порт, при этом ничего не отправляя. Трудно передать моё удивление когда я увидел, что ПЛК исправно принимает непрерывный поток данных, сожержащих 0xff в количестве примерно 10 байт в секунду. Причём поток этот прекращался, если отключить шину rs485 от контроллера.
После такого разворота событий ничего не оставалось кроме как исследовать внутренности ПЛК, ведь китайский преобразователь, да и другие устройства на шине не видели никаких лишних данных на шине и исправно работали. После некоторого времени с помощью осциллографа и мультиметра был найден главный виновник: микросхема 75176B, после замены которой на max485 поток мусора в COM порт иссяк.
Сразу же после этой модификации стало очевидно, что шина rs485 оборвана и место обрыва быстро удалось найти. Причиной мгогократно услилившегося потока мусора в сети послужил тот факт, что на оборванном конце шины отсутствовал терминальный резистор.

Адель
26.11.2014, 15:57
Всем привет,подскажите пожалуйста,как связать ПЧ на прямую с панелью ОВЕН СПК 107, как это вообще все делается? Знаю только,что по Modbus как-то.

RV9WFJ
27.11.2014, 08:01
Всем привет,подскажите пожалуйста,как связать ПЧ на прямую с панелью ОВЕН СПК 107, как это вообще все делается? Знаю только,что по Modbus как-то.Вам наверно в ветку про ПЧВ. И задавайте вопрос конкретнее, или так и пишите: "Сделайте за меня все".
http://www.owen.ru/uploads/rp_pcv_ver_06.pdf Приложение В вам в помощь.

Адель
27.11.2014, 10:53
Да нет,делать за меня ничего не надо, я сам хочу в этом разобраться. Только вот у меня ПЧ TWERD, а не ОВЕН. И еще один вопрос, можно ли это сделать в CODESYS?

murdemon
27.11.2014, 11:40
готов удаленно через TeamViewer помочь за небольшое вознаграждение

Адель
27.11.2014, 11:44
готов удаленно через TeamViewer помочь за небольшое вознаграждение

Спасибо,но за небольшое вознаграждение у меня есть кому обратиться.