Имеется система из мастера (СПК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) [ответил не тот слейв, ответ от которого ожидался]. (*то есть запрос отправили уже следующему слейву, а ответил тот слейв, который сильно задержался в предыдущем цикле?*)
Есть идеи, объясняющие данную ситуацию? А ещё лучше - идеи как устранить данное безобразие?
ЗЫ: Если сделать на слейвах по нескольку каналов и каждый из них опрашивать/записывать отдельной переменной, то при ежесекундном опросе лампочка порта на СПК горит почти не потухая. Т.е. порт занят под завязку.
ЗЗЫ: Как узнать гарантированное время ответа для вышеуказанных модулей, сконфигурённых на работу со всеми имеющимися входами/выходами???