Datenbaustein indirekt adressieren

franky22

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

Voraussetzungen: Step7-Basic, CPU1214C
Ich möchte in einer Funktion einen PID-Compact Regler verwenden. Der PID-Compact Regler benötigt einen Datenbaustein, welchen in gerne indirekt als IN/OUT der Funktion übergeben würde. Ist das möglich, wenn ja wie? Welcher Datentyp muss angegeben werden?

Danke im Voraus!

mfG Franky
 
Hi!

Wenn ich dich richtig verstanden habe, sollte folgende Quelle dein Problem lösen (BEISPIEL!)

FUNCTION FC 666 : VOID
TITLE =Beispiel
VERSION : 0.1


VAR_INPUT
DeBe : INT ;
END_VAR
VAR_TEMP
DBNr : INT ;
END_VAR
BEGIN
NETWORK
TITLE =Datenbaustein indirekt aufschlagen

L #DeBe; //Nr. des DBs
T #DBNr;
AUF DB [#DBNr];
END_FUNCTION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
na, bin jetzt nicht der 1200-Profi, vielleicht läuft´s da ja anders.:confused:

Im "normalen" :)cool:) STEP 7 müsste die Temp_Var "DBNr" als WORD angelegt sein, sonst ist das Umkopieren wertlos.
 
Nee, das funktioniert schon mit INT...

ABER: Ich hab überlesen, das es um die 1200er geht. Sorry, vielleicht läufts da anders. Hab keinen Plan von der Kleinen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Indirekte Adressierung mittels 16 oder 32bit Zeiger.

INT=16bit somit alles gut :)

PS: Ich hab der Einfachkeit / Faulheit halber das Beispiel aus nem Pro2 Muster kopiert :cool:;-):lol:
 
Hallo!

Das oben angeführte Beispiel ist in SCL, oder?
Meine CPU mit Firmware 2.0.2 kann leider kein SCL noch, wie könnte ich das in FUP lösen?

Mir geht es rein darum eine Funktion mit einem PI-Regler zu programmieren, welche Ich mehrmals verwenden bzw. aufrufen kann und dazu müsste ich eben dem Reglerbaustein den Datenbaustein als Eingang der Funktion übergeben, denn Ich will die Funktion nicht 10 mal in meinem Projekt stehen haben.

mfG
 
...
Das oben angeführte Beispiel ist in SCL, oder?
Nö, ist AWL (als Quelle, aber außer dem Semikolon am Ende wie original)!


Name des FC sowie Deklaration der Ein-, Ausgänge und Temp-Variablen:
Code:
FUNCTION FC 666 : VOID
TITLE =Beispiel
VERSION : 0.1

 VAR_INPUT
DeBe : INT ; 
END_VAR
VAR_TEMP
DBNr : INT ; 
END_VAR
BEGIN
...

In FUP ein MOVE unter Verschieben:
Code:
...
L #DeBe; //Nr. des DBs 
T #DBNr;
...

und ein OPN unter DB-Aufruf:
Code:
...
AUF DB [#DBNr]; 
...
Ob es bei Deiner Software in genau diesen Ordnern ist, weiß ich jetzt nicht mit Sicherheit. Wenn nicht heißen Sie aber bestimmt ähnlich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab' mir die Sache mal unter TIA Basic V10.5 angesehen.

So wie von Timmy80 vorgeschlagen (vom "großen" Step7), scheint's unter Basic nicht zu gehen.
Zum Einen ist AWL ja gar nicht verfügbar und zum Anderen konnte ich keine Variable (weder in der FC-Schnittstelle noch die PLC-Variablen) auf Block_DB einstellen. Die Fehlermeldung beim Eingeben einer Variablen als DB-Namen konnte mir zwar sagen, daß ein solcher Typ erwartet wird, aber die Hilfe kennt diesen Begriff nicht, so daß ich davon ausgehe, daß dies nicht vorgesehen ist.
Auch einen Befehl zum Öffnen eines DB konnte ich nicht finden.

Vielleicht hilft Dir ja diese Variante mit dem Vergleicher?
Zwar mußt Du dann den PID-Regler mehrfach kopieren, aber es dürfte dann immer nur der gewünschte abgearbeitet werden.
(Nicht so schön, aber Beschwerden ans Big S.)

In KOP:


In FUP:


PS: Als Programmbaustein ist der PID nur einmal aufgeführt, nur als Technologieobjekt erscheint er mehrfach. Wie sich daß auf die S7-1214C auswirkt, kann ich aber auch nicht sagen. Hab' jetzt nur mal kurz ins Programm geschaut.
 
Zurück
Oben