恭喜,你发布的帖子
发布于 2020-05-22 17:05:31
4楼
//OUT = [ ((FLOAT (IN) – K1)/(K2–K1)) * (HI_LIM–LO_LIM)] + LO_LIM
//if BIPOLAR K1 = –27648.0 and K2 = +27648.0
//if UNIPOLAR K1 = 0.0 and K2 = +27648.0
VAR_INPUT
AI_in:ARRAY[1..70] OF WORD ; // 模拟量输入
HI_LIM : Real; //量程上限
LO_LIM : Real; // 量程下限
BIPOLAR :ARRAY[1..70] OF BOOL; //输入极性选择FALSE为单极性TRUE为双极型
filter:REAL; //滤波系数
END_VAR
VAR_OUTPUT
SCALE_OUT :ARRAY[1..70] OF REAL; // 转换输出
RET_VAL_1 :ARRAY[1..70] OF INT; // 程序处理是否有错
END_VAR
VAR
store_AI:ARRAY[1..70] OF REAL;
store_scale_out:ARRAY[1..70]OF REAL;
NO:INT;
END_VAR
FOR NO:= 1 TO 70 BY 1 DO
store_AI[NO]:= INT_TO_REAL( WORD_TO_INT(AI_in[NO]));
IF (store_AI[NO] >= 0.0 AND store_AI[NO] <= 27648.0 AND NOT BIPOLAR[NO]) OR ( store_AI[NO] >= -27648.0 AND store_AI[NO] <= 27648.0 AND BIPOLAR[NO]) THEN
RET_VAL_1[NO] := 0;
IF NOT BIPOLAR[NO] THEN
store_scale_out[NO]:= (store_AI[NO] / 27648.0) * (HI_LIM - LO_LIM) + LO_LIM;
ELSE
store_scale_out[NO]:= ((store_AI[NO] +27648.0) / 55296.0) * (HI_LIM - LO_LIM) + LO_LIM;
END_IF;
ELSIF ((store_AI[NO] <0.0 OR store_AI[NO] > 27648.0 )AND NOT BIPOLAR[NO]) OR ((store_AI[NO] < -27648.0 OR store_AI[NO] >27648.0 )AND BIPOLAR[NO]) THEN
RET_VAL_1[NO] := 1;//输入数值超限
ELSIF ((HI_LIM - LO_LIM)=0) THEN
RET_VAL_1[NO] := 2;//除零错误
END_IF;
IF RET_VAL_1[NO] <> 0 THEN
store_scale_out[NO]:= 0.0 ;
END_IF;
SCALE_OUT[NO]:= store_scale_out[NO]* filter + SCALE_OUT[NO]* (1.0 - filter);
END_FOR;
请填写推广理由:
分享
只看
楼主