0
Отвечен

Упаковка double или single на слейве в регистры Modbus TCP для Simplight

Ruslan Mirzoyan 7 лет назад в Редактор каналов обновлен 7 лет назад 6

Пишу дровишку для подключения экзотического прибора к СКАДе пока к вашей )) Пишу на VB.Net VS2008 под WinXP Скада естественно бесплатная ) Установка простая маленькая и временная. Дровишка опрашивает прибор и слейвом Модбас TCP на локальном адресе отдает на СКАДу. Так вот имею с прибора ASC2 сообщение преобразую в 64битную double могу в single 32). Засада не знаю как запихнуть байты этого числа в регистры и принять на стороне СКАДы вроде задача простая а полдня пробовал и никак. Кстати целые числа что со знаком что без знака 16 и 32 битные без проблем передаются. Может представления чисел разные или туплю. Подскажите, плиз, как правильно на обеих сторонах сделать.

Ответ

Ответ

указывается тип интерпретации пришедших байтов ну и порядок следования а уже в редакторе канала принятое преобразуется в нужный тип? Ну например я могу принять Int32 и сказать что это Single или String в редакторе самого канала.


да, именно так


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

Добрый день.


float32 пробовали в разных комбинациях байт и слов ?


Вот это оперативность! Спасибо буду бороть Float32) я так понял канал может настроится на любой вариант. Честно говоря я большинство времени пытался с 64 битами. Правильно ли я понял что в теге в настройках Модбаса на картинке указывается тип интерпретации пришедших байтов ну и порядок следования а уже в редакторе канала принятое преобразуется в нужный тип? Ну например я могу принять Int32 и сказать что это Single или String в редакторе самого канала. За ссылку спасибо буду изучать представление чисел ))

Ответ

указывается тип интерпретации пришедших байтов ну и порядок следования а уже в редакторе канала принятое преобразуется в нужный тип? Ну например я могу принять Int32 и сказать что это Single или String в редакторе самого канала.


да, именно так


+2

В общем получилось так для VB.NET. Значение пишем в переменную типа Single (32 бита, плавающая точка) потом бьем на байты и суем в два последовательных регистра Modbus по два байта старшим байтом вперед. В Simplight channel editor в редакторе Modbus драйвера создаем тег и в свойствах тега пишем адрес регистра где лежат старшие байты тип данных Float32, порядок байт Default или BE. Все работает. Проблема была в том, что пытался передать переменную типа Double (64 bit). Может кому пригодится.

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