2 Byte in 1 Word schreiben

bayernburn

Level-1
Beiträge
38
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Liebe Mitglieder des SPS-Forums,

ich benutze WinCC V7.0 SP2 mit Win XP.

Aktuell möchte ich gerne folgendes realisieren:
ich möchte mir in einer Word-Variablen im WinCC via 2er E/A Felder eine Uhrzeit eintragen und zwar in folgendem Sinn. Im High Byte steht der Stundenwert (zb. 10) und im Low Byte steht der Minutenwert (zb 50). Anschließend werte ich die eingetragene Uhrzeit in der SPS aus indem ich die aktuelle Stunde der SPS mit dem Byte des Words vergleiche.
Es soll deshalb 1 Word sein, weil dies ein mehrmals verwendeter Parameter in meinem WinCC Projekt ist und ich diesen mehrmals (nicht hintereinander) beschreibe. Nach dem Beschreiben wird der Wert in die SPS übertragen. Anschließend kann er wieder neu beschrieben werden.
Die Übertragung zur SPS, ist ja schon vorhanden, es müssen sich also diesebzeüglich keine Gedanken gemacht werden.
Für mir ist nur wichtig, dass ich 2 Byte in 1 Word zusammenfassen kann. Von Vorteil wäre es, das ganze in C-Script zu realisieren.

Vielen Dank für eure Lösungsansätze bzw. die Hilfe.

MfG
Bayernburn
 
Hallo,

ich denke, Du solltest dem Bediener im Bild zusätzlich einen Button spendieren. So kann er nach Eingabe/Auswahl der Uhrzeit definiert die Werte zur Verarbeitung freigeben. Das ist für ihn transparenter.

An den Button hängst Du dann das Script, in dem die Bytes zum Word verknüpft werden. Und ich würde im Script auch ein oder mehrere Bits in der SPS setzen. So weiß die Steuerung bzw. auch die entsprechende Stelle im Programm, dass jetzt eine neue Uhrzeit zur Verabeitung vorliegt. Die Bits sollten den Button sperren und nur durch die Steuerung zurückgesetzt werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Mario,

danke für deine Antwort. Die ganze Umsetzung mit einem Button in der Visu und dem speichern bzw. Setzen und Rücksetzen von Bits ist mir klar und auch schon realisiert. Mir fehlt eig. nur noch das C-Script um die beiden Bytes in ein Word zu schreiben. Dies soll im WinCC passieren, damit dann das Word als gazes übertragen wird.
 
Ungefähr so:

Code:
BYTE Stunden;
BYTE Minuten;
WORD Uhrzeit;

Stunden = GetTagByte(Deine_Var);
Minuten = GetTagByte(Deine_Var);
Uhrzeit = (Stunden << 8) | Minuten;

SetTagWord(Deine_Var,Uhrzeit);
"Deine_Var" musst Du durch Deine Variablen ersetzen.
 
Hallo Mario,

habe es mittlerweile selber lösen können und jetzt gerade im Forum gesehen, dass du auch die gleiche Variante vorschlägst. Das gibt mir de Sicherheit, dass ich es auch richtig gemacht habe und es funktioniert.

Danke!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo MRose,

Ich würde dein Skript von oben gerne verwenden, da ich die gleiche Anwendung habe.
Aber ich habe mit VB-Scripten absolut keine Ahnung. Könntest du mir vielleicht sagen wie ich das im VB-Skript in WinCC eingeben muss?

Weil wenn ich deinen Text kopiere und so eingebe, dann kommen bei mir nur Syntaxfehler! Und ich habe keine Ahnung wie ich dies eingeben muss. kannst du mir weiterhelfen?
Oder irgendjemand anderst?

Grüße
David
 
Die Syntaxfehler kommen, weil der Code ein C-Script ist.
In VB-Script kannst Du das so schreiben:
Code:
HMIRuntime.Tags("Deine_Word_Var").Write HMIRuntime.Tags("Deine_Stunde").Read * 256 + HMIRuntime.Tags("Deine_Minute").Read
Falls das nicht funktioniert, dann schreibe uns zunächst, was für eine WinCC Runtime Du verwendest.

Harald
 
Hallo,

Habe es mal versucht aber nicht hinbekommen. Warscheinlich ist es nur ein dummheits-Fehler weil ich gar keine Ahnung von VB-Skript habe :D

Ich habe das wie im Bild eingegeben und habe dann die Prüfung gemacht und er gibt mir die Fehler wie im Bild.

Programmiere mit WinCC Advanced Version 15.1 update 5



VB-Skript.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Na es wird ja mindestens drei mal gemeldet, das die Variable nicht deklariert ist.

Hast du diese Variablen in WinCC angelegt?
Gibt es wirklich eine Variable mit dem symbolischen Namen "DB211.DBW96"?

Ich würde bei der Vergabe von Symbolen unbedingt auf Leerzeichen verzichten
 
Programmiere mit WinCC Advanced Version 15.1 update 5
Mein VBS-Beispielcode ist für WinCC Professional, um das es hier in diesem Thread geht. Damit wir die richtigen Antworten geben können, sehen die Forumsregeln vor, daß der Fragesteller gleich in dem ersten Frage-Beitrag angibt welches System er verwendet ...

In Deinem WinCC Advanced muß das so geschrieben werden:
Code:
SmartTags("Deine_Word_Var") = SmartTags("Deine_Stunde") * 256 + SmartTags("Deine_Minute")
Dazu müssen die verwendeten SmartTags zuvor als HMI-Variable angelegt sein.

Harald
 
Okay, da habe ich den Beitrag nicht richtig gelesen.
Werde das nächste mal dann meine Version sofort mit angeben!

Aufjedenfall hat es funktioniert mit deinem Code, Dankeschön

David
 
Zurück
Oben