<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to IF NOT AND question</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/</id><updated>2020-02-27T13:48:02.039000Z</updated><subtitle>Recent posts to IF NOT AND question</subtitle><entry><title>IF NOT AND question</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/?limit=100#c3d6" rel="alternate"/><published>2020-02-27T13:48:02.039000Z</published><updated>2020-02-27T13:48:02.039000Z</updated><author><name>aliazzz</name><uri>https://forge.codesys.com/u/aliazzz/</uri></author><id>https://forge.codesys.comef19ad7501a4c2604e1f10c98d31112558603b25</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;FUNCTION&lt;/span&gt; &lt;span class="nv"&gt;write_value_bool&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;
&lt;span class="nv"&gt;VAR_INPUT&lt;/span&gt;
   &lt;span class="nv"&gt;PLC&lt;/span&gt;         : &lt;span class="nv"&gt;POINTER&lt;/span&gt; &lt;span class="nv"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;ModbusSlaveComPort&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xInitDone&lt;/span&gt; &lt;span class="nv"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;NOT&lt;/span&gt; &lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xError&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
        &lt;span class="nv"&gt;write_value_bool&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;TRUE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ELSE&lt;/span&gt;
        &lt;span class="nv"&gt;write_value_bool&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_IF&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;One should avoid the above IF THEN statements. A better solution could be;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;write_value_bool&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xInitDone&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xError&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Which (better) readable is something like;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;FUNCTION&lt;/span&gt; &lt;span class="n"&gt;xWrtRdy&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BOOL&lt;/span&gt;
&lt;span class="n"&gt;VAR_INPUT&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;pMbCom&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;POINTER&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;ModbusSlaveComPort&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;END_VAR&lt;/span&gt;
&lt;span class="n"&gt;xWrtRdy&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pMbCom&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xInitDone&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;pMbCom&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xError&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now your code is more atomic in nature and "what's in a name". Also, this function can very easily be transformed to a method of some FB.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>IF NOT AND question</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/?limit=25#c152" rel="alternate"/><published>2020-02-27T13:48:01.973000Z</published><updated>2020-02-27T13:48:01.973000Z</updated><author><name>dFx</name><uri>https://forge.codesys.com/u/dfx/</uri></author><id>https://forge.codesys.comaa27b647d50cefe175b149720e41b795a0f6eadb</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;PhilipLykov hat geschrieben:&lt;/strong&gt;&lt;br/&gt;
… xInitDone to become FALSE or xError TRUE...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This does not match written code. Written code says you have to wait xInitDone to TRUE AND xError to FALSE.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>IF NOT AND question</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/?limit=25#adfd" rel="alternate"/><published>2020-02-27T13:48:01.859000Z</published><updated>2020-02-27T13:48:01.859000Z</updated><author><name>PhilipLykov</name><uri>https://forge.codesys.com/u/philiplykov/</uri></author><id>https://forge.codesys.comeca74a2cc2bde0768d0419615f326064854c231e</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;dFx hat geschrieben:&lt;/strong&gt;&lt;br/&gt;
and if you try :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xInitDone&lt;/span&gt; &lt;span class="nv"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;NOT&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xError&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Unfortunately it doesn't help. Only nested IFs works fine.&lt;br/&gt;
For those who want to reproduce it:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;FUNCTION&lt;/span&gt; &lt;span class="nv"&gt;write_value_bool&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;
&lt;span class="nv"&gt;VAR_INPUT&lt;/span&gt;
   &lt;span class="nv"&gt;PLC&lt;/span&gt;         : &lt;span class="nv"&gt;POINTER&lt;/span&gt; &lt;span class="nv"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;ModbusSlaveComPort&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xInitDone&lt;/span&gt; &lt;span class="nv"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;NOT&lt;/span&gt; &lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xError&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
        &lt;span class="nv"&gt;write_value_bool&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;TRUE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ELSE&lt;/span&gt;
        &lt;span class="nv"&gt;write_value_bool&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_IF&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;And yes, you have to wait for xInitDone to become FALSE or xError TRUE. For this purpose you can do xReset:= TRUE (at ModbusSlaveComPort) for one cycle.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>IF NOT AND question</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/?limit=25#946b" rel="alternate"/><published>2020-02-27T13:48:01.769000Z</published><updated>2020-02-27T13:48:01.769000Z</updated><author><name>mprestel</name><uri>https://forge.codesys.com/u/mprestel/</uri></author><id>https://forge.codesys.comd966c2ff6aacb210acca4cdd98a1e08ceead2073</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Sorry I misunderstood you...&lt;/p&gt;
