登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:S7-200子程序调用问题

点击:2558 回复:10


wcc3885:用子程序作一个计时运算,输出运行分钟数和秒数。主程序在调用子程序时,如果单一M0.0或M0.1闭合时能正常工作并运算正确,但同时有M0.0和M0.1闭合时就出错,是那里出错了呢?
主程序:VD0为当前运行秒数,VD4为运行分钟数
网络1
LD M0.0
CALL SBR1,VD0,VD4
网络2
LD M0.1
CALL SBR1,VD8,VD12
子程序:LD0为过程量,LD4为计时值
网络1
LDSM0.5
EU
+D 1,LD0
网络2
LDD= LD0,59
EU
+D 1,LD4
网络3
LDD>= LD0,60
MOVD 0,LD0
下面是我的回帖:
在同一个扫描周期内多次调用同一个子程序时,不能使用上升沿(EU)和下降沿指令。
在检测信号的上升沿或下降沿时,需要用一个位变量来保存上一扫描周期被检测信号的值。S7-200的操作系统为每一条上升沿或下降沿时指定一个位变量,子程序同时被多次调用时,子程序中某条EU(上升沿检测)指令的这个位变量被多次使用,所以程序运行出错。
14-09-18 09:14
这个问题以前没遇到过,还真没想到用EU会出现这种问题,这样的故障确实不好查找原因,学习了,谢谢瘳老师的解答
14-09-18 11:18
廖老师分析的对,我以前也犯过此类错误。
14-09-18 12:25
顿开茅塞,学习了。
14-09-20 16:03
子程序内不使用边沿指令,用边沿指令调用子程序
14-09-22 10:10
不能用上升沿与下降沿指令,那应该用什么指令勒?老师
14-09-22 14:16
不是说不能用边沿指令,你这个子程序目的是调用是执行一次,在子程序中直接用LD SM0.0驱动,然后用边沿指令调用;
SBR1:
NET1
LD SM0.0  
+D 1,LD0
NET2
D= LD0,59
+D 1,LD4
NET3
D>=  LD4,60
MOVD 0,LD0
然后主程序里调用:
NET1
LD M0.0
A  SM0.5
EU
CALL SBR1,VD0,VD4
NET2
LD M0.1
A  SM0.5
EU
CALL SBR1,VD8,VD12
最后修改:2014/9/23 9:09:41
14-09-23 08:59
想请教一下:自己编写了一个运算的子程序,在多组数据调用的时候,输入地址及输出地址均不同,且输出地址的类型为IN OUT,运算后的几个输出同步变化!?
14-10-27 16:54

引用 893398230 在 2014/9/22 14:16:18 发言【内容省略】

多次调用同一个子程序时,子程序内部不能使用上升沿(EU)和下降沿指令。其他情况可用这些指令。
14-10-27 20:20

引用 michaelmayi 在 2014/10/27 16:54:20 发言【内容省略】

输出变量使用IN_OUT类型是没有问题的。子程序可以多次调用。
14-10-27 20:22

上一页下一页

工控新闻

更多新闻资讯