WinCC V16 Prof VB Skript in 3-fach unterlagertem Bildfenster

Astralavista

Level-1
Beiträge
799
Reaktionspunkte
112
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen an alle,

ich habe ein Problem bei der Skripterstellung in VB. Speziell geht es mir darum, in den Faceplates der von Siemens bereitgestellten LBP-Bibliothek Benutzeraktionen mittels User messages zu tracken. Grundsätzlich funktioniert mein Skript und die Meldungen werden ausgegeben, ich bekomme allerdings nicht den User Name oder den Ventiltag in meine Meldung übergeben. Es funktioniert nur wenn ich die Strings fix in das Skript eingebe. Da Siemens in den Faceplates überall VB verwendet würde ich gerne dabei bleiben.

Hier mal mein kompletter (funktionierender) Code:
Code:
Sub OnClick(ByVal item)

Dim AuditMessage


Set AuditMessage = HMIRuntime.Alarms(4)
AuditMessage.State = 5 'hmiAlarmStateCome + hmiAlarmStateComment
AuditMessage.UserName = "Test-User 123456"
AuditMessage.ProcessValues(1) = "V0xABC123"

If Parent.Parent.DataSet("txtDoubleConfirmation").Value = 0 Then
    AuditMessage.Comment = "Ventil im Handbetrieb geschlossen"
    AuditMessage.ProcessValues(4) = "geschlossen"
ElseIf Parent.Parent.DataSet("txtDoubleConfirmation").Value = 1 Then
    AuditMessage.Comment = "Ventil im Handbetrieb geöffnet"
    AuditMessage.ProcessValues(4) = "geöffnet"
ElseIf Parent.Parent.DataSet("txtDoubleConfirmation").Value = 2 Then
    AuditMessage.Comment = "Ventil in Modus HAND geschaltet"
    AuditMessage.ProcessValues(4) = "umgeschaltet auf HAND"
ElseIf Parent.Parent.DataSet("txtDoubleConfirmation").Value = 3 Then
    AuditMessage.Comment = "Ventil in Modus AUTO geschaltet"
    AuditMessage.ProcessValues(4) = "umgeschaltet auf AUTO"
ElseIf Parent.Parent.DataSet("txtDoubleConfirmation").Value = 4 Then
    AuditMessage.Comment = "Ventil RESET"
    AuditMessage.ProcessValues(4) = "resettet"
End If

AuditMessage.Create "MyApplication"

SetBitInTag ""&".settingsHMI.cmd", Parent.Parent.DataSet("txtDoubleConfirmation").Value

Parent.Visible = False

End Sub

Ich wollte nun den User Name variabel übergeben und habe folgende Alternativen ausprobiert, welche alle nicht funktionieren.
Komisch ist auch, das ein I/O-Feld, welches ich auf dem Faceplate platziere und mit @CurrentUserName verknüpfe, keinen Wert anzeigt.
Code:
AuditMessage.UserName = SmartTags("@CurrentUserName")
AuditMessage.UserName = HMIRuntime.SmartTags("@CurrentUserName")
AuditMessage.UserName = HMIRuntime.SmartTags("@CurrentUserName").Value

'Umkopieren der Variable @CurrentUserName in eine interne Variable hat nicht funktioniert

'folgender Code hat ebenfalls nicht funktioniert:
Dim CurrentUser
Set CurrentUser = HMIRuntime.Tags("@CurrentUser")
AuditMessage.UserName = CurrentUser

Zweiter Schritt wäre noch den Ventilnamen in die Meldung zu übergeben.
Hier zeigt mir ein I/O-Feld im gleichen Bild den gewünschten Namen an.
Code:
'Funktioniert nicht:
AuditMessage.ProcessValues(1) = Parent.Parent.ScreenItems("ioName").Value
AuditMessage.ProcessValues(1) = SmartTags(".statusHMI.identName")
AuditMessage.ProcessValues(1) = SmartTags(""&".statusHMI.identName")

'Funktioniert, aber fixe Variable, ohne Präfix:
AuditMessage.ProcessValues(1) = HMIRuntime.SmartTags("Workstation2_1_DB_TC11_Instance_V0x2406_statDataVlv.statusHMI.identName").Value

Hat jemand eine Idee und kann mir weiter helfen?

Viele Grüße
 
Zurück
Oben