Вы правы, всё дело в несогласованности портов при приёме ответной посылки. Такая же история происходит и при опросе от контроллера. Вопрос - как узнать этот destination адрес, чтобы прописать его в настройках NPort.
Мы забыли, что в запросе, который посылает и контроллер и компьютер с программой ModPoll есть не только порт назначения, но и порт источника. Логично было бы отвечать по этому адресу источника. Провёл эксперимент.
Запустил программу WireShark, которая мне позволила посмотреть содержимое посылок по IP. Подсмотрел там порт источника и прописал его в настройках как destination port. Порт оказался совсем дурацкий: 55719. И обмен пошёл. Но если я перезапускаю программу ModPoll (разрываю связь и вновь восстанавливаю), то этот порт будет уже другой. А, значит обмена вновь нет.
Логично было бы в настройках NPort ввести режим, когда destination port задаётся не фиксированным, а берётся из посылки-запроса.
Не знаю, почему "прыгает" порт в запросе, и, наверное, тоже самое происходит с контроллером. Так что пытаться найти и прописать этот destination port дело бесполезное.
Вывод печальный: NPort не поддержиает стандартный обмен по UDP.
Может быть вы можете предложить альтернативные варианты?
Задача простая: у контроллера есть Ethenet порт, спомощью которого надо опросить, скажем, 8 устройств по COM-портам. Устройства умеют "говорить" только по протоколу Modbus RTU. Контроллер может работать в следующих режимах: Modbus/TCP, Modbus RTU over UDP.
Спасибо за внимание.