Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
28.07.2020, 11:29 (Dieser Beitrag wurde zuletzt bearbeitet: 28.07.2020 14:58 von jg.)
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.
RE: Daten einer SPS S7-1200 mit SP7 Toolkit auslesen
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:
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…
RE: Daten einer SPS S7-1200 mit SP7 Toolkit auslesen
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?
RE: Daten einer SPS S7-1200 mit SP7 Toolkit auslesen
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...
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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: Daten einer SPS S7-1200 mit SP7 Toolkit auslesen
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?
RE: Daten einer SPS S7-1200 mit SP7 Toolkit auslesen
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:
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.
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!