Instanz DB nimmt keine Änderung an

kirk42

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

will eine Dreipunktregelung mit dem SFB 42 realisieren den ich im OB35
mit call SFB42 , DB42 aufgerufen habe .
Der DB42 nimmt aber keine Änderungen an , auch mit PID_Control kann
ich die Parameter nicht in die Steuerung übertragen ( das Icon dafür ist nicht
anwählbar).

Im DB 42 stehen die Ausgänge auf FALSE obwohl im OB35 welche angegeben sind .

Hardware S7 313C Step7 V5.1

Gruss an alle
 
Soviel ich weiss kannst du durch die Zuordnung des DB an ein FB diesen auch nur im FB aufrufen.
Es ist sozusagen ein remanenter Speicher des FB und dient zur Kommunikation mit dem FB.

Durch Call FB, DB

Erscheint die Abfrage der In und Out Parameter.

Wenn du den FB nicht als Unterprogramm für mehrmaligen Aufruf oder für eine Bibliothek geschrieben hast kannst du den DB auch ganz normal anlegen. Ohne Call aufruf.
Dann kannst du ihn normal von überall auslesen, beschrieben und ändern.
Währe besser wenn du dann aber einen FC benutzt.
 
SFB ist glaube ich ein interner Baustein.
Also ein Programm das schon in der 300 vorintegriert ist.
Dieses benötigt einen zugeordneten DB.
Den kannst du natürlich normalerweise nicht von aussen beschrieben.
Hier sind die In Out Temp usw. des SFB gespeichert.
Also das Interne und die Kommunikation.

Beim Aufruf des SFB 43, DB 43 frägt er dir die Werte zur Kommunikation ab.

Also welchen Eingang, Ausgang, Worte oder welche Tähler oder Timer du halt benötigst.

Die Werte kannst du natürlich in ein normalen DB schrieben.
JEdoch musst du diesen vorher selbst auf die 300 schreiben.

Bei einen Call fb (oder sfb), db wird der DB jedesmal beim einspielen des OB neu erzeugt. Bei einen normalen DB musst du ihn selbst einschreiben und natürlich vorher auch definieren.

Glaube ist richtig so wie ich es geschrieben habe
 
Ich rufe den Baustein (in diesem Fall SFB42) als Schrittregler im OB35 auf .

Wenn ich jetzt einen Parameter ändere z.B. die Stellausgänge umbenene,

sollte das dann doch auch im dazugehörigen Instanz-DB ( hier DB42 ) gespeichert werden oder nicht ?

MfG Thomas
 
Jetzt mal ein paar Grundlagen:

SFB = Systemfunktionsbaustein
SFC = Systemfunktion
FB = Funktionsbaustein
FC = Funktion

SFB/FB's benötigen fast grundsätzlich einen Instanz-DB, ausnahme es gibt keine IN / OUT / IN-OUT / STAT Parameter,
dann wäre es aber Ratsamer einen FC zu verwenden.

Der InstanzDB muss grundsätzlich nur dann neu erzeugt werden wenn sich die Schnittstelle des zugehörigen FB's ändert.
Also sich bei der Definition der IN / OUT / IN-OUT / STAT Parameter was ändert.

So das vorab, grundsätzlich wenn du PID Control verwenden willst sollten alle IN-Parameter bis auf den Prozesswert frei lassen.

Kannst du notfalls mal dein Projekt posten?


Wenn ich jetzt einen Parameter ändere z.B. die Stellausgänge umbenene,
sollte das dann doch auch im dazugehörigen Instanz-DB ( hier DB42 ) gespeichert werden oder nicht ?

Wie meinst du das?
Was du als Stellausgang hinschreibst (oder nicht) kann nicht im Instanz-DB auftauchen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ,

hier mal eine kurze Beschreibung des Projektes .
Wasserpumpe soll mit Poti eingestellten Druck halten.
Eingang 0-10V Poti
Eingang Druckmesser 0-20mA
Ausgänge zum Stellmotor Gashebel Dieselmotor ( mehr - weniger Gas )

im OB35 eingetragen A124.1 und A124.2 für Stellmotor.
Rufe ich im AG DB42 auf steht bei den Ausgängen FALSE .
Wenn ich PID_Control starte kann ich zwar den Kurvenschreiber starten aber
keine geänderten Parameter ins AG schreiben um den PID zu konfigurieren.
MfG Thomas
 
Also in den OB ein Call sfb 42, db 42
Der DB wird angelegt und die Parameter so angezeigt:

Code:
      CALL  "CONT_S" , DB42
       COM_RST :=
       LMNR_HS :=
       LMNR_LS :=
       LMNS_ON :=
       LMNUP   :=
       LMNDN   :=
       PVPER_ON:=
       CYCLE   :=
       SP_INT  :=
       PV_IN   :=
       PV_PER  :=
       GAIN    :=
       TI      :=
       DEADB_W :=
       PV_FAC  :=
       PV_OFF  :=
       PULSE_TM:=
       BREAK_TM:=
       MTR_TM  :=
       DISV    :=
       QLMNUP  :=
       QLMNDN  :=
       PV      :=
       ER      :=

