TIA Bild öffnen über Variable

Tausch' mal in meinem Projekt nur das TP900 gegen Dein TP1900 aus und teste das dann auf Deinem Panel.
Wenn das auch nicht funktioniert ist wahrscheinlich wirklich was am Dateisystem anders.
Da kann ich dann aber ohne reale Hardware leider auch nicht mehr weiter helfen.


PS:
Das Projekt mit TP1900
 

Anhänge

Also es funktioniert teilweise auf dem Panel.
Sind die Dateien auch wirklich angelegt?
Dann weißt Du zumindest mal, dass auch beim TP1900 mit dem WinCE 2013 die Dateibefehle noch die Gleichen sind.
Und Du hast eine Basis zum Weiterarbeiten.



mal erstellt er alle Seiten und manchmal nicht ...
Wie bereits mehrfach gesagt, ist das Erstellen der csv-Dateien ziemlich Fokus-empfindlich.
Der Fokus wechselt aber durch das Bild-anzeigen mehrfach zwischen Permanent- und Standardbereich.
Da wundert es mich nicht, wenn der Fokuswechsel u.U. dem Script mal nicht hinterher kommt.

Das Erstellen kannst Du ja (wie ebenfalls bereits erwähnt) auch über die Simu machen, wenn es da zuverlässiger funktioniert und dann an die richtige Stelle im Panel kopieren.




Was müsste ich den machen wenn ich die Excel Tabellen am Rechner erstelle und sie nur Durchsuchen lassen möchte.
Dann würde ich sie Händisch anlegen oder ändern und das ganze so machen
Weil Du bereits mehrfach danach gefragt hast, dann wähle lieber diese Variante:
Code:
Sub ScreenSel(ByRef ObjectName)

    ObjectName = LCase(Replace(ObjectName," ", ""))
    
    If    ObjectName = "motor1" _
       Or ObjectName = "motor2" _
    Then
        ActivateScreen "Motor_1", 0
    
    ElseIf    ObjectName = "motor3" _
           Or ObjectName = "motor4" _
    Then
        ActivateScreen "Motor_3", 0
    
    Else
        '...
    End If

End Sub
(ungetestet)
oder was Vergleichbares mit Select Case?
und geh' damit jeglichen Dateibefehlen komplett aus dem Weg.
 
Wenn ich Zeit habe Probier ich nochmal rum

um auf das mit dem Select Case zurückzukommen habe ich das richtig verstanden das es Beispielsweise so lauten müsste :
Bildnamen Und Inhalt: Pumpstation (P101,P102,P103), Brunnen (P15,P16,P17),Becken (S170,S180)

If ObjectName = P101
Or Object Name = P102
Or Obejct Name = P103

Then ActivateScreen "Pumpstation"

Else If Obeject Name = P15

und so weiter ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
um auf das mit dem Select Case zurückzukommen habe ich das richtig verstanden das es Beispielsweise so lauten müsste :
Bildnamen Und Inhalt: Pumpstation (P101,P102,P103), Brunnen (P15,P16,P17),Becken (S170,S180)
Ja.
Das Beispiel ist eine allerdings eine IF-Verzweigung, kein Case Select. Letzteres wäre eine Alternative, bei der man jedoch standardmäßig nur einen Begriff je Case angeben kann. Deswegen würde ich hier das IF bevorzugen.

