Hilfe bei Software Redundanz gesucht

Mephisto

Level-1
Beiträge
242
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich versuche mich an einer Software Redundanz mittels S7-300.
Dazu hab ich gleich mal ne ganze Menge Fragen:

1.) laut Anleitung, muss ich meine Merkerbytes lückenlos vergeben.
Wenn ich nun als erstes genutzte Byte M1.1 und als letzt genutztes Byte MD248 habe, heißt das dann, dass alle dazwischenliegenden Bytes auch in der Symboltabelle ausgefüllt werden müssen? Oder kann ich hier ruhig lücken lassen. Es schreibt ja sonst nichts auf diesen Bereich

2.) Gits hier im Forum generell jemanden, der sowas schon probiert hat?

mfg mephisto
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das es sich hierbei um unterschiedliche Datentypen handelt, ist mir bewusst. Es geht also um M0 bis M251. Wenn ich im Extremfall nur diese beiden verwenden möchte, muss ich dann M1 bis M250 ebenfalls in der Symboltabelle eintragen oder nicht?

Konzept:
Es gibt von Siemens ein Optionspaket:
SIMATIC S7, SW REDUNDANZ
Das Paket besteht aus einer Bausteinbibliothek und einer 118seitigen Beschreibung, wie die Bausteine zu parametrieren sind.
Es gibt zwei CPUs, die beide über PB an eine redundante ET200M (mit 2xIM153-2) angeschlossen sind. Zusätzlich sind die beiden CPUs noch über einen eigenen PB miteinander verbunden. Die beiden SPSen tauschen zyklisch Daten miteinander aus. In beiden SPSen ist das gleiche Programm hinterlegt. Eine Station ist Master und bearbeitet das Programm, die zweite ist Reserve und macht nichts. Fällt der Master aus, so übernimmt die Reserve mit den zuletzt übermittelten Daten.

Da hätt ich dann noch eine Frage:
Wie kann ich Zähler/Zeiten von IEC-Zähler/Zeiten unterscheiden. Woher weiß ich also, was S_EVERZ, CT_U, TON oder TIMER_P nun sind?

PS.: Bitte keine Grundsatzdiskussion darüber, ob diese Art der Redundanz sinnvoll ist, Kunde will - Kunde kriegt (oder auch nicht, wenn ich nicht bald den Durchblick bekomm. Mir raucht schon die Birne)

mfg mephisto
 
Das man Merker Lückenlos verwenden muss hab ich noch nie gehört...

Die Symboltabelle ist von der Funktion unabhängig.

Allerdings kannst du weder M0 noch M251 verwenden... weil keins von beiden weder Datentyp noch Datengröße beschreibt.


Datentypen sind... z.b. INT oder WORD.... wobei INT und WORD jeweils die gleiche Größe belegen (16 Bit oder 2 Byte oder 1 Wort) ähnlich wie DINT und REAL... (32 Bit, 4 Byte, 2 Wörter)

z.b. MD254 = M254.0-M257.7 (Datentyp = Alles Mögliche was 4 Byte belegt)

Verbessert mich.. wenn ich hier grad unfug schreibe, Lieg im KKH vollgemumpt mit Antibiotikum und Schmerzmitteln :) Lg...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
SW-Redundanz

Also ich habe das vor einigen Jahren eingesetzt und es funktioniert auch. Mal davon abgesehen, dass auf dieser Anlage nie eine CPU ausgefallen ist. Ich fand das ganze eigentlich nicht so schlimm. Man muss sich halt mal das Handbuch zu Gemüte führen. Du musst zwischen den Steuerungen nur das abgleichen, was Redundant sein soll. Aus diesem Grund, habe ich mein gesamtes Programm in FB's mit Multiinstanzen geschrieben. Also nicht mit Merkern, Timern und Zählern. Die DB der Muliinstanzen habe ich dann bei der Redundanz angegeben. Der Knackpunkt aus meiner Sicht war ein Anderer. Man muss bei der Parametrierung 3 DP für die interne Bearbeitung angeben. Diese DB erzeugt das System bei seinem ersten Start selbst. Wenn man jetzt die Länge seiner eigenen DB verlängert, muss man die "internen DB" erstmal online auf der CPU löschen, sonst geht nichts mehr.
 
Hab ich mich wohl falsch ausgedrückt. Hab aber genau das gemeint, wie du es beschrieben hast.

Auch von mir ein "Gute Besserung"

Zu den IEC-Zeiten:
Kanns sein, dass Zeiten, die im Datentyp TIME abgespeichert sind, IEC-Zeiten sind und dass dann die S5TIME Zeiten keine IEC-Zeiten sondern diese "Ich bin Siemens und brauch mich nicht an die Norm zu halten"-Zeiten sind?

