TIA Schnell ändernde Werte in Array speichern und in einer Kurvenanzeige darstellen

a.klughardt

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

ich bin neu hier und benötige eure Hilfe.

Ich möchte die Ist- und Sollwerte eines Pneumatik Regler aufnehmen und in einer Kurve in WINCC Runtime anzeigen. Die Sollwerte werden über verschiedene Schaltflächen in WINCC und MOVE Bausteinen in der SPS generiert. Da sich die Istwerte des Reglers sehr schnell ändern (Millisekunden Bereich) müssen die Messwerte irgendwie zwischen gespeichert werden. Ich nutze eine S-1214C und WINCC Runtime auf meinen PC (genaue Infos zu der Hardware und meiner Software findet ihr weiter unten).

Nun zu meinem Problem:
Ich möchte die Istwerte (Eingang IW64) jeden Zyklus über einen OB Weckalarm (5ms) in den Array (Array [0-2000] of Int) schieben und dann in WINCC in einer Kurve anzeigen lassen.
Leider weis ich nicht wie ich das umsetzen kann und bin mit meinen Wissen am Ende.:confused:

Da ich das erste Mal mit einer S-1214 und mit TIA Portal programmiere, quäle ich mich um eine Lösung.
Unter dem Thread Messdaten Speichern in DB finde ich eine Lösung über AWL, diese bekomme ich aber über FUP nicht umgesetzt.

Ich hoffe ihr könnt mir weiterhelfen.

Infos zu meinem System:
- CPU 1214C DC/DC/Rly (6ES7 214-1HG31-0XB0)
- TIA V12 SP1
- WINCC flexible 2008 SP2

Schönen Sonntagnachmittag
 
Hallo zusammen,

so ich bin jetzt soweit, dass ich über einen OB35 mit einer Zykluszeit von 5ms den Analogeneingang IW64 in ein REAL Format umwandle und in ein „Array (0…998) of REAL“ schiebe.
Den Index dafür erstelle ich auch in dem OB35, in jedem Zyklus, also alle 5ms, setze ich den Index dafür um einen nach oben.
Bisher ist soweit alles gut, die Daten werden genauso abgespeichert wie ich mir das gedacht hatte.

Nun aber zu meinen nächsten Problem.
Ich möchte diese 999 Daten aus dem Array in einer Kurvenanzeige in WINCC anzeigen.
Als erstes habe ich in der Variablentabelle in WINCC die benötigten Variablen „IST_WERT“ angelegt:
- „IST_WERT“, diese greift auf den DB 2 DBD 0 mit 999 zu (das oben genannte Array).
- „Kurvenanforderung“ (DB1 DBW12)
- „Kurvenübertragung“ (DB1 DBW14)

Danach habe ich in einem Bild eine neue Kurvenanzeige angelegt. Unter den Eigenschaften der Kurvenanzeige und habe ich bei Kurven die Variable „IST_WERT“ eingetragen.
Zusätzlich noch:
- Linien bei Display
- Massiv als Typ
- 999 Kurvenwerte Grenzlinien
- nein bei Grenzlinien
- Puffer bitgetriggert bei Kurventyp
-bei Quelleneinstellungen unter Kurvenpuffer meine Variable „IST_WERT“, bei Bit „1“, bei Kurvenanforderung die Variable „Kurvenanforderung“ (DB1 DBW12) und bei Kurvenübertragung 1 die Variable „Kurvenübertragung“ (DB1 DBW14)

Was muss ich jetzt noch machen damit die Daten aus dem Array in der Kurvenanzeige angezeigt werden?
Müssen die Variablen Kurvenanforderung“ und bei „Kurvenübertragung“ noch zusätzlich in der Steuerung verarbeitet werden?
Leider hilft mir die Beschreibung unter dem Link „Wie werden bitgetriggerte Kurven (Trendkurven) in WinCC flexible projektiert?“ nicht wirklich weiter. Auch hier im Forum habe ich nichts wirklich hilfreiches gefunden.
Jetzt Frage ich mich erstmal, ist dies überhaupt in dieser Art umsetzbar und wenn ja wie?

