Auf Daten in Datenbausteinen zugreifen

Earny

Level-1
Beiträge
422
Reaktionspunkte
38
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich will in einem EA-Feld den Wert aus dem DB42.DBD6 anzeigen.
Mir gelingt es nicht, in Flexible irgendeinen Wert aus dem DB42 zu sehen, auch dann nicht, wenn ich das in der Variablenübersicht versuche.
Die Speicher, die in der Symboltabelle eingetragen wurden, können in Flexible eingelesen und der Wert dargestellt werden.
Das müsste doch auch mit Werten aus Datenbausteinen gehen, weil Flexible den Datenbaustein mit seinem symbolischen Namen sieht.
Vermutlich gibt es da einen Trick, den ich als Anfänger nicht kenne.

Gruß
Earny
 
Hallo!

Ich verstehe deine Problematik nicht ganz.

Hast du diesem besagten Speicherbereich eine
Symbolik in deinem DB gegeben?
Dann brauchst du nur eine neue Variable anlegen und bei Symbol das entsprechende Symbol aus deinem Datenbaustein auswählen.

Wenn dieser Speicherbereich keine Symbolik hat dann gehst du auf Adresse und gibst die Adresse ein.

godi
 
Hallo,
es handelt sich um den Instanzdatenbaustein des SFB41. Der DBD6 hat den Datentyp REAL. Ich glaube das ist der Sollwert für den PID-Regler (ist unwichtig).
Wenn ich in Flex bei Variablen in Adresse gehe, werden für den Datenbaustein nur Datenbits DBX angeboten. Es ist nicht möglich, irgendein Datenwort oder Doppelwort auszuwählen.
Wenn ich die Speicherstelle mit Komplettadressierung eingebe, DB42.DBD6 läuft das Feld rot an.
Wenn ich versuche über Symbol zu gehen, dann bekomme ich zwar den symbolischen Namen des Datenbausteins zu sehen, aber ich sehe seine interne Struktur nicht, kann also nichts auswählen.
Die Übernaghme von Variablen aus der globalen Symboltabelle des S7-Projekts funktioniert.
Kann es sich um einen falschen Projektaufbau handeln? Ist Flex nicht richtig in STEP7 integriert?

Gruß
Earny
 
Hallo!

InstanzDB funktioniert nicht und das ist auch gut so!

Dein SFB41 hat eine Schnittstelle -> Das ist die Schnittstelle zu deinem Programm.
Dort legst du dir deine Speicherbereiche an und auf diese kannst du dann zugreifen!

godi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wäre ja umständlich.
Ich habe eine vergleichbare Lösung, bei der ich von VB6.0 aus über den alten OPC-Server Computing (von Siemens) auch auf die Daten in den Instanzdatenbausteinen des SFB41 zugreife. Da gibt es kein Problem.
Muss ich jetzt tatsächlich an der Aufrufschnittstelle außen irgenwelche Speicherstellen an die Ein- und Ausgangsparameter dranprogrammiern, nur um die Werte von Flex aus lesen und schreiben zu können?

Gruß
Earny
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
nachfolgend der VB6.0-Code, der einige Werte aus dem DB42 liest.

