<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to UPDPeer Sends only the first packet</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/1d773292e6/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/1d773292e6/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/1d773292e6/</id><updated>2020-02-27T14:06:48.522000Z</updated><subtitle>Recent posts to UPDPeer Sends only the first packet</subtitle><entry><title>UPDPeer Sends only the first packet</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/1d773292e6/?limit=25#e391" rel="alternate"/><published>2020-02-27T14:06:48.522000Z</published><updated>2020-02-27T14:06:48.522000Z</updated><author><name>jimsmart</name><uri>https://forge.codesys.com/u/jimsmart/</uri></author><id>https://forge.codesys.com734a16953ca5a0ffa819ae3aab9be7173504fcd5</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;That fixed it. Thank you.&lt;/p&gt;
&lt;p&gt;I knew it was something block-headed like that.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>UPDPeer Sends only the first packet</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/1d773292e6/?limit=25#f5f3" rel="alternate"/><published>2020-02-27T14:06:48.159000Z</published><updated>2020-02-27T14:06:48.159000Z</updated><author><name>Comingback4u</name><uri>https://forge.codesys.com/u/comingback4u/</uri></author><id>https://forge.codesys.com9c0bbbb8f2eeae8a69e7f902bb67f0f76e36ed54</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;To me it looks like you never call the function block UDPsend when you have execute set to false so it never registers the falling trigger. After you set UdpSend.xExecute := FALSE; you then need to call UDPsend(); before you go back into case statement 10 where it gets set back to TRUE.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="k"&gt;Wait&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;send&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;complete&lt;/span&gt; &lt;span class="nv"&gt;or&lt;/span&gt; &lt;span class="nv"&gt;error&lt;/span&gt;
   &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;UdpSend&lt;/span&gt;.&lt;span class="nv"&gt;xDone&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
      &lt;span class="nv"&gt;UdpSend&lt;/span&gt;.&lt;span class="nv"&gt;xExecute&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;UDPsend&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt;&lt;span class="c1"&gt;;  (*********************** This is added *****************************)      &lt;/span&gt;
      &lt;span class="nv"&gt;CASE&lt;/span&gt; &lt;span class="nv"&gt;arrbyInstrumentSendData&lt;/span&gt;[&lt;span class="mi"&gt;3&lt;/span&gt;] &lt;span class="nv"&gt;OF&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Determine&lt;/span&gt; &lt;span class="nv"&gt;receive&lt;/span&gt; &lt;span class="nv"&gt;size&lt;/span&gt; &lt;span class="nv"&gt;based&lt;/span&gt; &lt;span class="nv"&gt;on&lt;/span&gt; &lt;span class="nv"&gt;Opcode&lt;/span&gt; &lt;span class="nv"&gt;request&lt;/span&gt; &lt;span class="nv"&gt;sent&lt;/span&gt;
         &lt;span class="mi"&gt;0&lt;/span&gt;..&lt;span class="mi"&gt;15&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Opcodes&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;#&lt;span class="nv"&gt;F&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;Configuration&lt;/span&gt; &lt;span class="nv"&gt;data&lt;/span&gt;
            &lt;span class="nv"&gt;uiRcvSize&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
         &lt;span class="mi"&gt;16&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Opcode&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#10&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;Stream&lt;/span&gt; &lt;span class="nv"&gt;Measurement&lt;/span&gt; &lt;span class="nv"&gt;Data&lt;/span&gt;
            &lt;span class="nv"&gt;uiRcvSize&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
         &lt;span class="mi"&gt;32&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Opcode&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#20&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;Information&lt;/span&gt;
            &lt;span class="nv"&gt;uiRcvSize&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;END_CASE&lt;/span&gt;
      &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Start&lt;/span&gt; &lt;span class="nv"&gt;listening&lt;/span&gt;
      &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;UDPPeer&lt;/span&gt;.&lt;span class="nv"&gt;xActive&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
         &lt;span class="nv"&gt;UDPReceive&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;
            &lt;span class="nv"&gt;xEnable&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;TRUE&lt;/span&gt;,
            &lt;span class="nv"&gt;hPeer&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;Peer&lt;/span&gt;,
            &lt;span class="nv"&gt;szSize&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;uiRcvSize&lt;/span&gt;, 
            &lt;span class="nv"&gt;pData&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;arrbyInstrumentReceiveData&lt;/span&gt;&lt;span class="ss"&gt;)&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;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;iState&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="c1"&gt;; // Wait for data &lt;/span&gt;
      &lt;span class="nv"&gt;TON_WatchdogReceive&lt;/span&gt;.&lt;span class="nv"&gt;IN&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;; // Start watchdog&lt;/span&gt;
   &lt;span class="nv"&gt;END_IF&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;UdpSend&lt;/span&gt;.&lt;span class="nv"&gt;xError&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
      &lt;span class="nv"&gt;UdpSend&lt;/span&gt;.&lt;span class="nv"&gt;xExecute&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;UDPsend&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt;&lt;span class="c1"&gt;;  (*********************** This is added *****************************)&lt;/span&gt;
      &lt;span class="nv"&gt;iState&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="c1"&gt;; // Error state&lt;/span&gt;
   &lt;span class="nv"&gt;END_IF&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry><entry><title>UPDPeer Sends only the first packet</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/1d773292e6/?limit=25#92f1" rel="alternate"/><published>2020-02-27T14:06:47.697000Z</published><updated>2020-02-27T14:06:47.697000Z</updated><author><name>jimsmart</name><uri>https://forge.codesys.com/u/jimsmart/</uri></author><id>https://forge.codesys.comdca6b4899b2b84d583fdb12ad01d7e60d403b6e8</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hello. I'm having an issue with UDPPeer. The instrument I'm trying to communicate with sends one response packet per request (until I request streaming data, which I haven't gotten that far yet). Using the code below, I can send and receive the first packet, but only the first one. It won't send a 2nd packet. Using Wireshark, I can see that the 2nd packet never leaves the PLC. I noticed that UDPSend.XDone always stays high after the first send. I tried changing up the code to disable and re-enable the UDPPeer connection for every send/receive, but that didn't help.&lt;/p&gt;
