<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Loosing my sockets after Reset Origin???</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/9352065f60/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/9352065f60/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/9352065f60/</id><updated>2020-02-27T14:19:17.145000Z</updated><subtitle>Recent posts to Loosing my sockets after Reset Origin???</subtitle><entry><title>Loosing my sockets after Reset Origin???</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/9352065f60/?limit=25#c5a8" rel="alternate"/><published>2020-02-27T14:19:17.145000Z</published><updated>2020-02-27T14:19:17.145000Z</updated><author><name>timvh</name><uri>https://forge.codesys.com/u/timvh/</uri></author><id>https://forge.codesys.comb8eab5d95b529f8d4d4b1135bea757d95bc6d144</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Perfect !!! Thanks for the info.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Loosing my sockets after Reset Origin???</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/9352065f60/?limit=25#6a2b" rel="alternate"/><published>2020-02-27T14:19:15.855000Z</published><updated>2020-02-27T14:19:15.855000Z</updated><author><name>laythea</name><uri>https://forge.codesys.com/u/laythea/</uri></author><id>https://forge.codesys.com03ea7067faf03527d686cc3e69245ddca84cbaa9</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Cheers Tim,&lt;/p&gt;
&lt;p&gt;It seems we can register against application events with V3 . I've now got my code closing the windows socket on a EVT_StopDone event, and hey-presto no more socket errors!&lt;/p&gt;
&lt;p&gt;For anyone interested in this....&lt;/p&gt;
&lt;p&gt;Add CmpApp and CmpEventMgr libraries.&lt;/p&gt;
&lt;p&gt;Then declare ApplicationEventHandler:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;FUNCTION_BLOCK&lt;/span&gt; &lt;span class="nt"&gt;ApplicationEventHandler&lt;/span&gt; &lt;span class="nt"&gt;IMPLEMENTS&lt;/span&gt; &lt;span class="nt"&gt;ICmpEventCallback&lt;/span&gt;
&lt;span class="nt"&gt;VAR_INPUT&lt;/span&gt;
&lt;span class="nt"&gt;END_VAR&lt;/span&gt;
&lt;span class="nt"&gt;VAR_OUTPUT&lt;/span&gt;
&lt;span class="nt"&gt;END_VAR&lt;/span&gt;
&lt;span class="nt"&gt;VAR&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;res&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;UDINT&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;evt1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;UDINT&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;evt3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;UDINT&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cb1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;UDINT&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cb3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;UDINT&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;END_VAR&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Add 3 methods to this FB:&lt;/p&gt;
&lt;p&gt;EventCallback:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;METHOD&lt;/span&gt; &lt;span class="nv"&gt;EventCallback&lt;/span&gt; : &lt;span class="nv"&gt;UDINT&lt;/span&gt;
&lt;span class="nv"&gt;VAR_INPUT&lt;/span&gt;
   &lt;span class="nv"&gt;pEventParam&lt;/span&gt; : &lt;span class="nv"&gt;POINTER&lt;/span&gt; &lt;span class="nv"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;EventParam&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;END_VAR&lt;/span&gt;
&lt;span class="k"&gt;IF&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;pEventParam&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;EventId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;EVT_StartDone&lt;/span&gt; &lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
   &lt;span class="nv"&gt;ApplicationStart&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="k"&gt;IF&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;pEventParam&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;EventId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;EVT_StopDone&lt;/span&gt; &lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
   &lt;span class="nv"&gt;ApplicationStop&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;/pre&gt;&lt;/div&gt;


