cyh1986
级别: 家园常客
精华主题: 0
发帖数量: 358 个
工控威望: 722 点
下载积分: 683 分
在线时间: 296(小时)
注册时间: 2009-04-28
最后登录: 2024-05-31
查看cyh1986的 主题 / 回贴
楼主  发表于: 2010-05-11 17:47
我用S7-200编写了一个单键启动的程序,有几个输出,前面的输出锁后面的输出。
但是我调试了一下,只要第一个按一下,后面的立即都有输出。
对西门子子程序这块还不是很明白,请大家帮忙看看
谢谢
描述:西门子子程序调用
附件: 科行.rar (10 K) 下载次数:579
网站提示: 请不要用迅雷下载附件,容易出错
wwcwwc
级别: VIP会员

精华主题: 0
发帖数量: 3392 个
工控威望: 3188 点
下载积分: 70175 分
在线时间: 1601(小时)
注册时间: 2008-04-20
最后登录: 2024-06-02
查看wwcwwc的 主题 / 回贴
1楼  发表于: 2010-05-12 14:06
你的子程序network1和network2的线圈#中继A和#中继B为什么要这样写?我感觉逻辑上存在问题。主程序(OB1)是应该可以这样写的。
wwcwwc
级别: VIP会员

精华主题: 0
发帖数量: 3392 个
工控威望: 3188 点
下载积分: 70175 分
在线时间: 1601(小时)
注册时间: 2008-04-20
最后登录: 2024-06-02
查看wwcwwc的 主题 / 回贴
2楼  发表于: 2010-05-15 08:00
看了你的程序我说说个人观点,尽供参考。
因为我这里现在没有实体进行测试,可能程序还存在一些问题,望见谅!
1)    子程序结构不够严紧,同样的功能占用字节稍稍偏大(可能是编程习惯问题)。相同的功能用这样调用子程序做法是可行的。程序尽量采用指令方式编写。直接能够使用输出条件的网络段程序尽量少用(寄存)跳转等方法,这样对于程序的阅读有帮助。手/自动转换条件功能最好不要写到子程序的调用中。
2)    主程序(OB1)中功能的启动条件既然用上升沿脉冲控制位,则子程序中应该用相应的置/复位指令。我是沿用你的主程序编法进行。特别是一些手动操作时正反转频繁的场所,需要解决置位后的复位问题。同时可能会造成调用自动操作时,相关的输出位不能有效复位。补救措施见第4项内容。启动信号条件最好用变址方式,把必要的程序逻辑关系做在一起,紧凑程序。
3)    急停按钮必须使用B接点(常闭接点,这样可以在平时建立一个检测急停回路正常与否的功能)。
4)    按我个人观点在调用自动操作功能时,必须先复位手动操作时的有关输出点(按工艺要求选择)。然后再作相关的自动功能操作。反之也然。如在调用自动时首先实现:
LD    SM0.0
A      I3.3                 //手/自动的选择
CALL  SBR_1              //自动子程序调用
R      Q0.0,7             //意思是复位Q0.0 ~ Q0.7功能。当然也可以根据实际情况选择复位位数内容。
5)    对于报警信息(故障内容)比较多的最好在专门的子程序或者在主程序(OB1)中进行编写。统一在一起编写报警信息,提高效率,减少遗漏。
科行改进程序.zip (10 K) 下载次数:343
wwcwwc
级别: VIP会员

精华主题: 0
发帖数量: 3392 个
工控威望: 3188 点
下载积分: 70175 分
在线时间: 1601(小时)
注册时间: 2008-04-20
最后登录: 2024-06-02
查看wwcwwc的 主题 / 回贴
3楼  发表于: 2010-05-18 09:50
为什么说不行?原因?如果直接移植过来。恐怕有重复调用地址的可能。请按思路重新编写子程序试试。