首页 > 编程语言 >Codesys提升程序运行效率之AND_THEN、OR_ELSE运算符的使用

Codesys提升程序运行效率之AND_THEN、OR_ELSE运算符的使用

时间:2022-08-29 00:23:03浏览次数:72  
标签:语句 END 程序运行 iDenominator ELSE 运算符 条件 else

之前看到有博文写Codesys程序编写标准中有一条,多个判断条件的if-else-语句,可能性最大的条件应放到最前面,这样可减少PLC处理的时间。但是根据测试,情况并非如此。下面的例子进行详细说明。


AND、OR条件并列if-else语句

Test if short circuit

  1. 第一个if语句中,第一个条件1 > 2显然等于FALSE, 但是PLC仍执行了后面的条件;
IF 1 > 2 AND (_xTestCondition := TRUE) THEN
	_iResult := 100;
END_IF
  1. 第二个if语句中,第一个条件2 > 1已经等于TRUE, 但是PLC仍执行了后面的条件;
IF 2 > 1 OR (_xTestCondition1 := TRUE) THEN
	_iResult1 := 99;
END_IF
  1. 第二个if语句中,第一个条件为FALSE, 但是PLC仍执行了后面的条件, 导致程序出现异常;
IF _iDenominator <> 0 AND _iNumerator / _iDenominator = 2 THEN
	;
END_IF

AND_THEN、OR_THEN条件并列if-else语句

从以上例子可判断,像上面这样编写的if-else语句并不会像其他高级语言如C一样有short circuit的特性。
后来查阅资料,发现使用AND_THENOR_ELSE运算符可实现short circuit(短路)功能。

Operator ‘AND_THEN’ : This operator is an extension of the IEC 61131-3 standard.
The AND_THEN operator is permitted only for programming in structured text with the AND operation of BOOL and BIT operands with short-circuit evaluation.


Operate ‘OR_ELSE’ : This operator is an extension of the IEC 61131-3 standard.
The OR_ELSE operator is permitted only for programming in structured text: OR operation of BOOL and BIT operands; with short-circuit evaluation.


下面用AND_THENOR_ELSE运算符实现上面几个语句。

如上,当并列条件中的第一个条件满足时,后面的条件不再执行。这样既减少了程序处理的时间,也使代码更见简洁。

AND_THEN、OR_THEN语句的运用

  1. 减少运行时间 —— 多条件并列时,按照判断条件的概率排列。
if Condition1 and_then Condition2 or_else Condition3 and_then ... then
    Execute();
end_if
  1. 使代码更简洁
// before
IF _iDenominator <> 0 THEN
	IF _iNumerator / _iDenominator = 2 THEN
		Execute();
	END_IF
END_IF

// after
IF _iDenominator <> 0 AND_THEN _iNumerator / _iDenominator = 2 THEN
	Execute();
END_IF

------------------------------------------------------------------------

// before
IF (ptr <> 0) THEN
	IF (ptr^ = 99) THEN
		Execute();
	END_IF
END_IF

// after
IF (ptr <> 0) AND_THEN (ptr^ = 99) then
    Execute();
END_IF

结论

在Codesys st语言编程中使用andor并列条件时,所有条件判断都会被执行。而使用and_thenor_else运算符,当条件确定满足时,后面的条件就不会被执行,即short-circuit。 使用and_thenor_else运算符的好处是减少CPU的处理时间,使代码风格更加干净简洁。

标签:语句,END,程序运行,iDenominator,ELSE,运算符,条件,else
From: https://www.cnblogs.com/xyw-blog/p/16634547.html

相关文章

  • Smarty {foreach},{foreachelse}
    {foreach},{foreachelse} http://www.speedphp.com/smarty/language.function.foreach.html#foreach.property.first{foreach},{foreachelse}{foreach}用于循环数组......
  • PHP 中的三元运算符和or表达式对比[defined() or define()]
    在php代码中我们经常看到这样的写法:$max=$a>$b?$a:$b;mysql_connect($user,$passwd,$db)ordie($mess);下面对这两种常见的写法做以下说明:第一种:典型的三元运算......
  • Python_for_else
    循环“自然”终结(循环条件为假)时else从句会被执行一次,而当循环是由break语句中断时,else子句就不被执行。与for语句相似,while语句中的else子句的语意是一样的∶else块在......
  • vscode可以通过改json让程序运行完不退出
    如图改相应的launch.json至于D盘test.exe是因为有中文路径"program":"C:\\Windows\\System32\\cmd.exe","args":["/c","${fileDirname}/${fileBasenameNoExtension}.......
  • R语言中any运算符是什么意思
     R中any运算符用于判断逻辑向量中是否至少有一个是TRUE。001、any(c(FALSE,FALSE,FALSE))##用于判断逻辑向量中是否至少一个为TRUEany(c(FALSE,FALSE,TR......
  • JavaScript if else语句
    在编写程序时,可能需要从一组给定的路径中采用一个。在这种情况下,您需要使用条件语句,以使程序可以做出正确的决定并执行正确的操作。在JavaScript中,if-else语句用于在条件......
  • Java-Java中的运算符
    一、Java&、&&、|、||、^、<<、>>、~、>>>等运算符&(按位与)&&(逻辑与)|(按位或)||(逻辑或)^(异或运算符)<<(左移运算符)>>(右移运算符)~(取反运算符)>>>(无符号右移运算符)二......
  • 学习:python 异常处理 else 和 finall 语句 自定义异常
       自定义一个异常 ......
  • 解构和扩展运算符
    解构解构赋值是对赋值运算符的扩展。是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据......
  • 运算符
    运算符Java语言支持如下运算符:优先级()算术运算符:+、-、*、/、%、++(自增)、--(自减)赋值运算符=关系运算符:>、<、>=、<=、==(Java里的等于用两个等号)、!=instanceof(不等......