Option Explicit
Private Sub Form_Load()
Dim value1 As Variant, states_v1 As Long, rv1 As Long
Dim value2 As Variant, states_v2 As Long, rv2 As Long
Dim value3 As Variant, states_v3 As Long, rv3 As Long
Dim value4 As Variant, states_v4 As Long, rv4 As Long
Dim value5 As Variant, states_v5 As Long, rv5 As Long
Dim value6 As Variant, states_v6 As Long, rv6 As Long
Dim value7 As Variant, states_v7 As Long, rv7 As Long
Dim value8 As Variant, states_v8 As Long, rv8 As Long
Dim value9 As Variant, states_v9 As Long, rv9 As Long
Dim value10 As Variant, states_v10 As Long, rv10 As Long
Dim value11 As Variant, states_v11 As Long, rv11 As Long
Dim value12 As Variant, states_v12 As Long, rv12 As Long
Dim value13 As Variant, states_v13 As Long, rv13 As Long
Dim value14 As Variant, states_v14 As Long, rv14 As Long
Dim value15 As Variant, states_v15 As Long, rv15 As Long
Dim value16 As Variant, states_v16 As Long, rv16 As Long
Dim mybools17(2) As String, myvals17 As Variant, states17 As Variant, rv17 As Long
Dim mybools18(2) As String, myvals18 As Variant, states18 As Variant, rv18 As Long
Dim mybools19(2) As String, myvals19 As Variant, states19 As Variant, rv19 As Long
Dim mybools20(2) As String, myvals20 As Variant, states20 As Variant, rv20 As Long
rv1 = S7Data1.ReadVariable("DB41.DBD6:REAL", value1, states_v1, 0) 'Druck
rv2 = S7Data1.ReadVariable("DB42.DBD6:REAL", value2, states_v2, 0) 'Volumenstrom
rv3 = S7Data1.ReadVariable("DB43.DBD6:REAL", value3, states_v3, 0) 'Füllstand
rv4 = S7Data1.ReadVariable("DB44.DBD6:REAL", value4, states_v4, 0) 'Temperatur
rv5 = S7Data1.ReadVariable("DB41.DBD20:REAL", value5, states_v5, 0) 'Druck
rv6 = S7Data1.ReadVariable("DB41.DBD24:TIME", value6, states_v6, 0) 'Druck
rv7 = S7Data1.ReadVariable("DB41.DBD28:TIME", value7, states_v7, 0) 'Druck
rv8 = S7Data1.ReadVariable("DB44.DBD20:REAL", value8, states_v8, 0) 'Temperatur
rv9 = S7Data1.ReadVariable("DB44.DBD24:TIME", value9, states_v9, 0) 'Temperatur
rv10 = S7Data1.ReadVariable("DB44.DBD28:TIME", value10, states_v10, 0) 'Temperatur
rv11 = S7Data1.ReadVariable("DB43.DBD20:REAL", value11, states_v11, 0) 'Füllstand
rv12 = S7Data1.ReadVariable("DB43.DBD24:TIME", value12, states_v12, 0) 'Füllstand
rv13 = S7Data1.ReadVariable("DB43.DBD28:TIME", value13, states_v13, 0) 'Füllstand
rv14 = S7Data1.ReadVariable("DB42.DBD20:REAL", value14, states_v14, 0) 'Volumenstrom
rv15 = S7Data1.ReadVariable("DB42.DBD24:TIME", value15, states_v15, 0) 'Volumenstrom
rv16 = S7Data1.ReadVariable("DB42.DBD28:TIME", value16, states_v16, 0) 'Volumenstrom
mybools17(0) = "DB41.DBX0.3": mybools17(1) = "DB41.DBX0.4": mybools17(2) = "DB41.DBX0.7"
rv17 = S7Data1.ReadMultiVariables(mybools17, myvals17, states17) 'Druck
mybools18(0) = "DB44.DBX0.3": mybools18(1) = "DB44.DBX0.4": mybools18(2) = "DB44.DBX0.7"
rv18 = S7Data1.ReadMultiVariables(mybools18, myvals18, states18) 'Temperatur
mybools19(0) = "DB43.DBX0.3": mybools19(1) = "DB43.DBX0.4": mybools19(2) = "DB43.DBX0.7"
rv19 = S7Data1.ReadMultiVariables(mybools19, myvals19, states19) 'Füllstand
mybools20(0) = "DB42.DBX0.3": mybools20(1) = "DB42.DBX0.4": mybools20(2) = "DB42.DBX0.7"
rv20 = S7Data1.ReadMultiVariables(mybools20, myvals20, states20) 'Volumenstrom


Die Objekt-Methoden lesen die Werte aus dem Instanzdatenbaustein.
Anschließend, nicht dargestellt, können die "value.." in VB z.B. auf Anzeigeinstrumenten dargestellt werden.
Das mit dem Schreiben in die Speicherstellen des Instanzdatenbausteins funktioniert sinngemäß.

Gruß
Earny
 
Das mit dem Schreiben in die Speicherstellen des Instanzdatenbausteins funktioniert sinngemäß.

Aber dafür bekommst du von mir ein dickes "Pfui". Eine ziemlich kontroverse Diskussion zu dem Thema hatten wir schon, will auch nicht nochmals damit anfangen, kannst ja gerne mal auf die Suche im Forum gehen ;). VB6 ist da natürlich egal, das prüft sowas ja nicht ab, also geht das natürlich, weil dem VB6 egal ist, ob das ein normaler DB oder ein Instanz-DB ist. Mich wundert schon, daß WinCCFlex da drauf achten soll, habs noch nie probiert, da ich Instanz-DB einfach eh nicht mag.
 
Zuletzt bearbeitet:
Hallo Ralle,
wie meinst Du das?
"...ich mag keine Instanz-DBs..."

Ich dachte, man kommt gelegentlich nicht um die Dinger drum herum. Also bringt es nicht viel, sie zu hassen.

Wenn ich beispielsweise, wie im vorliegenden Fall, 4 PID-Regelkreise gleichzeitig betreiben muss, dann nehme ich den SFB41 und lege 4 Instanzdatenbausteine an.
Oder gibt es da eine Alternative?

Gruß
Earny
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mich wundert schon, daß WinCCFlex da drauf achten soll, habs noch nie probiert ....

Ich denke mal, dass es Flex deshalb gelingt, weil hier ein E/A-Feld-Zugriff auf einen IN-Parameter eines FB (SFB) erfolgen soll. Die Eigenschaft dieser Variable ist Flex warscheinlich bekannt - ich habe das auch noch nie probiert ...

Gruß
LL
 
