Prozessalarm CPU314-2DP

markus.sp

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Kann ich bei einer CPU 314-2DP den OB40 über zwei verschiedene Eingänge aufrufen und im OB40 auswerten welcher Eingang den Aufruf verursacht hat?

In der Hardware wurden die Eingänge 124.0 und 125.0 ausgewält.
Bein testen des Programms musten aber beide Eingänge gekommen sein damit der Auffruf erfolgte, kam nur ein Eingang wurde der OB 40 nicht Aufgerufen.
 
Kann ich bei einer CPU 314-2DP den OB40 über zwei verschiedene Eingänge aufrufen und im OB40 auswerten welcher Eingang den Aufruf verursacht hat?

da musst du die Temporären Daten des OB40 auswerten.
In "OB40_POINT_ADDR" steht von welchen Eingang der Prozessalarm kommt.
In "OB40_MDL_ADDR" steht von welcher Baugruppe der Alarm kommt.
Näheres dazu in der hilfe des OB´s (die gute alte F1-taste ;))


In der Hardware wurden die Eingänge 124.0 und 125.0 ausgewält.
Bein testen des Programms musten aber beide Eingänge gekommen sein damit der Auffruf erfolgte, kam nur ein Eingang wurde der OB 40 nicht Aufgerufen.

hmm, normalerweise sollte bei jeder Flanke der Prozessalarm ausgelöst werden. Ausser die Bearbeitung des OB dauert zu lange, dann geht ein Alarm der wärend der Bearbeitung kommt verloren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo markus,
es kommt manchmal darauf an was du mit deiner Alarmbearbeitung machst. Vielleicht speicherst du nur zwischen welcher Aktor den Alarm aufgerufen hast und verlagerst deine Alarmbearbeitung in dein normalen Programm. So wird die bearbeitungszeit des OB40 verkürzt.

gruß Helmut
 
Danke für eure Hilfe


Die Bearbeitung des OB's müsste eigentlich sehr kurz sein, denn es wird nur abgefragt welcher Eingang da ist und dann ein Merker gesetzt.

PHP:
U E 124.0
S M 124.0

PHP:
U E 125.0
S M 125.0

Die beiden Merker wollte ich im normalen Programm bearbeiten
 
Also mit den Prozessabbild kannst du in dem Fall wohl eher nichts anfangen.

Lies dir mal den Beitrag von MW nochmal durch,
in Verbindung mit der Taste F1 bei markierten OB40 sollte das ganz gut sein.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PHP:
U E 124.0
S M 124.0
 
U E 125.0
S M 125.0

...so wird es nicht funktionieren, entweder holst du dir die Info wie von MW beschrieben aus den kopf oder du holst die info direkt aus Peripherie, den deine abfrage ist nicht aktuell...Eingang und Ausgangsdaten werden pro Programmzyklus nur einmal aktualisiert. Mit dem Befehl L PEW XXX kannst du aber bestimmte Eingangswörter aktualisieren....dein OB40 reagiert ja auf einer änderung eines deiner Eingänge und das bestimmt mitten im Programm...

PHP:
L PEW 124
T MW 124

gruß Helmut
 
Zuletzt bearbeitet:
Hier noch ein kleines Beispiel als AWL-Quelle:

Code:
ORGANIZATION_BLOCK OB 40
TITLE = "Hardware Interrupt"
//In der Hardware Konfiguration ist der Eingang 1.7 so 
//parametriert, dass bei einer positiven Flanke 
//an diesem Eingang ein Prozessalarm ausgelöst wird. 
VERSION : 0.1


VAR_TEMP
  OB40_EV_CLASS : BYTE ;    //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
  OB40_STRT_INF : BYTE ;    //16#41 (OB 40 has started)
  OB40_PRIORITY : BYTE ;    //Priority of OB Execution
  OB40_OB_NUMBR : BYTE ;    //40 (Organization block 40, OB40)
  OB40_RESERVED_1 : BYTE ;    //Reserved for system
  OB40_IO_FLAG : BYTE ;    //16#54 (input module), 16#55 (output module)
  OB40_MDL_ADDR : WORD ;    //Base address of module initiating interrupt
  OB40_POINT_ADDR : DWORD ;    //Interrupt status of the module
  OB40_DATE_TIME : DATE_AND_TIME ;    //Date and time OB40 started  
END_VAR
BEGIN
NETWORK
TITLE =Alarmauslösenden Eingang abfragen
//In den temporären Daten des OB 40 ist hinterlegt von welchem Eingang der 
//Prozessalarm kam.
//In diesem Netzwerk wird dieses doppelwort auf ein Merkerdoppelwort umgeladen.
      L     #OB40_POINT_ADDR; 
      T     MD    20; 
      NOP   0; 
