UDP SysSocket LIB - Problem nach wiederholtem Download

kurt
2007-02-08
2007-02-08
  • kurt - 2007-02-08

    Hallo,

    habe das 3S DemoBeispiel zur (UDP) Socket Kommunikation und teste

    lokal am PC unter XP mit der PLCwinNT vom Dez 06.

    Das läuft auch, aber...

    wenn ich mein Codesys Programm ergänze und bei Download ALLES

    neu runterladen auswähle, dann bekommt der UDP Consumer, in

    diRecvSocket immer -1 und kein funktionierende Verbindung zum Port.

    Analyse hat ergeben, dass SysSockBind immer false liefert.

    Wenn ich die Portnummer verändere, dann funktioniert das Ganze wieder,

    bis zum nächsten kompletten Download.

    Beheben läßt sich das nur wenn ich PLCwinNT mit Shutdown schließe und

    dann erneut starte.

    Den selben Effekt habe ich auch auf einem CE Target - reboot erforderlich.

    Komischerweise gibt es das Problem beim UDPproducer nicht.

    FRAGE:

    wie lässt sich dieser Effekt vermeiden, beheben etc..., sodass nach

    einem komplett Download ohne zumachen der PLCwinNT der Port

    SPS seitig nicht blockiert bleibt.

    kurt

     
  • gravieren - 2007-02-08

    Hi

    Wurde der Socket VOR dem Update geschlossen oder ist der noch verbunden/gebunden.

     
  • kurt - 2007-02-08

    Im Beispiel ist eine ResetCallback programmiert, dabei wird

    IF dwEvent = EVENT_BEFORE_RESET THEN

    der/das ? Socket "geClosed".

    ..aber habe gerade gesehen, dass die in der Taskkonfig unter Events nicht eingeklinkt ist!

    • werde testen..

    kurt

     
  • kurt - 2007-02-08

    Habe geprüft:

    im PLC_PRG steht

    IF NOT bInit THEN
       SysCallbackRegister(INDEXOF(ResetCallback), EVENT_BEFORE_RESET);
       bInit := TRUE;
    END_IF
    

    wird also einmal bei Start ausgeführt.

    in ResetCallback steht (jetzt)

    (* IF dwEvent = EVENT_BEFORE_RESET THEN *)
       IF UDPProducer.diSendSocket <> -1 THEN
          SysSockClose(UDPProducer.diSendSocket);
       END_IF
       IF UDPConsumer.diRecvSocket <> -1 THEN
          SysSockClose(UDPConsumer.diRecvSocket);
       END_IF
    (* END_IF *)
    

    Die dwEvent IF habe ich rausgeworfen.

    Im Taskkonfigurator SystemEreignisse habe ich nun bei:

    STOP

    Before Reset und

    Shutdown - das "Hakerl" auf ON gesetzt und rechts die ResetCallback eingetragen.

    Die ersten Tests zeigen nun keinen Fehler mehr.

    Werde das nun weiter ausfeilen.

    Danke für den Hinweis!

    kurt

     
  • gravieren - 2007-02-08

    Hi

    Dafür ist das Forum da

     

Log in to post a comment.