<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Var_stat</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/</id><updated>2020-02-27T13:54:34.710000Z</updated><subtitle>Recent posts to Var_stat</subtitle><entry><title>Var_stat</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/?limit=25#7c46" rel="alternate"/><published>2020-02-27T13:54:34.710000Z</published><updated>2020-02-27T13:54:34.710000Z</updated><author><name>Joan M</name><uri>https://forge.codesys.com/u/joan-m/</uri></author><id>https://forge.codesys.com5f7160a0b4eed9b10c5b0ea29ba409f9ef133cc2</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi Josep,&lt;/p&gt;
&lt;p&gt;Time ago I read the Codesys PDF you have just posted.&lt;/p&gt;
&lt;p&gt;This is unclear, and too short in explanations.  And lead me to error.   &lt;/p&gt;
&lt;p&gt;QueryPointer in Schneider help: agrees with lenze.&lt;br/&gt;
QueryPointer in Beckhoff help: agrees with lenze too.&lt;/p&gt;
&lt;p&gt;So Querypointer is to get the pointer to the interface and be able to keep working from there.  Interesting but not what you are after... &lt;/p&gt;
&lt;p&gt;But... after re-reading the Codesys PDF... It looks like the QueryInterface could be used to do what you are after... here I'm pasting an example of queryinterface from Schneider:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;Example&lt;/span&gt; &lt;span class="nt"&gt;in&lt;/span&gt; &lt;span class="nt"&gt;ST&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; 
&lt;span class="nt"&gt;INTERFACE&lt;/span&gt; &lt;span class="nt"&gt;ItfBase&lt;/span&gt; &lt;span class="nt"&gt;EXTENDS&lt;/span&gt; &lt;span class="nt"&gt;__System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;IQueryInterface&lt;/span&gt;
&lt;span class="nt"&gt;METHOD&lt;/span&gt; &lt;span class="nt"&gt;mbase&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;BOOL&lt;/span&gt;
&lt;span class="nt"&gt;END_METHOD&lt;/span&gt;
&lt;span class="nt"&gt;INTERFACE&lt;/span&gt; &lt;span class="nt"&gt;ItfDerived1&lt;/span&gt; &lt;span class="nt"&gt;EXTENDS&lt;/span&gt; &lt;span class="nt"&gt;ItfBase&lt;/span&gt;
&lt;span class="nt"&gt;METHOD&lt;/span&gt; &lt;span class="nt"&gt;mderived1&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;BOOL&lt;/span&gt;
&lt;span class="nt"&gt;END_METHOD&lt;/span&gt;
&lt;span class="nt"&gt;INTERFACE&lt;/span&gt; &lt;span class="nt"&gt;ItfDerived2&lt;/span&gt; &lt;span class="nt"&gt;EXTENDS&lt;/span&gt; &lt;span class="nt"&gt;ItfBase&lt;/span&gt;
&lt;span class="nt"&gt;METHOD&lt;/span&gt; &lt;span class="nt"&gt;mderived2&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;BOOL&lt;/span&gt;
&lt;span class="nt"&gt;END_METHOD&lt;/span&gt;
&lt;span class="nt"&gt;FUNCTION_BLOCK&lt;/span&gt; &lt;span class="nt"&gt;FB1&lt;/span&gt; &lt;span class="nt"&gt;IMPLEMENTS&lt;/span&gt; &lt;span class="nt"&gt;ItfDerived1&lt;/span&gt;
&lt;span class="nt"&gt;METHOD&lt;/span&gt; &lt;span class="nt"&gt;mbase&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;BOOL&lt;/span&gt; 
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nt"&gt;mbase&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;TRUE&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;END_METHOD&lt;/span&gt; 
&lt;span class="nt"&gt;METHOD&lt;/span&gt; &lt;span class="nt"&gt;mderived1&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;BOOL&lt;/span&gt; 
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nt"&gt;mderived1&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;TRUE&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;END_METHOD&lt;/span&gt; 
&lt;span class="nt"&gt;END_FUNCTION_BLOCK&lt;/span&gt;
&lt;span class="nt"&gt;FUNCTION_BLOCK&lt;/span&gt; &lt;span class="nt"&gt;FB2&lt;/span&gt; &lt;span class="nt"&gt;IMPLEMENTS&lt;/span&gt; &lt;span class="nt"&gt;ItfDerived2&lt;/span&gt;
&lt;span class="nt"&gt;METHOD&lt;/span&gt; &lt;span class="nt"&gt;mbase&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;BOOL&lt;/span&gt; 
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nt"&gt;mbase&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;FALSE&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;END_METHOD&lt;/span&gt; 
&lt;span class="nt"&gt;METHOD&lt;/span&gt; &lt;span class="nt"&gt;mderived2&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;BOOL&lt;/span&gt; 
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nt"&gt;mderived2&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;TRUE&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;END_METHOD&lt;/span&gt; 
&lt;span class="nt"&gt;END_FUNCTION_BLOCK&lt;/span&gt;
&lt;span class="nt"&gt;PROGRAM&lt;/span&gt; &lt;span class="nt"&gt;POU&lt;/span&gt;
&lt;span class="nt"&gt;VAR&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nt"&gt;inst1&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;FB1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nt"&gt;inst2&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;FB2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nt"&gt;itfbase1&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;ItfBase&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;inst1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nt"&gt;itfbase2&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;ItfBase&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;inst2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nt"&gt;itfderived1&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;ItfDerived1&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nt"&gt;itfderived2&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;ItfDerived2&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nt"&gt;bTest1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;bTest2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;xResult1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;xResult2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;BOOL&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;END_VAR&lt;/span&gt;
&lt;span class="nt"&gt;xResult1&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;__QUERYINTERFACE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;itfbase1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;itfderived1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;xResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;TRUE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;itfderived1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;0&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;references&lt;/span&gt; &lt;span class="nt"&gt;the&lt;/span&gt; &lt;span class="nt"&gt;instance&lt;/span&gt; &lt;span class="nt"&gt;inst1&lt;/span&gt;
&lt;span class="nt"&gt;xResult2&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;__QUERYINTERFACE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;itfbase1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;itfderived2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;xResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;FALSE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;itfderived2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;0&lt;/span&gt;
&lt;span class="nt"&gt;xResult3&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;__QUERYINTERFACE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;itfbase2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;itfderived1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;xResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;FALSE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;itfderived1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;0&lt;/span&gt;
&lt;span class="nt"&gt;xResult4&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;__QUERYINTERFACE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;itfbase2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;itfderived2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;xResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;TRUE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;itfderived2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;0&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;references&lt;/span&gt; &lt;span class="nt"&gt;the&lt;/span&gt; &lt;span class="nt"&gt;instance&lt;/span&gt; &lt;span class="nt"&gt;inst2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;See at the end when do the __QeryInterface calls fail and when it succeeds... it looks like that it transforms only if the types are equal.&lt;/p&gt;
&lt;p&gt;Hope this helps Josep (and sorry for the initial mistake).&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Var_stat</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/?limit=25#fc62" rel="alternate"/><published>2020-02-27T13:54:34.505000Z</published><updated>2020-02-27T13:54:34.505000Z</updated><author><name>josepmariarams</name><uri>https://forge.codesys.com/u/josepmariarams/</uri></author><id>https://forge.codesys.com09e34b8d2306e5a9173472bda946d0f33d8a2883</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Dears:&lt;/p&gt;
&lt;p&gt;For that I have to do I need a function with two inputs : The instance to test and a model to test with.&lt;/p&gt;
&lt;p&gt;The problem comes with the model to test, options that I could find:&lt;/p&gt;
&lt;p&gt;option A: Use var_stat variable. But :&lt;br/&gt;
               It is not possible to acces an var_stat via Classname.varstat.&lt;br/&gt;
               I have test to access externally an var_stat variable via an undimensioned pointer and It works. (not modifying it only reading it)&lt;/p&gt;
