<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Performance test</title><link href="https://forge.codesys.com/forge/talk/CODESYS-V2/thread/5e1290650d/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/CODESYS-V2/thread/5e1290650d/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/CODESYS-V2/thread/5e1290650d/</id><updated>2020-02-27T22:34:52.385000Z</updated><subtitle>Recent posts to Performance test</subtitle><entry><title>Performance test</title><link href="https://forge.codesys.com/forge/talk/Codesys%2520V2.3/thread/5e1290650d/?limit=25#20bf" rel="alternate"/><published>2020-02-27T22:34:52.385000Z</published><updated>2020-02-27T22:34:52.385000Z</updated><author><name>astrand</name><uri>https://forge.codesys.com/u/astrand/</uri></author><id>https://forge.codesys.com7ba3c2b214e8bc7d27e76762c763fa947c8920e1</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;shooter hat geschrieben:&lt;/strong&gt;&lt;br/&gt;
your loops are taking too long, so the PLC will have a watchdog alarm and resets and starts all over when nothing is done to prevent ths.&lt;br/&gt;
In ST you have to make sure the program is completed in watchdog time &lt;br/&gt;
As with most machines you will not get a good answer  to this as a PLC needs time to update i/o and communication etc.&lt;br/&gt;
the time is updated via a counter internal, so it will be on time&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The cycle time is not very long, about 2000 us. I have other programs running on the same device with such cycle time without problems. It must be something more to this problem.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Performance test</title><link href="https://forge.codesys.com/forge/talk/Codesys%2520V2.3/thread/5e1290650d/?limit=25#60f7" rel="alternate"/><published>2020-02-27T22:34:50.793000Z</published><updated>2020-02-27T22:34:50.793000Z</updated><author><name>shooter</name><uri>https://forge.codesys.com/u/shooter/</uri></author><id>https://forge.codesys.comb6f5a08628154c2ec756a8afdebb728f633eb2f3</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;your loops are taking too long, so the PLC will have a watchdog alarm and resets and starts all over when nothing is done to prevent ths.&lt;/p&gt;
&lt;p&gt;In ST you have to make sure the program is completed in watchdog time &lt;br/&gt;
As with most machines you will not get a good answer  to this as a PLC needs time to update i/o and communication etc.&lt;br/&gt;
the time is updated via a counter internal, so it will be on time&lt;/p&gt;
&lt;p&gt;by the way if you mul by 1000000 you do not get a better result as it is a DWORD. just leave it like it is.&lt;br/&gt;
you will have to break up your program in subs&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Performance test</title><link href="https://forge.codesys.com/forge/talk/Codesys%2520V2.3/thread/5e1290650d/?limit=25#a878" rel="alternate"/><published>2020-02-27T22:34:46.288000Z</published><updated>2020-02-27T22:34:46.288000Z</updated><author><name>astrand</name><uri>https://forge.codesys.com/u/astrand/</uri></author><id>https://forge.codesys.comeb787c9dd9cfd7a52f68e11ca3a82ee6508027d3</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;perftest.exp:&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; @NESTEDCOMMENTS := 'Yes' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @PATH := '' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @OBJECTFLAGS := '0, 8' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @SYMFILEFLAGS := '2048' &lt;/em&gt;)&lt;br/&gt;
FUNCTION_BLOCK DummyFB&lt;br/&gt;
VAR_INPUT&lt;br/&gt;
    invar: BOOL;&lt;br/&gt;
END_VAR&lt;br/&gt;
VAR_OUTPUT&lt;br/&gt;
    outvar: BOOL;&lt;br/&gt;
END_VAR&lt;br/&gt;
VAR&lt;br/&gt;
END_VAR&lt;br/&gt;
(&lt;em&gt; @END_DECLARATION := '0' &lt;/em&gt;)&lt;br/&gt;
outvar := invar;&lt;br/&gt;
END_FUNCTION_BLOCK&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; @NESTEDCOMMENTS := 'Yes' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @PATH := '' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @OBJECTFLAGS := '0, 8' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @SYMFILEFLAGS := '2048' &lt;/em&gt;)&lt;br/&gt;
FUNCTION DummyFunc : BOOL&lt;br/&gt;
VAR_INPUT&lt;br/&gt;
END_VAR&lt;br/&gt;
VAR&lt;br/&gt;
END_VAR&lt;br/&gt;
(&lt;em&gt; @END_DECLARATION := '0' &lt;/em&gt;)&lt;br/&gt;
DummyFunc := TRUE;&lt;br/&gt;
END_FUNCTION&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; @NESTEDCOMMENTS := 'Yes' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @PATH := '' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @OBJECTFLAGS := '0, 8' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @SYMFILEFLAGS := '2048' &lt;/em&gt;)&lt;br/&gt;
FUNCTION NanoSecsSince : DWORD&lt;br/&gt;
VAR_INPUT&lt;br/&gt;
    start: TIME;&lt;br/&gt;
