Sie sind auf Seite 1von 4

DATA_BLOCK "Send/EmpfDBST1"

VERSION : 0.1

STRUCT
SendDaten_0 : WORD ; //Daten zur Station 2 senden ( zyklischer Zähler aus
OB1)
SendDaten_1 : WORD ;
SendDaten_2 : WORD ;
SendDaten_3 : WORD ;
SendDaten_4 : WORD ;
SendDaten_5 : WORD ;
EmpfDaten_0 : WORD ; //Datenempfang von Station 2
EmpfDaten_1 : WORD ;
EmpfDaten_2 : WORD ;
EmpfDaten_3 : WORD ;
EmpfDaten_4 : WORD ;
EmpfDaten_5 : WORD ;
END_STRUCT ;
BEGIN
SendDaten_0 := W#16#0;
SendDaten_1 := W#16#0;
SendDaten_2 := W#16#0;
SendDaten_3 := W#16#0;
SendDaten_4 := W#16#0;
SendDaten_5 := W#16#0;
EmpfDaten_0 := W#16#0;
EmpfDaten_1 := W#16#0;
EmpfDaten_2 := W#16#0;
EmpfDaten_3 := W#16#0;
EmpfDaten_4 := W#16#0;
EmpfDaten_5 := W#16#0;
END_DATA_BLOCK

FUNCTION "Station 1" : VOID


TITLE =Station 1
//Senden an ein Partnersystem über Prozedur 3964 R mit dem CP 340
VERSION : 0.1

BEGIN
NETWORK
TITLE =
//Zyklische Flankenbildung
//Wenn M 0.1 gleich "1" ist, wird der Anstoßmerker gesetzt.
//Wenn der Send-Auftraf fertig (DONE = 1) oder Error-Parameter gleich "1" ist,
//wird der Send-Anstoßmerker zurükgesetzt.
U "VKE 1 Merker";
S "Anstoß Senden";
U( ;
O "SEND_Done";
O "SEND_Error";
) ;
R "Anstoß Senden";
NOP 0;
NETWORK
TITLE =Senden an Station 2
//Anstoss über Flanke mit M 0.2.
//Baugruppenadresse 256 dezimal. Diese Adresse wird in der Hardwarekonfiguration
//angegeben.
//Quelldaten aus DB4 ab Datenbyte 0
//Anzahl der Daten 12 Byte
//Die Zustandsparameter (Done, Error und Status) stehen für einen Zyklus zur
//Verfügung.
U "Anstoß Senden";
= L 0.0;
BLD 103;
CALL "P_SEND" , "InstanzDB3" (
REQ := L 0.0,
LADDR := 256,
DB_NO := 4,
DBB_NO := 0,
LEN := 12,
DONE := "SEND_Done",
ERROR := "SEND_Error",
STATUS := "SEND_STATUS");
NOP 0;
NETWORK
TITLE =SEND_STATUS sichern
//Bei Error = true wird der SEND_Status gesichert
U "SEND_Error";
SPBNB _001;
L "SEND_STATUS";
T "SEND_Statusspeicher";
_001: NOP 0;
NETWORK
TITLE =Empfang von Station 2
//Zyklischer Empfang mit Anstoss Merker M 0.1
//Baugruppenadresse 256 dezimal. Diese Adresse wird in der Hardwarekonfiguration
//angegeben.
//Empfang der Daten in DB 4 ab Datenbyte 12
//Die Zustandsparameter (Done, Error, Len und Status) stehen für einen Zyklus
zur
//Verfügung.
U "VKE 1 Merker";
= L 0.0;
BLD 103;
CALL "P_RCV" , "InstanzDB2" (
EN_R := L 0.0,
LADDR := 256,
DB_NO := 4,
DBB_NO := 12,
NDR := "RECV_NDR",
ERROR := "RECV_ERROR",
LEN := "RECV_LEN",
STATUS := "RECV_STATUS");
NOP 0;
NETWORK
TITLE =RECV_STATUS sichern
//Bei Error = true wird der RECV_Status gesichert
U "RECV_ERROR";
SPBNB _002;
L "RECV_STATUS";
T "RECV_Statusspeicher";
_002: NOP 0;
END_FUNCTION

DATA_BLOCK "InstanzDB2"
TITLE =
VERSION : 0.0

"P_RCV"
BEGIN
EN_R := FALSE;
R := FALSE;
LADDR := 0;
DB_NO := 0;
DBB_NO := 0;
NDR := FALSE;
ERROR := FALSE;
LEN := 0;
STATUS := W#16#0;
SFCERR := 0;
b_1 := FALSE;
b_2 := FALSE;
b_3 := FALSE;
b_4 := FALSE;
b_5 := FALSE;
b_6 := FALSE;
b_7 := FALSE;
b_8 := FALSE;
b_9 := FALSE;
b_10 := FALSE;
b_11 := FALSE;
b_12 := FALSE;
i_1 := 0;
i_2 := 0;
i_3 := 0;
w_1 := W#16#0;
w_2 := W#16#0;
x_1.w_x1_1 := W#16#0;
x_1.w_x1_2 := W#16#0;
x_1.w_x1_3 := W#16#0;
x_1.d_x1_1 := DW#16#0;
y_1 := B#16#1;
y_2 := B#16#0;
END_DATA_BLOCK

DATA_BLOCK "InstanzDB3"
TITLE =
VERSION : 0.0

"P_SEND"
BEGIN
REQ := FALSE;
R := FALSE;
LADDR := 0;
DB_NO := 0;
DBB_NO := 0;
LEN := 0;
DONE := FALSE;
ERROR := FALSE;
STATUS := W#16#0;
SFCERR := 0;
b_1 := FALSE;
b_2 := FALSE;
b_3 := FALSE;
b_4 := FALSE;
b_5 := FALSE;
b_6 := FALSE;
b_7 := FALSE;
b_8 := FALSE;
b_9 := FALSE;
b_10 := FALSE;
i_1 := 0;
i_2 := 0;
i_3 := 0;
w_1 := W#16#0;
w_2 := W#16#0;
x_1.w_x1_1 := W#16#0;
x_1.w_x1_2 := W#16#0;
x_1.w_x1_3 := W#16#0;
x_1.d_x1_1 := DW#16#0;
y_1 := B#16#1;
y_2 := B#16#0;
END_DATA_BLOCK

ORGANIZATION_BLOCK "Zyklus"
TITLE =
VERSION : 0.1

VAR_TEMP
OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class
1)
OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
OB1_PRIORITY : BYTE ; //1 (Priority of 1 is lowest)
OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
OB1_RESERVED_1 : BYTE ; //Reserved for system
OB1_RESERVED_2 : BYTE ; //Reserved for system
OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =VKE1 Merker
//Bildung eines VKE 1 Merkers der ständig 1 Signal führt.
UN "VKE 1 Merker";
S "VKE 1 Merker";
NETWORK
TITLE =Beispielsendedaten in Datenwort 0 des DB4 ablegen.
//Es wird ein Wert im DB4 im Datenwort 0 zyklisch aufaddiert und wieder im
//Datenwort 0 abgelegt.
//Diese Daten sind nur für Testzwecke. Das Netzwerk kann später gelöscht werden.
L "Send/EmpfDBST1".SendDaten_0;
L 1;
+I ;
T "Send/EmpfDBST1".SendDaten_0;
NOP 0;
NETWORK
TITLE =
//Aufruf des Kommunikationsbausteins
CALL "Station 1" ;
NOP 0;
END_ORGANIZATION_BLOCK

Das könnte Ihnen auch gefallen