Step 7 Werte per Schrittkette an Anschluss vom Typ ANY schreiben

Jason07

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich bin grade dabei einen Baustein in SCL zuschreiben der Prozesswerte eines Beliebigendatentyps in ein DB schreibt. Der momentan folgende Anschlüsse:
Code:
VAR_INPUT[INDENT]Data: ANY;
Write: BOOL;
PMQ_DB: BLOCK_DB;
[/INDENT]
END_VAR

Per Schrittkette sollen Prozesswerte von z.B. einem Anlogmonitoring Bausteinen an den Data-Anschluss übergeben werden. Die Daten sollen dann in den DB der am PMQ_DB-Anschluss steht geschrieben werden. Da zum Zeitpunkt des Kompilierens noch nicht feststeht wie der DB aussehen wird, muss anhand des Datentyps der am Data-Anschluss steht die Wort Adresse berechnet werden, an welche Stelle im DB geschrieben werden muss. Dies ist ja auch möglich, da ein ANY-Pointer die Informationen über den Datentyp enthält.

Das eigentliche Problem ist nun, wie bekomme ich meine Werte an den ANY-Pointer? In den Schrittketten ist der Datentyp nicht zugelassen. Werte direkt an den Anschluss im CFC schreiben funktioniert logischerweise auch nicht, da der Anschluss ja nur ein Pointer ist und somit nur auf die Adresse einer Variable zeigen kann und selber keinen Wert aufnehmen kann.

Gibt es in Möglichkeit über einen SFC Daten aus einer Schrittkette an den Data-Anschluss zu übergeben? Also Werte eines beliebigen Typs zwischenspeichern um mit dem Data-Pointer darauf zu zeigen, ohne das die Information über den Variablen Typ verloren geht.

Ich würde mich freuen, wenn ihr mir weiterhelfen könnt.
 
Also irgendwie ist dein Vorhaben "seltsam".
Beim Übersetzen der Schrittkette muss zumindest diese Informationen über die Quelldaten haben.
Wenn es Analogwerte sin, dann handelt es meist um irgendwelche elementaren Datentypen (Int, Real).
Diese kannst du in einem Hilfs-DB oder im Instanz-DB zwischenspeichern.
Wenn der Aufbau deines Monitoring-DB bekannt ist, dann kannst du dir dynamisch deine Zeiger (ob nun ANY oder "Normal") zusammenbauen und die Daten z.B. per SFC20 übertragen.
Typlose Variablen oder Templates kennt die S7 nicht.

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke erstmal für die schnelle Antwort.
Also wie der DB aussieht ist zum Zeitpunkt wo ich das Programm kompiliere nicht bekannt. Nochmal näheres zu meinem Vorhaben. Der Nutzer von meinem Baustein kann einen DB schreiben mit bsp folgenden einträgen:
Code:
TYPE
myDB
STRUCT[INDENT]Wert1: REAL;
Wert2: INT;
Wert3: INT;
Wert4: REAL;
[/INDENT]
END_STRUCT;
Dieser DB wird auf meinen Baustein an dem Eingang PMQ_DB angeschlossen. Nun soll mittels einer Schrittkette Werte an den Eingang Data übergeben werden, worin ja mein eigentliches Problem liegt. Also nach dem Moto in Schritt 4 übergebe den Wert von Analogmonitoring 1 an Data. Nun soll in meinem Baustein der Wert in den DB geschrieben werden. Ich ermittel also über den Datentyp von Data und der Anzahl der Wörter die ich schon in den Baustein geschrieben habe, die Adresse an die ich in den DB schreiben muss und kopier die Daten mittels SFC20. Mein Problem ist nur die Daten an den Data-Anschluss zu bekommen. Wenn ich z.B. den Ausgang des Anlogmonitoring im CFC auf Data aufschalte ist es kein Problem, dann bekommt der Data-Anypointer seine Daten über die Verschaltung. Aber gibt es eine Möglichkeit ohne Verschaltung Daten per Schrittkette dem Data-Anypointer zu übergeben. So wie beispielsweise bei Int Anschlüssen, wo ich einfach in Schritt X Sagen kann, "Weise Variable A den Wert aus Variablen B zu." Ich möchte per Schrittkette den Anypointer quasi auf den Ausgang das Analogmoitoring zeigen lassen um die Daten dann weiter zu verarbeiten.

Der Nutzer des Bausteins muss natürlich darauf achten, das er die Daten in der Reihenfolge übergibt wie er sie in seinem DB erwartet.
 
Hallo,
du könntest deinem Baustein einen "Enable"-Eingang verpassen, der dann das weitere Verhalten freigibt ...

Gruß
Larry
 
Wie meinst du das? Ein EN für jeden Datentyp, dass der Baustein manuell gesagt bekommt was zu tun ist? Das Problem ist ja nicht die Weiterverabeitung, sondern die daten vom Monitoring an den Data-Eingang zu bekommen. Ich möchte ungern für jeden Datentyp einen eigenen Eingang anbieten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja ... irgendwie / irgendwas in der Art wirst du machen müssen.
Damit umgehst du dann auch das Problem mit dem "wo soll das hin, was da reinkommt ?".
Du kannst aber auch mit einem Index arbeiten :
Index = 0 : nichts machen
Index = 1 : Variablen nach Wert 1 übergeben
usw.

Gruß
Larry
 
Wo der Wert hinkommt, wird ja durch die Reihenfolge bestimmt. Es geht ja nur um den Typ der Variablen und das diese aus einer Schrittkette beschrieben werden kann. Möglich wäre ein Eingang für jeden Variablentyp und ein Eingang dataType zum selektieren des Eingangs, bsp:
Code:
VAR_INPUT[INDENT]intData: INT;
realData:Real;
...
dataType: INT;
[/INDENT]

END_VAR;
Es würde sich jeder Eingang aus einer Schrittkette beschreiben lassen.
Dachte halt es gebe eine Möglichkeite den Data-Anypointer mit einer Schrittkette auf den Wert des Analogmoitoring zeigen zu lassen. Wäre eine sehr elegant und Universelle Lösung für meine Anwendung gewesen. Schade.
 
Zurück
Oben