| 作者 | 主题 |
|---|---|
|
xiatianyun 奇侠
经验值:5423 发帖数:850 精华帖:10 |
楼主
主题:200Smart中的置位复位指令很奇怪
这几天使用200Smart,以前没怎么用,出现了大家出现过的问题。一个是沿指令,这个明白了。今天查看版主的帖子,发现已经充分讨论过沿指令了: http://www.ad.siemens.com.cn/club/bbs/post.aspxa_id=1457409&b_id=64&s_id=83&num=30#anch http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1459467&b_id=64&s_id=83&num=71#anch 子程序中,如果bi_1为0,则会跳过S/R指令,bq_1的状态完全由另外一次调用决定。 但如果在另一个子程序中使用同样有跳过S/R指令的逻辑,似乎没有问题。(这个我没找到程序了) ------------------------------ 后来我分析了下程序,发现完全不是这回事。这个主要是Out类型的原因,在跳过S/R指令时,输出其实不一定是False,而是不定。这里由上次使用临时变量的子程序遗留的值决定。 看来S/R指令不执行时并不一定会保持上次的值,有些明显一点的由其他地方的双线圈决定,有些则是接口类型的隐形特性决定。 |
|
Zane 至圣 经验值:85161 发帖数:21047 精华帖:399 |
1楼
主题:回复:200Smart中的置位复位指令很奇怪这反映了以下几方面的问题: 1)是的,S/R是条件执行指令,你的例程,准确的说bq_1变量实质不是全扫描的。 这种程序的迷惑性是很大的,因此我是不建议使用S/R指令的,偶尔会用,也是在简单条件下。 2)还要强调一下,这种情况是在200及SMART下特有的,SMART的临时变量在同一嵌套层其实就是公用的,300/400/1200/1500不是这样,临时变量每次调用前是清零的。 (更正一下,这个是优化编程与非优化编程的区别,200/SMART/300/400都是非优化编程,1200、1500默认是优化编程) 3)如果这里是INOUT变量就又没有问题了,所以跨扫描周期使用的变量一定是全局变量或静态变量
Zane
注册自动化系统工程师
Always save before download
|
|
芳季 至圣 经验值:72108 发帖数:15503 精华帖:101 |
2楼
主题:回复:200Smart中的置位复位指令很奇怪S R两个指令是无辜的。 问题点在out性质上。 |
|
zbhdm 至圣 经验值:17165 发帖数:1905 精华帖:2 |
3楼
主题:回复:200Smart中的置位复位指令很奇怪刚刚还在一个帖子中向Zane老师求教S/R指令为什么要慎用,现在貌似有那么一点点明白了。 S/R指令虽然可以实现起保停,但是与真正的起保停是有区别的。 S/R指令可以保持原有状态的,但是线圈(就是输出指令),每个扫描周期都会把他前面的逻辑结果输出。 楼主在子程序中用了S/R指令,而子程序是共用L区的64个字节(也有说:只要扫描周期扫到被调用的子程序,系统就会自动给其调拨一个L区),所以这64个字节是什么状态,是无法确定的。如果子程序中的S/R指令不能执行,则S/R指令所对应的局部变量的状态是无法确定的,所以也就有了楼主说的:在跳过S/R指令时,输出其实不一定是False,因此也就有了对于OUT变量的使用,需要先赋值的说法。 比如楼主给出的子程序,如果S/R指令之前,先给bq_1写个“0”,可能就不会有啥错误了。
努力学习西门子
|
|
CoolCool的猪 至圣 经验值:17426 发帖数:1262 精华帖:2 |
5楼
主题:回复:200Smart中的置位复位指令很奇怪原来干武汉神龙的活
自由
|
|
锋言锋语 至圣 经验值:26730 发帖数:3937 精华帖:54 |
7楼
主题:回复:200Smart中的置位复位指令很奇怪这样会不会把本来是1的上次输出, 给置0了。也有问题。 还是要按照规矩, 用in-out。
不忘初心
|
|
不枉此生 侠圣 经验值:4720 发帖数:551 精华帖:0 |
8楼
主题:回复:200Smart中的置位复位指令很奇怪理解清楚内部运行机制,局部变量,全局变量的区别就知道了
孜孜不倦,向高峰挺进!
|
|
winter938 至圣 经验值:11152 发帖数:1550 精华帖:33 |
10楼
主题:回复:200Smart中的置位复位指令很奇怪S/R指令的对象往往希望保存执行后的状态,那么在子程序中时这类对象就应该用IN_OUT变量通过接口参数分配一个存储器或使用Static型变量存储状态。遗憾的是200系统不象西家其它系列的有FB支持Static 型变量,所以楼主的关键问题是如何保存那个状态。
工控爱好者
|