&lt;p&gt;Option B: Use as model test __CRC(nameClass). It works.&lt;/p&gt;
&lt;p&gt;Option C: As Joan says using QUERYPOINTER. &lt;/p&gt;
&lt;p&gt;QUERYINTERFACE has the same mission and works testing if an FB or interface impelments another interface. Is that I need but it works with interfaces and I need that it works with inherited classes.&lt;/p&gt;
&lt;p&gt;QUERYPOINTER is the other solution. But in my CODESYS version don't make the test simply makes a cast. Another question is that I have see 2 pdfs with diferent information. &lt;/p&gt;
&lt;p&gt;One from Codesys:&lt;br/&gt;
Another from Lenze:&lt;/p&gt;
&lt;p&gt;Codesys sasy that you have to test the instance explicitly. And Lenze says that you could cast to any kind of pointer and transforms it ????&lt;/p&gt;
&lt;p&gt;And in the other hand Joan show me another examble from Beckoff wich explains another thing.&lt;/p&gt;
&lt;p&gt;Obviously Joan otions is the better but I have test it and allways returns true.&lt;/p&gt;
&lt;p&gt;&lt;a class="" href="https://forum.codesys.com//download/file.php?id=2534" rel="nofollow"&gt;PLC Designer__PLC Designer (R3 1)__v4 1__EN.pdf &lt;span&gt;&lt;span&gt;[31.91 KiB]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="" href="https://forum.codesys.com//download/file.php?id=2533" rel="nofollow"&gt;OOP_in_CODESYS_3_en.pdf &lt;span&gt;&lt;span&gt;[155.54 KiB]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="" href="https://forum.codesys.com//download/file.php?id=2533" rel="nofollow"&gt;OOP_in_CODESYS_3_en.pdf &lt;span&gt;&lt;span&gt;[155.54 KiB]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="" href="https://forum.codesys.com//download/file.php?id=2534" rel="nofollow"&gt;PLC Designer__PLC Designer (R3 1)__v4 1__EN.pdf &lt;span&gt;&lt;span&gt;[31.91 KiB]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Var_stat</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/?limit=25#33c0" rel="alternate"/><published>2020-02-27T13:54:34.315000Z</published><updated>2020-02-27T13:54:34.315000Z</updated><author><name>rickj</name><uri>https://forge.codesys.com/u/rickj/</uri></author><id>https://forge.codesys.com3d0a5cdad199bb7a6ec34469073d50d9ec82b519</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Joseph,&lt;/p&gt;
&lt;p&gt;As I understand VAR_STAT variables are only visible from within instances of the function block where they are defined.   There is only a single instance of a VAR_STAT variable regardless the number of function block instances.  It's the same as a class variable except it's only accessible from within a class instance (i.e. function block).&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Var_stat</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/?limit=25#0551" rel="alternate"/><published>2020-02-27T13:54:33.649000Z</published><updated>2020-02-27T13:54:33.649000Z</updated><author><name>Joan M</name><uri>https://forge.codesys.com/u/joan-m/</uri></author><id>https://forge.codesys.comec031bac56298b76ba952c9f053f73c41305898d</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;If I've not misunderstood your post with the Iskindof...&lt;/p&gt;
&lt;p&gt;You are getting exactly that:&lt;/p&gt;
&lt;p&gt;You have a function block instance: FBI.&lt;br/&gt;
You have an interface itf.&lt;br/&gt;
You have a pointer to check if it's of the same kind than FBI.&lt;/p&gt;
&lt;p&gt;You are getting true if the pointer is of the same kind than FBI.&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;IsKindOfFBI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;)&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&lt;/span&gt;
&lt;span class="err"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;itf&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;itfG&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;fb&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;FBI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;code&lt;/span&gt;
&lt;span class="err"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;itf&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;IsKindOfFBI&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;__QUERYPOINTER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;itf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Am I wrong?&lt;/p&gt;
&lt;p&gt;PS: that is pseudo - code at best, I've not tested it.&lt;/p&gt;
&lt;p&gt;If this works, you could put it into a method in all your fb's and then:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;method&lt;/span&gt; &lt;span class="n"&gt;IsKindOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;)&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&lt;/span&gt;
&lt;span class="err"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;itf&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;itfG&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;code&lt;/span&gt;
&lt;span class="err"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;itf&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;IsKindOf&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;__QUERYPOINTER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;itf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Hope this helps.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Var_stat</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/?limit=25#8707" rel="alternate"/><published>2020-02-27T13:54:33.434000Z</published><updated>2020-02-27T13:54:33.434000Z</updated><author><name>josepmariarams</name><uri>https://forge.codesys.com/u/josepmariarams/</uri></author><id>https://forge.codesys.com58b9492528ed1a0d29a362918b3c89c2d0af6fca</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Joan&lt;/p&gt;
&lt;p&gt;I am sorry, i have read dozens of times querypointer and i cannot find its sense.&lt;/p&gt;
&lt;p&gt;One posible solution that I found is use __crc. It accepts this, super and class definition.&lt;/p&gt;
&lt;p&gt;I could save crc of an instance on fb init in an internal variable&lt;/p&gt;
&lt;p&gt;Mycrc=__crc(this)&lt;/p&gt;
&lt;p&gt;Instanceof(pobj:=object,crcclass:=__crc(class))&lt;/p&gt;
&lt;p&gt;If (pobj.mycrc=crcclass)return true&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Var_stat</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/?limit=25#76b2" rel="alternate"/><published>2020-02-27T13:54:33.164000Z</published><updated>2020-02-27T13:54:33.164000Z</updated><author><name>Joan M</name><uri>https://forge.codesys.com/u/joan-m/</uri></author><id>https://forge.codesys.com654354d7a65bf3a5b676f834619a51671bbcc5e0</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi again Josep M,&lt;/p&gt;
&lt;p&gt;Wouldn't this help you?&lt;/p&gt;
&lt;p&gt;Both are examples from the SoMachine help system:&lt;/p&gt;
&lt;p&gt;QUERYINTERFACE ==&amp;gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;INTERFACE&lt;/span&gt; &lt;span class="nv"&gt;ItfBase&lt;/span&gt; &lt;span class="nv"&gt;EXTENDS&lt;/span&gt; &lt;span class="nv"&gt;__System&lt;/span&gt;.&lt;span class="nv"&gt;IQueryInterface&lt;/span&gt;
&lt;span class="nv"&gt;METHOD&lt;/span&gt; &lt;span class="nv"&gt;mbase&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;
&lt;span class="nv"&gt;END_METHOD&lt;/span&gt;
&lt;span class="o"&gt;/////////////////////////////////////////////////////////////////////&lt;/span&gt;
&lt;span class="nv"&gt;INTERFACE&lt;/span&gt; &lt;span class="nv"&gt;ItfDerived1&lt;/span&gt; &lt;span class="nv"&gt;EXTENDS&lt;/span&gt; &lt;span class="nv"&gt;ItfBase&lt;/span&gt;
&lt;span class="nv"&gt;METHOD&lt;/span&gt; &lt;span class="nv"&gt;mderived1&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;
&lt;span class="nv"&gt;END_METHOD&lt;/span&gt;
&lt;span class="o"&gt;/////////////////////////////////////////////////////////////////////&lt;/span&gt;
&lt;span class="nv"&gt;INTERFACE&lt;/span&gt; &lt;span class="nv"&gt;ItfDerived2&lt;/span&gt; &lt;span class="nv"&gt;EXTENDS&lt;/span&gt; &lt;span class="nv"&gt;ItfBase&lt;/span&gt;
&lt;span class="nv"&gt;METHOD&lt;/span&gt; &lt;span class="nv"&gt;mderived2&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;
&lt;span class="nv"&gt;END_METHOD&lt;/span&gt;
&lt;span class="o"&gt;/////////////////////////////////////////////////////////////////////&lt;/span&gt;
&lt;span class="nv"&gt;PROGRAMM&lt;/span&gt; &lt;span class="nv"&gt;POU&lt;/span&gt;
&lt;span class="nv"&gt;VAR&lt;/span&gt;
  &lt;span class="nv"&gt;itfderived1&lt;/span&gt; : &lt;span class="nv"&gt;ItfDerived1&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;itfderived2&lt;/span&gt; : &lt;span class="nv"&gt;ItfDerived2&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;bTest1&lt;/span&gt;, &lt;span class="nv"&gt;bTest2&lt;/span&gt;, &lt;span class="nv"&gt;xResult1&lt;/span&gt;, &lt;span class="nv"&gt;xResult2&lt;/span&gt;: &lt;span class="nv"&gt;BOOL&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="nv"&gt;xResult1&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;__QUERYINTERFACE&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;itfbase&lt;/span&gt;, &lt;span class="nv"&gt;itfderived1&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;; // variablen vom Type ItfBase bzw ItfDerived1&lt;/span&gt;
