Index: trunk/MagicSoft/Cosy/aposs/MAGIC II.exp
===================================================================
--- trunk/MagicSoft/Cosy/aposs/MAGIC II.exp	(revision 9439)
+++ trunk/MagicSoft/Cosy/aposs/MAGIC II.exp	(revision 9440)
@@ -2,32 +2,28 @@
 
 (* @PATH := '\/Kommunikation' *)
-(* @SYMFILEFLAGS := '59392' *)
-PROGRAM Ethernet
+(* @SYMFILEFLAGS := '2048' *)
+PROGRAM EthernetIn
 
 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;
+	fdsFdSet					:SOCKET_FD_SET;
+	fdsTime					:SOCKET_TIMEVAL;
+
+	RC_SysSockSelect		:DINT;
+	RC_SysSockSelect3		:DINT;
+	RC_SysSockRecv			:DINT;
+	RC_SysSockClose		:BOOL;
+
 	Catch						:BOOL;
-	RC_SysSockConnect		:BOOL :=FALSE;
-	RC_SysSockClose		:BOOL;
-	RC_SysSockSelect		:DINT;
-	RC_SysSockRecv			:DINT;
-	RC_SysSockSelect2		:DINT;
-	RC_SysSockSelect3		:DINT;
+
+	Empfangszaehler			:DINT;
 END_VAR
+
+
 (* @END_DECLARATION := '0' *)
 (* Auf Verbi ndung warten *)
@@ -49,5 +45,4 @@
 END_IF
 
-
 (* Daten empfangen *)
 IF VerbindungBesteht=TRUE THEN
@@ -72,12 +67,39 @@
 	END_IF
 END_IF
-
-
+END_PROGRAM
+
+
+(* @PATH := '\/Kommunikation' *)
+(* @SYMFILEFLAGS := '59392' *)
+PROGRAM EthernetOut
+
+VAR
+	SockadrKomm2:			SOCKADDRESS;
+	SockadrKommSize2:		DINT;
+
+	RC_SysSockConnect:	BOOL :=FALSE;
+	RC_SysSockSelect2:		DINT;
+	Ret_Send1:				DINT;
+	Ret_Send2:				DINT;
+
+	fdsFdSet:					SOCKET_FD_SET;
+	fdsTime:					SOCKET_TIMEVAL;
+
+	Sendezaehler:				DINT;
+	SendezaehlerZyklisch:	DINT;
+
+	ulBlockMode:				DINT := 1;
+
+	RC_Ioctl: 					DINT;
+END_VAR
+
+
+(* @END_DECLARATION := '0' *)
 (* 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);
+
+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
@@ -85,65 +107,52 @@
 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*)
+RC_SysSockSelect2:=-1;
+IF RC_SysSockConnect THEN (* SysSockConnect==True dann nuetzt auch ein Cosy-Neustart nicht *)
+	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
-	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;
+	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);
+       (*SendSock:=0;*)
+
+	(* Socket 'gracefully closed' (Ret_Send1=0) NOT existing(?) in SPS! *)
+
+	SendSock:=SysSockCreate(diAddressFamily:=SOCKET_AF_INET, diType:=SOCKET_STREAM, diProtocol:=SOCKET_IPPROTO_IP);
+	(* ------------------------- NEW NEW NEW NEW NEW ------------------------- *)
+	(* Set newly created socket to non-blocking mode to make sure SysSockConnect doesn' t block infinitly *)
+	(* Unix ioctl documentation says: On error -1 is returned, 0 ususally in case of success					*)
+	RC_Ioctl:=SysSockIoctl(diSocket:=SendSock, diCommand:=SOCKET_FIONBIO, piParameter:=ADR(ulBlockMode));
+	(* ------------------------------------------------------------------------------------------ *)
+	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_PROGRAM
 
@@ -156,12 +165,6 @@
 	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;
@@ -183,14 +186,7 @@
 
 	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' *)
@@ -198,5 +194,5 @@
 (* Jeder Zyklus ist 10-mal pro Sekunde dran .........!!!!Oder100mal???*)
 Zyklus:=Zyklus+1;
-IF Zyklus>10 THEN
+IF Zyklus>6 THEN
 	Zyklus:=1;
 END_IF
@@ -223,9 +219,8 @@
 	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;
+
+	TX1M_POSITION:=X_pos_ist; 					(*X_Pos_ist;           nehmen an, dass die SE schon genau genug.*)
+	TX2E_POSITION:=X_Pos_Geber2;
+
 	ZyklischeDatenSenden:=TRUE;
 END_IF
@@ -234,9 +229,8 @@
 	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;
+
+	TX1M_POSITION:=Z_pos_ist; 					(*X_Pos_ist;           nehmen an, dass die SE schon genau genug.*)
+	TX2E_POSITION:=Z_Pos_Geber2;
+
 	ZyklischeDatenSenden:=TRUE;
 END_IF
@@ -273,4 +267,10 @@
 	TX_NODE_ID:=NODE_ID_Mac_Az;				(* Motor 1 drehen *)
 	TX_FUNCTION_CODE:=7;						(* PDO3 *)
+
+	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_AnnounceStartMovement (*OR X_PC_StartMovement*);
+	TX1M_STATUS.2:=X_PC_VStart;
+	TX1M_STATUS.6:=NOT X_ist_freigegeben;
+	TX1M_STATUS2.0:=X_EinmaligeFreigabe;
+
 	TX3M_STATUS.0:=X_ist_betriebsbereit;
 	TX3M_STATUS.1:=Leistung_DKC_IO;
@@ -279,9 +279,15 @@
 	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
+	TX3M_STATUS.6:=IN_Zusatz_Bremse_Z;
+	TX3M_STATUS.7:=Leistung_Ein;
+
+	IF TX1M_STATUS<>TX1M_STATUS_OldX OR TX3M_STATUS<>TX3M_STATUS_OldX OR X_PC_ForcePDO3 THEN
 		ZyklischeDatenSenden:=TRUE;
 	END_IF
+	X_PC_ForcePDO3 :=FALSE;
+	TX1M_STATUS_OldX:=TX1M_STATUS;
 	TX3M_STATUS_OldX:=TX3M_STATUS;
+
+	X_PC_AnnounceStartMovement := FALSE;
 END_IF
 
@@ -289,4 +295,11 @@
 	TX_NODE_ID:=NODE_ID_Mac_Zd;				(* Motor 3 kippen *)
 	TX_FUNCTION_CODE:=7;						(* PDO3 *)
+
+	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_AnnounceStartMovement (*OR Z_PC_StartMovement*);
+	TX1M_STATUS.2:=Z_PC_VStart;
+	TX1M_STATUS.6:=NOT Z_ist_freigegeben;
+	TX1M_STATUS2.0:=Z_EinmaligeFreigabe;
+
 	TX3M_STATUS.0:=Z_ist_betriebsbereit;
 	TX3M_STATUS.1:=Leistung_DKC_IO;
@@ -295,53 +308,18 @@
 	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
+	TX3M_STATUS.6:=IN_Zusatz_Bremse_Z;
+	TX3M_STATUS.7:=Leistung_Ein;
+
+	IF TX1M_STATUS<>TX1M_STATUS_OldZ OR TX3M_STATUS<>TX3M_STATUS_OldZ  OR Z_PC_ForcePDO3 THEN
 		ZyklischeDatenSenden:=TRUE;
 	END_IF
+	Z_PC_ForcePDO3 :=FALSE;
+	TX1M_STATUS_OldZ:=TX1M_STATUS;
 	TX3M_STATUS_OldZ:=TX3M_STATUS;
+
+	Z_PC_AnnounceStartMovement := FALSE;
 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;
@@ -359,12 +337,14 @@
 (* 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));