END_VAR&lt;br/&gt;
VAR&lt;br/&gt;
END_VAR&lt;br/&gt;
(&lt;em&gt; @END_DECLARATION := '0' &lt;/em&gt;)&lt;br/&gt;
NanoSecsSince := TIME_TO_DWORD(TIME() - start) * 1000000;&lt;br/&gt;
END_FUNCTION&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; @NESTEDCOMMENTS := 'Yes' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @PATH := '' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @OBJECTFLAGS := '0, 8' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @SYMFILEFLAGS := '2048' &lt;/em&gt;)&lt;br/&gt;
PROGRAM PLC_PRG&lt;br/&gt;
VAR CONSTANT&lt;br/&gt;
    MAXLOOPS: DWORD := 50000;&lt;br/&gt;
END_VAR&lt;br/&gt;
VAR&lt;br/&gt;
    loops: DWORD;&lt;br/&gt;
    state: BYTE;&lt;br/&gt;
    x: DWORD;&lt;br/&gt;
    start: TIME;&lt;br/&gt;
    cycletime: TIME;&lt;br/&gt;
    nanosecs: DWORD;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;my_fb&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DummyFB&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;my_byte&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;my_int&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;INT&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;my_word&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;WORD&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;my_real&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;REAL&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;my_short_str&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s1"&gt;'ab'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;my_long_str&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s1"&gt;'01234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;my_2d_array&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ARRAY&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="n"&gt;OF&lt;/span&gt; &lt;span class="n"&gt;INT&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;my_ton&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;TON&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;(*&lt;/span&gt; &lt;span class="n"&gt;Results&lt;/span&gt; &lt;span class="o"&gt;*)&lt;/span&gt;
&lt;span class="n"&gt;for_loop&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;function_call&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;fb_call&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;int_div&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;float_div&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;str_len_short&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;str_len_long&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;array_index&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;timer_call&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;END_VAR&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; @END_DECLARATION := '0' &lt;/em&gt;)&lt;br/&gt;
start := TIME();&lt;/p&gt;
&lt;p&gt;IF state = 0 THEN&lt;br/&gt;
    loops := MAXLOOPS;&lt;br/&gt;
END_IF&lt;/p&gt;
&lt;p&gt;FOR x := 1 TO loops DO&lt;br/&gt;
    CASE state OF&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c"&gt;(* First 10 cycles are warmup *)&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;for_loop&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c"&gt;(* Measured no-op - for_loop*)&lt;/span&gt;
    &lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c"&gt;(* function_call *)&lt;/span&gt;
    &lt;span class="n"&gt;DummyFunc&lt;/span&gt;&lt;span class="bp"&gt;()&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c"&gt;(* fb_call *)&lt;/span&gt;
    &lt;span class="n"&gt;my_fb&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;invar&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c"&gt;(* int_div *)&lt;/span&gt;
    &lt;span class="n"&gt;my_word&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="mi"&gt;4711&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c"&gt;(* float_div *)&lt;/span&gt;
    &lt;span class="n"&gt;my_real&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="mi"&gt;4711&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c"&gt;(* str_len_short *)&lt;/span&gt;
    &lt;span class="n"&gt;my_int&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;LEN&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_short_str&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="mi"&gt;41&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c"&gt;(* str_len_long *)&lt;/span&gt;
    &lt;span class="n"&gt;my_int&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;LEN&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_long_str&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c"&gt;(* array_index *)&lt;/span&gt;
    &lt;span class="n"&gt;my_int&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;my_2d_array&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;

&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c"&gt;(* timer_call *)&lt;/span&gt;
    &lt;span class="n"&gt;my_ton&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN&lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PT&lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c"&gt;(* stop test *)&lt;/span&gt;
    &lt;span class="n"&gt;loops&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;END_CASE&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;END_FOR&lt;/p&gt;
&lt;p&gt;IF loops &amp;gt; 0 THEN&lt;br/&gt;
    nanosecs := NanoSecsSince(start) / LOOPS - for_loop;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;CASE&lt;/span&gt; &lt;span class="k"&gt;state&lt;/span&gt; &lt;span class="k"&gt;OF&lt;/span&gt;

