Массив TON в ОЛ объявить не получится, не работает. Делайте с отдельными TON.
Вид для печати
Для тех, кто хочет поломать голову в свободное время, на днях столкнулся со сборкой REAL из 2 WORD в этой теме https://owen.ru/forum/showthread.php?t=39248&page=4#39
Открыл что было быстрее, в ОЛ программу сборки от capzap ( когда то он её выложил в одной из тем), программу проверял в нескольких пределах, всё работало правильно.
Ввёл числа 52429 и 16268 и получил 0.1 Вложение 74640 Потом проверил в другой программе Codesys 2.3 , получил 1.1 Вложение 74641
Позже оказалось что Функция arrWToReal, врёт только на пределе от 1.0 до 1.99999 и от -1.0 до -1.99999, на остальных пределах считает правильно.
Вопрос, где ошибка в коде функции arrWToReal ?
Выложил вариант в Лоджике и в Codesys 2.3, кому как удобнее.
В Codesys 2.3, для сравнения функция через указатели, считает правильно.
Сам пока решил, вводом дополнительной строки в конце функции.
Если верить Число одинарной точности
то:
Вложение 74658
получается:
Код:..
exp_raw := shr(stuffAdd, 23) mod 256;
mantissa := stuffAdd mod 8388608;
if exp_raw = 0 then
mantissa := mantissa + 8388608;
end_if;
exponent := udint_to_real(exp_raw) - udint_to_real(127);
mant_mult := 1;
..
Этот вариант у меня уже давно есть, только в выложенном варианте опять ошибка, получается 0.1 Вложение 74662 а здесь правильно 1.1 Вложение 74663