Hoffe jemand hat hier einen guten Hinweis für mich

Schönes Wochenende noch
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du so eine bit-getriggerte Kurve anlegst dann stellst du irgendwo auch das Triggerbit ein (ich kann dazu morgen ggf. auch ein paar Screenshots nachliefern).
Dieses Triggerbit bezieht sich auf den genannten Datenbereich "Kurven-Übertragung" und dieses Triggerbit und das für den Datenbereich auch noch zugehörige Sammelbit mußt du im SPS-Programm setzen damit die Visu daraufhin dein Datenarray aus der SPS ausliest und anschließend anzeigt.
Zu dem Datenbereich "Kurven-Übertragung" sollte du aber auch in der Flex-Hilfe etwas nachlesen können ... 8)

Nachsatz:
der von dir eingestellte Link ist dazu übrigens aus meiner Sicht SEHR aufschlussreich.
Was verstehst du davon denn konkret nicht ? Vielleicht sollten wir dort mal ansetzen ...

Gruß
Larry
 
Danke für die Antwort Larry.

Mit fehlt gerade etwas das Verständnis für das Trigger Bit, bevor bei mir der Groschen fällt.

Also zum Thema, wenn ich im SPS Programm die Integrer Variable „Kurvenanforderung“ (DB1 DBW12) beobachte, sehe ich, dass das Bit 1 gesetzt wird. So wie es auch sein soll.
Jetzt habe ich Spaßes halber mal alle Bits in der Variable „Kurvenübertragung“ (DB1 DBW14) auf true gesetzt. Leider hat das auf meine Kurve im WINCC keinen Einfluss.
Muss dafür noch etwas im WINCC eingestellt werden, außer das entsprechende Trigger Bit? Oder liegt es nur an meinem Steuerungsprogramm?
 
Habe jetzt nochmal etwas rum experimentiert und setze alle Bits der Variable „Kurvenübertragung“ auf „true“.
Dies geschieht über einen MOVE Baustein und am Eingang EN eine Abfrage auf eine positive Flanke einer anderen Variablen (zum Testen erstmal). Der Move Baustein schiebt 16#FFFF in die Variable „Kurvenübertragung“.
Wenn ich diese Variable beobachte sehe ich auch, dass das Bit „1“ immer von der Kurve auf „false“ gesetzt wird.

Leider passiert bei meiner Kurvenanzeige gar nichts….:confused:

Trotzdem allen einen schönen Sonntag Abend.
 
Grundsätzlich gilt für dein Vorhaben folgendes :
- du hast in deinem SPS-Programm ein Array mit den Kurvenwerten (z.B. myKurve : Array[1..500] of REAL) - aufpassen : hier gibt es für Flex eine maximale Obergrenze für die Wertezahl - ich meine es wären 900 ... es können aber auch 999 sein - auf keinen Fall mehr.
- du legst dir in Flex dieses Array als Variable (mit den entsprechenden Anzahl von Elemente darin) an
- du projektierst in Flex dein Kurven-Control auf einer Seite und projektierst das entsprechend der Bilder 7 - 10 aus der Beschreibung deines Links.

auf Seiten des SPS-Programms bekommst du in dem Bereich Kurven-Anforderung nun ein Bit gesetzt, wenn die Visu das Bild mit deiner Kurvenanzeige anwählt. Das positionsgleiche Pendant zu diesem Bit in der Kurvenübertragung benötigt die Visu (und das Sammelbit) nun um zu Erkennen, dass es neue Daten gibt. Da ich es im Augenblick nicht nachsehen kann behaupte ich mal, dass es hier auf einen doppelten Flankenwechsel ankommt - das Kurvenbit und das Sammelbit muss irgendwann auch wieder zu 0 werden.

Aber auf jeden Fall wären ein paar Screenshots nicht schlecht um hier weiter zu kommen ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In deinem Fall ist das Triggerbit das Bit 1 aus der Kurven-Übertragung.
Stell in der Variablentabelle das Kurvenarray mal bei Erfassung von "zyklisch fortlaufend" auf "auf Anforderung" um.
 
