Цитата(Max2114 @ 27.1.2013, 15:56)

Там переменная типа Float, 32-х битная. По документации - старшиие два байта - читаемый адрес, младшие два байта - адрес+1. Пробовал читать переменную типа LONG (32-х битный int) - получал какое-то значение, птылася его перевести поменяв местами старший и младший байты - получал чушь. Т.е. какое-то значение получал, но оно не соответсвовало тому, что должно было прийти. Самое интересное - при помощи TraceMode6 процедура получения данных заняла минуты 3-5, не больше - с первого раза все заработало.
.....
PS у меня "ощущения" такие, что взлету не нарвится запрос и он отвечает нулями. Видимо в ТМ6 как-то подрпавили запросы чтобы теплосчетчик ему корректно отвечал.
Вот-вот. Может быть, запрос сформулирован некорректно - если, к примеру, засылается команда "read single holding register", усторойство отдаёт значение этого регистра, невзирая, что там "лежит"; если же засылается команда "read multiply registers", то устройство отдаст содержимое регистров, и разбирайтесь, мол с этим дальше, как хотите. В Трейсмоде есть какая-никакая автоматическая "распознавалка", то есть, если указывать, какую собственно, float Вы хотите видеть, Трейсмода Вам это самое и покажет; В ТМ6, возможно, процедуру запроса/декодирования и подправили, это науке неизвестно.
Кстате, в документации на разные устройства и софт, имеет место быть различная трактовка типов переменных - одни говорят - long, другие - uint; float тоже может быть одинарной и двойной точности...
К примеру, если читать из овенского МВА8 по стандартному овенскому протоколу - отдаёт float одинарной точности, если использовать modbus-rtu, отдаёт uint с устанавливаемой десятичной точкой... Содержимое регисторв одно, а в различных протоколах отображается по-разному...