Hilfe bei Software Redundanz gesucht

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

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

Hast Du danach auf beiden CPU's die 3 "online" DB's gelöscht? Das muss nach jeder Äbderung der Parmetrierung und nach jeder Änderung in Deinen DBs hinsichtlich Länge usw. erfolgen

Du solltest alle DB die redundat sein sollen hintereinander legen. Das System weiß sicherlich nicht was in dem DB ist. Sprich IEC, Daten oder Instanzen. Also kannst Du auch alles einfach über DB abgleichen.

Wenn man zuviele Daten abgleicht macht es sich irgendwann bemerkbar.
 
Zunächst mal Danke für den Code.

Die drei DBs für SWR_START hab ich immer online gelöscht und neu anlegen lassen.
Mit iDBs für IEC-Zähler/Zeiten hab ich einfach alle iDBs von FBs gemeint, indem ich den Datentyp TIME gefunden hab. Das sind bei mir je ein iBD für meine beiden in S7-GRAPH erstellten Schrittketten und dann noch zwei selbst kreierte FBs, in denen ich über die SFC64 TIME_TCK bisschen rumrechne.

Auf jeden Fall bin ich dir schon mal sehr dankbar dafür, dass ich jetzt weiß, dass ich mein Programm auch in OB1 laufen lassen kann und nicht in OB35 laufen lassen muss.

Heute morgen beim aufstehen ist mir aber folgender Gedanke gekommen:
Gibts einen bestimmten Wert für den LADDR ?
Ich weiß, dass das der EA-Bereich der CP ist und das hab ich so auch eingestellt. Jetz hab ich aber gesehen, dass die CP einen E- und einen A-Bereich mit jeweils 16Byte länge hat. Hat das eine Auswirkung auf die maximal übertragbare Datenmenge? Oder heißt dass nur, dass die zu übertragende Information auf mehrere 16Byte-Pakete aufgeteilt wird?

Hier ist mal der Code von meinen Aufrufen und eine Beschreibung meiner DBs / iDBs

OB 100
Code:
      CALL  "SWR_START"
       AG_KENNUNG      :='A'            // PLC-Classification: A for Station A
       DB_WORK_NO      :="DB_WORK_NO"   // Work DB for SWR
       DB_SEND_NO      :="DB_SEND_NO"   // Send DB for SWR
       DB_RCV_NO       :="DB_RCV_NO"    // Receive DB for SWR
       MPI_ADR         :=4              // MPI-address of other station
       LADDR           :=256            // Base address of CP
       VERB_ID         :=1              // Connection no. of redundancy coupling
       DP_MASTER_SYS_ID:=1              // Identification of DP-mastersystem (HW-config)
       DB_COM_NO       :="DB_COM_NO"    // Instance-DB of FB 101
       DP_KOMMUN       :=1              // Identification of DP-master
       ADR_MODUS       :=1              // Interval for CPU I/Q addressing
       PAA_FIRST       :=10             // Address of first redundant outputbyte
       PAA_LAST        :=10             // Address of last redundant outputbyte
       MB_NO           :=0              // First flagbyte used within redundant user program
       MB_LEN          :=252            // Amount of flagbytes used within redundant user program
       IEC_NO          :=151            // First instance DB used for redundant iec counters or timers
       IEC_LEN         :=4              // Amount of instance DBs used within redundant user program
       DB_NO           :=100            // First DB used within redundant user program
       DB_NO_LEN       :=1              // Amount of DBs used within redundant user program
       SLAVE_NO        :=3              // Profibus address of first used DP-slave (IM 153-3)
       SLAVE_LEN       :=1              // Amount of used DP-slaves
       SLAVE_DISTANCE  :=1              // Configuration of IM 153-3 interface
       DB_A_B_NO       :=DB255          // Send DB for non redundant data from Station A to B
       DB_A_B_NO_LEN   :=W#16#0         // Amount of used data bytes within Send DB
       DB_B_A_NO       :=DB256          // Receive DB for non redundant data from Station B to A
       DB_B_A_NO_LEN   :=W#16#0         // Amount of used data bytes within Receive DB
       RETURN_VAL      :="FC100_RETURN_VAL"    // Block return value
       EXT_INFO        :="FC100_EXT_INFO"    // Extended information

OB 35
Code:
      CALL  "SWR_ZYK" , "DB_COM_NO"     // Call of FB 101 'SWR_ZYK' with instance DB
       DB_WORK_NO   :="DB_WORK_NO"      // Work DB for SWR
       CALL_POSITION:=TRUE              // Call_Position = TRUE at begin of redundant program
       RETURN_VAL   :="FB101_RETURN_VAL_BEG"    // Block return value
       EXT_INFO     :="FB101_EXT_INFO_BEG"    // Extended information
 
 
// Begin of redundant user program
 
 
      U     DB5.DBX    9.1              // Check if station is Master
      SPB   END
 
// Mein Programm Anfang
// Mein Programm Ende
 