Die Anzahl des Array habe ich nochmal kontrolliert und überall auf 999 Elemente eingestellt, bezogen auch auf die Warnmeldung im Fenster der Kurven Eigenschaften und auf deinen Hinweis.
Habe das Ganze auch noch mal mit 50 Array Werte getestet, jedoch ohne Unterschied.

Auch habe ich in WINCC die Array Variablen auf die Erfassungsart „Auf Anforderung“ umgestellt.
Ich glaube allerdings, dass der Fehler an meiner Steuerung liegt.
Momentan setzte ich alle 16 Bit der Variable „Kurvenübertragung“ auf „true“. Nach einem Zyklus werden das Bit 1 und das Bit 15 (Sammelbit) durch die HMI auf „false“ gesetzt.
Somit bekommt WINCC doch ein True Signal auf der Variabel „Kurvenübertragung“ und müsste sich die Daten aus dem Array holen.

Was mir bloß gerade aufgefallen ist, das unten im Ausgabefenster folgende Meldung erscheint die mich stutzig macht:
Info: Erforderliche Lizenz: WinCC flexible /Archives for PC-RT --> hoffe nicht das ich mir jetzt ein Lizenzschlüssel fehlt. Allerdings funktionieren alle Funktionen in meiner Runtime bis auf die Kurvenanzeige mit dem Array.
 
Nach einem Zyklus werden das Bit 1 und das Bit 15 (Sammelbit) durch die HMI auf „false“ gesetzt.
Somit bekommt WINCC doch ein True Signal auf der Variabel „Kurvenübertragung“ und müsste sich die Daten aus dem Array holen.
In diesem Fall sogar "geholt haben" ...
Wenn die Visu die signifikanten Bits wieder zurück nimmt dann heißt das definitiv "verstanden und gemacht ...!

Was mir bloß gerade aufgefallen ist, das unten im Ausgabefenster folgende Meldung erscheint die mich stutzig macht:
Info: Erforderliche Lizenz: WinCC flexible /Archives for PC-RT --> hoffe nicht das ich mir jetzt ein Lizenzschlüssel fehlt. Allerdings funktionieren alle Funktionen in meiner Runtime bis auf die Kurvenanzeige mit dem Array.
Diese Meldung hatte ich in Verbindung mit Kurven noch nicht.
Die Frage an sich ist aber richtig : welche Lizenz hast du denn (für die Runtime) überhaupt ...

Gruß
Larry
 
Schönen Guten Abend,

also die 1214 schafft diese Reaktionszeit. Habe zum Testen mal mit einem Geber ein paar Rampen vorgegeben und die sind auch schön im Array drin.

Zu meinen Lizenzen:
Aus der Produkt Familie: SIMATIC HMI
- WINCC Basic (V. 10.5)
- WINCC flexible 2008 Advanced (V. 1.3)
- WINCC Advanced combo (V. 12.0)
- WINCC Advanced Upgrade (V. 11.0)
- WINCC flebible 2008 Runtime (4096) (V. 1.3)

Was mich bloß wundert, das WINCC die Runtime startet und auch alle Funktionen funktionieren. Wenn ich zum Beispiel die Kurvenanzeige mit einer Echtzeit Variable ausstatte, zeigt es mir die Kurve ganz normal an.
Allerdings bezieht sich die fehlende Lizenz „WinCC flexible /Archives for PC-RT“ ja irgendwie auf etwas mit Archiv. Meint Siemens jetzt die Archiv Funktion in WINCC oder als Archiv ein Array von der Steuerung….

Ich glaube aber dieser Thread bringt es auf den Punkt „Archives für PC auf Winccflexible?“

na tolle Wolle Siemens….
 
Naja ...
Bei den von dir aufgelisteten Lizenzen sehe ich im Moment nicht, dass dir für die Kurvendarstellung eine fehlt.
Zu der Archiv-Geschichte weiß ich gerade nichts. Vielleicht einfach mal das Projekt re-organisieren und/oder temporäre Dateien löschen (falls nichts schon geschehen).
Einzig : wenn irgend etwas in den Einstellungen noch auf ein Kurven-Archiv hinweisst ... was ja dafür sprechen würde, dass dein Trigger zwar von der Visu angenommen wird aber keine Darstellung erfolgt.

