Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [4diac-dev] [LUA] Dynamic type loader test evaluation

Hello Martin,
 
OK thank you for the information. I hope i can keep all that in mind.

Best regards,
Jan
 
PS:
When i created the FBs and the deployment was failing, i was hoping that the parenthesis could maybe fix it. :D
 
 
Gesendet: Freitag, 14. Juni 2019 um 11:17 Uhr
Von: "Martin Melik-Merkumians" <Melik-Merkumians@xxxxxxxxxxxxxxxxx>
An: "4diac developer discussions" <4diac-dev@xxxxxxxxxxx>
Betreff: Re: [4diac-dev] [LUA] Dynamic type loader test evaluation

Hi Jan,

 

yes 0011 AND 0001 results in 0001 (I would not write 1 as BYTE, WORD, etc. do not represent numbers but bit sequences).

The code is correct (although the parentheses in the top FB are superfluous 😉 ).

Chaining is allowed as written, but will be evaluated from right to left (see EBNF).

 

Yes if both operands are of type BOOL you will get BOOL as result. This due to the casting rules (Figure 11 in the IEC 61131-3), as a BOOL will be upcasted to BYTE, WORD… but these types are not allowed to be downcast to BOOL.

The syntax is correct, as AND/OR/XOR are applicable on ANY_BIT types (BOOL, BYTE, WORD, DWORD, LWORD)

 

For your third FB, the code is perfectly valid (relational operators always result in BOOL).

 

Alois showed me the tutorial. Unfortunately a lot of people are not aware that there is no logical operator as in C, LUA, etc. in IEC 61131 due to how the language is constructed.

 

Best,

Martin

 

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

Dipl.-Ing. Martin Melik-Merkumians

Advanced Mechatronic Systems

Automation and Control Institute (ACIN)

Vienna University of Technology

DVR-Number: 0005886

 

Gusshausstr. 27-29, room CA-05-38

1040 Vienna, Austria

Phone: +43 (0)1 588 01 37688

Fax: +43 (0)1 588 01 937688

Email: melik-merkumians@xxxxxxxxxxxxxxxxx

http://www.acin.tuwien.ac.at/

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

 

 

Von: 4diac-dev-bounces@xxxxxxxxxxx <4diac-dev-bounces@xxxxxxxxxxx> Im Auftrag von Jan Holzweber
Gesendet: Freitag, 14. Juni 2019 11:14
An: alois.zoitl@xxxxxx; 4diac-dev@xxxxxxxxxxx
Betreff: Re: [4diac-dev] [LUA] Dynamic type loader test evaluation

 

Hello Martin!

 

I have a few questions regarding my FBs. In the attachment, there is an image with three FB interfaces and their algorithms, which get executed with the according event.

For the first one:
>From your mail, i understood, that if you have two variables from BYTE: A = 3 and B = 1. If i then do sth like "A AND B" i should get 1 because "0011 and 0001" evaluates to "0001". Am i right wiht this one?
Also is the code i write there correct? Are you then able to also do an _expression_ with 3 variables "A AND B AND C"?

 

For the second one:

Also, i can only get a boolean value from an _expression_, if the _expression_ gives me a BOOL type, otherwise i would get e.g. BYTE/WORD/ etc.Do i then get a BOOL type, when i do an AND/OR/XOR with BOOL types as shown in the interface?
Is the code for the algorithms of the second FB right?

 

For the third one:

In my eyes, ifi have two INT variables A = 3 and B = 1, the _expression_ "A > B" evaluates to 1 (TRUE). Again my question, is the code of my algorithms then right? Otherwise, i did not unterstand ST right at the moment.

 

I based my tests on this tutorial, thats where the  Logical, Bitwise and Relational operators are coming from.

 

Best regards,
Jan

 

 

Gesendet: Donnerstag, 13. Juni 2019 um 18:23 Uhr
Von: "Alois Zoitl" <alois.zoitl@xxxxxx>
An: 4diac-dev@xxxxxxxxxxx
Betreff: Re: [4diac-dev] [LUA] Dynamic type loader test evaluation

Hi,

Thanks to Martin for his explanation. Finally I also understood how this has to be treated in ST.

On Thu, 2019-06-13 at 12:36 +0200, Jan Holzweber wrote:
> Hello Martin!
>
> Please excuse my late reply.
> I will try to change my test according the information you gave me. I think i made some mistakes with the datatypes, as i thought of them more like c operators, as you mentioned. I will update you, if the tests do change.

I'm really looking forward to that. After Martins explanation I wanted to expand here on the big problem of the C/C++ and maybe the Lua treatment of logical
operators. Maybe this is clear for everybody, but for me it was a bit of an I opener and as it will affect our code generation I wanted to document it here:


If you take for example the following C/C++ code:

if(var1 > 5) && (var2 != 10)

