PLC Structured Text Object Oriented Programming
PLC布局化文本(ST)——AND_THEN & OR_ELSE
特殊机制
运算符AND_THEN和OR_ELSE与我们常用的AND和OR功能相同却有点区别。- IF FALSE AND calculate() THEN
- Auto.Run();
- END_IF
复制代码 假如IF前一个条件一直为FALSE那么后一个条件calculate()仍然会继承实验,得出结果。固然Auto.Run()不会继承实验。- IF TRUE OR calculate() THEN
- Auto.Run();
- END_IF
复制代码 假如IF前一个条件一直为TRUE那么后一个条件calculate()仍然会继承实验,返回BOOL值得出结果。
上述这两种情况,对于IF条件语句使用运算符AND来说,只要有一个条件是FALSE整条判断语句结果就为FALSE,同样对于使用运算符OR来说,只要有一个条件为TRUE整条判断语句结果就为TRUE。后一个条件就没必要继承运行判断直接实验下一个语句即可。
把上面程序中的运算符AND和OR替换成AND_THEN和OR_ELSE。- IF FALSE AND_THEN calculate() THEN
- Auto.Run();
- END_IF
复制代码 由于IF条件语句第一个条件是FALSE以是使用AND_THEN运算符后calculate()方法/函数/程序并不会进入实验,也就是说当检测到第一个条件为FALSE时条件判断提前返回结果FALSE。- IF TRUE OR_ELSE calculate() THEN
- Auto.Run();
- END_IF
复制代码 同理,条件语句使用的是OR_ELSE运算符,结果提前返回TRUE,而且calculate()不参与实验。
怎样使用
既然我们已经了解运算符AND_THEN & OR_ELSE的特殊机制。是否可以用来简化代码?提高计算机运行效率?
- IF bCondition1 THEN // 条件1
- IF bCondition2 THEN // 条件2
- IF bCondition3 THEN // 条件3
- Auto.Run();
- END_IF
- END_IF
- END_IF
复制代码- IF bCondition1 AND bCondition2 AND bCondition3 THEN
- Auto.Run();
- END_IF
复制代码- IF bCondition1 AND_THEN bCondition2 AND_THEN bCondition3 THEN
- Auto.Run();
- END_IF
复制代码 多个IF条件嵌套使用,代码布局复杂,使用AND_THEN简化之后在同一行形成一个IF条件,代码清晰简洁。- IF ptrMachine <> 0 THEN // ptrMachine 是一个指针
- IF NOT ptrMachine^.IsAutoRun() THEN
- Auto.Run();
- END_IF
- END_IF
复制代码- // 这是一个错误示例
- IF ptrMachine <> 0 AND NOT ptrMachine^.IsAutoRun() THEN
- Auto.Run();
- END_IF
复制代码 无论这个表达式ptrMachine 0结果是什么,后面的表达式ptrMachine^.IsAutoRun()都会被实验,如果指针是空引用则会导致指针空引用非常。- IF ptrMachine <> 0 AND_THEN NOT ptrMachine^.IsAutoRun() THEN
- Auto.Run();
- END_IF
复制代码 如果指针(ptrMachine)为空(null),IF的第一个条件ptrMachine 0不成立返回FALSE判断直接退出不实验ptrMachine^.IsAutoRun()表达式。如果指针不为空,两个判断条件均实验,而且不会出现空指针非常。
总结
合理使用OR、AND、OR_ELSE、AND_THEN运算符,而且OR和OR_ELSE并不是可以随意替换使用的,同理AND和AND_THEN也是如此。一切要以自身程序需求来判断使用合适的运算符。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |