程序如下:
注:原题红框部分为:设置命令‘S#OUT7’。由于我只得到了部分程序,并且没有重置“#OUT7”的指令,因此信号无法翻转。因此,为了便于仿真测试和理解,这里对程序稍作改动。
一、相关参数说明
程序用FC编写,接口定义如下:
二、捋一捋主逻辑
其实这个程序的难度就如图中‘红框’所示。如果将其“注释”掉(即在指令前面输入“//”,使该指令不被执行),程序就会编写出简单的逻辑控制指令,如下图所示。
逻辑比较简单,无需赘述。重点分析注释掉的判断和跳转指令。
三、判断与跳转指令
在解释程序之前,我们先解释一下几个STL语句。
状态字寄存器
状态字寄存器是一个16位寄存器,用于存储CPU执行指令时的状态。状态字中的某些位用于确定是否以及以何种方式执行某些指令。执行指令时,状态字中的某些位可能会发生变化。可以使用位逻辑指令和字逻辑指令来访问和检测它们。
本程序主要用到了其中两个:溢出位OV和二进制结果位BR。
(1) 二进制结果位BR
二进制结果位BR用于指示运算结果是否正确。用户编写的FB、FC程序中,最好对BR位进行管理。功能块正确执行后,BR为1,否则为0。
(2) 溢出位OV
如果算术运算或浮点比较指令执行过程中出现错误(如溢出、非法运算、非标准格式等),则溢出位设置为1。如果后续类似指令的执行结果正常,则该位将被清零。
在此示例程序中,“OV”位用于确定整数运算结果是否溢出。结合\’SAVE\’指令,正确的逻辑被保存在BR中。
2. 保存命令
SAVE指令用于将RLO存储在BR中。
3.JNB命令
当\’#temp13\’为1时,JNB指令不满足跳转条件,程序从\’L#IN3\’继续执行,进行整数加法,即:
“#temp23”的值与“#IN2”进行比较,也可以用作“#OUT7”状态的逻辑基础。
由于“@维护乔”只给出了一段程序,没有上下文可供参考,所以暂时无法完整解读这一段程序。但一般逻辑是:
‘#IN3’为某个工艺参数的实际值,‘#IN2’端给出其上限值,‘#OUT7’用于控制某台设备的启停,当实际值小于时超过上限值,\’#只有当OUT7\’为1时,才能启动相应的设备。
四、写在最后
由于程序不完整,最终没有给出解释。但驼子想通过这个例子表达的是:
用户评论
迁心
这段STL程序写的真好!感觉一下子就明白了STL的强大之处!
有10位网友表示赞同!
水波映月
刚入门C++,对STL这些“硬核”概念还是一头雾水…
有14位网友表示赞同!
颜洛殇
看了标题,觉得很有意思啊,想学习一下这些冷门的STL知识!
有10位网友表示赞同!
念旧是个瘾。
STL真的是编程的利器!
有5位网友表示赞同!
久爱不厌
作者讲的理解也很透彻清晰,感觉掌握了不少“硬核”概念。
有7位网友表示赞同!
坏小子不坏
分享这个STL程序太棒了!
有17位网友表示赞同!
艺菲
要学习C++的话, STL是必不可少的啊!
有18位网友表示赞同!
采姑娘的小蘑菇
这段程序能教会我几个实用的STL技巧吗?
有16位网友表示赞同!
不忘初心
我对“硬核”概念比较感兴趣,希望作者深入浅出地讲解。
有7位网友表示赞同!
男神大妈
感觉这种“硬核”概念对于做高级算法开发很有帮助!
有15位网友表示赞同!
早不爱了
STL真是强大到爆啊,这么多功能都囊括在里面!
有17位网友表示赞同!
志平
从程序例子中学习stl原理,这是一种很好的教学方式!
有14位网友表示赞同!
几妆痕
作者的感想也挺有启发性的,让我对C++编程有了新的认识。
有8位网友表示赞同!
怅惘
想了解一下这个STL程序具体的应用场景?
有16位网友表示赞同!
良人凉人
希望文章能介绍一些更“硬核”的STL应用案例!
有15位网友表示赞同!
人心叵测i
看完你的文章,我更有动力去深入学习STL了!
有14位网友表示赞同!
桃洛憬
太期待作者分享更多关于STL的宝贵知识了!
有16位网友表示赞同!
淡抹丶悲伤
我想问问作者,这种“硬核”概念在实际开发中如何应用?
有6位网友表示赞同!