Scriptverarbeitung auf PanelPC mit XP embedded

guenni

Level-2
Beiträge
313
Reaktionspunkte
34
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe von einem Bekannten ein Script erhalten was mir ermöglicht eine csv Datei an einem Panel PC mit Wincc flex anzuzeigen. In der Simulation läuft es einwandfrei. Als ich jedoch das Projekt auf das Panel übertragen habe bekomme ich Fehlermeldungen. Einen Teil habe ich durch ändern des Skiptes wegbekommen.

Kann es sein das Skriptebefehle auf XP embedded Systeme anderst sind als auf Systemen mit XP Prof.

Als Panel habe ich ein IPC477C mit XP embedded Standard im Einsatz.

Gruss
Guenni
 
Zuviel Werbung?
-> Hier kostenlos registrieren

Hallo Helmut,

Den erwähnten Beitrag habe ich mir im Vorfeld schon angeschaut.

Leider sind meine Script kenntnisse erst am wachsen.
Was ich aber nicht verstehe ist warum läufts im Simulationsmodus vom Flex und auf dem Panel nicht. Der einzige Unterschied ist meinerseits die der Betriebssysteme.

Gruss
Guenni
 

Hallo Jesper

Nein sie sind nicht geheim.

Als ersten Fehler habe ich bekommen:

No screen item 'VarNameTextfeld1' Please check transfer of names option
Das script blieb an der roten Markierung stehen.

In meinem Bild habe ich verschiedene Textfelder eines davon heisst VarNameTextfeld1. Das Skript sieht wie folgt aus

Code:
For ix = 1 To (i-1)
'Zeile in Spalten zerlegen
Zeilen = Split(Zeile(ix),";",-1,1) 
'Textfelder befüllen
 
 
[COLOR=red]Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarNameTextfeld"& ix)[/COLOR]
fs.Text = Zeilen(0)
Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarNameTextfeld"& ix)
fs.Text = Zeilen(1)
Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("ZeitTextfeld"& ix)
fs.Text = Zeilen(2)
 .....

Dieses Problem konnte ich lösen indem ich & ix gelöscht habe und if then Anweisungen eingegeben habe.



Dann kam Fehler 2
Fehler 'subscript out of range:'[number:1 in skript datenlesen zeile 101
Zeile 101 ist rot markiert

Der Skriptteil sieht nun wie folgt aus:

Code:
For ix = 1 To (i-1)
 'Zeile in Spalten zerlegen
 Zeilen = Split(Zeile(ix),";",-1,1) 
 'Textfelder befüllen
 
 If ix = 1 Then
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarNameTextfeld1")
  fs.Text = Zeilen(0)
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarNameTextfeld1")
  [COLOR=red]fs.Text = Zeilen(1)[/COLOR]
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("ZeitTextfeld1")
  fs.Text = Zeilen(2)
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("ZeitTextfeld1")
  fs.Text = Zeilen(3)
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarTextfeld1")
  fs.Text = Zeilen(4)
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarDescription1")
  fs.Text = Zeilen(5)
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarComment1")
  fs.Text = Zeilen(6)
 End If
 
  If ix = 2 Then
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarNameTextfeld2")
  fs.Text = Zeilen(0)
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarNameTextfeld2")
  fs.Text = Zeilen(1)
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("ZeitTextfeld2")
  fs.Text = Zeilen(2)
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("ZeitTextfeld2")
  fs.Text = Zeilen(3)
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarTextfeld2")
  fs.Text = Zeilen(4)
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarDescription2")
  fs.Text = Zeilen(5)
 Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarComment2")
  fs.Text = Zeilen(6)
 End If
 
Next
Auf meinem Laptop bekomme ich diese Fehlermeldungen nicht.

Guenni
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also, im WinCC Flex bekomst Du Fehlermeldungen beim generieren ?
Das sollte ja nichts zu tun haben damit ob den RT auf dein laptop befindet, oder auf den Panel-PC.

Ich denke aber das ich kenne diese Skript. Es ist von ein Beispielprojekt von Siemens, und umhandelt wie man daten aus ein CSV Datei in Spalten und Zeilen darstellen kann.
Ich habe es ausprobiert, und krieg es zum laufen, aber später lief es nicht mehr, und sogar ohne Fehlermeldungen !
Ich denke das den zugriff auf auf die sogenante "HMIruntime.objects" ist nicht 100% stabil.
Heute verwende ich ein CSV Viewer um CSV Daten zu darsetellen.
 
Das csv File ist ein Audit Archiv. Ich müsste dies eigentlich mit dem AuditViewer von Siemens der auf der CD2 vom Winccflex beiliegt anzeigen.
Jedoch benötigt dieser laut Siemens ein installiertes Officepaket.
Der Endkunde hat noch nicht entschieden ob er ein Officepaket spendiert.

Welchen csv Viewer benutzt du?

Guenni
 
Zeilen = Split(Zeile(ix),";",-1,1)

If den Panel PC, welche Listen-Separator ist eingestellt ?
Diese Einstellung erzeugt viele Probleme besonders für CSV-Dateien.
Man findet diese Einstellung unter Windows Control Panel .. Regional and Language Options .. Customize.
Das Rätzelhafte ist das der Listen-Separator wird automatisch eingestellt wenn ein neue Benutzer auf den PC eingerichtet wird.

Leider kann man nicht in VBS testen welche Listen-Separator eingestellt ist.
Ich teste für welche Dezimal-Trenner eingestellt ist :

charDecPoint = Mid(CStr(8.1), 2, 1)
If Not charDecPoint = "." Then ShowSystemAlarm "Decimal separator is wrong. Set decimal to '.', set list separator to ',' in Regional settings."
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Jesper

Du bist mein Held!!!
Der Tip mit dem Listenseperator war Gold wert. Darauf muss man erst mal kommen. Nun läuft die Applikation so wie ich es wollte.
Eines Gutes hatte es wenigstens man musste sich die Zeit nehmen und sich in die Skriptbearbeitung reinarbeiten.

Gruss
Guenni
 
Ergebnis von Split() prüfen

Hallo Guenni,

ich würde unabhängig vom Listenseparator nach Split() testen, ob die eingelesene Zeile auch in die erwartete Anzahl
Texte zerlegt werden konnte. Wenn auch nur 1 ";" fehlt, dann bekommst Du spätestens bei "fs.Text = Zeilen(6)"
einen Runtime-Error mit Skript-Abbruch.
Beim Einlesen von Dateien gehe ich nie davon aus, daß die Datei genau den von mir erwarteten Aufbau hat.
Code:
For ix = 1 To (i-1)
  'Zeile in Spalten zerlegen
  Zeilen = Split(Zeile(ix),";",-1,1) 
[COLOR="Blue"]  If UBound(Zeilen) < 6 Then 'Anzahl erwarteter Texte
    ShowSystemAlarm "Zeile enthält nicht genug Texte oder Listenseparator ist nicht ';'"
    Exit For ' oder Exit Sub ?
  Else [/COLOR]'Textfelder befüllen
    If ix = 1 Then
      Set fs = HmiRuntime.Screens("Bild_1").ScreenItems("VarNameTextfeld1")
      fs.Text = Zeilen(0)
      ...
    End If
  End If
Next

Gruß
Harald
 
Hallo Harald

Danke für den Hinweis. Genau das ist mir vorgestern passiert. Irgendwann trat dann ein Skriptfehler auf welcher ich mir nicht erklären konnte. Die Fehlermeldung weiss ich leider nicht mehr aber die Einträge waren in meinen Textfeldern verschoben.
Ich bau dein Hinweis ein un teste weiter.

Gruss
Günter
 
Zurück
Oben