WinCC WinCC 7.3 - Script funktioniert auf Server aber nicht auf Clients

Medium

Level-1
Beiträge
66
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Aloah!

Ich habe folgendes VBScript in all meinen Anlagenbildern:
Code:
Sub OnOpen()
    On Error Resume Next
    Dim screenIdent
    screenIdent = Left(Parent.ObjectName, 2)
    Dim titel 
    Set titel = Parent.Parent.ScreenItems(screenIdent + "Kopf").Screen.ScreenItems("Titeltext")
    titel.Text = "ILD " & ScreenItems("TankName").Text
    
End Sub
Sinn ist es den Tanknamen des Tanks auf dem Bild (es ist immer nur einer) in das Titelfeld im Kopf zu schreiben, so dass man immer den richtigen Titel hat, egal wie das Bild geöffnet wurde.

Mein Startscreen hat 3 Bildfenster: Kopf, Hauptbild, Anwahlleiste. Alle Namen der Bildfenster beginnen mit einem 2-Zeichen langen Präfix, dass besagt auf welchem Bildschirm der Bereich ist (Multi-Monitor Betrieb). So beginnen die Namen aller Bildfenster im Monitor links oben mit dem Präfix (screenIdent) "LO". Deshalb der Klimmzug mit dem screenIdent, damit der Titel auch in den korrekten Kopf kommt.

Dieses Script funktioniert auf dem Server ohne Probleme. Auf den Clients hingegen NICHT. Die Clients haben ihre Bilder NICHT lokal liegen, so dass ich sicher bin, dass diese brav vom Server abgeholt werden. (Änderungsladen wirkt sich auch korrekt auf den Clients aus.) Ich habe das Problem noch mit einem anderen Script:

Code:
Function Text_Trigger(ByVal Item)
    Dim VA : Set VA = HMIRuntime.SmartTags(Item.Text)
    Dim Hand : Hand = 1
    Dim v : v = VA.Value
    If (v And Hand) = Hand Then 
        ScreenItems("Overlay").Visible = False
    Else
        ScreenItems("Overlay").Visible = True
    End If
End Function
Hierbei wird eine Variable, die von einem anderen Script in das Textfeld geschrieben wird, ausgewertet, die anzeigt ob ein Ventil im Hand-Modus ist oder nicht. Abhängig davon soll ein einfaches Quadrat angezeigt werden oder nicht. Da die Variable immer eine andere sein kann, konnte ich das nicht über einen einfachen Dynamikdialog lösen. Auch dieses Script läuft auf dem Server ohne Probleme, aber nicht auf den Clients.

Ich kann mir da so GAR keinen Reim drauf machen. Wo könnte hier das Problem liegen? Bei Bedarf bitte reichlich Rückfragen stellen! Ich weiß, dass es manchmal schwer ist alles wichtige zu beschreiben wenn man gerade selbst so tief drin hängt.

Besten Dank im Voraus für eure Ideen!
 
Kleines Update: Das Problem mit dem Titel ist gelöst. Der gezeigte Code funktioniert. Er war nur noch nicht in alle Bilder kopiert... ups :roll:

Das zweite gezeigte Script bleibt aber weiterhin betroffen, auch auf die beschriebene Weise!
 
Ich werd verrückt. Die Funktion kannte ich noch gar nicht! Damit wird vieeeles einfacher! Ich bin vermutlich am Freitag wieder beim Kunden, da schauen ich dann mal was genau da los ist. Danke für's Nase drauf stoßen!
 
Durch das Trace-Protokoll und etwas Google bin ich zur Lösung gekommen. Zwei "Fehler":

1) SmartTags() sind nicht für diesen Zweck gedacht. Es geht zwar, aber die Variable wird darüber nur auf dem Server gefunden. Auf dem Client nicht. Mit Tags() hingegen geht es auf beiden! (Gut, dass das so nirgends in den Dokus erwähnt wird...)

2) Wertabfrage via .Value funktioniert nur auf dem Server. Auf dem Client MUSS aktiv ein .Read erfolgen, was auch auf dem Server funktioniert. Auch nirgends dokumentiert. Grrr.

Ergo: Alle SmartTags() zu Tags(), und alle .Value zu .Read bzw. .Write geändert, und nun läuft alles auf Server und Clients genau gleich. Danke nochmals für den wirklich hilfreichen Nasenstupser!
 
Zurück
Oben