Как прочитать 64-битное значение по modbus ?
Добавлено: 25 фев 2021, 16:06
в серии cMT доступны 64-битные форматы чисел (c некоторыми ограничениями, см. примечание).
Для считвания переменной такого формата с устройство по протоколу modbus достаточно указать такой формат числа и соотвествующие регистры подрят будут автоматически считаны и "склеены" в число.
Примечание:
> Допустимый диапазон входных значений (объекты ЧИСЛО, ВВЕСТИ_СЛОВО и т.д.)
1) uint64: от 0 до 2^48
2) int64: от -2^48 до 2^48
3) double: от -2^48 до 2^48
> int64 / uint64
Double - это внутренний тип данных, используемый в вычислениях, при этом мантисса хранится с 52-битной точностью. В результате 15-значные целые числа и часть 16-значных целых чисел могут быть сохранены точно, но сохранение чисел, превышающих это, может привести к потере точности.
В EasyBuilder Pro входные значения, превышающие 48 бит, могут привести к ошибке, поэтому предел ввода определен как 48-битный.
> double
В EasyBuilder Pro верхний/нижний предел для ввода ранее определялся максимальным/минимальным значением double (+/-1,79*10^308), что практически безгранично. Для единообразия верхний/нижний предел ввода также определяется от -2^48 до 2^48.
Пример:
Значение
144'115'188'075'855'872 (64-битное беззнаковое) читаемое с ПЛК может быть отображено как
144'115'188'075'855'870 в объекте ЧИСЛО/Numeric с потерей точности.
Прочие обстоятельства:
Как показано в примере выше, подобная проблема может произойти при использовании импорте Рецептов/SQL запроса/Базы_данных (Выборка данных), где находятся данные из сторонних источников.
Обратите внимание, что для числа double как числа с плавающей запятой присуще проблема точности. Не следует думать, что все числа в диапазоне от 2^48 до -2^48 будут гарантировано отображаться точно.
Приведенные выше пояснения относятся только к использованию int64/uint64.
Для считвания переменной такого формата с устройство по протоколу modbus достаточно указать такой формат числа и соотвествующие регистры подрят будут автоматически считаны и "склеены" в число.
Примечание:
> Допустимый диапазон входных значений (объекты ЧИСЛО, ВВЕСТИ_СЛОВО и т.д.)
1) uint64: от 0 до 2^48
2) int64: от -2^48 до 2^48
3) double: от -2^48 до 2^48
> int64 / uint64
Double - это внутренний тип данных, используемый в вычислениях, при этом мантисса хранится с 52-битной точностью. В результате 15-значные целые числа и часть 16-значных целых чисел могут быть сохранены точно, но сохранение чисел, превышающих это, может привести к потере точности.
В EasyBuilder Pro входные значения, превышающие 48 бит, могут привести к ошибке, поэтому предел ввода определен как 48-битный.
> double
В EasyBuilder Pro верхний/нижний предел для ввода ранее определялся максимальным/минимальным значением double (+/-1,79*10^308), что практически безгранично. Для единообразия верхний/нижний предел ввода также определяется от -2^48 до 2^48.
Пример:
Значение
144'115'188'075'855'872 (64-битное беззнаковое) читаемое с ПЛК может быть отображено как
144'115'188'075'855'870 в объекте ЧИСЛО/Numeric с потерей точности.
Прочие обстоятельства:
Как показано в примере выше, подобная проблема может произойти при использовании импорте Рецептов/SQL запроса/Базы_данных (Выборка данных), где находятся данные из сторонних источников.
Обратите внимание, что для числа double как числа с плавающей запятой присуще проблема точности. Не следует думать, что все числа в диапазоне от 2^48 до -2^48 будут гарантировано отображаться точно.
Приведенные выше пояснения относятся только к использованию int64/uint64.