技术论坛

 200Smart中的置位复位指令很奇怪

返回主题列表
作者 主题
xiatianyun
侠圣

经验值:2108
发帖数:337
精华帖:6
楼主    2021-12-09 21:10:38
主题: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
至圣

经验值:62404
发帖数:17478
精华帖:345
1楼    2021-12-09 22:29:51
精编帖  主题:回复: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
芳季
至圣

经验值:50504
发帖数:12318
精华帖:86
2楼    2021-12-09 23:19:56
精编帖  主题:回复:200Smart中的置位复位指令很奇怪

S R两个指令是无辜的。

问题点在out性质上。

zbhdm
奇侠

经验值:5645
发帖数:851
精华帖:1
3楼    2021-12-10 00:50:27
精编帖  主题:回复: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的猪
至圣

经验值:15345
发帖数:1148
精华帖:2
5楼    2021-12-10 07:44:06
精编帖  主题:回复:200Smart中的置位复位指令很奇怪

原来干武汉神龙的活
客户明确规定禁止使用置位复位指令

国泰民安!安居乐业!万事如意!
锋言锋语
至圣

经验值:12873
发帖数:2038
精华帖:41
7楼    2021-12-10 08:05:42
精华帖  精编帖  主题:回复:200Smart中的置位复位指令很奇怪

这样会不会把本来是1的上次输出, 给置0了。也有问题。



还是要按照规矩, 用in-out。

不忘初心
不枉此生
侠圣

经验值:3821
发帖数:453
精华帖:0
8楼    2021-12-10 08:12:28
精编帖  主题:回复:200Smart中的置位复位指令很奇怪

理解清楚内部运行机制,局部变量,全局变量的区别就知道了

孜孜不倦,向高峰挺进!
winter938
奇侠

经验值:8971
发帖数:1438
精华帖:25
10楼    2021-12-10 08:36:22
精编帖  主题:回复:200Smart中的置位复位指令很奇怪

S/R指令的对象往往希望保存执行后的状态,那么在子程序中时这类对象就应该用IN_OUT变量通过接口参数分配一个存储器或使用Static型变量存储状态。遗憾的是200系统不象西家其它系列的有FB支持Static 型变量,所以楼主的关键问题是如何保存那个状态。

工控爱好者
post_jingbian_commit.aspx
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。