Kai Schulz
Level-2
- Beiträge
- 139
- Reaktionspunkte
- 3
-> Hier kostenlos registrieren
GELÖST: Zwei CP 343-1 Lean, eine mit „komischem“ Gehabe
Hallo Zusammen,
ich habe zwei CPUs via CP 343-1 Lean und TCP-Verbindung gekoppelt. Sende ich von CPU 1 zu CPU 2 ist alles fein. Umgekehrt dauert es mehrere Minuten, bis die Bits ankommen. Sehr merkwürdig!
Hier ist der Code:
Gruß Kai
Hallo Zusammen,
ich habe zwei CPUs via CP 343-1 Lean und TCP-Verbindung gekoppelt. Sende ich von CPU 1 zu CPU 2 ist alles fein. Umgekehrt dauert es mehrere Minuten, bis die Bits ankommen. Sehr merkwürdig!
Hier ist der Code:
FUNCTION_BLOCK "Kommunikation"
TITLE =Kommunikation
// // Dieser Funktionsbaustein steuert die Kommunikation via Ethernet.
AUTHOR : Schulz
FAMILY : FUNKTION
NAME : COM
VERSION : 1.0
VAR_INPUT
Sendefach : ANY ; //Eingang: "Sendefach [ANY-Pointer]"
Empfangsfach : ANY ; //Eingang: "Empfangsfach [ANY-Pointer]"
Reset : BOOL ; //Eingang: "Reset (TRUE = ein)"
END_VAR
VAR_OUTPUT
ERR_CP_343_Datensendung : BOOL ; //Ausgang: "Fehler CP 343 Datensendung (TRUE = Fehler)"
ERR_CP_343_Datenempfang : BOOL ; //Ausgang: "Fehler CP 343 Datenempfang (TRUE = Fehler)"
END_VAR
VAR
Flanke_positiv_Reset : BOOL ; //Speicher: "Flanke positiv Reset (TRUE = ein)"
Daten_senden_laeuft : BOOL ; //Speicher: "Daten senden läuft (TRUE = ein)"
Status_Daten_senden : WORD ; //Speicher: "Status Daten senden [n]"
Status_Daten_empfangen : WORD ; //Speicher: "Status Daten empfangen [n]"
END_VAR
VAR_TEMP
Logisch_0 : BOOL ; //Tempspeicher: "Logisch 0 (FALSE)"
Logisch_1 : BOOL ; //Tempspeicher: "Logisch 1 (TRUE)"
Impuls_positiv_Reset : BOOL ; //Tempspeicher: "Impuls positiv Reset (TRUE = ein)"
Inhalt_Adressregister_2 : DWORD ; //Tempspeicher: "Inhalt Adressregister 2 [x.y]"
Zeiger_Sendefach : ANY ; //Tempspeicher: "Zeiger Sendefach [ANY-Pointer]
Zeiger_Empfangsfach : ANY ; //Tempspeicher: "Zeiger Empfangsfach [ANY-Pointer]
Daten_senden : STRUCT //Tempspeicher: "Senden"
Start : BOOL ; //Senden: "Start (TRUE = ein)"
Fertigmeldung : BOOL ; //Senden: "Fertigmeldung (TRUE = ein)"
Fehler : BOOL ; //Senden: "Fehler (TRUE = ein)"
Status : WORD ; //Senden: "Status (TRUE = ein)"
END_STRUCT ;
Daten_empfangen : STRUCT //Tempspeicher: "Empfangen"
Fertigmeldung : BOOL ; //Empfangen: "Fertigmeldung (TRUE = ein)"
Fehler : BOOL ; //Empfangen: "Fehler (TRUE = ein)"
Status : WORD ; //Empfangen: "Status [n]"
Laenge : INT ; //Empfangen: "Länge [n]"
END_STRUCT ;
Zwischenspeicher : WORD ; //Tempspeicher: "Zwischenspeicher"
Funktionsstatus : INT ; //Tempspeicher: "Funktionsstatus [n]"
END_VAR
BEGIN
NETWORK
TITLE =Interne Fixmerker initialisieren.
// Fixmerker "Logisch 0" und "Logisch 1" zur internen Verarbeitung.
CLR ;
= #Logisch_0;
SET ;
= #Logisch_1;
NETWORK
TITLE =
TAR2 #Inhalt_Adressregister_2;
LAR1 P##Sendefach;
LAR2 P##Zeiger_Sendefach;
L D [AR1,P#0.0];
T D [AR2,P#0.0];
L W [AR1,P#4.0];
T W [AR2,P#4.0];
L D [AR1,P#6.0];
T D [AR2,P#6.0];
LAR1 P##Empfangsfach;
LAR2 P##Zeiger_Empfangsfach;
L D [AR1,P#0.0];
T D [AR2,P#0.0];
L W [AR1,P#4.0];
T W [AR2,P#4.0];
L D [AR1,P#6.0];
T D [AR2,P#6.0];
LAR2 #Inhalt_Adressregister_2;
NETWORK
TITLE =
U #Reset;
U( ;
U #ERR_CP_343_Datensendung;
O #ERR_CP_343_Datenempfang;
) ;
FP #Flanke_positiv_Reset;
= #Impuls_positiv_Reset;
U #Impuls_positiv_Reset;
R #ERR_CP_343_Datensendung;
R #ERR_CP_343_Datenempfang;
R #Daten_senden_laeuft;
SPBN M040;
L W#16#0;
T #Status_Daten_empfangen;
T #Status_Daten_senden;
NETWORK
TITLE =
M040: U #ERR_CP_343_Datensendung;
O #ERR_CP_343_Datenempfang;
SPBN M050;
L W#16#0;
T #Zwischenspeicher;
CALL "Datenbereich füllen" (
BVAL := #Zwischenspeicher,
RET_VAL := #Funktionsstatus,
BLK := #Zeiger_Empfangsfach);
SPA M120;
NETWORK
TITLE =
M050: UN #Daten_senden_laeuft;
= #Daten_senden.Start;
S #Daten_senden_laeuft;
NETWORK
TITLE =
CALL "TCP-Daten senden" (
ACT := #Daten_senden.Start,
ID := 1,
LADDR := W#16#110,
SEND := #Zeiger_Sendefach,
LEN := 2,
DONE := #Daten_senden.Fertigmeldung,
ERROR := #Daten_senden.Fehler,
STATUS := #Daten_senden.Status);
NETWORK
TITLE =
U #Daten_senden.Fertigmeldung;
U #Daten_senden_laeuft;
R #Daten_senden_laeuft;
NETWORK
TITLE =
UN #Daten_senden.Fertigmeldung;
U #Daten_senden.Fehler;
R #Daten_senden_laeuft;
SPBN M090;
SET ;
S #ERR_CP_343_Datensendung;
L #Daten_senden.Status;
T #Status_Daten_senden;
NETWORK
TITLE =
M090: CALL "TCP-Daten empfangen" (
ID := 1,
LADDR := W#16#110,
RECV := #Zeiger_Empfangsfach,
NDR := #Daten_empfangen.Fertigmeldung,
ERROR := #Daten_empfangen.Fehler,
STATUS := #Daten_empfangen.Status,
LEN := #Daten_empfangen.Laenge);
NETWORK
TITLE =
UN #Daten_empfangen.Fertigmeldung;
U #Daten_empfangen.Fehler;
SPBN M110;
SET ;
S #ERR_CP_343_Datenempfang;
L #Daten_empfangen.Status;
T #Status_Daten_empfangen;
NETWORK
TITLE =
M110: U #Daten_empfangen.Fertigmeldung;
UN #Daten_empfangen.Fehler;
R #Daten_empfangen.Fertigmeldung;
NETWORK
TITLE =Bausteinende...
// Bausteinende...
M120: U #Logisch_1;
SAVE ;
BEB ;
END_FUNCTION_BLOCK
Gruß Kai
Zuletzt bearbeitet: