爱家爱china
爱家爱china
级别: 家园常客
精华主题: 0
发帖数量: 507 个
工控威望: 882 点
下载积分: 1374 分
在线时间: 245(小时)
注册时间: 2009-09-07
最后登录: 2024-06-17
查看爱家爱china的 主题 / 回贴
楼主  发表于: 2011-11-29 19:33
本人对200里带参数子程序了解不多,今天随便编了个程序,却发现个令人困惑的问题,程序见附件。
当我按下I0.0或i0.2时,Q0.0和Q1.1都是同时输出,随便按下I0.1或I0.3, Q0.0和Q1.1也都是同时熄灭。
想请问这是什么缘故?如果像这样的话,那么在实际程序中,要调用多个相同的带参数子程序时怎么来用才能避免这种问题?

不要说分开调用  这个设备就是很多重复的地方  而且需要同时调用



  
朋友多了路好走!!!
爱家爱china
爱家爱china
级别: 家园常客
精华主题: 0
发帖数量: 507 个
工控威望: 882 点
下载积分: 1374 分
在线时间: 245(小时)
注册时间: 2009-09-07
最后登录: 2024-06-17
查看爱家爱china的 主题 / 回贴
1楼  发表于: 2011-11-29 20:52
沉得太快了
朋友多了路好走!!!
sjm213
有小知识,无大学问。
级别: 论坛版主

精华主题: 7 篇
发帖数量: 5196 个
工控威望: 7419 点
下载积分: 158480 分
在线时间: 3152(小时)
注册时间: 2007-11-21
最后登录: 2024-11-02
查看sjm213的 主题 / 回贴
2楼  发表于: 2011-11-29 21:58
http://support.automation.siemens.com/CN/llisapi.dll?func=cslib.csinfo&lang=zh&siteid=cseus&objid=7116338

在S7-200的子程序中使用局部变量类型 OUT 和 TEMP 时需要注意什么?

说明:

S7-200有一类用作临时存储或传递形参的局部存储器。

局部存储器:

给主程序分配64字节局部存储器
给共8级的每一级子程序嵌套分配64字节局部存储器
给中断服务程序分配64字节局部存储器
注意:

如果使用 LAD 或 FBD 编程,局部存储器的最后四个字节为 STEP 7 Micro/WIN 保留。

如果在 STEP 7 Micro/WIN 中的同一级嵌套里调用多个子程序,那么这些子程序使用相同的局部存储器。

当使用变量类型 OUT 和 TEMP 时,这些局部地址从相同嵌套级别的前一子程序取值。

预先定义的局部变量会生成正确的结果。如果不预先定义,相同嵌套级别的上一次被调用的子程序中的值会被保持。这样会导致问题,特别是在边沿信号检测时。

原因:

当子程序被调用时,局部数据类型 IN 和 TEMP 不被初始化和删除。

但是,局部数据类型 IN 和 IN_OUT 在子程序开始调用时被定义为分配的值或全局变量。

措施:

将局部输出变量定义为 "IN/OUT" ,而不是 "OUT" 或 "TEMP" 可以增加可靠性。在下一个循环选择全局变量做进一步测试。

为了评估这种行为,可以在开发程序时在每一嵌套级别的网络1中调用子程序。

通过检查程序功能,可以快速发现选错的变量类型。
爱家爱china
爱家爱china
级别: 家园常客
精华主题: 0
发帖数量: 507 个
工控威望: 882 点
下载积分: 1374 分
在线时间: 245(小时)
注册时间: 2009-09-07
最后登录: 2024-06-17
查看爱家爱china的 主题 / 回贴
3楼  发表于: 2011-11-29 22:10
恩  只是flag怎么赋值呢?是直接用位存储器?还是?弄个图片吧
朋友多了路好走!!!
爱家爱china
爱家爱china
级别: 家园常客
精华主题: 0
发帖数量: 507 个
工控威望: 882 点
下载积分: 1374 分
在线时间: 245(小时)
注册时间: 2009-09-07
最后登录: 2024-06-17
查看爱家爱china的 主题 / 回贴
4楼  发表于: 2011-11-30 17:44
继续顶上去
朋友多了路好走!!!
a4689
级别: 探索解密
精华主题: 0
发帖数量: 7 个
工控威望: 124 点
下载积分: 600 分
在线时间: 3(小时)
注册时间: 2011-12-06
最后登录: 2022-04-20
查看a4689的 主题 / 回贴
5楼  发表于: 2011-12-06 15:12
学习了
lixiangnse
级别: 略有小成
精华主题: 0
发帖数量: 104 个
工控威望: 231 点
下载积分: 3299 分
在线时间: 24(小时)
注册时间: 2011-05-14
最后登录: 2021-12-18
查看lixiangnse的 主题 / 回贴
6楼  发表于: 2011-12-06 19:53
看不懂  呵呵
ly349984168
级别: 家园常客
精华主题: 0
发帖数量: 435 个
工控威望: 583 点
下载积分: 4352 分
在线时间: 279(小时)
注册时间: 2008-02-22
最后登录: 2024-11-02
查看ly349984168的 主题 / 回贴
7楼  发表于: 2012-11-05 12:05
路过,学习学习
hanqin
级别: 论坛先锋
精华主题: 0
发帖数量: 1237 个
工控威望: 1226 点
下载积分: 2922 分
在线时间: 925(小时)
注册时间: 2009-01-09
最后登录: 2023-10-27
查看hanqin的 主题 / 回贴
8楼  发表于: 2012-11-05 17:01
将Temp用IN_OUT再调用是给个M的地址。