<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to NetVarUDP, 3.5.11.0 Errorhandling</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/a5baaff9f4/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/a5baaff9f4/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Deutsch/thread/a5baaff9f4/</id><updated>2020-02-27T23:54:32.945000Z</updated><subtitle>Recent posts to NetVarUDP, 3.5.11.0 Errorhandling</subtitle><entry><title>NetVarUDP, 3.5.11.0 Errorhandling</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/a5baaff9f4/?limit=25#f9ab" rel="alternate"/><published>2020-02-27T23:54:32.945000Z</published><updated>2020-02-27T23:54:32.945000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.comff9c3d7a05d9e029dcf7138fe0ca019b8307e33d</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;em&gt;Originally created by:&lt;/em&gt; Codesys&amp;gt;&amp;gt;Twincat&lt;/p&gt;
&lt;p&gt;Das Problem ist, dass ich hier die falschen Bausteine verwende. &lt;br/&gt;
Die Bausteine aus der NetVarUDP-Bibliothek werden, wie der Name schon sagt bei Verwendung von globalen Netzwerkvariablen im Hintergrund benutzt. Das ist, nach meinem Verständnis allerdings nur sinnvoll wenn zwei CODESYS-CPUs miteinander kommunizieren sollen.  &lt;/p&gt;
&lt;p&gt;Um eine generische UDP-Kommunikation von einer Netzwerkschnittstelle zu einer anderen einzurichten sollte man die Bibliothek "CAA Net Base Services" verwenden. Dort geht es dann auf gewohnte Weise mit Sockel aufmachen und Handle an Receive und Sendebaustein übergeben.&lt;br/&gt;
Also z.B. so:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;PROGRAM&lt;/span&gt; &lt;span class="nv"&gt;UDP_PRG_2&lt;/span&gt;
&lt;span class="nv"&gt;VAR&lt;/span&gt;
   
   &lt;span class="nv"&gt;Sockel&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;;&lt;/span&gt;
   &lt;span class="nv"&gt;handle&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;;&lt;/span&gt;
   &lt;span class="k"&gt;Send&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;;&lt;/span&gt;
   &lt;span class="nv"&gt;xsend&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;Receive&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;;&lt;/span&gt;
   &lt;span class="nv"&gt;remIP&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="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;sAddr&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.72.247&lt;/span&gt;&lt;span class="s1"&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;localip&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="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;sAddr&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.72.41&lt;/span&gt;&lt;span class="s1"&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_VAR&lt;/span&gt;
&lt;span class="nv"&gt;__________________________________________________________________________________&lt;/span&gt;
&lt;span class="o"&gt;--------------------------------------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="nv"&gt;Sockel&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;xDone&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; , 
   &lt;span class="nv"&gt;xBusy&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; , 
   &lt;span class="nv"&gt;xError&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&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;localip&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;3333&lt;/span&gt;, 
   &lt;span class="nv"&gt;ipMultiCast&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; , 
   &lt;span class="nv"&gt;eError&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; , 
   &lt;span class="nv"&gt;xActive&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&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;handle&lt;/span&gt; &lt;span class="ss"&gt;)&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;NOT&lt;/span&gt; &lt;span class="nv"&gt;Sockel&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;RETURN&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_IF&lt;/span&gt;
&lt;span class="nv"&gt;Receive&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;xDone&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; , 
   &lt;span class="nv"&gt;xBusy&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; , 
   &lt;span class="nv"&gt;xError&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&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;handle&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;200&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;global_variables&lt;/span&gt;.&lt;span class="nv"&gt;BufRcv&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;, 
   &lt;span class="nv"&gt;eError&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; , 
   &lt;span class="nv"&gt;xReady&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; , 
   &lt;span class="nv"&gt;ipFrom&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; , 
   &lt;span class="nv"&gt;uiPortFrom&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; , 
   &lt;span class="nv"&gt;szCount&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;Send&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;xsend&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;1000&lt;/span&gt;, 
   &lt;span class="nv"&gt;xDone&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; , 
   &lt;span class="nv"&gt;xBusy&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; , 
   &lt;span class="nv"&gt;xError&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&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;handle&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;remip&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;3334&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;200&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;Global_Variables&lt;/span&gt;.&lt;span class="nv"&gt;BufSend&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;, 
   &lt;span class="nv"&gt;eError&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   
   &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="k"&gt;send&lt;/span&gt;.&lt;span class="nv"&gt;xdone&lt;/span&gt; &lt;span class="nv"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;send&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;xsend&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;BufSend&lt;/span&gt;.&lt;span class="nv"&gt;Cnt&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;BufSend&lt;/span&gt;.&lt;span class="nv"&gt;Cnt&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;;&lt;/span&gt;
      &lt;span class="k"&gt;RETURN&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;END_IF&lt;/span&gt;
   &lt;span class="nv"&gt;xsend&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;/pre&gt;&lt;/div&gt;


