(* @PATH := '\/Kommunikation' *) (* @SYMFILEFLAGS := '2048' *) PROGRAM Ethernet VAR SockadrListen :SOCKADDRESS; SockadrKomm :SOCKADDRESS; SockadrKommSize :DINT; fdsFdSet :SOCKET_FD_SET; fdsTime :SOCKET_TIMEVAL; CallCreate: DINT; CallBind: DINT; RC_SysSockBind: BOOL; CallCloseAfterBind: DINT; CallListen: DINT; RC_SysSockListen: BOOL; CallCloseAfterListen: DINT; CallSelectForAccept: DINT; RC_SysSockSelectForAccept: DINT; CallCloseAfterSelectForAccept: DINT; CallAccept: DINT; CallSelectForReceive: DINT; RC_SysSockSelectForReceive: DINT; CallCloseAfterSelectForReceive: DINT; RC_SysSockRecv: DINT; CallCloseAfterRecv: DINT; Empfangszaehler :DINT; CallSelectForSend: DINT; RC_SysSockSelectForSend: DINT; CallCloseAfterSelectForSend: DINT; RC_Send1: DINT; RC_Send2: DINT; Sendezaehler: DINT; SendezaehlerZyklisch: DINT; CallCloseAfterSend: DINT; END_VAR (* @END_DECLARATION := '0' *) SockKomm; IF ListenSock=0 THEN CallCreate := CallCreate + 1; ListenSock:=SysSockCreate(diAddressFamily:=SOCKET_AF_INET, diType:=SOCKET_STREAM, diProtocol:=SOCKET_IPPROTO_IP); IF ListenSock>0 THEN SockadrListen.sin_addr :=0; SockadrListen.sin_family :=2; SockadrListen.sin_port :=SysSockHtons(Socket_In_Port); CallBind := CallBind + 1; RC_SysSockBind := SysSockBind(diSocket:=ListenSock, pSockAddr:=ADR(SockadrListen), diSockAddrSize:=SIZEOF(SockadrListen)); IF NOT RC_SysSockBind THEN CallCloseAfterBind := CallCloseAfterBind + 1; SysSockClose(diSocket:=ListenSock); ListenSock := 0; ELSE CallListen := CallListen + 1; RC_SysSockListen := SysSockListen(diSocket:=ListenSock, diMaxConnections:=1); IF NOT RC_SysSockListen THEN CallCloseAfterListen := CallCloseAfterListen + 1; SysSockClose(diSocket:=ListenSock); ListenSock := 0; END_IF END_IF END_IF END_IF (* Auf Verbi ndung warten *) IF ListenSock>0 AND SockKomm=0 THEN CallSelectForAccept := CallSelectForAccept + 1; fdsFdSet.fd_count :=1; fdsFdSet.fd_array[0] :=ListenSock; fdsTime.tv_sec :=0; fdsTime.tv_usec :=0; RC_SysSockSelectForAccept:=SysSockSelect(diWidth:=SIZEOF(fdsFdSet), fdRead:=ADR(fdsFdSet), fdWrite:=0, fdExcept:=0, ptvTimeout:=ADR(fdsTime)); (* ERROR *) IF RC_SysSockSelectForAccept=-1 THEN CallCloseAfterSelectForAccept := CallCloseAfterSelectForAccept + 1; SysSockClose(ListenSock); ListenSock:=0; END_IF (* SUCCESS *) IF RC_SysSockSelectForAccept=1 THEN CallAccept := CallAccept + 1; SockadrKommSize := SIZEOF(SockadrKomm); SockKomm:=SysSockAccept(diSocket:=ListenSock, pSockAddr:=ADR(SockadrKomm), piSockAddrSize:=ADR(SockadrKommSize)); X_PC_ForcePDO3 := TRUE; Z_PC_ForcePDO3 := TRUE; END_IF (* TIME-OUT*) END_IF (* Daten empfangen *) IF SockKomm>0 THEN fdsFdSet.fd_count :=1; fdsFdSet.fd_array[0] :=SockKomm; fdsTime.tv_sec :=0; fdsTime.tv_usec :=0; CallSelectForReceive := CallSelectForReceive + 1; RC_SysSockSelectForReceive:=SysSockSelect(diWidth:=SIZEOF(fdsFdSet), fdRead:=ADR(fdsFdSet), fdWrite:=0, fdExcept:=0, ptvTimeout:=ADR(fdsTime)); (* ERROR *) IF RC_SysSockSelectForReceive=-1 THEN CallCloseAfterSelectForReceive := CallCloseAfterSelectForReceive + 1; SysSockClose(diSocket:=SockKomm); SockKomm := 0; END_IF (* SUCCESS *) IF RC_SysSockSelectForReceive=1 THEN RC_SysSockRecv:=SysSockRecv(diSocket:=SockKomm, pbyBuffer:=ADR(ByteBufferRX), diBufferSize:=11, diFlags:=0); IF RC_SysSockRecv <> 11 THEN CallCloseAfterRecv := CallCloseAfterRecv + 1; SysSockClose(diSocket:=SockKomm); SockKomm := 0; ELSE NeueDatenDa:=TRUE; Empfangszaehler:=Empfangszaehler+1; END_IF END_IF (* TIME-OUT: No data pending to be received *) END_IF IF SockKomm>0 THEN fdsFdSet.fd_count :=1; fdsFdSet.fd_array[0] :=SockKomm; fdsTime.tv_sec :=0; fdsTime.tv_usec :=0; CallSelectForSend := CallSelectForSend + 1; RC_SysSockSelectForSend:=SysSockSelect(diWidth:=SIZEOF(fdsFdSet), fdRead:=0, fdWrite:=ADR(fdsFdSet), fdExcept:=0, ptvTimeout:=ADR(fdsTime)); (* ERROR *) IF RC_SysSockSelectForSend=-1 THEN CallCloseAfterSelectForSend := CallCloseAfterSelectForSend + 1; SysSockClose(diSocket:=SockKomm); SockKomm := 0; END_IF (* SUCCESS *) RC_Send1:=0; RC_Send2:=0; IF RC_SysSockSelectForSend=1 THEN IF DatenSenden THEN RC_Send1:=SysSockSend(diSocket:=SockKomm, pbyBuffer:=ADR(ByteBufferTX), diBufferSize:=11, diFlags:=0); IF RC_Send1>0 THEN DatenSenden:=FALSE; Sendezaehler:=Sendezaehler+1; END_IF END_IF IF ZyklischeDatenSenden THEN RC_Send2:=SysSockSend(diSocket:=SockKomm, pbyBuffer:=ADR(ByteBufferTXzyklisch), diBufferSize:=11, diFlags:=0); IF RC_Send2>0 THEN ZyklischeDatenSenden:=FALSE; SendezaehlerZyklisch:=SendezaehlerZyklisch+1; END_IF END_IF END_IF IF RC_Send1=-1 OR RC_Send2=-1 OR RC_SysSockSelectForSend=0 THEN CallCloseAfterSend := CallCloseAfterSend + 1; SysSockClose(diSocket:=SockKomm); SockKomm := 0; END_IF END_IF END_PROGRAM (* @PATH := '\/Kommunikation' *) (* @SYMFILEFLAGS := '2048' *) PROGRAM EthernetIn_old 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 := '2048' *) PROGRAM EthernetOut_old 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; calls: INT; call1: INT; call2: INT; call3: INT; call4: INT; call5: INT; call6: INT; call7: INT; call8: INT; SUCCESS: BOOL; TIMEOUT: BOOL; ERROR: BOOL; 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 SendSock=0 THEN 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 (*RC_SysSockConnect := FALSE;*) (*NEW*) IF (*SendSock>0*) NOT RC_SysSockConnect THEN RC_SysSockConnect:=SysSockConnect(diSocket:=SendSock, pSockAddr:=ADR(SockadrKomm2), diSockAddrSize:=SockadrKommSize2); (* Linux says: 0 on success, -1 on error *) (* It seems that in the L40 setting the socket to non-blocking makes the SysSockConnect always succeed *) call1 := call1 + 1; (* RC_SysSockConnect:=TRUE;*) 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)); IF RC_SysSockSelect2=1 THEN SUCCESS:=TRUE; END_IF IF RC_SysSockSelect2=0 THEN TIMEOUT:=TRUE; END_IF IF RC_SysSockSelect2=-1 THEN ERROR:=TRUE; END_IF (*1=success*, 0=time-out, -1=error*) call2 := call2 + 1; END_IF Ret_Send1:=-1; Ret_Send2:=-1; IF RC_SysSockSelect2>0 THEN Ret_Send1:=0; Ret_Send2:=0; call3 := call3 + 1; IF DatenSenden THEN Ret_Send1:=SysSockSend(diSocket:=SendSock, pbyBuffer:=ADR(ByteBufferTX), diBufferSize:=11, diFlags:=0); call4 := call4 + 1; END_IF IF ZyklischeDatenSenden THEN Ret_Send2:=SysSockSend(diSocket:=SendSock, pbyBuffer:=ADR(ByteBufferTXzyklisch), diBufferSize:=11, diFlags:=0); call5 := call5 + 1; END_IF END_IF IF Ret_Send1=-1 OR Ret_Send2=-1 THEN IF SendSock>0 THEN SysSockClose(diSocket:=SendSock); SendSock := 0; call6 := call6 + 1; END_IF END_IF IF Ret_Send1>0 THEN call7 := call7 +1 ; DatenSenden:=FALSE; Sendezaehler:=Sendezaehler+1; END_IF IF Ret_Send2>0 THEN call8 := call8 + 1; 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 *) TX2E_POSITION :DWORD; TX2E_GESCHWINDIGKEIT :WORD; TX2E_BESCHLEUNIGUNG :WORD; Zyklus :INT; X_Err_ID_Old :DINT; Z_Err_ID_Old :DINT; (* Communication *) TX1M_STATUS_OldX :BYTE:=16#FF; TX1M_STATUS_OldZ :BYTE:=16#FF; TX3M_STATUS_OldX :DWORD:=16#FFFF; TX3M_STATUS_OldZ :DWORD:=16#FFFF; TX2E_POSITION_OldX :DINT:=0; TX2E_POSITION_OldY :DINT:=0; TX2E_GESCHWINDIGKEIT_OldX :INT:=0; TX2E_GESCHWINDIGKEIT_OldY :INT:=0; 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_STATUS.0:=1;(*X_EinmaligeFreigabe;*) TX3M_STATUS.0:=X_ist_betriebsbereit; TX3M_STATUS.1:=1;(*WAR: Leistung_DKC_IO;*) TX3M_STATUS.2:=Not_Aus_IO; TX3M_STATUS.3:=UeberspannungsSchutz_OK; TX3M_STATUS.4:=FB_soll_drehen_links OR FB_soll_drehen_rechts OR FB_soll_schwenk_auf OR FB_soll_schwenk_ab;(*Change to TIPPEN AN; NOT IN_PC_Betrieb;*) TX3M_STATUS.5:=X_ist_freigegeben; TX3M_STATUS.6:= 1; (*IN_Zusatz_Bremse_Z;*) TX3M_STATUS.7:=LeistungEinAz; TX3M_STATUS.8:=NOT UPS_ALARM; TX3M_STATUS.9:=UPS_BattMode; TX3M_STATUS.10:=UPS_Charging; 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_STATUS.0:=1;(*Z_EinmaligeFreigabe;*) TX3M_STATUS.0:=Z_ist_betriebsbereit; TX3M_STATUS.1:=1; (*WAR: Leistung_DKC_IO;*) TX3M_STATUS.2:=Not_Aus_IO; TX3M_STATUS.3:=UeberspannungsSchutz_OK; TX3M_STATUS.4:=FB_soll_drehen_links OR FB_soll_drehen_rechts OR FB_soll_schwenk_auf OR FB_soll_schwenk_ab;(*Change to TIPPEN AN; NOT IN_PC_Betrieb;*) TX3M_STATUS.5:=Z_ist_freigegeben; TX3M_STATUS.6:= 1; (*IN_Zusatz_Bremse_Z;*) TX3M_STATUS.7:=LeistungEinZd; TX3M_STATUS.8:=NOT UPS_ALARM; TX3M_STATUS.9:=UPS_BattMode; TX3M_STATUS.10:=UPS_Charging; 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] :=DINT_TO_BYTE(SHR(TX2M_DIAGNOSENUMMER, 16)); (*WORD_TO_BYTE(SHR(TX2M_RESERVE1 AND 16#FF00,8));*) ByteBufferTXzyklisch[9] :=DINT_TO_BYTE(SHR(TX2M_DIAGNOSENUMMER, 8)); ByteBufferTXzyklisch[10] :=DINT_TO_BYTE( TX2M_DIAGNOSENUMMER ); 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]:=DWORD_TO_BYTE(TX3M_STATUS); (*TX1M_LEER1;*) ByteBufferTXzyklisch[4]:=DWORD_TO_BYTE(SHR(TX3M_STATUS,8)); (*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: TX_VALUE:=1; (*IF X_EinmaligeFreigabe=FALSE THEN TX_VALUE:=16#00000000; ELSE TX_VALUE:=16#00000001; END_IF*) NODE_ID_Mac_Zd: TX_VALUE:=1; (*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(X_Err_ID,8) + 16#FF; NODE_ID_Mac_Zd: TX_VALUE:=SHL(Z_Err_ID,8) + 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_Vel; NODE_ID_Mac_Zd: TX_VALUE:=Z_PC_Vel; 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_Beschl; NODE_ID_Mac_Zd: TX_VALUE:=Z_PC_Beschl; END_CASE; DatenSenden:=TRUE; 16#4000: CASE RX_NODE_ID OF NODE_ID_Mac_Zd: TX_VALUE:=AnalogOut1; NODE_ID_Mac_Az: TX_VALUE:=AnalogOut2; END_CASE DatenSenden:=TRUE; 16#4002: CASE RX_NODE_ID OF NODE_ID_Mac_Zd: TX_VALUE:=AnalogIn1; NODE_ID_Mac_Az: TX_VALUE:=AnalogIn2; 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_Vel:=RX_VALUE; NODE_ID_Mac_Zd: Z_PC_Vel:=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_Beschl:=RX_VALUE; NODE_ID_Mac_Zd: Z_PC_Beschl:=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:=FALSE; 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:=FALSE; 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; 16#4000: IF (RX_VALUE<16#8000) THEN CASE RX_NODE_ID OF NODE_ID_Mac_Zd: AnalogOut1 := DWORD_TO_WORD(RX_VALUE); NODE_ID_Mac_Az: AnalogOut2 := DWORD_TO_WORD(RX_VALUE); END_CASE END_IF 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_Maximalgeschwindigkeit 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*) Was_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*) Was_PositionierBeschleunigung: DWORD; (*PositionierBeschleunigung*) Was_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*) PEW10: WORD; StartMovement :BOOL; TippenBeschl: DWORD; PC_Beschl: DWORD; 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 :DINT; (*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*) PAW10 :WORD; PAW11 :WORD; 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; DelayAHJog: TOF; TippenAnhaltenDetektor: F_TRIG; TippenWartenAufStillstand: RS; TippenAnhalten: BOOL; TippenAnhaltenVerzoegerung: TOF; PositionierBeschleunigung: DWORD; (*PositionierBeschleunigung*) END_VAR (* @END_DECLARATION := '0' *) _FBD_BODY _NETWORKS : 49 _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 _FUNCTIONBLOCK Decoder _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV PEW6 _OPERAND _EXPRESSION _POSITIV PEW7 _EXPRESSION _POSITIV Decode _OUTPUTS : 0 _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET ek_in_eco.diagnosis _NETWORK _COMMENT _END_COMMENT _ASSIGN _OPERAND _EXPRESSION _POSITIV PEW8 _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 PEW9 _OPERAND _EXPRESSION _POSITIV PEW10 _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_Bit1 _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 (* TRUE was PC_mode *) _COMMENT _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV TRUE _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 : 3 _OPERAND _EXPRESSION _POSITIV INTERN_FRG _OPERAND _EXPRESSION _POSITIV PC_Start_pos _OPERAND _EXPRESSION _POSITIV ek_in_eco.in_reference _EXPRESSION _POSITIV AND _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET INTERN_POS_START _NETWORK _COMMENT _END_COMMENT _ASSIGN _FUNCTIONBLOCK TippenWartenAufStillstand _BOX_EXPR : 2 _FUNCTIONBLOCK TippenAnhaltenDetektor _BOX_EXPR : 1 _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV TippenPlus _OPERAND _EXPRESSION _POSITIV TippenMinus _EXPRESSION _POSITIV OR _EXPRESSION _POSITIV F_TRIG _OUTPUTS : 0 _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV ek_in_eco.in_standstill _OPERAND _EXPRESSION _POSITIV FALSE _EXPRESSION _POSITIV OR _EXPRESSION _POSITIV RS _OUTPUTS : 0 _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET TippenAnhalten _NETWORK _COMMENT _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV TippenPlus _OPERAND _EXPRESSION _POSITIV TippenAnhalten _EXPRESSION _POSITIV OR _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET TippenPlus _NETWORK _COMMENT _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV TippenMinus _OPERAND _EXPRESSION _POSITIV TippenAnhalten _EXPRESSION _POSITIV OR _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET TippenMinus _NETWORK _COMMENT Beschleunigung wird auch fuer Tipp-Betrieb gesetzt _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 3 _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV TippenPlus _OPERAND _EXPRESSION _POSITIV TippenMinus _EXPRESSION _POSITIV OR _OPERAND _EXPRESSION _POSITIV PC_Beschl _OPERAND _EXPRESSION _POSITIV TippenBeschl _EXPRESSION _POSITIV SEL _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET PositionierBeschleunigung _NETWORK _COMMENT DKC-Antrieb Halt ansteuern _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 3 _FUNCTIONBLOCK DelayAHJog _BOX_EXPR : 2 _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV TippenPlus _OPERAND _EXPRESSION _POSITIV TippenMinus _EXPRESSION _POSITIV OR _OPERAND _EXPRESSION _POSITIV T#0s _EXPRESSION _POSITIV TOF _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET _EMPTY _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 _END_COMMENT _ASSIGN _OPERAND _EXPRESSION _POSITIV FALSE _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET ek_out_eco.set_operating_mode_Bit0 _NETWORK _COMMENT _END_COMMENT _ASSIGN _OPERAND _EXPRESSION _POSITIV FALSE _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET ek_out_eco.set_operating_mode_Bit1 _NETWORK _COMMENT Tippen _END_COMMENT _ASSIGN _OPERAND _EXPRESSION _POSITIV TippenPlus _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET ek_out_eco.jog_forward _NETWORK _COMMENT _END_COMMENT _ASSIGN _OPERAND _EXPRESSION _POSITIV TippenMinus _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 FALSE _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 _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#50ms _EXPRESSION _POSITIV TOF _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET _EMPTY _OPERAND _EXPRESSION _POSITIV t#50ms _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 _END_COMMENT _ASSIGN _OPERAND _EXPRESSION _POSITIV StartMovement _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 TippenPlus _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 TippenMinus _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 Ausgangssignale an Profibus schreiben _END_COMMENT _ASSIGN _OPERAND _EXPRESSION _POSITIV ek_out_eco.steuerwort _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET PAW1 _NETWORK _COMMENT _END_COMMENT _ASSIGN _FUNCTIONBLOCK Encoder _BOX_EXPR : 1 _OPERAND _EXPRESSION _POSITIV ek_out_eco.pos_cmd _EXPRESSION _POSITIV Encode _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET PAW3 _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET PAW2 _NETWORK _COMMENT _END_COMMENT _ASSIGN _FUNCTIONBLOCK Encoder _BOX_EXPR : 1 _OPERAND _EXPRESSION _POSITIV ek_out_eco.vel_cmd _EXPRESSION _POSITIV Encode _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET PAW5 _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET PAW4 _NETWORK _COMMENT _END_COMMENT _ASSIGN _OPERAND _EXPRESSION _POSITIV ek_out_eco.signalsteuerwort _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET PAW6 _NETWORK _COMMENT _END_COMMENT _ASSIGN _FUNCTIONBLOCK Encoder _BOX_EXPR : 1 _OPERAND _EXPRESSION _POSITIV PositionierBeschleunigung _EXPRESSION _POSITIV Encode _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET PAW8 _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET PAW7 _NETWORK _COMMENT PositionierVerzoegerung _END_COMMENT _ASSIGN _FUNCTIONBLOCK Encoder _BOX_EXPR : 1 _OPERAND _EXPRESSION _POSITIV 0 _EXPRESSION _POSITIV Encode _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET PAW10 _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET PAW9 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; X_AntriebHalt_Delay: TOF; END_VAR (* @END_DECLARATION := '0' *) _FBD_BODY _NETWORKS : 5 _NETWORK _COMMENT alter X_Pos_soll Wert fuer X_PC_VStart: -+536000000 _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 3 _OPERATOR _BOX_EXPR : 2 _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 900000 _OPERAND _EXPRESSION _POSITIV -900000 _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 _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV FB_Soll_Drehen_Links _OPERAND _EXPRESSION _POSITIV FB_Soll_Drehen_Rechts _EXPRESSION _POSITIV OR _OPERATOR _BOX_EXPR : 3 _OPERAND _EXPRESSION _POSITIV X_PC_VStart _OPERAND _EXPRESSION _POSITIV X_PC_Vel _OPERATOR _BOX_EXPR : 1 _OPERAND _EXPRESSION _POSITIV X_PC_VGeschwindigkeit _EXPRESSION _POSITIV ABS _EXPRESSION _POSITIV SEL _OPERAND _EXPRESSION _POSITIV X_TippenVel _EXPRESSION _POSITIV SEL _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET X_Vel_soll _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 : 27 _OPERAND _EXPRESSION _POSITIV Soll_Freigabe _OPERAND _EXPRESSION _POSITIV FALSE _OPERAND _EXPRESSION _POSITIV Quitt _OPERAND _EXPRESSION _POSITIV FALSE _OPERAND _EXPRESSION _POSITIV FALSE _OPERAND _EXPRESSION _POSITIV FB_Soll_Drehen_Links _OPERAND _EXPRESSION _POSITIV FB_Soll_Drehen_Rechts _OPERAND _EXPRESSION _NEGATIV X_PC_AntriebHalt _OPERAND _EXPRESSION _POSITIV X_PC_IsRelative _OPERAND _EXPRESSION _POSITIV FALSE _OPERAND _EXPRESSION _POSITIV X_Pos_soll _OPERAND _EXPRESSION _POSITIV X_Vel_soll _OPERAND _EXPRESSION _POSITIV 0 _OPERAND _EXPRESSION _POSITIV FALSE _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 %IW118 _OPERAND _EXPRESSION _POSITIV X_PC_StartMovement _OPERAND _EXPRESSION _POSITIV X_TippenBeschl _OPERAND _EXPRESSION _POSITIV X_PC_Beschl _EXPRESSION _POSITIV Ecodrive_7W_Antr_Gef_Pos _OUTPUTS : 25 _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 _OUTPUT _POSITIV _NO_SET %QW118 _OUTPUT _POSITIV _NO_SET %QW120 END_PROGRAM (* @PATH := '' *) (* @SYMFILEFLAGS := '2048' *) PROGRAM AchseZ VAR Antrieb_3: Ecodrive_7W_Antr_Gef_Pos; Z_AntriebHalt_Delay: TOF; END_VAR (* @END_DECLARATION := '0' *) _FBD_BODY _NETWORKS : 5 _NETWORK _COMMENT alter Z_Pos_soll Wert fuer Z_PC_VStart: +-100000000 _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 3 _OPERATOR _BOX_EXPR : 2 _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 1000000 _OPERAND _EXPRESSION _POSITIV -1000000 _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 _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV FB_soll_schwenk_auf _OPERAND _EXPRESSION _POSITIV FB_soll_schwenk_ab _EXPRESSION _POSITIV OR _OPERATOR _BOX_EXPR : 3 _OPERAND _EXPRESSION _POSITIV Z_PC_VStart _OPERAND _EXPRESSION _POSITIV Z_PC_Vel _OPERATOR _BOX_EXPR : 1 _OPERAND _EXPRESSION _POSITIV Z_PC_VGeschwindigkeit _EXPRESSION _POSITIV ABS _EXPRESSION _POSITIV SEL _OPERAND _EXPRESSION _POSITIV Z_TippenVel _EXPRESSION _POSITIV SEL _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET Z_Vel_soll _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 : 27 _OPERAND _EXPRESSION _POSITIV Soll_Freigabe _OPERAND _EXPRESSION _POSITIV FALSE _OPERAND _EXPRESSION _POSITIV Quitt _OPERAND _EXPRESSION _POSITIV FALSE _OPERAND _EXPRESSION _POSITIV FALSE _OPERAND _EXPRESSION _POSITIV FB_soll_schwenk_auf _OPERAND _EXPRESSION _POSITIV FB_soll_schwenk_ab _OPERAND _EXPRESSION _NEGATIV Z_PC_AntriebHalt _OPERAND _EXPRESSION _POSITIV Z_PC_IsRelative _OPERAND _EXPRESSION _POSITIV FALSE _OPERAND _EXPRESSION _POSITIV Z_Pos_soll _OPERAND _EXPRESSION _POSITIV Z_Vel_soll _OPERAND _EXPRESSION _POSITIV 0 _OPERAND _EXPRESSION _POSITIV FALSE _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 %IW198 _OPERAND _EXPRESSION _POSITIV Z_PC_StartMovement _OPERAND _EXPRESSION _POSITIV Z_TippenBeschl _OPERAND _EXPRESSION _POSITIV Z_PC_Beschl _EXPRESSION _POSITIV Ecodrive_7W_Antr_Gef_Pos _OUTPUTS : 25 _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 _OUTPUT _POSITIV _NO_SET %QW198 _OUTPUT _POSITIV _NO_SET %QW200 END_PROGRAM (* @PATH := '' *) (* @SYMFILEFLAGS := '2048' *) PROGRAM Allgemein VAR Blinkgen: BLINK; END_VAR (* @END_DECLARATION := '0' *) _FBD_BODY _NETWORKS : 3 _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 _NETWORK _COMMENT Signal 24V power for remote control _END_COMMENT _ASSIGN _OPERAND _EXPRESSION _POSITIV TRUE _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET Out1 END_PROGRAM (* @PATH := '' *) (* @SYMFILEFLAGS := '2048' *) PROGRAM Betriebsarten VAR Time_Enable: TON; ST_24V: RS; END_VAR (* @END_DECLARATION := '0' *) _FBD_BODY _NETWORKS : 3 _NETWORK _COMMENT _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV LeistungEinAz _OPERAND _EXPRESSION _POSITIV LeistungEinZd _EXPRESSION _POSITIV AND _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET Leistung_Ein _NETWORK _COMMENT Anzeige Stoerung _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 4 _OPERAND _EXPRESSION _NEGATIV Not_aus_IO _OPERAND _EXPRESSION _NEGATIV UeberspannungsSchutz_OK _OPERAND _EXPRESSION _POSITIV X_Fehler _OPERAND _EXPRESSION _POSITIV Z_Fehler _EXPRESSION _POSITIV OR _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET Sammelstoerung _NETWORK _COMMENT Antriebsfreigabe (Einmalige Freigabe muss zurueckgesetzt werden wenn Tuer offen -- noch nicht implementiert!) _END_COMMENT _ASSIGN _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV Leistung_Ein _OPERAND _EXPRESSION _NEGATIV Sammelstoerung _EXPRESSION _POSITIV AND _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 : 7 _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 ??? _BOX_EXPR : 0 _EXPRESSION _POSITIV AchseX _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _FUNCTIONBLOCK ??? _BOX_EXPR : 0 _EXPRESSION _POSITIV AchseZ _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _FUNCTIONBLOCK ??? _BOX_EXPR : 0 _EXPRESSION _POSITIV Ethernet _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _FUNCTIONBLOCK ??? _BOX_EXPR : 0 _EXPRESSION _POSITIV Protokoll_SDO _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _FUNCTIONBLOCK ??? _BOX_EXPR : 0 _EXPRESSION _POSITIV Protokoll_PDO _OUTPUTS : 0 END_PROGRAM (* @PATH := '' *) TYPE struct_ek_in_eco: STRUCT statuswort :WORD; (* P4078 *) (* 10: Betriebsmodus, 00: Parametriermodus *) {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' S403, Bit0} {bitaccess in_standstill 3 'Antrieb steht / In-standstill', S331, Bit0} {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'} {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'} (* 00: Other, 01: "bb", 10: "Ab", 11: "AF", bb=eingeschaltet, Ab=Leistung an *) {bitaccess ready_to_operate_Bit0 14 'bb Bit0 / Ready to operate_bit0'} {bitaccess ready_to_operate_Bit1 15 'Ab Bit1 / Ready to operate_bit1'} pos_act :DINT; (* Istposition / actual position *) vel_act :DINT; (* Istgeschwindigkeit / actual velocity *) diagnosis :DINT; (* Diagnose des Antriebs, drive diagnosis *) signalstatuswort :WORD; (* Signalstatuswort *) END_STRUCT END_TYPE (* @END_DECLARATION := '0' *) (* @PATH := '' *) TYPE struct_ek_out_eco : STRUCT steuerwort :WORD; {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, 0->1 Command C5, 1->0 End C5'} (* Jog fwd/bwd = 00: Positioning active (Start by toggle of bit 0), 11: Halt the axis (Positioninghalt) *) {bitaccess jog_forward 6 'Jog vorward'} {bitaccess jog_backwards 7 'Jog backward'} (* {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)'} (* 0->1 Start drive, 1->0 Drive halt (set nominal velocity 0) *) {bitaccess drive_halt 13 'Antrieb-Halt / drive halt', P116-Bit13} (* 0/1 Drive enable/disable (AF) *) {bitaccess drive_enable 14 'Antrieb-Freigabe / drive enable', P116-Bit14} (* 0->1 Drive enable (Reglerfreigabe), 1->0 Best mögliche Stillsetzung gem. P119 *) {bitaccess drive_on 15 'Antrieb-Ein / drive on', P116-Bit15} pos_cmd :DINT; (*Positionier-Sollwert*) vel_cmd :DINT; (*Positionier-Geschwindigkeit*) (* feedrate_override :WORD; (*Feedrate-Override *)*) signalsteuerwort :WORD; (*Signalsteuerwort*) acc_cmd :DINT; (*Positionier-Beschleunigung*) dec_cmd :DINT; (*Positionier-Verzögerung*) END_STRUCT END_TYPE (* @END_DECLARATION := '0' *) (* @GLOBAL_VARIABLE_LIST := 'EA_Symbolik' *) (* @PATH := '' *) (* @SYMFILEFLAGS := '2048' *) VAR_GLOBAL (* Eingänge *) LeistungEinAz AT%IX0.2:BOOL; (* 1= Leistung eingeschaltet *) LeistungEinZd AT%IX0.3:BOOL; (* 1= Leistung eingeschaltet *) FB_soll_schwenk_auf AT%IX0.0:BOOL; (* 1= Befehl von Fernbedienung : Schwenken nach oben *) FB_soll_schwenk_ab AT%IX0.1:BOOL; (* 1= Befehl von Fernbedienung : Schwenken nach unten *) FB_soll_drehen_rechts AT%IX0.4:BOOL; (* 1= Befehl von Fernbedienung : Drehen nach rechts; war vorher auf IX1.3 *) FB_soll_drehen_links AT%IX0.5:BOOL; (* 1= Befehl von Fernbedienung : Drehen nach links; war vorher auf IX1.2 *) UeberspannungsSchutz_OK AT%IX0.6:BOOL; (* 1= Überspannungsschutz Zuleitung ist OK *) Not_Aus_IO AT%IX0.7:BOOL; (* 1= Not-Aus ist IO *) UPS_Alarm AT%IX1.0:BOOL; (* 0= UPS ALARM *) UPS_BattMode AT%IX1.1:BOOL; (* 1= Batt. Discharging *) UPS_Charging AT%IX1.2:BOOL; (* 1= Batt. Charging *) (* Leistung_DKC_IO AT%IX1.3:BOOL;*) (* 1= Motorschutzschalter DKc´s sind IO *) (* Schutztueren_IO AT%IX1.4:BOOL;*) (* 1= Schutztüren sind IO *) Quitt AT%IX1.7:BOOL; (* 1= Störung quittieren *) (*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 *)*) (* Ausgänge *) Out1 AT%QX0.0:BOOL; (* Reserve *) Out2 AT%QX0.1:BOOL; (* Reserve *) Out3 AT%QX0.2:BOOL; (* Reserve *) Out4 AT%QX0.3:BOOL; (* Reserve *) Out5 AT%QX0.4:BOOL; (* Reserve *) Out6 AT%QX0.5:BOOL; (* Reserve *) Out7 AT%QX0.6:BOOL; (* Reserve *) Visual_1Hz AT%QX0.7:BOOL; (* Reserve *) (* Analog Interface *) AnalogIn1 AT%IW2:WORD; AnalogIn2 AT%IW4:WORD; AnalogOut1 AT%QW2:WORD; AnalogOut2 AT%QW4:WORD; 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; (* ===== Felbus: Steuerwort P-0-04077 ===== *) 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 *) 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; (* Gear Ratio as set in DKC -- to be read from DKC via SDO *) (* X_Gear: UINT := 1590; *) (* Z_Gear: UINT := 1590; *) (* 0,0001U/min 10.000 = 1U/min *) X_TippenVel: UDINT := 6300000; (* 6300000/1590 = 630U/min ~ 0.40U/min FACT *) Z_TippenVel: UDINT := 6300000; (* 6300000/1590 = 630U/min ~ 0.40U/min FACT *) (* Aceleration values for both axes in remote control mode Unit: 1/1000 rad/s^2 of load axis *) X_TippenBeschl: UDINT := 50000000; (* 50 rad/s^2 (Motor) ~ 1.8deg/s^2 (Tel) FACT *) Z_TippenBeschl: UDINT := 50000000; (* 50 rad/s^2 (Motor) ~ 1.8deg/s^2 (Tel) FACT *) (* Output resolution of the Motor and Shaftencoder values, as the output and DKC velocity scale *) ShaftEncoderResolution: UDINT := 3600000 (*00*); X_MaximumVelocity: UDINT := 49000000; (* 4900U/min (Motor) FACT *) Z_MaximumVelocity: UDINT := 49000000; (* 4900U/min (Motor) FACT *) VelocityResolution: UDINT := 15900000; (* 1 U/min (Tel) = 1590 U/min (Motor) *) (* Position: 360.000.000 = 360deg = 1 revolution *) (* Velocity: 100.000.000 = 1 rpm *) (* Acc/Dec: 1.000 = 1 rad/s^2 *) (* Maximum velocity to initialize with *) PC_V_max_START: DINT := 1000000; (* Load RPM in DKC units (i.e. *DKC_Velocity_Scale) , Maximum allowed velocity set by PC, can be overwritten for test purpose, SDO 0x6502 *) 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: DINT; (* 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_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_Vel: DINT; X_PC_Beschl: 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_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: DINT; (* 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_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_Vel: DINT; Z_PC_Beschl: UDINT; Z_PC_PosZiel: DINT; Z_PC_VGeschwindigkeit: DINT; Z_PC_Maximalgeschwindigkeit: DINT; Z_PC_IsRelative: BOOL; Z_PC_VStart: BOOL := FALSE; Z_PC_AntriebHalt: BOOL := TRUE; Z_PC_StartMovement: BOOL := FALSE; 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 Sammelstoerung: BOOL; (* 1= Sammelstoerung ist aktiv *) Leistung_Ein: BOOL; (* Ethernet *) ListenSock: DINT; SockKomm: 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_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 *) (* @GLOBAL_VARIABLE_LIST := 'Variablen_Konfiguration' *) (* @PATH := '' *) (* @SYMFILEFLAGS := '2048' *) VAR_CONFIG END_VAR (* @OBJECT_END := 'Variablen_Konfiguration' *) (* @CONNECTIONS := Variablen_Konfiguration 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 : '','','' _VISUALSETTINGSDYNTEXTFILECOUNT : 0 _END_ALARMCONFIG LIBRARY Iecsfc.lib 15.12.06 10:27:00 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 1 SFCActionControl: 0 NumOfGVLs: 1 Globale_Variablen: 0 END_LIBRARY LIBRARY oscat14.lib 10.12.09 11:49:21 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 0 NumOfGVLs: 0 END_LIBRARY LIBRARY RIL_CHECKRTV.LIB 12.7.05 14:51:12 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 11 CheckBounds: 2048 CheckDivByte: 2048 CheckDivDWord: 2048 CheckDivLReal: 2048 CheckDivReal: 2048 CheckDivWord: 2048 CheckPointer: 2048 CheckPointerAligned: 2048 CheckRangeSigned: 2048 CheckRangeUnsigned: 2048 Version_RIL_CheckRtv_01V00: 2048 NumOfGVLs: 1 Globale_Variablen: 2048 END_LIBRARY LIBRARY RIL_COMMONTYPES.LIB 26.11.07 10:48:28 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 1 Version_RIL_CommonTypes_02V04: 2048 NumOfGVLs: 2 Globale_Variablen: 2048 SercosAttribute: 2048 END_LIBRARY LIBRARY RIL_ProfibusDP.lib 27.9.06 12:58:46 (* @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_01V02: 2048 NumOfGVLs: 1 Globale_Variablen: 0 END_LIBRARY LIBRARY RIL_PROFIBUSDP_02.LIB 4.10.06 12:04:44 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 11 IL_DPBaudrateGet: 2048 IL_DPDeviceListGet: 2048 IL_DPDevInfoGet: 2048 IL_DPIdent: 2048 IL_DPPrjSlaveListGet: 2048 IL_DPReadDiag: 2048 IL_DPSlaveDiagListGet: 2048 IL_DPSycFr: 2048 IL_DPV1Read: 2048 IL_DPV1Write: 2048 Version_RIL_ProfibusDP_02_01V00: 2048 NumOfGVLs: 1 Globale_Variablen: 0 END_LIBRARY LIBRARY RIL_UTILITIES.LIB 31.3.05 11:30:44 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 34 IL_AsciiToByte: 2048 IL_BoolToByte: 2048 IL_BoolToDWord: 2048 IL_BoolToWord: 2048 IL_ByteToAscii: 2048 IL_ByteToBool: 2048 IL_ByteToDWord: 2048 IL_ConcatByte: 2048 IL_ConcatWord: 2048 IL_Date: 2048 IL_DateAndTime: 2048 IL_DWordToBool: 2048 IL_DWordToByte: 2048 IL_ExtSysTimeDate: 2048 IL_HighByte: 2048 IL_HighResTimeDiff: 2048 IL_HighResTimeTick: 2048 IL_HighWord: 2048 IL_LowByte: 2048 IL_LowWord: 2048 IL_RealToString: 2048 IL_SercosAttribute: 2048 IL_SercosElementsToParaNo: 2048 IL_SercosStringToParaNo: 2048 IL_SwapDWord: 2048 IL_SwapWord: 2048 IL_SysTime64: 2048 IL_SysTime64ToSysTimeDate: 2048 IL_SysTimeDate: 2048 IL_SysTimeDateToSysTime64: 2048 IL_TimeOfDay: 2048 IL_Toggle: 2048 IL_WordToBool: 2048 Version_RIL_Utilities_01V02: 2048 NumOfGVLs: 1 Globale_Variablen: 2048 END_LIBRARY LIBRARY Standard.LIB 15.12.06 10:27: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 8.5.07 05:33:00 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 2 SysCallbackRegister: 0 SysCallbackUnregister: 0 NumOfGVLs: 0 END_LIBRARY LIBRARY SysLibSockets.lib 15.12.06 10:28:00 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 26 SysSockAccept: 0 SysSockBind: 0 SysSockClose: 0 SysSockConnect: 0 SysSockCreate: 0 SysSockGetHostByName: 0 SysSockGetHostName: 0 SysSockGetLastError: 2048 SysSockGetLastErrorSync: 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 21.1.08 06:40:08 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 26 SysSockAcceptAsync: 2048 SysSockBindAsync: 2048 SysSockCloseAllOpenAsync: 2048 SysSockCloseAsync: 2048 SysSockConnectAsync: 2048 SysSockCreateAsync: 2048 SysSockGetHostByNameAsync: 2048 SysSockGetHostNameAsync: 2048 SysSockGetLastErrorAsync: 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 15.12.06 10:28:00 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 2 CurTime: 0 CurTimeEx: 0 NumOfGVLs: 1 Globale_Variablen: 0 END_LIBRARY LIBRARY SysTaskInfo.lib 15.12.06 10:28:00 (* @LIBRARYSYMFILEINFO := '0' *) NumOfPOUs: 1 taskinfo: 0 NumOfGVLs: 1 Globale_Variablen: 0 END_LIBRARY LIBRARY Util.lib 21.1.08 06:40:20 (* @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 L40 DP 04VRS' _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: '' _PARAMETER _PARAM 1: 0, 'Off' _END_PARAMETER _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: %IB1 _IECOUT: %QB0 _IECDIAG: %MB0 _DOWNLOAD: 1 _EXCLUDEFROMAUTOADR: 0 _COMMENT: '' _CHANNEL _SECTION_NAME: 'IB8' _INDEX_IN_PARENT: '1' _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 AO 2/U/BP' _INDEX_IN_PARENT: '1' _MODULE_NAME: 'R-IB IL AO 2/U/BP' _NODE_ID: 3 _IECIN: %IW2 _IECOUT: %QW2 _IECDIAG: %MB4 _DOWNLOAD: 1 _EXCLUDEFROMAUTOADR: 0 _COMMENT: '' _CHANNEL _SECTION_NAME: 'AnalogO_W' _INDEX_IN_PARENT: '1' _SYMBOLIC_NAME: '' _COMMENT: '' _CHANNEL_MODE: 'Q' _IECADR: %QW2 _END_CHANNEL _CHANNEL _SECTION_NAME: 'AnalogO_W' _INDEX_IN_PARENT: '2' _SYMBOLIC_NAME: '' _COMMENT: '' _CHANNEL_MODE: 'Q' _IECADR: %QW4 _END_CHANNEL _CHANNEL _SECTION_NAME: 'AnalogI_W' _INDEX_IN_PARENT: '3' _SYMBOLIC_NAME: '' _COMMENT: '' _CHANNEL_MODE: 'I' _IECADR: %IW2 _END_CHANNEL _CHANNEL _SECTION_NAME: 'AnalogI_W' _INDEX_IN_PARENT: '4' _SYMBOLIC_NAME: '' _COMMENT: '' _CHANNEL_MODE: 'I' _IECADR: %IW4 _END_CHANNEL _END_MODULE _END_MODULE _MODULE: 'DPMASTER' _SECTION_NAME: 'DpMaster' _INDEX_IN_PARENT: '3' _MODULE_NAME: 'L40 DP-Master' _NODE_ID: 3 _IECIN: %IB1 _IECOUT: %QB1 _IECDIAG: %MB0 _DOWNLOAD: 1 _EXCLUDEFROMAUTOADR: 0 _COMMENT: '' _DEVICESPECIFIC_DATA _GSD_FILENAME: 'RX010160.gsd' _STATIONNUMBER: 1 _HIGHEST_STATIONNUMBER: 3 _NUM_OF_CONNECTED_SLAVES: 2 _BAUDRATE: 7 _AUTOCLEAR: 0 _AUTOSTART: 1 _OPTIMIZE_TIMING_VALUES: 1 _NUM_OF_TIMINGVALUES: 12 _TIMINGVALUES: 400 11 150 2 1 4449 10 2 5 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: 'IndraDrive RX06' _NODE_ID: 0 _IECIN: %IB2 _IECOUT: %QB1 _IECDIAG: %MB0 _DOWNLOAD: 1 _EXCLUDEFROMAUTOADR: 0 _COMMENT: '' _DEVICESPECIFIC_DATA _GSD_FILENAME: 'RX060107.gsd' _STATIONNUMBER: 2 _FAILSAVE_MODE: 1 _FREEZE_MODE: 0 _SYNC_MODE: 0 _STAION_ACTIVE: 1 _WD_ON: 1 _WD_TIME: 1000 _GROUP: 2#0 _LOCK_UNLOCK: 2 _TSDR: 11 _EXT_USER_PRM_DATA: _CONST _GSD_MODULE: 'ParamCh not used' '0' _ACTIVE: 1 _SYMBOLIC_NAMES: _COMMENT: _END_GSD_MODULE _GSD_MODULE: 'F-Modul not used' '0' _ACTIVE: 1 _SYMBOLIC_NAMES: _COMMENT: _END_GSD_MODULE _GSD_MODULE: 'Input 12 Words' '219' _ACTIVE: 1 _SYMBOLIC_NAMES: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' _COMMENT: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' _END_GSD_MODULE _GSD_MODULE: 'Output 12 Words' '235' _ACTIVE: 1 _SYMBOLIC_NAMES: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' _COMMENT: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' _END_GSD_MODULE _END_DEVICESPECIFIC_DATA _END_MODULE _MODULE: 'DPSLAVE' _SECTION_NAME: 'DPSlave' _INDEX_IN_PARENT: '2' _MODULE_NAME: 'IndraDrive RX06' _NODE_ID: 1 _IECIN: %IB26 _IECOUT: %QB1 _IECDIAG: %MB0 _DOWNLOAD: 1 _EXCLUDEFROMAUTOADR: 0 _COMMENT: '' _DEVICESPECIFIC_DATA _GSD_FILENAME: 'RX060107.gsd' _STATIONNUMBER: 3 _FAILSAVE_MODE: 1 _FREEZE_MODE: 0 _SYNC_MODE: 0 _STAION_ACTIVE: 1 _WD_ON: 1 _WD_TIME: 1000 _GROUP: 2#0 _LOCK_UNLOCK: 2 _TSDR: 11 _EXT_USER_PRM_DATA: _CONST _GSD_MODULE: 'ParamCh not used' '0' _ACTIVE: 1 _SYMBOLIC_NAMES: _COMMENT: _END_GSD_MODULE _GSD_MODULE: 'F-Modul not used' '0' _ACTIVE: 1 _SYMBOLIC_NAMES: _COMMENT: _END_GSD_MODULE _GSD_MODULE: 'Input 12 Words' '219' _ACTIVE: 1 _SYMBOLIC_NAMES: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' _COMMENT: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' _END_GSD_MODULE _GSD_MODULE: 'Output 12 Words' '235' _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,22604} {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,22604} {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,22604} {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,22604} {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,22604} END_RESOURCE