SFC59 Kanal mehrfach nutzen

Mecki

Level-1
Beiträge
66
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe mal wieder ein kleines Problem.
Habe eine S7-414 mit 4581DP Baugruppe (SimadynD).

Die SPS und die SimadynD tauschen über den SFC58/59 Daten mit einander aus. Dies geschieht über DBs.
Nun habe ich in der Anlage 2 Wickler und 2 Getriebestufen. Für jede Getriebestufe und Wickler muss ich eine Stromkompensationstabelle ablegen. Damit diese Tabelle gespeichert wird, sendet die Simadyn beim Kompensationslauf die gemessenen werte an die S7 und diese legt sie in einem DB ab (SFC 59). Ist der Wickler aktiv holt sich die SimadynD die Daten wieder aus dem entsprechenden DB ab.

Da ich nun aber 2 Getriebestufen habe, habe ich diese Prozedur auch 2 mal. D.h. es gibt nun 2 DBs in denen die Kompensationswerte hinterlegt sind, jeweils für jede Getriebestufe.
Ich möchte nun gerne folgendes machen. Ich möchte den Datenaustausch so organisieren, dass ich mit jeweils einem Aufruf vom SFC58 und SFC59 die Daten einmal aus dem DB für Getriebestufe 1 abhole und einmal aus dem DB für Getriebestufe 2, ohne einen neuen Kanal zu öffnen.

Kann ich dies über den Befehl "AUF DB" erreichen? Indem ich sage:

Code:
WENN GETRIEBESTUFE 1 UND NICHT GETRIEBESTUFE 2
AUF DB112
SONST WENN GETRIEBESTUFE 2 UND NICHT GETRIEBESTUFE 1
AUF DB116
SONST TUE NICHTS

Das gleiche Prozedere möchte ich dann für den zweiten Wickler vornehmen.

Oder ist das Problen nur über einen dynamisch erzeugten Any-Pointer möglich?

Bedanke mich schonmal für eure Hilfe!
 
Hallo Mecki,
so was ähnliches habe ich auch schon einmal gemacht.
Du musst aber die Fertigmeldungen der Bausteine SFC58/59 mit auswerten.
Die Adresse von welcher Getriebestufe Du liest, muss doch aber auch dynamisch sein, oder steht die in dem DB drin?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Paule,

ich habe es nun so "gelöst" (siehe unten). Meinst du mit Fertigmeldung, dass das Busy Bit 0 sein muss, bevor man senden darf?

Code:
NETWORK
TITLE =
//DB dynamisch öffnen, in Abhängigkeit von der eingelegten Getriebestufe
//======================================================================
NETWORK
TITLE =Springe ABW1 wenn Getriebestufe 1 eingelegt ist

      U     "SteuerungAllgemeinDB".StAx.GETR_STUFE1; 
      UN    "SteuerungAllgemeinDB".StAx.GETR_STUFE2; 
      SPB   ABW1; 
NETWORK
TITLE =Springe ABW2 wenn Getriebestufe 2 eingelegt ist

      UN    "SteuerungAllgemeinDB".StAx.GETR_STUFE1; 
      U     "SteuerungAllgemeinDB".StAx.GETR_STUFE2; 
      SPB   ABW2; 
NETWORK
TITLE =Öffne DB112

ABW1: AUF   "Daten Abwickler ZK"; 
NETWORK
TITLE =Springe immer zur Kommunikationsfunktion

      U     "VKE1"; 
      SPB   ABW3; 
NETWORK
TITLE =Öffne DB116

ABW2: AUF   "Daten Abwickler ZK 2"; 
NETWORK
TITLE =Daten DB Abwickler Kompwerte schreiben an Simadyn D

ABW3: U     "VKE1"; 
      =     L     41.0; 
      BLD   103; 
      CALL "WR_REC" (
           REQ                      := L     41.0,
           IOID                     := B#16#54,
           LADDR                    := W#16#858,
           RECNUM                   := B#16#2F,
           RECORD                   := P#DBX 0.0 BYTE 40,
           RET_VAL                  := #retval_6,
           BUSY                     := M     90.7);
      NOP   0; 