Hallo Larry L.,
hallo Ralle,
es ist offensichtlich so, dass Flexible nicht direkt auf die Ein- und Ausgangsparameter eines Instanzdatenbausteins zugreifen kann, wie dies VB6.0 in Zusammenarbeit mit dem alten Computing-OPC-Server von Siemens schafft.
Ich habe mich damit abgefunden. Möglicherweise gibt es einen Grund für dieses Sicherheitsverhalten von Flexible. Der könnte im Bereich Datenkonsistenz im SFB41.DB42 liegen.
Ich habe das Problem nun so gelöst, wie Ihr es vorgeschlagen habt.
Ich habe an die Aufrufschnittstelle des DB42 weiteren S7-Speicher dranprogrammiert, nur um auf diesen Speicher dann von Flexible aus zugreifen zu können. Als Speicher habe ich einen normalen Datenbaustein genommen.
Der neue Datenbaustein versorgt dann die Eingangsparameter des Instanzdatenbausteins mit den Aktualwerten.

Gruß
Earny
 
Ich habe mich damit abgefunden. Möglicherweise gibt es einen Grund für dieses Sicherheitsverhalten von Flexible. Der könnte im Bereich Datenkonsistenz im SFB41.DB42 liegen.
Ich habe das Problem nun so gelöst, wie Ihr es vorgeschlagen habt.
Ich habe an die Aufrufschnittstelle des DB42 weiteren S7-Speicher dranprogrammiert, nur um auf diesen Speicher dann von Flexible aus zugreifen zu können. Als Speicher habe ich einen normalen Datenbaustein genommen.
Der neue Datenbaustein versorgt dann die Eingangsparameter des Instanzdatenbausteins mit den Aktualwerten.

Wahrscheinlich ist es gar kein Sicherheitsverhalten (so schlau ist Flex - glaube ich - nicht). Wenn du den IN-Parameter nur anzeigen würdest, dann gäbe es sehr wahrscheinlich gar keine Probleme.
Du willst aber auch drauf schreiben. Stell dir hier einfach vor, das ginge und du würdest irgendwann einmal den IN-Parameter benutzen - welchem Herrn soll der SFB (oder auch FB) denn nun gehorchen ? Dem Direkt-Zugriff aus der Visu oder der dran-parametrierten Variablen ?

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Larry L.,
Wahrscheinlich ist es gar kein Sicherheitsverhalten (so schlau ist Flex - glaube ich - nicht). Wenn du den IN-Parameter nur anzeigen würdest, dann gäbe es sehr wahrscheinlich gar keine Probleme.
Du willst aber auch drauf schreiben. Stell dir hier einfach vor, das ginge und du würdest irgendwann einmal den IN-Parameter benutzen - welchem Herrn soll der SFB (oder auch FB) denn nun gehorchen ? Dem Direkt-Zugriff aus der Visu oder der dran-parametrierten Variablen ?

Du hast natürlich Recht. Wenn der Instanz-DB außen beschaltet wird, wäre nicht klar, welcher Schreibbefehl sich durchsetzen soll und man müsste dann noch einen Trigger festlegen, was vermutlich nicht geht.
In meinem Fall liegt der Fall aber anders. Der Instanz-DB wird an den Eingangsparametern, die ich über VB-Computing schreiben will, nicht beschaltet, damit bleibt dem SFB41 nichts anderes übrig, als zu akzeptieren, dass sich ein Eingangsparameter gegenüber dem letzten Zyklus geändert hat.
In Flexible sehe ich weder Parameter noch Lokalvariablen, kann deshalb, nehme ich jetzt mal an, weder lesend noch schreibend drauf zugreifen. Es ist mir jedenfalls noch nicht geglückt (Ich werde es vielleicht nochmal versuchen.).
Die Aussagen der anderen Forenteilnehmer gingen ja in diese Richtung, wobei die Meinung vorherrscht, dass das auch gut so sei.

Gruß
Earny
 
Hallo sehr geehrte Damen und Herren,
ich bin so ein Verbrecher der sehr gerne mit Instanzdaten in der HMI gearbeitet hat, habe mir deswegen hier schon etwas eingefangen.

@Earny wenn du flexible 2007 hast schau doch einmal ob du HF4 hast (zeitweise ging es bei 2007 nicht).

@Larry bei den IN parameter ist es so eine sache. Als Beispiel den SFB4 Ton, da beschreibe ich den IN Parameter PT aus der HMI und lasse ihn am Baustein einfach offen, dann ist der Herrr für mich nur die HMI und diesem Herrn hat der Paramter zu folgen.

Ich wünsche allen einen schönen Sonntag.
 
Hallo Reparatur,
ich habe Flexible 2007, V1.2.00_1.55.0.1
Ich weiß nicht, welchem SP oder HF das entspricht.
Mein Arbeitgeber wird in 1 bis 2 Monaten eine weitere Lizenz von Flexible advanced anschaffen. Dann werde ich die Sache nochmal testen.

Gruß
Earny
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Earny,
welche version das entspricht kann ich jetzt nicht sagen ich liege schon auf dem sofa, endlich...
Ich schaue gerne morgen mal nach, aber vom gefühl ist das nicht HF4, die version kannst du bei Siemens downloaden.

also dann....
 
Zurück
Oben