MODBUS TCP Master - чтогдекогда?
Умные есть или все админы домена?
Задачка на знатока, который сталкивался, мучаюсь с реализацией на Arduino MODBUS TCP Master.
По Slave есть вполне рабочие реализации, если в исходники не смотреть ))), а Master- хрен, либо об этом не знает гугол.
Документация по MODBUS скромная и в основе освещает RS-232/485 реализацию, про TCP один абзац. Используя эту скромную информацию и перехваченный протокол обмена между двумя софтинами, одна из которых мастер, другая - слейв.
Запрос уходит, даже WireShark распознает его как MODBUS, а ответ изумляет- приходит два значения регистров, и все, при запросе любого количества регистров в ответе приходит только два.
Запрос практически аналогичен, тому, который идет из тестовой программы, а ответ- не понятный.
Набросал картинку своего представления запроса от мастера к слейву, может ошибка где?
UP: Пока писал код, появилась идея, где ошибка, и нашел- она была в переменной цикла, копипастил и не заметил, как в цикле, выводящем принятые данные, стояла переменная отвечающая за длину исходного массива ))))
Зато сделал себе мануал по модбасу, может кому и пригодится.
Вот обмен:
Try to connect
Connected. Elapsed time(ms) = 1
Transaction: 140
Content is:[0:8C:0:0:0:6:1:3:30:0:0:8:]
Reply length: 25
Reply is:[0:8C:0:0:0:13:1:3:10:52:8:7D:0:7D:0:9:C4:B:B8:B:B8:B:B8:B:B8:]
0:8C:0:0:0:13:1:3: - реплай, содержащий номер запроса и параметры запроса
10 - длинна данных
52:8 - первый WORD
и так далее..
Прямые протоколы рулят, запрос- ответ по модбасу - 1-3 мс, по http - 500-2000 мс, делайте выводы)))