签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
编了个功能块,单个调用时输出正常,调用多个功能块时,输出点位就不停的变化,是怎么回事?
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1714727&b_id=64&s_id=0&num=11
内部程序是这样
这个话题问过的人不下100个。最好是搜搜以前相同问题的贴,我的贴。
这事情我都不知道怎么说好,反复说100次了。官方又没有好的资料介绍L的用法。
多次调用的子程序不能用边缘指令。用功能指令set reset的时候能流off的话输出是保持的,到底保持了个什么也就是不确定的。temp变量out变量的线圈一定要出现在触点之前(你必须非常清楚什么叫前面什么叫后面。)
如果你是第一次使用,而且又是赶紧要上马的,你大多数是最终放弃使用的。因为学习这个很难理解的。也无法入手了解。慢慢看以前的贴得到一些体会吧。
反正你全部当做双线圈用就可以了。
建立多次调用的子程序需要注意的事项:
1、不能用上升沿、下降沿、定时器、计数器
2、IN类型变量只能读不能写、OUT变量不能读只能写、IN_OUT变量可读可写(大家都喜欢)、TEMP变量需要先写后用。
我就知道这么多了。
凡是计算机编程,局部(临时)变量,使用的规则是一样的。
并不是S7200的规则特别。而是,编译程序不帮你做检查。
其它计算编程语言,有各种级别的警告,比如变量赋值后不用会警告,没赋值直接用也会警告。
L寄存器使用先赋值然后用,检测延使用要小心,反正别的子程序用到了同样的L区,延就不准了我是栽了很多跟头。退一万步讲,系统内的v存储这么大。功能块全部用V存储,做成库随便分配一个V存储,保证不会错。现在编程都没有考虑过L存储,就当它没有。
说白了就是同一调用级别的子程序共用一个L区
“调用级别的子程序共用一个L区”是个可遇不可求的特例,不宜当原理来理解。
将开(L3.0)、关(L3.1)从变量表里面的OUT变量类型改成IN-OUT试试,应该能行
OUT 改 IN-OUT 完美解决。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录