TIA Wann geschieht exakt der OB61 Aufruf? Wann wird der OB1 unterbrochen?

Ja, der OB61 unterbricht auch Schleifen :) (wie jeder Weckalarm, Prozessalarm, ...alarm) Auch da, wo es für das Programm/den Programmierer am unangenehmsten ist ;)
Im Prinzip kann die Unterbrechung zwischen allen Anweisungen kommen. Die Unterbrechung könnte Siemens "AWL"-Anweisungsgranular implementiert haben, ich kann mir aber auch vorstellen, daß die Unterbrechung nach jedem Maschinenbefehl des Programm-Compilates erfolgen kann (das ist einfacher zu realisieren).

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dachte ich es mir doch fast :rolleyes:
Das heisst eine Schleife unterbricht er, aber eine Zuweisung wird er noch fertig machen?

Z.B:
Code:
FOR #i := 0 To 15 DO
If Array1[i] Then
Aktor1[i]:= true;
else
Aktor2[i]:= true;
end_if;
End_For;

Das IF, Else wird am Stück abgearbeitet, der Rest kann unterbrochen werden...oder?
 
Es kann an jeder Stelle unterbrochen werden. Auch mitten in der Ermittlung der Adresse von Aktor2
Code:
else [COLOR="#FF0000"]|[/COLOR] Aktor2[i] [COLOR="#FF0000"]|[/COLOR] := true;

Harald
 
Ist es nicht egal, wo das Programm schlussendlich unterbrochen wird?
Der komplette Stack wird gesichert und beim Rücksprung ins Programm wieder hergestellt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist nicht immer egal, wo unterbrochen wird. Z.B. wenn man mehrere Daten verwendet, die durch die Unterbrechung verändert werden. Dann muß man sich für die konsistente Verarbeitung der Daten vor der Verarbeitung eine Kopie der Daten machen ("Prozessabbild"). Oft muß man das Kopieren sogar ununterbrechbar machen (UBLKMOV).

Die Unterbrechung des Programms durch Alarm-OB kann man mit dem "Klassiker" "HMI-Kommunikation außerhalb des Zykluskontrollpunktes" vergleichen. Da unterbricht die HMI-Kommunikation den Programmablauf und liest/schreibt Werte von/in PLC-Variablen.
Code:
CALL MyFB, IDB1
  IO_Sollwert:="DB_HMI".Sollwert_1  //IN_OUT
Wenn die HMI-Kommunikation unterbricht während diese Instanz von MyFB abgearbeitet wird, und den "DB_HMI".Sollwert_1 verändert, dann geht die Veränderung verloren (kommt im Programm nicht an), weil nach Ende des MyFB der Wert von IO_Sollwert aus der Instanz zurück in "DB_HMI".Sollwert_1 kopiert wird, wodurch die Änderung vom HMI überschrieben wird.

Harald
 
@Harald. Du schreibst du musstest öfter UBLKMOV verwenden. Hast du ein konkretes Beispiel? Ich hätte den noch nie gebraucht.
 
Das eigendliche problem liegt doch in der Datenkonsistenz!

Wird eine Variable im "normalen" Zyklus mehrfach für Berechnungen verwendet und kann diese Variable durch einen inzterupt verändert werden, sollte man sich über die Konsequenzen im klaren sein wenn eben diese Variable während der Berechnung verändert wird.
Alternativ Variable zuerst auf eine andere kopieren und die Kopie verwenden (Daten bleiben wärend der Berechnung konsistent)
 
Zurück
Oben