PDA

Просмотр полной версии : Преобразование REAL



КонстантинСт
24.06.2023, 21:22
Всем доброго времени суток!
Подскажите, столкнулся со следующей задачей:
Нужно на панели спк300 задать в формате REAL значение, которое будет записывать на ТРМ по Модбасу через ПЛК200 значение гистерезиса.
Для этого в ТРМ нужно передать значение INT которое несет в себе само число и UINT с позицией точки в числе.
Соответственно я считываю с СПК значение в формате DWORD (к примеру задавая 10,54 получаю 1093182423). Далее все хорошо, я могу его преобразовать в REAL в
контроллере или разложить на два слова WORD, но как мне это дело преобразовать в INT и UINT? То есть если его разложить на слова получаются значения к примеру
16680 и 41943. WORDtoINT тут не прокатывает. На форуме я видел подобные случаи, но решения не особо подошли.

EFrol
25.06.2023, 00:17
А можно узнать какой ТРМ и адрес регистра?

КонстантинСт
25.06.2023, 06:50
ТРМ138.
Канал 1 зона гистерезиса HYSt
положение десятичной точки 0x0030
значение гистерезиса int 0x0031
Канал 2 зона гистерезиса HYSt
положение десятичной точки 0x0032
значение гистерезиса int 0x0033

Шаблон кодесиса для mx110 и ТРМ по идее просит записать в него сразу int и uint.

EFrol
25.06.2023, 08:10
Если верить инструкции:
68447

то 0x30 = числу десятичных цифр при 4 значной мантиссе или 4 - длина целой части
получается 10,54 это 0х30 = 2; 0x31 = 1054;

Давайте попробуем так:
0x30 := 4 - (TRUNC_INT(LOG(10.54)) + 1); // Длина мантиссы - (порядок числа + 1 = длина целой части) = число десятичный цифр
0x31 := TRUNC_INT(10,54 * EXPT(10, число десятичных)); // Получим чистую мантиссу = 1054

КонстантинСт
25.06.2023, 09:04
Тысяча благодарностей!