<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Assignment Efficiency - Repetitive Assignment vs IF statement</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/ffd292e47b/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/ffd292e47b/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/ffd292e47b/</id><updated>2025-03-08T14:07:57.963000Z</updated><subtitle>Recent posts to Assignment Efficiency - Repetitive Assignment vs IF statement</subtitle><entry><title>Assignment Efficiency - Repetitive Assignment vs IF statement</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/ffd292e47b/?limit=25#3acb" rel="alternate"/><published>2025-03-08T14:07:57.963000Z</published><updated>2025-03-08T14:07:57.963000Z</updated><author><name>wayne-riesterer</name><uri>https://forge.codesys.com/u/wayne-riesterer/</uri></author><id>https://forge.codesys.com109e5e95eded665652b9e9613548b9e481fa3372</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Thanks for your responses. I like to write the leanest possible code that I can because it makes it much easier to read/maintain/debug.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;OR_ELSE&lt;/code&gt; is what I was looking for. I wasn't sure if CodeSys short-circuited evaluation and I didn't realize this operator existed. Thanks!&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Assignment Efficiency - Repetitive Assignment vs IF statement</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/ffd292e47b/?limit=25#0b09" rel="alternate"/><published>2025-03-08T07:57:19.316000Z</published><updated>2025-03-08T07:57:19.316000Z</updated><author><name>TimvH</name><uri>https://forge.codesys.com/u/timvh/</uri></author><id>https://forge.codesys.combad2a7be71937fab477e84230a440c410f17bcc2</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;You can consider using &lt;strong&gt;OR_ELSE&lt;/strong&gt;:&lt;br/&gt;
Coils&lt;span&gt;[0]&lt;/span&gt; := Coils&lt;span&gt;[0]&lt;/span&gt; &lt;strong&gt;OR_ELSE&lt;/strong&gt; (Buttons&lt;span&gt;[0]&lt;/span&gt; AND Sensors&lt;span&gt;[0]&lt;/span&gt; &amp;gt; 6);&lt;/p&gt;
&lt;p&gt;&lt;a href="https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_operator_or_else.html" rel="nofollow"&gt;https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_operator_or_else.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;IF Coils&lt;span&gt;[0]&lt;/span&gt; is TRUE, then the rest is not relevant anymore and doesn't have to be evaluated anymore.&lt;/p&gt;
&lt;p&gt;PS, there is also an AND_THEN&lt;br/&gt;
&lt;a href="https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_operator_and_then.html" rel="nofollow"&gt;https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_operator_and_then.html&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Assignment Efficiency - Repetitive Assignment vs IF statement</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/ffd292e47b/?limit=25#0ab2" rel="alternate"/><published>2025-03-07T06:57:50.773000Z</published><updated>2025-03-07T06:57:50.773000Z</updated><author><name>ojz0r</name><uri>https://forge.codesys.com/u/ojz0r/</uri></author><id>https://forge.codesys.com08a5c7ccd453616705a9d4216a614b14f3e88e3a</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Its important that you know the difference between the two.&lt;/p&gt;
&lt;p&gt;Example 1:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;Coils&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Coils&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;OR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Buttons&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Sensors&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In this case the statements will be evaluated every scan and result in either true or false for Coils&lt;span&gt;[0]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Example 2:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kr"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;Coils&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;Buttons&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;AND&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Sensors&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;THEN&lt;/span&gt;
    &lt;span class="n"&gt;Coils&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;END_IF&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In this example Coils&lt;span&gt;[0]&lt;/span&gt; will latch the result in a true evaluation, if you want it to behave the same way as example 1 then you need to do it like example 3 below:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kr"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;Coils&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;Buttons&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;AND&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Sensors&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;THEN&lt;/span&gt;
    &lt;span class="n"&gt;Coils&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;ELSE&lt;/span&gt;
    &lt;span class="n"&gt;Coils&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;END_IF&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;However back to the real question. There is no problem using either example 1 or example 3, if im not requiring a latch i usually go with example 1 as it is more compact.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Assignment Efficiency - Repetitive Assignment vs IF statement</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/ffd292e47b/?limit=25#f803" rel="alternate"/><published>2025-03-07T01:55:50.554000Z</published><updated>2025-03-07T01:55:50.554000Z</updated><author><name>wayne-riesterer</name><uri>https://forge.codesys.com/u/wayne-riesterer/</uri></author><id>https://forge.codesys.com1fb415c7ef4f791d0e343fb02fb2e630e17e5f74</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hello&lt;/p&gt;
&lt;p&gt;Can anyone see any problems with constant assignment as in the following statement:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Coils[0] := Coils[0] OR (Buttons[0] AND Sensors[0] &amp;gt; 6);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Rather than using the more verbose and vertically-larger:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kr"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;Coils&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;Buttons&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;AND&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Sensors&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;THEN&lt;/span&gt;
    &lt;span class="n"&gt;Coils&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;END_IF&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also, is the test expression short-circuited in the latter case? In other words, will the runtime move on after it sees &lt;code&gt;Coils[0] = FALSE AND&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>