TIA Redundante SPS automatisch starten

Byte0815

Level-2
Beiträge
170
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe eine Anlage mit 2 1515R-2PN Steuerungen.
Beim Laden in die Anlage ist mir aufgefallen das, teilweise das R/H System beim Laden gestoppt wird aber nur die Master SPS wieder in den Run geht und ich die Backupsps immer manuell in den Run versetzen muss.
Habe ich da einen Haken falsch gesetzt ?
oder muss da etwas Programmiert werden ?
oder ist das gar nicht vorgesehen ?

Danke schon mal

TIA V19
 
Warum wird denn deine CPU überhaupt in STOP geschickt beim laden?

oder muss da etwas Programmiert werden ?
Schau mal hier:
 
Hi,
also ich bin beim Laden immer so vorgegangen:
Die Backup-CPU über das TIA-Programm gestoppt
Dann die Software in die Run-CPU geladen
Anschließend die Backup-CPU wieder gestartet und den
Abgleich beider CPU's abgewartet.
Die Backup CPU startet aber nur wie schon hier geschrieben wurde wenn der
MRP-Ring geschlossen ist, ansonsten bleibt diese im Stopp Modus
Gruß
Move
 
Danke erstmal für die Antworten,

Naja wenn mein MRP Ring nicht geschlossen wäre dann würden sie sich ja gar nicht Synchronisieren oder ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit die neue Firmware des CPU und TIA V19 kannst du den RH_CTRL so parametrieren das beim Anlauf ein offene Ring kein Problem ist.
Möglich ist ein MRP Teilnehmer nocht nicht ganz hochgelaufen? Ich weiß nicht wie das genau im Hintergrund abläuft.

Wie sieht deine MRP Topologie aus?
 