SFB

Code:
Sie entnehmen den jeweiligen CPU-Handbüchern welche Systemfunktionen für Ihre CPU zur Verfügung stehen.

SFB Aufrufen

Code:
Format
CALL SFB n1, DB n2
Beschreibung
Die Operation dient zum Aufruf der von Siemens gelieferten Standardfunktionsbausteine (SFBs). Die Operation CALL ruft die SFB auf, die Sie als Operanden eingeben, unabhängig vom VKE oder einer anderen Bedingung. Wenn Sie einen SFB mit CALL aufrufen, müssen Sie ihn mit einem Instanz-Datenbaustein versehen. Nach der Bearbeitung des aufgerufenen Bausteins wird das Programm des aufrufenden Bausteins weiterbearbeitet. Die Kennung des Codebausteins kann absolut oder symbolisch angegeben werden.
Übertragen von Parametern (arbeiten Sie hierzu im inkrementellen Bearbeitungsmodus)
Der aufrufende Baustein kann mit dem aufgerufenen Baustein über die Variablenliste Parameter austauschen. Die Variablenliste wird in Ihrem AWL-Programm automatisch ergänzt, wenn Sie eine gültige Anweisung CALL eingeben. 
Wenn Sie einen einen SFB aufrufen und die Variablendeklarationstabelle des aufgerufenen Bausteins über Deklarationen vom Typ IN, OUT und IN_OUT verfügt, werden diese Variablen im Programm des aufrufenden Bausteins als Liste der Formalparameter ergänzt.
Beim Aufruf der SFBs müssen Sie nur die Aktualparameter angeben, die sich gegenüber dem letzten Aufruf ändern sollen, da die Aktualparameter nach der Bearbeitung des SFB im Instanz-DB gespeichert sind. Ist der Aktualparameter ein DB, muss immer die vollständige, absolute Adresse angegeben werden, z.B. DB1, DBW2.
Die Parameter IN können als Konstanten oder als absolute bzw. symbolische Adressen angegeben werden. Die Parameter OUT und IN_OUT müssen als absolute bzw. symbolische Adressen angegeben werden. Achten Sie darauf, dass alle Adressen und Konstanten mit den Datentypen, die übertragen werden, kompatibel sind.
Die Operation CALL speichert die Rücksprungadresse (Selektor und relative Adresse), die Selektoren der beiden geöffneten Datenbausteine und das MA-Bit im B-Stack. Zusätzlich deaktiviert die Operation die MCR-Abhängigkeit und erstellt den Lokaldatenbereich des Bausteins, der aufgerufen werden soll.
Statuswort
BIE A1 A0 OV OS OR STA VKE /ER
schreibt: - - - - 0 0 1 - 0
Beispiel
CALL SFB4,DB4 
Formalparameter Aktualparameter
IN: E0.1
PT: T#20s
Q: M0.0
ET: MW10
HinweisJeder Aufruf eines SFBs muss über einen Instanz-Datenbaustein verfügen. In dem obigen Beispiel müssen die Bausteine SFB4 und DB4 vor dem Aufruf vorhanden sein.