mfg mephisto
 
vielen dankan die guten besserungen...

in det tat kann die s7-300 zwei zeit formate

den iec TIME und das S5 TIME (Der Anti-Norm Timer aus der PRE IEC Zeit) xD

in der Standardlibary ist der TON TOFF Baustein für das IEC Time Format..

Wobei ich mir auch net hundert proz. sicher bin ob das echt IEC ist ;)

aufjedenfall kann der S5TIME viel kürzer zeit stoppen als der TON/TOFF...

lg
 
Danke für die Antworten

@Kieler: Das Handbuch mit den Bausteinbeschaltungen hab ich mir zu Gemüte geführt, nur werd ich daraus nicht so ganz schlau. Meiner Ansicht nach sind die Bausteine richtig parametriert. Und die drei besagten DBs hab ich auch bei jeder Änderung gelöscht und die wurden sogar neu angelegt.
Ich kann nur nicht mehr die CPU starten. Die geht ständig sofort nach dem Anlaufen auf Stop. Laut Fehlerdiagnose: "Bereichslängenfehler beim Lesen" - "Stop wegen Programmierfehler"
Ich hab dann mal den OB121 reingeladen, damit mir die Programmbearbeitung nicht abbricht. Darauf kamen dann zig Fehlermeldungen. Immer abwechselnd "Bereichslängenfehler beim Lesen" und "Bereichslängenfehler beim Schreiben". Nach diesen zig Fehlermeldungen kommt dann schlussendlich "Stop aufgrund Zyklusüberschreitung"

Mein Programm muss bei SWR ja im OB35 laufen. Ich hab für den OB35 die Zykluszeit auf 10ms reduziert. Nachdem der OB35 drei Zyklen nicht ausführen konnte, ist dann die CPU wie oben beschrieben auf Stop gegangen.

Laut Diagnose sollte mein Programm allerdings eine Zykluszeit von <1ms haben, also dass es daran liegt, denke ich nicht.

Würds was bringen, wenn ich mal einen Screenshot von meinem NetPro Netz und von den SWR Bausteinen hochlade?

mfg mephisto
 
Fehkersuche

Ich bin jetzt etwas verwirrt. Dein eigentliches Programm muss jedenfalls nicht im OB35 laufen. Muss dort überhaupt etwas laufen? Sitze leider nicht am PG um schnell mal zu schauen.
Der für Dich im ersten Ansatz interessante Teil, nämlich die Parametrierung muss jedenfalls im OB100 aufgerufen werden. Hier gibst Du ja auch die Bereiche an, welche abgeglichen werden sollen. Hier solltest Du erst einmal überall "0" eintragen. Wenn dann Dein Fehler weg ist, trägst Du nach und nach Deine Daten wieder ein. Es wird sich schon zeigen was falsch ist. Ich könnte mir vorstellen Du hast eine Lücke bei den DB. Also Du hast gesagt es DB1 bis DB10 abgeglichen werden, aber es gibt keinen DB4. Oder so.

Muss jetzt erst einmal auf eine Internetfreie Baustelle.

Kieler
 
Hallo!

Die FBs/FCs müssen in drei verschiedene OBs.
Die eigentliche Parametrierung für den Datenabgleich soll in OB100
Das redundant bearbeitete Programm soll in OB 35
Der Fehlererkennende Teil soll in OB 86

Das mit den überall 0 einstellen ist aber ein guter Tipp. Das werd ich gleich mal probieren. Danke!

mfg mephisto
 
Also zuerst mal:

DANKESCHÖN

Der Tipp mit dem Nullsetzen hats voll gebracht!
Ich hab jetzt zumindest mal zwei CPUs, die Fehlerfrei laufen. Die Umschaltung funktioniert ebenfalls perfekt!

Jetzt muss ich nur noch den Fehler in meinem Programm finden!

DANKESCHÖN

mfg mephisto

PS.: Und glaubt nicht, dass ihr damit Ruhe vor mir habt ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

anscheinend hab ich wirklich ein Problem mit meinen DBs.
ich hab jetzt Schritt für Schritt die Nullen wieder entfernt und mit Leben befüllt.

Laut Beschreibung muss ich folgende Dinge angeben:
o) erstes verwendetes Ausgangswort
o) letztes verwendetes Ausgangswort
o) erstes verwendetes Merkerbyte
o) Anzahl der verwendeten Merkerbytes
o) erster Instanz-DB für IEC-Zähler/Zeiten
o) Anzahl aller Instanz-DBs für IEC-Zähler/Zeiten
Bis hier hat alles funktioniert
o) erster verwendeter DB
o) Anzahl der verwendeten DBs

