cyh1986
级别: 家园常客
精华主题: 0
发帖数量: 353 个
工控威望: 714 点
下载积分: 664 分
在线时间: 294(小时)
注册时间: 2009-04-28
最后登录: 2024-05-10
查看cyh1986的 主题 / 回贴
楼主  发表于: 2010-05-11 17:47
我用S7-200编写了一个单键启动的程序,有几个输出,前面的输出锁后面的输出。
但是我调试了一下,只要第一个按一下,后面的立即都有输出。
对西门子子程序这块还不是很明白,请大家帮忙看看
谢谢
描述:西门子子程序调用
附件: 科行.rar (10 K) 下载次数:579
网站提示: 请不要用迅雷下载附件,容易出错
beiye1234
级别: 略有小成
精华主题: 0
发帖数量: 255 个
工控威望: 282 点
下载积分: 914 分
在线时间: 250(小时)
注册时间: 2010-02-05
最后登录: 2017-07-31
查看beiye1234的 主题 / 回贴
1楼  发表于: 2010-05-12 08:25
图片:
子程序的变量,怪怪的!
[ 此帖被beiye1234在2010-05-12 08:37重新编辑 ]
wwcwwc
级别: VIP会员

精华主题: 0
发帖数量: 3392 个
工控威望: 3188 点
下载积分: 70165 分
在线时间: 1601(小时)
注册时间: 2008-04-20
最后登录: 2024-05-14
查看wwcwwc的 主题 / 回贴
2楼  发表于: 2010-05-12 14:06
你的子程序network1和network2的线圈#中继A和#中继B为什么要这样写?我感觉逻辑上存在问题。主程序(OB1)是应该可以这样写的。
zsb
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看zsb的 主题 / 回贴
3楼  发表于: 2010-05-12 18:13
我简单的看了下,你的子程序局部变量表里面没有OUT变量,我想问题也许出在这里
zz680217
级别: 略有小成
精华主题: 0
发帖数量: 252 个
工控威望: 343 点
下载积分: 1822 分
在线时间: 514(小时)
注册时间: 2008-12-03
最后登录: 2024-05-14
查看zz680217的 主题 / 回贴
4楼  发表于: 2010-05-12 19:08
一楼的朋友,我把你的程序改了一下并下载到PLC中已成功,你在调用子程序的变量参数上存在一定的问题,特别是用BOOL时,尽量用IN/OUT而不要用OUT,同时在设计子程序时尽量做到精短,少用中继线圈。因为200在参数返回容易出错,出现你所发现的情况。最后向你说明的没有按照你原有程序全部更改,如有需要你自己完成吧。
附件: 科行.rar (10 K) 下载次数:349
网站提示: 请不要用迅雷下载附件,容易出错
本帖最近评分记录:
  • 下载积分:+1(wuhenke0000)
    cyh1986
    级别: 家园常客
    精华主题: 0
    发帖数量: 353 个
    工控威望: 714 点
    下载积分: 664 分
    在线时间: 294(小时)
    注册时间: 2009-04-28
    最后登录: 2024-05-10
    查看cyh1986的 主题 / 回贴
    5楼  发表于: 2010-05-13 08:35
    zz680217这位朋友,谢谢你的热心支持
    我也试了一下,把子程序给修改了一下,还是出现以前这样的情况。
    原因很有可能就是你说的原因。
    我开始纵一位是我子程序调用的问题
    cyh1986
    级别: 家园常客
    精华主题: 0
    发帖数量: 353 个
    工控威望: 714 点
    下载积分: 664 分
    在线时间: 294(小时)
    注册时间: 2009-04-28
    最后登录: 2024-05-10
    查看cyh1986的 主题 / 回贴
    6楼  发表于: 2010-05-13 10:11
    奇怪了,为什么你修改后的子程序移植到我现在的项目里面就不行了呢???
    wwcwwc
    级别: VIP会员

    精华主题: 0
    发帖数量: 3392 个
    工控威望: 3188 点
    下载积分: 70165 分
    在线时间: 1601(小时)
    注册时间: 2008-04-20
    最后登录: 2024-05-14
    查看wwcwwc的 主题 / 回贴
    7楼  发表于: 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
    cyh1986
    级别: 家园常客
    精华主题: 0
    发帖数量: 353 个
    工控威望: 714 点
    下载积分: 664 分
    在线时间: 294(小时)
    注册时间: 2009-04-28
    最后登录: 2024-05-10
    查看cyh1986的 主题 / 回贴
    8楼  发表于: 2010-05-17 08:34
    引用
    引用第7楼wwcwwc于2010-05-15 08:00发表的  :
    看了你的程序我说说个人观点,尽供参考。
    因为我这里现在没有实体进行测试,可能程序还存在一些问题,望见谅!
    1)    子程序结构不够严紧,同样的功能占用字节稍稍偏大(可能是编程习惯问题)。相同的功能用这样调用子程序做法是可行的。程序尽量采用指令方式编写。直接能够使用输出条件的网络段程序尽量少用(寄存)跳转等方法,这样对于程序的阅读有帮助。手/自动转换条件功能最好不要写到子程序的调用中。
    2)    主程序(OB1)中功能的启动条件既然用上升沿脉冲控制位,则子程序中应该用相应的置/复位指令。我是沿用你的主程序编法进行。特别是一些手动操作时正反转频繁的场所,需要解决置位后的复位问题。同时可能会造成调用自动操作时,相关的输出位不能有效复位。补救措施见第4项内容。启动信号条件最好用变址方式,把必要的程序逻辑关系做在一起,紧凑程序。
    3)    急停按钮必须使用B接点(常闭接点,这样可以在平时建立一个检测急停回路正常与否的功能)。
    .......

    谢谢wwcwwc的回复
    我设计这个子程序的初衷就是为了方便一键启停的操作,像C语言似的,只要把一些相关的输入输出信号都列出来,因为这些设备基本类似,所以不要再多考虑,直接调用子程序。
    但现在遇到这样一个问题,(原来我发的那个是有连锁条件的),只要第一个启停按钮一按下,后满所有的设备就立即启动了,按照我的理解,应该不会出现这样的情况,我的子程序调用的条件里面有个启停的上升沿的,没有按那个上升沿后面的设备应该是启动不了的,后来我推断应该是子程序的问题,我猜想因为每个都调用的一个子程序,第一个调用只有,输出局部变量变化了,第二调用的时候,直接把这个输出局部变量给输出呢?按照S7-200的说法,对这个局部变量还不是很吃得透。
    我的急停按钮在电路上是,常闭接的二次回路,常开接的PLC,选用的是1NO1NC的按钮。
    还请WWCWWC网友帮忙考虑考虑我以上描述的问题!


    前面有一位网友修改的程序我也实际测试了一下,确实符合我的要求,但是我移植到我的项目中就不行了。也不明白是什么原因。
    wwcwwc
    级别: VIP会员

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