&lt;p&gt;There are other events you can subscribe to but I havnt played with any of them... they are listed in CmpApp library. ApplicationStart()/ApplicationStop() are just my own PRG blocks....&lt;/p&gt;
&lt;p&gt;FB_init:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;METHOD&lt;/span&gt; &lt;span class="n"&gt;FB_init&lt;/span&gt;
&lt;span class="n"&gt;VAR_INPUT&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;bInitRetains&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;bInCopyCode&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;END_VAR&lt;/span&gt;
&lt;span class="n"&gt;VAR&lt;/span&gt;
&lt;span class="n"&gt;END_VAR&lt;/span&gt;
&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Register&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="n"&gt;EVT_StartDone&lt;/span&gt;
&lt;span class="n"&gt;evt1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EventOpen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;10002&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;cb1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EventRegisterCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;evt1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Register&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="n"&gt;EVT_StopDone&lt;/span&gt;
&lt;span class="n"&gt;evt3&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EventOpen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;10004&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;cb3&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EventRegisterCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;evt3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;FB_exit:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;METHOD&lt;/span&gt; &lt;span class="n"&gt;FB_exit&lt;/span&gt;
&lt;span class="n"&gt;VAR_INPUT&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;bInCopyCode&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;END_VAR&lt;/span&gt;
&lt;span class="n"&gt;VAR&lt;/span&gt;
&lt;span class="n"&gt;END_VAR&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;register&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="n"&gt;EVT_StartDone&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EventUnregisterCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;evt1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cb1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;EventClose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;evt1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;res&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;register&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="n"&gt;EVT_StopDone&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EventUnregisterCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;evt3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cb3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;EventClose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;evt3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Then make sure you instantiate an instance of the ApplicationEventHandler FB: Eg:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;mApplicationEventHandler&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ApplicationEventHandler&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;This is based on the "Sys Info" example in the FTP folder. I'm not sure why 3S don't document things like this properly....I had to go poking around in the HTML documentation to guess EVT_StopDone = 16#10004 based on the example of EVT_StartDone being equal to 16#10002 and EVT_StopDone being listed 2 places down. Not difficult, just a pain in the butt!! &lt;/p&gt;
&lt;p&gt;Anyway, cheers&lt;br/&gt;
Laythe&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Loosing my sockets after Reset Origin???</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/9352065f60/?limit=25#11ca" rel="alternate"/><published>2020-02-27T14:19:15.468000Z</published><updated>2020-02-27T14:19:15.468000Z</updated><author><name>laythea</name><uri>https://forge.codesys.com/u/laythea/</uri></author><id>https://forge.codesys.com53def76ccef6088fda1350b9bb57371db63825c7</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi Tim, thanks for the reply.&lt;/p&gt;
&lt;p&gt;No, i have been using v3.3 SP2. I have upgraded now and will have a play with the new libraries. I am currently using the SysSocket library and making calls SysSockCreate() etc.&lt;br/&gt;
I will let you know how I get on!&lt;/p&gt;
&lt;p&gt;Thanks again&lt;br/&gt;
Laythe&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Loosing my sockets after Reset Origin???</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/9352065f60/?limit=25#18fb" rel="alternate"/><published>2020-02-27T14:19:15.078000Z</published><updated>2020-02-27T14:19:15.078000Z</updated><author><name>timvh</name><uri>https://forge.codesys.com/u/timvh/</uri></author><id>https://forge.codesys.com00a75ca7619d9ca5ec8048312552b7625f99b027</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;I had the same behavior for serial ports.&lt;br/&gt;
You need to close the port before stopping the application otherwise the port remains opened untill the SP RTE V3 service is stopped.&lt;br/&gt;
In V2.3 there are systems events (Tasks) which can call a POU. E.g. the system even stop or reset could call a POU which can close the port just before the application is actually stopped.&lt;br/&gt;
In the help of V3.4.1.0 is described that this is not yet implemented.&lt;/p&gt;
&lt;p&gt;It might be that the new "network" library 3.4.1.0 in the category "USE CASES" now handles this better.&lt;br/&gt;
Did you use the FB's of this library?&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Loosing my sockets after Reset Origin???</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/9352065f60/?limit=25#a439" rel="alternate"/><published>2020-02-27T14:19:13.924000Z</published><updated>2020-02-27T14:19:13.924000Z</updated><author><name>laythea</name><uri>https://forge.codesys.com/u/laythea/</uri></author><id>https://forge.codesys.com0a262a70f4a73e16b40d51bb8d0182e08bd86e2a</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Hoping someone here has dealt with sockets in v3 of codesys....&lt;/p&gt;
&lt;p&gt;I have some socket handles which i store in a persisant variable GVL.&lt;/p&gt;
&lt;p&gt;My codesys (v3) application opens the socket handles. This is fine for reset warm, cold, on-line edits, download and run etc but I have a problem where if I do a Reset origin, I loose the handles to the sockets (they are initialised back to 0xFFFFF.... without the windows socket handles actually being closed).&lt;/p&gt;
&lt;p&gt;Then when I try and start the application again after the reset origin I get a socket bind() error (The provided address is already in use - ERR_SOCK_ADDRINUSE) when i try to create the socket handles. This is expected because although the codesys application has lost the handle references, the sockets are still open in windows xpe. I have to actually Stop the SP RTE runtime, redownload, and restart the application before I can get my sockets back. When I stop the SP RTE runtime, it is only at this point where windows disposes of the socket handles.&lt;/p&gt;
&lt;p&gt;I guess these are my questions....&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Should the "Reset Origin" not close the Windows handles for me? &lt;br/&gt;
       If it did do this, then I would not get the bind "address already in use" error.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Failing point 1, I need to be able to actually close the socket handles in response to a reset origin command. &lt;br/&gt;
       Is there any way to subscribe to application events such as reset origin, run, stop etc? &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Failing point 2, is there a better way of maintaining socket handles so that I do not have to manually Stop and &lt;br/&gt;
       start/redownload SP RTE to get my sockets back?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Is there any way of closing a socket without having a reference to its handle? Ie. Discovering its handle &lt;br/&gt;
       from the socket address (port, ipaddress etc)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Thanks for any help!&lt;/p&gt;
&lt;p&gt;Laythe&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>