Eine von acht Neststationen |
Legende ST = Station HP = Home Position WP = Work Position P = Pressure (Druck) MV = Magnetventil PLC = SPS BLK = Block VC = Vertikalzylinder HC = Horizontalzylinder SIM = Simulation WPC = WST Werkstückträger Imp. = Impuls RST = Rund-Schalt-Tisch |
FB0 : Simulation Program explained |
|
Im Anlauf OB der CPU ist der Merker <FirstCycle> zurück gesetzt. Unmittelbar danach wird zuerst im OB1 zyklisch der FB0 aufgerufen und erst dann das Anwenderprogramm. Der Merker <FirstCycle> wird am Ende der Bearbeitung des OB1 wieder auf 1 gesetzt. Die CPU Simulation übernimmt die S7-PLCSIM Steuerung. |
|
Netzwerk 1: Signals set to 1 or 0 while PLC run-up time U "M00 ST PLC FirstCycle" FALSE during first PLC-Cycle SPB m000 = "E00 ST 400V CB ok" Power 3xAC400V ok = "E00 ST ELCB ok" Earth Leakage Circuit Breaker 3xAC400V ok = "E00 ST MICO 2 ok" 24V DC MICO 2 ok = "E00 ST 24L2+ ok" Enable voltage DC24 L2+ ok = "E00 ST MCB SINA ok" Motor circuit breaker SINAMICS ok = "E00 ST CB RIT ok" Rotary Indexing Table circuit breaker ok = "E00 ST CB Scann ok" Datalogic Hand-Held-Scanner ok = "E00 ST FedBak Band" 1= Feedback circuit belt conveyor off = "E00 ST EStp1 CH1" Emergency stop 1 cabinet = "E00 ST Dor11 cls" Protection door 1-1 closed = "A01 RdHed Power" Reading head power on = "LNZ".X_AXIS.CTL_word.BrkOpn W1: Bit00 Open the Brake R "LNZ".X_AXIS.STS_word.DrvInTarget W1: Bit10 Drive in Target Einschaltverhalten des Lesekopfes starten L W#16#F0 Reading head read bits set to 1 T E01 EB RdHd for wire break test L S5T#2S wait 2 sec. before test begin SV T00 ST RnUp SV Start PLC run-up time
UN T00 ST RnUp SV Start pulse PLC run-up time SV T00 ST RnUp SV Start pulse PLC run-up time BEA Wait till PLC run-up done m000: U T00 ST RnUp SV Start pulse PLC run-up done BEB = "RdMaPLC".P101.STS.PrvsWP_ok Workpiece previous assembly 1=OK 0=nOK = "RdMaPLC".F102.STS.PrvsWP_ok Workpiece previous assembly 1=OK 0=nOK |
|
Am Ende des Simulationsprogramms ruft FB0 die Instanz FBs die, die Auswertung der steigenden und fallenden Ausgänge der Aktoren bearbeiten. Jede Instanz FB bearbeitet zyklisch 32 Aktoren *) siehe NW 7 |
|
Netzwerk 2: Actuators 1..32 block 1 (Imp 1.25Hz) Bistabil Ventil U "A01 VC210 HP" Vertical unit up = "SIM".BLK1.use_of.Act8_OutPut Actuator out-put U "SIM".BLK1.use_of.Act8_ON Work position TRUE (on) = "E01 VC210 HP" Vertical unit is up
U "A01 VC210 WP" Vertical unit down (Bistabil) = "SIM".BLK1.use_of.Act9_OutPut Actuator out-put U "SIM".BLK1.use_of.Act9_ON Work position TRUE (on) = "E01 VC210 WP" Vertical unit is down Monostabil Ventil Ruhestellung offen U "A00 V100 WP" Open air relief valve (n.o) = "SIM".BLK1.use_of.Act10_OutPut Actuator out-put U "SIM".BLK1.use_of.Act10_ON Work position TRUE (on) = "E00 V100 WP" Air relief valve is opened U "SIM".BLK1.use_of.Act10_OFF Home position TRUE (off) = "E00 V100 HP" Air relief valve is closed Monostabil Ventil Ruhestellung geschlossen UN "A00 V101 WP" Open intake valve (n.c) = "SIM".BLK1.use_of.Act11_OutPut Actuator out-put U "SIM".BLK1.use_of.Act11_ON Work position TRUE (on) = "E00 V101 WP" Intake valve is opened U "SIM".BLK1.use_of.Act11_OFF Home position TRUE (off) = "E00 V101 HP" Air relief valve is closed DSM Rückmeldung der Spannung verzögert aus U "A00 ST 24L4+ on" Enable voltage DC24 L4+ = "SIM".BLK1.use_of.Act16_OutPut Actuator out-put S "E00 ST FedBak DSM" DSM feedback circuit U "SIM".BLK1.use_of.Act16_OFF Work position TRUE (off) R "E00 ST FedBak DSM" DSM feedback circuit WST kommt in Stopper Position an UN "A01 Z201 WP" open stopper U "A00 ST Band CR" WPC-Belt drive coupling relay on = "SIM".BLK1.use_of.Act19_OutPut Actuator out-put U "SIM".BLK1.use_of.Act19_ON Work position TRUE (on) S "E01 Z201 WPC at StpPos" WPC at stopper position Lesekopf liest WST in Stopper Position U "E01 Z201 WPC at StpPos" WPC at stopper position = "E02 Z201 ID Strobe" Read head strobe WST verlässt Stopper Position U "A01 Z201 WP" open stopper U "A00 ST Band CR" WPC-Belt drive coupling relay on = "SIM".BLK1.use_of.Act20_OutPut Actuator out-put U "SIM".BLK1.use_of.Act20_ON Work position TRUE (on) R "E01 Z201 WPC at Stp" WPC at stopper position WST kommt in Pre-Stopper Position an U "A01 Z200 WP" open pre-stopper U "A00 ST Band CR" WPC-Belt drive coupling relay on = "SIM".BLK1.use_of.Act21_OutPut Actuator out-put U "SIM".BLK1.use_of.Act21_ON Work position TRUE (on) = "E01 Z200 WPC at PrStp" WPC at pre-stopper position Rundschalttisch in stopp Position U "SIM".BLK1.use_of.Act32_ON Work position TRUE (on) R "SIM".BLK1.use_of.Act32 Actuator out-put S "E02 RIT inPos" Rotary indexing table in position U "A02 RIT Start" Rotary indexing table Start S "SIM".BLK1.use_of.Act32_ON Actuator out-put Rundschalttisch verlässt Stoppposition U "SIM".BLK1.use_of.Act32_OFF Home position TRUE (off) U "A02 RIT Start" Rotary indexing table Start R "E02 RIT inPos" Rotary indexing table in Position Lesekopf liest Rundschalttisch Position U "E02 RIT inPos" Rotary indexing table in Position = "E02 RIT ID Strobe" Read head strobe : : weitere S7-Programm |
|
|
|
Netzwerk 4: Actuators 65..96 block 3 (Imp 0.625Hz) Simulation von XYZ-Achsen L "DI SINAMICS 120S_X".DRIVE_OUTPUT.WR_PZD.MDIPos T #Stat_TrgtPos.X L "DI SINAMICS 120S_Y".DRIVE_OUTPUT.WR_PZD.MDIPos T #Stat_TrgtPos.Y L "DI SINAMICS 120S_Z".DRIVE_OUTPUT.WR_PZD.MDIPos T #Stat_TrgtPos.Z CALL "SIM_CRNT_POS" Start :=#Start TrgtPos :=#Stat_TrgtPos Precision :=100 100 = 0,1 mm CrntPos :=#Stat_CrntPos L #Stat_CrntPos.X T "DI SINAMICS 120S_X".DRIVE_INPUT.RD_PZD.XistP L #Stat_CrntPos.Y T "DI SINAMICS 120S_Y".DRIVE_INPUT.RD_PZD.XistP L #Stat_CrntPos.Z T "DI SINAMICS 120S_Z".DRIVE_INPUT.RD_PZD.XistP
Rücksetzen des <DrvInTarget> Bits O "USER".X_AXIS.USR_In.GoToHomePos x-axis go to home pos. O "USER".X_AXIS.USR_In.GoToAsmblyPos x-axis go to RIT pos. O "USER".X_AXIS.USR_In.GoToNokPos x-axis go to nOK pos. O "USER".X_AXIS.USR_In.GoToPicUpPos x-axis go to pick-up pos. U "LNZ".X_AXIS.In.enable_axis HMI axis enable R "LNZ".X_AXIS.STS_word.DrvInTarget W1: Bit10 Drive in Target = "LNZ".X_AXIS.STS_word.Mot_on W1: Bit2 Drive in Operation = "SIM".BLK3.use_of.Act13_OutPut Actuator out-put Setzen des <DrvInTarget> Bits U "SIM".BLK3.use_of.Act13_ON Work position TRUE (on) S "LNZ".X_AXIS.STS_word.DrvInTarget W1: Bit10 Drive in Target Inkrementieren/Dekrementiere des Achse-Istwerts U "HMI KEY".AM204.X_AXIS.F1_JogPls Jog direction plus U "HMI KEY".AM204.X_AXIS.Enbl_WrkPos Enable work position O U "USER".X_AXIS.USR_In.GoToAsmblyPos Assembly position U "M00 ST OM HOME POS Request home position complete machine SPBN x001 L "LNZ".X_AXIS.STS_word.CrntPos W3+4: Motor current position (10.000=1mm) L L#1 +D T "LNZ".X_AXIS.STS_word.CrntPos W3+4: Motor current position (10.000=1mm) x001: O "USER".X_AXIS.USR_In.GoToNokPos Not ok position (rejection position) O "USER".X_AXIS.USR_In.GoToPicUpPos Pick-up position U "M01 Enabled" Module enabled O U "HMI KEY".AM204.X_AXIS.F2_JogMns Jog direction minus U "HMI KEY".AM204.X_AXIS.Enbl_HomPos Enable home position SPBN x002 L "LNZ".X_AXIS.STS_word.CrntPos W3+4: Motor current position (10.000=1mm) L L#1 -D U <0 SPB x002 T "LNZ".X_AXIS.STS_word.CrntPos W3+4: Motor current position (10.000=1mm)
x002: U "LNZ".X_AXIS.CTL_word.BrkOpn W1: Bit0 Open the Brake = "SIM".BLK3.use_of.Act15_OutPut Actuator out-put U "SIM".BLK3.use_of.Act15_ON Work position TRUE (on) = "LNZ".X_AXIS.STS_word.BrkOpnd W1: Bit1 Brake is opened SPA b001 : : witere S7-Programm wird hier nicht bearbeitet |
|
Der Instanz FB #BLK beinhaltet nur 35 AWL-Anweisungen - keinen LOOP-Befehl. Außer 5 Sprung-Anweisungen besteht der FB aus Doppelword-Anweisungen, welche die neben stehende Funktionsprinzip realisieren - entspricht 32 Aktoren. Da das Simulationsprogramm FB0 häufig lang sein kann, wurde an so einen Baustein gedacht, der die CPU-Simulationssoftware (S7-PLCSIM) entlastet. Es sollen daher nur die #BLKs freigeschaltet werden, die tatsächlich im FB0 beansprucht sind. Hier bis 96 Aktoren. Siehe #BLK3. |
|
Netzwerk 7: Actuators 1..32 block 1 b001: CALL #BLK1 SEC_IMP :="M00 Imp 1.25Hz" ACT_ONOFF:=DB1299.DBD30 ACT_WP_DI:=DB1299.DBD34 ACT_HP_DI:=DB1299.DBD38 REG_DW1 :=#BLK1.use_of.Register.reg_dbd1 REG_DW2 :=#BLK1.use_of.Register.reg_dbd2 REG_DW3 :=#BLK1.use_of.Register.reg_dbd3 HLP_DW1 :=#BLK1.use_of.Register.hlp_dbd1 |
|
|
|
Netzwerk 8: Actuators 33..64 block 2 CALL #BLK2 SEC_IMP :="M00 Imp 2Hz" ACT_ONOFF:=DB1299.DBD96 ACT_WP_DI:=DB1299.DBD100 ACT_HP_DI:=DB1299.DBD104 REG_DW1 :=#BLK2.use_of.Register.reg_dbd1 REG_DW2 :=#BLK2.use_of.Register.reg_dbd2 REG_DW3 :=#BLK2.use_of.Register.reg_dbd3 HLP_DW1 :=#BLK2.use_of.Register.hlp_dbd1 |
|
|
|
Netzwerk 9: Actuators 65..96 block 3 CALL #BLK3 SEC_IMP :="M00 Imp 0.625Hz" ACT_ONOFF:=DB1299.DBD162 ACT_WP_DI:=DB1299.DBD166 ACT_HP_DI:=DB1299.DBD170 REG_DW1 :=#BLK3.use_of.Register.reg_dbd1 REG_DW2 :=#BLK3.use_of.Register.reg_dbd2 REG_DW3 :=#BLK3.use_of.Register.reg_dbd3 HLP_DW1 :=#BLK3.use_of.Register.hlp_dbd1 BEA |
|
|
|
Netzwerk 10: Actuators 97..128 block 4 CALL #BLK4 SEC_IMP :="M00 Imp 1Hz" ACT_ONOFF:=DB1299.DBD228 ACT_WP_DI:=DB1299.DBD232 ACT_HP_DI:=DB1299.DBD236 REG_DW1 :=#BLK4.use_of.Register.reg_dbd1 REG_DW2 :=#BLK4.use_of.Register.reg_dbd2 REG_DW3 :=#BLK4.use_of.Register.reg_dbd3 HLP_DW1 :=#BLK4.use_of.Register.hlp_dbd1 |
|
NW 1: Erster SPS-Zyklus |
Setzen die Datenausgänge des Lesekopfes auf 1. Dies dient zur Drahtbruchkontrolle und müssen innerhalb 2 Sek auf HIGH sein sonst wird eine Störung generiert. |
NW 2: Ventile und Magnetventile |
Bistabile Ventile: 5 Wege, 2 oder 3 Stellungen (5/3 oder 5/2 Ventile) Diese Ventile benötigen zwei Einschaltsignale. Hier 14 für Work Position und 12 Home Position. Dargestellt ist eine aktive Bewegung in Richtung HP. MV12 ist eingeschaltet |
NW 2: Ventile und Magnetventile |
Monostabile Ventile: 5 Wege, 2 Stellungen (5/2 Ventile) Diese Ventile benötigen ein Einschaltsignal. Die Rückstellung erfolgt sobald das gegensätzliche Signal nicht mehr anliegt. Die gängigsten instabilen Betätigungen sind Feder oder Differentialdruck. Hier 12 für Home Position. Dargestellt ist eine aktive Bewegung in Richtung HP. |
NW 1: Erster SPS-Zyklus |
Setzen notwendige Signale um nach CPU-Anlauf Störungen zu meiden. |
NW 2: Pre-Stopper und Stopper |
Der 1.WST befindet sich gerade in Bewegung. Doch der Durchgang ist gesperrt, da sich ein WST in Stopper Station befindet. Sobald der 2.WST seine Position verlässt gibt der Pre-Stopper den Weg für den 1.WST frei. Ist sein Initiator bedämpft, so sperrt der Pre-Stopper den Durchgang für den nachkommenden WST. Der Durchgang für den 2.WST ist erst nach der Bearbeitung der Station frei. Nach Verlassen seines Initiator sperrt der Stopper den Durchgang für den 1.WST. |
NW 2: Rund-Schalt-Tisch |
Der RST ist mit acht Nester ausgestattet. Bei einer Taktung (1/8) des RSTs macht der kleine Kreis eine volle Umdrehung (360°) bis der Initiator InPos erneut bedämpft ist. |
NW 4: Achse Istwert-Simulation Jog-Betrieb |
Die Istwert-Position ist je nach Bewegungsrichtung in jedem SPS-Zyklus um 1 inkrementiert oder dekrementiert. Ferner, nicht wie im Jog-Betrieb, bewegt sich die Achse solange bis das Bit <DrvInTarget> gesetzt ist. Dies wird erst zurück gesetzt und dann gesetzt. |
NW 4: Achse-Bewegung-Simulation "SIM_CRNT_POS" |
// Distance between two points // P1=x1,y1,z1,r1 P2=x2,y2,z2,r2 #tmp_distance := SQRT(SQR(#CrntPos.X - #TrgtPos.X) + SQR(#CrntPos.Y - #TrgtPos.Y) + SQR(#CrntPos.Z - #TrgtPos.Z) + SQR(#CrntPos.R - #TrgtPos.R)); #TrgtReached:=#tmp_distance <= #Precision;
// Axis movement simulation IF #Start AND NOT #TrgtReached THEN IF #TrgtPos.X <> #CrntPos.X THEN IF #TrgtPos.X < #CrntPos.X THEN #CrntPos.X := #CrntPos.X - #Precision; ELSE #CrntPos.X := #CrntPos.X + #Precision; END_IF; END_IF; IF #TrgtPos.Y <> #CrntPos.Y THEN IF #TrgtPos.Y < #CrntPos.Y THEN #CrntPos.Y := #CrntPos.Y - #Precision; ELSE #CrntPos.Y := #CrntPos.Y + #Precision; END_IF; END_IF; IF #TrgtPos.Z <> #CrntPos.Z THEN IF #TrgtPos.Z < #CrntPos.Z THEN #CrntPos.Z := #CrntPos.Z - #Precision; ELSE #CrntPos.Z := #CrntPos.Z + #Precision; END_IF; END_IF; IF #TrgtPos.R <> #CrntPos.R THEN IF #TrgtPos.R < #CrntPos.R THEN #CrntPos.R := #CrntPos.R - #Precision; ELSE #CrntPos.R := #CrntPos.R + #Precision; END_IF; END_IF; END_IF; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|