WinCC Flexible 2005 Indirekte Adressierung

pylades

Level-2
Beiträge
250
Reaktionspunkte
64
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

ich habe in WinCCFlex folgende Variable deklariert:

Name: Wagen Nummer Index
Adressierung: DB [Index_DB] DBW [Index_DW_Nummer]
DatenTyp: INT
Erfassungsart: Zyklisch fortlaufend
Erfassungszyklus: 100 ms

Bei Klick auf einen Button wird eine Funktion aufgerufen und dieser 2 Parameter übergeben: Function Get_Data( Datenbaustein , Start )

Auszug aus der Funktion:
....
offset=(Start-1)*22
SetValue SmartTags("Index_DB"), Datenbaustein
SetValue SmartTags("Index_DW_Nummer"), offset
....

Anschließend wird per SQL über die oben genannte Variable ein Datensatz aus einer Access-DB gelesen.

Nun mein Problem:
Nach Runtime Start und klick auf einen Button (es sind 150) wird der richtige Datensatz gelesen. Beim 1. klick auf einen anderen Button wird wieder der letzte Datensatz gelesen und erst beim 2. klick kommt der richtige.
Mit "HmiRuntime.Trace Wagen Nummer Index" in der Funktion, ist mir nun aufgefallen das die Variable nach dem 1. klick auf den anderen Button noch nicht aktualisiert wurde. Baue ich nun vor der SQL Abfrage eine Schleife:

For temp = 1 To 10000000
Next

in die Funktion ein, dann klappt alles

Hat jemand von euch eine Idee wie ich sicherstellen kann das die Variable nach Änderung von "Index_DB" und "Index_DW_Nummer" den zugehörigen Wert aus der SPS gelesen hat?

Ich hoffe mich einigermaßen verständlich ausgedrückt zu haben :cool:

pylades
 
Hallo,
werden die gennanten Variablen während der Änderung angezeigt ?
Welche Zeit hast du für den Erfassungszyklus in Wcc-f hinterlegt ?
Welche Erfassungsart hast du für die Variable ? "Zyklisch fortlaufend" oder "Zyklisch bei Verwendung" ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Larry Laffer

werden die gennanten Variablen während der Änderung angezeigt ?
Die Variablen Index_DB und Index_DW_Nummer werden ausschliesslich im Script verwendet und nirgendwo angezeigt (interne Variablen)

Die Variable:
Name: Wagen Nummer Index
Adressierung: DB [Index_DB] DBW [Index_DW_Nummer]
DatenTyp: INT
Erfassungsart: Zyklisch fortlaufend
Erfassungszyklus: 100 ms

wird nach Ausführung der SQL Abfrage in einem EA-Feld angezeigt.

Die anderen beiden Fragen sollten hiermit beantwortet sein.

pylades

 
Du must berücksichtigen, dass deine Variablen nicht im 100ms Zyklus zur SPS geschrieben werden, sondern Kommunikationszeit + 100ms = warscheinlich ca. 1,1 s. Die sicherste Variante, die mit im Moment so einfällt ist, dass du dieselbe SPS-Variable nochmal unter einem anderen Namen anlegst. Sicher übertragen ist deine Variable wenn :
Index_DW_Nummer = Index_DW_Nummer_2
bzw.
Index_DB = Index_DB_2

Eine bessere Idee habe ich nicht ... , aber die funktioniert auf jeden Fall ...:???:
 
Kannste mir das mal etwas genauer erklären? :confused:

Welche variable nochmal anlegen? Ich hab ja nur eine Variable die mit der s7 kommuniziert.

Irgendwie steh ich da auf dem Schlauch :confused:

pylades
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Klar, kein Problem ...
Nehmen wir Index_DW_Nummer. Die verweisst z.B. auf DB10.dbw10.
Jetzt legst du eine 2. Variable an (Index_DW_Nummer_2) die auf die gleiche Speicherstelle verweisst. Diese Variable liesst du auch "Zyklisch fortlaufend" ein, aber du beschreibst sie nicht. Geschrieben wir nur in die erste Variable. Wenn nun die 2. Variable in deiner Applikation der gleichen Wert hat, wie die erste, dann ist der Wert auf jeden Fall in der SPS angekommen, da die 2. Variable den Wert ja nur von dort erhält ...
 
Anschließend wird per SQL über die oben genannte Variable ein Datensatz aus einer Access-DB gelesen.

Hat jemand von euch eine Idee wie ich sicherstellen kann das die Variable nach Änderung von "Index_DB" und "Index_DW_Nummer" den zugehörigen Wert aus der SPS gelesen hat?

Das habe ich noch nicht so richtig verstanden: :confused:

Einmal wird über die Variable Wagen_Nummer_Index ein Wert per SQL aus einem Access-DB gelesen und einmal ein Wert aus der SPS? Wird also zweimal ein Wert gelesen, einmal aus dem Access-DB und einmal aus der SPS?

Gruß Kai
 
