新手继续提问SCL

每次有instart上升沿,我就把0赋值到aa,这时候如果外部UP信号,就把外部值赋值到也就是第一组数据。第一次instart上升沿的时候,会把外部值赋值到第一组数据,过一段时间重新让instart有上升沿的时候,这时候程序外部赋值到第二组数据,而不是第一组数据,应该是第一组数据呀。。。。研究半天不知道什么原因,不知道是不是上升沿写的不对,还是程序问题。如截图所示第一次我把M20.0 ,M20.1两个引脚都强制为1,都获得上升沿这时候会把外部4900写到第一组数据里面,这是正确的,过一会我把M20.0和M20.1全部写0,在重新写1,也就是让instart和UP重新获得上升沿,这时候就把外部输入2900赋值第二组数据,理论应该赋值到第一组数据呀,我把程序贴出来,希望前辈指导一下。。。。。。
FUNCTION_BLOCK FB2
VAR_INPUT
 instart:BOOL;
 up:    BOOL;
creenzhi: INT;
END_VAR

VAR
aa:INT;
bb:BOOL;
CC:BOOL;
END_VAR
begin
cc:=0;
IF instart=0 THEN 
RETURN;
END_IF;
  IF instart=1   AND  bb=0  THEN //如果检测到instart的上升沿,就把0赋值给aa,
    aa:=0;
   END_IF; 
  bb:=instart;
IF up= 1 THEN //每次有信号,就把对应外部输入值赋值到DB块里面
          "chitao" .DB_VAR[aa]:=creenzhi;aa:=aa+1;
END_IF;
END_FUNCTION_BLOCK

图片说明:

新手继续提问SCL    新手继续提问SCL    新手继续提问SCL    新手继续提问SCL   

最佳答案

改成如下:
FUNCTION_BLOCK FB3
VAR_INPUT
 instart:BOOL;
 up:    BOOL;
creenzhi: INT;
END_VAR

VAR
aa:INT;
bb:BOOL;
CC:BOOL;
END_VAR
begin
cc:=0;
IF instart=0 THEN 
    bb:=instart;        //这里在下面的话,当instart=0直接返回了,bb不会复位成0,下面的aa:=0就一直不会执行了
RETURN;
END_IF;
  IF instart=1   AND  bb=0  THEN //如果检测到instart的上升沿,就把0赋值给aa,
    aa:=0;
   END_IF; 
 
IF up= 1 THEN //每次有信号,就把对应外部输入值赋值到DB块里面
          "chitao" .DB_VAR[aa]:=creenzhi;aa:=aa+1;
END_IF;
END_FUNCTION_BLOCK

提问者对于答案的评价:

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc136683.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月1日 上午12:20
下一篇 2017年6月1日 上午12:20

相关推荐