SFC 14/15 im FB verarbeiten

Steve38

Level-1
Beiträge
486
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

hab mir den SFC 14 und 15 erfolgreich parametriert.

Jetzt möchte ich gerne die beiden in einem FB verarbeiten. Komm nur irgendwie mit der Deklaration von RECORD nicht klar.

Wie muss ich RECORD genau deklarieren?
 
Hinter RECORD kommt ein ANY-Pointer. Der gibt an, wo der Eingangsbereich der Profibusbaugruppe hingeschrieben werden soll (SFC14).
Beispiel: Der Slave hat einen Eingangsbereich von 32 Byte Länge, dann könnte der Eintrag hinter RECORD lauten: P#DB1.DBX0.0 Byte 32

Für den SCF15 gilt dasselbe, nur umgekehrt. Da wird angegeben wo die Daten für den Ausgangsbereich des Slaves in der SPS liegen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, das hab ich ja soweit schon, aber wenn ich das ganze jetzt in einem FB machen möchte, wie muss ich da deklarieren?


So steht es in meinem FC:

P#DB54.DBX8.0 BYTE 8
 
Im FB ist es aber nix anderes.
Oder willst Du die SFC14 und 15 mit IN-/OUT-Variablen beschreiben?
 
Was hast du denn damit weiter vor ?
Soll der FB (und ggf. nur der) die eingelesenen Daten irgendwie weiter verarbeiten ? Wenn ja, dann würde ich im STAT-Bereich des FB den von dir benötigten Datenbereich (vielleicht sogar als Struktur) hinterlegen und diese dann symbolisch dem jeweiligen SFC übergeben ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte eigentlich ganz gerne am Ende quasi bei dem FB Aufruf, diesen Wert wieder dran schrieben:

P#DB54.DBX8.0 BYTE 8 und damit auf einen externen Datenbeistein gehe. Und nicht auf den InstanzDB.

Ich möchte das ganz gerne machen, da ich bei dem DB54 mir eine Tabelle angelegt habe, mit der genauen Bedeutung der Bits.
Oder ist das nicht notwenig? Ich hab nämlich knappe 35 FU´s die ich damit einlesen muss/soll/darf
 
Zuletzt bearbeitet:
... die Tabelle kannst du doch auch genauso in der FB-Instanz anlegen ... ist nur ein Vorschlag ... Ich weiß ja nicht, was du mit den Daten der FU's außerhalb des FB sonst noch so vor hast ...
Wenn du sie (größtenteils) nur in dem FB brauchst, dann wäre eventuell mein Vorschlag etwas für dich ...

Gruß
LL
 
Ich muss außerhalb eigentlich nur 2-3 Werte ausgeben und in den DB 2-3 Bits und den Sollwert setzten.

In den DB:

Start und Stopp
Sollwert

Aus dem DB:

Frequenz
Strom
 
Nö ... die Daten für die SFC's, die du übergeben willst legst du zuerst mal in deine Instanz. Jetzt kannst du von da aus den/die SFC's symbolisch bedienen ... versuch das mal so ...
 
... dann war ich vielleicht etwas schnell ... ;)

Ich meinte, dass du dass, was hier : P#DB54.DBX8.0 BYTE 8 steht nach miener Meinung mit in die Instanz gehört. Dadurch ersparst du dir den Übergabe-ANY und alles Zusammengehörige bleibt zusammen. Das mit Start+Stop und den Istwerten ... das sind natürlich Kandidaten für die Schnittstelle (also IN bzw. OUT).
 
Ah ok, jetzt hab ich es. :)

Mein P#DB54.DBX8.0 BYTE 8 deklarier ich als TEMP im Format Any.

Und die Werte die ich ausgeben möchte einfach als Out bzw. IN.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein ...
das, was du im DB54 im Bereich von DBB8 bis DBB15 deklariert hast ... das kopierst du dir direkt in deine Instanz - von mir aus auch in den TEMP-Bereich - ich würde aber lieber STAT nehmen.
Was ich meine ist, dass du nicht auf den DB verweisen sollst, sonders das dein Instanz-DB an Stelle des DB tritt ...
 
:confused: das selbe wie im DB ...

also vielleicht so :
Code:
STAT
   Sendedaten : struct
      Steuerwort : struct
         Freigabe_1 : bool
         Freigabe_2 : bool
 
         usw.
      end_struct
      Sollwert : dint
   end_struct
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Quasi so:



IM FB:

SFC14_15.JPG


Deklartaion:


Deklaration.JPG




Aufruf:


Aufruf.JPG
 
Nochmal eine Frage zu meinen "Problem".

Ich muss meinen Sollwert von Panel ja wandeln, bekomm einen INT Wert und der FU erwartet eine HEX Zahl.

So kann ich es machen, oder?

Code:
      L     #Sollwert_Panel
      L     164
      *I    
      ITB   
      T     #Steuerwort.PCD_21.Sollwert
      NOP   0

#Sollwert ist der Wert im STAT das als Struct hinterlegt ist.
 
Zuletzt bearbeitet:
Hallo Steve,
der ITB-Befehl ist Blödsinn - ansonsten ist es richtig unter der Voraussetzung, dass du im Sollwert_Panel Werte im Bereich von 0 bos 100 übergibst ...

Gruß
LL
 
Zurück
Oben