We have automatical regulation equipment. Accordingly, two values for a parameter, expected and real one. How to calculate the standard deviation value? Do appropriate functions in MSDN library available?
I tried to program calculation direct:
Globals.Tags.UV_Dose_dev_std.Value=(Globals.Tags.UV_Dose_dev_sq_sum.Value/Globals.Tags.Measure_number)^(1/2);
but got error. Could not find any Math() after typing:using System...
Thanks in advance.
Waldemar
standard deviation
-
- Posts: 824
- Joined: Tue Mar 13, 2012 9:53 am
Re: standard deviation
That should not require you to add Math into your workspace. Those are all normal C# math operations.
//Your code has an error in it:
Globals.Tags.UV_Dose_dev_std.Value=(Globals.Tags.UV_Dose_dev_sq_sum.Value/Globals.Tags.Measure_number)^(1/2);
//This is correct:
Globals.Tags.UV_Dose_dev_std.Value=(Globals.Tags.UV_Dose_dev_sq_sum.Value/Globals.Tags.Measure_number.Value)^(1/2);
//Your code has an error in it:
Globals.Tags.UV_Dose_dev_std.Value=(Globals.Tags.UV_Dose_dev_sq_sum.Value/Globals.Tags.Measure_number)^(1/2);
//This is correct:
Globals.Tags.UV_Dose_dev_std.Value=(Globals.Tags.UV_Dose_dev_sq_sum.Value/Globals.Tags.Measure_number.Value)^(1/2);
Best Regards,
Mark Monroe
Beijer Electronics, Inc. | Applications Engineer
Mark Monroe
Beijer Electronics, Inc. | Applications Engineer
Re: standard deviation
Thank You Mark for the answer and finding an error in my code. Now the compilation is OK, but the result is always zero. Checked components of the expression, every calculation is OK, except square root.
How to do it correctly?
Regards, Waldemar
How to do it correctly?
Regards, Waldemar
Re: standard deviation
Found solution:
Globals.Tags.UV_Dose_dev_std.Value=Math.Sqrt(Globals.Tags.UV_Dose_dev_sq_sum.Value/Globals.Tags.Measure_number.Value);
How can I insert a special symbol "±" to the screen?
I mean, how to change font to Symath for the string:
Globals.Tags.Plus_minus.Value=" E";
Regards, Waldemar
Globals.Tags.UV_Dose_dev_std.Value=Math.Sqrt(Globals.Tags.UV_Dose_dev_sq_sum.Value/Globals.Tags.Measure_number.Value);
How can I insert a special symbol "±" to the screen?
I mean, how to change font to Symath for the string:
Globals.Tags.Plus_minus.Value=" E";
Regards, Waldemar
-
- Posts: 824
- Joined: Tue Mar 13, 2012 9:53 am
Re: standard deviation
You need to change the font on the component to the font you want. Select the component and then go to the font section of the Property Grid. If you do not see your font there, then you need to add it to your computers OS.
Best Regards,
Mark Monroe
Beijer Electronics, Inc. | Applications Engineer
Mark Monroe
Beijer Electronics, Inc. | Applications Engineer
-
- Posts: 22
- Joined: Fri May 25, 2012 7:44 am
- Location: Charlotte, NC. USA
Re: standard deviation
the ± symbol is present in many of the normal system fonts. Tahoma (the default font in iX Developer).
You could add the symbol to a standard text label, or you should be able to apply the symbol to the prefix (or suffix if you prefer) of an AnalogNumeric control so that the symbol is right next to the number. You do not necessarily have to change the font. The trick is getting iX developer to accept ALT code entry (which it appears unable to do presently) Trying to enter an ALT code just causes a lovely "Ding" sound.
You could open Word, Notepad or any other editor and press ALT+0177 (i.e. press and hold ALT while typing 0 1 7 7 on the number pad). Then select the ± symbol and copy, then return to iX and choose the destination text area and Paste (CTRL+V).
Or I prefer the Character Map Program (Start / Run... / "charmap"), you can browse the characters of all the installed fonts, select (copy to clipboard) or simply reference the ALT+ key code.
Also...
Since a tag's (GlobalDataItem) Value property is VariantValue the results of the (UV_Dose_dev_sq_sum.Value / Measure_number.Value) is being internally cast to the Variant Integer representation, *.Value.Int versus the *.Value.Double floating point version.
While Math.Sqrt whos parameter is expected to be double Math.Sqrt(double) is ensuring the cast or VariantValue Value.Double is used.
Somethings to keep in mind going forward, either cast explicitely or use the literal suffix to tell the compiler what type of number you are using.
1/2 is integer 1 / integer 2 (result int 0)
1.0f/2.0f is float 1.0 / float 2.0 (result float 0.5f)
1.0/2.0 is double 1.0 / double 2.0 (result double 0.5)
Another trick is to reference Value.Int or Value.Double explicitely but these values may not be what you expected. I tend to use explicite casts when dealing with any tag's Value property if I have any doubts about how the compiler will treat the code... at least then I know what I am asking the compiler to do specifically, and it will tell me if it has a problem meeting that request.
You could add the symbol to a standard text label, or you should be able to apply the symbol to the prefix (or suffix if you prefer) of an AnalogNumeric control so that the symbol is right next to the number. You do not necessarily have to change the font. The trick is getting iX developer to accept ALT code entry (which it appears unable to do presently) Trying to enter an ALT code just causes a lovely "Ding" sound.
You could open Word, Notepad or any other editor and press ALT+0177 (i.e. press and hold ALT while typing 0 1 7 7 on the number pad). Then select the ± symbol and copy, then return to iX and choose the destination text area and Paste (CTRL+V).
Or I prefer the Character Map Program (Start / Run... / "charmap"), you can browse the characters of all the installed fonts, select (copy to clipboard) or simply reference the ALT+ key code.
Also...
I am pretty sure the reason Waldemar is getting Zero's is the use of ^(1/2) while it is true that the Square root of a number is the same as raising the number to the power of 1/2 (or 0.5) the reason it is not working in this example comes down to how the C# compiler treats numerical constants. In this case the C# compiler is treating the (1/2) as an integer division which means it is actually ^0.mark.monroe wrote:That should not require you to add Math into your workspace. Those are all normal C# math operations.
...
//This is correct:
Globals.Tags.UV_Dose_dev_std.Value=(Globals.Tags.UV_Dose_dev_sq_sum.Value/Globals.Tags.Measure_number.Value)^(1/2);
Since a tag's (GlobalDataItem) Value property is VariantValue the results of the (UV_Dose_dev_sq_sum.Value / Measure_number.Value) is being internally cast to the Variant Integer representation, *.Value.Int versus the *.Value.Double floating point version.
While Math.Sqrt whos parameter is expected to be double Math.Sqrt(double) is ensuring the cast or VariantValue Value.Double is used.
Somethings to keep in mind going forward, either cast explicitely or use the literal suffix to tell the compiler what type of number you are using.
1/2 is integer 1 / integer 2 (result int 0)
1.0f/2.0f is float 1.0 / float 2.0 (result float 0.5f)
1.0/2.0 is double 1.0 / double 2.0 (result double 0.5)
Another trick is to reference Value.Int or Value.Double explicitely but these values may not be what you expected. I tend to use explicite casts when dealing with any tag's Value property if I have any doubts about how the compiler will treat the code... at least then I know what I am asking the compiler to do specifically, and it will tell me if it has a problem meeting that request.
- Attachments
-
- 8-28-2012 1-54-16 PM.png (43.22 KiB) Viewed 17358 times
-
- 8-28-2012 1-50-51 PM.png (8.64 KiB) Viewed 17358 times
Best Regards,
Patrick Hall
Patrick Hall
Re: standard deviation
Thank You very much to Mark and Patrick for the usefull help.
What is confusing me, as far as I remember, any figure in the power of zero equal one. (Is this correct?) But result was zero. Why?
Another question:
I want to save the calculated values for the future reference. Is there any tools like indexing, which will allow me to find the wanted information later easy? For example, data of session #5 at 20 Aug. 2012 and so on?
Regards, Waldemar
What is confusing me, as far as I remember, any figure in the power of zero equal one. (Is this correct?) But result was zero. Why?
Another question:
I want to save the calculated values for the future reference. Is there any tools like indexing, which will allow me to find the wanted information later easy? For example, data of session #5 at 20 Aug. 2012 and so on?
Regards, Waldemar
Re: standard deviation
The recipe feature in iX Developer would be one good way to save values for future reference.
You can also mark internal variables as non-volatile to save them.
You can also mark internal variables as non-volatile to save them.
Best Regards,
Beijer Electronics, Inc.
Ron Lloyd | Applications Engineer
Beijer Electronics, Inc.
Ron Lloyd | Applications Engineer
-
- Posts: 22
- Joined: Fri May 25, 2012 7:44 am
- Location: Charlotte, NC. USA
Re: standard deviation
Well, aside from my amnesia and the fact I have been programming in C#, IEC61131 (ST, LD, and SFC) and testing equations in Excel, I totally overlooked the fact that in C# the "^" is not the power symbol, It is actually the XOR (Exclusive OR) operator. It completely slipped my mind since I have been using the ^ all day in Excel where it is actually the power operator. IT wasn't until I started to recreate thewlederer wrote:Thank You very much to Mark and Patrick for the usefull help.
What is confusing me, as far as I remember, any figure in the power of zero equal one. (Is this correct?) But result was zero. Why?
Another question:
I want to save the calculated values for the future reference. Is there any tools like indexing, which will allow me to find the wanted information later easy? For example, data of session #5 at 20 Aug. 2012 and so on?
Regards, Waldemar
I have the same brain lapse sometimes after a long day of IEC (ST) programming…
myVar:=REAL#0.0;
When I get back into C# I keep wanting to use the same Pascal like assignment :=, as well as the tendency to bang out the IEC Type Literals REAL#, INT#, UDINT#, etc.
but I digress...
Math.Pow(double, double) is the correct way to raise a number to a given power in C#. Math.Sqrt(V1/V2) is the better way to go (As you have already found).
As to your second question logging the results for future reporting sounds like a DataLogger (as Mark mentions) and perhapse some report generator. I am new to Beijer myself and as such have not yet had to cross the data logging bridge. Though my current project will likely take me down that road in the coming days.
Best Regards,
Patrick Hall
Patrick Hall
Re: standard deviation
Thank You very much. I will try the recommended options.
Another question, how can change the string colour depending on if the result is OK or not?
regards, Waldemar
Another question, how can change the string colour depending on if the result is OK or not?
regards, Waldemar