&lt;span class="nv"&gt;xResult2&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;__QUERYINTERFACE&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;itfbase&lt;/span&gt;, &lt;span class="nv"&gt;itfderived2&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;; // variablen vom Type ItfBase bzw ItfDerived2&lt;/span&gt;
&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;xResult1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;TRUE&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
  &lt;span class="nv"&gt;bTest1&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;itfderived1&lt;/span&gt;.&lt;span class="nv"&gt;mderived1&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;ELSIF&lt;/span&gt; &lt;span class="nv"&gt;xResult2&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
  &lt;span class="nv"&gt;bTest2&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;itfderived2&lt;/span&gt;.&lt;span class="nv"&gt;mderived2&lt;/span&gt;&lt;span class="ss"&gt;()&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;QUERYPOINTER ==&amp;gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;INTERFACE&lt;/span&gt; &lt;span class="nv"&gt;Itf&lt;/span&gt; &lt;span class="nv"&gt;EXTENDS&lt;/span&gt; &lt;span class="nv"&gt;__System&lt;/span&gt;.&lt;span class="nv"&gt;IQueryInterface&lt;/span&gt;
&lt;span class="o"&gt;/////////////////////////////////////////////////////////////////////&lt;/span&gt;
&lt;span class="nv"&gt;FUNCTION_BLOCK&lt;/span&gt; &lt;span class="nv"&gt;FBVariant&lt;/span&gt; &lt;span class="nv"&gt;IMPLEMENTS&lt;/span&gt; &lt;span class="nv"&gt;ITF&lt;/span&gt;
&lt;span class="nv"&gt;METHOD&lt;/span&gt; &lt;span class="nv"&gt;m1&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;
&lt;span class="nv"&gt;VAR&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
  &lt;span class="nv"&gt;m1&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="nv"&gt;END_METHOD&lt;/span&gt;