&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Measured&lt;/span&gt; &lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;op&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;for_loop&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nanosecs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;function_call&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nanosecs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;fb_call&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nanosecs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;int_div&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nanosecs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;float_div&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nanosecs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;str_len_short&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nanosecs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;41&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;str_len_long&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nanosecs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;array_index&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nanosecs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;timer_call&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nanosecs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;END_CASE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;state&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;state&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;END_IF&lt;/p&gt;
&lt;p&gt;cycletime := TIME() - start;&lt;/p&gt;
&lt;p&gt;END_PROGRAM&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; @NESTEDCOMMENTS := 'Yes' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @GLOBAL_VARIABLE_LIST := 'Global_Variables' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @PATH := '' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @OBJECTFLAGS := '0, 8' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @SYMFILEFLAGS := '2048' &lt;/em&gt;)&lt;br/&gt;
VAR_GLOBAL&lt;br/&gt;
END_VAR&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; @OBJECT_END := 'Global_Variables' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @CONNECTIONS := Global_Variables&lt;br/&gt;
FILENAME : ''&lt;br/&gt;
FILETIME : 0&lt;br/&gt;
EXPORT : 0&lt;br/&gt;
NUMOFCONNECTIONS : 0&lt;br/&gt;
&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; @NESTEDCOMMENTS := 'Yes' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @GLOBAL_VARIABLE_LIST := 'Variable_Configuration' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @PATH := '' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @OBJECTFLAGS := '0, 8' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @SYMFILEFLAGS := '2048' &lt;/em&gt;)&lt;br/&gt;
VAR_CONFIG&lt;br/&gt;
END_VAR&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; @OBJECT_END := 'Variable_Configuration' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @CONNECTIONS := Variable_Configuration&lt;br/&gt;
FILENAME : ''&lt;br/&gt;
FILETIME : 0&lt;br/&gt;
EXPORT : 0&lt;br/&gt;
NUMOFCONNECTIONS : 0&lt;br/&gt;
&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;_ALARMCONFIG&lt;br/&gt;
_ALARMCONFIGNEXTTEXTID : 10002&lt;br/&gt;
_ALARMCONFIGFORMATS : 'HH$':$'mm$':$'ss','dd$'-$'MM$'-$'yyyy'&lt;br/&gt;
_ALARMCLASSLIST : 1&lt;br/&gt;
_ALARMCLASSID : 0&lt;br/&gt;
_ALARMCLASSACKTYPE : 0&lt;br/&gt;
_ALARMCLASSNAME : 'DEFAULT'&lt;br/&gt;
_ALARMCLASSDESCRIPTION : ''&lt;br/&gt;
_ALARMCLASSBGCOLORS : 16777215,16777215,16777215&lt;br/&gt;
_ALARMCLASSTEXTCOLORS : 3394560,255,16711680&lt;br/&gt;
_ALARMCLASSBITMAPS : '','',''&lt;br/&gt;
_ALARMACTIONLIST : 0&lt;br/&gt;
(&lt;em&gt; @ALARMCLASSRESETCOLORS := '_ALARMCLASSRESETCOLORS: 33023,16777215' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @ALARMCLASSRESETBITMAP := '_ALARMCLASSRESETBITMAP: $'$'' &lt;/em&gt;)&lt;br/&gt;
_ALARMGROUPLISTNAME : 'System'&lt;br/&gt;
_ALARMGROUPPATH : 'System'&lt;br/&gt;
_ALARMGROUPLIST : 0&lt;br/&gt;
_VISUALSETTINGSFLAGS : 0,0,0,0&lt;br/&gt;
_VISUALSETTINGSFLAGS : '','',''&lt;br/&gt;
_VISUALSETTINGSDYNTEXTFILECOUNT : 0&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; @ALARMCONFIGFLAGS := '_ALARMCONFIGFLAGS: 4' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @ALARMCONFIGGLOBALDB_STR := '_ALARMCONFIGGLOBALDB_STRINGS: $'$',$'$',$'$',$'$'' &lt;/em&gt;)&lt;br/&gt;
(&lt;em&gt; @ALARMCONFIGGLOBALDB_NUM := '_ALARMCONFIGGLOBALDB_NUMBERS: 0,0' &lt;/em&gt;)&lt;br/&gt;
_END_ALARMCONFIG&lt;/p&gt;
&lt;p&gt;LIBRARY&lt;br/&gt;
STANDARD.LIB 4.10.05 11:14:46&lt;br/&gt;
(&lt;em&gt; @LIBRARYSYMFILEINFO := '0' &lt;/em&gt;)&lt;br/&gt;
NumOfPOUs: 21&lt;br/&gt;
CONCAT: 0&lt;br/&gt;
CTD: 0&lt;br/&gt;
CTU: 0&lt;br/&gt;
CTUD: 0&lt;br/&gt;
DELETE: 0&lt;br/&gt;
F_TRIG: 0&lt;br/&gt;
FIND: 0&lt;br/&gt;
INSERT: 0&lt;br/&gt;
LEFT: 0&lt;br/&gt;
LEN: 0&lt;br/&gt;
MID: 0&lt;br/&gt;
R_TRIG: 0&lt;br/&gt;
REPLACE: 0&lt;br/&gt;
RIGHT: 0&lt;br/&gt;
RS: 0&lt;br/&gt;
RTC: 0&lt;br/&gt;
SEMA: 0&lt;br/&gt;
SR: 0&lt;br/&gt;
TOF: 0&lt;br/&gt;
TON: 0&lt;br/&gt;
TP: 0&lt;br/&gt;
NumOfGVLs: 0&lt;br/&gt;
END_LIBRARY&lt;/p&gt;
&lt;p&gt;PLC_CONFIGURATION&lt;br/&gt;
_GLOBAL&lt;br/&gt;
_VERSION: 3&lt;br/&gt;
_AUTOADR: 1&lt;br/&gt;
_CHECKADR: 1&lt;br/&gt;
_SAVECONFIGFILESINPROJECT: 0&lt;br/&gt;
_END_GLOBAL&lt;/p&gt;
&lt;p&gt;_MODULE: '3S'&lt;br/&gt;
_SECTION_NAME: '&lt;strong&gt;not_found&lt;/strong&gt;'&lt;br/&gt;
_INDEX_IN_PARENT: '-1'&lt;br/&gt;
_MODULE_NAME: '&lt;strong&gt;not_found&lt;/strong&gt;'&lt;br/&gt;
_NODE_ID: 0&lt;br/&gt;
_IECIN: %IB0&lt;br/&gt;
_IECOUT: %QB0&lt;br/&gt;
_IECDIAG: %MB0&lt;br/&gt;
_DOWNLOAD: 1&lt;br/&gt;
_EXCLUDEFROMAUTOADR: 0&lt;br/&gt;
_COMMENT: ''&lt;br/&gt;
_END_MODULE&lt;br/&gt;
PLC_END&lt;/p&gt;
&lt;p&gt;RESOURCE&lt;/p&gt;
&lt;p&gt;END_RESOURCE&lt;/p&gt;
&lt;p&gt;_WORKSPACE&lt;br/&gt;
_GLOBALVISUALSETTINGS&lt;br/&gt;
_VISUALSETTINGSFLAGS : 0,0,0,0&lt;br/&gt;
_VISUALSETTINGSFLAGS : '','',''&lt;br/&gt;
_VISUALSETTINGSDYNTEXTFILECOUNT : 0&lt;br/&gt;
_VISUALBITMAPLISTCOUNT : 0&lt;br/&gt;
_END_GLOBALVISUALSETTINGS&lt;br/&gt;
_END_WORKSPACE&lt;/p&gt;
&lt;p&gt;MACRO&lt;br/&gt;
MacroName: 'export'&lt;br/&gt;
MacroMenu: '&amp;amp;export'&lt;br/&gt;
MacroCmd: 'query off ok'&lt;br/&gt;
MacroCmd: 'project export project.exp'&lt;br/&gt;
MacroCmd: ''&lt;br/&gt;
END_MACRO&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Performance test</title><link href="https://forge.codesys.com/forge/talk/Codesys%2520V2.3/thread/5e1290650d/?limit=25#ab25" rel="alternate"/><published>2020-02-27T22:34:44.687000Z</published><updated>2020-02-27T22:34:44.687000Z</updated><author><name>astrand</name><uri>https://forge.codesys.com/u/astrand/</uri></author><id>https://forge.codesys.coma748bb20327fc2a56f2c0bf3b9c1cb7c6596541d</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi! I want to know how long different operations take. To find out, I've written a small performance test which executes different statements multiple times, and then checks how long the execution took. It works quite fine in simulation mode, with 50000 loops of each statement. &lt;/p&gt;
&lt;p&gt;On real hardware, however, it does not: As soon as I go over ~200 loops, Codesys online communication will stop. This was expected, but what is strange is that you cannot go online even after the performance test is done, ie when the cycle time is good again. So either the runtime gets stuck in some strange error state, or it crashes altogether. If anyone has a clue of why this happens, or want to improve on the performance test in general, I'd be happy. Code will follow in comment, since the board does not allow attachements. (Why?)&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>