LabVIEWForum.de - Daten einer SPS S7-1200 mit SP7 Toolkit auslesen

LabVIEWForum.de

Normale Version: Daten einer SPS S7-1200 mit SP7 Toolkit auslesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

momentan stehe ich vor einem Problem und komme einfach nicht weiter. Hab schon mehrere Seiten durchgestöbert aber bin auf leider keine erfolgreiche Hilfe gestoßen.
Ich versuche euch mal das Problem so gut es geht zu schildern.

Wir haben an unserer Versuchsanlage insgesamt 3 Siemens SPSen S7-1200. Dort werden verschiedene Daten wie z.B. Temperaturen erfasst, sowie Volumenströme oder Drücke aufgezeichnet. Diese Daten werden in spidercontrol visualisiert. Da wir eine Steuerung/Regelung in LabVIEW aufbauen wollen, müssen diese Daten im ersten Schritt in LabVIEW gelesen werden (später kommt dann noch das Schreiben der Daten auf die SPS dazu, so weit bin ich allerdings noch nicht). Die Kommunikation soll mit dem SP7 Toolkit von DATA AHEAD erfolgen. Eine Verbindung zu den SPSen konnte ich auch schon erfolgreich herstellen und mir werden auch ein paar Werte angezeigt, allerdings, so vermute ich, im falschen Format. Laut Dokumentation des Anlagenbauers, kommen die Werte die ich abrufen möchte als Boolean, Integer oder Real von der SPS. Wenn ich nun zum Beispiel die Temperaturen (Integer-Werte) abrufen möchte zeigt es mir in LabVIEW immer nur Ganzzahlen an (z.B. 235, statt 23.5). Auf der gleichen SPS und im gleichen DB sollen Volumenströme (Real-Werte) ausgelesen werden, allerdings wird mir hier 0 angezeigt (wenn ich im SP7 Toolkit Real auswähle) oder 16738 wenn ich Integer auswähle. Hier wäre meine erste Frage, wie bekomme ich diese Zahlen anders visualisiert? Bei einer anderen SPS werden Temperaturen und Drücke als Real-Werte ausgelesen, allerdings werden mir hier Zahlen im Format -2,7386235087E23 dargestellt. Auch hier meine Frage, wie bekomme ich die Zahlen richtig visualisiert.

Ich hoffe ich konnte einige Informationen nennen, falls welche fehlen sollten, bitte entschuldigt, ich bin noch LabVIEW-Anfänger ... Bei Bedarf kann ich auch Screenshots hochladen.

Ich freue mich auf eure Hilfe.

Viele Grüße
Daniel
Hallo Daniel,
Zitat:Beispiel die Temperaturen (Integer-Werte) abrufen möchte zeigt es mir in LabVIEW immer nur Ganzzahlen an (z.B. 235, statt 23.5).
Integer Werte sind doch Ganzzahlenwerte mit positiv und negativen Vorzeichen.

Lade doch mal Dein VI hoch.

Gruß
Freddy
Hallo Daniel,

Zitat:Wenn ich nun zum Beispiel die Temperaturen (Integer-Werte) abrufen möchte zeigt es mir in LabVIEW immer nur Ganzzahlen an (z.B. 235, statt 23.5).
Da könnte dann ein simpler Skalierungsfaktor fehlen, wie z.B. 1/10…

Zitat:Auf der gleichen SPS und im gleichen DB sollen Volumenströme (Real-Werte) ausgelesen werden, allerdings wird mir hier 0 angezeigt (wenn ich im SP7 Toolkit Real auswähle) oder 16738 wenn ich Integer auswähle. Hier wäre meine erste Frage, wie bekomme ich diese Zahlen anders visualisiert?
Indem du sie erstmal richtig ausliest!
16738 = x4162 (Darstellung als U16, dezimal/hexadezimal)
Wenn man jetzt zwei Nullbytes anhängt, um die 4 Bytes eines SGL-Wertes zu erhalten (SPS-REAL!), dann bekommt man den Wert 14.25:
[attachment=61093]
Daher mein Vorschlag: Daten erstmal richtig von der SPS abholen!

Zitat:Bei einer anderen SPS werden Temperaturen und Drücke als Real-Werte ausgelesen, allerdings werden mir hier Zahlen im Format -2,7386235087E23 dargestellt. Auch hier meine Frage, wie bekomme ich die Zahlen richtig visualisiert.
Auch hier vermute ich ein Problem beim korrekten Abholen der Daten von der SPS…
Hallo Daniel,
die VI's, die mitgeliefert werden enthalten die Möglichkeit einzustellen welche Art von Ergebnis Du bekommen möchtest.

Es gibt bei NI ein Forum mit dem Thema DATA AHEAD
Hallo Freddy, hallo Gerd,

vielen Dank für eure schnellen Rückmeldungen. Im Anhang findet Ihr zwei Screenshots der VIs.

Das mit dem Skalierungsfaktor habe ich auch schon ausprobiert. Wenn ich allerdings 1/10 einfüge, schneidet es die Zahl ab und ich erhalte 23, statt 23.5.