&lt;p&gt;Can you provide a small example application to easyly reproduce?&lt;/p&gt;
&lt;p&gt;Best regards,&lt;br/&gt;
Marcel&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>IF NOT AND question</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/?limit=25#6074" rel="alternate"/><published>2020-02-27T13:48:01.653000Z</published><updated>2020-02-27T13:48:01.653000Z</updated><author><name>dFx</name><uri>https://forge.codesys.com/u/dfx/</uri></author><id>https://forge.codesys.com8d5dd4c57279a6fc50beae7854a0237f1797e60a</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;and if you try :&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xInitDone&lt;/span&gt; &lt;span class="nv"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;NOT&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xError&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry><entry><title>IF NOT AND question</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/?limit=25#0e72" rel="alternate"/><published>2020-02-27T13:48:01.592000Z</published><updated>2020-02-27T13:48:01.592000Z</updated><author><name>PhilipLykov</name><uri>https://forge.codesys.com/u/philiplykov/</uri></author><id>https://forge.codesys.comb6fa911760d202118607c12f212d3c0ba6c2c1e2</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;m.prestel hat geschrieben:&lt;/strong&gt;&lt;br/&gt;
Hello Sir,&lt;br/&gt;
ST checks for all the conditions and does not stop early.&lt;br/&gt;
AND_THEN does what you describe with nested ifs.&lt;br/&gt;
Best regards,&lt;br/&gt;
Marcel&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sorry Marcel,&lt;br/&gt;
I didn't understood your idea.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>IF NOT AND question</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/?limit=25#9f40" rel="alternate"/><published>2020-02-27T13:48:01.525000Z</published><updated>2020-02-27T13:48:01.525000Z</updated><author><name>PhilipLykov</name><uri>https://forge.codesys.com/u/philiplykov/</uri></author><id>https://forge.codesys.comc3c0bcef4f94d9325f4b9fb8b755bef302ee7379</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;dFx hat geschrieben:&lt;/strong&gt;&lt;br/&gt;
What is the result if you replace dereferenced pointers by only boolean variables ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It works as expected.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>IF NOT AND question</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/?limit=25#1e56" rel="alternate"/><published>2020-02-27T13:48:01.429000Z</published><updated>2020-02-27T13:48:01.429000Z</updated><author><name>mprestel</name><uri>https://forge.codesys.com/u/mprestel/</uri></author><id>https://forge.codesys.com378ffd96cdb935961c147ae7704cc14aeb8b994e</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hello Sir,&lt;/p&gt;
&lt;p&gt;ST checks for all the conditions and does not stop early.&lt;/p&gt;
&lt;p&gt;AND_THEN does what you describe with nested ifs.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;br/&gt;
Marcel&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>IF NOT AND question</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/?limit=25#a8bd" rel="alternate"/><published>2020-02-27T13:48:01.339000Z</published><updated>2020-02-27T13:48:01.339000Z</updated><author><name>dFx</name><uri>https://forge.codesys.com/u/dfx/</uri></author><id>https://forge.codesys.coma2a691b239e32f9b36dc6125570a00ca7ff46237</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;What is the result if you replace dereferenced pointers by only boolean variables ?&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>IF NOT AND question</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/e1f428837c/?limit=25#1458" rel="alternate"/><published>2020-02-27T13:48:01.203000Z</published><updated>2020-02-27T13:48:01.203000Z</updated><author><name>PhilipLykov</name><uri>https://forge.codesys.com/u/philiplykov/</uri></author><id>https://forge.codesys.com87ad4a5b1fa53f7a78540280e58ef7bdf32348b3</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Could you please explain why the following statement is always FALSE:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xInitDone&lt;/span&gt; &lt;span class="nv"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;NOT&lt;/span&gt; &lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xError&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;It runs on RaspberryPi with the latest Codesys Runtime.&lt;br/&gt;
PLC is a pointer to ModbusSlaveComPort.&lt;br/&gt;
The xInitDone is TRUE, xError is FALSE.&lt;/p&gt;
&lt;p&gt;If I rewrite the code in such way it works as expected:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xInitDone&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
   &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;NOT&lt;/span&gt; &lt;span class="nv"&gt;PLC&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;xError&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry></feed>