&lt;p&gt;Hier wird allerdings nur jede zweite Ausführung des Tasks gesendet, da der Sendebaustein zurückgesetzt werden muss. (Kann man bestimmt noch besser machen.) Außerdem komplett ohne Errorhandling wie man sieht.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>NetVarUDP, 3.5.11.0 Errorhandling</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/a5baaff9f4/?limit=25#faf0" rel="alternate"/><published>2020-02-27T23:54:28.206000Z</published><updated>2020-02-27T23:54:28.206000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.com3cf218de1e74124c9c8ac05ae6e37cfe09af27ae</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;em&gt;Originally created by:&lt;/em&gt; Codesys&amp;gt;&amp;gt;Twincat&lt;/p&gt;
&lt;p&gt;Hallo,&lt;/p&gt;
&lt;p&gt;ich betreibe erfolgreich eine UDP-Verbindung von der ControlWin SPS zu einer Siemens Cpu mit Hilfe der NetVarUDP-Bibliothek und folgendem Code:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;PROGRAM&lt;/span&gt; &lt;span class="nv"&gt;UDP_PRG&lt;/span&gt;
&lt;span class="nv"&gt;VAR&lt;/span&gt;
   &lt;span class="nv"&gt;HandleSND&lt;/span&gt;:&lt;span class="nv"&gt;SysTypes&lt;/span&gt;.&lt;span class="nv"&gt;RTS_IEC_HANDLE&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;________________________________________________________________________&lt;/span&gt;
&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;HandleSND&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
   &lt;span class="nv"&gt;HandleSND&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;NetVarUdp&lt;/span&gt;.&lt;span class="nv"&gt;UdpOpenSendSocket&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;iPort&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3334&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="nv"&gt;UdpReceiveData&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;
   &lt;span class="nv"&gt;hSocket&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;HandleSND&lt;/span&gt;, 
   &lt;span class="nv"&gt;iPort&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3333&lt;/span&gt;, 
   &lt;span class="nv"&gt;pbyData&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;Global_Variables&lt;/span&gt;.&lt;span class="nv"&gt;bufrcv&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;, 
   &lt;span class="nv"&gt;diDataSize&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;UdpSendData&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;
   &lt;span class="nv"&gt;hSocket&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;HandleSND&lt;/span&gt;, 
   &lt;span class="nv"&gt;iPort&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3334&lt;/span&gt;, 
   &lt;span class="nv"&gt;stIPAddress&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.72.247&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;, 
   &lt;span class="nv"&gt;pbyData&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;Global_Variables&lt;/span&gt;.&lt;span class="nv"&gt;bufsend&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;, 
   &lt;span class="nv"&gt;diDataSize&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&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;p&gt;Das Programm läuft in einer eigenen Task mit 10ms Zykluszeit und funktioniert eigentlich ganz gut. Probleme gibt es wenn der Partner, aus welchen Gründen auch immer, aufhört zu senden. Dann hängt der Task endlos bei UdpReceiveData fest und bei STOP meldet die PLC schließlich Ausnahmefehler weil "Task does not react within timeout switchting to stop! An application reset is neccesary!" (Screenshot)&lt;/p&gt;
&lt;p&gt;In den Code von UdpReceiveData kann man offensichtlich nicht reinschauen und die vorhandene Dokumentation dazu lässt sehr zu wünschen übrig (Screenshot). (Grundsätzlich wären Code-Beispiele für die Verwendung solcher Bausteine sehr hilfreich.)&lt;/p&gt;
&lt;p&gt;Irgendwelche Vorschläge wie ich das abfangen oder grundsätzlich besser programmieren kann, um diesen Fehler in Zukunft zu vermeiden? Die verwendete CODESYS Version ist 3.5SP11 x64&lt;/p&gt;
&lt;p&gt;&lt;img alt="IMG: udpreceivedata_doku.PNG" rel="nofollow" src="https://forum-de.codesys.com//download/file.php?id=1734"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="IMG: udpreceivedata_Ausnahmefehler.PNG" rel="nofollow" src="https://forum-de.codesys.com//download/file.php?id=1733"/&gt;&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>