Zu deiner Kurve :
In welchem Wertebereich bewegen sich die Werte in deinem Array (Betragsmäßig) ?
Hast du an der X-Achse der Kurve die gleiche Anzahl von Werte wie im Kurvenarray ?
Setz diese Anzahl bitte mal (testweise) auf 900 herunter. Ich habe das etwas in Erinnerung, finde aber den Verweis dazu nicht mehr.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das mit der Lizenz hat sich geklärt….
Ich hatte durch das rum experimentieren 2 Variablen in das Variablenarchiv eingetragen und vergessen diese wieder raus zunehmen. Jetzt sind sie gelöscht und es erscheint auch keine Info Meldung mehr.
Das Leben kann manchmal so einfach sein, wenn man weis was man macht…:oops:

Nun wieder zum eigentlichen Problem, der Kurven Darstellung.

Ich habe den Array in der Steuerung auf 0…99 geändert und in WINCC die Variablen auf 100 Array Elemente, in der X-Achse auf 100, Modus Werte und in den Kurven Eigenschaften 100 Kurvenwerte eingetragen.
Ich habe auch extra noch einmal darauf geachtet, dass in der Steuerung, das Array wirklich nur mit 100 Werten beschrieben wird. Außerdem ist das Schreiben verriegelt, wenn die Variable Kurvenanforderung ansteht. Beim Aufruf der Kurvenanzeige wird die Variable Kurvenübertragung auch wieder auf „false“ gesetzt.
Leider ohne Erfolg.

Mir stellen sich noch zwei Verständnis Fragen:confused::

1. Der Ablauf der Triggerung


  1. In WINCC wird das Bild mit der Kurve geöffnet, das Bit der Kurvenanforderung wird „True“ gesetzt
  2. Solange die Anforderung ansteht, wird das beschreiben des Array verriegelt
  3. Die Steuerung setzt in der Variable Kurvenübertragung das Kurvenbit und das Sammelbit auf „True“
  4. Die HMI setzt die Variable Kurvenübertragung wieder auf „false“,wenn es sich eigentlich die Daten geholt hat
--> Bis hierher funktioniert bei mir alles
5. Theoretisch sollte jetzt die Kurve in WINCC angezeigt werden.


Ist der Ablauf so richtig oder habe ich noch einen Verständnis Fehler über den Ablauf?


2. Ich traue der Variablen in WINCC noch nicht.

Dort habe ich folgendes für die Array Variable eingetragen:
Name: Messwert_IST --> das ist eigentlich Bockwurst, wie ich die Variable nenne
Verbindung: Verbindung_1 --> sollte richtig sein, gibt ja nur die eine Verbindung
Datentyp: Real --> sollte auch passen, da in meinem Array Real Formate abgelegt werden
Adresse: DB2.DBD0 --> hier bin ich mir überhaupt nicht sicher ob das passt
Array Elemente: 100 --> passt auch zu dem Rest, wie oben beschrieben
Der Rest ist grau hinterlegt.

Meiner Meinung nach sollten diese Angaben passen, aber ich weis so langsam nicht mehr weiter.

Vielen Dank für die Hilfe bisher
 
Zuletzt bearbeitet:
Das mit der Lizenz hat sich geklärt….
Ich hatte durch das rum experimentieren 2 Variablen in das Variablenarchiv eingetragen und vergessen diese wieder raus zunehmen. Jetzt sind sie gelöscht und es erscheint auch keine Info Meldung mehr.
Das Leben kann manchmal so einfach sein, wenn man weis was man macht…:oops:
Schön ... dann ist das schon mnal erledigt ... ;)

1. Der Ablauf der Triggerung


  1. In WINCC wird das Bild mit der Kurve geöffnet, das Bit der Kurvenanforderung wird „True“ gesetzt
  2. Solange die Anforderung ansteht, wird das beschreiben des Array verriegelt
  3. Die Steuerung setzt in der Variable Kurvenübertragung das Kurvenbit und das Sammelbit auf „True“
  4. Die HMI setzt die Variable Kurvenübertragung wieder auf „false“,wenn es sich eigentlich die Daten geholt hat
