s7200自己做的库文件重复调用会输出混乱的情况,都是用的L寄存器搞不懂。
很简单的一个东西,统计设备运行时间
Network 2 // 秒基准用sm0.5上升沿
// 网络注释
LD SM0.0
LPS
A L0.0
INCB LB20
LRD
AB>= LB20, 60
MOVB 0, LB20
INCB LB21
LRD
AB>= LB21, 60
MOVB 0, LB21
INCB LB22
LRD
AB>= LB22, 24
MOVB 0, LB22
INCB LB23
LRD
AB>= LB23, 30
MOVB 0, LB23
INCB LB24
LPP
AB>= LB24, 12
MOVB 0, LB24
INCB LB25
网络3
LD SM0.0
BMB LB20, LB1, 8LD
问题补充:
把ld的类型由out改为in_out也不行,由混乱变为第二次调用的无输出了
钻石用户推荐最佳答案
转帖:
S7-200使用子程序注意事项:
1、 使用子程序时,为何动作只能执行一次,或者某些状态不能结束?
如果发生动作不能重复执行,或者状态不能结束(像锁死了一样),而这些功能都与子程序有关时,请检查是否有条件调用子程序。调用子程序的条件在上述动作执行后,或者进入某个状态后不再有效,无法再次“激活”,而脱离上述状态或复位的指令正好在子程序内,必然造成上述的现象。
2、 带形式参数的子程序,定义为OUT类型的变量为何会在多次调用子程序时互相干扰?
那是因为定义为 OUT 类型的形式参数并非每次调用子程序时在其内部都有确定的赋值操作。可以将此类参数定义为 IN_OUT 类型,或者确保在每次调用子程序时都有赋值操作。
3、使用了L寄存器,为什么子程序的输出不正常?
由于子程序的局部变量仅在本次调用时有效,且每次获取到的局部变量资源有一定的随机性,有可能已经具有一个随机的数据存储在该局部变量地址中,因此对于OUT类型的接口变量,必须保证每次调用程序都对其进行写操作,否则就是编程逻辑的不严密。当然,用户也可以考虑使用IN_OUT变量类型代替OUT变量类型。
4、为什么子程序中的定时器和计数器不工作或者工作不正常?
如果有下面情况产生:
一个在内部使用了定时器或计数器的子程序,在同一时刻被调用了多次
相同编号的定时器或计数器被多个子程序使用,且同一时刻这些子程序有两个或者以上被调用
则定时器或者计数器资源会因重叠使用而相互影响,造成程序逻辑等方面的错误。
提问者对于答案的评价:
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc361871.html