Ich habe da mal n kleines Beispiel gemacht um die H/R Systeme in Run zu halten.
Code:
FUNCTION_BLOCK "H_System"
{ S7_Optimized_Access := 'TRUE' } // Optimierten Zugriff auf S7 aktivieren (Siemens spezifische Einstellung)
VERSION : 0.1

   // Eingabevariablen
   VAR_INPUT
      LADDR_HSystem : HW_ANY;   // Hardware-Adresse des H-Systems ("Local1~RHSystem")
   END_VAR

   // Interne Variablen
   VAR
      // Diagnosedaten und Betriebsmodi
      DIS {InstructionName := 'DIS'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : DIS;
      DNN {InstructionName := 'DNN'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : DNN;
      
      // Modusvariable (1 Byte)
      Mode { S7_SetPoint := 'True'} : Byte;

      // Zeitgeber (Takt)
      Takt {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME;

      // Flankenauswertung (R_TRIG)
      Output {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;

      // Struktur für Taktvariablen
      stTakt : Struct
         q : Bool;   // Ausgang des Taktes
         in : Bool;  // Eingang des Taktes
      END_STRUCT;
   END_VAR

   // Temporäre Variablen
   VAR_TEMP
      Status : Int;   // Statusvariable
      Busy : Bool;    // Anzeige, ob eine Funktion gerade ausgeführt wird
      RetVal : Int;   // Rückgabewert von Diagnosefunktionen
      subordinateState : UInt; // Untergeordneter Zustand
      CNT_DIAG_temp : UInt;    // Diagnosezähler (temporär)
      MRP_proof_Off : Bool;    // Zustand, ob MRP-Prüfung deaktiviert ist
   END_VAR

   // Konstante Variablen für Modusoperationen
   VAR CONSTANT
      Syncup_sperren : Byte := 3;    // Syncup gesperrt
      Syncup_MRP_freigeben : Byte := 4;  // MRP-Freigabe für Syncup
      Syncup_anfordern : Byte := 7;  // Syncup anfordern
      Syncup_anfrage_gesperrt : Byte := 10; // Syncup-Anfrage gesperrt
      MRP_proof_deact : Byte := 14;  // MRP-Prüfung deaktivieren
      RUN_Redundant : UInt := 40;    // Redundanter Betrieb
      RUN_Solo : UInt := 37;         // Solo-Betrieb
   END_VAR

BEGIN
   // Flankenerkennung, ob der Modus aktiv ist und der Takt nicht an ist
   #Output(CLK:=(#Mode <> 0) AND NOT #stTakt.q);
  
   // Taktgeber mit einer Zeit von 500 ms
   #Takt(IN:=#stTakt.in, PT:=T#500ms, Q=>#stTakt.q);
  
   // Takteingang setzen, wenn der Takt aus ist und der Modus nicht 0 ist
   #stTakt.in := NOT #stTakt.q AND (#Mode <> 0);
  
   // Steuerung des redundanten Systems (RH_CTRL)
   #Status := RH_CTRL(REQ := #Output.Q, Mode := #Mode, Busy => #Busy);
  
   // Diagnoseabfrage des Redundanz-/Hochverfügbarkeitsystems (Modus 2)
   #RetVal := GET_DIAG(MODE := 2, LADDR := #LADDR_HSystem, CNT_DIAG => #CNT_DIAG_temp, DIAG := #DNN);
   #subordinateState := #DNN.SubordinateState;   // Untergeordneter Zustand aus den Diagnoseinformationen
   #MRP_proof_Off := #DNN.SubordinateIOState.%X15; // MRP-Prüfung für Sync-Up deaktiviert (Bit 15)

   // Diagnoseabfrage des Systems (Modus 1)
   #RetVal := GET_DIAG(MODE := 1, LADDR := #LADDR_HSystem, CNT_DIAG => #CNT_DIAG_temp, DIAG := #DIS);
  
   // Betriebszustand auswerten
   CASE #DIS.OperatingState OF
      #RUN_Solo:
         // Im Solo-Betrieb und MRP Prüfung aktiv, aber fehlerhaft, dann MRP Prüfung deaktivieren
         IF NOT #MRP_proof_Off AND (#subordinateState <> 0) THEN
            #Mode := #MRP_proof_deact;
         ELSE // Andernfalls Syncup anfordern
            #Mode := #Syncup_anfordern;
         END_IF;
      
      #RUN_Redundant:
         // Im redundanten Betrieb, wenn MRP deaktiviert ist, MRP freigeben
         IF #MRP_proof_Off THEN
            #Mode := #Syncup_MRP_freigeben;
         // Andernfalls, wenn der Modus nicht 0 ist, auf 0 setzen
         ELSIF (NOT #Mode = 0) THEN
            #Mode := 0;
         END_IF;
   END_CASE;

END_FUNCTION_BLOCK

Bedenke. Ggf macht es sinn den Automatischen Syncup zu deaktivieren, wenn man z.B. FW Updates machen will oder explizit einen Solo Betrieb haben will. wenn der Baustein läuft, lässt sich die CPU nicht mehr einzeln stoppen. Wenn man das Will. Muss man die Case entsprechend erweitern.

Ich würde da gerne noch mehr draus machen und wäre froh wenn ihr was verbessert oder erweitert dass ihr dies auch wieder einbringt.
 
Für Interessierte:
Siemens Anwendungsbeispiel: Automatischer SYNCUP von S7-1500R/H Controllern
Der Funktionsbaustein erkennt autonom, wann ein SYNCUP zwischen Primary- und Backup-PLC erforderlich ist, und eliminiert so die Notwendigkeit manueller Eingriffe durch Bediener. Dadurch wird eine Synchronisation zwischen redundanten Controllern zum frühest möglichen Zeitpunkt gewährleistet, was die Systemzuverlässigkeit erhöht und die Ausfallzeiten reduziert. Die bereitgestellten Quellen (.scl und .udt) können problemlos in bestehende Projekte integriert werden. Eine umfassende Dokumentation zum Anwendungsbeispiel ist in dem PDF-Dokument enthalten, um Benutzer durch den Implementierungsprozess zu führen. Die Automatisierung des SYNCUP-Prozesses verbessert die betriebliche Effizienz und die Stabilität ihres Systems.
 
Zurück
Oben