Beiträge anzeigen

Diese Sektion erlaubt es ihnen alle Beiträge dieses Mitglieds zu sehen. Beachten sie, dass sie nur solche Beiträge sehen können, zu denen sie auch Zugriffsrechte haben.


Themen - phil19

Seiten: [1]
1
Codesys 2 / IP_CONTROL Frage zum Verbindungsabbau
« am: 26. Juli 2020, 09:37:30 »
Hallo,

ich nutze den Baustein IP_CONTROL um über eine Socket Verbindung meine Wärmepumpe (Luxtronic) abzufragen.
Das Protokoll besteht aus:
- Sende Paket 1 an WWP: 00 00 0b bc
- Sende Paket 2 an WWP: 00 00 00 00
- Empfange Daten 820 Bytes mit Werten


Das Programm funktioniert, die Daten in der ersten Ausführung an.
In der Zweiten Ausführung wird nur noch Paket 00 00 00 00 gesendet.
In der dritten Ausführung erhalte ich einen Error im IP_C.C_ERROR
In der vierten Ausführung klappts dann (meistens) wieder
usw. usw.

Ich vermute die State-Machine hat noch einen Fehler, oder ich habe irgendwas übersehen beim sauberen Verbindungsabbau?

Bin für jeden Tipp dankbar!

Das ist der Code:
(* IF the send command is active AND the system is busy, ignore the send request *)
IF xSend THEN
    (* Init status variables *)
       xSend := FALSE;
       xBusy := TRUE;
    iStep := 0;


    S_BUF.SIZE := 0; (* reset send-buffer *)


    IP_C.C_PORT := uiPort;
    IP_C.C_IP := IP4_DECODE('192.168.50.120');
    IP_C.C_MODE := 0;
    IP_C.TIME_RESET := TRUE;
    IP_C.R_OBSERVE := TRUE;
    IP_C.C_ENABLE := TRUE;
    IPClient.TIME_OUT := T#500ms;
END_IF


IF xBusy THEN
   CASE iStep OF
      0: (* SEND Paket 1 *)


        S_BUF.BUFFER[0] := 16#00;
        S_BUF.BUFFER[1] := 16#00;
        S_BUF.BUFFER[2] := 16#0B;
        S_BUF.BUFFER[3] := 16#BC;
        S_BUF.SIZE := 4;


        IPClient(IP_C := IP_C, S_BUF := S_BUF, R_BUF := R_BUF);
        R_BUF.SIZE := 0;
        IF IP_C.C_STATE = 255  THEN
            iStep := 1;
        END_IF


      1: (* SEND Paket 2 *)
        S_BUF.BUFFER[0] := 16#00;
        S_BUF.BUFFER[1] := 16#00;
        S_BUF.BUFFER[2] := 16#00;
        S_BUF.BUFFER[3] := 16#00;
        S_BUF.SIZE := 4;
        IPClient(IP_C := IP_C, S_BUF := S_BUF, R_BUF := R_BUF);
        R_BUF.SIZE := 0;
        IF IP_C.C_STATE = 255 OR IP_C.C_STATE = 1 THEN
            iStep := 2;
        END_IF
        IF IP_C.ERROR  = 0 THEN
            iStep := 10;
        END_IF


    2: (* CONVERT *)
        FB_CONVERT(VAR_IN := R_BUF.BUFFER[0], VAR_OUT => status);
        FB_CONVERT(VAR_IN := R_BUF.BUFFER[18], VAR_OUT => tempAussen);
        FB_CONVERT(VAR_IN := R_BUF.BUFFER[13], VAR_OUT => tempVorlauf);
        FB_CONVERT(VAR_IN := R_BUF.BUFFER[14], VAR_OUT => tempRuecklauf);
        FB_CONVERT(VAR_IN := R_BUF.BUFFER[15], VAR_OUT => tempVorlaufS);
        FB_CONVERT(VAR_IN := R_BUF.BUFFER[20], VAR_OUT => tempWWIst);
        FB_CONVERT(VAR_IN := R_BUF.BUFFER[21], VAR_OUT => tempWWSoll);
        FB_CONVERT(VAR_IN := R_BUF.BUFFER[24], VAR_OUT => tempMKVLIst);
        FB_CONVERT(VAR_IN := R_BUF.BUFFER[25], VAR_OUT => tempMKVLSoll);
        FB_CONVERT(VAR_IN := R_BUF.BUFFER[154], VAR_OUT => kwhHeizung);
        FB_CONVERT(VAR_IN := R_BUF.BUFFER[155], VAR_OUT => kwhWasser);
        iStep := 10;


    10:
        IP_C.C_ENABLE := FALSE;
        IF IP_C.C_STATE = 0 THEN
            xBusy := FALSE;
            iStep := 0;
        END_IF


     END_CASE;
(*
IP_FIFO(FIFO:=IP_C.FIFO,STATE:=IP_STATE,ID:=IP_ID);
IP_C.FIFO:=IP_FIFO.FIFO;
IP_STATE := IP_FIFO.STATE;
IP_ID:=IP_FIFO.ID;


*)
END_IF

Variablen
PROGRAM PRG_LWP_SOCKET
VAR_INPUT
   xSend            : BOOL := FALSE;
END_VAR
VAR
       (* Relevante Werte *)
       (* siehe globale Variablenliste *)
    IP_C                    : IP_C;
    IP_FIFO                : IP_FIFO;
    IPClient                : IP_CONTROL;
    IPClient2                : IP_CONTROL;
    IP_STATE                : BYTE;
    IP_ID                    : BYTE;
    R_BUF                : NETWORK_BUFFER;
    S_BUF                       : NETWORK_BUFFER;
    xBusy                    : BOOL := FALSE;
    iStep                    : UINT := 0;
    FB_CONVERT           : FB_BYTESWAP_DWORD;
    FB_SOCK_ERROR    : SysSockGetLastError;
END_VAR

Seiten: [1]