November 23, 2012

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 мс, делайте выводы)))