每次有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
图片说明:
最佳答案
改成如下:
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