123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- PROGRAM _INIT
- RTInfo_0(enable:=1);
-
- END_PROGRAM
- PROGRAM _CYCLIC
-
- (* #############################################################################################################
- ############################# Stopper Tisch 6 #####################################
- ############################################################################################################# *)
- //Cech-Comment: Dieses gesamte Programm bedient nur die einzelnen Stopper und die Aushebeeinheit, wenn ein anderes Programm den Befehl gibt, Aus- bzw. Einzufahren
-
- //Cech-Comment: Initiierung des Ausfahrens (bzw. des Einfahrens im nächsten Block) mit allen Variablen. Der Vorgang beginnt somit
- IF gTisch_6.Cmd.Stopper = KMD_AUSFAHREN THEN
- gTisch_6.Outputs.Stopper_einfahren := FALSE;
- gTisch_6.Times.Stopper_AusZeit := TRUE;
- gTisch_6.Times.Stopper_EinZeit := FALSE;
- gTisch_6.Cmd.Stopper := KMD_FERTIG;
- gTisch_6.Status.Stopper := STATUS_BUSY;
- END_IF
- IF gTisch_6.Cmd.Stopper = KMD_EINFAHREN THEN
- gTisch_6.Outputs.Stopper_einfahren := TRUE;
- gTisch_6.Times.Stopper_AusZeit := FALSE;
- gTisch_6.Times.Stopper_EinZeit := TRUE;
- gTisch_6.Cmd.Stopper := KMD_FERTIG;
- gTisch_6.Status.Stopper := STATUS_BUSY;
- END_IF
- //Cech-Comment: STATUS_BUSY bleibt solange erhalten, bis die Rückmeldung kommt, dass der Stopper fertig ein- bzw. ausgefahren ist
- (* Status, Zylinderposition ausgeben *)
- IF (gTisch_6.Inputs.Stopper_eingefahren = TRUE) AND (gTisch_6.Inputs.Stopper_ausgefahren = FALSE) THEN
- gTisch_6.Status.Stopper := STATUS_EINGEFAHREN;
- ELSIF (gTisch_6.Inputs.Stopper_eingefahren = FALSE) AND (gTisch_6.Inputs.Stopper_ausgefahren = TRUE) THEN
- gTisch_6.Status.Stopper := STATUS_AUSGEFAHREN;
- ELSE
- gTisch_6.Status.Stopper := STATUS_BUSY;
- END_IF
- //Cech-Comment: Schauen, ob nach 5s die Stopper noch nicht umgestellt sind und Status STATUS_ERROR setzen
- (* Zeitüberwachung Eingefahren*)
- IF (gTisch_6.Times.Stopper_EinZeit = TRUE AND gTisch_6.Status.Stopper <> STATUS_EINGEFAHREN) OR (gTisch_6.Times.Stopper_AusZeit = TRUE AND gTisch_6.Status.Stopper <> STATUS_AUSGEFAHREN) THEN
- gTisch_6.Times.Stopper_ZeitRun := gTisch_6.Times.Stopper_ZeitRun + (RTInfo_0.cycle_time/1000);
- IF (gTisch_6.Times.Stopper_EinZeit = TRUE AND gTisch_6.Status.Stopper = STATUS_EINGEFAHREN)
- OR (gTisch_6.Times.Stopper_AusZeit = TRUE AND gTisch_6.Status.Stopper = STATUS_AUSGEFAHREN)THEN
- (* lPortal_Mittelanschlag_EinZeit := FALSE;
- lPortal_Mittelanschlag_AusZeit := FALSE; *)
- gTisch_6.Times.Stopper_ZeitRun := 0;
- END_IF
- IF gTisch_6.Times.Stopper_ZeitRun >= 5000 THEN
- gTisch_6.Status.Stopper := STATUS_ERROR;
- //Cech-Comment: diese globalen Errors sind offensichtlich
- IF gTisch_6.Times.Stopper_EinZeit = TRUE THEN
- gError[0] := 1;
- END_IF
-
- IF gTisch_6.Times.Stopper_AusZeit = TRUE THEN
- gError[1] := 1;
- END_IF
- END_IF
- ELSE
- gTisch_6.Times.Stopper_ZeitRun := 0;
- END_IF
-
- (* #############################################################################################################
- ############################# VorStopper Tisch 6 #####################################
- ############################################################################################################# *)
- IF gTisch_6.Cmd.Vorstopper = KMD_AUSFAHREN THEN
- gTisch_6.Outputs.Vorstopper_einfahren := FALSE;
- gTisch_6.Times.Vorstopper_AusZeit := TRUE;
- gTisch_6.Times.Vorstopper_EinZeit := FALSE;
- gTisch_6.Cmd.Vorstopper := KMD_FERTIG;
- gTisch_6.Status.Vorstopper := STATUS_BUSY;
- END_IF
- IF gTisch_6.Cmd.Vorstopper = KMD_EINFAHREN THEN
- gTisch_6.Outputs.Vorstopper_einfahren := TRUE;
- gTisch_6.Times.Vorstopper_AusZeit := FALSE;
- gTisch_6.Times.Vorstopper_EinZeit := TRUE;
- gTisch_6.Cmd.Vorstopper := KMD_FERTIG;
- gTisch_6.Status.Vorstopper := STATUS_BUSY;
- END_IF
- (* Status, Zylinderposition ausgeben *)
- IF (gTisch_6.Inputs.Vorstopper_eingefahren = TRUE) AND (gTisch_6.Inputs.Vorstopper_ausgefahren = FALSE) THEN
- gTisch_6.Status.Vorstopper := STATUS_EINGEFAHREN;
- ELSIF (gTisch_6.Inputs.Vorstopper_eingefahren = FALSE) AND (gTisch_6.Inputs.Vorstopper_ausgefahren = TRUE) THEN
- gTisch_6.Status.Vorstopper := STATUS_AUSGEFAHREN;
- ELSE
- gTisch_6.Status.Vorstopper := STATUS_BUSY;
- END_IF
- (* Zeitüberwachung Eingefahren*)
- IF (gTisch_6.Times.Vorstopper_EinZeit = TRUE AND gTisch_6.Status.Vorstopper <> STATUS_EINGEFAHREN) OR (gTisch_6.Times.Vorstopper_AusZeit = TRUE AND gTisch_6.Status.Vorstopper <> STATUS_AUSGEFAHREN) THEN
- gTisch_6.Times.Vorstopper_ZeitRun := gTisch_6.Times.Vorstopper_ZeitRun + (RTInfo_0.cycle_time/1000);
- IF (gTisch_6.Times.Vorstopper_EinZeit = TRUE AND gTisch_6.Status.Vorstopper = STATUS_EINGEFAHREN)
- OR (gTisch_6.Times.Vorstopper_AusZeit = TRUE AND gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN)THEN
- (* lPortal_Mittelanschlag_EinZeit := FALSE;
- lPortal_Mittelanschlag_AusZeit := FALSE; *)
- gTisch_6.Times.Vorstopper_ZeitRun := 0;
- END_IF
- IF gTisch_6.Times.Vorstopper_ZeitRun >= 5000 THEN
- gTisch_6.Status.Vorstopper := STATUS_ERROR;
- IF gTisch_6.Times.Vorstopper_EinZeit = TRUE THEN
- gError[0] := 1;
- END_IF
-
- IF gTisch_6.Times.Vorstopper_AusZeit = TRUE THEN
- gError[1] := 1;
- END_IF
- END_IF
- ELSE
- gTisch_6.Times.Vorstopper_ZeitRun := 0;
- END_IF
- (* #############################################################################################################
- ############################# Aushebeeinheut Tisch 6 #####################################
- ############################################################################################################# *)
- (* Cech-Comment: Bei der Aushebeeinheit ist die Sensorik nicht angeschlossen, die KAbel gehen ins Leere! Warum, weiß ich nicht. Möglicherweise Ressourcenmangel am Hauptschrank
- Daher werden wahrscheinlich bei der Aushebeeinheit die Steuersignale gegengleich geschaltet ( kann aber auch eine eEigenheit der Aushebeeinheit sein).
- Jedenfalls läuft der Timer immer und die Zeitüberwachung wird nicht verwendet. Es handelt sich somit um eine reine Steuerung ohne Sensorkontrolle. Das muss man berücksichtigen bei Änderungen in diesem Teil der SW*)
-
- IF gTisch_6.Cmd.Aushebeeinheit = KMD_AUSFAHREN THEN
- gTisch_6.Outputs.Aushebeeinheit_einfahren := FALSE;
- gTisch_6.Outputs.Aushebeeinheit_ausfahren := TRUE;
- gTisch_6.Times.Aushebeeinheit_AusZeit := TRUE;
- gTisch_6.Times.Aushebeeinheit_EinZeit := FALSE;
- gTisch_6.Cmd.Aushebeeinheit := KMD_FERTIG;
- gTisch_6.Status.Aushebeeinheit := STATUS_BUSY;
- gMerker_Tisch_6_Ausgehoben := TRUE; //Cech-Implement: Für Opc-Ua-Übergabe an Centurio als BOOL, ob Aushebeeinheit in Position ist
- END_IF
- IF gTisch_6.Cmd.Aushebeeinheit = KMD_EINFAHREN THEN
- gTisch_6.Outputs.Aushebeeinheit_einfahren := TRUE;
- gTisch_6.Outputs.Aushebeeinheit_ausfahren := FALSE;
- gTisch_6.Times.Aushebeeinheit_AusZeit := FALSE;
- gTisch_6.Times.Aushebeeinheit_EinZeit := TRUE;
- gTisch_6.Cmd.Aushebeeinheit := KMD_FERTIG;
- gTisch_6.Status.Aushebeeinheit := STATUS_BUSY;
- gMerker_Tisch_6_Ausgehoben := FALSE; //Cech-Implement: Für Opc-Ua-Übergabe an Centurio als BOOL, ob Aushebeeinheit in Position ist
- END_IF
- (* Status, Zylinderposition ausgeben *)
- IF (gTisch_6.Inputs.Aushebeeinheit_eingefahren = TRUE) AND (gTisch_6.Inputs.Aushebeeinheit_ausgefahren = FALSE) THEN
- // Toter Zweig, weil der Input vom Aushebesensor nicht angeschlossen wurde
- gTisch_6.Status.Aushebeeinheit := STATUS_EINGEFAHREN;
- ELSIF (gTisch_6.Inputs.Aushebeeinheit_eingefahren = FALSE) AND (gTisch_6.Inputs.Aushebeeinheit_ausgefahren = TRUE) THEN
- // Toter Zweig, weil der Input vom Aushebesensor nicht angeschlossen wurde
- gTisch_6.Status.Aushebeeinheit := STATUS_AUSGEFAHREN;
- ELSE
- // Es wird immer dieser Zweig angefahren und der Status der Aushebeeinheit bleibt immer STATS_BUSY (255)
- gTisch_6.Status.Aushebeeinheit := STATUS_BUSY;
- END_IF
- // Cech-Comment: Die Zeitüberwachung hat für die Aushebeeinheit eigentlich nur sehr bedingt Sinn!?, weil ja nur gesteuert wird; Ist wahrscheinlich mehr ein Bypass
- (* Zeitüberwachung Eingefahren*)
- // IF (gTisch_6.Times.Aushebeeinheit_EinZeit = TRUE AND gTisch_6.Status.Aushebeeinheit <> STATUS_EINGEFAHREN) OR (gTisch_6.Times.Aushebeeinheit_AusZeit = TRUE AND gTisch_6.Status.Aushebeeinheit <> STATUS_AUSGEFAHREN) THEN
- // gTisch_6.Times.Aushebeeinheit_ZeitRun := gTisch_6.Times.Aushebeeinheit_ZeitRun + (RTInfo_0.cycle_time/1000);
- // IF (gTisch_6.Times.Aushebeeinheit_EinZeit = TRUE AND gTisch_6.Status.Aushebeeinheit = STATUS_EINGEFAHREN)
- // OR (gTisch_6.Times.Aushebeeinheit_AusZeit = TRUE AND gTisch_6.Status.Aushebeeinheit = STATUS_AUSGEFAHREN)THEN
- // (* lPortal_Mittelanschlag_EinZeit := FALSE;
- // lPortal_Mittelanschlag_AusZeit := FALSE; *)
- // gTisch_6.Times.Aushebeeinheit_ZeitRun := 0;
- // END_IF
- // IF gTisch_6.Times.Aushebeeinheit_ZeitRun >= 5000 THEN
- // gTisch_6.Status.Aushebeeinheit := STATUS_ERROR;
- //// gMerker_Tisch_6_Ausgehoben := FALSE; //Cech-Implement: Für Opc-Ua-Übergabe an Centurio, ob Aushebeeinheit in Position ist
- // IF gTisch_6.Times.Aushebeeinheit_EinZeit = TRUE THEN
- // gError[0] := 1;
- // END_IF
-
- // IF gTisch_6.Times.Aushebeeinheit_AusZeit = TRUE THEN
- // gError[1] := 1;
- // END_IF
- // END_IF
- // ELSE
- // gTisch_6.Times.Aushebeeinheit_ZeitRun := 0;
- // END_IF
-
- END_PROGRAM
- PROGRAM _EXIT
- (* Insert code here *)
-
- END_PROGRAM
|