&lt;span class="o"&gt;/////////////////////////////////////////////////////////////////////&lt;/span&gt;
&lt;span class="nv"&gt;PROGRAMM&lt;/span&gt; &lt;span class="nv"&gt;POU&lt;/span&gt;
&lt;span class="nv"&gt;VAR&lt;/span&gt;
  &lt;span class="nv"&gt;itf1&lt;/span&gt; : &lt;span class="nv"&gt;Itf&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;insV&lt;/span&gt; : &lt;span class="nv"&gt;FBVariant&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;xResult&lt;/span&gt;, &lt;span class="nv"&gt;xTest&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;pVar&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;FBVariant&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="nv"&gt;itf1&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;insV&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;xResult&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;__QUERYPOINTER&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;itf1&lt;/span&gt;, &lt;span class="nv"&gt;pVar&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;xResult&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
  &lt;span class="nv"&gt;xTest&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;pVar&lt;/span&gt;.&lt;span class="nv"&gt;m1&lt;/span&gt;&lt;span class="ss"&gt;()&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;This is similar to the IsKindOf...&lt;/p&gt;
&lt;p&gt;Hope this helps...&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Var_stat</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/?limit=25#2e52" rel="alternate"/><published>2020-02-27T13:54:32.932000Z</published><updated>2020-02-27T13:54:32.932000Z</updated><author><name>josepmariarams</name><uri>https://forge.codesys.com/u/josepmariarams/</uri></author><id>https://forge.codesys.comd68f4e10a23d94703e67629a2555d9a50fe20b9c</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;All my classes have an string attribute with the class name&lt;/p&gt;
&lt;p&gt;Nowadays i made the class text comparing string:&lt;/p&gt;
&lt;p&gt;Isinstanceof(pointer,'class_name')&lt;/p&gt;
&lt;p&gt;But i dont like it. If i put an wrong string... It will return false.&lt;/p&gt;
&lt;p&gt;If i could pass something related with the class :&lt;/p&gt;
&lt;p&gt;Classname.var&lt;/p&gt;
&lt;p&gt;I will have not error strings&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Var_stat</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/?limit=25#e410" rel="alternate"/><published>2020-02-27T13:54:32.220000Z</published><updated>2020-02-27T13:54:32.220000Z</updated><author><name>Joan M</name><uri>https://forge.codesys.com/u/joan-m/</uri></author><id>https://forge.codesys.comb9db2ec6b2cf843f4e3923bfcb4b7b74ec5bea87</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Have not tried it...  What you suggest would be very interesting though.&lt;/p&gt;
&lt;p&gt;A way to get what you want would be using an interface that should be implemented in all your function blocks.  Then the interface should have a method or variable that would return what you are interested.&lt;/p&gt;
&lt;p&gt;Hope this helps.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Var_stat</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/?limit=25#1977" rel="alternate"/><published>2020-02-27T13:54:32.025000Z</published><updated>2020-02-27T13:54:32.025000Z</updated><author><name>camferti</name><uri>https://forge.codesys.com/u/camferti/</uri></author><id>https://forge.codesys.com7669386f3cc02d9470a3becab5d659207e720f04</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Lo has probado?&lt;/p&gt;
&lt;p&gt;Enviado desde mi SM-G930F mediante Tapatalk&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Var_stat</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/db7f725fca/?limit=25#11a8" rel="alternate"/><published>2020-02-27T13:54:31.821000Z</published><updated>2020-02-27T13:54:31.821000Z</updated><author><name>josepmariarams</name><uri>https://forge.codesys.com/u/josepmariarams/</uri></author><id>https://forge.codesys.com04786f597af88b63f87c9335d57e4d339691dc8f</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Dears.&lt;/p&gt;
&lt;p&gt;I have test to access a var_stat variable using class name as the path to the variable:&lt;/p&gt;
&lt;p&gt;ClassName.variable&lt;/p&gt;
&lt;p&gt;But the compiler tell me that the class had to be instantiated.&lt;/p&gt;
&lt;p&gt;It is possible in Java.&lt;/p&gt;
&lt;p&gt;I am doing something wrong?&lt;/p&gt;
&lt;p&gt;Will it be possible in future?&lt;/p&gt;
&lt;p&gt;It would help me to implement an instanceof function.&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>