Стартовая страница › Форумы › Взаимодействие с устройствами › Измерения Pt100
- В этой теме 78 ответов, 4 участника, последнее обновление 2 года назад сделано manjey73.
-
АвторСообщения
-
15.03.2022 в 08:26 #22340OakimУчастник
Подскажите пожалуйста формулу нормализации показаний получаемых от Pt100.
15.03.2022 в 09:12 #22341OakimУчастникВ MasterSCADA у меня была следующая функция:
PROGRAM MAIN_PROGRAM VAR_INPUT in1:REAL; in2:REAL; in3:REAL; in4:REAL; END_VAR VAR_OUTPUT out1:REAL; out2:REAL; out3:REAL; out4:REAL; error1:INT; error2:INT; error3:INT; error4:INT; END_VAR VAR res_to_temp1:RES_TO_TEMP; res_to_temp2:RES_TO_TEMP; res_to_temp3:RES_TO_TEMP; res_to_temp4:RES_TO_TEMP; END_VAR res_to_temp1(in:=in1,out=>out1,error=>error1); res_to_temp2(in:=in2,out=>out2,error=>error2); res_to_temp3(in:=in3,out=>out3,error=>error3); res_to_temp4(in:=in4,out=>out4,error=>error4); END_PROGRAM FUNCTION_BLOCK RES_TO_TEMP VAR_INPUT in:REAL; END_VAR VAR_OUTPUT out:REAL; error:INT; END_VAR VAR tmp:REAL; END_VAR tmp:=(in/100)-1; IF in>=100 THEN out:=(SQRT(EXPT(3.9083*EXPT(10,-3),2) - 4*(-5.775*EXPT(10,-7))*(1-in/100)) - 3.9083*EXPT(10,-3))/(2*(-5.775*EXPT(10,-7))); IF in>390.48 THEN error:=2; ELSE error:=0; END_IF ELSE out:=(tmp*255.819)+(tmp*tmp*9.14550)-(tmp*tmp*tmp*(-2.92363))-(tmp*tmp*tmp*tmp*(1.7909)); IF in<18.52 THEN error:=1; ELSE error:=0; END_IF END_IF END_FUNCTION_BLOCK
15.03.2022 в 09:39 #22342manjey73УчастникВы на словах бы для начала объяснили что вы понимаете под нормализацией…
А то у функции аж 4-ре входа и под понятие нормализации это как-то не подходит.15.03.2022 в 09:41 #22343manjey73УчастникFUNCTION_BLOCK RES_TO_TEMP или вам надо только эту часть привести в соответствие к C# ?
tmp*tmp*tmp*tmp — что за ужас? возведение в степень? 🙂
- Этот ответ был изменен 2 года назад от manjey73.
15.03.2022 в 09:59 #22345a80808УчастникА это не то, что в пятой версии называлось усреднение показаний (птичка в канале)?
https://ibb.co/rxX7m9f
Кстати, а в шестой это тоже будет через формулы?15.03.2022 в 10:57 #22347OakimУчастникМне нужно сопротивление PT100 в Омах пересчитать в Температуру в Цельсиях.
Как мне вот этот кусок переписать под Rapid SCADA?
tmp:=(in/100)-1; IF in>=100 THEN out:=(SQRT(EXPT(3.9083*EXPT(10,-3),2) - 4*(-5.775*EXPT(10,-7))*(1-in/100)) - 3.9083*EXPT(10,-3))/(2*(-5.775*EXPT(10,-7))); IF in>390.48 THEN error:=2; ELSE error:=0; END_IF ELSE out:=(tmp*255.819)+(tmp*tmp*9.14550)-(tmp*tmp*tmp*(-2.92363))-(tmp*tmp*tmp*tmp*(1.7909)); IF in<18.52 THEN error:=1; ELSE error:=0; END_IF END_IF
Вот эта математика
Методика расчета температуры по сопротивлению термометров сопротивления- Этот ответ был изменен 2 года назад от Oakim.
15.03.2022 в 11:03 #22349manjey73УчастникНу по if и else
if(in>=100)
{
Ваш код then, если then и else единственные аргументы можно без {}
if( in>390.48)
error=2;
else
error=0;
}
else
{
Ваш код ELSE
}В общем синтаксис смотрите в MSDN для тех или иных функций в C#
15.03.2022 в 11:04 #22350manjey73УчастникДа, out = Формула и бла-бла-бла потом в конце сделать
return out;
SQRT и EXP надо посмотреть что это вообще, математических функций в C# достаточно и возможно те же…
Ну и если в степень то ^ вроде. Опять же синтаксис смотрите- Этот ответ был изменен 2 года назад от manjey73.
15.03.2022 в 11:07 #22352OakimУчастникПонятно спасибо сейчас поробую
15.03.2022 в 11:09 #22353manjey73УчастникУпс, у вас две переменных выходных фактически. out и error и тут я не знаю, надо Михаила спросить, так как сам не пробовал, есть для для формул в каналах аналог out ???
15.03.2022 в 11:10 #22354manjey73УчастникИ слово out не используйте для выходной переменной, outval например. Так как out зарезервирован в C# для совершенно других целей.
15.03.2022 в 11:16 #22355manjey73УчастникСо степенью лоханулся, ^ это XOR
Степень в C# это функция Pow. Возможно доступно из формул15.03.2022 в 11:27 #22356manjey73Участникз.ы. а Pow то и нет
15.03.2022 в 14:20 #22357OakimУчастникВот черновик функции
public float ResToTemp(params float Resist) { float Tmp, Temp; float A = 3.9083E-3F; float B = -5.775E-5F; if (Resist >= 100) { Temp = (sqrt(pow(A,2)-4*(B)*(1-Resist/100))-A)/(2*B); } else { Tmp = (Resist/100)-1; Temp = (Tmp*255.819)+(pow(Tmp,2)*9.14550)+(pow(Tmp,3)*(-2.92363))+(pow(Tmp,4)*(1.7909)); } }
15.03.2022 в 14:37 #22360a80808УчастникА вы непосредственно в Скду передаете сопротивление датчика температуры? А влияние линии передачи? Может быть проще на месте поставить нормирующий преобразователь и получать уже стандартный сигнал?
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.