This will get true when both conditions are fulfilled. However C/C++ defines a true condition of anything not 0. So it could be that based on the CPU
instructions used that the result of both conditions results not just in values 1 but some bit pattern with 1s when the conditions are fulfilled. Therefore for
simplifying the programming C introduced the logical operators.

If we now tak this to ST the condition would look like:

if (var1 > 5) AND (var2 <> 10) THEN

As ST only knows bitwise logical operators the AND would be a bitwise AND. However ST or to be more precise IEC 61131-3 has the data type BOOL which is the
result of both comparisons. As Bool can only have the value 0 or 1 bitwise from the IEC 61131-3 perspective is fine.

So a code generator either has to know that both sides are bool and use logical operators in the target language or it has to ensure that a bitwise comparison
is correct. For example the according C code for the ST above could then be:

if ((var1 > 5) ? 1 :0) & ((var2 != 10) ? 1 : 0) {

I'm not sure if I like this.

Cheers,
Alois




>
> Thank you and best regards,
> Jan
>
> Gesendet: Dienstag, 11. Juni 2019 um 22:25 Uhr
> Von: "Martin Melik-Merkumians" <Melik-Merkumians@xxxxxxxxxxxxxxxxx>
> An: "4diac developer discussions" <4diac-dev@xxxxxxxxxxx>
> Betreff: Re: [4diac-dev] [LUA] Dynamic type loader test evaluation
> Hi Jan,
>
> I have gone through your spreadsheet. Its great what you already analyzed since starting.
>
> I also have seen, that you differentiate between logical and bitwise operators (and/or/xor). Although such a distinction exists in C/C++ and LUA (as far as I remember), the IEC 61131 does not know this distinction, because there is a dedicated bool data type, which is part of the ANY_BIT types.
>
> Some examples to perhaps better visualize what I mean here.
> So a <WORD> AND <WORD> results in a <WORD> (abbreviated with => from now on)
> Resulting in a C-like bitwise AND operation
>
> <BOOL> AND <WORD> => <WORD> as the bool will be implicitly cast to the larger type
> Again resulting in a bitwise AND
>
> For <BOOL> AND <BOOL> => <BOOL> - this will produce a C-like logical AND
>
> So for e.g. an IF condition _expression_, the resulting type must always be a BOOL type in IEC 61131, which means the line “IF <BOOL> AND <WORD> THEN” is invalid code in the context of IEC 61131, where the same combination of types would be valid in C-like languages (with values different from zero treated as true, and false otherwise).
>
> So to make a long story short, in IEC 61131 there is no distinction between logical and bitwise operations, as all Boolean operations are always treated as bitwise, but with a distinct BOOL data type with no implicit or explicit casts to it. The only way to get a BOOL value is that the _expression_ must result in a BOOL.
>
> If there are further questions to that, feel free to contact me.
>
> Best regards,
> Martin
>
> --------------------------------------------------
> Dipl.-Ing. Martin Melik-Merkumians
> Advanced Mechatronic Systems
> Automation and Control Institute (ACIN)
> Vienna University of Technology
> DVR-Number: 0005886
>
> Gusshausstr. 27-29, room CA-05-38
> 1040 Vienna, Austria
> Phone: +43 (0)1 588 01 37688
> Fax: +43 (0)1 588 01 937688
> Email: melik-merkumians@xxxxxxxxxxxxxxxxx
> http://www.acin.tuwien.ac.at/
> --------------------------------------------------
>
>
>
> Von: 4diac-dev-bounces@xxxxxxxxxxx <4diac-dev-bounces@xxxxxxxxxxx> Im Auftrag von Jan Holzweber
> Gesendet: Dienstag, 11. Juni 2019 15:57
> An: 4diac-dev@xxxxxxxxxxx
> Betreff: [4diac-dev] [LUA] Dynamic type loader test evaluation
>
> Hello!
>
> I finihsed the first evaluation of the tool. I summarized everything in the wiki and also in more detail in a google sheet.
> wiki: wiki
> google spread sheet: spreadsheet
>
> For question, as awlays, i am easily reachable on mattermost or here with the mailinglist.
>
> Cheers,
> Jan
> _______________________________________________ 4diac-dev mailing list 4diac-dev@xxxxxxxxxxx To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/4diac-dev
> _______________________________________________
> 4diac-dev mailing list
> 4diac-dev@xxxxxxxxxxx
> To change your delivery options, retrieve your password, or unsubscribe from this list, visit
> https://www.eclipse.org/mailman/listinfo/4diac-dev

_______________________________________________
4diac-dev mailing list
4diac-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://www.eclipse.org/mailman/listinfo/4diac-dev

_______________________________________________ 4diac-dev mailing list 4diac-dev@xxxxxxxxxxx To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/4diac-dev

Back to the top