2/14/2016 5:38 PM | |
Posts: 5225 Rating: (1192) |
:smile: Simulated under TIA Portal for the S7-1500.. |
This contribution was helpful to1 thankful Users |
2/15/2016 11:32 AM | |
Joined: 12/16/2012 Last visit: 9/13/2024 Posts: 653 Rating: (130) |
Hi! You made me curious, so I also made some experiments. |
This contribution was helpful to5 thankful Users |
2/15/2016 12:23 PM | |
Joined: 1/4/2013 Last visit: 9/16/2024 Posts: 1124 Rating: (102) |
Jacek, I think that Kahl shown the motivation of this problem. But I still call it problem, instead of a "result of number theory". Because it is a problem. You make a calculation and you need to compare it to a fixed number and what you have to care absolutely is if your calculation can give a result that is representable in a qay where the system can compare. It is like if you need before launching the CMP_R, a sorta of floating point control on one (or both?) the input numbers . That is obviously unacceptable in 2016, it seems a 1990 retail. What I can think is that system, automatically, should apply a sorta of internal range, where somewhere it clamps or approximates automatically the addendums and give the correct result. |
Searching for Siemens used/new equipments ? |
|
2/15/2016 12:51 PM | |
Posts: 5225 Rating: (1192) |
Bold statement.. On the same note.. |
This contribution was helpful to2 thankful Users |
2/15/2016 1:02 PM | |
Joined: 9/23/2005 Last visit: 9/20/2024 Posts: 4707 Rating: (721) |
The thing called IEEE754 has certain restrictions and weaknesses. Whoever attempts to use the thing, should learn these restrictions and weaknesses in order to not be suprised. "The system" is not knowing all fantasies of programmers. If it did, programmers would be superfluous. |
Last edited by: jacek d at: 2/15/2016 1:05:11 PMRegards, |
|
2/15/2016 2:11 PM | |
Joined: 12/16/2012 Last visit: 9/13/2024 Posts: 653 Rating: (130) |
Hi! For the visual types, like myself: |
This contribution was helpful to1 thankful Users |
2/15/2016 2:34 PM | |
Joined: 1/4/2013 Last visit: 9/16/2024 Posts: 1124 Rating: (102) |
What I think is this : if systems makes a MUL_R and it gets as result 1799,99999995678, where clearly the result was 1800, it must round up it. The second statement isn't really involved in automation technology. The actual tech level of PLCs is derived from people who thinks that what we have now is good but not enough, and of course they know that we still have poverty and hunger... [quote] "The system" is not knowing all fantasies of programmers. If it did, programmers would be superfluous. [/quote] I do not call fantasy that 1800 is not geq than 1800. Neither does the Simotion that is IEEE754 compliant, for him 1800 is GEQ than 1800, whatever the calculus comes from. We are just comparing two reals, not two Riemann's Z functions ... It is curious that nobody has still replied to the fact that in Simotion this does not happens... Maybe in motion control you need that 1800 is equal to 1800 if not you have troubles ? Maybe :D |
Searching for Siemens used/new equipments ? |
|
2/15/2016 3:32 PM | |
Joined: 9/8/2009 Last visit: 7/17/2023 Posts: 1410 Rating: (152) |
Hi guys, I read some problems regarding a floating point number, I would like to comment. Floating point is a approximation of the integer number, everytime you convert INT_TO_REAL you loose the exact value. Then if the variables are multiplied,..you further loose the precision. What is all about here, one has multiplied two numbers and it is comparing them at very precisely margin. Sorry to say but this is unpossible, it's a waste of time, in real world nothing will change if the propsed comparator switches after 0.001 tolerance. PID regulators, FIR filters, Kalman,.. all these are just approximations and are widely used, so where the problem is? The engineer has to know that there isn't a absolute precision, that's all. |
This contribution was helpful to4 thankful Users |
2/15/2016 3:38 PM | |
Joined: 9/23/2005 Last visit: 9/20/2024 Posts: 4707 Rating: (721) |
Once again: "The system" is not knowing all fantasies of programmers. The result is as it is.
My Simotion must have been unaware of you revelations... Possibly outdated FW... Excuse me strange variable names. Had no time to alter running machine too much. |
Regards, |
|
This contribution was helpful to2 thankful Users |
2/15/2016 5:43 PM | |
Posts: 5225 Rating: (1192) |
Thank you for sharing this example.. if I could I would rate it twice. |
2/16/2016 6:14 PM | |
Posts: 7 Rating: (3) |
Well, I made a block to adjust the amount of decimal places from 0 to 5 which has solved the problem as you can see in the attachment |
This contribution was helpful to5 thankful Users |
2/18/2016 1:55 PM | |
Joined: 1/4/2013 Last visit: 9/16/2024 Posts: 1124 Rating: (102) |
Jacek, please look at the attached file. And apologize if 1008.0 >= 1008.0, you can call it revelation, or fantasy. In some other places they call it math. Sorry but I do not have more time to make other experiment, but the attached file shows what Iwould expect from a PLC. Unfortunately i don't have a simotion ready right now, I hope that 1200 is enough. Ah wait, it's a 1214-F, probably it's more intelligent ? :D Bye
|
Searching for Siemens used/new equipments ? |
|
This contribution was helpful to1 thankful Users |
2/18/2016 4:02 PM | |
Joined: 9/23/2005 Last visit: 9/20/2024 Posts: 4707 Rating: (721) |
Well, I don't know what math do you mean, but for sure it is not Finite Precision Floating Point math. Unfortunatelly, I'm not familiar with S7-1200 and their architecture. Maybe some expert can shed some light on the results you showed us. And unfortunatelly I don't have S7-1200 CPU at hand. But I used simulator... I hope it works well as with your SCL example it showed same results. However try to do the same in LAD. I'd love to see screenshots. If your precious time allows for this, please also (in LAD) calculate this 1200.0*0.84-1008.0. |
Regards, |
|
This contribution was helpful to1 thankful Users |
2/18/2016 7:49 PM | |
Posts: 5225 Rating: (1192) |
|
This contribution was helpful to3 thankful Users |
2/18/2016 11:39 PM | |
Joined: 3/30/2011 Last visit: 9/18/2024 Posts: 736 Rating: (256) |
Hello, just to add another screenshoot..... im working with schneider premium and i make same calculation with this simulator...... same result... Best Regards |
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ |
|
This contribution was helpful to2 thankful Users |
2/19/2016 8:07 AM | |
Joined: 9/23/2005 Last visit: 9/20/2024 Posts: 4707 Rating: (721) |
Thank you William_B and mindware for your contribution. IMHO there's a flaw in S7-1200. Or some strange optimizations in the compiler? Nice issue to ask Siemens Support... @Davinator: nice equipment you use, for it 1008.0-1008.0<>0.0 |
Last edited by: jacek d at: 2/19/2016 8:11:27 AMI couldn't resist... Last edited by: jacek d at: 2/19/2016 8:23:33 AMI've just sent a Support Request. Last edited by: jacek d at: 2/19/2016 8:51:08 AMRegards, |
|
This contribution was helpful to1 thankful Users |
2/19/2016 8:53 AM | |
Joined: 12/16/2012 Last visit: 9/13/2024 Posts: 653 Rating: (130) |
Hi! I think that Davinator's frustration comes from the fact that when this program is monitorized, it does not inform the human that at the result of the MUL block displayed is not quite the same as what is inside the memory. So there is some optimization done for the monitoring but that is not used further in the e.g. compare or SUB blocks. Anyway, I think that all those who will read this discussion will learn that working with IEEE 754 real numbers needs more attention. |
2/19/2016 9:07 AM | |
Joined: 9/23/2005 Last visit: 9/20/2024 Posts: 4707 Rating: (721) |
I'm afraid that it's opposite. Pls investigate carefuly screenshots from Davinator and William_B. |
Regards, |
|
2/19/2016 9:30 AM | |
Joined: 12/16/2012 Last visit: 9/13/2024 Posts: 653 Rating: (130) |
Opposite of what I said means: " some optimization is NOT done for the monitoring but it is DO used further", but I do not want to do hairsplitting, especially when I definitely need to make some corrections: So there is some optimization done when monitoring in Ladder but that is not used further in the e.g. compare or SUB blocks in Ladder (referring to William_B's second LAD network). I have to agree with you about the "strange optimization" issue. BTW, I hope you will share us the answer from your support request. I am very curious. |
Last edited by: Kahl at: 2/19/2016 9:32:41 AMtypo |
|
2/19/2016 9:50 AM | |
Joined: 12/16/2012 Last visit: 9/13/2024 Posts: 653 Rating: (130) |
Hi! I think that Davinator's example and William_B's SCL example relates to "constant folding". First multiplication is done during runtime while second multiplication is done during compilation. |
Last edited by: Kahl at: 2/19/2016 9:52:12 AMLast edited by: Kahl at: 02/26/2021 08:55:50 |
|
2/19/2016 3:50 PM | |
Posts: 5225 Rating: (1192) |
Hoping not to offend anyone (including <Davinator>).. Evaluating this case by experimentation, However.. even better to subtract the real values from each other and see the resulting value. There is also value in evaluating the numbers in binary or hex format to avoid rounding that is done to for viewing the online values. It is clear that there are many enemies (format of REAL / monitoring / execution of LAD vs STL vs SCL) in the collection of this knowledge / experience.
|
Last edited by: William_B at: 2/19/2016 4:56:02 PMrestructured notes |
|
2/24/2016 10:22 AM | |
Joined: 9/16/2013 Last visit: 9/18/2024 Posts: 199 Rating: (23) |
hej, i found an official FAQ: How do you check real numbers for parity? |
This contribution was helpful to2 thankful Users |
3/4/2016 11:24 AM | |
Joined: 9/23/2005 Last visit: 9/20/2024 Posts: 4707 Rating: (721) |
In a mean time while waiting for the Support answer... http://www.exploringbinary.com/the-four-stages-of-floating-point-competence/ |
Regards, |
|
This contribution was helpful to1 thankful Users |
3/4/2016 5:01 PM | |
Posts: 5225 Rating: (1192) |
. |
Last edited by: William_B at: 3/8/2016 4:22:12 PM |
|
3/8/2016 9:03 AM | |
Joined: 4/28/2015 Last visit: 2/7/2024 Posts: 10533 Rating: (820) |
Hello all, I'm not Siemens support, but try simple C++ example to go inside problem. Probably problem is use of constant 0.84 on MUL_R. Because that number isn't defined with some point of precision, it is automatically set to lower precision, so internal representation is like 0.839999971, not 0.84! Now you can basicaly imagine why that comparision never success. This is C++ example of this situation: float a=1200; float b=1008; float c=0.84; //I over defined that constant directly as float (lower precision) like in user's first post if ((a*c)!=b) printf ("????\n"); //problem, in this case of code this is result :) else printf ("a*c=b\n"); //result is ok But take we another piece of code: float a=1200; float b=1008; double c=0.84; //I over defined that constant directly as double (double precision) like in user's first post if ((a*c)!=b) printf ("????\n"); //problem, in this case of code this isn't result else printf ("a*c=b\n"); //result is ok, yes this is result now :) So problem is that user simply didn't clearly set precision representation of that constant. Update: pls look, that I'm not use style 0.000 in that float input numbers. |
Last edited by: Duris_I at: 3/8/2016 9:06:56 AMLast edited by: Duris_I at: 3/8/2016 9:09:38 AMWith best regards... |
|
This contribution was helpful to1 thankful Users |
3/8/2016 10:18 AM | |
Joined: 4/28/2015 Last visit: 2/7/2024 Posts: 10533 Rating: (820) |
Here is another situation, look at a,b .000-th count number. Another difference is right multiplication: double a=1200.000000000001; double b=1008.000000000000; //12x 0-th count if ((a*0.84)!=b) printf ("????\n"); //problem, in this case of code this is result else printf ("a*0.84=b\n"); //this isn't result here but: double a=1200.0000000000001; double b=1008.0000000000000; //13x 0-th count if ((a*0.84)!=b) printf ("????\n"); //problem, this isn't result else printf ("a*0.84=b\n"); //this is result here :) Now think about definition of float/doble and value representation. |
With best regards... |
|
This contribution was helpful to2 thankful Users |
3/9/2016 12:06 PM | |
Joined: 9/23/2005 Last visit: 9/20/2024 Posts: 4707 Rating: (721) |
My Dears, I gave up trying to get the offical statement from the Support. Most of the information I got from them was links to readings about floating point numbers and arthmetics. The only information directly connected to the orginal question was that they can't recreate results presented by William_B... Funny, I was able to do it... Even without studying these readings. Anyway, in case anyone is interested in details of this useless conversation, pls PM me. For sure the TIA is not a WYSIWYG software. This is due to the constant folding in higher precision than expected and incorrect HEX on-line display procedure. In the attached screen shot: Lines 3 and 4 shows same calculation which is probably precomputed by compiler as already pointed out here. Although both results are of REAL type the line 3 is calculated over LREALs so we get "desired by some people" but incorrect result. After explicitly typing constants - line 4 - result is correct. Maybe this behavior is described somewhere in the manuals. But the Support didn't tell me where. Lines 1 and 2 - Here the on-line view lies. The result, for display reasons maybe or simply to confuse, is rounded off. Funny (or rather bizzare and tragic) thing is that HEX representation is not what is in the PLC memory but it refers to the rounded decimal value. See line 13 - that's what is actually in the memory. Of course I didn't get that answer from the Support neither. Thank you for your attention. |
Regards, |
|
This contribution was helpful to2 thankful Users |
3/9/2016 1:02 PM | |
Joined: 4/28/2015 Last visit: 2/7/2024 Posts: 10533 Rating: (820) |
Jacek, bardzo dobrze |
With best regards... |
|
This contribution was helpful to1 thankful Users |
Follow us on