WinCC Unified Unified V20 Bildbaustein Vriable aus Schnittstelle in Script verwenden

buffi4711

Level-2
Beiträge
332
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,



ich versuch gerade verzweifelt in einem Bildbaustein die Position einer Linie zu dynamisieren.

Die Werte kommen aus einer PLC UDT die sauber an der Bausteinschnittstelle funktioniert.

Da ich die Position berechnen will versuche ich das mit einem Skript. Da sich aber Garnichts tut habe ich die Formel rausgenommen um zu testen ob der Inhalt der Variable bzw das Ergebnis des Skriptes überhaupt im Grundsatz funktioniert. Tut es aber nicht und ich finde den Fehler nicht. Die kleinen Striche sollen später die Grenzwerte für den Behälterstand anzeigen.

Ich vermute einen Fehler beim Zugriff auf die Variable.
 

Anhänge

  • Screenshot 2025-08-11 150843.png
    Screenshot 2025-08-11 150843.png
    44,1 KB · Aufrufe: 27
  • Screenshot 2025-08-11 151414.png
    Screenshot 2025-08-11 151414.png
    29,2 KB · Aufrufe: 27
Ich vermute einen Fehler beim Zugriff auf die Variable.
Vermutungen sind gut, logging ist besser. Alles andere ist Glaskuge-Business ¯\_(ツ)_/¯
Pack das ganze in ein try..catch und gib per Trace() den Fehler aus, falls ein Fehler auftritt.
Über "Item" und dessen Parent kannst du dir auch gleich ne vernünftige Meldung zusammenbauen wo in welchem Faceplate unter welchem Bildpfad im HMI der Fehler aufgetreten ist.
Ansonsten suchst du dich am Ende tot...

Einen Trigger für die Scriptausführung hast du parametriert?
Den F1-Hilfe Eintrag "Objekteigenschaft über Skript dynamisieren" gelesen?
Was mich irritiert: bei dir fehlt generell das "triggerDataSet" in den Scriptparametern...
Welche projektierte Runtime Version?

Der Variablenname sieht außerdem komisch aus..
Normalerweise sollte dieser etwa so aussehen:
1754932055952.png
Alles andere kann TIA nicht zuordnen & ist im Normalfall ein Tippfehler.
Tipp mal Tags( und drück dann STRG+J (~ ̄▽ ̄)~
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich vermute einen Fehler beim Zugriff auf die Variable.
Das trifft es schon ganz gut, du hast auf jeden fall einen Syntaxfehler bei Tag("").Read(), es fehlt das 's'

Korrekt ist:
Tags("").Read();

(Ob nun dein UDT korrekt benannt ist kann ich leider nicht sagen, da nicht ersichtlich ist wie die entsprechende Variablenschnittstelle lautet.)
 
Hallo batman&ich,

ja das wars, da kann man wieder sehen was so ein kleines "s" ausmacht.

DANKE, manschmal ist man einfach nur Blind
 
Wobei ich das Batch-Script zum Verbinden mit dem Panel aus dem zweiten Link von @LucasMucas ...ausbaufähig finde.
Hab mir dafür mal ein Powershell-Script geschrieben, den Pfad zur .exe musst du vllt. noch anpassen.
Ansonsten einfach den unten stehenden Code als .ps1-Datei speichern und ab damit (~ ̄▽ ̄)~

Code:
# Funktion zur Prüfung auf gültige IP-Adresse
function Is-ValidIPAddress {
    param ([string]$ipAddress)
    return [System.Net.IPAddress]::TryParse($ipAddress, [ref]$null)
}

function Is-ValidIPAddressRegex {
    param ([string]$ipAddress)
    # Regulärer Ausdruck für IPv4-Adressen
    $regex = '^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$'

    return $ipAddress -match $regex
}

# Funktion zur Abfrage einer gültigen und erreichbaren IP-Adresse
function Get-ReachableIPAddress {
    do {
        $ip = Read-Host "Bitte eine gueltige IP-Adresse eingeben"

        if (-not (Is-ValidIPAddressRegex -ipAddress $ip)) {
            Write-Host "Ungueltige IP-Adresse. Bitte erneut versuchen." -ForegroundColor Red
            continue
        }

        if (-not (Test-Connection $ip -Count 2 -Quiet)) {
            Write-Host "IP-Adresse $ip ist nicht erreichbar. Bitte erneut versuchen." -ForegroundColor Red
            continue
        }

        return $ip
    } while ($true)
}

# Hauptablauf
$ipAddress = Get-ReachableIPAddress
Write-Host "IP-Adresse $ipAddress ist gueltig und erreichbar." -ForegroundColor Green

# Optionaler Start von RTILtraceViewer
$antwort = Read-Host "Moechten Sie RTILtraceViewer starten? (ja/nein)"
if ($antwort -match '^(ja|j)$') {
    $programm1 = "C:\Program Files\Siemens\Automation\WinCCUnified\bin\RTILtraceViewer.exe"
    if (Test-Path $programm1) {
        Start-Process -FilePath $programm1
        Write-Host "RTILtraceViewer wurde gestartet: $programm1" -ForegroundColor Green
    } else {
        Write-Host "RTILtraceViewer nicht gefunden: $programm1" -ForegroundColor Red
        read-Host -Prompt "Press any key to continue"
    }
} else {
    Write-Host "RTILtraceViewer wurde nicht gestartet." -ForegroundColor Yellow
}

# Start von RTILtraceTool
$programm2 = "C:\Program Files\Siemens\Automation\WinCCUnified\bin\RTILtraceTool.exe"
if (Test-Path $programm2) {
    Start-Process -FilePath $programm2 -ArgumentList  "-mode receiver -host $ipAddress -tcp"
    Write-Host "RTILtraceTool wurde gestartet: $programm2" -ForegroundColor Green
} else {
    Write-Host "RTILtraceTool nicht gefunden: $programm2" -ForegroundColor Red
    read-Host -Prompt "Press any key to exit"
}
 
Zurück
Oben