Daten Senden/Empfangen mit IP_Connect ILC171 -- ILC390

maik.hollmann

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe das Problem das ich zwar eine gültige Verbindung zwischen beiden SPS aufbaue,
aber das Senden bzw Empfangen nicht funktioniert. das IP_USEND.DONE bekomme ich aber
auf der Partner SPS habe ich im Empfangs Array nichts bekommen. Die Daten Strukturen sind
auf beiden SPS identisch. Ich bin so langsam ratlos warum das nicht funktioniert. Kann mir eventuell
jemand weiterhelfen?

Die Datetypen :

Code:
TYPE
    AR_SD_1     : ARRAY[0..99] OF BYTE;
    AR_RD_1     : ARRAY[0..99] OF BYTE;
    AR_Daten_1     : ARRAY[0..199] OF BYTE;

    
    ST_SD_1 : STRUCT
        Index : WORD;
        Data : AR_SD_1;
    END_STRUCT;
    
    ST_RD_1 : STRUCT
        Index : WORD;
        Data : AR_RD_1;
    END_STRUCT;

    SPS_Daten : STRUCT
        Senden : ST_SD_1;
        Empfangen : ST_RD_1;
        Data : AR_Daten_1;
    END_STRUCT;

END_TYPE

Der FB als Export:
Code:
(*@PROPERTIES_EX@
TYPE: POU
LOCALE: 0
IEC_LANGUAGE: ST
PLC_TYPE: independent
PROC_TYPE: independent
*)
(*@KEY@:DESCRIPTION*)

(*@KEY@:END_DESCRIPTION*)
FUNCTION_BLOCK Werkstatt_Test_KSPS

(*Group:Eingänge*)


VAR_INPUT
    Port_Partner :    STRING;(*N/A*)
    IP_Partner :    STRING;(*N/A*)
    Sende_Intervall :    TIME;(*N/A*)
END_VAR


(*Group:Ausgänge*)


VAR_OUTPUT
    Verbindung_IO :    BOOL;
    Error :    BOOL;
END_VAR


(*Group:IN_OUT Variablen*)


VAR_IN_OUT
    Daten :    SPS_Daten;(*N/A*)
END_VAR


(*Group:Lokale Variablen*)


VAR
    strCONNECT_PARTNER_1 :    STRING;(*N/A*)
    xCONNECT_ERROR_1 :    BOOL;(*N/A*)
    xCONNECT_VALID_1 :    BOOL;(*N/A*)
    iCONNECT_ID_1 :    INT;(*N/A*)
    iCONNECT_STATUS_1 :    INT;(*N/A*)
    xURCV_DONE_1 :    BOOL;(*N/A*)
    xURCV_ERROR_1 :    BOOL;(*N/A*)
    iURCV_STATUS_1 :    INT;(*N/A*)
    xUSEND_DONE_1 :    BOOL;(*N/A*)
    xUSEND_ERROR_1 :    BOOL;(*N/A*)
    iUSEND_STATUS_1 :    INT;(*N/A*)
    Senden_Start :    BOOL {HIV,RDT};
    verbinden :    BOOL;
    empfangen :    BOOL;(*test*)
END_VAR


(*Group:FB Instanzen*)


VAR
    IP_CONNECT_1 :    IP_CONNECT;
    IP_USEND_1 :    IP_USEND;
    IP_URCV_1 :    IP_URCV;
    Puls_Send :    TON;(*N/A*)
END_VAR


(*@KEY@: WORKSHEET
NAME: Werkstatt_Test_KSPS
IEC_LANGUAGE: ST
*)
(**)

strCONNECT_PARTNER_1 := '/PASSIVE /PORT='; 
strCONNECT_PARTNER_1 := CONCAT(strCONNECT_PARTNER_1, Port_Partner); 
strCONNECT_PARTNER_1 := CONCAT(strCONNECT_PARTNER_1, ' /IP='); 
strCONNECT_PARTNER_1 := CONCAT(strCONNECT_PARTNER_1, IP_Partner); 

(**)

