SFC22 parametrieren

L

liquid

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Board,

ich habe am Donnerstag Prüfung und nun hänge ich bei den SFC Übungen total durch.
Kann mir vielleicht jemand sagen wie ich den SFC22 parametrieren muss und ob ich das Programm dann auch mit PLC-SIM testen kann (was sonst eigentlich immer geht)???
In meinen Unterlagen steht so gut wie nichts über SFC´s und SFB´s drin außer woher die kommen.


CPU 314 IFM
S7 5.2

CU

Liquid
 
aus der online hilfe von step 7

eschreibung

Mit der SFC 22 "CREAT_DB" (create data block) erzeugen Sie im Anwenderprogramm einen Datenbaustein, der keine vorbesetzten Werte enthält. Er enthält stattdessen Zufallsdaten. Die SFC erzeugt einen Datenbaustein mit einer Nummer aus einem angegebenen Bereich sowie mit vorgegebener Größe. Aus dem angegebenen Bereich vergibt die SFC die kleinste mögliche Nummer an den DB. Einen DB mit bestimmter Nummer erzeugen Sie, indem Sie der Ober- und Untergrenze des vorzugebenden Bereichs die gleiche Nummer geben. Die Nummern der im Anwenderprogramm bereits enthaltenen DBs können Sie nicht mehr vergeben. Die Länge des DBs müssen Sie in einer geraden Zahl angeben.

Unterbrechbarkeit

Die SFC 22 "CREAT_DB" kann unterbrochen werden durch höherpriore OBs. Wenn in einem höherprioren OB wiederum eine SFC 22 "CREAT_DB" aufgerufen wird, wird dieser Aufruf mit dem Fehlercode W#16#8091 abgewiesen.


Parameter Deklaration Datentyp Speicherbereich Beschreibung
LOW_LIMIT INPUT WORD E, A, M, D, L, Konst. Der untere Grenzwert ist die kleinste Nummer in dem Bereich der Nummern, die Sie Ihrem Datenbaustein zuordnen können.

UP_LIMIT INPUT WORD E, A, M, D, L, Konst. Der obere Grenzwert ist die größte Nummer in dem Bereich der Nummern, die Sie Ihrem Datenbaustein zuordnen können.

COUNT INPUT WORD E, A, M, D, L, Konst. Der Zählwert gibt die Anzahl der Datenbytes an, die Sie für ihren Datenbaustein reservieren möchten. Sie müssen hier eine gerade Zahl an Bytes (maximal 65534) angeben.

RET_VAL OUTPUT INT E, A, M, D, L Tritt während der Bearbeitung der Funktion ein Fehler auf, enthält der Rückgabewert einen Fehlercode.

DB_NUMBER OUTPUT WORD E, A, M, D, L Die Datenbausteinnummer ist die Nummer des erstellten Datenbausteins. Im Fehlerfall (Bit 15 von RET_VAL wurde gesetzt) wird in DB_NUMBER der Wert 0 eingetragen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke, aber das entspricht etwa der Hilfe von S7.
Das hilft mir nicht so richtig weiter.
Hier mal ein kleiner Auszug aus der Aufgabenstellung:

Erstellen sie den Datenbaustein DB 22 mit hilfe des SFC22 mit einer Länge von 40 Datenbytes.
Wenn ich den SFC22 aufrufe sieht das dann wie folgt aus:

CALL "CREAT_DB"
LOW_LIMIT:=***
UP_LIMIT :=***
COUNT :=***
RET_VAL :=***
DB_NUMBER:=***
Was genau muss ich an den mit Sternchen (***) makierten Stellen eintragen.

CU

Liquid
 
Hallo,

parametriert könnte der SFC so aussehen.

Gruß

bs


VAR
tRET_VAL : INT; //Fehlernummer, siehe Hilfe falls DB schon existiert
DB_NUMBER : INT; //nicht Notwendig, weil nur DB 22 erzeugt wird

END_VAR


CALL "CREAT_DB"
LOW_LIMIT:=22
UP_LIMIT :=22
COUNT :=40
RET_VAL :=_ret_val
DB_NUMBER:=***
 
Ich glaub ich schnall es nicht

Danke für die Hilfe, aber KEINE euerer Anweisungen funktioniert.

Ich kann keine ganzen Zahlen eingeben, wie z.B.:

LOW_LIMIT = 22
UP_LIMIT = 22
COUNT = 44

Auch die Variante mit Hex habe ich probiert:

LOW_LIMIT:=W#16#0
UP_LIMIT :=W#16#0
COUNT :=W#16#0

geht auch nicht.

Dann habe ich folgendes versucht:

LOW_LIMIT:=W#16#0
UP_LIMIT :=W#16#16
COUNT :=W#16#0

auch kein Erfolg. Ich weiss echt nicht mehr weiter.

Den Call mache ich übrigens im OB1, da ich dort auch bei meinen anderen Übungen meine DBs aufrufe.

CU

Liquid
 
Hi,
bei mir geht das so.
Welcher von deinen Werten bleibt den Rot ?

Code:
      CALL  "CREAT_DB"
       LOW_LIMIT:=W#16#16
       UP_LIMIT :=W#16#16
       COUNT    :=W#16#2C
       RET_VAL  :=#dummy1               (int)
       DB_NUMBER:=#db_nr               (word)

Ciao
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es geht !!!

Ich habe jetzt mal alles ausprobiert was mir so eingefallen ist. Und das ist dabei rausgekommen:

L 22
T MW 90
L 22
T MW 102

CALL "CREAT_DB"
LOW_LIMIT:=MW102
UP_LIMIT :=MW102
COUNT :=W#16#28
RET_VAL :=MW100
DB_NUMBER:=DBW22

NOP 0

Ich bin mir im Moment zwar nicht ganz sicher ob das so richtig ist, aber zum einen denke ich mir das viele Wege nach Rom führen und ich ja noch immer den schnellsten Weg herausfinden kann.
Es wird tatsächlich ein DB22 erstellt, welcher eine Länge von 40 Datenwörtern hat.

Wenn ich bedenke das ich schlappe 2 Tage daran gesessen habe, dann muss ich mir für die Prüfung am Donnerstag was einfallen lassen, damit mein Lehrer keine Überstunden machen muss.

Ich bekanke mich für euere tatkräftige Unterstützungen.
Dann will ich mich mal um die nächste Übung kümmern.

Also bis gleich ;-)

CU

Liquid
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bereichslängenüberschreitung

Aber was mache ich dann hier falsch?

Code:
CALL  "CREAT_DB"
LOW_LIMIT:=W#16#2
UP_LIMIT :=W#16#2
COUNT    :=W#16#16
RET_VAL  :=#R_V
DB_NUMBER:=#DB_nr

L     #DB_nr
T     MW     2
NOP   0

AUF   DB [MW 2]
L     10
T     DBB    0
Ergebnis S7-315: Bereichsfehler beim schreiben.

Tschuldigung bin noch recht neu dabei.
 
Aber was mache ich dann hier falsch?

Code:
CALL  "CREAT_DB"
LOW_LIMIT:=W#16#2
UP_LIMIT :=W#16#2
COUNT    :=W#16#16
RET_VAL  :=#R_V
DB_NUMBER:=#DB_nr

L     #DB_nr
T     MW     2
NOP   0

AUF   DB [MW 2]
L     10
T     DBB    0
Ergebnis S7-315: Bereichsfehler beim schreiben.

Tschuldigung bin noch recht neu dabei.

Was steht den Ret_Val?
Wenn es bereits einen leeren DB2 gibt, wird kein DB erstellt, ein Schreiben würde dann fehlschlagen.
 
Zurück
Oben