--> Bis hierher funktioniert bei mir alles
5. Theoretisch sollte jetzt die Kurve in WINCC angezeigt werden.

Ist der Ablauf so richtig oder habe ich noch einen Verständnis Fehler über den Ablauf?

Ich würde sagen : "fast" ...
Die Kurvenanforderung besagt eigentlich nur, dass auf der Visu die Kurvenanzeige aktiv ist.
Ist diese nicht aktiv brauchst du den Trigger nicht zu setzen denn dann zeigt ja auch nichts die Kurve(n) an.
Ich setze für gewöhnlich mit der steigenden Flanke des Kurvenanforderungs-Bits den Trigger auch, da in diesem Fall sehr wahrscheinlich noch keine sinnvollen Daten in der Kurvenanzeige sind ... und wer weiß wann der eigentliche Trigger kommt ... 8)


2. Ich traue der Variablen in WINCC noch nicht.

Dort habe ich folgendes für die Array Variable eingetragen:
Name: Messwert_IST --> das ist eigentlich Bockwurst, wie ich die Variable nenne
Verbindung: Verbindung_1 --> sollte richtig sein, gibt ja nur die eine Verbindung
Datentyp: Real --> sollte auch passen, da in meinem Array Real Formate abgelegt werden
Adresse: DB2.DBD0 --> hier bin ich mir überhaupt nicht sicher ob das passt
Array Elemente: 100 --> passt auch zu dem Rest, wie oben beschrieben
Der Rest ist grau hinterlegt.

Meiner Meinung nach sollten diese Angaben passen, aber ich weis so langsam nicht mehr weiter.
Ich zweifele auch ein bißchen an deinem Variablenarray denn der eigentlich Handshake Kurvenanzeige-SPS scheint ja schonmal zu funktionieren.
Der Variablenname ist Banane - da hast du Recht. Wenn du aber eine symbolische Anbindung Visu-SPS hast (wovon ich mal ausgehe) würde beim Anlegen der Variablen hier der Name des Arrays aus dem DB stehen. Automatisch würde dann auch die Adresse der ersten Arrayvariablen hinterlegt werden (und natürlich unter Anzahl die Array-Dimensionierung).
Hast du das manuell angelegt gilt das selbe - nur mußt du dich nun selbst darum kümmern das es passt. Steht dein Kurvenarray also im DB2 und fängt dein Kurvenarray mit DBD0 an ?

Wenn ja dann zu dem Inhalt desselben :
- Stehen da Werte drin ? Zur Not schreib einfach mal "per Hand" ein paar anzeigbare Werte da rein ...
- Passen die Werte zu den Skalierungen der Y-Achse, die du für den Bezug der Kurvendarstellung gewählt hast ? Wenn sie größer oder kleiner sind dann würden sie nämlich auch nicht angezeigt werden ...

Gruß
Larry
 
ich sehe bei einem Screenshot schonmal nen Fehler.

Wie kann ein Array mit 999 Werten nur 4 Byte lang sein? (Istwert) und danach direkt ein Array mit 999 Werten ab Byte 4 kommen?
Denke Du solltest nochmal prüfen ob diese (vermutlich manuell eingetragenen Werte) stimmen.

Stell mal auf zyklisch bei verwendung und zeige die variable über ein E/A Feld dar, dann siehst Du schonmal ob da überhaupt werte ankommen.
(Natürlich nicht alle Felder, aber die ersten fünf oder so.

Grüße

Marcel
 
Da hast du Recht. Darauf hatte ich komplett nicht geachtet.
Wobei das m.E. aber trotzdem keinen Einfluß auf die Anzeige der Kurve haben sollte.
Ich tippe immer noch darauf, dass :
- die Adressen (des Arrays) nicht stimmen
- keine oder falsche Werte da drin stehen ...

Gruß
Larry
 
Zurück
Oben