IP_CONNECT_1.EN_C        := verbinden;
IP_CONNECT_1.PARTNER    := strCONNECT_PARTNER_1;
IP_CONNECT_1();
xCONNECT_VALID_1         := IP_CONNECT_1.VALID;
xCONNECT_ERROR_1         := IP_CONNECT_1.ERROR;
iCONNECT_STATUS_1         := IP_CONNECT_1.STATUS;
iCONNECT_ID_1             := IP_CONNECT_1.ID;


Puls_Send(IN        := Not xUSEND_DONE_1,
PT                    := Sende_Intervall);

If Puls_Send.Q then
    Senden_Start    := True;
End_If;



IP_USEND_1(REQ        := Senden_Start,
ID                    := IP_CONNECT_1.ID,
R_ID                := ' ',
SD_1                := Daten.Senden);
xUSEND_DONE_1         := IP_USEND_1.DONE;
xUSEND_ERROR_1         := IP_USEND_1.ERROR;
iUSEND_STATUS_1     := IP_USEND_1.STATUS;
Daten.Senden         := IP_USEND_1.SD_1;

If xUSEND_DONE_1 then
    Senden_Start := False;
End_If;


IP_URCV_1(EN_R        := xCONNECT_VALID_1,
ID                    := IP_CONNECT_1.ID,
R_ID                := ' ',
RD_1                := Daten.Empfangen);
xURCV_DONE_1        := IP_URCV_1.NDR;
xURCV_ERROR_1        := IP_URCV_1.ERROR;
iURCV_STATUS_1        := IP_URCV_1.STATUS;
Daten.Empfangen        := IP_URCV_1.RD_1; 


Verbindung_IO := xCONNECT_VALID_1;
Error := xCONNECT_ERROR_1;



(*@KEY@: END_WORKSHEET *)
END_FUNCTION_BLOCK

Online Ansicht Bilder:

online_1.jpg
online_2.jpg
online_3.jpg

Vielen Dank schon mal im vorraus.

Maik
 
Hallo Maik,
Die ersten beiden byte im Sende Array stehen für die länge der zu sendenden Daten. Bei dir ist das der Index der den Wert 0 hat uns somit werden auch keine Daten gesendet.
Da du eine Struktur Senden möchtest würde ich in meiner Struktur als erstes ein Int Datentyp nutzen der die länge repräsentiert und danach die Daten.
Gruß Uwe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Uwe,

vielen Dank für die schnelle Antwort :)
jetzt funktioniert es.

Ich hätte da noch eine Frage, wie viele gleichzeitige Aktive Verbindungen mit IP_Connect kann eine RFC470S Steuerung, und gibt es eine möglichkeit das diagnostizieren bzw
zu sehen?
 
Hallo Maik,
Die Technischen Daten kannst Du in den BasicData Anwenderhinweis unter den Steuerungen finden, bei RFC 470S Maximal 32 Verbindungen. siehe Bild
Bei mehr als 32 Verbindungen sollte der Connect FB eine Statusmeldung Anzeigen. siehe Hilfe FB und BildBasicData.GIF
Status.jpg

Gruß Uwe
 
Hi Uwe,

vielen Dank, da befinde ich mich wohl am Maximum. Gibt es eventuell ein statuswort oder so etwas wo ich direkt sehen kann wieviele Verbindungen gerade aufgebaut sind. So könnte ich das eventuell steuern welche Verbindungen aktiv sein dürfen. Mit Profinet könnte ich dann aber mehr SPS‘n Verbinden? Hmm ich überlege mir da mal was.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Maik,
ein Statusword bezüglich der IP Connect Verbindungen gibt es leider nicht aber der RFC 470S erlaubt natürlich mehrere Verbindungen zu PN Device Teilnehmen auf zu bauen, allerdings ist auf die Aktualisierungszeit der EAs zu achten die bei größerer Anzahl an PN Verbindungen sich erhöht.
Da es sich hier wohl um ein größeres Projekt handelt, kannst Du dich auch gerne auf der Hotline melden um weitere Fragen zu klären, da die Anforderungen eventuell auch eine Rolle spielen können und wir halt nicht wissen was genau die Anforderungen sind.

Gruß Uwe
 
Zurück
Oben