+	ByteBufferTXzyklisch[3]:=DWORD_TO_BYTE(TX1M_POSITION AND 16#000000FF);
+	ByteBufferTXzyklisch[4]:=DWORD_TO_BYTE(SHR(TX1M_POSITION AND 16#0000FF00,8));
+	ByteBufferTXzyklisch[5]:=DWORD_TO_BYTE(SHR(TX1M_POSITION AND 16#00FF0000,16));
+	ByteBufferTXzyklisch[6]:=DWORD_TO_BYTE(SHR(TX1M_POSITION AND 16#FF000000,24));
+
+	ByteBufferTXzyklisch[7]:=DWORD_TO_BYTE(TX2E_POSITION AND 16#000000FF);
+	ByteBufferTXzyklisch[8]:=DWORD_TO_BYTE(SHR(TX2E_POSITION AND 16#0000FF00,8));
+	ByteBufferTXzyklisch[9]:=DWORD_TO_BYTE(SHR(TX2E_POSITION AND 16#00FF0000,16));
+	ByteBufferTXzyklisch[10]:=DWORD_TO_BYTE(SHR(TX2E_POSITION AND 16#FF000000,24));
+
 END_IF
 
@@ -383,25 +363,10 @@
 (* 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));
+	ByteBufferTXzyklisch[3]:=TX3M_STATUS;(*TX1M_LEER1;*)
+	ByteBufferTXzyklisch[4]:=16#FE; (*TX1M_LEER2;*)
+	ByteBufferTXzyklisch[5]:=TX1M_STATUS2;
+	ByteBufferTXzyklisch[6]:=TX1M_STATUS;
 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
 
@@ -442,5 +407,5 @@
 IF NeueDatenDa THEN
 	NeueDatenDa:=FALSE;
-
+(*
 	 IF X_PC_AntriebHalt THEN
 		X_PC_StartMovement := FALSE;
@@ -449,5 +414,5 @@
 		Z_PC_StartMovement := FALSE;
 	END_IF
-
+ *)
 	(* Empfangenes Telegramm zerlegen *)
 	(* Angabe der Nutzbytes im ersten Byte wird ignoriert *)
@@ -463,16 +428,21 @@
 	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_Az
 			AND RX_NODE_ID<>NODE_ID_SE_Zd1
-			AND RX_NODE_ID<>NODE_ID_SE_Zd2
+			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
+(*	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*)
+(*
+	IF ((RX_NODE_ID=NODE_ID_Mac_Az AND  NOT (X_IsOnline AND Y_IsOnline)) OR
+           (RX_NODE_ID=NODE_ID_Mac_Zd AND NOT Z_IsOnline))
+		THEN RETURN;
 	END_IF
-
+*)
 	(* Antworttelegramm mit Daten aus empfangenen Telegramm vorbesetzen *)
 	TX_NODE_ID				:=RX_NODE_ID;
@@ -488,11 +458,14 @@
 
 	(* 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 *)
@@ -514,10 +487,6 @@
 							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;
@@ -553,5 +522,5 @@
 		END_IF
 	END_IF
-
+*)
 (*-----------------------------------------------------------------------------------------------MOTOREN-------------------------------------------------------------------------------------------*)
 
@@ -564,36 +533,14 @@
 			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
+				16#1000:	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;
 				(* 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;
+				16#1003:	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;
 				(* Node-Nr 1 oder 3 zurückgeben *)
@@ -602,13 +549,4 @@
 				(* 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 *)
@@ -619,32 +557,36 @@
 							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;*)
+				16#2003:	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;
+				(* Unit of Velocity *)
+				16#6002:	TX_VALUE:=VelocityResolution;
+							DatenSenden:=TRUE;
+				(* Maximum Velocity *)
+				16#6003:	CASE RX_NODE_ID OF
+								NODE_ID_Mac_Az: TX_VALUE:=X_MaximumVelocity;
+								NODE_ID_Mac_Zd: TX_VALUE:=Z_MaximumVelocity;
+							END_CASE;
 							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*)
+									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
+							IF RX_SUBINDEX=1 THEN
+								CASE RX_NODE_ID OF
+									NODE_ID_Mac_Az: TX_VALUE:=X_Pos_Geber2;		(*X_Pos_ist;		nehmen an, SE schon genau genug*)
+									NODE_ID_Mac_Zd: TX_VALUE:=Z_Pos_Geber2;		(*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;
+				16#6501: 	TX_VALUE:=ShaftEncoderResolution;
 							DatenSenden:=TRUE;
 				(* Geschwindigkeitsmaximalwert (den für Testzwecke) ausgeben *)
@@ -666,28 +608,37 @@
 			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#1000:	CASE RX_NODE_ID OF
+								NODE_ID_Mac_Az:
+									IF RX_VALUE=1 THEN
+										X_EinmaligeFreigabe:=TRUE;
+									ELSE
+										X_EinmaligeFreigabe:=FALSE;
+									END_IF
+								NODE_ID_Mac_Zd:
+									IF RX_VALUE=1 THEN
+										Z_EinmaligeFreigabe:=TRUE;
+									ELSE
+										Z_EinmaligeFreigabe:=FALSE;
+									END_IF
+							END_CASE
+							TX_VALUE:=16#00000000;
+							DatenSenden:=TRUE;
+				16#1001:	CASE RX_NODE_ID OF
+								NODE_ID_Mac_Az:
+									IF RX_VALUE=1 THEN
+										X_PC_ForcePDO3:=TRUE;
+									END_IF
+								NODE_ID_Mac_Zd:
+									IF RX_VALUE=1 THEN
+										Z_PC_ForcePDO3:=TRUE;
+									END_IF
+							END_CASE
+							TX_VALUE:=16#00000000;
+							DatenSenden:=TRUE;
+				(* 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
+							END_IF*)
 				(* Geschwindigkeit für nächsten Fahrbefehl (Nur für Pos) *)
 				(* Wenn noch nie eine gesetzt 1% *)
@@ -699,21 +650,10 @@
 							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
+				16#2003:	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;
 				(* Wenn VALUE= 'p' 'o' 't' 's' dann Fahrbefehl abbrechen (Pos und V-Regelung) *)
 				16#3000:	CompareDwordString4_IDB(D:=RX_VALUE, Str:='stop');
@@ -733,111 +673,121 @@
 				(* 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
+				16#3006:	CompareDwordString4_IDB(D:=RX_VALUE, Str:='stop');
+							IF CompareDwordString4_IDB.Ergebnis 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;
+										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:
-                                                                  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*)
+										Z_PC_VStart:=FALSE;
+										Z_PC_AntriebHalt:=TRUE;
+										(*Z_PC_StartMovement:=FALSE;*) (* maybe not necessary *)
+										(*Z_PC_PosZiel:=Z_Pos_ist;*)
 								END_CASE
-								TX_VALUE:=16#00000000;
 								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_IsRelative:=TRUE;
+											X_PC_AntriebHalt:=FALSE;
+											X_PC_VGeschwindigkeit:=0;
+											X_AnnounceStartMovement:=TRUE;
+ 											(*X_PC_StartMovement:=TRUE;*)
+										(*END_IF*)
+									NODE_ID_Mac_Zd:				(*IF Z_EinmaligeFreigabe THEN*)
+											Z_PC_VStart:=TRUE;
+											Z_PC_IsRelative:=TRUE;
+											Z_PC_AntriebHalt:=FALSE;
+											Z_PC_VGeschwindigkeit:=0;
+											Z_AnnounceStartMovement:=TRUE;
+											(*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;
+				(* Geschwindigkeit für Geschwindigkeitsregelung *)
+				16#3007:	CASE RX_NODE_ID OF
+								NODE_ID_Mac_Az:
+                                                                 IF (X_PC_VGeschwindigkeit>=0 AND DWORD_TO_DINT(RX_VALUE)<0) OR (X_PC_VGeschwindigkeit<=0 AND DWORD_TO_DINT(RX_VALUE)>0) THEN
+										X_PC_StartMovement := NOT X_PC_StartMovement;
+									END_IF
+									X_PC_VGeschwindigkeit:=RX_VALUE;
+								NODE_ID_Mac_Zd:
+                                                                 IF (Z_PC_VGeschwindigkeit>=0 AND DWORD_TO_DINT(RX_VALUE)<0) OR (Z_PC_VGeschwindigkeit<=0 AND DWORD_TO_DINT(RX_VALUE)>0) THEN
+										Z_PC_StartMovement := NOT Z_PC_StartMovement;
+									END_IF
+									Z_PC_VGeschwindigkeit:=RX_VALUE;
+									(*Z_PC_StartMovement:=TRUE;	 Kommentar ersatzweise fuer den oben*)
+							END_CASE
+							TX_VALUE:=16#00000000;
+							DatenSenden:=TRUE;
 				(* 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*)
+				16#6004:	CASE RX_NODE_ID OF
+								NODE_ID_Mac_Az:
+                                                     		IF X_EinmaligeFreigabe THEN
+										X_PC_IsRelative:=FALSE;
+										X_PC_PosZiel:=RX_VALUE;
+										X_PC_AntriebHalt:=FALSE;
+										X_PC_StartMovement := NOT X_PC_StartMovement;
+										X_PC_AnnounceStartMovement := TRUE;
+										X_AnnounceStartMovement := 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_IsRelative:=FALSE;
+										Z_PC_PosZiel:=RX_VALUE;
+										Z_PC_AntriebHalt:=FALSE;
+										Z_PC_StartMovement := NOT Z_PC_StartMovement;
+										Z_PC_AnnounceStartMovement := TRUE;
+										Z_AnnounceStartMovement := 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
 				(* 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
+				16#6005:	CASE RX_NODE_ID OF
+								NODE_ID_Mac_Az:
+									IF X_EinmaligeFreigabe THEN
+										X_PC_IsRelative:=TRUE;
+										(*X_PC_PosZiel:=REAL_TO_DWORD(DWORD_TO_REAL(RX_VALUE)*RotationalPositionResolution/RotaryEncoderResolution/ArbitraryMACFactor);*)
+										X_PC_PosZiel:=RX_VALUE;
+										X_PC_AntriebHalt:=FALSE;
+										X_PC_StartMovement := NOT X_PC_StartMovement;
+										X_PC_AnnounceStartMovement := TRUE;
+										X_AnnounceStartMovement := 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_IsRelative:=TRUE;
+										(*Z_PC_PosZiel:=REAL_TO_DWORD(DWORD_TO_REAL(RX_VALUE)*RotationalPositionResolution/RotaryEncoderResolution/ArbitraryMACFactor);*)
+										Z_PC_PosZiel:=RX_VALUE;
+										Z_PC_AntriebHalt:=FALSE;
+										Z_PC_StartMovement := NOT Z_PC_StartMovement;
+										Z_PC_AnnounceStartMovement := TRUE;
+										Z_AnnounceStartMovement := 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
 				(* Maximale Geschwindigkeit begrenzen (für Beides) (Nur zu Testzwecken) *)
 				16#6502:	CASE RX_NODE_ID OF
@@ -845,8 +795,4 @@
 								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;
@@ -881,5 +827,5 @@
 
 (*-----------------------------------------------------------------------------------------------Zusatzbedingungen-------------------------------------------------------------------------------------------*)
-IF X_PC_Maximalgeschwindigkeit<X_PC_PosGeschwindigkeit THEN
+(*IF X_PC_Maximalgeschwindigkeit<X_PC_PosGeschwindigkeit THEN
 	X_PC_PosGeschwindigkeit:=X_PC_Maximalgeschwindigkeit;
 END_IF
@@ -896,4 +842,5 @@
 Z_PC_VGeschwindigkeit:=Z_PC_Maximalgeschwindigkeit;
 END_IF
+*)
 
 IF NOT X_EinmaligeFreigabe THEN
@@ -1179,21 +1126,4 @@
 
 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
 
 
@@ -1422,51 +1352,49 @@
 _POSITIV
 IN_FB_Betrieb
-_FUNCTIONBLOCK
+_FUNCTION
+_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
-_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
@@ -1573,22 +1501,20 @@
 
 VAR_INPUT
-	Betriebsart_1			:BOOL;
-	Betriebsart_2			:BOOL;
-	Sammelstoerung		:BOOL;
+	Betriebsart_1:			BOOL;
+	Betriebsart_2:			BOOL;
+	Sammelstoerung:		BOOL;
 END_VAR
 
 VAR_OUTPUT
-	Betriebszustand_ok			:BOOL;
+	Betriebszustand_ok:			BOOL;
 END_VAR
 
 VAR
-	Betriebsart_aktiv				:BOOL;
-	FL_pos: R_TRIG;
-	FL_neg: F_TRIG;
-	Betriebszustand_geaendert	:BOOL;
+	Betriebsart_aktiv:				BOOL;
+	DetectEdge: 					RF_TRIG;
 END_VAR
 (* @END_DECLARATION := '0' *)
 _FBD_BODY
-_NETWORKS : 3
+_NETWORKS : 2
 _NETWORK
 
@@ -1624,5 +1550,5 @@
 
 _COMMENT
-Flankenauswertung Automatik
+
 _END_COMMENT
 _ASSIGN
@@ -1630,5 +1556,5 @@
 _BOX_EXPR : 2
 _FUNCTIONBLOCK
-FL_pos
+DetectEdge
 _BOX_EXPR : 1
 _OPERAND
@@ -1637,40 +1563,7 @@
 Betriebsart_aktiv
 _EXPRESSION
-_POSITIV
-R_TRIG
+_NEGATIV
+RF_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
@@ -1696,17 +1589,17 @@
 
 VAR_INPUT
-	D			:DWORD;
-	Str			:STRING(4);
+	D:			DWORD;
+	Str:			STRING(4);
 END_VAR
 
 VAR_OUTPUT
-	Ergebnis	:BOOL;
+	Ergebnis:	BOOL;
 END_VAR
 
 VAR
-	i			:INT;
-	B1			:BYTE;
-	B2			:BYTE;
-      ptr			:POINTER TO BYTE;
+	i:			INT;
+	B1:			BYTE;
+	B2:			BYTE;
+      ptr:			POINTER TO BYTE;
 END_VAR
 (* @END_DECLARATION := '0' *)
@@ -1784,30 +1677,27 @@
 
 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*)
+	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*)
+	Geschwindigkeitsregelung:	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
+	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*)
 	StartMovement			      	:BOOL;
 END_VAR
@@ -1828,4 +1718,5 @@
 	IstwertGeschwindigkeit		:DINT; 				(*Aktuelle Geschwindigkeit, actual velocity*)
 	PositionFeedback2			:DINT;
+       IsOnline                         		:BOOL;                    (* Drive is online on the bus *)
 	PAW1							:WORD;			(*Ausgangswort 1*)
 	PAW2							:WORD;			(*Ausgangswort 2*)
@@ -1840,24 +1731,27 @@
 
 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;
+	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;
+	DelayResetOfStartMovement: 	TON;
+	ToggleStartMovement: BLINK;
+	DelayInPosition: TON;
+	PositionFeedback1: DINT;
+	DelayStartMovementTon: TON;
+	DelayStartMovementTof: TOF;
+	dummy: BOOL;
+	dummys: BOOL;
 END_VAR
 (* @END_DECLARATION := '0' *)
 _FBD_BODY
-_NETWORKS : 48
+_NETWORKS : 51
 _NETWORK
 
@@ -1974,7 +1868,4 @@
 _ASSIGN
 _FUNCTIONBLOCK
-Negate
-_BOX_EXPR : 1
-_FUNCTIONBLOCK
 Decoder
 _BOX_EXPR : 2
@@ -1993,8 +1884,4 @@
 _EXPRESSION
 _POSITIV
-NEG
-_OUTPUTS : 0
-_EXPRESSION
-_POSITIV
 _OUTPUTS : 1
 _OUTPUT
@@ -2002,4 +1889,21 @@
 _NO_SET
 PositionFeedback2
+_NETWORK
+
+_COMMENT
+
+_END_COMMENT
+_ASSIGN
+_OPERAND
+_EXPRESSION
+_POSITIV
+ek_in_eco.pos_act
+_EXPRESSION
+_POSITIV
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+PositionFeedback1
 _NETWORK
 
@@ -2233,5 +2137,5 @@
 _POSITIV
 _NO_SET
-INTERN_JOG_FORWARD
+INTERN_JOG_BACKWARD
 _NETWORK
 
@@ -2267,5 +2171,5 @@
 _POSITIV
 _NO_SET
-INTERN_JOG_BACKWARD
+INTERN_JOG_FORWARD
 _NETWORK
 
@@ -2508,4 +2412,39 @@
 _END_COMMENT
 _ASSIGN
+_OPERATOR
+_BOX_EXPR : 2
+_OPERAND
+_EXPRESSION
+_POSITIV
+PositionFeedback1
+_OPERATOR
+_BOX_EXPR : 2
+_OPERAND
+_EXPRESSION
+_POSITIV
+SollwertPosition
+_OPERAND
+_EXPRESSION
+_POSITIV
+PositionFeedback2
+_EXPRESSION
+_POSITIV
+SUB
+_EXPRESSION
+_POSITIV
+ADD
+_EXPRESSION
+_POSITIV
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+ek_out_eco.pos_cmd
+_NETWORK
+
+_COMMENT
+
+_END_COMMENT
+_ASSIGN
 _OPERAND
 _EXPRESSION
@@ -2528,5 +2467,5 @@
 _EXPRESSION
 _POSITIV
-RelativesPositionieren
+Geschwindigkeitsregelung
 _EXPRESSION
 _POSITIV
@@ -2556,6 +2495,7 @@
 
 _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 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.
+It seems that the setpoint_acknowledge doesn't really toggle if the it was accepted (Dummy was ek_out_eco.setpoint_acceptance, dummys was StartMovement) 
 _END_COMMENT
 _ASSIGN
@@ -2584,5 +2524,5 @@
 StartMovement
 _EXPRESSION
-_POSITIV
+_NEGATIV
 AND
 _EXPRESSION
@@ -2592,11 +2532,16 @@
 _POSITIV
 _NO_SET
-ek_out_eco.setpoint_acceptance
-_NETWORK
-
-_COMMENT
-
-_END_COMMENT
-_ASSIGN
+dummy
+_NETWORK
+
+_COMMENT
+Reset the StartMovement such that the setpoint_accept bit gets toggled back to false in the next cycle. The delay is a workaround which makes sure that the axis
+as "moving" in the PDOs (StartMoving==TRUE) already if it is still standing still and hasn' t start its movement yet. Please not that within this second no new
+positioning command can be accepted.
+_END_COMMENT
+_ASSIGN
+_FUNCTIONBLOCK
+DelayResetOfStartMovement
+_BOX_EXPR : 2
 _FUNCTIONBLOCK
 RStest
@@ -2609,24 +2554,127 @@
 _EXPRESSION
 _POSITIV
-ek_out_eco.setpoint_acceptance
+dummy
 _EXPRESSION
 _POSITIV
 RS
 _OUTPUTS : 0
-_EXPRESSION
-_POSITIV
-_OUTPUTS : 1
-_OUTPUT
-_POSITIV
-_NO_SET
+_OPERAND
+_EXPRESSION
+_POSITIV
+T#50ms
+_EXPRESSION
+_POSITIV
+TON
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+_EMPTY
+_EXPRESSION
+_POSITIV
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+dummys
+_NETWORK
+
+_COMMENT
+
+_END_COMMENT
+_ASSIGN
+_OPERATOR
+_BOX_EXPR : 3
+_OPERATOR
+_BOX_EXPR : 2
+_OPERAND
+_EXPRESSION
+_POSITIV
+RelativesPositionieren
+_OPERAND
+_EXPRESSION
+_POSITIV
+TRUE
+_EXPRESSION
+_POSITIV
+OR
+_OPERATOR
+_BOX_EXPR : 2
+_FUNCTIONBLOCK
+ToggleStartMovement
+_BOX_EXPR : 3
+_OPERAND
+_EXPRESSION
+_POSITIV
+TRUE
+_OPERAND
+_EXPRESSION
+_POSITIV
+t#250ms
+_OPERAND
+_EXPRESSION
+_POSITIV
+t#15ms
+_EXPRESSION
+_POSITIV
+BLINK
+_OUTPUTS : 0
+_OPERATOR
+_BOX_EXPR : 2
+_OPERATOR
+_BOX_EXPR : 1
+_OPERATOR
+_BOX_EXPR : 2
+_OPERAND
+_EXPRESSION
+_POSITIV
+SollwertPosition
+_OPERAND
+_EXPRESSION
+_POSITIV
+PositionFeedback2
+_EXPRESSION
+_POSITIV
+SUB
+_EXPRESSION
+_POSITIV
+ABS
+_OPERAND
+_EXPRESSION
+_POSITIV
+500000
+_EXPRESSION
+_POSITIV
+GT
+_EXPRESSION
+_POSITIV
+AND
+_OPERAND
+_EXPRESSION
+_POSITIV
 StartMovement
-_NETWORK
-
-_COMMENT
-Reset the StartMovement command whenever the new setpoint was acknowledged (DOESN'T WORK, WHY?)
-_END_COMMENT
-_ASSIGN
+_EXPRESSION
+_POSITIV
+SEL
+_EXPRESSION
+_POSITIV
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+dummys
+_NETWORK
+
+_COMMENT
+
+_END_COMMENT
+_ASSIGN
+_OPERATOR
+_BOX_EXPR : 2
 _FUNCTIONBLOCK
-RStest2
+DelayStartMovementTon
+_BOX_EXPR : 2
+_FUNCTIONBLOCK
+DelayStartMovementTof
 _BOX_EXPR : 2
 _OPERAND
@@ -2634,17 +2682,32 @@
 _POSITIV
 StartMovement
-_FUNCTIONBLOCK
-SetpointAcknowledgment
-_BOX_EXPR : 1
-_OPERATOR
-_BOX_EXPR : 2
-_OPERAND
-_EXPRESSION
-_POSITIV
-ek_out_eco.setpoint_acknowledge
-_OPERAND
-_EXPRESSION
-_POSITIV
-FALSE
+_OPERAND
+_EXPRESSION
+_POSITIV
+t#25ms
+_EXPRESSION
+_POSITIV
+TOF
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+_EMPTY
+_OPERAND
+_EXPRESSION
+_POSITIV
+t#25ms
+_EXPRESSION
+_POSITIV
+TON
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+_EMPTY
+_OPERAND
+_EXPRESSION
+_POSITIV
+TRUE
 _EXPRESSION
 _POSITIV
@@ -2652,17 +2715,9 @@
 _EXPRESSION
 _POSITIV
-RF_TRIG
-_OUTPUTS : 0
-_EXPRESSION
-_POSITIV
-RS
-_OUTPUTS : 0
-_EXPRESSION
-_POSITIV
-_OUTPUTS : 1
-_OUTPUT
-_POSITIV
-_NO_SET
-StartMovement
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+ek_out_eco.setpoint_acceptance
 _NETWORK
 
@@ -2671,12 +2726,4 @@
 _END_COMMENT
 _ASSIGN
-_OPERATOR
-_BOX_EXPR : 1
-_OPERATOR
-_BOX_EXPR : 2
-_OPERATOR
-_BOX_EXPR : 2
-_OPERATOR
-_BOX_EXPR : 1
 _OPERAND
 _EXPRESSION
@@ -2685,24 +2732,4 @@
 _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
@@ -2713,7 +2740,273 @@
 
 _COMMENT
-Istwerte anzeigen
-_END_COMMENT
-_ASSIGN
+
+_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
+
+_END_COMMENT
+_ASSIGN
+_OPERATOR
+_BOX_EXPR : 2
+_OPERAND
+_EXPRESSION
+_POSITIV
+Diagnosewort
 _OPERAND
 _EXPRESSION
@@ -2721,287 +3014,13 @@
 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
+_NEGATIV
 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
+_EXPRESSION
+_POSITIV
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+IsOnline
 _NETWORK
 
@@ -3094,4 +3113,21 @@
 _NO_SET
 PAW7
+_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
 
@@ -3221,9 +3257,9 @@
 
 VAR_INPUT
-	In		:DWORD;
+	In:		DWORD;
 END_VAR
 
 VAR_OUTPUT
-	Out		:DWORD;
+	Out	:	DWORD;
 END_VAR
 
@@ -3247,5 +3283,5 @@
 END_VAR
 VAR
-	RaisingEdge: R_TRIG;
+	RaisingEdge: 	R_TRIG;
 	FallingEdge: 	F_TRIG;
 END_VAR
@@ -3302,13 +3338,11 @@
 
 VAR
-	Antrieb_1				:	Ecodrive_7W_Antr_Gef_Pos;
-	Beschleunigung		:	DINT;
-	X_AccMACStoDKC	:	AccMACStoDKC;
-	X_Stehengeblieben: 		R_TRIG;
-	X_ResetAH_after_move: 	RS;
+	Antrieb_1:					Ecodrive_7W_Antr_Gef_Pos;
+	Beschleunigung:			DINT;
+	X_AntriebHalt_Delay:		TOF;
 END_VAR
 (* @END_DECLARATION := '0' *)
 _FBD_BODY
-_NETWORKS : 6
+_NETWORKS : 8
 _NETWORK
 
@@ -3384,178 +3418,233 @@
 _EXPRESSION
 _NEGATIV
+x_PC_AntriebHalt
+_EXPRESSION
+_POSITIV
+AND
+_OPERAND
+_EXPRESSION
+_POSITIV
+X_Pos_Geber2
+_OPERATOR
+_BOX_EXPR : 3
+_OPERAND
+_EXPRESSION
+_POSITIV
+X_PC_VStart
+_OPERATOR
+_BOX_EXPR : 3
+_OPERAND
+_EXPRESSION
+_POSITIV
+X_PC_IsRelative
+_OPERAND
+_EXPRESSION
+_POSITIV
+X_PC_PosZiel
+_OPERATOR
+_BOX_EXPR : 2
+_OPERAND
+_EXPRESSION
+_POSITIV
+X_PC_PosZiel
+_OPERAND
+_EXPRESSION
+_POSITIV
+X_Pos_Geber2
+_EXPRESSION
+_POSITIV
+ADD
+_EXPRESSION
+_POSITIV
+SEL
+_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
+_OPERAND
+_EXPRESSION
+_POSITIV
+X_PC_VGeschwindigkeit
+_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
+_OPERAND
+_EXPRESSION
+_POSITIV
+X_PC_PosBeschleunigung
+_OPERAND
+_EXPRESSION
+_POSITIV
+X_HandBeschl
+_EXPRESSION
+_POSITIV
+SEL
+_EXPRESSION
+_POSITIV
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+Beschleunigung
+_NETWORK
+
+_COMMENT
+Set AntriebHalt whenever PC signal moving is reset with a delay of 3s
+_END_COMMENT
+_ASSIGN
+_OPERATOR
+_BOX_EXPR : 2
+_FUNCTIONBLOCK
+X_AntriebHalt_Delay
+_BOX_EXPR : 2
+_OPERATOR
+_BOX_EXPR : 2
+_OPERATOR
+_BOX_EXPR : 2
+_OPERATOR
+_BOX_EXPR : 2
+_OPERAND
+_EXPRESSION
+_NEGATIV
+X_in_Standstill
+_OPERAND
+_EXPRESSION
+_NEGATIV
+X_in_AntriebHalt
+_EXPRESSION
+_POSITIV
+OR
+_OPERAND
+_EXPRESSION
+_NEGATIV
+X_in_Pos
+_EXPRESSION
+_POSITIV
+AND
+_OPERAND
+_EXPRESSION
+_POSITIV
+X_AnnounceStartMovement
+_EXPRESSION
+_POSITIV
+OR
+_OPERAND
+_EXPRESSION
+_POSITIV
+T#3s
+_EXPRESSION
+_NEGATIV
+TOF
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+_EMPTY
+_OPERAND
+_EXPRESSION
+_POSITIV
 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
+OR
+_EXPRESSION
+_POSITIV
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+X_PC_AntriebHalt
+_NETWORK
+
+_COMMENT
+
+_END_COMMENT
+_ASSIGN
+_OPERAND
+_EXPRESSION
+_POSITIV
+FALSE
+_EXPRESSION
+_POSITIV
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+X_AnnounceStartMovement
 _NETWORK
 
@@ -3601,5 +3690,9 @@
 _EXPRESSION
 _POSITIV
-TRUE
+X_PC_IsRelative
+_OPERAND
+_EXPRESSION
+_POSITIV
+X_PC_VStart
 _OPERAND
 _EXPRESSION
@@ -3621,8 +3714,4 @@
 _EXPRESSION
 _POSITIV
-X_Pos_Fenster
-_OPERAND
-_EXPRESSION
-_POSITIV
 %IW100
 _OPERAND
@@ -3665,5 +3754,5 @@
 _POSITIV
 Ecodrive_7W_Antr_Gef_Pos
-_OUTPUTS : 22
+_OUTPUTS : 23
 _OUTPUT
 _POSITIV
@@ -3718,4 +3807,8 @@
 _NO_SET
 X_Pos_Geber2
+_OUTPUT
+_POSITIV
+_NO_SET
+X_IsOnline
 _OUTPUT
 _POSITIV
@@ -3918,4 +4011,8 @@
 _EXPRESSION
 _POSITIV
+???
+_OPERAND
+_EXPRESSION
+_POSITIV
 X_Pos_soll
 _OPERAND
@@ -3934,8 +4031,4 @@
 _EXPRESSION
 _POSITIV
-X_Pos_Fenster
-_OPERAND
-_EXPRESSION
-_POSITIV
 %IW100
 _OPERAND
@@ -3978,5 +4071,5 @@
 _POSITIV
 Ecodrive_7W_Antr_Gef_Pos
-_OUTPUTS : 22
+_OUTPUTS : 23
 _OUTPUT
 _POSITIV
@@ -4031,4 +4124,8 @@
 _NO_SET
 X_Pos_Geber2
+_OUTPUT
+_POSITIV
+_NO_SET
+_EMPTY
 _OUTPUT
 _POSITIV
@@ -4083,6 +4180,5 @@
 
 VAR
-	Antrieb_2				:Ecodrive_7W_Antr_Gef_Pos;
-      Dummy:				BOOL;
+	Antrieb_2:				Ecodrive_7W_Antr_Gef_Pos;
 	ReleaseAH_Slave: 	BOOL;
 	ReleaseAH_Delay:	TOF;
@@ -4213,4 +4309,8 @@
 _EXPRESSION
 _POSITIV
+FALSE
+_OPERAND
+_EXPRESSION
+_POSITIV
 0
 _OPERAND
@@ -4229,8 +4329,4 @@
 _EXPRESSION
 _POSITIV
-0
-_OPERAND
-_EXPRESSION
-_POSITIV
 %IW140
 _OPERAND
@@ -4269,9 +4365,9 @@
 _EXPRESSION
 _POSITIV
-Dummy
+FALSE
 _EXPRESSION
 _POSITIV
 Ecodrive_7W_Antr_Gef_Pos
-_OUTPUTS : 22
+_OUTPUTS : 23
 _OUTPUT
 _POSITIV
@@ -4326,4 +4422,8 @@
 _NO_SET
 _EMPTY
+_OUTPUT
+_POSITIV
+_NO_SET
+Y_IsOnline
 _OUTPUT
 _POSITIV
@@ -4371,14 +4471,12 @@
 
 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;
+	Antrieb_3:					Ecodrive_7W_Antr_Gef_Pos;
+	Time_Brake:				TON;
+	Beschleunigung:			DINT;
+	Z_AntriebHalt_Delay:		TOF;
 END_VAR
 (* @END_DECLARATION := '0' *)
 _FBD_BODY
-_NETWORKS : 7
+_NETWORKS : 9
 _NETWORK
 
@@ -4461,5 +4559,82 @@
 _EXPRESSION
 _POSITIV
+Z_Pos_Geber2
+_OPERATOR
+_BOX_EXPR : 3
+_OPERAND
+_EXPRESSION
+_POSITIV
+Z_PC_VStart
+_OPERATOR
+_BOX_EXPR : 3
+_OPERAND
+_EXPRESSION
+_POSITIV
+Z_PC_IsRelative
+_OPERAND
+_EXPRESSION
+_POSITIV
+Z_PC_PosZiel
+_OPERATOR
+_BOX_EXPR : 2
+_OPERAND
+_EXPRESSION
+_POSITIV
+Z_PC_PosZiel
+_OPERAND
+_EXPRESSION
+_POSITIV
+Z_Pos_Geber2
+_EXPRESSION
+_POSITIV
+ADD
+_EXPRESSION
+_POSITIV
+SEL
+_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
@@ -4471,28 +4646,44 @@
 _EXPRESSION
 _POSITIV
-Z_PC_PosZiel
+Z_PC_PosGeschwindigkeit
+_OPERATOR
+_BOX_EXPR : 1
+_OPERAND
+_EXPRESSION
+_POSITIV
+Z_PC_VGeschwindigkeit
+_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
-_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
+_OPERAND
+_EXPRESSION
+_POSITIV
+IN_FB_Betrieb
+_OPERAND
+_EXPRESSION
+_POSITIV
+Z_PC_PosBeschleunigung
+_OPERAND
+_EXPRESSION
+_POSITIV
+Z_HandBeschl
 _EXPRESSION
 _POSITIV
@@ -4500,132 +4691,94 @@
 _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
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+Beschleunigung
+_NETWORK
+
+_COMMENT
+Set AntriebHalt whenever PC signal moving is reset with a delay of 3s
+_END_COMMENT
+_ASSIGN
+_OPERATOR
+_BOX_EXPR : 2
 _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
+Z_AntriebHalt_Delay
+_BOX_EXPR : 2
+_OPERATOR
+_BOX_EXPR : 2
+_OPERATOR
+_BOX_EXPR : 2
+_OPERATOR
+_BOX_EXPR : 2
+_OPERAND
+_EXPRESSION
+_NEGATIV
+Z_in_Standstill
+_OPERAND
+_EXPRESSION
+_NEGATIV
+Z_in_AntriebHalt
+_EXPRESSION
+_POSITIV
+OR
+_OPERAND
+_EXPRESSION
+_NEGATIV
+Z_in_Pos
+_EXPRESSION
+_POSITIV
+AND
+_OPERAND
+_EXPRESSION
+_POSITIV
+Z_AnnounceStartMovement
+_EXPRESSION
+_POSITIV
+OR
+_OPERAND
+_EXPRESSION
+_POSITIV
+T#3s
+_EXPRESSION
+_NEGATIV
+TOF
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+_EMPTY
+_OPERAND
+_EXPRESSION
+_POSITIV
+Z_PC_AntriebHalt
+_EXPRESSION
+_POSITIV
+OR
+_EXPRESSION
+_POSITIV
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+Z_PC_AntriebHalt
+_NETWORK
+
+_COMMENT
+
+_END_COMMENT
+_ASSIGN
+_OPERAND
+_EXPRESSION
+_POSITIV
+FALSE
+_EXPRESSION
+_POSITIV
+_OUTPUTS : 1
+_OUTPUT
+_POSITIV
+_NO_SET
+Z_AnnounceStartMovement
 _NETWORK
 
@@ -4671,5 +4824,9 @@
 _EXPRESSION
 _POSITIV
-TRUE
+Z_PC_IsRelative
+_OPERAND
+_EXPRESSION
+_POSITIV
+Z_PC_VStart
 _OPERAND
 _EXPRESSION
@@ -4691,8 +4848,4 @@
 _EXPRESSION
 _POSITIV
-Z_Pos_Fenster
-_OPERAND
-_EXPRESSION
-_POSITIV
 %IW180
 _OPERAND
@@ -4735,5 +4888,5 @@
 _POSITIV
 Ecodrive_7W_Antr_Gef_Pos
-_OUTPUTS : 22
+_OUTPUTS : 23
 _OUTPUT
 _POSITIV
@@ -4788,4 +4941,8 @@
 _NO_SET
 Z_Pos_Geber2
+_OUTPUT
+_POSITIV
+_NO_SET
+Z_IsOnline
 _OUTPUT
 _POSITIV
@@ -5101,4 +5258,8 @@
 _EXPRESSION
 _POSITIV
+???
+_OPERAND
+_EXPRESSION
+_POSITIV
 Z_Pos_soll
 _OPERAND
@@ -5117,8 +5278,4 @@
 _EXPRESSION
 _POSITIV
-Z_Pos_Fenster
-_OPERAND
-_EXPRESSION
-_POSITIV
 %IW180
 _OPERAND
@@ -5161,5 +5318,5 @@
 _POSITIV
 Ecodrive_7W_Antr_Gef_Pos
-_OUTPUTS : 22
+_OUTPUTS : 23
 _OUTPUT
 _POSITIV
@@ -5214,4 +5371,8 @@
 _NO_SET
 Z_Pos_Geber2
+_OUTPUT
+_POSITIV
+_NO_SET
+_EMPTY
 _OUTPUT
 _POSITIV
@@ -5266,5 +5427,5 @@
 
 VAR
-	Blinkgen	:BLINK;
+	Blinkgen:	BLINK;
 END_VAR
 (* @END_DECLARATION := '0' *)
@@ -5274,5 +5435,5 @@
 
 _COMMENT
-
+Blinks an led (digital output) on the module to signal that the SPS is properly running
 _END_COMMENT
 _ASSIGN
@@ -5298,17 +5459,13 @@
 _EXPRESSION
 _POSITIV
-_OUTPUTS : 2
+_OUTPUTS : 1
 _OUTPUT
 _POSITIV
 _NO_SET
 Visual_1Hz
-_OUTPUT
-_POSITIV
-_NO_SET
-Blink_1_I
-_NETWORK
-
-_COMMENT
-Zykluszähler
+_NETWORK
+
+_COMMENT
+Counts the number of cycles executed already
 _END_COMMENT
 _ASSIGN
@@ -5479,5 +5636,5 @@
 (* @END_DECLARATION := '0' *)
 _FBD_BODY
-_NETWORKS : 9
+_NETWORKS : 10
 _NETWORK
 
@@ -5562,5 +5719,5 @@
 _EXPRESSION
 _POSITIV
-Ethernet
+EthernetIn
 _OUTPUTS : 0
 _NETWORK
@@ -5574,5 +5731,5 @@
 _EXPRESSION
 _POSITIV
-Protokoll_SDO
+EthernetOut
 _OUTPUTS : 0
 _NETWORK
@@ -5586,4 +5743,16 @@
 _EXPRESSION
 _POSITIV
+Protokoll_SDO
+_OUTPUTS : 0
+_NETWORK
+
+_COMMENT
+
+_END_COMMENT
+_FUNCTIONBLOCK
+???
+_BOX_EXPR : 0
+_EXPRESSION
+_POSITIV
 Protokoll_PDO
 _OUTPUTS : 0
@@ -5603,11 +5772,11 @@
 
 VAR
-	ST_Not		:RS;
-	ST_Vers		:RS;
-	ST_X			:RS;
-	ST_Y			:RS;
-	ST_Z			:RS;
-	ST_24V		:RS;
-	ST_Brems		:RS;
+	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' *)
@@ -5951,42 +6120,42 @@
 (* @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;
+	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;        (* "Status Sollwert Verarbeitung", 1=Antrieb folgt sollwert nicht, 0=Antrieb folgt Sollwert, Antrieb folgt Sollwert, erst dann Fahrbefehl schicken *)
+	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;
+
+	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;
+	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;
+
+	Signal_Absolutmasssetzen:	INT := 96;
 
 (* IP Communication parameters *)
-	IP_Address:						UDINT :=16#C0A80003;							(* IP Address to send the data to *)
+	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 *)
@@ -6000,27 +6169,29 @@
 
 (* Zeitverzoegerung zur Brermsfreigabe nach Leistung_ein; war t#1s *)
-	DelayTime_Brake:				TIME 	:=T#1s;									(*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*)
+	(* X_Gear:							UINT 	:= 1340; *)
+	(* Z_Gear: 							UINT 	:= 1140; *)  (* Between  1200 at 100deg and 0deg and 1140 between, TO BE CHECKED *)
+
+(* Aceleration values for both axes in remote control mode  Unit: 1/1000 rad/s^2 of load axis *)
+	X_HandBeschl:					UDINT	:=   10000000;	  			  				(* Maximum 300.000 to reach 2.85rpm  (allowed: 0.03 - 0.01 *)
+	Z_HandBeschl:					UDINT	:=   1000;									(*  *)
+
+(* Position:    360.000.000 = 360deg = 1 revolution *)
+(* Velocity:     100.000.000 = 1 rpm                              *)
+(* Acc/Dec:                 1.000 = 1 rad/s^2                        *)
 
 (* 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*)
+	ShaftEncoderResolution:			UDINT :=  360000000;		(* ticks per load   revolution  (* Magic I: 16384 *)     *)
+	X_MaximumVelocity:				UDINT	:=  280000000; 	                 					      (* rpm in DKC units (1/1000 rpm) max allowed vel of load axis (* Absolute maximum possible 4000/1340=2.95rpm *) (* Magic I similar: VELMAX in MACS, rpm of motor *)  *)
+	Z_MaximumVelocity:				UDINT	:=  315000000; 	                 					      (* rpm in DKC units (1/1000 rpm) max allowed vel of load axis (* Absolute maximum possible 4000/1340=2.95rpm *) (* Magic I similar: VELMAX in MACS, rpm of motor *)  *)
+	VelocityResolution:				UDINT := 100000000;	      							(* 1 U/min *)
 
 (* Maximum velocity to initialize with *)
-	PC_V_max_START:				DINT 	:= 45000000;
+	PC_V_max_START:				DINT 	:= 250000000;         (* Load RPM in DKC units (i.e. *DKC_Velocity_Scale) , Maximum allowed velocity set by PC, can be overwritten for test purpose, SDO 0x6502 *)
 
 (* An arbitrary factor coming from an oddity of the MACS *)
-	ArbitraryMACFactor:				BYTE 	:= 4;										(*No longer in use for velocity*)
+	ArbitraryMACFactor:				BYTE 	:= 1;										(*No longer in use for velocity, no longer in use for acc/pos, was 4*)
 END_VAR
 (* @OBJECT_END := 'Globale_Variablen' *)
@@ -6038,29 +6209,38 @@
 
 (* 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;
+	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_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;
+	X_Fehler:							BOOL;		(* 1= Regler meldet über Profibus Störung *)
+	X_Jog_pos:						BOOL;		(* 1= Tippen Achse X pos *)
+	X_Jog_neg:						BOOL;		(* 1= Tippen Achse X neg *)
+	X_Homing:						BOOL;		(* 1= Antrieb referenzieren aktiv *)
+	X_in_pos:							BOOL;		(* 1= Antrieb in Position *)
+	X_ist_freigegeben:				BOOL;		(* 1= Antrieb Rückmeldung Freigabe *)
+	X_in_Ref:							BOOL;		(* 1= Antrieb Rückmeldung in Referenz *)
+	X_in_Standstill:					BOOL;		(* 1= Antrieb Rückmeldung in Stillstand *)
+	X_ist_betriebsbereit:				BOOL;
+	X_IsOnline:						BOOL;        (* 1= Antrieb connected to bus *)
+	X_in_AntriebHalt:					BOOL;
+	X_EinmaligeFreigabe:			BOOL;
+	X_in_Referenz: 					BOOL;
+	X_AnnounceStartMovement:		BOOL := FALSE;
+
+	X_PC_PosGeschwindigkeit:		DINT;
+	X_PC_PosBeschleunigung:		UDINT;
+	X_PC_PosZiel:					DINT;
+	X_PC_VGeschwindigkeit:			DINT;
+	X_PC_Maximalgeschwindigkeit:	DINT;
+	X_PC_IsRelative:					BOOL;
+	X_PC_VStart:						BOOL := FALSE;
+	X_PC_AntriebHalt: 				BOOL := TRUE;
+	X_PC_StartMovement:			BOOL := FALSE;
+	X_PC_AnnounceStartMovement:	BOOL := FALSE;
+	X_PC_ForcePDO3:				BOOL := FALSE;
 END_VAR
 
@@ -6081,8 +6261,9 @@
 
 (*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;
+	Y_Fehler:				BOOL;		(* 1= Regler meldet über Profibus Störung *)
+	Y_ist_freigegeben:	BOOL;		(* 1= Antrieb Rückmeldung Freigabe *)
+	Y_in_Standstill:		BOOL;		(* 1= Antrieb Rückmeldung in Stillstand *)
+	Y_ist_betriebsbereit:	BOOL;
+	Y_IsOnline:			BOOL;        (* 1= Antrieb connected to bus *)
 END_VAR
 
@@ -6101,27 +6282,37 @@
 
 (* 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;
+	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_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;
+	Z_Fehler:							BOOL;		(* 1= Regler meldet über Profibus Störung *)
+	Z_Jog_pos:						BOOL;		(* 1= Tippen Achse X pos *)
+	Z_Jog_neg:						BOOL;		(* 1= Tippen Achse X neg *)
+	Z_in_pos:							BOOL;		(* 1= Antrieb in Position *)
+	Z_ist_freigegeben:				BOOL;		(* 1= Antrieb Rückmeldung Freigabe *)
+	Z_in_Ref:							BOOL;		(* 1= Antrieb Rückmeldung in Referenz *)
+	Z_in_Standstill:					BOOL;		(* 1= Antrieb Rückmeldung in Stillstand *)
+	Z_ist_betriebsbereit:				BOOL;
+	Z_IsOnline:						BOOL;		(* 1= Antrieb connected to bus *)
+	Z_EinmaligeFreigabe:			BOOL;
+	Z_in_AntriebHalt: 					BOOL;
+	Z_in_Referenz: 					BOOL;
+	Z_AnnounceStartMovement:		BOOL := FALSE;
+
+	Z_PC_PosGeschwindigkeit:		DINT;
+	Z_PC_PosBeschleunigung:		UDINT;
+	Z_PC_PosZiel:					DINT;
+	Z_PC_VGeschwindigkeit:			DINT;
+	Z_PC_Maximalgeschwindigkeit:	DINT;
+	Z_PC_IsRelative:					BOOL;
+	Z_PC_StartMovement:			BOOL := FALSE;
+	Z_PC_VStart:						BOOL := FALSE;
+	Z_PC_AntriebHalt: 				BOOL := TRUE;
+	Z_PC_AnnounceStartMovement:	BOOL := FALSE;
+	Z_PC_ForcePDO3:				BOOL := FALSE;
 END_VAR
 
@@ -6144,7 +6335,4 @@
 	Stoerung_MSS_Bremse:			BOOL;		(*	1= Störung MSS Bremse	*)
 	Sammelstoerung:					BOOL;		(*	1= Sammelstoerung ist aktiv	*)
-
-(*	Blinktakte		*)
-	Blink_1_I:							BOOL;		(*	Blinktakt 1Hz Impuls	*)
 
 (*  Ethernet *)
@@ -6158,32 +6346,19 @@
 	ByteBufferTXzyklisch:				ARRAY[0..99] OF BYTE;
 
-(*  PC-Daten  *)
-	X_EinmaligeFreigabe:			BOOL;
-	Z_EinmaligeFreigabe:			BOOL;
+(* Daten  *)
 	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;
+
+(* Communication *)
+	TX1M_STATUS_OldX					:BYTE:=16#FF;
+	TX1M_STATUS_OldZ					:BYTE:=16#FF;
+	TX3M_STATUS_OldX					:BYTE:=16#FF;
+	TX3M_STATUS_OldZ					:BYTE:=16#FF;
+	TX2E_POSITION_OldX				:DINT:=0;
+	TX2E_POSITION_OldY				:DINT:=0;
+	TX2E_GESCHWINDIGKEIT_OldX	:INT:=0;
+	TX2E_GESCHWINDIGKEIT_OldY	:INT:=0;
 END_VAR
 
@@ -6226,5 +6401,5 @@
 
 LIBRARY
-Iecsfc.lib 28.10.05 07:59:00
+Iecsfc.lib 28.10.05 08:59:00
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 1
@@ -6235,5 +6410,5 @@
 
 LIBRARY
-oscat14.lib 8.2.07 14:40:30
+oscat14.lib 8.2.07 15:40:30
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 203
@@ -6448,5 +6623,5 @@
 
 LIBRARY
-RIL_Check.lib 20.1.05 13:40:00
+RIL_Check.lib 20.1.05 14:40:00
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 8
@@ -6464,5 +6639,5 @@
 
 LIBRARY
-RIL_CommonTypes.lib 14.6.05 09:08:58
+RIL_CommonTypes.lib 14.6.05 10:08:58
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 1
@@ -6474,5 +6649,30 @@
 
 LIBRARY
-RIL_UTILITIES.lib 31.3.05 11:30:44
+RIL_ProfibusDP.lib 23.7.04 09:36:48
+(* @LIBRARYSYMFILEINFO := '0' *)
+NumOfPOUs: 17
+DP_ADDR: 51200
+DP_ID: 51200
+DP_RDIAG: 51200
+DP_RDIAG_EXT: 2048
+DP_RDREC: 51200
+DP_SLOT: 51200
+DP_SYCFR: 2048
+DP_WRREC: 51200
+fbdBaudrateGet: 51200
+fbdBmErrorGet: 51200
+fbdBmInfoGet: 51200
+fbdBmStateGet: 51200
+fbdKsdListGet: 51200
+fbdPdTypeGet: 51200
+fbdPrjSlaveListGet: 51200
+fbdSlaveDiagListGet: 51200
+Version_RIL_ProfibusDP_01V01: 2048
+NumOfGVLs: 1
+Globale_Variablen: 0
+END_LIBRARY
+
+LIBRARY
+RIL_UTILITIES.lib 31.3.05 12:30:44
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 34
@@ -6516,5 +6716,5 @@
 
 LIBRARY
-Standard.lib 28.10.05 07:59:00
+Standard.lib 28.10.05 08:59:00
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 21
@@ -6544,5 +6744,5 @@
 
 LIBRARY
-SYSLIBCALLBACK.LIB 28.10.05 07:59:00
+SYSLIBCALLBACK.LIB 28.10.05 08:59:00
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 2
@@ -6553,5 +6753,5 @@
 
 LIBRARY
-SysLibSockets.lib 28.10.05 07:59:00
+SysLibSockets.lib 28.10.05 08:59:00
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 25
@@ -6586,5 +6786,5 @@
 
 LIBRARY
-SysLibSocketsAsync.lib 28.10.05 07:59:00
+SysLibSocketsAsync.lib 28.10.05 08:59:00
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 25
@@ -6619,5 +6819,5 @@
 
 LIBRARY
-SysLibTime.lib 28.10.05 07:59:00
+SysLibTime.lib 28.10.05 08:59:00
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 2
@@ -6629,5 +6829,5 @@
 
 LIBRARY
-SysTaskInfo.lib 28.10.05 07:59:00
+SysTaskInfo.lib 28.10.05 08:59:00
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 1
@@ -6638,5 +6838,5 @@
 
 LIBRARY
-Util.lib 28.10.05 07:59:00
+Util.lib 28.10.05 08:59:00
 (* @LIBRARYSYMFILEINFO := '0' *)
 NumOfPOUs: 24
@@ -7054,5 +7254,5 @@
 
 MACRO
-MacroName: '??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? Diagnosis.mac'
+MacroName: '??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? Diagnosis.mac'
 END_MACRO
 
