登录
注册
登录
注册
学院
工具云
项目外包
技术会议
计算公式
资源
资讯
社区
文库
专题
项目
请
登录
后使用快捷导航
没有帐号?
立即注册
社区
›
研发信息&资源
›
研发应用
西门子S7-200PLC带参数调用的子程序运行为什么异常?
刘晓强
/
于 2013-5-8 13:43
/
1
/
1102
/
[复制链接]
[只看该作者]
[打印]
[上一主题]
[下一主题]
刘晓强
积分
0
精华
0
学分
173
技术分
0
最后登录 2014-4-9
加为好友
发送消息
访问家园
西门子S7-200PLC两个子程序的局部变量和程序完全相同(见下面的右图),运行时发现I0.0为1时Q0.0和Q1.0同时变为1。将置位指令改为对L0.1的赋值(线圈)指令后运行正常,将OUT参数“输出”改为IN_OUT参数运行也正常。为什么?[img][/img]
动力与电气工程2015
分享到:
QQ好友和群
QQ空间
腾讯微博
腾讯朋友
收藏
0
分享
淘帖
0
支持
0
反对
0
相关帖子
•
在用flotherm做热设计时,手机主板里面的含铜量与导热系数存在什么样的量化关系?还是只有经验值?
举报
使用道具
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
|
回复
共 1 个关于本帖的回复 最后回复于 2013-5-8 13:44
秦晓蕊
积分
0
精华
0
学分
205
技术分
0
最后登录 2014-4-30
加为好友
发送消息
访问家园
个人资料
主题列表
发消息
沙发
秦晓蕊
新来的
发表于 2013-5-8 13:44:05
|
只看该作者
1.出错的原因S线圈(置位指令)断开时,L0.1的值保持不变。从子程序的局部变量表可以看出,输入参数IN和输出参数OUT均用L区的局部变量保存。这两个子程序属于同一级,它们的局部变量使用同一片物理存储区。换句话说,两个子程序的L0.1先后使用同一个物理存储器位。OB1中的I0.0为1时, 子程序SBR_0中的L0.1和它的实参Q0.0被置位。在执行SBR_1时,因为两个子程序的L0.1先后使用同一个物理存储器位,SBR_1的L0.1仍然为1,使它的实参Q1.0也变为1。Q1.0变为1不是因为程序的作用,而是两个子程序的L0.1共用同一个物理存储器位引起的。2.将OUT参数改为IN_OUT参数未出错的原因在Q1.0为0,I0.0为1时,L0.1因为是IN_OUT参数,刚开始执行SBR_1时,L0.1的输入值为0,与SBR_0执行后L0.1的值无关。因为I1.0为0,SBR_1执行完后,L0.1的值不变,仍然为0。所以Q1.0的值为0,不会变为1。3.置位指令改为赋值指令(线圈)未出错的原因假设I0.0为1时,I1.0为0,执行SBR_1的程序时,L0.0的触点断开,使L0.1的线圈断电,所以Q1.0为0。4.同样的程序为什么S7-300不会出错S7-300的功能(FC)和S7-200的子程序差不多,S7-300的FC1和FC2中同样的置位程序运行时不会出错。这是因为S7-300和S7-200保存IN、OUT参数的方法不一样。S7-300同一级的FC的临时局部变量(TEMP)使用同一片物理存储区,它们的IN、OUT参数没有标出L区的地址,与临时变量的保存方法不同。因此同样的程序S7-300不会出错。
举报
使用道具
照妖镜
回复
支持
反对
返回列表
B
Color
Image
Link
Quote
Code
Smilies
高级模式
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
发表主题
热门导读
回复
点评
评分
分享
关注我们
快速回复
快速发帖
返回顶部
返回列表
360网站安全检测平台
共 1 个关于本帖的回复 最后回复于 2013-5-8 13:44