回复:模拟量批量处理问题

已锁定

askab

  • 帖子

    405
  • 精华

    5
  • 被关注

    34

论坛等级:侠圣

注册时间:2005-07-24

黄金 黄金 如何晋级?

发布于 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;


大家同行,you ok ? me !
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54759条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。