NETWORK
TITLE =Daten DB Abwickler Kompwerte lesen aus Simadyn D

      U     "VKE1"; 
      =     L     41.0; 
      BLD   103; 
      CALL "RD_REC" (
           REQ                      := L     41.0,
           IOID                     := B#16#54,
           LADDR                    := W#16#858,
           RECNUM                   := B#16#30,
           RET_VAL                  := #retval_7,
           BUSY                     := M     91.0,
           RECORD                   := P#DBX 0.0 BYTE 40);
      NOP   0; 
NETWORK
TITLE =
//DB dynamisch öffnen, in Abhängigkeit von der eingelegten Getriebestufe
//======================================================================
NETWORK
TITLE =Springe AFW1 wenn Getriebestufe 1 eingelegt ist

      U     "SteuerungAllgemeinDB".StAx.GETR_STUFE1; 
      UN    "SteuerungAllgemeinDB".StAx.GETR_STUFE2; 
      SPB   AFW1; 
NETWORK
TITLE =Springe AFW2 wenn Getriebestufe 2 eingelegt ist

      UN    "SteuerungAllgemeinDB".StAx.GETR_STUFE1; 
      U     "SteuerungAllgemeinDB".StAx.GETR_STUFE2; 
      SPB   AFW2; 
NETWORK
TITLE =Öffne DB114

AFW1: AUF   "Daten Aufwickler ZK"; 
NETWORK
TITLE =Springe immer zur Kommunikationsfunktion

      U     "VKE1"; 
      SPB   AFW3; 
NETWORK
TITLE =Öffne DB117

AFW2: AUF   "Daten Aufwickler ZK 2"; 
NETWORK
TITLE =Daten DB Aufwickler Kompwerte schreiben an Simadyn D

AFW3: U     "VKE1"; 
      =     L     41.0; 
      BLD   103; 
      CALL "WR_REC" (
           REQ                      := L     41.0,
           IOID                     := B#16#54,
           LADDR                    := W#16#858,
           RECNUM                   := B#16#34,
           RECORD                   := P#DBX 0.0 BYTE 40,
           RET_VAL                  := #retval_11,
           BUSY                     := M     91.4);
      NOP   0; 
NETWORK
TITLE =Daten DB Aufwickler Kompwerte lesen aus Simadyn D

      U     "VKE1"; 
      =     L     41.0; 
      BLD   103; 
      CALL "RD_REC" (
           REQ                      := L     41.0,
           IOID                     := B#16#54,
           LADDR                    := W#16#858,
           RECNUM                   := B#16#35,
           RET_VAL                  := #retval_12,
           BUSY                     := M     91.5,
           RECORD                   := P#DBX 0.0 BYTE 40);
      NOP   0;

Bisher werte ich BUSY nicht aus. Habe dich nun so verstanden, dass ich es mit dem REQ verdaddeln muss, oder?

Vielen Dank für deine Hilfe!
 
Bisher werte ich BUSY nicht aus. Habe dich nun so verstanden, dass ich es mit dem REQ verdaddeln muss, oder?
Genau Mecki,
da ja die SFC58/59 in der Regel länger wie ein Zyklus brauchen, sollte der DB Wechsel und er damit verbundene erneute Aufruf, natürlich erst erfolgen wenn die Bausteine fertig melden oder kein Lese- / Schreibauftrag aktiv ist. ( BusyBit = 0 )
Aber ich weiß ja nicht wie oft der Wechsel erfolgt:
Code:
U     "SteuerungAllgemeinDB".StAx.GETR_STUFE1; 
UN    "SteuerungAllgemeinDB".StAx.GETR_STUFE2; 
SPB   ABW1;
 
Ah ok danke Paule. Dann werde ich das VKE1 am REQ mit !BUSY belegen.

Der Wechsel erfolgt unregelmäßig. Man kann davon ausgehen, dass die Anlage eine Serie von gleichen Materialien produziert und dann irgendwann einmal umgeschaltet werden muss.

Beim Umschalten wird die Simadyn auch nicht lesen oder schreiben, da dann der Antrieb stillstehen muss und auch nicht bestromt wird, also momentenlos ist.

Meinst du denn der Rest vom Quellcode ist so umsetzbar? Der Kunde wünscht expliziert nur FUP, daher sit es auch auf so viele Netzwerke verteilt ;)

Danke für deine Hilfe!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meinst du denn der Rest vom Quellcode ist so umsetzbar? Der Kunde wünscht expliziert nur FUP, daher sit es auch auf so viele Netzwerke verteilt ;)
Ich bin zwar kein Freund von FUP, aber ja, wenn Du wert auf meine Meinung legst. Schaut gut aus (wenn Du die Verriegeung noch rein machst) und noch wichtiger, es müsste funktionieren. :D
 
Ich bin zwar kein Freund von FUP, aber ja, wenn Du wert auf meine Meinung legst. Schaut gut aus (wenn Du die Verriegeung noch rein machst) und noch wichtiger, es müsste funktionieren. :D


Und wie ich Wert darauf lege ;)
Ich persönlich mag FUP, wenn es um Bitverarbeitung ect. geht. Für diese Umkopiererei mag ich aber dann AWL lieber oder auch SCL wenns komplizierte Funktionen werden.

Ich werde es mal mit Verriegelung versuchen und das ganze mal beim Kunden austesten^^

Dankeschön :) :TOOL:
 
Zurück
Oben