Ist ein Array anlegen unter WinCC 6 für ein C-Script möglich

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich würde gerne eine Prüffunktion anlegen (angestoßen durch eine Button-Betätigung).
Das ganze soll von einem C-Script unter WinCC 6 laufen.
(Wenn es nicht anders geht auch VB-Script)


Ich will ein Array mit ganzen Zahlen füllen, max ca. 100 Einträge
ARRAY[1, 2, 3, 5, 7, 9, 13, 15, 17, 18, 19, ...]

Außerdem hab ich noch 2 binäre Variablen.
ZUSTAND_1
ZUSTAND_2


Mit anstoßen des Scriptes soll immer das gleiche ablaufen.
1. Lese ersten Eintrag aus Array, schreibe Inhalt in eine Hilfsvariable
2. Setze Zustandsvariablen für 5Sek auf 0 / 0 --- 1. von 4 Möglichkeiten
3. Setze Zustandsvariablen für 5Sek auf 0 / 1 --- 2. von 4 Möglichkeiten
4. Setze Zustandsvariablen für 5Sek auf 1 / 0 --- 3. von 4 Möglichkeiten
5. Setze Zustandsvariablen für 5Sek auf 1 / 1 --- 4. von 4 Möglichkeiten

...anschließend
1. Lese nächsten Eintrag ...
2. Setze Zustandsvariablen für 5Sek auf 0 / 0 --- 1. von 4 Möglichkeiten
3. Setze Zustandsvariablen für 5Sek auf 0 / 1 --- 2. von 4 Möglichkeiten
4. Setze Zustandsvariablen für 5Sek auf 1 / 0 --- 3. von 4 Möglichkeiten
5. Setze Zustandsvariablen für 5Sek auf 1 / 1 --- 4. von 4 Möglichkeiten

...bis alle Array-Einträge durchgelaufen sind!

Eine Meldung danach wäre Klasse!


Jetzt zu der Problematik!
Gibt es Arrays in WinCC ???
Kann man so ne Schleife, vor allem wegen dem Zeitbezug realisieren?


Vielleicht hat jemand nen Tip!
Wie gesagt, wenn es nur in VB geht, dann wär es auch in Ordnung!

DANKE für die Hilfe
Gruß hugolee
 
Arrays in WinCC

Hallo Gast,
Gast schrieb:
Gibt es Arrays in WinCC ???
Jein, nach meinem Wissen nicht in C-Scripten verfügbar.
In VBS kann man Arrays definieren, die sind dann vom Datentyp Variant.
Gast schrieb:
Kann man so ne Schleife, vor allem wegen dem Zeitbezug realisieren?
Habe ich das richtig verstanden ?? Du willst in einer Schleife 100x je 5 sec. warten, in Summe also 500 sec ???
Im Prinzip ja, in der Praxis würde man jedoch die für 500 sec. ausbleibende Bildaktualisierung sowie die Möglichkeiten zur Bedienung des HMI-Systems sehr vermissen. Wenn Du das so gemeint hast, solltest Du dein Konzept nochmal neu überdenken.
Wenn nicht so gemeint, solltest Du das etwas genauer erklären, dann habe ich Dich missverstanden.

Gruß
Question_mark
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Array in WinCC

Hallo Gast,
kleiner Nachtrag von mir zum Thema :
Rohdatenvariablen in WinCC sind natürlich auch vom Typ "array of byte", die selbstdefinierten "Strukturtypen" sind auch eine Art von Array of irgendwas, letztere jedoch nicht über einen Index adressierbar.

Gruß
Question_mark
 
Danke erst mal für Deine Antwort!

Das Script soll nur nach der Erstellung des Bildes durchgeführt werden. Also nur zur Kontrolle und keinesfalls dauerhaft!
Also das mit der Performance bzw. Bedienbarkeit ist damit gewährleistet.

Ich hab mir die Schleife mit den abwechselnden Zuständen schon erstellt.
Was noch nicht so ganz funktioniert ist das mit dem Array.
Eigentlich sollten in dem Array alle Schrittnummern, die eine Schrittkette hat (graph7) stehen.
Im Normalfall also 1 bis xx.
Nebenläufige Zweige 100er, 200er ... Zahlen
Und genau das ist mien Problem, denn in meiner Schleife zähle ich immer (bei 1 beginnend) um eins hoch.
Aber es kann ja auch sein, dass es den Schritt 8 gar nicht gibt.

Ist bissel schwierig zu Beschreiben.

Habe eine Schrittkette in WinCC visualisiert. Diese Schrittkette will ich prüfen.
Jede Schrittnummer einlesen (ARRAY)
Die 4 möglichen Zustände S_ACTIVE und SQ_HALTED durchspielen und je Zustand einen Farbumschlag haben.
Dann wieder nächste Schrittnummer einlesen (ARRAY)
...

Wie gesagt die Zustandsschleife geht, aber das gezielte Einlesen der Schrittnummern in Array-Form ist noch der alles entscheidende Punkt.

Mit meiner bisherigen Lösung könnte ich auch leben, aber es ist halt nur ein Kompromiss!

DANKE für Euer Feedback
hugolee
 
Ich würde sagen ein integer Array sollte für deine Zwecke doch ausreichen?

int iArray[99] = {1, 2, 3, 5, 7, 9, 13, 15, 17, 18, 19, ...};

und dass kannst du dann einfach in einer for Schleife durchlaufen

int iIndex = 0;
for( iIndex = 0; iIndex < 100; iIndex++)
{
Wert = iArray[iIndex];
}
 
Zurück
Oben