PDA

Просмотр полной версии : СП307 float в макросах



Lexx225
14.06.2024, 16:50
Доброго времени суток. Немного запутался. Делаю макрос для панели СП307, который будет сигнализировать о выходе температуры за границы. Нигде не могу найти более подробное чем в РЭ описание приемов работы с DWORD и float в ANSI C. Получаю данные в панель с ПВТ110 в виде DWORD в регистры PSW260 и PSW261. Дальше мне в макросе нужно сравнить это значение с контрольным.

что-то типа

float t629;
t629=???????????????????????
if (t629>=24.0 && t629<=24.5)
{SetPSB(260);
ResetPSB(261);
}
else if (t629>24.5)
{ResetPSB(260);
SetPSB(261);
}
else
{ResetPSB(260);
ResetPSB(261);
}

Для этого мне DWORDы нужно превратить во float. Обратный пример разобран в РЭ. А тут как быть?

Спасибо заранее.

EFrol
14.06.2024, 17:13
Не понял! Что Вы хотите?
76587

Lexx225
14.06.2024, 17:21
Проблема в синтаксисе)) Вот так нужно?

float t629;
t629=*(float*)&(PSW[260],PSW[261]);
if (t629>=24.0 && t629<=24.5)
{SetPSB(260);
ResetPSB(262);
}
else if (t629>24.5)
{ResetPSB(260);
SetPSB(262);
}
else
{ResetPSB(260);
ResetPSB(262);
}

EFrol
14.06.2024, 17:35
А так:
float t629;
DWORD dwVal;
dwVal = MAKEDWORD(PSW[260],PSW[261]);
t629 = DWord_2_Float(dwVal);

kondor3000
14.06.2024, 17:55
Что за ерунда, в ПВТ100, температура и влажность передаётся двумя 16 битными целочисленными в соседних регистрах. Откуда вы DWORD выкопали ?

Целочисленную тоже можно отобразить в панели как число с запятой, сместив точку на нужное количество знаков.
Перевести во Float, можно с помощью ФО, выбрав Математику и разделив регистр с целочисленной, например на 10.0.

Lexx225
14.06.2024, 18:02
Сходу не взлетело, но общий вектор понятен. Спасибо, копаю дальше. По крайней мере компилятор заткнулся со своими ошибками.

Lexx225
14.06.2024, 18:05
Что за ерунда, в ПВТ100, температура и влажность передаётся двумя 16 битными целочисленными в соседних регистрах. Откуда вы DWORD выкопали ?

Целочисленную тоже можно отобразить в панели как число с запятой, сместив точку на нужное количество знаков.

У меня ПВТ110, я вроде в первом посте писал... Где там у него целые?

kondor3000
14.06.2024, 18:17
У меня ПВТ110, я вроде в первом посте писал... Где там у него целые?

Если у вас ПВТ110, то там читается сразу Float32, ставите в настройках дисплея DWORD и Float. 76588
А сравнить с уставкой можно с помощью графических макросов от petera. Они работают даже в эмуляции и отладить проще. Макросы вообще не нужны.

Lexx225
14.06.2024, 18:37
С отображением все нормально с самого начала было, да и этот макрос в итоге я добил, все заработало. Мне описывать это для квалификации проще, если я использую только средства самой панели.

Спасибо все равно)))))