Потеря точности при чтении Float32 в Modbus-драйвере
Переменная типа REAL (4 байта) в CDS 2.3 и памяти ПЛК имеет значение 10.68 (например).
При чтении Holdings Register с типом данных Float32 в тег SimpLight тип
single (double) значение равно 10.625.
Параллельное чтение ОРС сервером Lectus (да и любыми другими Modbus-серверами) дает значение 10.68.
Почему происходит потеря точности? Запись в эту переменную из монитора SimpLight не всегда дает эффект, если не изменять значение существенно, например 10.75, или 10.88. А если ввести 11.22 - значение запишется, но в контроллере будет 11.08, например.
Ошибка обработки 4-байтных чисел с плавающей точкой? Как исправить? Нет никакого желания все готовые теги в редакторе каналов переделывать на ОРС сервер.
Как Вы оцениваете обслуживание, которое получили?
Оценка удовлетворенности от Сергей Королев 7 лет назад
Добавьте комментарий о качестве обслуживания (необязательно):
Проблема решена.
Как мне подсказали в техподдержке, адрес нужно было уменьшить на 1, а порядок байт изменить с default (BE_4_3_2_1) на LE_2_1_4_3.
Адресация в SIMPLight начинается с 0. И даже если у вас получились значения float32 на адресе +1, то, очевидно, в определенных ситуациях в десятых-сотых вы получите проблемы, как у меня.
Читайте внимательно документацию :)
Этот совет касается и меня.
Спасибо техподдержке! Оперативно и четко.