Видимо kondor3000 и capzap имели ввиду что в
можно вынести знак за скобку.Код:tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - (delta * -1));
После вспомнить таблицу умножения на 1:Код:tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - ( - (delta * 1)));
После вспомнить Великое Правило про пару минусов дающих плюс:Код:tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - ( - delta));
А дальше сказку как стоял витязь перед камнем, а нём:Код:tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) + delta);
"Налево пойдешь - коня потеряешь.
Направо пойдешь - коня потеряешь.
Прямо пойдешь - коня потеряешь.
Назад пойдешь - коня потеряешь"
Т.е. не пофиг ли что на камне написано, всё равно пешком идти.
--Код:tmp_val = DWord_2_Float(temp_value) + delta;
Видимо оба - и явный и неявный.Код:Каким способом можно выполнить приведение типов для случая конфигуратора панели? (float)delta; ? float tmp_delta = delta; ?
Последний раз редактировалось Валенок; 02.11.2022 в 15:10.
И оба не сработали.
Даже так попробовал:
И так:Код:tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - (delta * -1.0));
Почему тогда с положительной дельтой всё хорошо?Код:tmp_val = DWord_2_Float(temp_value) + (delta * 1.0);
Я как бы умножал на -1, чтобы сделать из отрицательной дельты - положительную.
Поэтому у меня всё правильно.10 - 3 = 7;
10 + (-3) = 7;
10 - (-3 * -1) = 7;
Пока не понимаю, что за фигня происходит. Попробую проэмулировать поэтапно в свободное время.
Может быть разработчикам покажется что-то сверх-очевидным и они подскажут, что не так.
Последний раз редактировалось stdenits; 02.11.2022 в 15:47.
Предлагаю прям в панели вывести в hex'e все 8 символов для PSW[300..301] и сюда их. Со всеми исходными.
--
Ну тогда явное-преявное:И оба не сработали.
tmp_val=(float)temp_value + (float)delta;
Последний раз редактировалось Валенок; 02.11.2022 в 15:57.
Не написали самого главного, ваша переменная целочисленная или FLOAT?
Для целочисленной:
Одну переменную DWORD (2 регистра) с помощью функц. области скопировать из PFW в регистр 4х512, а в ПР слейве собрать переменную из двух регистров, на скрине 1 Пиём 32 бит переменной.jpg
Для FLOAT, всё тоже самое, только в ПР вы ставите переменную FLOAT и уже собирать не надо, она и так 2 регистра.
При неправильном отображении или снять (поставить) галку в панели или в ПР поменять местами старший и младший регистр.
Последний раз редактировалось kondor3000; 03.11.2022 в 11:01.
Касательно моей проблемы.
Дело было в приведении типов: элемент Ввод данных для переменной дельты имеет тип Word и формат Dec. Переменная, хранящая дельту, имеет тип Int. Решилось всё с помощью преобразования Word_2_Int16(x). Далее тип Float и Int можно нормально складывать и вычитать.
Последний раз редактировалось stdenits; 06.11.2022 в 10:16.