您现在所在的是:

PLC论坛

回帖:10个,阅读:2494 [上一页] [1] [2] [下一页]
6047
liaosun
文章数:1398
年度积分:50
历史总积分:6047
注册时间:2003/5/4
发站内信
2015论坛贡献奖
2014论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011博客贡献奖
2010博客杰出贡献奖
发表于:2014/9/18 9:14:55
#0楼

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(上升沿检测)指令的这个位变量被多次使用,所以程序运行出错。
此帖来自中华工控网工控博客
原文件地址:http://blog.gkong.com/more.asp?id=207587&Name=liaochangchu
我是廖常初,是一个高校的老师,曾在企业从事机械、电气技术工作,长期从事工业控制和PLC应用的教学、科研和工程应用工作。博客中的日志除注明外均为原创。愿意在此与大家探讨工控的问题!
廖常初工控博客地址:http://blog.gkong.com/blog.asp?name=liaochangchu
我曾写过几本小书: 《PLC编程及应用》第3版(S7-200)、《S7-300/400 PLC应用技术》第3版、《FX系列PLC编程及应用》第2版、《S7-200 PLC编程及应用》、《PLC基础及应用》第2版(FX系列大专教材)、《西门子人机界面(触摸屏)组态与应用技术》、《西门子工业通信网络组态编程与故障诊断》、《S7-1200 PLC编程及应用》第2版、《跟我动手学S7-300/400 PLC》、《跟我动手学FX系列PLC》
机械工业出版社廖常初图书专题:http://www.gkong.com/zt/liaochangchu/
2680
九翱九天
文章数:335
年度积分:50
历史总积分:2680
注册时间:2005/6/20
发站内信
发表于:2014/9/18 11:18:46
#1楼
这个问题以前没遇到过,还真没想到用EU会出现这种问题,这样的故障确实不好查找原因,学习了,谢谢瘳老师的解答
6594
eyujiedianqi
文章数:2622
年度积分:50
历史总积分:6594
注册时间:2009/6/5
发站内信
发表于:2014/9/18 12:25:33
#2楼
廖老师分析的对,我以前也犯过此类错误。
1850
18831660198
文章数:179
年度积分:50
历史总积分:1850
注册时间:2014/5/6
发站内信
发表于:2014/9/20 16:03:15
#3楼
顿开茅塞,学习了。
10516
xlian
文章数:3232
年度积分:62
历史总积分:10516
注册时间:2002/5/7
发站内信
2018论坛热心网友
西门子PLC体验(二)
发表于:2014/9/22 10:10:51
#4楼
子程序内不使用边沿指令,用边沿指令调用子程序
634
893398230
文章数:17
年度积分:50
历史总积分:634
注册时间:2014/1/5
发站内信
发表于:2014/9/22 14:16:18
#5楼
不能用上升沿与下降沿指令,那应该用什么指令勒?老师
10516
xlian
文章数:3232
年度积分:62
历史总积分:10516
注册时间:2002/5/7
发站内信
2018论坛热心网友
西门子PLC体验(二)
发表于:2014/9/23 8:59:33
#6楼
不是说不能用边沿指令,你这个子程序目的是调用是执行一次,在子程序中直接用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编辑过]
1977
michaelmayi
文章数:22
年度积分:56
历史总积分:1977
注册时间:2011/9/23
发站内信
发表于:2014/10/27 16:54:20
#7楼
想请教一下:自己编写了一个运算的子程序,在多组数据调用的时候,输入地址及输出地址均不同,且输出地址的类型为IN OUT,运算后的几个输出同步变化!?
6047
liaosun
文章数:1398
年度积分:50
历史总积分:6047
注册时间:2003/5/4
发站内信
2015论坛贡献奖
2014论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011博客贡献奖
2010博客杰出贡献奖
发表于:2014/10/27 20:20:29
#8楼
以下是引用8933982302014/9/22 14:16:18的发言:
不能用上升沿与下降沿指令,那应该用什么指令勒?老师
多次调用同一个子程序时,子程序内部不能使用上升沿(EU)和下降沿指令。其他情况可用这些指令。
6047
liaosun
文章数:1398
年度积分:50
历史总积分:6047
注册时间:2003/5/4
发站内信
2015论坛贡献奖
2014论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011博客贡献奖
2010博客杰出贡献奖
发表于:2014/10/27 20:22:52
#9楼
以下是引用michaelmayi2014/10/27 16:54:20的发言:
想请教一下:自己编写了一个运算的子程序,在多组数据调用的时候,输入地址及输出地址均不同,且输出地址的类型为IN OUT,运算后的几个输出同步变化!?
输出变量使用IN_OUT类型是没有问题的。子程序可以多次调用。

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

93.6006