Hallo Kai,
so wie ich es verstanden habe kommt hier das Problem zum tragen, dass eine Variable der Visu, wenn in der Visu geändert, noch lange nicht zur SPS übertragen wurde. Pylades möchte aber genau das sicherstellen ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also irgendwie reden wir aneinander vorbei :confused:

Ich habe nur eine Variable die aus der SPS gelesen wird:

Name: Wagen Nummer Index
Adressierung: DB [Index_DB] DBW [Index_DW_Nummer]
DatenTyp: INT
Erfassungsart: Zyklisch fortlaufend
Erfassungszyklus: 100 ms

Wenn ich nun auf einen der 150 Buttons klicke wird meine Funktion aufgerufen:

buttonklickhl9.jpg



bei diesem Button also Datenbaustein 100 und Start 10

...
offset=(Start-1)*22
SetValue SmartTags("Index_DB"), Datenbaustein
SetValue SmartTags("Index_DW_Nummer"), offset
...


Daraus ergibt sich dann:
Index_DB= 100
Index_DW_Nummer= (Start-1)*22 = (10-1)*22 = 198

Das heißt dann für die Variable "Wagen Nummer Index":
Adressierung: DB [Index_DB] DBW [Index_DW_Nummer]

DB100.DBW198

Ich hoffe das es nun etwas verständlicher ist :)

pylades
 
... und was sind Index_DB und Index_DW_Nummer ?
So wie ich das verstehe sind das Variablen, die du an die SPS schickst. Die SPS schickt dir daraufhin den Speicherinhalt, der sich aus dieser Adressierung ergibt ...?
 
Bis hierhin habe ich alles verstanden. Du liest in Deinem Beispiel also den Wert aus dem DB100.DBW198. :)

Doch was passiert dann, was machst Du dann mit dem Wert? Wird der Wert einfach nur in WinCC angezeigt, oder passiert noch etwas anderes? :confused:

Und was hat das nun mit dem Auslesen per SQL und dem Access-DB zu tun? :confused:

Gruß Kai
 
... und was sind Index_DB und Index_DW_Nummer ?
So wie ich das verstehe sind das Variablen, die du an die SPS schickst. Die SPS schickt dir daraufhin den Speicherinhalt, der sich aus dieser Adressierung ergibt ...?

Genau das eben nicht!

über die 2 internen variablen wird der externen Variablen
Name: Wagen Nummer Index
Adressierung: DB [Index_DB] DBW [Index_DW_Nummer]

mitgeteilt welches DW aus welchem DB gelesen werden soll

pylades
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... gut mittlerweile verstanden.
Das lösst das Problem allerdings nicht. Ich kenne die Funktion "Get_Data" nicht. Entscheidend ist aber, dass die SPS eine Zeit "x" benötigt, um zu verstehen, was du haben willst und eine weitere Zeit "x" um dir das gewünschte zu übergeben. Die Daten sind nicht unmittelbar nach deiner Anforderung präsent.
Deswegen mein Vorschlag - für deine Funktion habe ich keine Idee. Oder handelt es sich dabei um eine selbstgeschriebene Funktion ...?
 
Genau Kai

DB100.DBW198 wäre dann die Startadresse einer 22Byte grossen Struct die dann aus der SPS gelesen werden soll
Die Struct besteht aus mehren Werten, u.a. Wagen_Nummer_Index

Über die Variable Wagen_Nummer_Index werden dann per SQL noch einige Infos aus der Access DB gehölt.

Alle diese Werte werden dann auf einem WinCC Bild dargestellt.

Die Funktion ist selbstgestrickt Larry

pylades
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe das so, dass es sich bei der Variablen Wagen_Nummer_Index um eine Multiplex-Variable handelt, die aus den internen Variablen Index_DB und Index_DW_Nummer gebildet wird.

Hier noch einmal ein Bild, wie ich die Adressierung der Variablen verstanden habe. Ist das so richtig? :confused:

Gruß Kai
 

Anhänge

  • RUNTIME_Variablen.jpg
    RUNTIME_Variablen.jpg
    388 KB · Aufrufe: 22
DB100.DBW198 wäre dann die Startadresse einer 22Byte grossen Struct die dann aus der SPS gelesen werden soll
Die Struct besteht aus mehren Werten, u.a. Wagen_Nummer_Index

Über die Variable Wagen_Nummer_Index werden dann per SQL noch einige Infos aus der Access DB gehölt.

Alle diese Werte werden dann auf einem WinCC Bild dargestellt.

Wie wäre es, wenn Du die Variable Wagen_Nummer_Index auf eine Wertänderung überwachst und bei einer Wertänderung ein Script (hier Werte_lesen) aufrufst, dass dann die ganzen Daten aus der SPS und dem Access-DB liest?

Gruß Kai
 

Anhänge

  • RUNTIME_Variablen_Script.jpg
    RUNTIME_Variablen_Script.jpg
    405,9 KB · Aufrufe: 18
Zurück
Oben