WinCC WINCC 7.5 Faceplates

d.schmidtmann

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich hab ein Problem beim Erstellen von Faceplates in WINCC 7.5.
Ich möchte in dem Faceplate Taster nutzen um aus einer Word-Variable ein Bit zu setzen.
Was ich festgestellt habe, ist das nur VBS genutzt werden kann. Ist das richtig?
Wenn ja benötige ich Hilfe beim Schreiben des Skripts. Meine VBS Kenntnisse gehen gegen Null.
hab folgendes Ausprobiert:

Sub OnRButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)
Dim MW204_Test


Set MW204_Test=5
Set MW204_Test = HMIRuntime.Tags("MW204_Test")




End Sub

Hat leider nicht funktioniert. Jemand eine Idee was man da am besten macht?

Gruß Daniel
 
Ich hab jetzt nur WinCC 7.4 offen:

Da sieht das so aus:
Aktion bei Maus links drücken --> C-Script

Code:
[COLOR=#FF0000][FONT=Helvetica][SIZE=2][COLOR=#0000ff]#include[/COLOR]"apdefap.h"[/SIZE][/FONT][/COLOR]
[FONT=Helvetica][SIZE=2][COLOR=#0000ff]void[/COLOR] OnLButtonDown([COLOR=#0000ff]char[/COLOR]* lpszPictureName, [COLOR=#0000ff]char[/COLOR]* lpszObjectName, [COLOR=#0000ff]char[/COLOR]* lpszPropertyName, UINT nFlags, [COLOR=#0000ff]int[/COLOR] x, [COLOR=#0000ff]int[/COLOR] y)[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]{[/SIZE][/FONT]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// WINCC:TAGNAME_SECTION_START[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// syntax: #define TagNameInAction "DMTagName"[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// next TagID : 1[/SIZE][/FONT][/COLOR]
[COLOR=#FF0000][FONT=Helvetica][SIZE=2][COLOR=#0000ff]#define[/COLOR][COLOR=#000000] TAG_0 [/COLOR]"Stations_Tasten_St01"[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// WINCC:TAGNAME_SECTION_END[/SIZE][/FONT][/COLOR]
[FONT=Helvetica][SIZE=2]
[/SIZE][/FONT]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// WINCC:PICNAME_SECTION_START[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// syntax: #define PicNameInAction "PictureName"[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// next PicID : 1[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// WINCC:PICNAME_SECTION_END[/SIZE][/FONT][/COLOR]
[FONT=Helvetica][SIZE=2]
[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]DWORD dwHelp1,dwHelp2;[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]
[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]dwHelp1=GetTagByteWait(TAG_0);[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]dwHelp2=dwHelp1|64;[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]SetTagByteWait(TAG_0,(BYTE)dwHelp2);[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]
[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]}[/SIZE][/FONT]



Aktion bei Maus links loslassen --> C-Script

Code:
[COLOR=#FF0000][FONT=Helvetica][SIZE=2][COLOR=#0000ff]#include[/COLOR]"apdefap.h"[/SIZE][/FONT][/COLOR]
[FONT=Helvetica][SIZE=2][COLOR=#0000ff]void[/COLOR] OnLButtonUp([COLOR=#0000ff]char[/COLOR]* lpszPictureName, [COLOR=#0000ff]char[/COLOR]* lpszObjectName, [COLOR=#0000ff]char[/COLOR]* lpszPropertyName, UINT nFlags, [COLOR=#0000ff]int[/COLOR] x, [COLOR=#0000ff]int[/COLOR] y)[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]{[/SIZE][/FONT]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// WINCC:TAGNAME_SECTION_START[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// syntax: #define TagNameInAction "DMTagName"[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// next TagID : 1[/SIZE][/FONT][/COLOR]
[COLOR=#FF0000][FONT=Helvetica][SIZE=2][COLOR=#0000ff]#define[/COLOR][COLOR=#000000] TAG_0 [/COLOR]"Stations_Tasten_St01"[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// WINCC:TAGNAME_SECTION_END[/SIZE][/FONT][/COLOR]
[FONT=Helvetica][SIZE=2]
[/SIZE][/FONT]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// WINCC:PICNAME_SECTION_START[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// syntax: #define PicNameInAction "PictureName"[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// next PicID : 1[/SIZE][/FONT][/COLOR]
[COLOR=#008080][FONT=Helvetica][SIZE=2]// WINCC:PICNAME_SECTION_END[/SIZE][/FONT][/COLOR]
[FONT=Helvetica][SIZE=2]
[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]DWORD dwHelp1,dwHelp2;[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]
[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]dwHelp1=GetTagByteWait(TAG_0);[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]dwHelp2=dwHelp1&(0xFFFFFFFF^64);[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]SetTagByteWait(TAG_0,(BYTE)dwHelp2);[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]
[/SIZE][/FONT]
[FONT=Helvetica][SIZE=2]}[/SIZE][/FONT]


Meine mich zu erinnern, dass das der Code mal mit einem der Assistenten von WinCC entstand.

Edit:

Ahhh... lange her, habs gefunden
Dynamik-Wizzard --> Bit setzen/rücksetzen

Später kann man auch den Button kopieren und nur die Hex-Werte ändern, sollte sich dazu aber besser eine Tabelle anlegen :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In Faceplates ist nur VBS erlaubt. Das Setzen des Bits 0 ginge z.B. so:
Code:
Dim w
Set w = HMIRuntime.Tags("MW204_Test")
w.Read
w.Value = w.Value Or 1
w.Write

Das Rücksetzen des Bits 0 ginge z.B. so:
Code:
Dim w
Set w = HMIRuntime.Tags("MW204_Test")
w.Read
w.Value = w.Value And NOT 1
w.Write

Für die anderen Bits musst du die entsprechenden anderen Zweierpotenzen einsetzen, also 1, 2, 4, 8, 16 usw.
Solange du nur 16 Bits verwendest geht das so, bei 32 Bits gibt es bei VBS eine Spezialität wenn das letzte Bit gesetzt sein kann.
 
@Thomas_v2.1 Danke,
hat mir geholfen.

'Variablen deklarieren
Dim tag
Dim zw1
Dim bit
Dim Bitwert


'hier Bit angeben
bit=1
'aktuellen Wert aus SPS speichern
zw1= HMIRuntime.Tags("MW204_Test").Read(1)
'Bitwert aus Bit schreiben
If bit=0 Then
bitwert=1
Elseif bit=1 Then
bitwert=2
Elseif bit=2 Then
bitwert=4
Elseif bit=3 Then
bitwert=8
Elseif bit=4 Then
bitwert=16
Elseif bit=5 Then
bitwert=32
Elseif bit=6 Then
bitwert=64
Elseif bit=7 Then
bitwert=128
Elseif bit=8 Then
bitwert=256
Elseif bit=9 Then
bitwert=512
Elseif bit=10 Then
bitwert=1024
Elseif bit=11 Then
bitwert=2048
Elseif bit=12 Then
bitwert=4096
Elseif bit=13 Then
bitwert=8192
Elseif bit=14 Then
bitwert=16384
Elseif bit=15 Then
bitwert=32768
End If


'Abfrage Bit gesetzt, dann überspringen,
'nicht gesetzt, dann setzen
'If zw1 >= bit Then
If zw1 And 2^bit Then
tag=zw1
Else tag=bitwert--zw1
End If


'Übertrage neuen Wert
HMIRuntime.Tags("MW204_Test").write tag

hab mir das als Lösung noch überlegt.
Lade mir damit automatisch den richtigen Wert, passend zu dem eingegebenen Bit.

Gruß Daniel
 
Zurück
Oben