Von der Sache her, kannst Du dort jeglichen möglichen Suchbegriff des Benutzers eintragen, auf den reagiert werden soll:
Code:
If ObjectName = "Dingsbums" Then 
    ActivateScreen "Pumpstation"[COLOR=#00FF00][B], 0[/B][/COLOR]
End If
Und in diesem Beispiel bitte das ", 0" (= Objekt der Seite, das angewählt wird) am Ende von ActivateScreen nicht vergessen!

Die jeweilige richtige Syntax kannst Du u.a. der Hilfe F1 entnehmen.




Code:
If    ObjectName = "P101" [COLOR=#00FF00][B]_[/B][/COLOR]
   Or ObjectName = "P102" [COLOR=#00FF00][B]_[/B][/COLOR]
   Or ObejctName = "P103" [COLOR=#00FF00][B]_[/B][/COLOR]
 [COLOR=#00FF00][B]_[/B][/COLOR]
   Then 
        ActivateScreen [COLOR=#333333][FONT=Courier][I]"Pumpstation", 0
[/I][/FONT][/COLOR]
ElseIf ObjectName = "P15" [COLOR=#00FF00][B]_[/B][/COLOR]
        ...
und so weiter ?
Ja.
Aber wenn eine Befehlszeile über mehrere Zeilen gehen soll, z.B. damit man die einzelnen Verknüpfungen besser lesen kann, dann muss sie unbedingt mit " _" (Leerzeichen + Unterstrich) umgebrochen werden (dahinter darf auch kein Kommentar mehr sein)! Auch bei enthaltenen Leerzeilen! Sonst bekommst Du einen Syntax-Fehler.

Bei IF z.B. gehören jeweils zu einer Zeile:
Code:
IF [I]1. Bedingung[/I] THEN

     [I]If-Befehl(e)[/I]

ELSEIF [I]2. Bedingung[/I] THEN

     [I]ElseIf-Befehl[/I][I](e)[/I]

ELSE

     [I]Else-Befehl[/I][I](e)[/I]

END IF
vbscript bringt Dir Syntax-Fehler, wenn Du das wild durcheinander würfelst.
Und die Suchbegriffe sind allesamt Strings und gehören deswegen in Anführungszeichen!
Auch willkürlich eingefügte Leerzeichen in Variablennamen u.ä. sind nicht gerade hilfreich, ein korrekt funktionierendes VBScript zu erhalten.



Wie Du siehst, ist die korrekte Syntax noch ein riesen Problem bei Dir, wenn Du die Scripte an Deine Bedürfnisse anpasst.
;)
 
Zuletzt bearbeitet:
Reicht dann nicht auch sowas in der Art:
Code:
Sub ScreenSel(ByRef ScreenName)

    ScreenName = LCase(Replace(ScreenName," ", ""))
    
    If    ScreenName = "motor1" _
       Or ScreenName = "motor2" _
    Then
        ActivateScreen "Motor_1", 0
    
    ElseIf    ScreenName = "motor3" _
           Or ScreenName = "motor4" _
    Then
        ActivateScreen "Motor_3", 0
    
    Else
        '...
    End If

End Sub
(ungetestet)
oder was Vergleichbares mit Select Case?

Hier eine alternative Variante ohne "sichtbare" Oder-Verknüpfung und somit ohne Verteilung auf mehrere Zeilen (wozu auch, wenn man die einzelnen Zeilen sowieso kommentarfrei halten muss? ;)):

Code:
Sub ScreenSel(ByRef ScreenName)

    ScreenName = " " & LCase(Replace(ScreenName," ", "")) & " "
    
    If InStr(" motor1 motor2 ", ScreenName) Then
        
        ActivateScreen "Motor_1", 0
    
    ElseIf InStr(" motor3 motor4 ", ScreenName) Then
        
        ActivateScreen "Motor_3", 0
    
    Else
        '...
    End If

End Sub
Wichtig ist dabei etwas Disziplin.
1. Je 1 Leerzeichen am Anfang und am Ende eines SuchStrings (z.B. " motor1 motor2 ") oder SuchBegriffs (z.B. " motor1 " oder " motor2 ").
2. Keine Leerzeichen innerhalb der SuchBegriffe ausser den in 1. genannten.
3. Die Begriffe im SuchString werden jeweils durch 1 Leerzeichen getrennt.

Bei den SuchBegriffen entfällt 3. und für 1. und 2. sorgt schon die ProgrammZeile ScreenName = " " & LCase(Replace(ScreenName," ", "")) & " ".
Soll der Vergleich "case sensitive" sein, so muss hier LCase entfallen.

Nur in den SuchStrings muss man selbst darauf achten, dass 1. und 2. und 3. erfüllt werden und ... wenn der Vergleich nicht "case sensitive" sein soll, dass 4. keine GrossBuchstaben verwendet werden.
Die SuchStrings lassen sich leicht auf mehrere SuchBegriffe erweitern - oder auf 1 zusammenschrumpfen.

 
So heute hatte ich mal wieder Zeit mich damit zu beschäftigen.

Ich habe jetzt mal die Variante von Heinileine probiert.

Das ganze funktioniert auch wunderbar.

Jetzt habe ich nur ein ganz simples Problem, ich habe mir ein Popupfenster mit einem E/A Feld gebastelt. Dort ist eine Interne Such Variable hinterlegt. Als Ereignis ist Eingabeende hinterlegt dort wird dann mein such Script geöffnet.
Jedoch funktioniert das beim ersten mal immer nicht. Gebe ich den Suchbegriff ein, steht er im E/A Fenster und nichts passiert. Lösche ich alles nochmal raus kann ich meinen Suchbegriff nicht schreiben zumindest wird mir immer nur ein Buchstabe im E/A Feld angezeigt. Jedoch funktioniert dann die Suche. Kennt jemand das Phänomen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

älterer Thread, aber ich würde ihn noch einmal gerne hoch holen.
Ich will ein bestimmtes Bild öffnen, wenn der Notaus kommt.
Habe den Lösungsansatz von Harald (Seite 1) ausprobiert. Hat auch super funktioniert. ABER, kann mir bitte jemand folgendes erklären?
Habe im HMI_DB eine bool Variable angelegt "notaus" (HMI_DB.notaus).
Dann interne HMI Variable HMI_DB_notaus -> Eigenschaften -> Ereignisse -> Wertänderung -> AktiviereBild -> Bildname: Notaus
Das wollte nicht funktionieren und mein Bild einblenden wenn notaus=TRUE.
(habe es auch mit "notaus" Variable vom Typ Int probiert und dann AktiviereBildMitNummer. Das selbe hier, es wollte nicht funktionieren.)
Habe mir dann ein E/A-Feld auf dem Bild angelegt, um mir den Inhalt der Variable "notaus" anzeigen zu lassen.
Und zack, auf einmal hat es funktioniert wie es sollte.
Ich erinnere mich, dass ich vor einiger Zeit genau das selbe hatte. Nur erinnere ich mich nicht mehr genau wobei.
Als ich mir die Variable über ein E/A-Feld ausgeben lassen wollte, ging auf einmal alles wie es sollte.
Meine frage jetzt, woran liegt das?

Danke & Grüße
fopsn
 
Meine frage jetzt, woran liegt das?
Das liegt daran, dass standardmäßig nur Variablen aktualisiert werden, die auf dem aktuell angezeigten Bild benötigt werden.
Wenn Deine Not-Aus-Variable dort nicht benötigt wird, bekommt das HMI die Wertänderung in der PLC gar nicht mit und reagiert dementsprechend auch nicht darauf.

Eine Möglichkeit ist also die (z.B. versteckte) Verwendung der Variable im Bild, bei Dir das EA-Feld.
Da Du das dann aber auf jedes Bild bringen müsstest, ist hier die Umstellung der Aktualisierungsart der Variable von "Zyklisch im Betrieb" (Standard) auf "Zyklisch fortlaufend" (ständig, auch wenn nicht im Bild) von Vorteil.
Dann bekommt das HMI eine Änderung auch dann mit, wenn die Variable nicht auf dem aktuell angezeigten Bild verwendet wird. Dafür wird aber die Kommunikation zwischen HMI und PLC damit zusätzlich belastet.
 
Hi,

älterer Thread, aber ich würde ihn noch einmal gerne hoch holen.
Ich will ein bestimmtes Bild öffnen, wenn der Notaus kommt.
Habe den Lösungsansatz von Harald (Seite 1) ausprobiert. Hat auch super funktioniert. ABER, kann mir bitte jemand folgendes erklären?
Habe im HMI_DB eine bool Variable angelegt "notaus" (HMI_DB.notaus).
Dann interne HMI Variable HMI_DB_notaus -> Eigenschaften -> Ereignisse -> Wertänderung -> AktiviereBild -> Bildname: Notaus
Das wollte nicht funktionieren und mein Bild einblenden wenn notaus=TRUE.
(habe es auch mit "notaus" Variable vom Typ Int probiert und dann AktiviereBildMitNummer. Das selbe hier, es wollte nicht funktionieren.)
Habe mir dann ein E/A-Feld auf dem Bild angelegt, um mir den Inhalt der Variable "notaus" anzeigen zu lassen.
Und zack, auf einmal hat es funktioniert wie es sollte.
Ich erinnere mich, dass ich vor einiger Zeit genau das selbe hatte. Nur erinnere ich mich nicht mehr genau wobei.
Als ich mir die Variable über ein E/A-Feld ausgeben lassen wollte, ging auf einmal alles wie es sollte.
Meine frage jetzt, woran liegt das?

Danke & Grüße
fopsn
Hört sich nach dem Klassiker an, Variable auf Erfassungsart zyklisch fortlaufend stellen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

danke für den Hinweis!
Es war tatsächlich so, die Variable hatte die Erfassungsart "zyklisch im Betrieb", anstatt wie Harald und ihr jetzt es beschrieben habt "zyklisch fortlaufend".
Danke nochmal. Sehr gut zu wissen!

Grüße
fopsn
 
Zurück
Oben