

(* @PATH := '\/Kommunikation' *)
(* @SYMFILEFLAGS := '59392' *)
PROGRAM Ethernet

VAR
	Empfangszaehler			:DINT;
	Sendezaehler				:DINT;
	SendezaehlerZyklisch	:DINT;
	Ret_Send1				:DINT;
	Ret_Send2				:DINT;

	VerbindungBesteht		:BOOL :=FALSE;

	fdsFdSet					:SOCKET_FD_SET;
	fdsTime					:SOCKET_TIMEVAL;
	SockKomm				:DINT;
	SockadrKomm			:SOCKADDRESS;
	SockadrKommSize		:DINT;

	SockadrKomm2			:SOCKADDRESS;
	SockadrKommSize2		:DINT;
	Catch						:BOOL;
	RC_SysSockConnect		:BOOL :=FALSE;
	RC_SysSockClose		:BOOL;
	RC_SysSockSelect		:DINT;
	RC_SysSockRecv			:DINT;
	RC_SysSockSelect2		:DINT;
	RC_SysSockSelect3		:DINT;
END_VAR
(* @END_DECLARATION := '0' *)
(* Auf Verbi ndung warten *)
IF ListenSock<>0 AND VerbindungBesteht=FALSE THEN
    	fdsFdSet.fd_count 	:=1;
	fdsFdSet.fd_array[0]	:=ListenSock;
	fdsTime.tv_sec		:=0;
	fdsTime.tv_usec		:=100;

	RC_SysSockSelect:=SysSockSelect(diWidth:=SIZEOF(fdsFdSet), fdRead:=ADR(fdsFdSet), fdWrite:=0, fdExcept:=0, ptvTimeout:=ADR(fdsTime));
	(*1=success*, 0=time-out, -1=error*)
	IF  RC_SysSockSelect=1 THEN
		SockadrKommSize := SIZEOF(SockadrKomm);
		SockKomm:=SysSockAccept(diSocket:=ListenSock, pSockAddr:=ADR(SockadrKomm), piSockAddrSize:=ADR(SockadrKommSize));
		IF SockKomm >0 THEN
			VerbindungBesteht:=TRUE;
		END_IF
	END_IF
END_IF


(* Daten empfangen *)
IF VerbindungBesteht=TRUE THEN
	fdsFdSet.fd_count 	:=1;
	fdsFdSet.fd_array[0]    :=SockKomm;
	fdsTime.tv_sec		:=0;
	fdsTime.tv_usec		:=100;

       RC_SysSockSelect3:=SysSockSelect(diWidth:=SIZEOF(fdsFdSet), fdRead:=ADR(fdsFdSet), fdWrite:=0, fdExcept:=0, ptvTimeout:=ADR(fdsTime));
	(* Im Falle von Error: VerbindungBesteht:=FALSE ? *)
	IF  RC_SysSockSelect3=1 THEN
		RC_SysSockRecv:=SysSockRecv(diSocket:=SockKomm, pbyBuffer:=ADR(ByteBufferRX), diBufferSize:=11, diFlags:=0);
		IF  RC_SysSockRecv <> 11 THEN
			Catch:=TRUE;   (* ERROR wenn ungleich 11 Bytes anliegen?*)
		END_IF
		NeueDatenDa:=TRUE;

		(*TRUE=success*)
		RC_SysSockClose:=SysSockClose(diSocket:=SockKomm);
		VerbindungBesteht:=FALSE;
		Empfangszaehler:=Empfangszaehler+1;
	END_IF
END_IF


(* Daten Senden *)
(* IF DatenSenden THEN *)
	SockadrKomm2.sin_addr:=SysSockHtonl(IP_Address);	(*192.168.0.3*)
	SockadrKomm2.sin_family:=2;
	SockadrKomm2.sin_port:=SysSockHtons(Socket_Out_Port);
	SockadrKommSize2 := SIZEOF(SockadrKomm2);

IF NOT RC_SysSockConnect THEN
	RC_SysSockConnect:=SysSockConnect(diSocket:=SendSock, pSockAddr:=ADR(SockadrKomm2), diSockAddrSize:=SockadrKommSize2);
END_IF

	(*TRUE=success*)
	RC_SysSockSelect2:=-1;
	IF RC_SysSockConnect THEN
		fdsFdSet.fd_count 	:=1;
		fdsFdSet.fd_array[0]:=SendSock;
		fdsTime.tv_sec		:=0;
		fdsTime.tv_usec		:=0;
		RC_SysSockSelect2:=SysSockSelect(diWidth:=SIZEOF(fdsFdSet), fdRead:=0, fdWrite:=ADR(fdsFdSet), fdExcept:=0, ptvTimeout:=ADR(fdsTime));
		(*1=success*, 0=time-out, -1=error*)
	END_IF
	Ret_Send1:=-1;
	Ret_Send2:=-1;
	IF RC_SysSockSelect2>0 THEN
		Ret_Send1:=0;
		Ret_Send2:=0;
		IF DatenSenden THEN
			Ret_Send1:=SysSockSend(diSocket:=SendSock, pbyBuffer:=ADR(ByteBufferTX), diBufferSize:=11, diFlags:=0);
		END_IF
		IF ZyklischeDatenSenden THEN
			Ret_Send2:=SysSockSend(diSocket:=SendSock, pbyBuffer:=ADR(ByteBufferTXzyklisch), diBufferSize:=11, diFlags:=0);
		END_IF
	END_IF

	IF Ret_Send1=-1 OR Ret_Send2=-1 THEN
		SysSockClose(diSocket:=SendSock);
	END_IF
	(* Socket 'gracefully closed' (Ret_Send1=0) NOT existing(?) in SPS! *)
	IF Ret_Send1<0 OR Ret_Send2<0 OR SendSock<0 THEN
		SendSock:=SysSockCreate(diAddressFamily:=SOCKET_AF_INET, diType:=SOCKET_STREAM, diProtocol:=SOCKET_IPPROTO_IP);
		RC_SysSockConnect := FALSE;
	END_IF
	IF Ret_Send1>0 THEN
		DatenSenden:=FALSE;
		Sendezaehler:=Sendezaehler+1;
	END_IF
	IF Ret_Send2>0 THEN
		ZyklischeDatenSenden:=FALSE;
		SendezaehlerZyklisch:=SendezaehlerZyklisch+1;
	END_IF

(* END_IF *)


(* Zyklische Daten Senden *)
(*
IF ZyklischeDatenSenden THEN
	SockadrKomm2.sin_addr:=SysSockHtonl(IP_Address);	(*192.168.0.3*)
	SockadrKomm2.sin_family:=2;
	SockadrKomm2.sin_port:=SysSockHtons(Socket_Out_Port);
	SockadrKommSize2 := SIZEOF(SockadrKomm2);
	SysSockConnect(diSocket:=SendSock, pSockAddr:=ADR(SockadrKomm2), diSockAddrSize:=SockadrKommSize2);
	Ret_Send2:=SysSockSend(diSocket:=SendSock, pbyBuffer:=ADR(ByteBufferTXzyklisch), diBufferSize:=11, diFlags:=0);
	IF Ret_Send2=-1 THEN
		SysSockClose(diSocket:=SendSock);
		SendSock:=SysSockCreate(diAddressFamily:=SOCKET_AF_INET, diType:=SOCKET_STREAM, diProtocol:=SOCKET_IPPROTO_IP);
	ELSE
		ZyklischeDatenSenden:=FALSE;
		SendezaehlerZyklisch:=SendezaehlerZyklisch+1;
	END_IF
END_IF
*)
END_PROGRAM