&lt;p&gt;Please excuse my primitive coding skills.&lt;/p&gt;
&lt;p&gt;Thanks,&lt;br/&gt;
Jim&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;FUNCTION_BLOCK&lt;/span&gt; &lt;span class="nv"&gt;FB_Instrument&lt;/span&gt;
&lt;span class="nv"&gt;VAR_INPUT&lt;/span&gt;
   &lt;span class="nv"&gt;sInstrumentIP&lt;/span&gt;: &lt;span class="nv"&gt;STRING&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;192.168.12.80&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="c1"&gt;; // IP address of Instrument&lt;/span&gt;
   &lt;span class="nv"&gt;arrbyInstrumentSendData&lt;/span&gt; : &lt;span class="nv"&gt;ARRAY&lt;/span&gt; [&lt;span class="mi"&gt;0&lt;/span&gt;..&lt;span class="mi"&gt;17&lt;/span&gt;] &lt;span class="nv"&gt;OF&lt;/span&gt; &lt;span class="nv"&gt;BYTE&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; [&lt;span class="mi"&gt;16&lt;/span&gt;#&lt;span class="nv"&gt;AB&lt;/span&gt;, &lt;span class="mi"&gt;16&lt;/span&gt;#&lt;span class="nv"&gt;CD&lt;/span&gt;, &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#0&lt;/span&gt;, &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#0&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;]&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;xInstrumentSendNow&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;xInstrumentInit&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;VAR_OUTPUT&lt;/span&gt;
   &lt;span class="nv"&gt;arrbyInstrumentReceiveData&lt;/span&gt; : &lt;span class="nv"&gt;ARRAY&lt;/span&gt; [&lt;span class="mi"&gt;0&lt;/span&gt;..&lt;span class="mi"&gt;87&lt;/span&gt;] &lt;span class="nv"&gt;OF&lt;/span&gt; &lt;span class="nv"&gt;BYTE&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; [&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#0&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;]&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;xInstrumentSndRcvComplete&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;xInstrumentSndRcvError&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;eInstrumentSndRcvErrorCode&lt;/span&gt;: &lt;span class="nv"&gt;STRING&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;iInstrumentPacketsReceived&lt;/span&gt;: &lt;span class="nv"&gt;CAA&lt;/span&gt;.&lt;span class="nv"&gt;COUNT&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;VAR&lt;/span&gt;
   &lt;span class="nv"&gt;iState&lt;/span&gt;: &lt;span class="nv"&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="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;IPAddress&lt;/span&gt; : &lt;span class="nv"&gt;NBS&lt;/span&gt;.&lt;span class="nv"&gt;IP_ADDR&lt;/span&gt;&lt;span class="c1"&gt;; (* IP Address *)&lt;/span&gt;
   &lt;span class="nv"&gt;uiPort&lt;/span&gt; : &lt;span class="nv"&gt;UINT&lt;/span&gt;&lt;span class="c1"&gt;; (* Port No. *)&lt;/span&gt;
   &lt;span class="nv"&gt;ctRecAnswers&lt;/span&gt; : &lt;span class="nv"&gt;CAA&lt;/span&gt;.&lt;span class="nv"&gt;COUNT&lt;/span&gt;&lt;span class="c1"&gt;; (* No. of received messages *)&lt;/span&gt;
   &lt;span class="nv"&gt;UDPPeer&lt;/span&gt; : &lt;span class="nv"&gt;NBS&lt;/span&gt;.&lt;span class="nv"&gt;UDP_Peer&lt;/span&gt;&lt;span class="c1"&gt;; (* FB UDP Peer *)&lt;/span&gt;
   &lt;span class="nv"&gt;XUDPPeer&lt;/span&gt; : &lt;span class="nv"&gt;NBS&lt;/span&gt;.&lt;span class="nv"&gt;UDP_Peer&lt;/span&gt;&lt;span class="c1"&gt;; (* FB UDP Peer *)&lt;/span&gt;
   &lt;span class="nv"&gt;UDPSend&lt;/span&gt; : &lt;span class="nv"&gt;NBS&lt;/span&gt;.&lt;span class="nv"&gt;UDP_Send&lt;/span&gt;&lt;span class="c1"&gt;; (* FB UDP Send *)&lt;/span&gt;
   &lt;span class="nv"&gt;UDPReceive&lt;/span&gt; : &lt;span class="nv"&gt;NBS&lt;/span&gt;.&lt;span class="nv"&gt;UDP_Receive&lt;/span&gt;&lt;span class="c1"&gt;; (* FB UDP Receive *)&lt;/span&gt;
   &lt;span class="nv"&gt;Peer&lt;/span&gt; : &lt;span class="nv"&gt;CAA&lt;/span&gt;.&lt;span class="nv"&gt;HANDLE&lt;/span&gt;&lt;span class="c1"&gt;; (* Handle to the peer connection *)&lt;/span&gt;
   &lt;span class="nv"&gt;xEnable&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;sUDPData&lt;/span&gt; :&lt;span class="nv"&gt;STRING&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;uiRcvSize&lt;/span&gt;: &lt;span class="nv"&gt;UINT&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;iErrorCode&lt;/span&gt; : &lt;span class="nv"&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="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;TON_WatchdogReceive&lt;/span&gt;: &lt;span class="nv"&gt;TON&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_VARIF&lt;/span&gt; &lt;span class="nv"&gt;xInstrumentInit&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt; 
   &lt;span class="nv"&gt;iState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_IF&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;CASE&lt;/span&gt; &lt;span class="nv"&gt;iState&lt;/span&gt; &lt;span class="nv"&gt;OF&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Initialize&lt;/span&gt; &lt;span class="nv"&gt;the&lt;/span&gt; &lt;span class="nv"&gt;connection&lt;/span&gt;
   
   &lt;span class="nv"&gt;IPAddress&lt;/span&gt;.&lt;span class="nv"&gt;sAddr&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;sInstrumentIP&lt;/span&gt;&lt;span class="c1"&gt;; // IP address of Instrument&lt;/span&gt;
   &lt;span class="nv"&gt;uiPort&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;xInstrumentInit&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;TON_WatchdogReceive&lt;/span&gt;.&lt;span class="nv"&gt;PT&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;T&lt;/span&gt;&lt;span class="sc"&gt;#500&lt;/span&gt;&lt;span class="nv"&gt;MS&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;TON_WatchdogReceive&lt;/span&gt;.&lt;span class="nv"&gt;IN&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;xInstrumentSndRcvComplete&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;xInstrumentSndRcvError&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;xEnable&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;; // Used for send case and for UDPPeer function call&lt;/span&gt;
   &lt;span class="nv"&gt;iState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   
&lt;span class="mi"&gt;10&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="k"&gt;Wait&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;Send&lt;/span&gt;
   &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;xEnable&lt;/span&gt; &lt;span class="nv"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;UDPPeer&lt;/span&gt;.&lt;span class="nv"&gt;xActive&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt; 
      &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;xInstrumentSendNow&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
         &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Clear&lt;/span&gt; &lt;span class="nv"&gt;variables&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;new&lt;/span&gt; &lt;span class="k"&gt;send&lt;/span&gt;
         &lt;span class="nv"&gt;xInstrumentSndRcvComplete&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
         &lt;span class="nv"&gt;xInstrumentSndRcvError&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   
         &lt;span class="nv"&gt;UDPsend&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;
            &lt;span class="nv"&gt;xExecute&lt;/span&gt;   :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;TRUE&lt;/span&gt;, 
            &lt;span class="nv"&gt;ipAddr&lt;/span&gt;   :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;IPAddress&lt;/span&gt;,
            &lt;span class="nv"&gt;uiPort&lt;/span&gt;   :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;uiPort&lt;/span&gt;,
            &lt;span class="nv"&gt;hPeer&lt;/span&gt;   :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;UdpPeer&lt;/span&gt;.&lt;span class="nv"&gt;hPeer&lt;/span&gt;,
            &lt;span class="nv"&gt;szSize&lt;/span&gt;   :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;,
            &lt;span class="nv"&gt;pData&lt;/span&gt;   :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;arrbyInstrumentSendData&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;,
            &lt;span class="nv"&gt;udiTimeOut&lt;/span&gt;   :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000000&lt;/span&gt;, &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nv"&gt;usec&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
            &lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
         &lt;span class="nv"&gt;xInstrumentSendNow&lt;/span&gt;   :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
         &lt;span class="nv"&gt;iState&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;ELSE&lt;/span&gt;
         &lt;span class="nv"&gt;iState&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="c1"&gt;; // nothing to send, come back here&lt;/span&gt;
      &lt;span class="nv"&gt;END_IF&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;END_IF&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      
&lt;span class="mi"&gt;15&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="k"&gt;Wait&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;send&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;complete&lt;/span&gt; &lt;span class="nv"&gt;or&lt;/span&gt; &lt;span class="nv"&gt;error&lt;/span&gt;
   &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;UdpSend&lt;/span&gt;.&lt;span class="nv"&gt;xDone&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
      &lt;span class="nv"&gt;UdpSend&lt;/span&gt;.&lt;span class="nv"&gt;xExecute&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;      &lt;/span&gt;
      &lt;span class="nv"&gt;CASE&lt;/span&gt; &lt;span class="nv"&gt;arrbyInstrumentSendData&lt;/span&gt;[&lt;span class="mi"&gt;3&lt;/span&gt;] &lt;span class="nv"&gt;OF&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Determine&lt;/span&gt; &lt;span class="nv"&gt;receive&lt;/span&gt; &lt;span class="nv"&gt;size&lt;/span&gt; &lt;span class="nv"&gt;based&lt;/span&gt; &lt;span class="nv"&gt;on&lt;/span&gt; &lt;span class="nv"&gt;Opcode&lt;/span&gt; &lt;span class="nv"&gt;request&lt;/span&gt; &lt;span class="nv"&gt;sent&lt;/span&gt;
         &lt;span class="mi"&gt;0&lt;/span&gt;..&lt;span class="mi"&gt;15&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Opcodes&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;#&lt;span class="nv"&gt;F&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;Configuration&lt;/span&gt; &lt;span class="nv"&gt;data&lt;/span&gt;
            &lt;span class="nv"&gt;uiRcvSize&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
         &lt;span class="mi"&gt;16&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Opcode&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#10&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;Stream&lt;/span&gt; &lt;span class="nv"&gt;Measurement&lt;/span&gt; &lt;span class="nv"&gt;Data&lt;/span&gt;
            &lt;span class="nv"&gt;uiRcvSize&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
         &lt;span class="mi"&gt;32&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Opcode&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#20&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;Information&lt;/span&gt;
            &lt;span class="nv"&gt;uiRcvSize&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;END_CASE&lt;/span&gt;
      &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Start&lt;/span&gt; &lt;span class="nv"&gt;listening&lt;/span&gt;
      &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;UDPPeer&lt;/span&gt;.&lt;span class="nv"&gt;xActive&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
         &lt;span class="nv"&gt;UDPReceive&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;
            &lt;span class="nv"&gt;xEnable&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;TRUE&lt;/span&gt;,
            &lt;span class="nv"&gt;hPeer&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;Peer&lt;/span&gt;,
            &lt;span class="nv"&gt;szSize&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;uiRcvSize&lt;/span&gt;, 
            &lt;span class="nv"&gt;pData&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;arrbyInstrumentReceiveData&lt;/span&gt;&lt;span class="ss"&gt;)&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;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;iState&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="c1"&gt;; // Wait for data &lt;/span&gt;
      &lt;span class="nv"&gt;TON_WatchdogReceive&lt;/span&gt;.&lt;span class="nv"&gt;IN&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;; // Start watchdog&lt;/span&gt;
   &lt;span class="nv"&gt;END_IF&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;UdpSend&lt;/span&gt;.&lt;span class="nv"&gt;xError&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
      &lt;span class="nv"&gt;UdpSend&lt;/span&gt;.&lt;span class="nv"&gt;xExecute&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;iState&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="c1"&gt;; // Error state&lt;/span&gt;
   &lt;span class="nv"&gt;END_IF&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      
&lt;span class="mi"&gt;20&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="k"&gt;Wait&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;data&lt;/span&gt;
   &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;UDPReceive&lt;/span&gt;.&lt;span class="nv"&gt;xReady&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
      &lt;span class="nv"&gt;UDPReceive&lt;/span&gt;.&lt;span class="nv"&gt;xEnable&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;ctRecAnswers&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;ctRecAnswers&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="c1"&gt;; // Number of UDP calls&lt;/span&gt;
      &lt;span class="nv"&gt;iState&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="c1"&gt;; // Data received, go back to wait to send&lt;/span&gt;
      &lt;span class="nv"&gt;xInstrumentSndRcvComplete&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;TON_WatchdogReceive&lt;/span&gt;.&lt;span class="nv"&gt;IN&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;iInstrumentPacketsReceived&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;ctRecAnswers&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;UDPReceive&lt;/span&gt;.&lt;span class="nv"&gt;xError&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
      &lt;span class="nv"&gt;UDPReceive&lt;/span&gt;.&lt;span class="nv"&gt;xEnable&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;TON_WatchdogReceive&lt;/span&gt;.&lt;span class="nv"&gt;IN&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;iErrorCode&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;UDPReceive&lt;/span&gt;.&lt;span class="nv"&gt;eError&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;iState&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="c1"&gt;; // Error state&lt;/span&gt;
   &lt;span class="nv"&gt;ELSIF&lt;/span&gt; &lt;span class="nv"&gt;TON_WatchdogReceive&lt;/span&gt;.&lt;span class="nv"&gt;Q&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
      &lt;span class="nv"&gt;UDPReceive&lt;/span&gt;.&lt;span class="nv"&gt;xEnable&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;xInstrumentSndRcvComplete&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;TON_WatchdogReceive&lt;/span&gt;.&lt;span class="nv"&gt;IN&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;iState&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="c1"&gt;; // Go back to wait for now. Improve handling later.&lt;/span&gt;
   &lt;span class="nv"&gt;END_IF&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="mi"&gt;30&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Error&lt;/span&gt;
   &lt;span class="nv"&gt;xInstrumentSndRcvError&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;xInstrumentSndRcvComplete&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   
&lt;span class="mi"&gt;40&lt;/span&gt;: &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="k"&gt;Exit&lt;/span&gt;
&lt;span class="nv"&gt;END_CASE&lt;/span&gt;
&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="k"&gt;Call&lt;/span&gt; &lt;span class="nl"&gt;the&lt;/span&gt; &lt;span class="nv"&gt;CAA&lt;/span&gt; &lt;span class="nv"&gt;FUNCTION&lt;/span&gt;
&lt;span class="nv"&gt;UDPPeer&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;xEnable&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;xEnable&lt;/span&gt;, &lt;span class="nv"&gt;ipAddr&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;IPAddress&lt;/span&gt;, &lt;span class="nv"&gt;uiPort&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;uiPort&lt;/span&gt;, &lt;span class="nv"&gt;hPeer&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;Peer&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry></feed>