Измерения Pt100

  • В этой теме 78 ответов, 4 участника, последнее обновление 2 года назад сделано manjey73.
Просмотр 15 сообщений - с 1 по 15 (из 79 всего)
  • Автор
    Сообщения
  • #22340
    Oakim
    Участник

    Подскажите пожалуйста формулу нормализации показаний получаемых от Pt100.

    #22341
    Oakim
    Участник

    В 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 
    #22342
    manjey73
    Участник

    Вы на словах бы для начала объяснили что вы понимаете под нормализацией…
    А то у функции аж 4-ре входа и под понятие нормализации это как-то не подходит.

    #22343
    manjey73
    Участник

    FUNCTION_BLOCK RES_TO_TEMP или вам надо только эту часть привести в соответствие к C# ?

    tmp*tmp*tmp*tmp — что за ужас? возведение в степень? 🙂

    • Этот ответ был изменен 2 года назад от manjey73.
    #22345
    a80808
    Участник

    А это не то, что в пятой версии называлось усреднение показаний (птичка в канале)?
    https://ibb.co/rxX7m9f
    Кстати, а в шестой это тоже будет через формулы?

    #22347
    Oakim
    Участник

    Мне нужно сопротивление 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.
    #22349
    manjey73
    Участник

    Ну по if и else

    if(in>=100)
    {
    Ваш код then, если then и else единственные аргументы можно без {}
    if( in>390.48)
    error=2;
    else
    error=0;
    }
    else
    {
    Ваш код ELSE
    }

    В общем синтаксис смотрите в MSDN для тех или иных функций в C#

    #22350
    manjey73
    Участник

    Да, out = Формула и бла-бла-бла потом в конце сделать

    return out;

    SQRT и EXP надо посмотреть что это вообще, математических функций в C# достаточно и возможно те же…
    Ну и если в степень то ^ вроде. Опять же синтаксис смотрите

    • Этот ответ был изменен 2 года назад от manjey73.
    #22352
    Oakim
    Участник

    Понятно спасибо сейчас поробую

    #22353
    manjey73
    Участник

    Упс, у вас две переменных выходных фактически. out и error и тут я не знаю, надо Михаила спросить, так как сам не пробовал, есть для для формул в каналах аналог out ???

    #22354
    manjey73
    Участник

    И слово out не используйте для выходной переменной, outval например. Так как out зарезервирован в C# для совершенно других целей.

    #22355
    manjey73
    Участник

    Со степенью лоханулся, ^ это XOR
    Степень в C# это функция Pow. Возможно доступно из формул

    #22356
    manjey73
    Участник

    Использование формул

    з.ы. а Pow то и нет

    #22357
    Oakim
    Участник

    Вот черновик функции

    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));
      }
    }
    • Этот ответ был изменен 2 года назад от Oakim.
    • Этот ответ был изменен 2 года назад от Oakim.
    #22360
    a80808
    Участник

    А вы непосредственно в Скду передаете сопротивление датчика температуры? А влияние линии передачи? Может быть проще на месте поставить нормирующий преобразователь и получать уже стандартный сигнал?

Просмотр 15 сообщений - с 1 по 15 (из 79 всего)
  • Вы должны авторизироваться для ответа в этой теме.