Darf's auch gemächlicher sein?
Datenbaustein (hier DB121) mit SFC67 in die eigene CPU kopieren:
ORGANIZATION_BLOCK OB 35
TITLE = "Cyclic Interrupt"
AUTHOR : Werner54
VERSION : 0.1
VAR_TEMP
OB35_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB35_STRT_INF : BYTE ; //16#36 (OB 35 has started)
OB35_PRIORITY : BYTE ; //Priority of OB Execution
OB35_OB_NUMBR : BYTE ; //35 (Organization block 35, OB35)
OB35_RESERVED_1 : BYTE ; //Reserved for system
OB35_RESERVED_2 : BYTE ; //Reserved for system
OB35_PHASE_OFFSET : WORD ; //Phase offset (msec)
OB35_RESERVED_3 : INT ; //Reserved for system
OB35_EXC_FREQ : INT ; //Frequency of execution (msec)
OB35_DATE_TIME : DATE_AND_TIME ; //Date and time OB35 started
SFC67_RET_VAL : INT ; //Rückgabewert aus SFC 67
RET_VALUE : INT ;
SFC67_BUSY : BOOL ; //Empfangen abgeschlossen/läuft
RETURN : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =Kommunikation mit Kommunikationspartner über MPI-Bus
//DB121 wird von DBB0 bis DBB55 übertragen)
//Im Kommunikationspartner sind für die Übertragung KEINE Eingriffe erforderlich!
CALL SFC 67 (//Aufruf des Bausteins X_GET
REQ := TRUE,//Übertrage Daten (Ja/Nein)?
CONT := TRUE,//Verbindung aufrecht erhalten (Ja/Nein)?
DEST_ID := W#16#3,//MPI-Adresse des Kommunikationspartners
VAR_ADDR := P#DB121.DBX0.0 BYTE 56,//Pointer auf die Variablenadresse im Kommunikationspartner
RET_VAL := #SFC67_RET_VAL,//Statusanzeige, negativ wenn ein Fehler auftritt
BUSY := #SFC67_BUSY,//SFC aktiv?
RD := P#DB121.DBX0.0 BYTE 56);//Pointer auf die Adresse, in die die Empfangsdaten geschrieben werden
NETWORK
TITLE =Kommunikation mit Kommunikationspartner beendet ?
//Nach erfolreicher Ausführung der SFC67 enthält #SFC67_RET_VAL die Anzahl der
//richtig übertragenen Bytes
U( ;
L #SFC67_RET_VAL;
L 56; // 38 HEX
<>I ;
) ;
L S5T#200MS;
SE T 0; // Timer 0
NOP 0;
NOP 0;
NOP 0;
U T 0;
= #RETURN;
END_ORGANIZATION_BLOCK