WinCC: C-Skript an Eingabewert. String in unsigned long

Aerosail

Member
Beiträge
20
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo ihr Experten.

Ich habe das Problem, dass eine Time_Of_Day Variable aus der S7 in WinCC in einem EA-Feld dargestellt werden soll und auch geschrieben werden soll.

Ich habe mir ein Skript geschrieben, dass an dem Ausgabewert hängt und aus der im Variablenhaushalt angelegten vorzeichenlosen 32-Bit-Variable einen String in dem Format

hh:mm:ss

macht.

In diesem Format soll der neue Wert auch eingegeben werden. Dieses muss dann auseinandergedröselt werden und wieder zu jener 32-Bit-Variable kompatibel und dann in die Steuerung geschrieben werden.
Das Skript hänge ich denke ich mal an "Eingabewert", oder? Wie kann die Konvertierung aussehen? Ich stehe da auf dem Schlauch. Strings auslesen ist nicht meine Stärke :/

Vielen Dank für eure Hilfe.
 

Blockmove

Supermoderator und User des Jahres 2019
Teammitglied
Beiträge
10.385
Punkte Reaktionen
3.027
Ich mach das ganze in der Steuerung. Bei mir wird DATE_AND_TIME in einzelne INTs zerlegt und dann an WinCC übergeben
Ist - für mich zumindest - einfacher zu handeln.

Gruß
Dieter
 

Larry Laffer

Supermoderator
Teammitglied
Beiträge
13.148
Punkte Reaktionen
2.745
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,
ich bin jetzt nicht der C-Programmierer und kann dir somit auch kein Script liefern.
Es müßte aber auch in C den Befehl (die Methode) Split geben. Dieser befehl zerlegt einen Quell-String nach einem übergebenen Trenner. Das könnte hier der ":" sein. Zurück geliefert wird dir dann ein Array mit der Anzahl der Teilstrings. Im Teilstring(0) ständen nun die Stunden, in (1) die Minuten und in (2) die Sekunden.
Wenn du die umgekehrte Wandlung schon gemacht hast dann weißt du ja, dass TOD die Anzahl der Millisekunden sind, die seit 0:00 Uhr vergangen sind. Also nimmst du deine Teilstrings und multiplizierst die entsprechend := clng(Teilstring(2))*1000 + clng(Teilstring(1))*60000 + clng(Teilstring(0)) * 3600000.

Eine alternative Zerlegung wäre über die Befehle Left, Mid, Right zu realisieren.

Gruß
Larry
 
OP
A

Aerosail

Member
Beiträge
20
Punkte Reaktionen
0
@blkmove:

Es geht nicht darum, dass es einfacher in der Steuerung ist. Das ist mir auch klar. Es soll ein WinCC an eine Steuerung angebunden werden, an der vorher nur flexible lief. Daher das TOD.
Klar könnt man das hinzuprogrammieren, aber die Problematik soll auch als Referenz von WinCC-Seite mal gelöst werden.

@Larry:
Danke, das mit dem split werd ich mir mal anschauen. Die Bibliotheken von C sind in WinCC leider so gut wie gar nicht dokumentiert.
Die Formatierung von TOD hab ich in der Tat auf dem Schirm.
 

Thomas_v2.1

Well-known member
Beiträge
8.810
Punkte Reaktionen
2.700
Du brauchst dazu keine speziellen WinCC Bibliotheken. Die Funktionen die du brauchst sind alle in der Standard C Library vorhanden. Da es diese schon an die 40 Jahre gibt, ist die auch ausreichend dokumentiert.
 
Oben