(* @PATH := '\/Kommunikation' *) (* @SYMFILEFLAGS := '2048' *) PROGRAM EthernetIn VAR VerbindungBesteht :BOOL :=FALSE; SockKomm :DINT; SockadrKomm :SOCKADDRESS; SockadrKommSize :DINT; fdsFdSet :SOCKET_FD_SET; fdsTime :SOCKET_TIMEVAL; RC_SysSockSelect :DINT; RC_SysSockSelect3 :DINT; RC_SysSockRecv :DINT; RC_SysSockClose :BOOL; Catch :BOOL; Empfangszaehler :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 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 *) 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 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 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 (* @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 *) 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:=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; 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>6 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.*) TX2E_POSITION:=X_Pos_Geber2; 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; (*X_Pos_ist; nehmen an, dass die SE schon genau genug.*) TX2E_POSITION:=Z_Pos_Geber2; 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 *) 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; 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:=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 IF Zyklus=6 THEN 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; 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:=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 IF Zyklus=7 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]:=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 (* 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_STATUS;(*TX1M_LEER1;*) ByteBufferTXzyklisch[4]:=16#FE; (*TX1M_LEER2;*) ByteBufferTXzyklisch[5]:=TX1M_STATUS2; ByteBufferTXzyklisch[6]:=TX1M_STATUS; 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*) (* 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; 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_Az: TX_VALUE:=X_Pos_Geber2(*+X_Offset_Geber2*); END_CASE; 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: 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: 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 *) 16#100B: TX_VALUE:=RX_NODE_ID; DatenSenden:=TRUE; (* Version, Subversion zurückgeben, je ein wort *) 16#100A: TX_VALUE:=16#00010002; 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: 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*) 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:=ShaftEncoderResolution; 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: 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*) (* 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: 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'); 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: 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_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: 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 *) 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 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; 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_MaximalgeschwindigkeitSPS) 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 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 _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 _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; DetectEdge: RF_TRIG; END_VAR (* @END_DECLARATION := '0' *) _FBD_BODY _NETWORKS : 2 _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 _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 2 _FUNCTIONBLOCK DetectEdge _BOX_EXPR : 1 _OPERAND _EXPRESSION _POSITIV Betriebsart_aktiv _EXPRESSION _NEGATIV RF_TRIG _OUTPUTS : 0 _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; Geschwindigkeitsregelung: BOOL; SollwertPosition: DINT; (*Soll-Position*) SollwertGeschwindigkeit: DINT; (*Soll-Geschwindigkeit*) PositionierBeschleunigung: DWORD; (*PositionierBeschleunigung*) PC_Mode: BOOL; 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 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; IsOnline :BOOL; (* Drive is online on the bus *) 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; DelayResetOfStartMovement: TON; ToggleStartMovement: BLINK; DelayInPosition: TON; PositionFeedback1: DINT; DelayStartMovementTon: TON; DelayStartMovementTof: TOF; dummy: BOOL; dummys: BOOL; END_VAR (* @END_DECLARATION := '0' *) _FBD_BODY _NETWORKS : 51 _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 Decoder _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV PEW8 _OPERAND _EXPRESSION _POSITIV PEW9 _EXPRESSION _POSITIV Decode _OUTPUTS : 0 _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _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 _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_BACKWARD _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_FORWARD _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 _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 _POSITIV 10000 _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET ek_out_eco.feedrate_override _NETWORK _COMMENT _END_COMMENT _ASSIGN _OPERAND _EXPRESSION _POSITIV Geschwindigkeitsregelung _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. 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 _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 _NEGATIV AND _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET 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 _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV StartMovement _OPERAND _EXPRESSION _POSITIV dummy _EXPRESSION _POSITIV RS _OUTPUTS : 0 _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 _EXPRESSION _POSITIV SEL _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET dummys _NETWORK _COMMENT _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 2 _FUNCTIONBLOCK DelayStartMovementTon _BOX_EXPR : 2 _FUNCTIONBLOCK DelayStartMovementTof _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV StartMovement _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 AND _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET ek_out_eco.setpoint_acceptance _NETWORK _COMMENT Istwerte anzeigen _END_COMMENT _ASSIGN _OPERAND _EXPRESSION _POSITIV ek_in_eco.pos_act _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 _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV Diagnosewort _OPERAND _EXPRESSION _POSITIV 0 _EXPRESSION _NEGATIV EQ _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET IsOnline _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 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 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_AntriebHalt_Delay: TOF; END_VAR (* @END_DECLARATION := '0' *) _FBD_BODY _NETWORKS : 8 _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 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 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 _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 X_PC_IsRelative _OPERAND _EXPRESSION _POSITIV X_PC_VStart _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 %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 : 23 _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 X_IsOnline _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 ??? _OPERAND _EXPRESSION _POSITIV X_Pos_soll _OPERAND _EXPRESSION _POSITIV X_Vel_soll _OPERAND _EXPRESSION _POSITIV ??? _OPERAND _EXPRESSION _POSITIV ??? _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 : 23 _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 _EMPTY _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; 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 FALSE _OPERAND _EXPRESSION _POSITIV 0 _OPERAND _EXPRESSION _POSITIV 0 _OPERAND _EXPRESSION _POSITIV 0 _OPERAND _EXPRESSION _POSITIV FALSE _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 FALSE _EXPRESSION _POSITIV Ecodrive_7W_Antr_Gef_Pos _OUTPUTS : 23 _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 Y_IsOnline _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_AntriebHalt_Delay: TOF; END_VAR (* @END_DECLARATION := '0' *) _FBD_BODY _NETWORKS : 9 _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 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 _OPERAND _EXPRESSION _POSITIV Z_PC_VStart _OPERAND _EXPRESSION _POSITIV 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 _OPERAND _EXPRESSION _POSITIV IN_FB_Betrieb _OPERAND _EXPRESSION _POSITIV Z_PC_PosBeschleunigung _OPERAND _EXPRESSION _POSITIV Z_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 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 _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 Z_PC_IsRelative _OPERAND _EXPRESSION _POSITIV Z_PC_VStart _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 %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 : 23 _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 Z_IsOnline _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 ??? _OPERAND _EXPRESSION _POSITIV Z_Pos_soll _OPERAND _EXPRESSION _POSITIV Z_Vel_soll _OPERAND _EXPRESSION _POSITIV ??? _OPERAND _EXPRESSION _POSITIV ??? _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 : 23 _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 _EMPTY _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 Blinks an led (digital output) on the module to signal that the SPS is properly running _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 : 1 _OUTPUT _POSITIV _NO_SET Visual_1Hz _NETWORK _COMMENT Counts the number of cycles executed already _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 : 10 _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 EthernetIn _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _FUNCTIONBLOCK ??? _BOX_EXPR : 0 _EXPRESSION _POSITIV EthernetOut _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 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 *) 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 := 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 *) 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 := 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 := 1; (*No longer in use for velocity, no longer in use for acc/pos, was 4*) 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_Geber2: DINT; (*Allgemein für Drive 01 - Ecodrive*) 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 (* @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= 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 (* @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_Geber2: DINT; (*Allgemein für Drive 01 - Ecodrive*) 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 (* @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 *) (* 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; (* Daten *) Zykluszaehler: DINT; Betriebszustand_FB_ok: BOOL; Betriebszustand_PC_ok: BOOL; Soll_Freigabe: 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 (* 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 08:59:00 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 1 SFCActionControl: 0 NumOfGVLs: 1 Globale_Variablen: 0 END_LIBRARY LIBRARY oscat14.lib 8.2.07 15: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 14: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 10:08:58 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 1 Version_RIL_CommonTypes_02V02: 2048 NumOfGVLs: 2 Globale_Variablen: 2048 SercosAttribute: 2048 END_LIBRARY LIBRARY 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 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 08: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 08:59:00 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 2 SysCallbackRegister: 0 SysCallbackUnregister: 0 NumOfGVLs: 0 END_LIBRARY LIBRARY SysLibSockets.lib 28.10.05 08: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 08: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 08:59:00 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 2 CurTime: 0 CurTimeEx: 0 NumOfGVLs: 1 Globale_Variablen: 0 END_LIBRARY LIBRARY SysTaskInfo.lib 28.10.05 08:59:00 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 1 taskinfo: 0 NumOfGVLs: 1 Globale_Variablen: 0 END_LIBRARY LIBRARY Util.lib 28.10.05 08: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