wst 发表于 2021-8-20 15:40:52

模拟量量程转换源码

声明
FFUNCTION_BLOCK HS_ENGIN_HEX                  (*工程量转换成 16进制数据*)
VAR_INPUT
        EN: BOOL;
        IN: REAL;         (*工程量数据*)               
        HIGH: REAL;       (*工程量量程上限*)       
        LOW: REAL;          (*工程量量程下限*)                                                                                              
        MODE: BYTE;       (*模式输入端        0:4~20mA1:0~20mA        2:0~5V/0~10V3:-10~10V*)
END_VAR

VAR_OUTPUT
        ENO: BOOL;
        OUT: UINT;                 (*输出16进制数据 *)
        ERROR: BOOL;
END_VAR
VAR
END_VAR
程序


IF MODE=1 THEN            (*最大量程范围是0—21mA,精度范围内量程是0—20mA*)
    IF IN>HIGH THEN
      OUT:=16#F3CE;
      ERROR:=TRUE;
    ELSIF IN<LOW THEN
      OUT:=0;
      ERROR:=TRUE;
    ELSE
      OUT:=REAL_TO_UINT((IN-LOW)/(HIGH-LOW)*16#F3CE);
      ERROR:=FALSE;
    END_IF
END_IF

IF MODE=2 THEN   (*最大量程范围是0—10.4V / 0—5.2V,精度范围内量程是0—10V / 0—5V*)
    IF IN>HIGH THEN
      OUT:=16#F626;
      ERROR:=TRUE;
    ELSIF IN<LOW THEN
      OUT:=0;
      ERROR:=TRUE;
    ELSE
      OUT:=REAL_TO_UINT((IN-LOW)/(HIGH-LOW)*16#F626);
      ERROR:=FALSE;
    END_IF
END_IF

IF MODE=3 THEN          (*最大量程范围是-10.4—10.4V,精度范围内量程是-10—10V*)
    IF IN>HIGH THEN
      OUT:=16#FB13;
      ERROR:=TRUE;
    ELSIF IN<LOW THEN
      OUT:=16#04EC;
      ERROR:=TRUE;
    ELSE
      OUT:=REAL_TO_UINT((IN-LOW)/(HIGH-LOW)*16#F627+16#04EC);
      ERROR:=FALSE;
    END_IF
END_IF


wx_6893125775 发表于 2022-1-25 15:32:20

不错,谢谢分享
页: [1]
查看完整版本: 模拟量量程转换源码