NETWORK
TITLE =Counter 
//Wenn ein Alarm kommt steht in dem Merkerdoppelwort (MD 20) von welchem Eingang 
//der Alarm kommt. 
//In diesem Fall steht der Merker 22.7 für den Eingang 1.7
//(M 22.7 hat ein 1 Signal wenn E 1.7 eine positive Flanke hat) 
      U     M     22.7; 
      SPBNB _001; 
      L     MD     4; 
      L     L#1; 
      +D    ; 
      T     MD     4; 
_001: NOP   0; 
END_ORGANIZATION_BLOCK
 
...das dumme ist bei der sache wenn die Alarme von den Eingängen fast zeitgleich kommen dann wird einer verschluckt....das ist es vielleicht doch ganz gut die Peripherie abzufragen...

gruß Helmut
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@reparatur
Das Problem kannst du aber grundsätzlich haben, wenn der zweite Eingang ein mü nach der PEW Abfrage kommt z.B.

Ein Nachteil der PEW-Variante dürfte sein, das diese Abfrage verhätnismäßig lange dauert.

Mfg
Manuel
 
...vielleicht gibt es ja noch die alternative sich zu merken das ein Alarm aufgetreten ist und denn rest kommplett in der Programmbearbeitung zu machen, sprich OB1...das Signal wird ja mindestens 1-2 Programmzyklen anstehen...

gruß Helmut
 

ich hatte da ne vermeintliche Lösung gehabt, bei der der Eingang im OB40 abgefragt wird und ein Merker gesetzt wird, der dan im OB1 weiterverarbeitet wird(ähnlich wie der Vorschlag von markus.sp von Beitrag 4) . Nur könnte man damit auch nicht alle Flanken erkennen, deshalb hab ich es wieder gelöscht ;-)
 
ProzessalarmAuswerten / Rücksetzeen

[FONT=&quot]Hallo an alle die diesen Thread noch lesen...

Vorweg bin ein kleiner blutiger Anfänger, der sich in den letzten wochen mit der SPS Programmierung beschäftig hat.

Habe schon so einiges angelesen, aber wenig Erfahrung mit der Programmierung einer SPS (AWL / FUB). Hingegen habe ich schon einiges in C++ und Java gemacht.

Also zum Kern, ich will Ereigniszustände (einen Prozessalarm) auswerten.
Finde das Beispiel von XXX sehr gut! Vor allem gut dokumentier für Anfänger!

Habe aber irgend wo gelesen das man, einen Prozessalarm zurücksetzten muss nach der Verarbeitung ansonsten bleit er aktiv und ander werden nicht wahrgenommen..?[/FONT]


Hier noch ein kleines Beispiel als AWL-Quelle:

Code:
ORGANIZATION_BLOCK OB 40
TITLE = "Hardware Interrupt"
//In der Hardware Konfiguration ist der Eingang 1.7 so 
//parametriert, dass bei einer positiven Flanke 
//an diesem Eingang ein Prozessalarm ausgelöst wird. 
VERSION : 0.1


VAR_TEMP
  OB40_EV_CLASS : BYTE ;    //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
  OB40_STRT_INF : BYTE ;    //16#41 (OB 40 has started)
  OB40_PRIORITY : BYTE ;    //Priority of OB Execution
  OB40_OB_NUMBR : BYTE ;    //40 (Organization block 40, OB40)
  OB40_RESERVED_1 : BYTE ;    //Reserved for system
  OB40_IO_FLAG : BYTE ;    //16#54 (input module), 16#55 (output module)
  OB40_MDL_ADDR : WORD ;    //Base address of module initiating interrupt
  OB40_POINT_ADDR : DWORD ;    //Interrupt status of the module
  OB40_DATE_TIME : DATE_AND_TIME ;    //Date and time OB40 started  
END_VAR
BEGIN
NETWORK
TITLE =Alarmauslösenden Eingang abfragen
//In den temporären Daten des OB 40 ist hinterlegt von welchem Eingang der 
//Prozessalarm kam.
//In diesem Netzwerk wird dieses doppelwort auf ein Merkerdoppelwort umgeladen.
      L     #OB40_POINT_ADDR; 
      T     MD    20; 
      NOP   0; 
NETWORK
TITLE =Counter 
//Wenn ein Alarm kommt steht in dem Merkerdoppelwort (MD 20) von welchem Eingang 
//der Alarm kommt. 
//In diesem Fall steht der Merker 22.7 für den Eingang 1.7
//(M 22.7 hat ein 1 Signal wenn E 1.7 eine positive Flanke hat) 
      U     M     22.7; 
      SPBNB _001; 
      L     MD     4; 
      L     L#1; 
      +D    ; 
      T     MD     4; 
_001: NOP   0; 
END_ORGANIZATION_BLOCK
 
Zurück
Oben