Im Handbuch S7400TF ist auf Seite 400 nun beschrieben wo im DB 42 dann was steht. `Und welche Parameter im CALL aufruf was sind.
Mit dem ersten Wert Com_Rst kannst du angeben ob es eien automatische Regleung ist oder du einen Durchlauf angibst (0=Relegelbetrieb 1=Neustart)

Die Werte, als den Commikations DB kannst du NUR im Call parametrieren!
 
Danke erstmal für die Hilfe bis jetzt .

Ich möchte jetzt die Ausgänge QLMNUP und OLMNDN neu eingeben .
Rufe ich den Baustein mit call auf kommt die ganze Parameterliste nochmal
die ich ja schon eingegeben habe .
Das mit dem Formalparametern habe ich anscheinend nicht kapiert aber ich sage gleich dabei das ich mit S7 jetzt erst anfange und sonst nur mit S5 Gearbeitet habe.

MfG Thomas


PS: Suche nochmal in den TF nach....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Den Ausgang kannst du natürlich nichts sagen.
Er gibt dir Werte aus.

Du musst den Ausgang auslesen.
Ist QLMNUP = 1 musst du dein Stellventiel öffnen
Ist QLMNDN = 1 Musst du dein Stellventiel wieder schliessen.

Bzw. bei UP soll es etwas auf fahren
Bei DN soll es etwas zu fahren

Du kannst hier nur die Werte auslesen, nichts rein schreiben
 
Bei den Ausgängen gebe ich doch Z.B. für UP - M1.0 DN - M1.1
an mit denen ich dann die die Digitalen Ausgänge ansteuere .
So steht es jedenfalls in der Beschreibung vom SFB42 .
Eigentlich kann ich dort doch auch direkt die Ausgänge angeben , oder nicht ?

MfG Thomas
 
Ja da kannst du auch direkt die Ausgänge angeben.

Ich bin mir nicht sicher aber du musst dann den DB erst löschen.
Dann neu mit Call sfb42, db 42 neu aufrufen und generieren
und dann kannst du da deine Ausgänge angeben (Also Bitausgang)

Du solltest allerdings natürlich die Ausgäne nicht anderswo mit = angesprochen haben.

Also wenn du da den Ausgäng direkt ansprichst dann nirgends anders den Ausgang im Programm verwenden.

Nach einer IC Norm, glaube 0113 oder 0117
Muss aber nrütlich zwischen Ausgang und Regelung, falls der Antrieb nicht HArdwaremässig verriegelt werden kann (Schütz etc.) eine Sicherheit.

Also auf doof bei Not Aus mit einen Merker.
U m 0.0 (Dein Ausgang bei dem SFB 42)
U E 0.0 (Eingang, bei 1 kein Not Aus)
= A 0.0 (Dein Ausgang)

Falls du wo im Programm ein = A oder = M verwendest darf es an anderer Stelle nicht nochmals mit S R oder = angesprichen werden.

Du kannst auch die = nich in einen FB oder FC überpringen um sie an anderer Stelle aufzurufen

Springst du über ein = merkt es sich den Zustand.
Also war der Zustand 1 und du überpringst es ohne das es nochmal abgefragt wird bleibt der Zustand 1. Bei 0 halt 0

Ist anfangs etwas kniffelig
Aber wnen du es mal raus hast mit Merkern zu arbeiten und ein Baustein hast um mit den Merkern die E und A aunzusprechen ist es echt sehr leicht.

--

Auch Aufpassen musst du mit VKE
Da habe ich selbst glück da ich das Programmieren mit Assembler gelernt hatte.

Jede Funktion ausser ein U oder Ein SET benötigt einen VKE 1

Dies zieht sich durch den ganzen Baustein durch alle Netzwerke

Also ist im Netzwerk 1 dein VKE = 0

hast du am Anfang des Netzwerk 2 auch weiter den VKE auf 0

Du brauchst dann wieder eine Abfrage auf U oder setzt dir den VKE einfach auf 1

Beginen daher Programme mit
U m 0.0
O m 0.0
...

Und nicht mit

O M 0.0
O M 0.0

Gut aufpassen musst du da auch bei abfragen von Lade und bei Sprüngen.

Vor einen einfachen Laden ohne vorbedingungen immer ein SET

Beispiel
SET
L MW 0
T MW 2


Hoffe das hilft dir.

Dann lkuckst dir noch an wie du selber FB mit DB machen kannst und wie man mit Kommikation umgeht und schon ist gutes Basiswissen da.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ,

erstmal danke für die Hinweise .
Das Grundlegende Wissen ist durch dem Umgang mit S5 wohl da ,

bin nur durch den Aufbau von Step7 und die nötigen Konfigurationen
per Software noch ein wenig unsicher .

Bei S5 fand ich es ein wenig einfacher :))
Werde mal versuchen alles zu löschen und neu zu generieren..
Ergebnis folgt hier dann später.....

Schönes Wochenende noch.....
 
Wo hast du eigentlich wie nachgeschaut ob sich im Instanz-DB was ändert?

Den Instanz-DB musst du nur dann neu erzeugen wenn du am SFB42 was änderst,
da du das aber nicht kannst, reicht auch die einmalige Erzeugung eines Instanz-FB.

Bsp.
Du hattes am Aufruf
CALL SFB42, DB42
...
QLMUP A0.0
QKMDN A0.1
...
stehen,
willst jetzt aber
QLMUP M0.0
QLMDN M0.1
kannst du das einfach hinschreiben, ohne erneuten Aufruf.

Das wichtigste ist, das du pro Aufruf je eine Instanz brauchst.
also
CALL SFB42, DB42 //Regler 1
...
CALL SFB42, DB42 //Regler 2
würde zu undefinierten Zuständen führen.
 
So , nun hab ichs ,

hatte zwar die Ausgänge richtig angegeben aber er steuert die nicht an .

Habe neuen Instanz-DB erzeugt (DB101) und hole mir damit über einen
Aufruf DB101.DBX52.0 und ...52.1 , steuer damit dann die Ausgänge an ,
nun gehts .
Warum es aber erst nicht funktionierte habe ich nicht rausbekommen.

Vielen Dank an alle die sich an meinem Problem beteiligt haben .

MfG Thomas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
super.

ich hatte es schon paarmal das beim Ändern der Parameter eines Call FB aufrufes probleme mit dem DB waren.
Von daher nun immer DB neu erzeuge
 
Zurück
Oben