// End of redundant user program
END:  NOP   0
 
      CALL  "SWR_ZYK" , "DB_COM_NO"     // Call of FB 101 'SWR_ZYK' with instance DB
       DB_WORK_NO   :="DB_WORK_NO"      // Work DB for SWR
       CALL_POSITION:=FALSE             // Call_Position = False for end of redundant program
       RETURN_VAL   :="FB101_RETURN_VAL_END"    // Block return value
       EXT_INFO     :="FB101_EXT_INFO_END"    // Extended information

mfg mephisto
 

Anhänge

  • Simatic Manager.JPG
    Simatic Manager.JPG
    92,8 KB · Aufrufe: 10
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde mal denken, IEC_NO und IEC_LEN bezieht sich rein auf IDB von IEC-Timern und -Countern. Dies kann man ja auch einzeln in Bausteinen verwenden, dann muß zu jedem Timer/Counter ein IDB verwendet werden. Diese muß man dann angeben. Keine Ahnung, ob das was ausmacht, aber ich würde die DB, in denen Timer verwendet werden mit zu den redundanten DB zählen. Wenn in der Anleitung steht, dass die Merker lückenlos verwendet werden, muß das einen technischen Hintergrund haben, hast du so viele Merkerbyte verwendet?
 
Hallo!

Das mit den DBs kann ich ja mal probieren.

Bei den DBs muss ich aber noch sagen: Hab mir mal das Beispielprogramm von Siemens angesesehen und die haben das auch so gemacht. Das heißt, die haben einen zusammenhängenden iDB-Bereich wo die iDBs der einzelnen (S)FBs mit Werten vom Datentyp TIME drinnen sind und dann noch getrennt von diesem Bereich einen DB-Bereich, wo die DBs der Programmteile drinnen sind - so wie ich. Nur dass es bei denen funktioniert - angeblich.


Zu den Merkern. Ich hab im Grunde genommen folgende Aufteilung:

M0.0 ich brauch einen einzigen remanenten Merker
M100.5 - M104.7 sind meine Bitmerker
MD200 - MD248 sind meine Merker für REAL und TIME
MW20 - MW32 sind die Rückgabewerte der SWR Funktionen

Alle freien Bytes zwischen MB0 und MB 251 hab ich mit MB, MW und MD in der Symboltabelle aufgefüllt. Die werden halt nur nicht beschrieben oder gelesen.

mfg roland
 
So Leute, neue Erkentnisse!

Ich hab ja geschrieben, dass ich 5DBs in meinem Programm nutze.
Ich nutze die, wie folgt:
DB100: Alle Meldungen, die von einem Terminal gelesen werden (bool, real, etc.)
DB101: Alle Meldungen, die von einem Terminal beschrieben werden (bool, real, etc.)
Bei diesen beiden DBs wird ein Bool in der SPS als Bool (z.B.: DB100.DBX0.0) beschrieben/gelesen, ebenso in der Visualisierung.
DB102: Alle Betriebsmeldungen, die von einem Terminal gelesen werden
DB103: Alle Warnmeldungen, die von einem Terminal gelesen werden
Bei diesen beiden DBs sind im DB nur Worte hinterlegt. Hierbei werden jedoch die Bits einezeln in der Steuerung beschrieben (z.B.: DB102.DBX0.0 schreibt auf Wort 0 in DB 102)
DB104: Ist ein Reiner Dummy-DB, indem immer und immer wieder von diversen Funktionen das erste und einzige Doppelwort beschrieben wird.

Wenn ich versuche nur DB104 oder DB100-DB101 zu übertragen, dann klappt alles. Sobald ich aber versuche DB102 und/oder DB103 mit zu übertragen (z.B.: DB100-DB102 oder DB103-DB104) so kommen die Fehlermeldungen mit Bereichslängenfehler beim Lesen/Schreiben.
Ich muss die Warn/Betriebsmeldungen jedoch als Worte im DB ablegen, weil mein Terminal Meldungen nur aus Worten auslesen kann.

Gibts ne einfache Funktion, dass ich in FUP möglichst komfortabel ein Bit eines Wortes beschreiben kann? Ich denke da an so eine Funktion wie BO_TO_W in CFC

mfg mephisto
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kann ja immer noch nicht glauben, dass der Inhalt Deiner DB von irgendeiner Bedeutung ist. Der Kopplung interessiert doch nicht ob sie Wörter oder Bits oder was auch immer überträgt.
Wie lang sind Deine jeweiligen DB?
Kann es sein das DB102 besonders groß ist?
 
Warum es mit den beiden DBs nicht geht weiß ich auch nicht. Ist für mein jetztiges aktutes Problem aber auch nicht so wichtig. Natürlich will ich letztendlich, dass alles geht. Aber dabei hoffe ich dann auch auf ein bisschen mithilfe von Siemens.
DB102 ist übrigens nicht besonders groß. Er ist laut Simatic Manager ähnlich groß wie meine anderen DBs. In DB102 und DB103 befinden sich jeweils nur ein Wort, sonst nichts.

mfg mephisto
 
Hallo!

Hab Antwort von Siemens erhalten.
Die DBs müssen eine Mindestgröße von 4Byte haben.
Hab bei mir jetzt DB102 und DB103 vergrößert und siehe da - es funktioniert!
:ROFLMAO:

Danke für eure großartige Unterstützung bei meinem Problem!

mfg mephisto
 
Zurück
Oben