Ich vermute wie Gerd schon erwähnt hab, dass ich die Daten der SPS erstmal richtig auslesen muss, allerdings habe ich bisher noch keinen blassen Schimmer wie ich das anstelle ... Habt ihr da vielleicht Tipps?

Viele Grüße
Daniel
Hallo Daniel,

Zitat:Das mit dem Skalierungsfaktor habe ich auch schon ausprobiert. Wenn ich allerdings 1/10 einfüge, schneidet es die Zahl ab und ich erhalte 23, statt 23.5.
Wenn ich einen Integerwert mit 0.1 multipliziere, dann erhalte ich einen Floatwert mitsamt Nachkommastellen...
(28.07.2020 13:04 )Daniel9395 schrieb: [ -> ]Hallo Freddy, hallo Gerd,

vielen Dank für eure schnellen Rückmeldungen. Im Anhang findet Ihr zwei Screenshots der VIs.

Das mit dem Skalierungsfaktor habe ich auch schon ausprobiert. Wenn ich allerdings 1/10 einfüge, schneidet es die Zahl ab und ich erhalte 23, statt 23.5.

Ich vermute wie Gerd schon erwähnt hab, dass ich die Daten der SPS erstmal richtig auslesen muss, allerdings habe ich bisher noch keinen blassen Schimmer wie ich das anstelle ... Habt ihr da vielleicht Tipps?

Viele Grüße
Daniel

Verkehrt ist erst mal, dass du immer blind bei Item-Offset 0 einstellst. Damit fängst du immer beim ersten Byte im Datenbaustein an zu lesen.

Beispiel: Falls in deinem DB zuerst 3 I16 definiert sind und dann 2 REAL Werte, dann wirst du mit Offset 0 nie auf einen grünen Zweig kommen. "Read Real Array" interpretiert dann die ersten 4 Byte im DB als den ersten Real-Wert, die nächsten 4 Bytes als den zweiten REAL-Wert (der sich aber in Realität aus einer Mischung des dritten I16 und des ersten REAL zusammensetzt) usw. usw. usw.

Gruß, Jens
Ihr helft mir gerade unheimlich!

Vielen Dank für den Tipp Gerd, ich habe zuerst durch 10 geteilt, dann hat es die Zahlen immer abgeschnitten... Mit der Multiplikation von 0,1 hat es nun funktioniert. Vielen Dank!

Ich glaube jetzt verstehe ich auch so langsam was ich falsch mache bzw. wie ich der Lösung langsam näher komme ...
In dem einen DB sind zB zuerst 10 Integer Werte definiert und dann 4 Real, dann wieder 2 Integer, 2 Real, 5 Integer, 1 Real, 1 Integer.
In einem anderen DB habe ich zuerst 9 Bool, 1 Integer, 9 Real und nochmal 2 Integer.

Wie komme ich denn nun immer genau zu den Werten die ich gerne abrufen würde?

Bitte entschuldigt, dass ich so planlos bin ... Es wäre super wenn ihr mir noch ein bisschen helfen könntet!

Edit: Leute ich glaube ich hab es eben verstanden. Ich habe nun versucht nach den 10 Integer Werten die 4 Real Werte abzurufen. Ein Integer hat eine Größe von 16 bit, 10 Integer ergeben daher 160 bit, was 20 byte entspricht. Also setze ich als Offset 20 bytes. Und es hat mir nun tatsächlich die richtigen Werte ausgespuckt.
Daher jetzt nochmal die Frage, stimmt meine Vorgehensweise so? Und wie läuft die Nummerierung bei Bool-Werten? Ein Bool hat eine Größe von 1 bit, was gebe ich da als entsprechenden byte-Offset ein?

Vielen Dank für eure Hilfe!
Lass dir am besten einen Screenshot von den Datenbausteinen im TIA-Portal erstellen. Da sollte dann jeweils der Offset in Bytes bei Beginn eines neuen Datentyps mit drinnen stehen.

Wenn die neun Boolean als Array of Bool im DB angelegt sind, dann musst du mit "read bool array" 2 Items auslesen - steht allles in der Hilfe zum Read DB VI. Die SPS bzw. TIA wird bei Beginn eines neuen Datentyps oder einer neuen Variable in den meisten Fällen auf eine gerade Start-Adresse aufrunden.

Was du ebenfalls machen kannst:
Den gesamten DB als "Array of Byte" auslesen und selber in LabVIEW das Parsing durchführen. Das geht sehr einfach, bei einer S7 ist die Speicherreihenfolge dieselbe wie bei LabVIEW, MSB.
Soll heißen, so etwas ist prinzipiell möglich:
[attachment=61098]

Gruß, Jens

Nachtrag: Es ist kontraproduktiv (auch wenn es die API hergibt), mehrere Abfragen an dieselbe SPS parallel zu programmieren. Ersten kann es die SPS nicht, zweitens verhindert die SP7-API, dass diese Anfragen parallel abgearbeitet werden.
Vielen dank für die Info, Jens.

Wie schaffe ich es denn so einen Typ-Eingang wie in deinem Screenshot zu erstellen?

Viele Grüße
Daniel
Seiten: 1 2
Referenz-URLs