Problem mit Globaldaten und Lebensbit

S7_Mich

Well-known member
Beiträge
208
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

ich habe zwei Cpus 315 über MPI vernetzt.

Ich bräuchte ich jeweils ein Lebensbit der anderen Station. Ich dachte, ich realisiere es mit den Globaldaten.

M0.1 CPU 1 --> M0.2 CPU 2
M0.2 CPU 1 <-- M0.1 CPU 2

M0.1 wird bei beiden Stationen über

Set
=m0.1

gebildet.

Soweit funktioniert das auch, aber wenn ich jetzt z. b. die Spannungsversorgung abstecke oder das MPI Kabel einer Station abziehe, bleibt trotzdem der M0.2 auf "1", bloß warum. Ich dachte mich zu errinnern, daß die Globaldaten vor dem Prozeßabbild der Eingänge gelesen werden und nach dem Prozeßabbild der Ausgänge geschrieben werden.

Wie könnte ich das Problem lösen, vielleicht weiß von euch jemand dazu einen Rat?

Gruß
Michael
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.410
Punkte Reaktionen
3.378
Du könntest das Problem umgehen, indem du einen Impuls übergibst und auf der Gegenseite mit einer Flanke des Lebensbit und einer Zeit diesen Impuls überwachst.
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
Zuviel Werbung?
->Hier kostenlos registrieren
Code:
    U(    
      O(    
      U     DB30.DBX    3.1
      L     S5T#5S
      SE    T     12
      NOP   0
      NOP   0
      NOP   0
      U     T     12
      )     
      O(    
      UN    DB30.DBX    3.1
      L     S5T#5S
      SE    T     13
      NOP   0
      NOP   0
      NOP   0
      U     T     13
      )     
      )     
      S     DB30.DBX   12.5
      U     DB30.DBX    3.1
      FN    DB30.DBX   12.1
      R     DB30.DBX   12.5
      NOP   0

Kannst Du auch in KOP umschalten.

Das ist eine Möglichkeit. Auf der anderen Seite ist einfach der Taktmerker X.2 aufgeschaltet.

pt
 
OP
S

S7_Mich

Well-known member
Beiträge
208
Punkte Reaktionen
3
Hallo nochmal,

und was haltet ihr davon.

U(
O(
UN #Lebensbit
L S5T#1S
SE T 12
NOP 0
NOP 0
NOP 0
U T 12
)
O(
U #Lebensbit
L S5T#1S
SE T 13
NOP 0
NOP 0
NOP 0
U T 13
)
)
R DB30.DBX 12.5
U(
U #Lebensbit
FP DB30.DBX 12.2

O(
U #Lebensbit
FN DB30.DBX 12.1
)
)
S DB30.DBX 12.5
NOP 0

Wobei das "Lebensbit", wie PLC schon gesagt hat, der Takt der anderen Station ist.

Gruß
Michael
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.410
Punkte Reaktionen
3.378
@qualmendes Kaffehaus :lol: :? :p

Das Lebensbit als Impuls, erzeugt mit einem Timer, Zähler, CPU-Taktsignal, oder wie auch immer vom Master zum Slave schicken. Der Salve überwacht den Impuls mit Timer, Zähler, oder wie auch immer und schickt das Gleiche Lebensbit zurück. Der Master wertet es dann genauso aus wie der Slave.

Also:

Master Impulserzeugung ---> Slave (Auswertung + Weitersendung)

Master Imulsauswertung
 

KaffeeSaufenderKamin

Well-known member
Beiträge
143
Punkte Reaktionen
3
jojo

nur war hier nicht von einem Impuls die Rede sondern von einem gesetzten Bit das übertragen wird :roll:

Mit einem gesetzten Bit funktioniert die Überwachung immer, egal welche laufzeiten auf dem Bus sind, oder wie oft die Kommunikation angestossen wird. Auserdem spart man sich die Flanken usw..
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.410
Punkte Reaktionen
3.378
Zuviel Werbung?
->Hier kostenlos registrieren
@KSK (ich kürz jetzt mal ab)

Kann man das empfangene Lebensbit so rücksetzen, wie in deinem Beispiel ?
Wenn es stehenbleibt, obwohl die Kommunikation nicht mehr funtioniert, wird es wahrscheinlich am Zyklusanfang immer wieder auf 1 gehen, oder ?
 

KaffeeSaufenderKamin

Well-known member
Beiträge
143
Punkte Reaktionen
3
Das geht ohne Probleme, da ja der Kommunikationspartner das Bit setzt.
Ist dieser nicht mehr vorhanden, so kann es auch nicht mehr gesetzt werden.
Hier ist der Anwender in der Pflicht die Daten so konsistent zu halten, wie er es im Programm benötigt.
Manchmal möchte man halt bei einer Verbindungsstörung mit den letzten gesendeten Werten weiterarbeiten, ein anderesmal will man das aber nicht und schreibt sie dann auf 0 oder etwas anderes.

Beispiele :

1.) Es wird eine Solltemperatur für eine Raumheizung übergeben. Hier würde ich die Daten nicht löschen.

2.) Die Anlage fordert eine Komponente xyz an und auf der anderen SPS wird nun eine Pumpe angesteuert. Hier würde ich die Daten löschen, damit die Pumpe nicht bis zum jüngsten Gericht läuft.
 
OP
S

S7_Mich

Well-known member
Beiträge
208
Punkte Reaktionen
3
Hallo,

also ich kann sagen, das das Beispiel mit dem Zähler wunderbar funktionert. Cpu1 schickt über Globaldaten ein Taktmerkerbit an die zweite CPU, das empfangene Bit steuert den Zähler. Bleibt das Bit bei Abbruch der Verbindung auf 1 wird es ja zurück gesetzt und die Zeit läuft ab.

Funktioniert einwandfrei.

Vielen Dank für den Tipp.

Gruß
Michael
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.410
Punkte Reaktionen
3.378
Zuviel Werbung?
->Hier kostenlos registrieren
So, jetzt hab ich das endlich auch ganz durchgekaut, ich dachte nach der Beschreibung, das Lebensbit wird trotz des Verbindungsbbruchs durch die Globaldaten weiterhin auf 1 gehalten und ein Rücksetzen wirkt nicht.

Das mit dem Zähler is schön kurz und knackig. :p
 
OP
S

S7_Mich

Well-known member
Beiträge
208
Punkte Reaktionen
3
Hallo,

ja so ist das mit den Globaldaten, aber wenn ich mir es recht überlege, gehts doch noch kürzer, oder?

Ich setzte in der CPU 1 einen Merker. Schicke den als Globaldaten an die andere CPU und setzte diesen erhaltenen Merker am Ende vom Programm oder zumindestens nach der Lebensbitabfrage wieder zurück.

.
.
.
u lebensbit
.
.
.
.

= irgendwas


U Lebensbit
R Lebensbit

Wenn jetzt die Kommunikation abbricht wäre ja der erhaltene Lebensbitmerker immer noch "1", aber hier würde er zurück gesetzt.

Gruß
Michael
 

KaffeeSaufenderKamin

Well-known member
Beiträge
143
Punkte Reaktionen
3
Natürlich geht das auch so, aber schon bei einer kurzen unterbrechung direkt zu reagieren ist nicht ganz so toll.
Bei deiner Lösung muss das Bit bei jedem sicher Zyklus übertragen werden. Klappt das wirklich ??
 
Oben