0
На рассмотрении

Не могу опросить регистр тепловычислителя ТВ7

Максим 6 дней назад в Редактор каналов обновлен 5 дней назад 16

Здраствуйте. Не могу опросить регистр тепловычислителя ТВ7 - параметр имеет длину 8 байт, порядок LE 2143. В свойствах канала какой тип данных выбрать? В описании протокола ТВ7 написано, что параметр например объем итоговый имеет адрес 7563 и занимает 4 регистра. Техподдержка термотроника пока отморозилась. 

На рассмотрении

День добрый.

Скорей всего не 4 регистра а 4 байта. Если так то тип или DWord или Float32

Так мне ответили с термотроника. И сейчас я понял, что немного неправильно описал проблему. Я как раз и выбирал тип - Dword, порядок LE 2143. адрес опрашивается, но сами данные не правилно считываются (например я опрашиваю адрес - итоговый расход первого трубопровода  - на ТВ7 - это число 12345 примерно - а в канал опрашивается - 3456896432). Порядок чередования байт менял, перепробовал все комбинации, так и не смог считать правильное показание регистра. Температура, давление и тп выбираю тип-float32, порядок LE 2143 - тут вопросов нет, показания корректные.

День добрый.

Поддержки именно 8 байтовых чисел в драйвере нет. Тут как вариант считывать два DWORD и затем в скрипте их склеивать. Но есть сомнения что получится вывести нормально такое число без потери точности.

Здраствуйте, если вас не затруднит - можете привести пример скрипта для склейки?

Для начала попробуйте вычитать значение в два DWORD. 

Я правильно понял: 

- Есть параметр в приборе (итоговый рахсод в ТВ7 например), так как параметр имеет тип double, то он занимает 4 последовательно расположенных регистра по 16 бит каждый, соответтсвенно 16 бит*4=8байт и занимает регистры 7563, 7564, 7565, 7566.

- скада должна опросить одним физ.каналом регистры 7563 и 7564 (Dword), а вторым физ.каналом регистры 7565 и 7566 (Dword).

- далее в виртуальном канале посредством скрипта складывается значение двух физ.каналов и результат сложения уже используется .

В общих чертах - да. Только в скрипте не простое сложение двух значений, а побитно надо будет их "склеить"

Вот выдержка из описания протокола ТВ7

Image 1909

С целым числом фокус со склейкой прошел бы, с Double боюсь что может не получится.

Сам я такой срипт не осилю. Пока только блоки разбираюсь. Помогите, если это не трудно.

Я выше уже написал - попробуйте для начала вычитать получается 2 DWORD - и уже от этого будем дальше отталкиваться.

Для чтения и записи регистров в стандарте «Modbus» предусмотрены специальные функции,
которые оперируют содержимым шестнадцатиразрядных регистров. Эти функции предполагают,
что прибор хранит данные только типа шестнадцатиразрядное беззнаковое целое и ничего не
«знают» о тех типах данных, которыми действительно представлены параметры прибора. Таким
образом, получается, что в приборе данные хранятся в некоем исходном формате, а передаются по
сети в виде набора шестнадцатиразрядных регистров. При передаче данных, чей размер в
исходном формате превышает 16 бит (long, float, double и т.д.), используются несколько
последовательных регистров. При этом младшие слова передаются в первую очередь, старшие - в
последнюю.

Если я считываю тип данных float32 - без проблем (Это и есть считывание 2ух последовательно расположенных регистров). Может считывать два канала float32?

И еще вопрос : чем тогда отличается float32 от dword&

Нужно прочитать два DWORD. (1 DWORD 2 регистра или 4 байта)

Спасибо попробую завтра.У нас время +4 часа от москвы

Сервис поддержки клиентов работает на платформе UserEcho