(* @PATH := '\/Kommunikation' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM Protokoll_PDO

VAR
	TX_COB_ID							:WORD;	(* Enthält NODE_ID und FUNCTION_CODE *)
	TX_NODE_ID							:WORD;	(* 1 = Motor drehen, 3 = Motor kippen, 4 = Encoder Kippen 1, 5 = Encoder Kippen 2, 6 = Encoder Drehen *)
	(* Globale konstante Variablen:
	NODE_ID_Mac_Az: BYTE:=1;
	NODE_ID_Mac_Zd: BYTE:=3;
	NODE_ID_SE_Az: BYTE:=16;
	NODE_ID_SE_Zd1: BYTE:=17;
	NODE_ID_SE_Zd2: BYTE:=18;
	*)
	TX_FUNCTION_CODE				:WORD;	(* 3=PDO1 5=PDO2 7=PDO3 *)
	TX1M_LEER1							:BYTE;
	TX1M_LEER2							:BYTE;
	TX1M_STATUS2						:BYTE;		(*EinmaligeFreigabe for GRB-mode*)
	TX1M_STATUS						:BYTE;		(* 0:0 1:Pos-Betrieb, noch nicht im Ziel 2:V-Betrieb 3-5:0 6:<AH 7:0 *)
	TX1M_POSITION						:DWORD;
	TX2M_DIAGNOSENUMMER			:WORD;	(* Diagnosewort vom DKC nur F... und E... *)
	TX2M_RESERVE1					:WORD;
	TX2M_RESERVE2					:WORD;
	TX2M_RESERVE3					:WORD;
	TX3M_LEER1							:BYTE;
	TX3M_LEER2							:BYTE;
	TX3M_LEER3							:BYTE;
	TX3M_STATUS						:BYTE;		(* 0:>=bb 1:MSS ok 2:NotAus ok 3:Überspannung OK 4:1=Manu 0=PC 5:>=AH 6:Status externe Bremse 7:0 *)
	TX3M_LEER4							:DWORD;
	TX2E_POSITION						:DWORD;
	TX2E_GESCHWINDIGKEIT			:WORD;
	TX2E_BESCHLEUNIGUNG			:WORD;

	Zyklus									:INT;
	X_Err_ID_Old							:WORD;
	Z_Err_ID_Old							:WORD;
	TX3M_STATUS_OldX					:BYTE;
	TX3M_STATUS_OldZ					:BYTE;
	TX2E_POSITION_OldX				:DINT;
	TX2E_POSITION_OldY				:DINT;
	TX2E_POSITION_OldZ				:DINT;
	TX2E_GESCHWINDIGKEIT_OldX	:INT;
	TX2E_GESCHWINDIGKEIT_OldY	:INT;
	TX2E_GESCHWINDIGKEIT_OldZ	:INT;
END_VAR
(* @END_DECLARATION := '0' *)
(* In jedem Zyklus kann nur ein bestimmtes PDO gesendet werden *)
(* Jeder Zyklus ist 10-mal pro Sekunde dran .........!!!!Oder100mal???*)
Zyklus:=Zyklus+1;
IF Zyklus>10 THEN
	Zyklus:=1;
END_IF

(* Hier kann zu Testzwecken der Zyklus auf einen festen Wert gesetzt werden *)
(* Dadurch wird erreicht, daß nur ein bestimmtes PDO gesendet wird *)
(*Zyklus:=5;*)

(* TX_NODE_ID:= 1 = Motor drehen
				2 = NA
				3 = Motor kippen
				4 = Encoder Drehen Encoder Kippen 1
				5 =  Encoder Kippen 1
				6 = Encoder Kippen 2 (negativ zu Kippen 1) *)

(* Motor liefert PDO1 10mal je Sekunde ....!!!!!oder 100mal????????*)
(* PDO2 wenn Fehler kommt, 0 wenn geht *)
(* PDO3 wenn Änderung *)
(* Encoder liefert PDO bei Änderung eines Bit's in der Position *)

(*-------------------------------------------------------------------MOTOREN-------------------------------------------------------------------*)

IF Zyklus=1 THEN
	TX_NODE_ID:=NODE_ID_Mac_Az;				(* Motor 1 drehen *)
	TX_FUNCTION_CODE:=3;						(* PDO1 *)
	TX1M_POSITION:=-X_Pos_ist; 					(*X_Pos_ist;           nehmen an, dass die SE schon genau genug.*)
	TX1M_STATUS.1:= (NOT X_in_Standstill OR NOT X_in_AntriebHalt) AND ( (NOT X_PC_VStart AND NOT X_in_Pos) OR X_PC_StartMovement);
	TX1M_STATUS.2:=X_PC_VStart;
	TX1M_STATUS.6:=NOT X_ist_freigegeben;
	TX1M_STATUS2.0:=X_EinmaligeFreigabe;
	ZyklischeDatenSenden:=TRUE;
END_IF

IF Zyklus=2 THEN
	TX_NODE_ID:=NODE_ID_Mac_Zd;				(* Motor 3 kippen *)
	TX_FUNCTION_CODE:=3;						(* PDO1 *)
	TX1M_POSITION:=-Z_Pos_ist;					(*Z_Pos_ist;           nehmen an, dass die SE schon genau genug.*)
	TX1M_STATUS.1:=(NOT Z_in_Standstill OR NOT Z_in_AntriebHalt) AND ((NOT Z_PC_VStart AND NOT Z_in_Pos) OR Z_PC_StartMovement);
	TX1M_STATUS.2:=Z_PC_VStart;
	TX1M_STATUS.6:=NOT Z_ist_freigegeben;
	TX1M_STATUS2.0:=Z_EinmaligeFreigabe;
	ZyklischeDatenSenden:=TRUE;
END_IF

IF Zyklus=3 THEN
	TX_NODE_ID:=NODE_ID_Mac_Az;				(* Motor 1 drehen *)
	TX_FUNCTION_CODE:=5;						(* PDO2 *)
	IF (X_Err_ID_Old<>X_Err_ID) (*AND ((X_Err_ID AND 16#F000) >= 16#E000)*) THEN
		TX2M_DIAGNOSENUMMER:=X_Err_ID;
		ZyklischeDatenSenden:=TRUE;
	END_IF
(*	IF ((X_Err_ID_Old AND 16#F000) >= 16#E000) AND ((X_Err_ID AND 16#F000) < 16#E000) THEN
		TX2M_DIAGNOSENUMMER:=0;
		ZyklischeDatenSenden:=TRUE;
	END_IF											Auch Betriebsstatus wird nun bei Aenderung immer mituebergeben...*)
	X_Err_ID_Old:=X_Err_ID;
END_IF

IF Zyklus=4 THEN
	TX_NODE_ID:=NODE_ID_Mac_Zd;				(* Motor 3 kippen *)
	TX_FUNCTION_CODE:=5;						(* PDO2 *)
	IF (Z_Err_ID_Old<>Z_Err_ID) (*AND ((Z_Err_ID AND 16#F000) >= 16#E000)*) THEN
		TX2M_DIAGNOSENUMMER:=Z_Err_ID;
		ZyklischeDatenSenden:=TRUE;
	END_IF
	(*IF ((Z_Err_ID_Old AND 16#F000) >= 16#E000) AND ((Z_Err_ID AND 16#F000) < 16#E000) THEN
		TX2M_DIAGNOSENUMMER:=0;
		ZyklischeDatenSenden:=TRUE;
	END_IF											Auch Betriebsstatus wird nun bei Aenderung immer mituebergeben...*)
	Z_Err_ID_Old:=Z_Err_ID;
END_IF

IF Zyklus=5 THEN
	TX_NODE_ID:=NODE_ID_Mac_Az;				(* Motor 1 drehen *)
	TX_FUNCTION_CODE:=7;						(* PDO3 *)
	TX3M_STATUS.0:=X_ist_betriebsbereit;
	TX3M_STATUS.1:=Leistung_DKC_IO;
	TX3M_STATUS.2:=Not_Aus_IO;
	TX3M_STATUS.3:=Ueberspannung_DC24V_IO;
	TX3M_STATUS.4:=NOT IN_PC_Betrieb;
	TX3M_STATUS.5:=X_ist_freigegeben;
	TX3M_STATUS.6:=Zusatz_Bremse_Z;
	IF TX3M_STATUS<>TX3M_STATUS_OldX THEN
		ZyklischeDatenSenden:=TRUE;
	END_IF
	TX3M_STATUS_OldX:=TX3M_STATUS;
END_IF

IF Zyklus=6 THEN
	TX_NODE_ID:=NODE_ID_Mac_Zd;				(* Motor 3 kippen *)
	TX_FUNCTION_CODE:=7;						(* PDO3 *)
	TX3M_STATUS.0:=Z_ist_betriebsbereit;
	TX3M_STATUS.1:=Leistung_DKC_IO;
	TX3M_STATUS.2:=Not_Aus_IO;
	TX3M_STATUS.3:=Ueberspannung_DC24V_IO;
	TX3M_STATUS.4:=NOT IN_PC_Betrieb;
	TX3M_STATUS.5:=Z_ist_freigegeben;
	TX3M_STATUS.6:=Zusatz_Bremse_Z;
	IF TX3M_STATUS<>TX3M_STATUS_OldZ THEN
		ZyklischeDatenSenden:=TRUE;
	END_IF
	TX3M_STATUS_OldZ:=TX3M_STATUS;
END_IF

(*-------------------------------------------------------------------ENCODER-------------------------------------------------------------------*)

IF Zyklus=7 THEN
	TX_NODE_ID:=NODE_ID_SE_Az;				(* Encoder 3 drehen *)
	TX_FUNCTION_CODE:=5;						(* PDO2 *)
	TX2E_POSITION:=X_Pos_Geber2;
	TX2E_GESCHWINDIGKEIT:=DINT_TO_INT(1*(TX2E_POSITION-TX2E_POSITION_OldX)/1000);
	TX2E_BESCHLEUNIGUNG:=1*(TX2E_GESCHWINDIGKEIT-TX2E_GESCHWINDIGKEIT_OldX);
	IF (TX2E_POSITION_OldX<>TX2E_POSITION) OR (TX2E_GESCHWINDIGKEIT_OldX<>TX2E_GESCHWINDIGKEIT) THEN
		ZyklischeDatenSenden:=TRUE;
	END_IF
	TX2E_POSITION_OldX:=TX2E_POSITION;
	TX2E_GESCHWINDIGKEIT_OldX:=TX2E_GESCHWINDIGKEIT;
END_IF

IF Zyklus=8 THEN
	TX_NODE_ID:=NODE_ID_SE_Zd1;				(* Encoder 1 kippen *)
	TX_FUNCTION_CODE:=5;						(* PDO2 *)
	TX2E_POSITION:=Z_Pos_Geber2;
	TX2E_GESCHWINDIGKEIT:=DINT_TO_INT(1*(TX2E_POSITION-TX2E_POSITION_OldY)/1000);
	TX2E_BESCHLEUNIGUNG:=1*(TX2E_GESCHWINDIGKEIT-TX2E_GESCHWINDIGKEIT_OldY);
	IF (TX2E_POSITION_OldY<>TX2E_POSITION) OR (TX2E_GESCHWINDIGKEIT_OldY<>TX2E_GESCHWINDIGKEIT) THEN
		ZyklischeDatenSenden:=TRUE;
	END_IF
	TX2E_POSITION_OldY:=TX2E_POSITION;
	TX2E_GESCHWINDIGKEIT_OldY:=TX2E_GESCHWINDIGKEIT;
END_IF

IF Zyklus=9 THEN
	TX_NODE_ID:=NODE_ID_SE_Zd2;				(* Encoder 2 kippen *)
	TX_FUNCTION_CODE:=5;						(* PDO2 *)
	TX2E_POSITION:=-Z_Pos_Geber2;
	TX2E_GESCHWINDIGKEIT:=DINT_TO_INT(1*(TX2E_POSITION-TX2E_POSITION_OldZ)/1000);
	TX2E_BESCHLEUNIGUNG:=1*(TX2E_GESCHWINDIGKEIT-TX2E_GESCHWINDIGKEIT_OldZ);
	IF (TX2E_POSITION_OldZ<>TX2E_POSITION) OR (TX2E_GESCHWINDIGKEIT_OldZ<>TX2E_GESCHWINDIGKEIT) THEN
		ZyklischeDatenSenden:=TRUE;
	END_IF
	TX2E_POSITION_OldZ:=TX2E_POSITION;
	TX2E_GESCHWINDIGKEIT_OldZ:=TX2E_GESCHWINDIGKEIT;
END_IF

IF Zyklus=10 THEN
	TX_NODE_ID:=0;
	TX_FUNCTION_CODE:=0;
END_IF


(*--------------------------------------------------------------------Antworttelegramm zusammensetzen-----------------------------------------------------------*)

(* Einheitlicher Teil *)
TX_COB_ID:=SHL(TX_FUNCTION_CODE,12) OR SHL(TX_NODE_ID,5);
ByteBufferTXzyklisch[0]:=10;							(* 10 Nutzbytes *)
ByteBufferTXzyklisch[1]:=WORD_TO_BYTE(SHR(TX_COB_ID AND 16#FF00,8));
ByteBufferTXzyklisch[2]:=WORD_TO_BYTE(TX_COB_ID AND 16#00FF);

(* spezifischer Teil - Motor PDO 1 *)
IF (TX_NODE_ID=NODE_ID_Mac_Az OR TX_NODE_ID=NODE_ID_Mac_Zd) AND TX_FUNCTION_CODE=3 THEN
	ByteBufferTXzyklisch[3]:=TX1M_LEER1;
	ByteBufferTXzyklisch[4]:=TX1M_LEER2;
	ByteBufferTXzyklisch[5]:=TX1M_STATUS2;
	ByteBufferTXzyklisch[6]:=TX1M_STATUS;
	ByteBufferTXzyklisch[7]:=DWORD_TO_BYTE(TX1M_POSITION AND 16#000000FF);
	ByteBufferTXzyklisch[8]:=DWORD_TO_BYTE(SHR(TX1M_POSITION AND 16#0000FF00,8));
	ByteBufferTXzyklisch[9]:=DWORD_TO_BYTE(SHR(TX1M_POSITION AND 16#00FF0000,16));
	ByteBufferTXzyklisch[10]:=DWORD_TO_BYTE(SHR(TX1M_POSITION AND 16#FF000000,24));
END_IF

(* spezifischer Teil - Motor PDO 2 *)
IF (TX_NODE_ID=NODE_ID_Mac_Az OR TX_NODE_ID=NODE_ID_Mac_Zd) AND TX_FUNCTION_CODE=5 THEN
		ByteBufferTXzyklisch[3]  :=16#00;				(*WORD_TO_BYTE(TX2M_RESERVE2 AND 16#00FF);*)
		ByteBufferTXzyklisch[4]  :=16#00;				(*WORD_TO_BYTE(SHR(TX2M_RESERVE2 AND 16#FF00,8));*)
		ByteBufferTXzyklisch[5]  :=16#00;				(*WORD_TO_BYTE(TX2M_RESERVE3 AND 16#00FF);*)
		ByteBufferTXzyklisch[6]  :=16#FF; 			(*WORD_TO_BYTE(SHR(TX2M_RESERVE3 AND 16#FF00,8));*)
		ByteBufferTXzyklisch[7]  :=0;					(*WORD_TO_BYTE(TX2M_RESERVE1 AND 16#00FF);*)
		ByteBufferTXzyklisch[8]  :=0;					(*WORD_TO_BYTE(SHR(TX2M_RESERVE1 AND 16#FF00,8));*)
		ByteBufferTXzyklisch[9]  :=WORD_TO_BYTE(SHR(TX2M_DIAGNOSENUMMER AND 16#FF00,8));
		ByteBufferTXzyklisch[10]:=WORD_TO_BYTE(TX2M_DIAGNOSENUMMER AND 16#00FF);
END_IF

(* spezifischer Teil - Motor PDO 3 *)
IF (TX_NODE_ID=NODE_ID_Mac_Az OR TX_NODE_ID=NODE_ID_Mac_Zd) AND TX_FUNCTION_CODE=7 THEN
	ByteBufferTXzyklisch[3]:=TX3M_LEER1;
	ByteBufferTXzyklisch[4]:=TX3M_LEER2;
	ByteBufferTXzyklisch[5]:=TX3M_LEER3;
	ByteBufferTXzyklisch[6]:=TX3M_STATUS;
	ByteBufferTXzyklisch[7]:=DWORD_TO_BYTE(TX3M_LEER4 AND 16#000000FF);
	ByteBufferTXzyklisch[8]:=DWORD_TO_BYTE(SHR(TX3M_LEER4 AND 16#0000FF00,8));
	ByteBufferTXzyklisch[9]:=DWORD_TO_BYTE(SHR(TX3M_LEER4 AND 16#00FF0000,16));
	ByteBufferTXzyklisch[10]:=DWORD_TO_BYTE(SHR(TX3M_LEER4 AND 16#FF000000,24));
END_IF

(* spezifischer Teil - Encoder PDO 2 *)
IF (TX_NODE_ID=NODE_ID_SE_Az OR TX_NODE_ID=NODE_ID_SE_Zd1 OR TX_NODE_ID=NODE_ID_SE_Zd2) AND TX_FUNCTION_CODE=5 THEN
	ByteBufferTXzyklisch[3]:=DWORD_TO_BYTE(TX2E_POSITION AND 16#000000FF);
	ByteBufferTXzyklisch[4]:=DWORD_TO_BYTE(SHR(TX2E_POSITION AND 16#0000FF00,8));
	ByteBufferTXzyklisch[5]:=DWORD_TO_BYTE(SHR(TX2E_POSITION AND 16#00FF0000,16));
	ByteBufferTXzyklisch[6]:=DWORD_TO_BYTE(SHR(TX2E_POSITION AND 16#FF000000,24));
	ByteBufferTXzyklisch[7]:=WORD_TO_BYTE(TX2E_GESCHWINDIGKEIT AND 16#00FF);
	ByteBufferTXzyklisch[8]:=WORD_TO_BYTE(SHR(TX2E_GESCHWINDIGKEIT AND 16#FF00,8));
	ByteBufferTXzyklisch[9]:=WORD_TO_BYTE(TX2E_BESCHLEUNIGUNG AND 16#00FF);
	ByteBufferTXzyklisch[10]:=WORD_TO_BYTE(SHR(TX2E_BESCHLEUNIGUNG AND 16#FF00,8));
END_IF
END_PROGRAM


(* @PATH := '\/Kommunikation' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM Protokoll_SDO

VAR
(* Empfangstelegramm *)
	RX_COB_ID					:WORD;	(* Enthält NODE_ID und FUNCTION_CODE *)
	RX_NODE_ID					:WORD;	(* war vorher:  1 = Motor drehen, 3 = Motor kippen, 4 = Encoder Kippen 1, 5 = Encoder Kippen 2, 6 = Encoder Drehen *)
	(* Globale konstante Variablen:
	NODE_ID_Mac_Az: BYTE:=1;
	NODE_ID_Mac_Zd: BYTE:=3;
	NODE_ID_SE_Az: BYTE:=16;
	NODE_ID_SE_Zd1: BYTE:=17;
	NODE_ID_SE_Zd2: BYTE:=18;
	*)
	RX_FUNCTION_CODE		:WORD;
	RX_COMMAND				:BYTE;
	RX_INDEX						:WORD;
	RX_SUBINDEX				:BYTE;
	RX_VALUE					:DWORD;

(* Antworttelegramm *)
	TX_COB_ID					:WORD;	(* Enthält NODE_ID und FUNCTION_CODE *)
	TX_NODE_ID					:WORD;	(* 1 = Motor drehen, 3 = Motor kippen, 16 = Encoder Drehen, 17 = Encoder Kippen 1, 18 = Encoder Kippen 2 *)
	TX_FUNCTION_CODE		:WORD;
	TX_COMMAND				:BYTE;
	TX_INDEX						:WORD;
	TX_SUBINDEX				:BYTE;
	TX_VALUE						:DWORD;

	CompareDwordString4_IDB	:CompareDwordString4;
END_VAR
(* @END_DECLARATION := '0' *)
IF NeueDatenDa THEN
	NeueDatenDa:=FALSE;

	 IF X_PC_AntriebHalt THEN
		X_PC_StartMovement := FALSE;
	END_IF
	 IF Z_PC_AntriebHalt THEN
		Z_PC_StartMovement := FALSE;
	END_IF

	(* Empfangenes Telegramm zerlegen *)
	(* Angabe der Nutzbytes im ersten Byte wird ignoriert *)
	RX_COB_ID				:=256*ByteBufferRX[1] + ByteBufferRX[2];
	RX_FUNCTION_CODE	:=SHR(RX_COB_ID AND 16#F000 , 12);					(*  *)
	RX_NODE_ID				:=SHR(RX_COB_ID AND 16#0FE0 , 5);					(*  *)
	RX_COMMAND			:=ByteBufferRX[3];											(*  *)
	RX_INDEX					:=256*ByteBufferRX[5] + ByteBufferRX[4];				(*  *)
	RX_SUBINDEX			:=ByteBufferRX[6];											(*  *)
	RX_VALUE				:=256*(256*(256*ByteBufferRX[10] + ByteBufferRX[9]) + ByteBufferRX[8]) + ByteBufferRX[7];

       (* Check if the id is valid *)
	IF RX_NODE_ID<>NODE_ID_Mac_Az
			AND RX_NODE_ID<>NODE_ID_Mac_Zd
			AND RX_NODE_ID<>NODE_ID_SE_Az
			AND RX_NODE_ID<>NODE_ID_SE_Zd1
			AND RX_NODE_ID<>NODE_ID_SE_Zd2
		 THEN RETURN;
	END_IF

	IF ((RX_NODE_ID=NODE_ID_Mac_Az OR RX_NODE_ID=NODE_ID_Mac_Zd) AND NOT IN_PC_Betrieb) OR
	    (RX_NODE_ID=NODE_ID_Mac_Az AND (NOT X_ist_betriebsbereit OR NOT X_in_Referenz OR NOT X_ist_freigegeben)) OR
           (RX_NODE_ID=NODE_ID_Mac_Zd AND (NOT Z_ist_betriebsbereit OR NOT Z_in_Referenz OR NOT Z_ist_freigegeben))
		THEN RETURN;
	END_IF

	(* Antworttelegramm mit Daten aus empfangenen Telegramm vorbesetzen *)
	TX_NODE_ID				:=RX_NODE_ID;
	TX_FUNCTION_CODE	:=RX_FUNCTION_CODE;
	TX_COMMAND			:=RX_COMMAND;
	TX_INDEX					:=RX_INDEX;
	TX_SUBINDEX			:=RX_SUBINDEX;
	TX_VALUE					:=RX_VALUE;

	IF RX_FUNCTION_CODE=16#C THEN
		TX_FUNCTION_CODE:=16#B;
	END_IF

	(* Auf ausgewählte Telegramme antworten *)
(*-----------------------------------------------------------------------------------------------------------------ENCODER----------------------------------------------------------*)
	(*IF RX_NODE_ID>=4 AND RX_NODE_ID<=6 THEN	(* Encoder *)      durch konstant globale Variablen ersetzt *)
	IF RX_NODE_ID=NODE_ID_SE_Az
			OR RX_NODE_ID=NODE_ID_SE_Zd1
			OR RX_NODE_ID=NODE_ID_SE_Zd2 THEN

		(* ---------------------------------------------------------------------PC will Antwort haben------------------------------------------------*)
		IF RX_COMMAND=16#40	THEN
			TX_COMMAND:=16#43;							(* 4-Byte-Antwort *)
			CASE RX_INDEX OF
				(* Encder-Typ = Multiturn *)
				16#1000: 	TX_VALUE:=16#00020196;
							DatenSenden:=TRUE;
				(* Anzahl der Striche pro Umdrehung *)
				16#6501: 	TX_VALUE:=ShaftEncoderResolution;
							DatenSenden:=TRUE;
				(* Anzahl der Umdrehungen *)
				16#6502: 	TX_VALUE:=16#00001000;
							DatenSenden:=TRUE;
				(* Hardwarespezifikation *)
				16#6000,16#6500: 	TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* Istposition *)
				16#6004:	TX_VALUE:=16#00000000;
							CASE RX_NODE_ID OF
								NODE_ID_SE_Zd1: TX_VALUE:=Z_Pos_Geber2(*+Z_Offset_Geber2*);
								NODE_ID_SE_Zd2: TX_VALUE:=-Z_Pos_Geber2(*-Z_Offset_Geber2*);
								NODE_ID_SE_Az: TX_VALUE:=X_Pos_Geber2(*+X_Offset_Geber2*);
							END_CASE;
							DatenSenden:=TRUE;
				(* Dummy's *)
				16#100C, 16#100D, 16#100E: 	TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
			END_CASE;
		END_IF

		(* ---------------------------------------------------------------------PC will Wert setzen------------------------------------------------*)
		IF RX_COMMAND=16#23	THEN
			TX_COMMAND:=16#60;							(* Wert gesetzt *)
			CASE RX_INDEX OF
				(* Anzahl der Striche pro Umdrehung *)
				16#6001: 	TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* Anzahl der Umdrehungen *)
				16#6002: 	TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* Nullpunkt setzen *)
				(*
				16#6003:	CASE RX_NODE_ID OF
								NODE_ID_SE_Zd1: Z_Offset_Geber2:=-Z_Pos_Geber2;
								NODE_ID_SE_Zd2: Z_Offset_Geber2:=Z_Pos_Geber2;
								NODE_ID_SE_Az: X_Offset_Geber2:=-X_Pos_Geber2;
							END_CASE;
				*)
							TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* Selbstständig PDO's schicken *)
				16#1802: 	TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* Dummy's *)
				16#100B: 	TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
			END_CASE;
		END_IF
	END_IF

(*-----------------------------------------------------------------------------------------------MOTOREN-------------------------------------------------------------------------------------------*)

(*	IF RX_NODE_ID=1 OR RX_NODE_ID=3 THEN	(* Motor *)      durch konstant globale Variablen ersetzt *)
	IF RX_NODE_ID=NODE_ID_Mac_Az OR RX_NODE_ID=NODE_ID_Mac_Zd THEN

		(* ---------------------------------------------------------------------PC will Antwort haben------------------------------------------------*)
		IF RX_COMMAND=16#40	THEN
			TX_COMMAND:=16#43;							(* 4-Byte-Antwort *)
			CASE RX_INDEX OF
				(* 0=Einmalige Freigabe erteilt, 1=Nicht *)
				16#1000:	IF RX_SUBINDEX=1 THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az: IF X_EinmaligeFreigabe=FALSE THEN TX_VALUE:=16#00000000; ELSE TX_VALUE:=16#00000001; END_IF
									NODE_ID_Mac_Zd: IF Z_EinmaligeFreigabe=FALSE THEN TX_VALUE:=16#00000000; ELSE TX_VALUE:=16#00000001; END_IF
								END_CASE
								DatenSenden:=TRUE;
							END_IF
				(* Letzter Fehler *)
				16#1003:	IF RX_SUBINDEX=2 THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az: 	TX_VALUE:=SHL(WORD_TO_DWORD(X_Err_ID),16) OR 16#FF;
									NODE_ID_Mac_Zd: 	TX_VALUE:=SHL(WORD_TO_DWORD(Z_Err_ID),16) OR 16#FF;
								END_CASE
								DatenSenden:=TRUE;
							END_IF
				(* 1 zurückgeben *)
				16#1004:	IF RX_SUBINDEX=1 THEN
								TX_VALUE:=16#00000001;
								DatenSenden:=TRUE;
							END_IF
				(* 0 zurückgeben *)
							IF RX_SUBINDEX=1 THEN
								TX_VALUE:=16#00000000;
								DatenSenden:=TRUE;
							END_IF
				(* 1 zurückgeben *)
							IF RX_SUBINDEX=2 THEN
								TX_VALUE:=16#00000001;
								DatenSenden:=TRUE;
							END_IF
				(* 0x4080 zurückgeben *)
				16#1005:	TX_VALUE:=16#00004080;
							DatenSenden:=TRUE;
				(* Node-Nr 1 oder 3 zurückgeben *)
				16#100B:	TX_VALUE:=RX_NODE_ID;
							DatenSenden:=TRUE;
				(* Version, Subversion zurückgeben, je ein wort *)
				16#100A:	TX_VALUE:=16#00010002;
							DatenSenden:=TRUE;
				(* 0 zurückgeben *)
				16#100C, 16#100D, 16#100E:	TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* 1 zurückgeben *)
				16#1010:	TX_VALUE:=16#00000001;
							DatenSenden:=TRUE;
				(* 0 zurückgeben *)
				16#1011:	TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* Gesetzte Geschwindigkeit für Pos-Betrieb *)
				16#2002:	CASE RX_NODE_ID OF
								NODE_ID_Mac_Az: TX_VALUE:=X_PC_PosGeschwindigkeit;
								NODE_ID_Mac_Zd: TX_VALUE:=Z_PC_PosGeschwindigkeit;
							END_CASE;
							DatenSenden:=TRUE;
				(* Gesetzte Beschleunigung für nächsten Fahrbefehl (Nur für Pos) *)
				16#2003:	IF RX_SUBINDEX=0 THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az: TX_VALUE:=X_PC_PosBeschleunigung;
									NODE_ID_Mac_Zd: TX_VALUE:=Z_PC_PosBeschleunigung;
								END_CASE;
								DatenSenden:=TRUE;
							END_IF
				(* Gesetzte Verzögerung für nächsten Fahrbefehl (Nur für Pos) *)
							IF RX_SUBINDEX=1 THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az: TX_VALUE:=X_PC_PosVerzoegerung;
									NODE_ID_Mac_Zd: TX_VALUE:=Z_PC_PosVerzoegerung;
								END_CASE;
								DatenSenden:=TRUE;
							END_IF
				(* Einheit der Geschwindigkeit *)
				16#6002:	TX_VALUE:= VelocityResolution; (*16#00000000;*)
							DatenSenden:=TRUE;
				(* Aktuelle Position *)
				16#6004:	IF RX_SUBINDEX=0 THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az: TX_VALUE:=-X_Pos_ist;		(*X_Pos_ist;		nehmen an, SE schon genau genug*)
									NODE_ID_Mac_Zd: TX_VALUE:=-Z_Pos_ist;		(*Z_Pos_ist;		nehmen an, SE schon genau genug*)
								END_CASE;
								DatenSenden:=TRUE;
							END_IF
				(* Anzahl der Striche pro Umdrehung *)
				16#6501: 	TX_VALUE:=RotaryEncoderResolution;
							DatenSenden:=TRUE;
				(* Geschwindigkeitsmaximalwert (den für Testzwecke) ausgeben *)
				(* Vor dem ersten Setzen erhält man V-Max des Motors *)
				16#6502:	CASE RX_NODE_ID OF
								NODE_ID_Mac_Az: TX_VALUE:=X_PC_Maximalgeschwindigkeit;
								NODE_ID_Mac_Zd: TX_VALUE:=Z_PC_Maximalgeschwindigkeit;
							END_CASE;
							DatenSenden:=TRUE;
				(* Zykluszähler ausgeben *)
				16#6508:	TX_VALUE:=Zykluszaehler;
							DatenSenden:=TRUE;
			END_CASE;
		END_IF

		(* ---------------------------------------------------------------------PC will Wert setzen------------------------------------------------*)
		IF RX_COMMAND=16#23	THEN
			TX_COMMAND:=16#60;							(* Wert gesetzt *)
			CASE RX_INDEX OF
				(* Einmalige Freigabe etwas zu machen *)
				16#1000:	IF RX_SUBINDEX=1 AND RX_VALUE=1 THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az: X_EinmaligeFreigabe:=TRUE;
									NODE_ID_Mac_Zd: Z_EinmaligeFreigabe:=TRUE;
								END_CASE
								TX_VALUE:=16#00000000;
								DatenSenden:=TRUE;
							END_IF
				(* Fehler löschen *)
				16#1003:	IF RX_SUBINDEX=0 AND RX_VALUE=0 THEN
								TX_VALUE:=16#00000000;
								DatenSenden:=TRUE;
							END_IF
				(* Set guard time*)
				16#100C: 	TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* Set lifetime factor*)
				16#100D: 	TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* Selbstständig PDO's schicken *)
				16#1800: 	IF RX_SUBINDEX=1 THEN
								TX_VALUE:=16#00000000;
								DatenSenden:=TRUE;
							END_IF
				(* Geschwindigkeit für nächsten Fahrbefehl (Nur für Pos) *)
				(* Wenn noch nie eine gesetzt 1% *)
				16#2002:	CASE RX_NODE_ID OF
								NODE_ID_Mac_Az: X_PC_PosGeschwindigkeit:=RX_VALUE;
								NODE_ID_Mac_Zd: Z_PC_PosGeschwindigkeit:=RX_VALUE;
							END_CASE
							TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* Beschleunigung für nächsten Fahrbefehl (Nur für Pos) 600.000.000 ist Maximum *)
				16#2003:	IF RX_SUBINDEX=0 THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az: X_PC_PosBeschleunigung:=RX_VALUE;
									NODE_ID_Mac_Zd: Z_PC_PosBeschleunigung:=RX_VALUE;
								END_CASE
								TX_VALUE:=16#00000000;
								DatenSenden:=TRUE;
							END_IF
				(* Verzögerung für nächsten Fahrbefehl (Nur für Pos) 600.000.000 ist Maximum *)
							IF RX_SUBINDEX=1 THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az: X_PC_PosVerzoegerung:=RX_VALUE;
									NODE_ID_Mac_Zd: Z_PC_PosVerzoegerung:=RX_VALUE;
								END_CASE
								TX_VALUE:=16#00000000;
								DatenSenden:=TRUE;
							END_IF
				(* Wenn VALUE= 'p' 'o' 't' 's' dann Fahrbefehl abbrechen (Pos und V-Regelung) *)
				16#3000:	CompareDwordString4_IDB(D:=RX_VALUE, Str:='stop');
							IF CompareDwordString4_IDB.Ergebnis THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az:
										(*X_PC_VStart:=FALSE;*)
										X_PC_AntriebHalt:=TRUE;
									NODE_ID_Mac_Zd:
										(*Z_PC_VStart:=FALSE;*)
										Z_PC_AntriebHalt:=TRUE;
								END_CASE
							END_IF
							TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* Wenn VALUE= 't' 'r' 't' 's' dann Geschwindigkeitsregelung starten mit v=0 *)
				(* Wenn einmalige Freigabe nicht da -> Error *)
				(* Wenn VALUE= 'p' 'o' 't' 's' dann Geschwindigkeitsregelung stoppen *)
				16#3006:	IF RX_SUBINDEX=0 THEN
								CompareDwordString4_IDB(D:=RX_VALUE, Str:='stop');
								IF CompareDwordString4_IDB.Ergebnis THEN
									CASE RX_NODE_ID OF
										NODE_ID_Mac_Az:
											X_PC_VStart:=FALSE;
											X_PC_AntriebHalt:=TRUE;
											X_PC_StartMovement:=FALSE; (* maybe not necessary *)
											(*X_PC_PosZiel:=X_Pos_ist;*)
										NODE_ID_Mac_Zd:
											Z_PC_VStart:=FALSE;
											Z_PC_AntriebHalt:=TRUE;
											Z_PC_StartMovement:=FALSE; (* maybe not necessary *)
											(*Z_PC_PosZiel:=Z_Pos_ist;*)
									END_CASE
									DatenSenden:=TRUE;
								END_IF
								CompareDwordString4_IDB(D:=RX_VALUE, Str:='strt');
								IF CompareDwordString4_IDB.Ergebnis THEN
									CASE RX_NODE_ID OF
										NODE_ID_Mac_Az:				(*IF X_EinmaligeFreigabe THEN*)
												X_PC_VStart:=TRUE;
												X_PC_AntriebHalt:=FALSE;
												X_PC_VGeschwindigkeit:=0;
 												(*X_PC_StartMovement:=TRUE;*)
											(*END_IF*)
										NODE_ID_Mac_Zd:				(*IF Z_EinmaligeFreigabe THEN*)
												Z_PC_VStart:=TRUE;
												Z_PC_AntriebHalt:=FALSE;
												Z_PC_VGeschwindigkeit:=0;
												(*Z_PC_StartMovement:=TRUE;	war auskmmentiert*)
											(*END_IF*)
									END_CASE
									DatenSenden:=TRUE;				(* Wenn keine einmalige Freigabe bleibt dieses Bit auf FALSE -> Error-Telegramm *)
								END_IF
								TX_VALUE:=16#00000000;
							END_IF
				(* Geschwindigkeit für Geschwindigkeitsregelung *)
							IF RX_SUBINDEX=1 THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az:
                                                                  IF (X_PC_VGeschwindigkeit>=0 AND RX_VALUE<0) OR (X_PC_VGeschwindigkeit<=0 AND RX_VALUE>0) THEN
											X_PC_StartMovement:=TRUE;
										END_IF
										X_PC_VGeschwindigkeit:=RX_VALUE;
									NODE_ID_Mac_Zd:
                                                                  IF (Z_PC_VGeschwindigkeit>=0 AND RX_VALUE<0) OR (Z_PC_VGeschwindigkeit<=0 AND RX_VALUE>0) THEN
											Z_PC_StartMovement:=TRUE;
										END_IF
										Z_PC_VGeschwindigkeit:=RX_VALUE;
										(*Z_PC_StartMovement:=TRUE;	 Kommentar ersatzweise fuer den oben*)
								END_CASE
								TX_VALUE:=16#00000000;
								DatenSenden:=TRUE;
							END_IF
				(* absolute Position & Fahrbefehl starten (Nur für Pos) *)
				(* Wenn einmalige Freigabe nicht da -> Error *)
				16#6004:	(*IF RX_SUBINDEX=0 THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az:
                                                       		IF X_EinmaligeFreigabe THEN
											X_PC_PosZiel:=RX_VALUE;
											X_PC_AntriebHalt:=FALSE;
											X_PC_StartMovement:=TRUE;
											TX_VALUE:=16#00000000;
										ELSE
											TX_VALUE:=16#00000001;
										END_IF
										DatenSenden:=TRUE;			(* Wenn keine einmalige Freigabe bleibt dieses Bit auf FALSE -> Error-Telegramm *)
									NODE_ID_Mac_Zd:
										IF Z_EinmaligeFreigabe THEN
											Z_PC_PosZiel:=RX_VALUE;
											Z_PC_AntriebHalt:=FALSE;
											Z_PC_StartMovement:=TRUE;
											TX_VALUE:=16#00000000;
										ELSE
											TX_VALUE:=16#00000001;
										END_IF
										DatenSenden:=TRUE;			(* Wenn keine einmalige Freigabe bleibt dieses Bit auf FALSE -> Error-Telegramm *)
								END_CASE
							END_IF*)
				(* relative Position & Fahrbefehl starten (Nur für Pos) *)
				(* Wenn einmalige Freigabe nicht da -> Error *)
							IF RX_SUBINDEX=1 THEN
								CASE RX_NODE_ID OF
									NODE_ID_Mac_Az:
										IF X_EinmaligeFreigabe THEN
											X_PC_PosZiel:=-REAL_TO_DWORD(DWORD_TO_REAL(RX_VALUE)*RotationalPositionResolution/RotaryEncoderResolution/ArbitraryMACFactor);
											X_PC_AntriebHalt:=FALSE;
											X_PC_StartMovement:=TRUE;
											TX_VALUE:=16#00000000;
										ELSE
											TX_VALUE:=16#00000001;
										END_IF
										DatenSenden:=TRUE;			(* Wenn keine einmalige Freigabe bleibt dieses Bit auf FALSE -> Error-Telegramm *)
									NODE_ID_Mac_Zd:
										IF Z_EinmaligeFreigabe THEN
											Z_PC_PosZiel:=-REAL_TO_DWORD(DWORD_TO_REAL(RX_VALUE)*RotationalPositionResolution/RotaryEncoderResolution/ArbitraryMACFactor);
											Z_PC_AntriebHalt:=FALSE;
											Z_PC_StartMovement:=TRUE;
											TX_VALUE:=16#00000000;
										ELSE
											TX_VALUE:=16#00000001;
										END_IF
										DatenSenden:=TRUE;			(* Wenn keine einmalige Freigabe bleibt dieses Bit auf FALSE -> Error-Telegramm *)
								END_CASE
							END_IF
				(* Maximale Geschwindigkeit begrenzen (für Beides) (Nur zu Testzwecken) *)
				16#6502:	CASE RX_NODE_ID OF
								NODE_ID_Mac_Az: X_PC_Maximalgeschwindigkeit:=RX_VALUE;
								NODE_ID_Mac_Zd: Z_PC_Maximalgeschwindigkeit:=RX_VALUE;
							END_CASE
							TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
				(* Dummy's *)
				16#6002,16#6200,16#6500:
							TX_VALUE:=16#00000000;
							DatenSenden:=TRUE;
			END_CASE;
		END_IF
	END_IF


(*-----------------------------------------------------------------------------------------------Auf nicht erkannte Telegramme mit Error antworten------------------------------------------------*)
	IF (NOT DatenSenden) AND RX_FUNCTION_CODE<>16#0 THEN
		TX_COMMAND:=16#80;	(* ERROR *)
		TX_VALUE:=0;
		DatenSenden:=TRUE;
	END_IF


(*-----------------------------------------------------------------------------------------------Antworttelegramm zusammensetzen--------------------------------------------------------------------*)
	TX_COB_ID:=SHL(TX_FUNCTION_CODE,12) OR SHL(TX_NODE_ID,5);
	ByteBufferTX[0]:=10;													(* 10 Nutzbytes *)
	ByteBufferTX[1]:=WORD_TO_BYTE(SHR(TX_COB_ID AND 16#FF00,8));
	ByteBufferTX[2]:=WORD_TO_BYTE(TX_COB_ID AND 16#00FF);
	ByteBufferTX[3]:=TX_COMMAND;
	ByteBufferTX[4]:=WORD_TO_BYTE(TX_INDEX AND 16#00FF);
	ByteBufferTX[5]:=WORD_TO_BYTE(SHR(TX_INDEX AND 16#FF00,8));
	ByteBufferTX[6]:=TX_SUBINDEX;
	ByteBufferTX[7]:=DWORD_TO_BYTE(TX_VALUE AND 16#000000FF);
	ByteBufferTX[8]:=DWORD_TO_BYTE(SHR(TX_VALUE AND 16#0000FF00,8));
	ByteBufferTX[9]:=DWORD_TO_BYTE(SHR(TX_VALUE AND 16#00FF0000,16));
	ByteBufferTX[10]:=DWORD_TO_BYTE(SHR(TX_VALUE AND 16#FF000000,24));
END_IF


(*-----------------------------------------------------------------------------------------------Zusatzbedingungen-------------------------------------------------------------------------------------------*)
IF X_PC_Maximalgeschwindigkeit<X_PC_PosGeschwindigkeit THEN
	X_PC_PosGeschwindigkeit:=X_PC_Maximalgeschwindigkeit;
END_IF

IF Z_PC_Maximalgeschwindigkeit<Z_PC_PosGeschwindigkeit THEN
	Z_PC_PosGeschwindigkeit:=Z_PC_Maximalgeschwindigkeit;
END_IF

IF X_PC_Maximalgeschwindigkeit<X_PC_VGeschwindigkeit THEN
	X_PC_VGeschwindigkeit:=X_PC_Maximalgeschwindigkeit;
END_IF

IF Z_PC_Maximalgeschwindigkeit<Z_PC_VGeschwindigkeit THEN
Z_PC_VGeschwindigkeit:=Z_PC_Maximalgeschwindigkeit;
END_IF

IF NOT X_EinmaligeFreigabe THEN
	X_PC_VStart:=FALSE;
	X_PC_AntriebHalt:=TRUE;
END_IF

IF NOT Z_EinmaligeFreigabe THEN
	Z_PC_VStart:=FALSE;
	Z_PC_AntriebHalt:=TRUE;
END_IF
END_PROGRAM


(* @PATH := '\/Kommunikation' *)
(* @SYMFILEFLAGS := '59392' *)
PROGRAM Start

VAR_INPUT
	dwEvent		:INT;
	dwFilter		:INT;
	dwOwner		:INT;
END_VAR

VAR_OUTPUT
	start			:DWORD;
END_VAR

VAR
	sockadr		:SOCKADDRESS;
	Dummy		:BOOL;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 9
_NETWORK

_COMMENT
Server-Socket (PC->SPS) anlegen und öffnen
_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
sockadr.sin_addr
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
2
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
sockadr.sin_family
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTION
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
Socket_In_Port
_EXPRESSION
_POSITIV
SysSockHtons
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
sockadr.sin_port
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTION
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
SOCKET_AF_INET
_OPERAND
_EXPRESSION
_POSITIV
SOCKET_STREAM
_OPERAND
_EXPRESSION
_POSITIV
SOCKET_IPPROTO_IP
_EXPRESSION
_POSITIV
SysSockCreate
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ListenSock
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTION
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
ListenSock
_OPERATOR
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
sockadr
_EXPRESSION
_POSITIV
ADR
_OPERATOR
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
sockadr
_EXPRESSION
_POSITIV
SIZEOF
_EXPRESSION
_POSITIV
SysSockBind
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTION
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
ListenSock
_OPERAND
_EXPRESSION
_POSITIV
10
_EXPRESSION
_POSITIV
SysSockListen
_NETWORK

_COMMENT
Diverse Werte initialisieren
_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
PC_V_max_START
_EXPRESSION
_POSITIV
_OUTPUTS : 2
_OUTPUT
_POSITIV
_NO_SET
X_PC_Maximalgeschwindigkeit
_OUTPUT
_POSITIV
_NO_SET
Z_PC_Maximalgeschwindigkeit
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
0
_EXPRESSION
_POSITIV
_OUTPUTS : 2
_OUTPUT
_POSITIV
_NO_SET
X_PC_PosGeschwindigkeit
_OUTPUT
_POSITIV
_NO_SET
Z_PC_PosGeschwindigkeit
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
0
_EXPRESSION
_POSITIV
_OUTPUTS : 2
_OUTPUT
_POSITIV
_NO_SET
X_PC_VGeschwindigkeit
_OUTPUT
_POSITIV
_NO_SET
Z_PC_VGeschwindigkeit

END_PROGRAM


(* @PATH := '\/Kommunikation' *)
(* @SYMFILEFLAGS := '59392' *)
PROGRAM Stop

VAR_INPUT
	dwEvent		:INT;
	dwFilter		:INT;
	dwOwner		:INT;
END_VAR

VAR_OUTPUT
	Stop			:DWORD;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 2
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTION
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
ListenSock
_EXPRESSION
_POSITIV
SysSockClose
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTION
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
SendSock
_EXPRESSION
_POSITIV
SysSockClose

END_PROGRAM


(* @PATH := '\/Unterprogramme' *)
(* @SYMFILEFLAGS := '2048' *)
FUNCTION_BLOCK AccMACStoDKC

VAR_INPUT
	MACS		:DWORD;
END_VAR

VAR_OUTPUT
	DKC		:DWORD;
END_VAR
(* @END_DECLARATION := '0' *)
(*DKC:=REAL_TO_DWORD(DWORD_TO_REAL(MACS)*PI/MaximumVelocity+0.5);*)
DKC:=REAL_TO_DWORD(DWORD_TO_REAL(MACS)*PI/MaximumVelocity*ArbitraryMACFactor+0.5);
END_FUNCTION_BLOCK


(* @PATH := '\/Unterprogramme' *)
(* @SYMFILEFLAGS := '2048' *)
FUNCTION_BLOCK  AchsenSteuerung

VAR_INPUT
	Betriebsart_FB_ok			:BOOL;
	IN_Zusatz_Bremse_Z		:BOOL;
	Leistung_Ein					:BOOL;
	Tipp_pos						:BOOL;
	Tipp_neg						:BOOL;
	PC_VStart						:BOOL;
	freigegeben					:BOOL;
	Pos_ist						:DINT;
	PC_PosZiel					:DINT;
	PC_PosGeschwindigkeit		:DINT;
	PC_VGeschwindigkeit 		:DINT;
	PC_PosBeschleunigung		:DINT;
	PC_PosVerzoegerung		:DINT;
	HandBeschl					:DINT;
END_VAR

VAR_OUTPUT
	Jog_pos						:BOOL;
	Jog_neg						:BOOL;
	Start							:BOOL;
	Pos_soll						:DINT;
	Vel_soll						:DINT;
	Beschleunigung_High		:WORD;
	Bescheunigung_Low			:WORD;
END_VAR

VAR
	Time_Enable					:TON;
	AccMACStoDKC				:AccMACStoDKC;
	Beschleunigung				:DINT;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 8
_NETWORK

_COMMENT
Achse Jog Pos
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Tipp_pos
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_FB_ok
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Jog_pos
_NETWORK

_COMMENT
Achse Jog Neg
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Tipp_neg
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_FB_ok
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Jog_neg
_NETWORK

_COMMENT
Achse PC-Betrieb
_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_PC_ok
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Start
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_PC_ok
_OPERAND
_EXPRESSION
_POSITIV
freigegeben
_EXPRESSION
_POSITIV
AND
_OPERAND
_EXPRESSION
_POSITIV
Pos_Ist
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
PC_VStart
_OPERAND
_EXPRESSION
_POSITIV
PC_PosZiel
_OPERATOR
_BOX_EXPR : 3
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
PC_VGeschwindigkeit
_OPERAND
_EXPRESSION
_POSITIV
0
_EXPRESSION
_POSITIV
GT
_OPERAND
_EXPRESSION
_POSITIV
-90000
_OPERAND
_EXPRESSION
_POSITIV
90000
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Pos_soll
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
PC_VStart
_OPERAND
_EXPRESSION
_POSITIV
PC_PosGeschwindigkeit
_OPERAND
_EXPRESSION
_POSITIV
PC_VGeschwindigkeit
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Vel_soll
_NETWORK

_COMMENT
Beschleunigung wird auch fuer Tipp-Betrieb gesetzt
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
IN_FB_Betrieb
_FUNCTIONBLOCK
AccMACStoDKC
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 3
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Pos_ist
_OPERAND
_EXPRESSION
_POSITIV
Pos_soll
_EXPRESSION
_POSITIV
SUB
_EXPRESSION
_POSITIV
ABS
_OPERAND
_EXPRESSION
_POSITIV
-1000
_EXPRESSION
_POSITIV
LT
_OPERAND
_EXPRESSION
_POSITIV
PC_PosBeschleunigung
_OPERAND
_EXPRESSION
_POSITIV
PC_PosVerzoegerung
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
AccMACStoDKC
_OUTPUTS : 0
_OPERAND
_EXPRESSION
_POSITIV
HandBeschl
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Beschleunigung
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
Beschleunigung
_EXPRESSION
_POSITIV
DINT_TO_DWORD
_OPERAND
_EXPRESSION
_POSITIV
16#FFFF
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
DWORD_TO_WORD
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Bescheunigung_Low
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
Beschleunigung
_EXPRESSION
_POSITIV
DINT_TO_DWORD
_OPERAND
_EXPRESSION
_POSITIV
16#FFFF0000
_EXPRESSION
_POSITIV
AND
_OPERAND
_EXPRESSION
_POSITIV
16
_EXPRESSION
_POSITIV
SHR
_EXPRESSION
_POSITIV
DWORD_TO_WORD
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Beschleunigung_High

END_FUNCTION_BLOCK


(* @PATH := '\/Unterprogramme' *)
(* @SYMFILEFLAGS := '2048' *)
FUNCTION_BLOCK BetriebsartUmschalten

VAR_INPUT
	Betriebsart_1			:BOOL;
	Betriebsart_2			:BOOL;
	Sammelstoerung		:BOOL;
END_VAR

VAR_OUTPUT
	Betriebszustand_ok			:BOOL;
END_VAR

VAR
	Betriebsart_aktiv				:BOOL;
	FL_pos: R_TRIG;
	FL_neg: F_TRIG;
	Betriebszustand_geaendert	:BOOL;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 3
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
Betriebsart_1
_OPERAND
_EXPRESSION
_NEGATIV
Betriebsart_2
_OPERAND
_EXPRESSION
_NEGATIV
Sammelstoerung
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Betriebsart_aktiv
_NETWORK

_COMMENT
Flankenauswertung Automatik
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_FUNCTIONBLOCK
FL_pos
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
Betriebsart_aktiv
_EXPRESSION
_POSITIV
R_TRIG
_OUTPUTS : 0
_FUNCTIONBLOCK
FL_neg
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
Betriebsart_aktiv
_EXPRESSION
_POSITIV
F_TRIG
_OUTPUTS : 0
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Betriebszustand_geaendert
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_NEGATIV
Betriebszustand_geaendert
_OPERAND
_EXPRESSION
_POSITIV
Betriebsart_aktiv
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Betriebszustand_ok

END_FUNCTION_BLOCK


(* @PATH := '\/Unterprogramme' *)
(* @SYMFILEFLAGS := '2048' *)
FUNCTIONBLOCK CompareDwordString4

VAR_INPUT
	D			:DWORD;
	Str			:STRING(4);
END_VAR

VAR_OUTPUT
	Ergebnis	:BOOL;
END_VAR

VAR
	i			:INT;
	B1			:BYTE;
	B2			:BYTE;
      ptr			:POINTER TO BYTE;
END_VAR
(* @END_DECLARATION := '0' *)
Ergebnis:=TRUE;

FOR i:=0 TO 3 DO
       ptr := ADR(D)+i;
	B1:= ptr^;
      	ptr := ADR(Str)+3-i;
       B2 := ptr^;
	IF  B1 <> B2 THEN
		Ergebnis:=FALSE;
	END_IF
END_FOR
END_FUNCTION_BLOCK


(* @PATH := '\/Unterprogramme' *)
(* @SYMFILEFLAGS := '2048' *)
FUNCTIONBLOCK Decode

VAR_INPUT
	Hi:			DWORD;
	Lo:			DWORD;
END_VAR

VAR_OUTPUT
	Out:		DWORD;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 1
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Hi
_OPERAND
_EXPRESSION
_POSITIV
16
_EXPRESSION
_POSITIV
SHL
_OPERAND
_EXPRESSION
_POSITIV
Lo
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Out

END_FUNCTION_BLOCK


(* @PATH := '\/Unterprogramme' *)
(* @SYMFILEFLAGS := '2048' *)
FUNCTION_BLOCK Ecodrive_7W_Antr_Gef_Pos

VAR_INPUT
	Freigabe						:BOOL; 			(*Antriebstatus Uebergang Ab -> Ah*)
	ReleaseAntriebHalt			:BOOL;				(*Explicitly release Antrieb Halt*)
	FehlerQuittieren				:BOOL; 			(*Stoerung quittieren*)
	Absolutmasssetzen			:BOOL;				(*Absolutmass setzen*)
	TippenAn						:BOOL;				(*Betriebart Tippen ausgewaehlt*)
	TippenPlus					:BOOL; 			(*Tippen vorwaerts*)
	TippenMinus					:BOOL; 			(*Tippen rueckwaerts*)
	Start							:BOOL; 			(*Positionierung starten*)
	RelativesPositionieren: 		BOOL;
	SollwertPosition				:DINT; 				(*Soll-Position*)
	SollwertGeschwindigkeit		:DINT; 				(*Soll-Geschwindigkeit*)
       PositionierBeschleunigung:	DWORD;			(*PositionierBeschleunigung*)
	PC_Mode:						BOOL;
	Zusatzfenster_POS_OK		:DINT; 				(*POS_OK Fenster in der SPS*)
	PEW1							:WORD;			(*Eingangswort 1*)
	PEW2							:WORD;			(*Eingangswort 2*)
	PEW3							:WORD;			(*Eingangswort 3*)
	PEW4							:WORD;			(*Eingangswort 4*)
	PEW5							:WORD;			(*Eingangswort 5*)
	PEW6							:WORD;			(*Eingangswort 6*)
	PEW7							:WORD;			(*Eingangswort 7*)
	PEW8							:WORD;			(*Eingangswort 8*)
	PEW9							:WORD;			(*Eingangswort 9*)
END_VAR

VAR_IN_OUT
	StartMovement			      	:BOOL;
END_VAR

VAR_OUTPUT
	AntriebInPhase4				:BOOL; 			(*Antrieb ist in Phase 4*)
	AntriebBetriebsbereit			:BOOL;				(* Antrieb betriebsbereit *)
	AntriebFreigegeben			:BOOL; 			(*Antrieb hat Leistung und ist freigegeben*)
 	AntriebInHalt:					BOOL;				(*Antrieb HALT*)
	InReferenz						:BOOL; 			(*Antrieb ist referenziert*)
	InPosition						:BOOL; 			(*Zielposition erreicht*)
	InStillstand					:BOOL; 			(*IN_STANDSTILL*)
	FehlerStehtAn					:BOOL; 			(*ERROR*)
	EndschalterPlus				:BOOL; 			(*Soft- oder Hardwareendschalter Plus erreicht*)
	EndschalterMinus				:BOOL; 			(*Soft- oder Hardwareendschalter Minus erreicht*)
	Diagnosewort					:WORD; 			(*DRIVE_DIAGNOSIS*)
	IstwertPosition				:DINT; 				(*Aktuelle Position, actual position*)
	IstwertGeschwindigkeit		:DINT; 				(*Aktuelle Geschwindigkeit, actual velocity*)
	PositionFeedback2			:DINT;
	PAW1							:WORD;			(*Ausgangswort 1*)
	PAW2							:WORD;			(*Ausgangswort 2*)
	PAW3							:WORD;			(*Ausgangswort 3*)
	PAW4							:WORD;			(*Ausgangswort 4*)
	PAW5							:WORD;			(*Ausgangswort 5*)
	PAW6							:WORD;			(*Ausgangswort 6*)
	PAW7							:WORD;			(*Ausgangswort 7*)
	PAW8							:WORD;                   (*Ausgangswort 8*)
	PAW9							:WORD;                   (*Ausgangswort 9*)
END_VAR

VAR
	ek_in_eco:					struct_ek_in_eco;	(*Feldbusschnittstelle-Eingänge*)
	ek_out_eco:					struct_ek_out_eco;	(*Feldbusschnittstelle-Eingänge*)
	INTERN_FRG:				BOOL;
	INTERN_JOG_FORWARD:	BOOL;
	INTERN_JOG_BACKWARD:	BOOL;
	INTERN_POS_START:		BOOL;
	Negate:						NEG;
	RStest: 						RS;
	PC_Start_pos: 				BOOL;
	Decoder: 						Decode;
	Encoder: 						Encode;
	Delay_StartMovement: 		TON;
	SetpointAcknowledgment: 	RF_TRIG;
	FA: BOOL;
	Dummy: TOF;
	RStest2: RS;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 48
_NETWORK

_COMMENT
Eingangssignale vom Profibus lesen
_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
PEW1
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_in_eco.statuswort
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Decoder
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
PEW2
_OPERAND
_EXPRESSION
_POSITIV
PEW3
_EXPRESSION
_POSITIV
Decode
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_in_eco.pos_act
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Decoder
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
PEW4
_OPERAND
_EXPRESSION
_POSITIV
PEW5
_EXPRESSION
_POSITIV
Decode
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_in_eco.vel_act
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
PEW6
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_in_eco.diagnosis
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
PEW7
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_in_eco.signalstatuswort
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Negate
_BOX_EXPR : 1
_FUNCTIONBLOCK
Decoder
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
PEW8
_OPERAND
_EXPRESSION
_POSITIV
PEW9
_EXPRESSION
_POSITIV
Decode
_OUTPUTS : 0
_EXPRESSION
_POSITIV
NEG
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
PositionFeedback2
_NETWORK

_COMMENT
DKC in Phase 4
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_NEGATIV
ek_in_eco.o_mode_acknowledge_Bit0
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.o_mode_acknowledge_Bit1
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
AntriebInPhase4
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.ready_to_operate_Bit0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
AntriebBetriebsbereit
_NETWORK

_COMMENT
DKC einschalten und freigeben (Output of the first AND is "Absolutmass gesetzt", AbsolutmassSetzen=TRUE)
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 4
_OPERAND
_EXPRESSION
_POSITIV
Freigabe
_OPERAND
_EXPRESSION
_POSITIV
AntriebInPhase4
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.ready_to_operate_Bit1
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_NEGATIV
Absolutmasssetzen
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Absolutmasssetzen
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.command_change_bit
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 2
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.drive_on
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.drive_enable
_NETWORK

_COMMENT
DKC ist freigegeben
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.ready_to_operate_Bit0
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.ready_to_operate_Bit1
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
AntriebFreigegeben
_NETWORK

_COMMENT
Interne Freigabe
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
ek_out_eco.drive_on
_OPERAND
_EXPRESSION
_POSITIV
ek_out_eco.drive_enable
_OPERAND
_EXPRESSION
_POSITIV
AntriebFreigegeben
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
INTERN_FRG
_NETWORK

_COMMENT
Absolutmass setzen
_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
Absolutmasssetzen
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.signalsteuerwort.0
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
PC_mode
_OPERAND
_EXPRESSION
_POSITIV
Start
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
PC_Start_pos
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 4
_OPERAND
_EXPRESSION
_POSITIV
INTERN_FRG
_OPERAND
_EXPRESSION
_NEGATIV
PC_Start_pos
_OPERAND
_EXPRESSION
_POSITIV
TippenPlus
_OPERAND
_EXPRESSION
_NEGATIV
TippenMinus
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
INTERN_JOG_FORWARD
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 4
_OPERAND
_EXPRESSION
_POSITIV
INTERN_FRG
_OPERAND
_EXPRESSION
_NEGATIV
PC_Start_pos
_OPERAND
_EXPRESSION
_NEGATIV
TippenPlus
_OPERAND
_EXPRESSION
_POSITIV
TippenMinus
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
INTERN_JOG_BACKWARD
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 4
_OPERAND
_EXPRESSION
_POSITIV
INTERN_FRG
_OPERAND
_EXPRESSION
_POSITIV
PC_Start_pos
_OPERAND
_EXPRESSION
_NEGATIV
TippenAn
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.in_reference
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
INTERN_POS_START
_NETWORK

_COMMENT
DKC-Antrieb Halt ansteuern
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 4
_OPERAND
_EXPRESSION
_POSITIV
INTERN_JOG_FORWARD
_OPERAND
_EXPRESSION
_POSITIV
INTERN_JOG_BACKWARD
_OPERAND
_EXPRESSION
_POSITIV
INTERN_POS_START
_OPERAND
_EXPRESSION
_POSITIV
ReleaseAntriebHalt
_EXPRESSION
_NEGATIV
OR
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
AntriebInHalt
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_NEGATIV
AntriebInHalt
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.drive_halt
_NETWORK

_COMMENT
Nullfahren / Referenzieren
_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.drive_to_zero_point
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
TippenAn
_OPERAND
_EXPRESSION
_POSITIV
INTERN_JOG_FORWARD
_OPERAND
_EXPRESSION
_POSITIV
INTERN_JOG_BACKWARD
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.set_operating_mode_Bit0
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
TRUE
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.set_operating_mode_Bit1
_NETWORK

_COMMENT
Tippen
_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
INTERN_JOG_FORWARD
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.jog_forward
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
INTERN_JOG_BACKWARD
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.jog_backwards
_NETWORK

_COMMENT
Fehler löschen
_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
FehlerQuittieren
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.error_delete
_NETWORK

_COMMENT
Daten übergeben
_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
SollwertGeschwindigkeit
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.vel_cmd
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
SollwertPosition
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.pos_cmd
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
10000
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.feedrate_override
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
RelativesPositionieren
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.absolute_relative
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
TRUE
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.immediate_block_change
_NETWORK

_COMMENT
This checks whether the DKC is in the third operating mode (ek_in_eco.a_operating_mode_Bit0=1 AND ek_in_eco.a_operating_mode_Bit1=0).
This construction assures that ek_out_eco.setpoint_acceptance is only set in the right operating mode. Afterwards it is toggled so that there are edges to be detected.
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
INTERN_POS_START
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_NEGATIV
ek_in_eco.a_operating_mode_Bit0
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.a_operating_mode_Bit1
_EXPRESSION
_POSITIV
AND
_OPERAND
_EXPRESSION
_POSITIV
StartMovement
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ek_out_eco.setpoint_acceptance
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
RStest
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
StartMovement
_OPERAND
_EXPRESSION
_POSITIV
ek_out_eco.setpoint_acceptance
_EXPRESSION
_POSITIV
RS
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
StartMovement
_NETWORK

_COMMENT
Reset the StartMovement command whenever the new setpoint was acknowledged (DOESN'T WORK, WHY?)
_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
RStest2
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
StartMovement
_FUNCTIONBLOCK
SetpointAcknowledgment
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
ek_out_eco.setpoint_acknowledge
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
RF_TRIG
_OUTPUTS : 0
_EXPRESSION
_POSITIV
RS
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
StartMovement
_NETWORK

_COMMENT
Istwerte anzeigen
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.pos_act
_EXPRESSION
_POSITIV
DWORD_TO_REAL
_OPERAND
_EXPRESSION
_POSITIV
-RotaryEncoderResolution
_EXPRESSION
_POSITIV
MUL
_OPERAND
_EXPRESSION
_POSITIV
ShaftEncoderResolution
_EXPRESSION
_POSITIV
DIV
_EXPRESSION
_POSITIV
REAL_TO_DWORD
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
IstwertPosition
_NETWORK

_COMMENT
Istwerte anzeigen
_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
IstwertPosition
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.vel_act
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
IstwertGeschwindigkeit
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.diagnosis
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Diagnosewort
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.drive_Error_ZKL1
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
FehlerStehtAn
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.in_reference
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
InReferenz
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.setpoint_reached
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
InPosition
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
ek_in_eco.in_standstill
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
InStillstand
_NETWORK

_COMMENT
Endschalter erreicht (*ueberfluessig*)
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 4
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Diagnosewort
_OPERAND
_EXPRESSION
_POSITIV
16#E829
_EXPRESSION
_POSITIV
EQ
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Diagnosewort
_OPERAND
_EXPRESSION
_POSITIV
16#E843
_EXPRESSION
_POSITIV
EQ
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Diagnosewort
_OPERAND
_EXPRESSION
_POSITIV
16#F643
_EXPRESSION
_POSITIV
EQ
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Diagnosewort
_OPERAND
_EXPRESSION
_POSITIV
16#E831
_EXPRESSION
_POSITIV
EQ
_OPERAND
_EXPRESSION
_POSITIV
INTERN_JOG_FORWARD
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
EndschalterPlus
_NETWORK

_COMMENT
Ueberfluessig
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 4
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Diagnosewort
_OPERAND
_EXPRESSION
_POSITIV
16#E830
_EXPRESSION
_POSITIV
EQ
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Diagnosewort
_OPERAND
_EXPRESSION
_POSITIV
16#E844
_EXPRESSION
_POSITIV
EQ
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Diagnosewort
_OPERAND
_EXPRESSION
_POSITIV
16#F644
_EXPRESSION
_POSITIV
EQ
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Diagnosewort
_OPERAND
_EXPRESSION
_POSITIV
16#E831
_EXPRESSION
_POSITIV
EQ
_OPERAND
_EXPRESSION
_POSITIV
INTERN_JOG_BACKWARD
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
EndschalterMinus
_NETWORK

_COMMENT
Ausgangssignale an Profibus schreiben
_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
ek_out_eco.steuerwort
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
PAW1
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Encoder
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
ek_out_eco.pos_cmd
_EXPRESSION
_POSITIV
Encode
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
PAW3
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
PAW2
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Encoder
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
ek_out_eco.vel_cmd
_EXPRESSION
_POSITIV
Encode
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
PAW5
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
PAW4
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
ek_out_eco.feedrate_override
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
PAW6
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERAND
_EXPRESSION
_POSITIV
ek_out_eco.signalsteuerwort
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
PAW7
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Encoder
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
PositionierBeschleunigung
_EXPRESSION
_POSITIV
Encode
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
PAW9
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
PAW8

END_FUNCTION_BLOCK


(* @PATH := '\/Unterprogramme' *)
(* @SYMFILEFLAGS := '2048' *)
FUNCTIONBLOCK Encode

VAR_INPUT
	In:			DWORD;
END_VAR

VAR_OUTPUT
	Hi:			WORD;
	Lo:			WORD;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 2
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
In
_OPERAND
_EXPRESSION
_POSITIV
16#FFFF
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
DWORD_TO_WORD
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Lo
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
In
_OPERAND
_EXPRESSION
_POSITIV
16
_EXPRESSION
_POSITIV
SHR
_OPERAND
_EXPRESSION
_POSITIV
16#FFFF
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
DWORD_TO_WORD
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Hi

END_FUNCTION_BLOCK


(* @PATH := '\/Unterprogramme' *)
(* @SYMFILEFLAGS := '2048' *)
FUNCTION_BLOCK NEG

VAR_INPUT
	In		:DWORD;
END_VAR

VAR_OUTPUT
	Out		:DWORD;
END_VAR

VAR
END_VAR
(* @END_DECLARATION := '0' *)
Out:=-In;
END_FUNCTION_BLOCK


(* @PATH := '\/Unterprogramme' *)
(* @SYMFILEFLAGS := '2048' *)
FUNCTIONBLOCK RF_TRIG

VAR_INPUT
	In:				BOOL;
END_VAR

VAR_OUTPUT
	Out:			BOOL;
END_VAR
VAR
	RaisingEdge: R_TRIG;
	FallingEdge: 	F_TRIG;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 1
_NETWORK

_COMMENT
Detects an edge (change in the leven)
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_FUNCTIONBLOCK
RaisingEdge
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
In
_EXPRESSION
_POSITIV
R_TRIG
_OUTPUTS : 0
_FUNCTIONBLOCK
FallingEdge
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
In
_EXPRESSION
_POSITIV
F_TRIG
_OUTPUTS : 0
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Out

END_FUNCTION_BLOCK


(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM AchseX

VAR
	Antrieb_1				:	Ecodrive_7W_Antr_Gef_Pos;
	Beschleunigung		:	DINT;
	X_AccMACStoDKC	:	AccMACStoDKC;
	X_Stehengeblieben: 		R_TRIG;
	X_ResetAH_after_move: 	RS;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 6
_NETWORK

_COMMENT
X-Achse Jog Pos
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
FB_soll_drehen_links
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_FB_ok
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
X_Jog_pos
_NETWORK

_COMMENT
X-Achse Jog Neg
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
FB_soll_drehen_rechts
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_FB_ok
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
X_Jog_neg
_NETWORK

_COMMENT
alter X_Pos_soll Wert fuer X_PC_VStart: -+536000000
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_PC_ok
_OPERAND
_EXPRESSION
_POSITIV
X_ist_freigegeben
_OPERAND
_EXPRESSION
_NEGATIV
X_PC_AntriebHalt
_EXPRESSION
_POSITIV
AND
_OPERAND
_EXPRESSION
_POSITIV
0
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
X_PC_VStart
_OPERAND
_EXPRESSION
_POSITIV
X_PC_PosZiel
_OPERATOR
_BOX_EXPR : 3
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
X_PC_VGeschwindigkeit
_OPERAND
_EXPRESSION
_POSITIV
0
_EXPRESSION
_POSITIV
LT
_OPERAND
_EXPRESSION
_POSITIV
-576580649
_OPERAND
_EXPRESSION
_POSITIV
576580649
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
X_Pos_soll
_NETWORK

_COMMENT
In first MUL 1 was ArbitraryMACFactor
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
X_PC_VStart
_OPERAND
_EXPRESSION
_POSITIV
X_PC_PosGeschwindigkeit
_OPERATOR
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
X_PC_VGeschwindigkeit
_OPERAND
_EXPRESSION
_POSITIV
1
_EXPRESSION
_POSITIV
MUL
_EXPRESSION
_POSITIV
ABS
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
X_Vel_soll
_NETWORK

_COMMENT
Beschleunigung wird auch fuer Tipp-Betrieb gesetzt
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
IN_FB_Betrieb
_FUNCTIONBLOCK
X_AccMACStoDKC
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 3
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
X_Pos_ist
_OPERAND
_EXPRESSION
_POSITIV
X_Pos_soll
_EXPRESSION
_POSITIV
SUB
_EXPRESSION
_POSITIV
ABS
_OPERAND
_EXPRESSION
_POSITIV
-1000
_EXPRESSION
_POSITIV
LT
_OPERAND
_EXPRESSION
_POSITIV
X_PC_PosBeschleunigung
_OPERAND
_EXPRESSION
_POSITIV
X_PC_PosVerzoegerung
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
AccMACStoDKC
_OUTPUTS : 0
_OPERAND
_EXPRESSION
_POSITIV
X_HandBeschl
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Beschleunigung
_NETWORK

_COMMENT
Relatives Positionieren war XStart
_END_COMMENT
_FUNCTIONBLOCK
Antrieb_1
_BOX_EXPR : 24
_OPERAND
_EXPRESSION
_POSITIV
Soll_Freigabe
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_OPERAND
_EXPRESSION
_POSITIV
Quitt
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_OPERAND
_EXPRESSION
_POSITIV
IN_FB_Betrieb
_OPERAND
_EXPRESSION
_POSITIV
X_Jog_pos
_OPERAND
_EXPRESSION
_POSITIV
X_Jog_neg
_OPERAND
_EXPRESSION
_NEGATIV
X_PC_AntriebHalt
_OPERAND
_EXPRESSION
_POSITIV
TRUE
_OPERAND
_EXPRESSION
_POSITIV
X_Pos_soll
_OPERAND
_EXPRESSION
_POSITIV
X_Vel_soll
_OPERAND
_EXPRESSION
_POSITIV
Beschleunigung
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_PC_ok
_OPERAND
_EXPRESSION
_POSITIV
X_Pos_Fenster
_OPERAND
_EXPRESSION
_POSITIV
%IW100
_OPERAND
_EXPRESSION
_POSITIV
%IW102
_OPERAND
_EXPRESSION
_POSITIV
%IW104
_OPERAND
_EXPRESSION
_POSITIV
%IW106
_OPERAND
_EXPRESSION
_POSITIV
%IW108
_OPERAND
_EXPRESSION
_POSITIV
%IW110
_OPERAND
_EXPRESSION
_POSITIV
%IW112
_OPERAND
_EXPRESSION
_POSITIV
%IW114
_OPERAND
_EXPRESSION
_POSITIV
%IW116
_OPERAND
_EXPRESSION
_POSITIV
X_PC_StartMovement
_EXPRESSION
_POSITIV
Ecodrive_7W_Antr_Gef_Pos
_OUTPUTS : 22
_OUTPUT
_POSITIV
_NO_SET
X_ist_betriebsbereit
_OUTPUT
_POSITIV
_NO_SET
X_ist_freigegeben
_OUTPUT
_POSITIV
_NO_SET
X_in_AntriebHalt
_OUTPUT
_POSITIV
_NO_SET
X_in_Referenz
_OUTPUT
_POSITIV
_NO_SET
X_in_Pos
_OUTPUT
_POSITIV
_NO_SET
X_in_Standstill
_OUTPUT
_POSITIV
_NO_SET
X_Fehler
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
X_Err_ID
_OUTPUT
_POSITIV
_NO_SET
X_Pos_ist
_OUTPUT
_POSITIV
_NO_SET
X_Vel_ist
_OUTPUT
_POSITIV
_NO_SET
X_Pos_Geber2
_OUTPUT
_POSITIV
_NO_SET
%QW100
_OUTPUT
_POSITIV
_NO_SET
%QW102
_OUTPUT
_POSITIV
_NO_SET
%QW104
_OUTPUT
_POSITIV
_NO_SET
%QW106
_OUTPUT
_POSITIV
_NO_SET
%QW108
_OUTPUT
_POSITIV
_NO_SET
%QW110
_OUTPUT
_POSITIV
_NO_SET
%QW112
_OUTPUT
_POSITIV
_NO_SET
%QW114
_OUTPUT
_POSITIV
_NO_SET
%QW116

END_PROGRAM


(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM AchseX2

VAR
	Achse_X		:AchsenSteuerung;
	Antrieb_1		: Ecodrive_7W_Antr_Gef_Pos;
	X_Start					:BOOL;		(* 1= Anrtieb Positionierung starten *)
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 2
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Achse_X
_BOX_EXPR : 14
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_FB_ok
_OPERAND
_EXPRESSION
_POSITIV
IN_Zusatz_Bremse_Z
_OPERAND
_EXPRESSION
_POSITIV
Leistung_Ein
_OPERAND
_EXPRESSION
_POSITIV
FB_soll_drehen_links
_OPERAND
_EXPRESSION
_POSITIV
FB_soll_drehen_rechts
_OPERAND
_EXPRESSION
_POSITIV
X_PC_VStart
_OPERAND
_EXPRESSION
_POSITIV
X_ist_freigegeben
_OPERAND
_EXPRESSION
_POSITIV
X_Pos_ist
_OPERAND
_EXPRESSION
_POSITIV
X_PC_PosZiel
_OPERAND
_EXPRESSION
_POSITIV
X_PC_PosGeschwindigkeit
_OPERAND
_EXPRESSION
_POSITIV
X_PC_VGeschwindigkeit
_OPERAND
_EXPRESSION
_POSITIV
X_PC_PosBeschleunigung
_OPERAND
_EXPRESSION
_POSITIV
X_PC_PosVerzoegerung
_OPERAND
_EXPRESSION
_POSITIV
X_HandBeschl
_EXPRESSION
_POSITIV
AchsenSteuerung
_OUTPUTS : 6
_OUTPUT
_POSITIV
_NO_SET
X_Jog_neg
_OUTPUT
_POSITIV
_NO_SET
X_Start
_OUTPUT
_POSITIV
_NO_SET
X_Pos_soll
_OUTPUT
_POSITIV
_NO_SET
X_Vel_soll
_OUTPUT
_POSITIV
_NO_SET
%QW116
_OUTPUT
_POSITIV
_NO_SET
%QW114
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
X_Jog_pos
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Antrieb_1
_BOX_EXPR : 24
_OPERAND
_EXPRESSION
_POSITIV
Soll_Freigabe
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_OPERAND
_EXPRESSION
_POSITIV
???
_OPERAND
_EXPRESSION
_POSITIV
X_Soll_Abs
_OPERAND
_EXPRESSION
_POSITIV
IN_FB_Betrieb
_OPERAND
_EXPRESSION
_POSITIV
X_Jog_pos
_OPERAND
_EXPRESSION
_POSITIV
X_Jog_neg
_OPERAND
_EXPRESSION
_POSITIV
X_Start
_OPERAND
_EXPRESSION
_POSITIV
TRUE
_OPERAND
_EXPRESSION
_POSITIV
X_Pos_soll
_OPERAND
_EXPRESSION
_POSITIV
X_Vel_soll
_OPERAND
_EXPRESSION
_POSITIV
???
_OPERAND
_EXPRESSION
_POSITIV
???
_OPERAND
_EXPRESSION
_POSITIV
X_Pos_Fenster
_OPERAND
_EXPRESSION
_POSITIV
%IW100
_OPERAND
_EXPRESSION
_POSITIV
%IW102
_OPERAND
_EXPRESSION
_POSITIV
%IW104
_OPERAND
_EXPRESSION
_POSITIV
%IW106
_OPERAND
_EXPRESSION
_POSITIV
%IW108
_OPERAND
_EXPRESSION
_POSITIV
%IW110
_OPERAND
_EXPRESSION
_POSITIV
%IW112
_OPERAND
_EXPRESSION
_POSITIV
%IW114
_OPERAND
_EXPRESSION
_POSITIV
%IW116
_OPERAND
_EXPRESSION
_POSITIV
???
_EXPRESSION
_POSITIV
Ecodrive_7W_Antr_Gef_Pos
_OUTPUTS : 22
_OUTPUT
_POSITIV
_NO_SET
X_ist_betriebsbereit
_OUTPUT
_POSITIV
_NO_SET
X_ist_freigegeben
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
X_in_Pos
_OUTPUT
_POSITIV
_NO_SET
X_in_Standstill
_OUTPUT
_POSITIV
_NO_SET
X_Fehler
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
X_Err_ID
_OUTPUT
_POSITIV
_NO_SET
X_Pos_ist
_OUTPUT
_POSITIV
_NO_SET
X_Vel_ist
_OUTPUT
_POSITIV
_NO_SET
X_Pos_Geber2
_OUTPUT
_POSITIV
_NO_SET
%QW100
_OUTPUT
_POSITIV
_NO_SET
%QW102
_OUTPUT
_POSITIV
_NO_SET
%QW104
_OUTPUT
_POSITIV
_NO_SET
%QW106
_OUTPUT
_POSITIV
_NO_SET
%QW108
_OUTPUT
_POSITIV
_NO_SET
%QW110
_OUTPUT
_POSITIV
_NO_SET
%QW112
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
X_in_Phase4

END_PROGRAM


(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM AchseY

VAR
	Antrieb_2				:Ecodrive_7W_Antr_Gef_Pos;
      Dummy:				BOOL;
	ReleaseAH_Slave: 	BOOL;
	ReleaseAH_Delay:	TOF;
	Freigabe_Slave: 		BOOL;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 3
_NETWORK

_COMMENT
Erzwingen von !AH (Antrieb Rleased) solange einer der beiden Az Motoren noch in Bewegung oder der Master nicht in AH
_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
ReleaseAH_Delay
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
X_in_Standstill
_OPERAND
_EXPRESSION
_POSITIV
Y_in_Standstill
_OPERAND
_EXPRESSION
_POSITIV
X_in_AntriebHalt
_EXPRESSION
_NEGATIV
AND
_OPERAND
_EXPRESSION
_POSITIV
T#3s
_EXPRESSION
_POSITIV
TOF
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
ReleaseAH_Slave
_NETWORK

_COMMENT
Erzwingen der Freigabe solange Master noch nicht steht oder in Regelung 
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
ReleaseAH_Slave
_OPERAND
_EXPRESSION
_POSITIV
Soll_Freigabe
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Freigabe_Slave
_NETWORK

_COMMENT
Slave-Antrieb zu Antrieb 1
Achse läuft immer mit Drehmomentenregelung
als Sollwert wird über AnalogEingang1 der Drehmomentsollwert vorgegeben
Freigaben, Status und Diagnose erfolgt über ProfiBus
_END_COMMENT
_FUNCTIONBLOCK
Antrieb_2
_BOX_EXPR : 24
_OPERAND
_EXPRESSION
_POSITIV
Freigabe_Slave
_OPERAND
_EXPRESSION
_POSITIV
ReleaseAH_Slave
_OPERAND
_EXPRESSION
_POSITIV
Quitt
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_OPERAND
_EXPRESSION
_POSITIV
TRUE
_OPERAND
_EXPRESSION
_POSITIV
TRUE
_OPERAND
_EXPRESSION
_POSITIV
0
_OPERAND
_EXPRESSION
_POSITIV
0
_OPERAND
_EXPRESSION
_POSITIV
0
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_OPERAND
_EXPRESSION
_POSITIV
0
_OPERAND
_EXPRESSION
_POSITIV
%IW140
_OPERAND
_EXPRESSION
_POSITIV
%IW142
_OPERAND
_EXPRESSION
_POSITIV
%IW144
_OPERAND
_EXPRESSION
_POSITIV
%IW146
_OPERAND
_EXPRESSION
_POSITIV
%IW148
_OPERAND
_EXPRESSION
_POSITIV
%IW150
_OPERAND
_EXPRESSION
_POSITIV
%IW152
_OPERAND
_EXPRESSION
_POSITIV
%IW154
_OPERAND
_EXPRESSION
_POSITIV
%IW156
_OPERAND
_EXPRESSION
_POSITIV
Dummy
_EXPRESSION
_POSITIV
Ecodrive_7W_Antr_Gef_Pos
_OUTPUTS : 22
_OUTPUT
_POSITIV
_NO_SET
Y_ist_betriebsbereit
_OUTPUT
_POSITIV
_NO_SET
Y_ist_freigegeben
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
Y_in_Standstill
_OUTPUT
_POSITIV
_NO_SET
Y_Fehler
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
%QW140
_OUTPUT
_POSITIV
_NO_SET
%QW142
_OUTPUT
_POSITIV
_NO_SET
%QW144
_OUTPUT
_POSITIV
_NO_SET
%QW146
_OUTPUT
_POSITIV
_NO_SET
%QW148
_OUTPUT
_POSITIV
_NO_SET
%QW150
_OUTPUT
_POSITIV
_NO_SET
%QW152
_OUTPUT
_POSITIV
_NO_SET
%QW154
_OUTPUT
_POSITIV
_NO_SET
%QW156

END_PROGRAM


(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM AchseZ

VAR
	Antrieb_3				:	Ecodrive_7W_Antr_Gef_Pos;
	Time_Brake			:	TON;
	Beschleunigung		:	DINT;
	Z_AccMACStoDKC	:	AccMACStoDKC;
	Z_Stehengeblieben: 		R_TRIG;
	Z_ResetAH_after_move: 	RS;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 7
_NETWORK

_COMMENT
Z-Achse Jog Pos
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
FB_soll_schwenk_auf
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_FB_ok
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Z_Jog_pos
_NETWORK

_COMMENT
Z-Achse Jog Neg
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
FB_soll_schwenk_ab
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_FB_ok
_EXPRESSION
_POSITIV
AND
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Z_Jog_neg
_NETWORK

_COMMENT
alter Z_Pos_soll Wert fuer Z_PC_VStart: +-100000000
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_PC_ok
_OPERAND
_EXPRESSION
_POSITIV
Z_ist_freigegeben
_OPERAND
_EXPRESSION
_NEGATIV
Z_PC_AntriebHalt
_EXPRESSION
_POSITIV
AND
_OPERAND
_EXPRESSION
_POSITIV
0
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_VStart
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_PosZiel
_OPERATOR
_BOX_EXPR : 3
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_VGeschwindigkeit
_OPERAND
_EXPRESSION
_POSITIV
0
_EXPRESSION
_POSITIV
LT
_OPERAND
_EXPRESSION
_POSITIV
-175256485
_OPERAND
_EXPRESSION
_POSITIV
175256485
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Z_Pos_soll
_NETWORK

_COMMENT
In first MUL 1 was ArbitraryMACFactor
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_VStart
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_PosGeschwindigkeit
_OPERATOR
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_VGeschwindigkeit
_OPERAND
_EXPRESSION
_POSITIV
1
_EXPRESSION
_POSITIV
MUL
_EXPRESSION
_POSITIV
ABS
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Z_Vel_soll
_NETWORK

_COMMENT
Beschleunigung wird auch fuer Tipp-Betrieb gesetzt
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
IN_FB_Betrieb
_FUNCTIONBLOCK
Z_AccMACStoDKC
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 3
_OPERATOR
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 1
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Z_Pos_ist
_OPERAND
_EXPRESSION
_POSITIV
Z_Pos_soll
_EXPRESSION
_POSITIV
SUB
_EXPRESSION
_POSITIV
ABS
_OPERAND
_EXPRESSION
_POSITIV
-1000
_EXPRESSION
_POSITIV
LT
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_PosBeschleunigung
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_PosVerzoegerung
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
AccMACStoDKC
_OUTPUTS : 0
_OPERAND
_EXPRESSION
_POSITIV
Z_HandBeschl
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Beschleunigung
_NETWORK

_COMMENT
Relatives Positionieren war XStart
_END_COMMENT
_FUNCTIONBLOCK
Antrieb_3
_BOX_EXPR : 24
_OPERAND
_EXPRESSION
_POSITIV
Soll_Freigabe
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_OPERAND
_EXPRESSION
_POSITIV
Quitt
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_OPERAND
_EXPRESSION
_POSITIV
IN_FB_Betrieb
_OPERAND
_EXPRESSION
_POSITIV
Z_Jog_pos
_OPERAND
_EXPRESSION
_POSITIV
Z_Jog_neg
_OPERAND
_EXPRESSION
_NEGATIV
Z_PC_AntriebHalt
_OPERAND
_EXPRESSION
_POSITIV
TRUE
_OPERAND
_EXPRESSION
_POSITIV
Z_Pos_soll
_OPERAND
_EXPRESSION
_POSITIV
Z_Vel_soll
_OPERAND
_EXPRESSION
_POSITIV
Beschleunigung
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_PC_ok
_OPERAND
_EXPRESSION
_POSITIV
Z_Pos_Fenster
_OPERAND
_EXPRESSION
_POSITIV
%IW180
_OPERAND
_EXPRESSION
_POSITIV
%IW182
_OPERAND
_EXPRESSION
_POSITIV
%IW184
_OPERAND
_EXPRESSION
_POSITIV
%IW186
_OPERAND
_EXPRESSION
_POSITIV
%IW188
_OPERAND
_EXPRESSION
_POSITIV
%IW190
_OPERAND
_EXPRESSION
_POSITIV
%IW192
_OPERAND
_EXPRESSION
_POSITIV
%IW194
_OPERAND
_EXPRESSION
_POSITIV
%IW196
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_StartMovement
_EXPRESSION
_POSITIV
Ecodrive_7W_Antr_Gef_Pos
_OUTPUTS : 22
_OUTPUT
_POSITIV
_NO_SET
Z_ist_betriebsbereit
_OUTPUT
_POSITIV
_NO_SET
Z_ist_freigegeben
_OUTPUT
_POSITIV
_NO_SET
Z_in_AntriebHalt
_OUTPUT
_POSITIV
_NO_SET
Z_in_Referenz
_OUTPUT
_POSITIV
_NO_SET
Z_in_Pos
_OUTPUT
_POSITIV
_NO_SET
Z_in_Standstill
_OUTPUT
_POSITIV
_NO_SET
Z_Fehler
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
Z_Err_ID
_OUTPUT
_POSITIV
_NO_SET
Z_Pos_ist
_OUTPUT
_POSITIV
_NO_SET
Z_Vel_ist
_OUTPUT
_POSITIV
_NO_SET
Z_Pos_Geber2
_OUTPUT
_POSITIV
_NO_SET
%QW180
_OUTPUT
_POSITIV
_NO_SET
%QW182
_OUTPUT
_POSITIV
_NO_SET
%QW184
_OUTPUT
_POSITIV
_NO_SET
%QW186
_OUTPUT
_POSITIV
_NO_SET
%QW188
_OUTPUT
_POSITIV
_NO_SET
%QW190
_OUTPUT
_POSITIV
_NO_SET
%QW192
_OUTPUT
_POSITIV
_NO_SET
%QW194
_OUTPUT
_POSITIV
_NO_SET
%QW196
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Leistung_Ein
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_FB_ok
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_PC_ok
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
AND
_OPERAND
_EXPRESSION
_NEGATIV
Z_in_Standstill
_OPERAND
_EXPRESSION
_POSITIV
Z_ist_freigegeben
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Zusatz_Bremse_Z

END_PROGRAM


(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM AchseZ2

VAR
	Time_Brake		:TON;
	Achse_Z			:AchsenSteuerung;
	Antrieb_3			:Ecodrive_7W_Antr_Gef_Pos;
	Z_Start					:BOOL;		(* 1= Anrtieb Positionierung starten *)
END_VAR

(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 3
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_FUNCTIONBLOCK
Time_Brake
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Leistung_Ein
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_FB_ok
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_PC_ok
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
AND
_OPERAND
_EXPRESSION
_POSITIV
DelayTime_Brake
_EXPRESSION
_POSITIV
TON
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OPERAND
_EXPRESSION
_NEGATIV
Z_in_Standstill
_OPERAND
_EXPRESSION
_POSITIV
Z_ist_freigegeben
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Zusatz_Bremse_Z
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Achse_Z
_BOX_EXPR : 14
_OPERAND
_EXPRESSION
_POSITIV
Betriebsart_FB
_OPERAND
_EXPRESSION
_POSITIV
IN_Zusatz_Bremse_Z
_OPERAND
_EXPRESSION
_POSITIV
Leistung_Ein
_OPERAND
_EXPRESSION
_POSITIV
FB_soll_schwenk_auf
_OPERAND
_EXPRESSION
_POSITIV
FB_soll_schwenk_ab
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_VStart
_OPERAND
_EXPRESSION
_POSITIV
Z_ist_freigegeben
_OPERAND
_EXPRESSION
_POSITIV
Z_Pos_ist
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_PosZiel
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_PosGeschwindigkeit
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_VGeschwindigkeit
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_PosBeschleunigung
_OPERAND
_EXPRESSION
_POSITIV
Z_PC_PosVerzoegerung
_OPERAND
_EXPRESSION
_POSITIV
Z_HandBeschl
_EXPRESSION
_POSITIV
AchsenSteuerung
_OUTPUTS : 6
_OUTPUT
_POSITIV
_NO_SET
Z_Jog_neg
_OUTPUT
_POSITIV
_NO_SET
Z_Start
_OUTPUT
_POSITIV
_NO_SET
Z_Pos_soll
_OUTPUT
_POSITIV
_NO_SET
Z_Vel_soll
_OUTPUT
_POSITIV
_NO_SET
%QW196
_OUTPUT
_POSITIV
_NO_SET
%QW194
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Z_Jog_pos
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Antrieb_3
_BOX_EXPR : 24
_OPERAND
_EXPRESSION
_POSITIV
Soll_Freigabe
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_OPERAND
_EXPRESSION
_POSITIV
???
_OPERAND
_EXPRESSION
_POSITIV
Z_Soll_Abs
_OPERAND
_EXPRESSION
_POSITIV
IN_FB_Betrieb
_OPERAND
_EXPRESSION
_POSITIV
Z_Jog_pos
_OPERAND
_EXPRESSION
_POSITIV
Z_Jog_neg
_OPERAND
_EXPRESSION
_POSITIV
Z_Start
_OPERAND
_EXPRESSION
_POSITIV
TRUE
_OPERAND
_EXPRESSION
_POSITIV
Z_Pos_soll
_OPERAND
_EXPRESSION
_POSITIV
Z_Vel_soll
_OPERAND
_EXPRESSION
_POSITIV
???
_OPERAND
_EXPRESSION
_POSITIV
???
_OPERAND
_EXPRESSION
_POSITIV
Z_Pos_Fenster
_OPERAND
_EXPRESSION
_POSITIV
%IW180
_OPERAND
_EXPRESSION
_POSITIV
%IW182
_OPERAND
_EXPRESSION
_POSITIV
%IW184
_OPERAND
_EXPRESSION
_POSITIV
%IW186
_OPERAND
_EXPRESSION
_POSITIV
%IW188
_OPERAND
_EXPRESSION
_POSITIV
%IW190
_OPERAND
_EXPRESSION
_POSITIV
%IW192
_OPERAND
_EXPRESSION
_POSITIV
%IW194
_OPERAND
_EXPRESSION
_POSITIV
%IW196
_OPERAND
_EXPRESSION
_POSITIV
???
_EXPRESSION
_POSITIV
Ecodrive_7W_Antr_Gef_Pos
_OUTPUTS : 22
_OUTPUT
_POSITIV
_NO_SET
Z_ist_betriebsbereit
_OUTPUT
_POSITIV
_NO_SET
Z_ist_freigegeben
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
Z_in_Pos
_OUTPUT
_POSITIV
_NO_SET
Z_in_Standstill
_OUTPUT
_POSITIV
_NO_SET
Z_Fehler
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
Z_Err_ID
_OUTPUT
_POSITIV
_NO_SET
Z_Pos_ist
_OUTPUT
_POSITIV
_NO_SET
Z_Vel_ist
_OUTPUT
_POSITIV
_NO_SET
Z_Pos_Geber2
_OUTPUT
_POSITIV
_NO_SET
%QW180
_OUTPUT
_POSITIV
_NO_SET
%QW182
_OUTPUT
_POSITIV
_NO_SET
%QW184
_OUTPUT
_POSITIV
_NO_SET
%QW186
_OUTPUT
_POSITIV
_NO_SET
%QW188
_OUTPUT
_POSITIV
_NO_SET
%QW190
_OUTPUT
_POSITIV
_NO_SET
%QW192
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Z_in_Phase4

END_PROGRAM


(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM Allgemein

VAR
	Blinkgen	:BLINK;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 2
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Blinkgen
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
TRUE
_OPERAND
_EXPRESSION
_POSITIV
t#500ms
_OPERAND
_EXPRESSION
_POSITIV
t#500ms
_EXPRESSION
_POSITIV
BLINK
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 2
_OUTPUT
_POSITIV
_NO_SET
Visual_1Hz
_OUTPUT
_POSITIV
_NO_SET
Blink_1_I
_NETWORK

_COMMENT
Zykluszähler
_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Zykluszaehler
_OPERAND
_EXPRESSION
_POSITIV
1
_EXPRESSION
_POSITIV
ADD
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Zykluszaehler

END_PROGRAM


(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM Betriebsarten

VAR
	FB_BetriebsartUmschalten1: 	BetriebsartUmschalten;
	FB_BetriebsartUmschalten2: 	BetriebsartUmschalten;
	Time_Enable:						TON;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 3
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
FB_BetriebsartUmschalten1
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
IN_FB_Betrieb
_OPERAND
_EXPRESSION
_POSITIV
IN_PC_Betrieb
_OPERAND
_EXPRESSION
_POSITIV
Sammelstoerung
_EXPRESSION
_POSITIV
BetriebsartUmschalten
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Betriebszustand_FB_ok
_NETWORK

_COMMENT

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
FB_BetriebsartUmschalten2
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
IN_PC_Betrieb
_OPERAND
_EXPRESSION
_POSITIV
IN_FB_Betrieb
_OPERAND
_EXPRESSION
_POSITIV
Sammelstoerung
_EXPRESSION
_POSITIV
BetriebsartUmschalten
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Betriebszustand_PC_ok
_NETWORK

_COMMENT
Antriebsfreigabe (Einmalige Freigabe muss zurueckgesetzt werden wenn Tuer offen -- noch nicht implementiert!)
_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
Time_Enable
_BOX_EXPR : 2
_OPERATOR
_BOX_EXPR : 3
_OPERAND
_EXPRESSION
_POSITIV
IN_Zusatz_Bremse_Z
_OPERAND
_EXPRESSION
_POSITIV
Leistung_Ein
_OPERATOR
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_FB_ok
_OPERAND
_EXPRESSION
_POSITIV
Betriebszustand_PC_ok
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
AND
_OPERAND
_EXPRESSION
_POSITIV
T#0s
_EXPRESSION
_POSITIV
TON
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
_EMPTY
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Soll_Freigabe

END_PROGRAM


(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM PLC_PRG

VAR
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 9
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTIONBLOCK
???
_BOX_EXPR : 0
_EXPRESSION
_POSITIV
Allgemein
_OUTPUTS : 0
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTIONBLOCK
???
_BOX_EXPR : 0
_EXPRESSION
_POSITIV
Betriebsarten
_OUTPUTS : 0
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTIONBLOCK
ID_Stoerungen
_BOX_EXPR : 0
_EXPRESSION
_POSITIV
Stoerungen
_OUTPUTS : 0
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTIONBLOCK
???
_BOX_EXPR : 0
_EXPRESSION
_POSITIV
AchseX
_OUTPUTS : 0
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTIONBLOCK
???
_BOX_EXPR : 0
_EXPRESSION
_POSITIV
AchseY
_OUTPUTS : 0
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTIONBLOCK
???
_BOX_EXPR : 0
_EXPRESSION
_POSITIV
AchseZ
_OUTPUTS : 0
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTIONBLOCK
???
_BOX_EXPR : 0
_EXPRESSION
_POSITIV
Ethernet
_OUTPUTS : 0
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTIONBLOCK
???
_BOX_EXPR : 0
_EXPRESSION
_POSITIV
Protokoll_SDO
_OUTPUTS : 0
_NETWORK

_COMMENT

_END_COMMENT
_FUNCTIONBLOCK
???
_BOX_EXPR : 0
_EXPRESSION
_POSITIV
Protokoll_PDO
_OUTPUTS : 0

END_PROGRAM


(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM Stoerungen

VAR_INPUT
END_VAR

VAR_OUTPUT
END_VAR

VAR
	ST_Not		:RS;
	ST_Vers		:RS;
	ST_X			:RS;
	ST_Y			:RS;
	ST_Z			:RS;
	ST_24V		:RS;
	ST_Brems		:RS;
END_VAR
(* @END_DECLARATION := '0' *)
_FBD_BODY
_NETWORKS : 4
_NETWORK

_COMMENT
Störung Leistung Antriebe

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
ST_Vers
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_NEGATIV
Leistung_DKC_IO
_OPERAND
_EXPRESSION
_POSITIV
Quitt
_EXPRESSION
_POSITIV
RS
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Stoerung_Leistung_Antriebe
_NETWORK

_COMMENT
Störung MSS Bremse

_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
ST_Brems
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_NEGATIV
Motorschutz_Bremse_IO
_OPERAND
_EXPRESSION
_POSITIV
Quitt
_EXPRESSION
_POSITIV
RS
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Stoerung_MSS_Bremse
_NETWORK

_COMMENT
Störung 24V



_END_COMMENT
_ASSIGN
_FUNCTIONBLOCK
ST_24V
_BOX_EXPR : 2
_OPERAND
_EXPRESSION
_NEGATIV
Ueberspannung_DC24V_IO
_OPERAND
_EXPRESSION
_POSITIV
Quitt
_EXPRESSION
_POSITIV
RS
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Stoerung_24V
_NETWORK

_COMMENT
Anzeige Stoerung

_END_COMMENT
_ASSIGN
_OPERATOR
_BOX_EXPR : 7
_OPERAND
_EXPRESSION
_NEGATIV
Not_aus_IO
_OPERAND
_EXPRESSION
_POSITIV
Stoerung_Leistung_Antriebe
_OPERAND
_EXPRESSION
_POSITIV
Stoerung_MSS_Bremse
_OPERAND
_EXPRESSION
_POSITIV
Stoerung_24V
_OPERAND
_EXPRESSION
_POSITIV
X_Fehler
_OPERAND
_EXPRESSION
_POSITIV
Y_Fehler
_OPERAND
_EXPRESSION
_POSITIV
Z_Fehler
_EXPRESSION
_POSITIV
OR
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
Sammelstoerung

END_PROGRAM

(* @PATH := '' *)
TYPE struct_ek_in_eco:
STRUCT
	statuswort					:WORD;
		{bitaccess	a_operating_mode_Bit0	 	  8		'Ist_Betriebsart_Bit0 / actual_operating mode_bit0'}
		{bitaccess	a_operating_mode_Bit1		  9		'Ist_Betriebsart_Bit1 / actual_operating mode_bit1'}
		{bitaccess	setpoint_acknowledge		10		'Sollwertquittierung / Setpoint_acknowledge'}
		{bitaccess	message_ZKL3				11		'Meldung_ZKL3 / Message_ZKL3'}
		{bitaccess	warning_ZKL2				12		'Warnung_ZKL2 / Warning_ZKL2'}
		{bitaccess	drive_Error_ZKL1				13		'Antriebsfehler_ZKL1 / Drive_Error_ZKL1'}
		{bitaccess	ready_to_operate_Bit0		14		'Betriebsbereit_Bit0 / Ready to operate_bit0'}
		{bitaccess	ready_to_operate_Bit1		15		'Betriebsbereit_Bit1 / Ready to operate_bit1'}
		{bitaccess	o_mode_acknowledge_Bit0	   0		'Betriebsmodus-Quittung_Bit0 / Operating mode-acknowledge_bit0'}
		{bitaccess	o_mode_acknowledge_Bit1	   1		'Betriebsmodus-Quittung_Bit0 / Operating mode-acknowledge_bit1'}
		{bitaccess	in_reference					   2		'Antrieb ist referenziert / In-reference'}
		{bitaccess	in_standstill					   3		'Antrieb steht / In-standstill'}
		{bitaccess	setpoint_reached				   4		'Sollwert erreicht / Setpoint reached'}
		{bitaccess	command_change_bit		   5		'1: wenn sich Kommandostatus geaendert hat / command change bit'}
		{bitaccess	operating_mode_error		   6		'1: Fehler im Umschaltkommando / operating mode-error'}
		{bitaccess	status_setpoint_process		   7		'1: Antrieb folgt der Sollwertvorgabe nicht / status setpoint processing'}
	pos_act					:DINT;		(*Istposition / actual position*)
	vel_act						:DINT;		(*Istgeschwindigkeit / actual velocity*)
	diagnosis					:WORD;	(*Diagnose des Antriebs, drive diagnosis*)
	signalstatuswort			:WORD;	(*Signalstatuswort*)
END_STRUCT
END_TYPE

(* Aus der DriveTop-Hilfe:
Aufbau von P-0-4078, Feldbus-Statuswort (Rexroth Indramat-Profile)

	Hinweis:	Die Bedeutung von Bit4 im P-0-4077, Feldbus-Steuerwort (Sollwert erreicht) ist abhängig vom Profiltyp.
				Bei Geschwindigkeitsregelung wird dort die Information "Solldrehzahl erreicht" abgebildet. Wohingegen bei
				Interpolation die Information "In-Position" abgebildet wird.

Statuswort für frei konfigurierbaren Modus (Rexroth Indramat-Profile)

Bit		Name							Bedeutung
0,1		Betriebsmodus-Quittung		10:  Phase4 (Betriebsmodus)
										01:  Phase3
										00:  Phase 2 (Parameteriermodus)
2		In-Referenz					1:  Antrieb ist referenziert         (S-0-0403, Bit0)
3		In-Stillstand					1:  Antrieb steht                          (S-0-0013, Bit1)
4		Sollwert erreicht				1:  Zielposition erreicht             (S-0-0182, Bit10)
										Ausnahmen:
									-Profiltyp Geschwindigkeitsregelung:
										1:  Solldrehzahl erreicht             (S-0-0013, Bit 0)
									- Profiltyp zyklische Lageregelung:
										1:  In-Position                               (S-0-0013, Bit 6)
5		Kommando-Änderungsbit	1:  wenn sich Kommandostatus geändert hat
										0:  wenn sich Kommandostatus nicht geändert hat
6		Betriebsmodus-Fehler		1:  Fehler im Umschaltkommando
										0:  kein Fehler im Umschaltkommando
7		Status Sollwertverarbeitung	1:  Antrieb folgt der Sollwertvorgabe nicht  (z.B. wenn Antrieb Halt aktiv )
										0:  Antrieb folgt der Sollwertvorgabe (z.B. AF) nicht aktiv
8, 9	Ist – Betriebsart				00:  Hauptbetriebsart
										01:  1. Nebenbetriebsart (z.B. Tippen)
										10:  2. Nebenbetriebsart
										11:  3. Nebenbetriebsart			(S-0-0135, Bit 8,9)
10		Sollwertquittung				Der Antrieb bestätigt durch das Toggeln des Bits (S-0-0419, Bit0) die Übernahme des S-0-0282, Positionier-Sollwert
11		Meldung ZKL3					Das Bit wird gesetzt, wenn eine Meldung der Zustandsklasse3 vorliegt
12		Warnung ZKL2				Das Bit wird gesetzt, wenn eine Warnung der Zustandsklasse2 vorliegt
13		Antriebsfehler ZKL1			Das Bit wird gesetzt, wenn ein Fehler der Zu-standsklasse1 ansteht (Antriebsverriegelung)		(S-0-0135, Bit 13)
14,	15	Betriebsbereit					00:  nicht bereit zur Leistungszuschaltung
										01:  bereit zur Leistungszuschaltung
										10:  Steuer- und Leistungsteil betriebsbereit und momentenfrei
										11:  In Betrieb, momentenbehaftet		(S-0-0135, Bit 14,15)
ZKL1:	Zustandsklasse 1
ZKL2:	Zustandsklasse 2
ZKL3:	Zustandsklasse 3
*)
(* @END_DECLARATION := '0' *)

(* @PATH := '' *)
TYPE struct_ek_out_eco :
STRUCT
	steuerwort					:WORD;
		{bitaccess	set_operating_mode_Bit0	  8		'Soll-Betriebsart Bit 0 / setpoint operating mode_bit0 '}
		{bitaccess	set_operating_mode_Bit1	  9		'Soll-Betriebsart Bit 1 / setpoint operating mode_bit1 '}
		{bitaccess	reserved						10		'Reserviert / reserved'}
		{bitaccess	reserved1						11		'Reserviert / reserved'}
		{bitaccess	IPOSYNC						12		'(nur bei zykl. Lageregelung / only in cycl. pos. control)'}
		{bitaccess	drive_halt						13		'Antrieb-Halt / drive halt'}
		{bitaccess	drive_enable					14		'Antrieb-Freigabe / drive enable'}
		{bitaccess	drive_on						15		'Antrieb-Ein / drive on'}
		{bitaccess	setpoint_acceptance			   0		'Sollwertuebernahme / setpoint acceptance'}
		{bitaccess	operating_mode_set			   1		'Betriebsmodus-Vorgabe / operating mode set'}
		{bitaccess	drive_to_zero_point			   2		'Nullfahren / drive to zero point'}
		{bitaccess	absolute_relative				   3		'Position Absolut ="0" oder Relativ = "1", position absolut = 0 or relativ = 1'}
		{bitaccess	immediate_block_change	   4		'1= sofort / 1 = immediate'}
		{bitaccess	error_delete					   5		'Fehler loeschen / clear error'}
		{bitaccess	jog_forward					   6		'Tippen vorwaerts / jog vorward'}
		{bitaccess	jog_backwards				   7		'Tippen rueckwaerts / jog backward'}
	pos_cmd					:DINT;		(*Soll-Position des Antriebs, Command position of the drive*)
	vel_cmd					:DINT;		(*Soll-Geschwindigkeit des Antriebs, Command velocity of the drive*)
	feedrate_override			:WORD;	(*Feedrate-Override *)
	signalsteuerwort			:WORD;	(*Signalsteuerwort*)
(*		{bitaccess	Signal_Absolutmasssetzen	96		''}*)
END_STRUCT
END_TYPE
(* Aus der DriveTop-Hilfe:
Aufbau von P-0-4077, Feldbus-Steuerwort (Rexroth Indramat-Profile)

Bit		Name							Bedeutung
0		Sollwertübernahme		bei einem Wechsel wird		(S-0-0346, Bit0)
										– ein Positioniersatz aktiviert
										– bzw. die Positionsvorgabe übernommen
1		Betriebsmodus-Vorgabe		0->1:  Wechsel in den Betriebsmodus
										1->0: Wechsel in den Parameteriermodus
2		Nullfahren						0->1:  Referenzierkommando "C6" starten		(S-0-0148 =11b)
										1->0:  Referenzierkommando "C6" beenden		(S-0-0148 = 0b)
3		Absolut / Relativ			(nur bei Verwendung von S-0-0282, Positionier-Sollwert wirksam)
										0:  S-0-0282, Positionier-Sollwert wird als absolute Zielposition im Antrieb verarbeitet
										1:  S-0-0282, Positionier-Sollwert wird als relativer Verfahrweg im Antrieb verarbeitet		(S-0-0393, Bit3)
4		Satzsofortwechsel		(nur bei Verwendung von S-0-0282, Positionier-Sollwert wirksam)
										0:  S-0-0282, Positioniervorgabe wird erst nach dem Erreichen der zuletzt aktiven Zielposition übernommen
										1:  S-0-0282, Positioniervorgabe wird sofort mit dem Toggeln der Sollwertübernahme übernommen	(S-0-0393, Bit4)
5		Fehler Löschen				0->1:  Fehlerlösch-Kommando "C5" starten	
										1->0:  Kommando "C5" beenden
6		Tippen vorwärts				1:  Tippen vorwärts	(P-0-4056, Bit0=1)
7		Tippen rückwärts				1:  Tippen rückwärts	(P-0-4056, Bit1=1)
8, 9	Soll – Betriebsart				00:  Hauptbetriebsart      (S-0-0134, Bit 8,9)
										01:  1. Nebenbetriebsart (z.B. Tippen)
										10:  2. Nebenbetriebsart
										11:  3. Nebenbetriebsart
10,11	Reserviert						--
12		IPOSYNC						Interpolator-Takt: (nur bei zykl. Lageregelung)
										toggelt wenn neue Sollwerte übertragen
13		Antrieb-Halt 					1->0:  Flanke führt zur Stillsetzung des Antriebes 						(S-0-0134, Bit 13)
14		Antrieb-Freigabe				1->0:  Flanke führt zur unverzögerten Drehmomentnullschaltung		(S-0-0134, Bit 14)
15		Antrieb-EIN					1->0:  Flanke führt zur Bestmöglichen Stillsetzung gemäß P-0-0119	(S-0-0134, Bit 15)
*)
(* @END_DECLARATION := '0' *)

(* @GLOBAL_VARIABLE_LIST := 'EA_Symbolik' *)
(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
VAR_GLOBAL

(* Eingänge *)
	Leistung_DKC_IO		 		AT%IX0.0:BOOL;		(* 1= Motorschutzschalter DKc´s sind IO *)
	Motorschutz_Bremse_IO			AT%IX0.1:BOOL;		(* 1= Motorschutzschalter Bremse ist IO *)
	Ueberspannung_DC24V_IO		AT%IX0.2:BOOL;		(* 1= Überspannungsschutz DC24V ist  IO *)
	Not_Aus_IO						AT%IX0.3:BOOL;		(* 1= Not-Aus ist IO *)
	Schutztueren_IO					AT%IX0.4:BOOL;		(* 1= Schutztüren sind IO *)
	Leistung_Ein						AT%IX0.5:BOOL;		(* 1= Leistung ist aktiv *)
	(*Vorortbetrieb						AT%IX0.6:BOOL;		(* 1= Schaltschrank ist Steuerquelle: Reglerfreigabe im LOCAL-mode || SPS ist AUS!!! *)*)
	Quitt								AT%IX0.7:BOOL;		(* 1= Störung quittieren  *)

	FB_soll_schwenk_auf	 		AT%IX1.0:BOOL;		(* 1= Befehl von Fernbedienung : Schwenken nach oben *)
	FB_soll_schwenk_ab	 			AT%IX1.1:BOOL;		(* 1= Befehl von Fernbedienung : Schwenken nach unten *)
	FB_soll_drehen_links	 		AT%IX1.3:BOOL;		(* 1= Befehl von Fernbedienung : Drehen nach links; war vorher auf IX1.2 *)
	FB_soll_drehen_rechts			AT%IX1.2:BOOL;		(* 1= Befehl von Fernbedienung : Drehen nach rechts; war vorher auf IX1.3 *)
	IN_FB_Betrieb					AT%IX1.4:BOOL;		(* 1= Fernbedienung ist Steuerquelle; siehe 7S1 *)
	IN_PC_Betrieb					AT%IX1.5:BOOL;		(* 1= PC ist Steuerquelle; siehe 7S1 *)
	IN_Zusatz_Bremse_Z			AT%IX1.6:BOOL;		(* Kontrolle der Zusatzbremse; siehe 8S3/8K3 *)
	Res_I1_7							AT%IX1.7:BOOL;		(* Reserve *)

	Res_I2_0					 		AT%IX2.0:BOOL;		(* Reserve *)
	Res_I2_1					 		AT%IX2.1:BOOL;		(* Reserve *)
	Res_I2_2		 					AT%IX2.2:BOOL;		(* Reserve *)
	Res_I2_3							AT%IX2.3:BOOL;		(* Reserve *)
	Res_I2_4							AT%IX2.4:BOOL;		(* Reserve *)
	Res_I2_5							AT%IX2.5:BOOL;		(* Reserve *)
	Res_I2_6							AT%IX2.6:BOOL;		(* Reserve *)
	Res_I2_7							AT%IX2.7:BOOL;		(* Reserve *)

(* Ausgänge *)
	Zusatz_Bremse_Z				AT%QX0.0:BOOL;		(* Reserve *)
	Res_O0_1						AT%QX0.1:BOOL;		(* Reserve *)
	Res_O0_2						AT%QX0.2:BOOL;		(* Reserve *)
	Res_O0_3						AT%QX0.3:BOOL;		(* Reserve *)
	Res_O0_4						AT%QX0.4:BOOL;		(* Reserve *)
	Res_O0_5						AT%QX0.5:BOOL;		(* Reserve *)
	Res_O0_6						AT%QX0.6:BOOL;		(* Reserve *)
	Visual_1Hz						AT%QX0.7:BOOL;		(* Reserve *)

	Res_O1_0				 		AT%QX1.0:BOOL;		(* Reserve *)
	Res_O1_1				 		AT%QX1.1:BOOL;		(* Reserve *)
	Res_O1_2			 			AT%QX1.2:BOOL;		(* Reserve *)
	Res_O1_3						AT%QX1.3:BOOL;		(* Reserve *)
	Res_O1_4						AT%QX1.4:BOOL;		(* Reserve *)
	Res_O1_5						AT%QX1.5:BOOL;		(* Reserve *)
	Res_O1_6						AT%QX1.6:BOOL;		(* Reserve *)
	Res_O1_7						AT%QX1.7:BOOL;		(* Reserve *)
END_VAR

(* @OBJECT_END := 'EA_Symbolik' *)
(* @CONNECTIONS := EA_Symbolik
FILENAME : ''
FILETIME : 0
EXPORT : 0
NUMOFCONNECTIONS : 0
*)

(* @GLOBAL_VARIABLE_LIST := 'Globale_Variablen' *)
(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
VAR_GLOBAL CONSTANT
	a_operating_mode_Bit0		:INT:=8;
	a_operating_mode_Bit1		:INT:=9;
	setpoint_acknowledge		:INT:=10;
	message_ZKL3				:INT:=11;
	warning_ZKL2				:INT:=12;
	drive_Error_ZKL1				:INT:=13;
	ready_to_operate_Bit0		:INT:=14;
	ready_to_operate_Bit1		:INT:=15;
	o_mode_acknowledge_Bit0	:INT:=0;
	o_mode_acknowledge_Bit1	:INT:=1;
	in_reference					:INT:=2;
	in_standstill					:INT:=3;
	setpoint_reached				:INT:=4;
	command_change_bit		:INT:=5;
	operating_mode_error		:INT:=6;
	status_setpoint_process		:INT:=7;

	set_operating_mode_Bit0	:INT:=8;
	set_operating_mode_Bit1	:INT:=9;
	reserved						:INT:=10;
	reserved1						:INT:=11;
	IPOSYNC						:INT:=12;
	drive_halt						:INT:=13;
	drive_enable					:INT:=14;
	drive_on						:INT:=15;
	setpoint_acceptance			:INT:=0;			(*????!!!!! WHY???*)
	operating_mode_set			:INT:=1;
	drive_to_zero_point			:INT:=2;
	absolute_relative				:INT:=3;
	immediate_block_change	:INT:=4;
	error_delete					:INT:=5;
	jog_forward					:INT:=6;
	jog_backwards				:INT:=7;

	Signal_Absolutmasssetzen	:INT:=96;

(* IP Communication parameters *)
	IP_Address:						UDINT :=16#C0A80003;							(* IP Address to send the data to *)
	Socket_Out_Port:					WORD := 5358;									(* Port to send the data to *)
	Socket_In_Port:					WORD := 5357;									(* Port to listen at *)

(*NODE_IDs*)
	NODE_ID_Mac_Az:				BYTE	:=   1;
	NODE_ID_Mac_Zd:				BYTE	:=   3;
	NODE_ID_SE_Az:					BYTE	:= 16;
	NODE_ID_SE_Zd1:				BYTE	:= 17;
	NODE_ID_SE_Zd2:				BYTE	:= 18;

(* Zeitverzoegerung zur Brermsfreigabe nach Leistung_ein; war t#1s *)
	DelayTime_Brake:				TIME 	:=T#1s;									(*Zeitverzoegerung zur Brermsfreigabe nach Leistung_ein; war t#1s*)

(* Gear Ratio as set in DKC -- to be read from DKC via SDO *)
	X_Gear:							UINT 	:= 1340;
	Z_Gear: 							UINT 	:=        1;

(* Aceleration values for both axes in remote control mode *)
	X_HandBeschl:					UDINT	:=   12600;					  				(*Skalierung 10^-3, war 25000, max 50000 bei 3000rpm*)
	Z_HandBeschl:					UDINT	:=   12600;									(* War 50000*)

(* Output resolution of the Motor and Shaftencoder values, as the output and DKC velocity scale *)
	RotationalPositionResolution:	UDINT :=  360000;								(*S-0-0079 from DKC*)
	ShaftEncoderResolution:			UDINT :=  RotationalPositionResolution;		(*14: (*14 Bit Resolution = 16384 ticks*)*)
	RotaryEncoderResolution:		UDINT	:=  1500;									(*RotationalPositionResolution; 		 	(* 9;	(*9 Bit Resolution = 512 ticks*)*)*)
	MaximumVelocity:					UINT 	:=  3000; 									(*Einheit ist U/min, analog zu VELMAX in den MACS*)
	DKC_Velocity_Scale:				UINT	:= 10000;									(*0.0001U/min*)
	VelocityResolution:				UDINT := 30000000;								(*DKC_Velocity_Scale*MaximumVelocity*)

(* Maximum velocity to initialize with *)
	PC_V_max_START:				DINT 	:= 45000000;

(* An arbitrary factor coming from an oddity of the MACS *)
	ArbitraryMACFactor:				BYTE 	:= 4;										(*No longer in use for velocity*)
END_VAR
(* @OBJECT_END := 'Globale_Variablen' *)
(* @CONNECTIONS := Globale_Variablen
FILENAME : ''
FILETIME : 0
EXPORT : 0
NUMOFCONNECTIONS : 0
*)

(* @GLOBAL_VARIABLE_LIST := 'Globale_Variablen_EcoDrive_X' *)
(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
VAR_GLOBAL

(* Daten X-Achse *)
	X_Pos_soll			:DINT;		(* Sollposition X-Achse für Positionierung *)
	X_Vel_soll				:DINT;		(* Sollvorgabe Geschwindigkeit *)
	X_Pos_ist				:DINT;		(* Istposition X-Achse *)
	X_Vel_ist				:DINT;		(* Istgeschwindigkeit X-Achse *)
	X_Err_ID				:WORD;	(* Fehler Nr. ECo-Drive *)
	X_Pos_Fenster		:DINT;
	X_Pos_Geber2		:DINT;

(*Allgemein für Drive 01 - Ecodrive*)
	X_Fehler				:BOOL;		(* 1= Regler meldet über Profibus Störung *)
	X_StandStill			:BOOL;		(* 1= Regler meldet Stillstand  *)
	X_Pos_Start			:BOOL;		(* 1= Positionierung starten Achse X 	*)
	X_Pos_ready			:BOOL;		(* 1= Positionierung fertig Achse X 	*)
	X_Pos_active			:BOOL;		(* 1= Positionierung aktiv Achse X 	*)
	X_Auto_Start			:BOOL;		(* 1= Auto Positionieren Start X *)
	X_Jog_pos			:BOOL;		(* 1= Tippen Achse X pos *)
	X_Jog_neg			:BOOL;		(* 1= Tippen Achse X neg *)
	X_Homing				:BOOL;		(* 1= Anrtieb referenzieren aktiv *)
	X_in_pos				:BOOL;		(* 1= Anrtieb in Position *)
	X_ist_freigegeben	:BOOL;		(* 1= Anrtieb Rückmeldung Freigabe *)
	X_in_Ref				:BOOL;		(* 1= Anrtieb Rückmeldung in Referenz *)
	X_in_Standstill		:BOOL;		(* 1= Anrtieb Rückmeldung in Stillstand *)
	X_ist_betriebsbereit	:BOOL;
	X_in_AntriebHalt: BOOL;
	X_PC_StartMovement: BOOL;
END_VAR

(* @OBJECT_END := 'Globale_Variablen_EcoDrive_X' *)
(* @CONNECTIONS := Globale_Variablen_EcoDrive_X
FILENAME : ''
FILETIME : 0
EXPORT : 0
NUMOFCONNECTIONS : 0
*)

(* @GLOBAL_VARIABLE_LIST := 'Globale_Variablen_EcoDrive_Y' *)
(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
VAR_GLOBAL

(* Daten X-Achse *)

(*Allgemein für Drive 01 - Ecodrive*)
	Y_Fehler				:BOOL;		(* 1= Regler meldet über Profibus Störung *)
	Y_ist_freigegeben	:BOOL;		(* 1= Anrtieb Rückmeldung Freigabe *)
	Y_in_Standstill		:BOOL;		(* 1= Anrtieb Rückmeldung in Stillstand *)
	Y_ist_betriebsbereit	:BOOL;
END_VAR

(* @OBJECT_END := 'Globale_Variablen_EcoDrive_Y' *)
(* @CONNECTIONS := Globale_Variablen_EcoDrive_Y
FILENAME : ''
FILETIME : 0
EXPORT : 0
NUMOFCONNECTIONS : 0
*)

(* @GLOBAL_VARIABLE_LIST := 'Globale_Variablen_EcoDrive_Z' *)
(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
VAR_GLOBAL

(* Daten X-Achse *)
	Z_Pos_soll			:DINT;		(* Sollposition X-Achse für Positionierung *)
	Z_Vel_soll				:DINT;		(* Sollvorgabe Geschwindigkeit *)
	Z_Pos_ist				:DINT;		(* Istposition X-Achse *)
	Z_Vel_ist				:DINT;		(* Istgeschwindigkeit X-Achse *)
	Z_Err_ID				:WORD;	(* Fehler Nr. ECo-Drive *)
	Z_Pos_Fenster		:DINT;
	Z_Pos_Geber2		:DINT;

(*Allgemein für Drive 01 - Ecodrive*)
	Z_Fehler				:BOOL;		(* 1= Regler meldet über Profibus Störung *)
	Z_StandStill			:BOOL;		(* 1= Regler meldet Stillstand *)
	Z_Pos_Start			:BOOL;		(* 1= Positionierung starten Achse X *)
	Z_Pos_ready			:BOOL;		(* 1= Positionierung fertig Achse X *)
	Z_Pos_active			:BOOL;		(* 1= Positionierung aktiv Achse X *)
	Z_Auto_Start			:BOOL;		(* 1= Auto Positionieren Start X *)
	Z_Jog_pos			:BOOL;		(* 1= Tippen Achse X pos *)
	Z_Jog_neg			:BOOL;		(* 1= Tippen Achse X neg *)
	Z_in_pos				:BOOL;		(* 1= Anrtieb in Position *)
	Z_ist_freigegeben	:BOOL;		(* 1= Anrtieb Rückmeldung Freigabe *)
	Z_in_Ref				:BOOL;		(* 1= Anrtieb Rückmeldung in Referenz *)
	Z_in_Standstill		:BOOL;		(* 1= Anrtieb Rückmeldung in Stillstand *)
	Z_ist_betriebsbereit	:BOOL;
	Z_PC_StartMovement: BOOL;
END_VAR

(* @OBJECT_END := 'Globale_Variablen_EcoDrive_Z' *)
(* @CONNECTIONS := Globale_Variablen_EcoDrive_Z
FILENAME : ''
FILETIME : 0
EXPORT : 0
NUMOFCONNECTIONS : 0
*)

(* @GLOBAL_VARIABLE_LIST := 'GlobaleVariablen' *)
(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
 VAR_GLOBAL

(* 	Störungen		*)
	Stoerung_24V:					BOOL;		(*	1= Störung Sicherung 24V *)
	Stoerung_Leistung_Antriebe:	BOOL;		(*	1= Stoerung Leistung Antriebe; corresponds to blown switch 3Q1 *)
	Stoerung_MSS_Bremse:			BOOL;		(*	1= Störung MSS Bremse	*)
	Sammelstoerung:					BOOL;		(*	1= Sammelstoerung ist aktiv	*)

(*	Blinktakte		*)
	Blink_1_I:							BOOL;		(*	Blinktakt 1Hz Impuls	*)

(*  Ethernet *)
	ListenSock:						DINT;
	SendSock:							DINT;
	NeueDatenDa:					BOOL;
	DatenSenden:						BOOL;
	ZyklischeDatenSenden:			BOOL;
	ByteBufferRX: 						ARRAY[0..99] OF BYTE;
	ByteBufferTX: 						ARRAY[0..99] OF BYTE;
	ByteBufferTXzyklisch:				ARRAY[0..99] OF BYTE;

(*  PC-Daten  *)
	X_EinmaligeFreigabe:			BOOL;
	Z_EinmaligeFreigabe:			BOOL;
	Zykluszaehler:						DINT;
	X_PC_PosGeschwindigkeit:		DINT;
	X_PC_PosBeschleunigung:		DINT;
	X_PC_PosVerzoegerung:			DINT;
	X_PC_PosZiel:					DINT;
	X_PC_VGeschwindigkeit:			DINT;
	X_PC_VStart:						BOOL;
	X_PC_Maximalgeschwindigkeit:	DINT;
	Z_PC_PosGeschwindigkeit:		DINT;
	Z_PC_PosBeschleunigung:		DINT;
	Z_PC_PosVerzoegerung:			DINT;
	Z_PC_PosZiel:					DINT;
	Z_PC_VGeschwindigkeit:			DINT;
	Z_PC_VStart:						BOOL;
	Z_PC_Maximalgeschwindigkeit:	DINT;
	Betriebszustand_FB_ok: 			BOOL;
	Betriebszustand_PC_ok: 			BOOL;
	Soll_Freigabe: 					BOOL;
	X_PC_PosRelative: 				BOOL;
	Z_PC_PosRelativ: 				BOOL;
	X_PC_AntriebHalt: 				BOOL := TRUE;
	Z_PC_AntriebHalt: 				BOOL := TRUE;
	Z_in_AntriebHalt: 					BOOL;
	X_in_Referenz: 					BOOL;
	Z_in_Referenz: 					BOOL;
END_VAR

(* Die folgenden Variablen sind netzausfallsicher gespeichert *)
VAR_GLOBAL RETAIN PERSISTENT
	X_Offset_Geber2:					DINT;
	Y_Offset_Geber2:					DINT;
	Z_Offset_Geber2:					DINT;
END_VAR
(* @OBJECT_END := 'GlobaleVariablen' *)
(* @CONNECTIONS := GlobaleVariablen
FILENAME : ''
FILETIME : 0
EXPORT : 0
NUMOFCONNECTIONS : 0
*)


_ALARMCONFIG
_ALARMCONFIGNEXTTEXTID : 10002
_ALARMCONFIGFORMATS : 'hh$':$'mm$':$'ss','dd$'-$'MM$'-$'yyyy'
_ALARMCLASSLIST : 1
_ALARMCLASSID : 0
_ALARMCLASSACKTYPE : 0
_ALARMCLASSNAME : 'DEFAULT'
_ALARMCLASSDESCRIPTION : ''
_ALARMCLASSBGCOLORS : 16777215,16777215,16777215
_ALARMCLASSTEXTCOLORS : 3394560,255,16711680
_ALARMCLASSBITMAPS : '','',''
_ALARMACTIONLIST : 0
_ALARMGROUPLISTNAME : 'System'
_ALARMGROUPPATH : 'System'
_ALARMGROUPLIST : 0
_VISUALSETTINGSFLAGS : 0,0,0,0
_VISUALSETTINGSFLAGS : '','English',''
_VISUALSETTINGSDYNTEXTFILECOUNT : 0

_END_ALARMCONFIG


LIBRARY
Iecsfc.lib 28.10.05 07:59:00
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 1
SFCActionControl: 0
NumOfGVLs: 1
Globale_Variablen: 0
END_LIBRARY

LIBRARY
oscat14.lib 8.2.07 14:40:30
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 203
_array_init: 2048
_array_median: 2048
_array_sort: 2048
acosH: 2048
acotH: 2048
actuator_2P: 2048
actuator_3P: 2048
actuator_pump: 2048
actuator_UD: 2048
AIN: 2048
Aout: 2048
array_avg: 2048
array_max: 2048
array_min: 2048
array_spr: 2048
array_sum: 2048
array_trend: 2048
asinH: 2048
atanH: 2048
B_TRIG: 2048
Bit_of_Dword: 2048
Burner: 2048
Byte_of_bit: 2048
Byte_of_Dword: 2048
Byte_to_Bit: 2048
C_to_F: 2048
C_to_K: 2048
Calibrate: 2048
check_parity: 2048
CHR: 2048
CLK_1ms: 2048
CLK_2ms: 2048
CLK_4ms: 2048
CLK_8ms: 2048
clk_div: 2048
CLK_Prg: 2048
CLK_Pulse: 2048
cosH: 2048
cotH: 2048
cycle_time: 2048
date_add: 2048
day_of_month: 2048
day_of_year: 2048
day_to_time: 2048
days_delta: 2048
DCF77: 2048
DEC_2: 2048
DEC_4: 2048
DEC_8: 2048
deg: 2048
delay: 2048
delay_4: 2048
dew_temp: 2048
differ: 2048
dimm_i: 2048
DST: 2048
DWord_of_Byte: 2048
DWORD_To_STRF: 2048
easter: 2048
ESR_collect: 2048
ESR_MON_B8: 2048
ESR_MON_R4: 2048
ESR_MON_X8: 2048
even: 2048
exec: 2048
F_lin: 2048
F_Lin2: 2048
F_power: 2048
F_quad: 2048
F_to_C: 2048
F_to_OM: 2048
F_to_PT: 2048
fact: 2048
FF_D2E: 2048
FF_D4E: 2048
FF_DRE: 2048
FF_JKE: 2048
FIFO_16: 2048
FIFO_32: 2048
find_nonum: 2048
find_Num: 2048
FindB: 2048
findB_nonum: 2048
findB_Num: 2048
fract: 2048
FT_avg: 2048
FT_deriv: 2048
FT_IMP: 2048
FT_INT: 2048
FT_min_max: 2048
FT_PID: 2048
FT_PT1: 2048
FT_PT2: 2048
FT_rmp: 2048
FT_TN16: 2048
FT_TN64: 2048
FT_TN8: 2048
gen_bit: 2048
gen_sin: 2048
gen_SQ: 2048
gen_sqr: 2048
Heat_temp: 2048
holiday: 2048
hour: 2048
hour_to_time: 2048
hour_to_tod: 2048
hyst_1: 2048
hyst_2: 2048
Hyst_3: 2048
inc_dec: 2048
K_to_C: 2048
leap_of_Date: 2048
leap_year: 2048
legionella: 2048
local_time: 2048
lowercase: 2048
LTCH: 2048
LTCH_4: 2048
Ltime: 2048
m_t: 2048
m_tx: 2048
max3: 2048
mid3: 2048
min3: 2048
minute: 2048
minute_to_time: 2048
modR: 2048
month: 2048
multi_in: 2048
multime: 2048
mux_2: 2048
mux_4: 2048
MUX_R2: 2048
MUX_R4: 2048
Offset: 2048
Offset2: 2048
OM_to_F: 2048
ontime: 2048
Oscat_version: 2048
parity: 2048
PT_to_F: 2048
pwm_dc: 2048
pwm_pw: 2048
Rad: 2048
RDM: 2048
Real_To_StrF: 2048
Res_NI: 2048
Res_PT: 2048
Res_SI: 2048
rmp_B: 2048
rmp_soft: 2048
rmp_W: 2048
round: 2048
scale_B2: 2048
scale_B4: 2048
scale_B8: 2048
scale_X2: 2048
scale_X4: 2048
scale_X8: 2048
second: 2048
second_to_time: 2048
Sensor_Int: 2048
sequence_4: 2048
sequence_8: 2048
set_Date: 2048
set_DT: 2048
set_Tod: 2048
SH: 2048
SH_1: 2048
SH_2: 2048
SH_T: 2048
SHR_4E: 2048
SHR_4UDE: 2048
SHR_8PLE: 2048
SHR_8UDE: 2048
sign_I: 2048
sign_R: 2048
sinH: 2048
sqrtn: 2048
STACK_16: 2048
STACK_32: 2048
stair: 2048
stair2: 2048
status_to_ESR: 2048
sun_pos: 2048
sun_time: 2048
switch_I: 2048
tanH: 2048
temp_ext: 2048
Temp_NI: 2048
Temp_PT: 2048
Temp_SI: 2048
timer_1: 2048
timer_2: 2048
TP_R: 2048
trim: 2048
uppercase: 2048
weekday: 2048
window: 2048
Word_of_Byte: 2048
Word_of_Dword: 2048
work_week: 2048
year: 2048
NumOfGVLs: 3
Constants: 2048
Globale_Variablen: 2048
Setup_Data: 2048
END_LIBRARY

LIBRARY
RIL_Check.lib 20.1.05 13:40:00
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 8
CheckBounds: 2048
CheckDivByte: 2048
CheckDivDWord: 2048
CheckDivReal: 2048
CheckDivWord: 2048
CheckRangeSigned: 2048
CheckRangeUnsigned: 2048
VERSION_RIL_CHECK_01V02: 2048
NumOfGVLs: 1
Globale_Variablen_RIL_Check: 2048
END_LIBRARY

LIBRARY
RIL_CommonTypes.lib 14.6.05 09:08:58
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 1
Version_RIL_CommonTypes_02V02: 2048
NumOfGVLs: 2
Globale_Variablen: 2048
SercosAttribute: 2048
END_LIBRARY

LIBRARY
RIL_UTILITIES.lib 31.3.05 11:30:44
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 34
IL_AsciiToByte: 2048
IL_BoolToByte: 2048
IL_BoolToDWord: 2048
IL_BoolToWord: 2048
IL_ByteToAscii: 2048
IL_ByteToBool: 2048
IL_ByteToDWord: 2048
IL_ConcatByte: 2048
IL_ConcatWord: 2048
IL_Date: 2048
IL_DateAndTime: 2048
IL_DWordToBool: 2048
IL_DWordToByte: 2048
IL_ExtSysTimeDate: 2048
IL_HighByte: 2048
IL_HighResTimeDiff: 2048
IL_HighResTimeTick: 2048
IL_HighWord: 2048
IL_LowByte: 2048
IL_LowWord: 2048
IL_RealToString: 2048
IL_SercosAttribute: 2048
IL_SercosElementsToParaNo: 2048
IL_SercosStringToParaNo: 2048
IL_SwapDWord: 2048
IL_SwapWord: 2048
IL_SysTime64: 2048
IL_SysTime64ToSysTimeDate: 2048
IL_SysTimeDate: 2048
IL_SysTimeDateToSysTime64: 2048
IL_TimeOfDay: 2048
IL_Toggle: 2048
IL_WordToBool: 2048
Version_RIL_Utilities_01V02: 2048
NumOfGVLs: 1
Globale_Variablen: 2048
END_LIBRARY

LIBRARY
Standard.lib 28.10.05 07:59:00
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 21
CONCAT: 0
CTD: 0
CTU: 0
CTUD: 0
DELETE: 0
F_TRIG: 0
FIND: 0
INSERT: 0
LEFT: 0
LEN: 0
MID: 0
R_TRIG: 0
REPLACE: 0
RIGHT: 0
RS: 0
RTC: 0
SEMA: 0
SR: 0
TOF: 0
TON: 0
TP: 0
NumOfGVLs: 0
END_LIBRARY

LIBRARY
SYSLIBCALLBACK.LIB 28.10.05 07:59:00
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 2
SysCallbackRegister: 0
SysCallbackUnregister: 0
NumOfGVLs: 0
END_LIBRARY

LIBRARY
SysLibSockets.lib 28.10.05 07:59:00
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 25
SysSockAccept: 0
SysSockBind: 0
SysSockClose: 0
SysSockConnect: 0
SysSockCreate: 0
SysSockGetHostByName: 0
SysSockGetHostName: 0
SysSockGetLastError: 2048
SysSockGetOption: 0
SysSockHtonl: 0
SysSockHtons: 0
SysSockInetAddr: 0
SysSockInetNtoa: 0
SysSockIoctl: 0
SysSockListen: 0
SysSockNtohl: 0
SysSockNtohs: 0
SysSockRecv: 0
SysSockRecvFrom: 0
SysSockSelect: 0
SysSockSend: 0
SysSockSendTo: 0
SysSockSetIPAddress: 0
SysSockSetOption: 0
SysSockShutdown: 0
NumOfGVLs: 1
Globale_Variablen: 0
END_LIBRARY

LIBRARY
SysLibSocketsAsync.lib 28.10.05 07:59:00
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 25
SysSockAcceptAsync: 2048
SysSockBindAsync: 2048
SysSockCloseAllOpenAsync: 2048
SysSockCloseAsync: 2048
SysSockConnectAsync: 2048
SysSockCreateAsync: 2048
SysSockGetHostByNameAsync: 2048
SysSockGetHostNameAsync: 2048
SysSockGetOptionAsync: 2048
SysSockHtonlAsync: 2048
SysSockHtonsAsync: 2048
SysSockInetAddrAsync: 2048
SysSockInetNtoaAsync: 2048
SysSockIoctlAsync: 2048
SysSockListenAsync: 2048
SysSockNtohlAsync: 2048
SysSockNtohsAsync: 2048
SysSockRecvAsync: 2048
SysSockRecvFromAsync: 2048
SysSockSelectAsync: 2048
SysSockSendAsync: 2048
SysSockSendToAsync: 2048
SysSockSetIPAddressAsync: 2048
SysSockSetOptionAsync: 2048
SysSockShutdownAsync: 2048
NumOfGVLs: 1
Globale_Variablen: 0
END_LIBRARY

LIBRARY
SysLibTime.lib 28.10.05 07:59:00
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 2
CurTime: 0
CurTimeEx: 0
NumOfGVLs: 1
Globale_Variablen: 0
END_LIBRARY

LIBRARY
SysTaskInfo.lib 28.10.05 07:59:00
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 1
taskinfo: 0
NumOfGVLs: 1
Globale_Variablen: 0
END_LIBRARY

LIBRARY
Util.lib 28.10.05 07:59:00
(* @LIBRARYSYMFILEINFO := '0' *)
NumOfPOUs: 24
BCD_TO_INT: 2048
BLINK: 2048
CHARCURVE: 2048
DERIVATIVE: 2048
EXTRACT: 2048
FREQ_MEASURE: 2048
GEN: 2048
HYSTERESIS: 2048
INT_TO_BCD: 2048
INTEGRAL: 2048
LIMITALARM: 2048
LIN_TRAFO: 2048
PACK: 2048
PD: 2048
PID: 2048
PID_FIXCYCLE: 2048
PUTBIT: 2048
RAMP_INT: 2048
RAMP_REAL: 2048
STATISTICS_INT: 2048
STATISTICS_REAL: 2048
UNPACK: 2048
VARIANCE: 2048
Version_Util: 2048
NumOfGVLs: 1
Globale_Variablen: 0
END_LIBRARY

PLC_CONFIGURATION
_GLOBAL
_VERSION: 3
_AUTOADR: 0
_CHECKADR: 1
_SAVECONFIGFILESINPROJECT: 0
_END_GLOBAL

_MODULE: '3S'
_SECTION_NAME: 'Root'
_INDEX_IN_PARENT: '-1'
_MODULE_NAME: 'IndraLogic L20 DP 03VRS'
_NODE_ID: -1
_IECIN: %IB0
_IECOUT: %QB0
_IECDIAG: %MB0
_DOWNLOAD: 1
_EXCLUDEFROMAUTOADR: 0
_COMMENT: ''

_MODULE: '3S'
_SECTION_NAME: 'OnBoardIO'
_INDEX_IN_PARENT: '1'
_MODULE_NAME: 'Onboard-IO'
_NODE_ID: 1
_IECIN: %IB0
_IECOUT: %QB0
_IECDIAG: %MB0
_DOWNLOAD: 1
_EXCLUDEFROMAUTOADR: 0
_COMMENT: ''

_CHANNEL
_SECTION_NAME: 'I8'
_INDEX_IN_PARENT: '1'
_SYMBOLIC_NAME: ''
_COMMENT: ''
_CHANNEL_MODE: 'I'
_IECADR: %IB0
_BIT 0: %IX0.0 '' ' '
_BIT 1: %IX0.1 '' ' '
_BIT 2: %IX0.2 '' ''
_BIT 3: %IX0.3 '' ' '
_BIT 4: %IX0.4 '' ''
_BIT 5: %IX0.5 '' ' '
_BIT 6: %IX0.6 '' ''
_BIT 7: %IX0.7 '' ' '
_END_CHANNEL

_CHANNEL
_SECTION_NAME: 'O8'
_INDEX_IN_PARENT: '2'
_SYMBOLIC_NAME: ''
_COMMENT: ''
_CHANNEL_MODE: 'Q'
_IECADR: %QB0
_BIT 0: %QX0.0 '' ' '
_BIT 1: %QX0.1 '' ' '
_BIT 2: %QX0.2 '' ' '
_BIT 3: %QX0.3 '' ' '
_BIT 4: %QX0.4 '' ''
_BIT 5: %QX0.5 '' ' '
_BIT 6: %QX0.6 '' ' '
_BIT 7: %QX0.7 '' ''
_END_CHANNEL
_END_MODULE

_MODULE: '3S'
_SECTION_NAME: 'InlineIO'
_INDEX_IN_PARENT: '2'
_MODULE_NAME: 'InlineIO'
_NODE_ID: 2
_IECIN: %IB0
_IECOUT: %QB0
_IECDIAG: %MB0
_DOWNLOAD: 1
_EXCLUDEFROMAUTOADR: 0
_COMMENT: ''

_MODULE: '3S'
_SECTION_NAME: 'InlineIO-IL 24 DI 8'
_INDEX_IN_PARENT: '1'
_MODULE_NAME: 'R-IB IL 24 DI 8'
_NODE_ID: 1
_IECIN: %IB1
_IECOUT: %QB0
_IECDIAG: %MB0
_DOWNLOAD: 1
_EXCLUDEFROMAUTOADR: 0
_COMMENT: ''

_CHANNEL
_SECTION_NAME: 'IB8'
_INDEX_IN_PARENT: '0'
_SYMBOLIC_NAME: ''
_COMMENT: ''
_CHANNEL_MODE: 'I'
_IECADR: %IB1
_BIT 0: %IX1.0 '' ' '
_BIT 1: %IX1.1 '' ' '
_BIT 2: %IX1.2 '' ' '
_BIT 3: %IX1.3 '' ''
_BIT 4: %IX1.4 '' ' '
_BIT 5: %IX1.5 '' ''
_BIT 6: %IX1.6 '' ''
_BIT 7: %IX1.7 '' ' '
_END_CHANNEL
_END_MODULE

_MODULE: '3S'
_SECTION_NAME: 'InlineIO-IL 24 DI 8'
_INDEX_IN_PARENT: '1'
_MODULE_NAME: 'R-IB IL 24 DI 8'
_NODE_ID: 2
_IECIN: %IB2
_IECOUT: %QB0
_IECDIAG: %MB0
_DOWNLOAD: 1
_EXCLUDEFROMAUTOADR: 0
_COMMENT: ''

_CHANNEL
_SECTION_NAME: 'IB8'
_INDEX_IN_PARENT: '0'
_SYMBOLIC_NAME: ''
_COMMENT: ''
_CHANNEL_MODE: 'I'
_IECADR: %IB2
_BIT 0: %IX2.0 '' ''
_BIT 1: %IX2.1 '' ''
_BIT 2: %IX2.2 '' ''
_BIT 3: %IX2.3 '' ''
_BIT 4: %IX2.4 '' ''
_BIT 5: %IX2.5 '' ''
_BIT 6: %IX2.6 '' ''
_BIT 7: %IX2.7 '' ''
_END_CHANNEL
_END_MODULE

_MODULE: '3S'
_SECTION_NAME: 'InlineIO-IL 24 DO 8'
_INDEX_IN_PARENT: '1'
_MODULE_NAME: 'R-IB IL 24 DO 8'
_NODE_ID: 3
_IECIN: %IB0
_IECOUT: %QB1
_IECDIAG: %MB0
_DOWNLOAD: 1
_EXCLUDEFROMAUTOADR: 0
_COMMENT: ''

_CHANNEL
_SECTION_NAME: 'QB8'
_INDEX_IN_PARENT: '0'
_SYMBOLIC_NAME: ''
_COMMENT: ''
_CHANNEL_MODE: 'Q'
_IECADR: %QB1
_BIT 0: %QX1.0 '' ''
_BIT 1: %QX1.1 '' ''
_BIT 2: %QX1.2 '' ''
_BIT 3: %QX1.3 '' ''
_BIT 4: %QX1.4 '' ''
_BIT 5: %QX1.5 '' ''
_BIT 6: %QX1.6 '' ''
_BIT 7: %QX1.7 '' ''
_END_CHANNEL
_END_MODULE

_MODULE: '3S'
_SECTION_NAME: 'InlineIO-IL AO 2/U/BP'
_INDEX_IN_PARENT: '1'
_MODULE_NAME: 'R-IB IL AO 2/U/BP'
_NODE_ID: 4
_IECIN: %IW4
_IECOUT: %QW2
_IECDIAG: %MB0
_DOWNLOAD: 1
_EXCLUDEFROMAUTOADR: 0
_COMMENT: ''

_CHANNEL
_SECTION_NAME: 'AnalogO_W'
_INDEX_IN_PARENT: '0'
_SYMBOLIC_NAME: ''
_COMMENT: ''
_CHANNEL_MODE: 'Q'
_IECADR: %QW2
_END_CHANNEL

_CHANNEL
_SECTION_NAME: 'AnalogO_W'
_INDEX_IN_PARENT: '1'
_SYMBOLIC_NAME: ''
_COMMENT: ''
_CHANNEL_MODE: 'Q'
_IECADR: %QW4
_END_CHANNEL

_CHANNEL
_SECTION_NAME: 'AnalogI_W'
_INDEX_IN_PARENT: '0'
_SYMBOLIC_NAME: ''
_COMMENT: ''
_CHANNEL_MODE: 'I'
_IECADR: %IW4
_END_CHANNEL

_CHANNEL
_SECTION_NAME: 'AnalogI_W'
_INDEX_IN_PARENT: '1'
_SYMBOLIC_NAME: ''
_COMMENT: ''
_CHANNEL_MODE: 'I'
_IECADR: %IW6
_END_CHANNEL
_END_MODULE
_END_MODULE

_MODULE: 'DPMASTER'
_SECTION_NAME: 'DpMaster'
_INDEX_IN_PARENT: '3'
_MODULE_NAME: 'L20 DP-Master'
_NODE_ID: 3
_IECIN: %IB1
_IECOUT: %QB1
_IECDIAG: %MB0
_DOWNLOAD: 1
_EXCLUDEFROMAUTOADR: 0
_COMMENT: ''

_DEVICESPECIFIC_DATA
_GSD_FILENAME: 'RX010162.gsd'
_STATIONNUMBER: 1
_HIGHEST_STATIONNUMBER: 12
_NUM_OF_CONNECTED_SLAVES: 3
_BAUDRATE: 7
_AUTOCLEAR: 0
_AUTOSTART: 1
_OPTIMIZE_TIMING_VALUES: 1
_NUM_OF_TIMINGVALUES: 12
_TIMINGVALUES: 400 11 150 2 1 4449 10 2 6 10 1200 1000 
_GROUP: 'Gr 1' _FREEZE: 1 _SYNC: 1
_GROUP: 'Gr 2' _FREEZE: 1 _SYNC: 1
_GROUP: 'Gr 3' _FREEZE: 1 _SYNC: 1
_GROUP: 'Gr 4' _FREEZE: 1 _SYNC: 1
_GROUP: 'Gr 5' _FREEZE: 1 _SYNC: 1
_GROUP: 'Gr 6' _FREEZE: 1 _SYNC: 1
_GROUP: 'Gr 7' _FREEZE: 1 _SYNC: 1
_GROUP: 'Gr 8' _FREEZE: 1 _SYNC: 1
_END_DEVICESPECIFIC_DATA

_MODULE: 'DPSLAVE'
_SECTION_NAME: 'DPSlave'
_INDEX_IN_PARENT: '1'
_MODULE_NAME: 'Eco/DuraDrive'
_NODE_ID: 0
_IECIN: %IB100
_IECOUT: %QB100
_IECDIAG: %MB0
_DOWNLOAD: 1
_EXCLUDEFROMAUTOADR: 0
_COMMENT: ''

_DEVICESPECIFIC_DATA
_GSD_FILENAME: 'RX01100D.gsd'
_STATIONNUMBER: 10
_FAILSAVE_MODE: 0
_FREEZE_MODE: 0
_SYNC_MODE: 0
_STAION_ACTIVE: 1
_WD_ON: 1
_WD_TIME: 1000
_GROUP: 2#0
_LOCK_UNLOCK: 2
_TSDR: 11
_GSD_MODULE: '9 Words Input' '216'
_ACTIVE: 1
_SYMBOLIC_NAMES: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_COMMENT: '' ' ' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' ' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_END_GSD_MODULE
_GSD_MODULE: '9 Words Output' '232'
_ACTIVE: 1
_SYMBOLIC_NAMES: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_COMMENT: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_END_GSD_MODULE
_END_DEVICESPECIFIC_DATA
_END_MODULE

_MODULE: 'DPSLAVE'
_SECTION_NAME: 'DPSlave'
_INDEX_IN_PARENT: '2'
_MODULE_NAME: 'Eco/DuraDrive'
_NODE_ID: 1
_IECIN: %IB140
_IECOUT: %QB140
_IECDIAG: %MB0
_DOWNLOAD: 1
_EXCLUDEFROMAUTOADR: 0
_COMMENT: ''

_DEVICESPECIFIC_DATA
_GSD_FILENAME: 'RX01100D.gsd'
_STATIONNUMBER: 11
_FAILSAVE_MODE: 0
_FREEZE_MODE: 0
_SYNC_MODE: 0
_STAION_ACTIVE: 1
_WD_ON: 1
_WD_TIME: 1000
_GROUP: 2#0
_LOCK_UNLOCK: 2
_TSDR: 11
_GSD_MODULE: '9 Words Input' '216'
_ACTIVE: 1
_SYMBOLIC_NAMES: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_COMMENT: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_END_GSD_MODULE
_GSD_MODULE: '9 Words Output' '232'
_ACTIVE: 1
_SYMBOLIC_NAMES: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_COMMENT: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_END_GSD_MODULE
_END_DEVICESPECIFIC_DATA
_END_MODULE

_MODULE: 'DPSLAVE'
_SECTION_NAME: 'DPSlave'
_INDEX_IN_PARENT: '3'
_MODULE_NAME: 'Eco/DuraDrive'
_NODE_ID: 2
_IECIN: %IB180
_IECOUT: %QB180
_IECDIAG: %MB0
_DOWNLOAD: 1
_EXCLUDEFROMAUTOADR: 0
_COMMENT: ''

_DEVICESPECIFIC_DATA
_GSD_FILENAME: 'RX01100D.gsd'
_STATIONNUMBER: 12
_FAILSAVE_MODE: 0
_FREEZE_MODE: 0
_SYNC_MODE: 0
_STAION_ACTIVE: 1
_WD_ON: 1
_WD_TIME: 1000
_GROUP: 2#0
_LOCK_UNLOCK: 2
_TSDR: 11
_GSD_MODULE: '9 Words Input' '216'
_ACTIVE: 1
_SYMBOLIC_NAMES: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_COMMENT: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_END_GSD_MODULE
_GSD_MODULE: '9 Words Output' '232'
_ACTIVE: 1
_SYMBOLIC_NAMES: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_COMMENT: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 
_END_GSD_MODULE
_END_DEVICESPECIFIC_DATA
_END_MODULE
_END_MODULE
_END_MODULE
PLC_END


RESOURCE

TASK PLC_PRG (PRIORITY := 1, INTERVAL := T#10ms);
  PLC_PRG();
{Additional_info : 1,0,0,0,1,4294967295}
END_TASK
{event_task : 'start','Called when program starts','Start','FUNCTION CallbackStart: DWORD$R$NVAR_INPUT$R$N$TdwEvent: INT;$R$N$TdwFilter: INT;$R$N$TdwOwner: INT;$R$NEND_VAR$R$N'}{event_task_info : 1,1,22651}
{event_task : 'stop','Called when program stops','Stop','FUNCTION CallbackStop: DWORD$R$NVAR_INPUT$R$N$TdwEvent: INT;$R$N$TdwFilter: INT;$R$N$TdwOwner: INT;$R$NEND_VAR$R$N'}{event_task_info : 1,2,22651}
{event_task : 'before_reset','Called before reset takes place','','FUNCTION CallbackReset: DWORD$R$NVAR_INPUT$R$N$TdwEvent: INT;$R$N$TdwFilter: INT;$R$N$TdwOwner: INT;$R$NEND_VAR$R$N'}{event_task_info : 0,3,22651}
{event_task : 'after_reset','Called after reset took place','','FUNCTION CallbackAfterReset: DWORD$R$NVAR_INPUT$R$N$TdwEvent: INT;$R$N$TdwFilter: INT;$R$N$TdwOwner: INT;$R$NEND_VAR$R$N'}{event_task_info : 0,4,22651}
{event_task : 'debug_loop','Debug loop at breakpoint','','FUNCTION CallbackDebugLoop: DWORD$R$NVAR_INPUT$R$N$TdwEvent: INT;$R$N$TdwFilter: INT;$R$N$TdwOwner: INT;$R$NEND_VAR$R$N'}{event_task_info : 0,31,22651}

END_RESOURCE




MACRO
MacroName: '??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? Diagnosis.mac'
END_MACRO