Ausgangsbytes, Merkerbytes, Instanz-DBs, DBs müssen lückenlos vergeben werden.

Ich hab in meinem Programm 5DBs (DB100-DB104) und 16iDBs(iDB151-iDB154, iDB159-iDB170). iDB151-iDB154 sind die iDBs für die IEC-Zähler/Zeiten.

Als ich nun für den ersten verwendeten DB = 100 und für die Anzahl = 5 eigegeben hab, ist die CPU, die das Programm bearbeitet auf Stop gegangen und die SF-LED leuchtet.
Laut Diagnose:
"Bereichslängenfehler beim Lesen"
"Bereichslängenfehler beim Schreiben"

Hat wer ne Idee worans liegen kann?

mfg mephisto
 
Bereichslängenfehler beim Schreiben von was? Mach doch mal Bilder vom Diagnosepuffer.. dort steht die Adresse drin!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mach mal ein Bild von deinem Online und deinem Offline Baustein Ordner,

Das sieht danach aus als wären deine DB's nicht auf der CPU... bzw nicht so wie sie sein sollten von der Länge her.
 
Zuletzt bearbeitet:
Hallo!

Hab jetzt noch mal alle Bausteine Online/Offline verglichen und zur Sicherheit auch nochmal in die SPS übertragen.

Es sind alle DBs und iDBs, die Offline sind, auch Online vorhanden. Zusätzlich finde ich Online noch drei DBs, die dieser SW-Redundanz Baustein automatisch kreiert.

Zählt bei Siemens ein Instanz-DB auch als DB? Wenn die also schreiben:
"Anzahl aller Datenbausteine"
meinen die dann (A) alle DBs oder (B) alle DBs + alle iDBs oder (C) alle DBs + alle iDBs + die drei automatisch kreierten DBs?

Momentan hab ich das Zeug nach Lösung (A) geschrieben.

mfg mephisto
 
SW Redundanz mit Ver. 1.2

Wie ich heute morgen ja schon geschrieben habe, durfte ich die Welt heute ohne Unterstützung des Interetes retten. Daher bin ich erst jetzt wieder online.

In meinem Programm mit SW-Redundanz wird im OB100 ein FC100 von Siemens aufgerufen. Im OB1 rufe ich dann den FB101 von Siemens auf. In Abhängigkeit von einem Bit des Status Word Exit_INFO wird dann auf der jeweiligen CPU der redundante Anteil aufgerufen oder eben nicht.
Im OB35 wird nichts aufgerufen.

Die Instanz DB müssen natürlich auch mit abgeglichen werden. Sonst ist eine stoßfreie Umschaltung natürlich nicht möglich.

Warum ich extra DB für IEC Zeiten usw. benötige ist mir nicht klar. Bei mir liegen auch diese in den Instanz DB.

Bei mir erfolgt der Abgleich aber über Ethernet und nicht über Profibus.

So sieht mein Programm im OB100 aus

Code:
      CALL  "SWR_START"
       AG_KENNUNG      :='A'
       DB_WORK_NO      :=DB1
       DB_SEND_NO      :=DB2
       DB_RCV_NO       :=DB3
       MPI_ADR         :=12
       LADDR           :=432
       VERB_ID         :=1
       DP_MASTER_SYS_ID:=1
       DB_COM_NO       :="SWR_IDB"
       DP_KOMMUN       :=1
       ADR_MODUS       :=1
       PAA_FIRST       :=0
       PAA_LAST        :=19
       MB_NO           :=0
       MB_LEN          :=0
       IEC_NO          :=0
       IEC_LEN         :=0
       DB_NO           :=296
       DB_NO_LEN       :=10
       SLAVE_NO        :=3
       SLAVE_LEN       :=12
       SLAVE_DISTANCE  :=1
       DB_A_B_NO       :=DB100
       DB_A_B_NO_LEN   :=W#16#0
       DB_B_A_NO       :=DB100
       DB_B_A_NO_LEN   :=W#16#0
       RETURN_VAL      :=MW2
       EXT_INFO        :=MW4
So sieht mein Programm OB1 aus:

Code:
      CALL  "SWR_ZYK" , "SWR_IDB"
       DB_WORK_NO   :=DB1
       CALL_POSITION:=TRUE
       RETURN_VAL   :=MW6
       EXT_INFO     :=MW8

      U     DB101.DBX    9.1
      SPB   SWR // Das Sprungziel liegt hinter dem Aufruf der redundanten Bausteine
 
Zurück
Oben