WinCC Flex Skripte bei Win CE

Nessy

Level-1
Beiträge
26
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Mahlzeit,


habe leider ein "böse" Überraschung auf der Baustelle.
Habe ein Skript um einen Datenbaustein auszulesen und in .csv abzuspeichern geschrieben.
Mit Win 7 hat das auch geklappt. Aber nun habe ich vor Ort Win CE Verion 5.00 Buil 1400)
S7 V5.5+SP4+HF8 Ausgabestand K5.5.4.8
WinCC Flexible 2008 SP3 Stand V1.4.0.0_1.16.0.16


Das Skript habe ich entsprechend umgeschrieben. Problem: Es geht gar nichts!


Code:
[INDENT]Dim f, Path

'Auswahl des Speicherortes
If  SmartTags("DB800\DB_VISU_Daten.Allgemein.Steuern.Uebernahme_Schraubtech") = 0 Then
Path = "\Storage Card MMC\Logs\Schrauberdaten_Cockpit.csv"
Else
Path= "\Storage Card USB\Schrauberdaten_Cockpit.txt"
End If

'Fehlerroutine
On Error Resume Next

'Objekt erstellen
Set f = CreateObject("FileCtl.File")

'Fehlerroutine
If Err.Number <> 0 Then
ShowSystemAlarm "Error #" & CStr (Err.Number) & " " & Err.Description
Err.Clear
Exit Sub
End If

'Datei öffnen bzw. Datei erstellen
f.open Path

If Err.Number <> 0 Then
ShowSystemAlarm "Error #" & CStr (Err.Number) & " " & Err.Description
Err.Clear
Exit Sub
End If


'Daten werden in die neue Datei geschrieben

'Spindel 1 Typtabelle 1
f.LinePrint("TaktNo; " & "212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[1].TaktNo" & ";")
f.LinePrint("StatSeq; " & "212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[1].StatSeq"& ";")

'Datei schließen
f.Close

'Objekt wird freigegeben
Set f = Nothing

ShowSystemAlarm "Datensicherung ist erfolgt"


[/INDENT]


Trotz intensiver Internetsuche, habe ich bisher keine Lösung gefunden. Hat vielleicht jemand eine Idee?
Gruß
 
Zuletzt bearbeitet:
Ich kann das jetzt nicht nachstellen und habe auch kein "Template"-Projekt - ich bin mir aber fast sicher, dass es mit deinen führenden '\' bei der Path-Zuweisung zusammenhängt.
Was für eine Fehlermeldung bekommst du denn ?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bekomme leider gar keine Fehlermeldung.
Habe Visual Studio 2017 an das Projekt angebunden. Allerdings sagt mir WinCC Flex, dass kein Skriptdebugger installiert ist.
Da ich mehrere Skripte habe, scheint Visualstudio nicht so recht zu wissen was er machen soll.
Er meckert aber zumindestens nichts an :eek:

Danke erstmal :)
 
Kannst Du überhaupt Systemmeldungen sehen? Mache Dir in ein Bild eine Meldeanzeige, die auch (oder nur) Meldeereignisse der Meldeklasse "System" anzeigt. Da kannst Du dann in Ruhe die Meldungen nachlesen.

Skripte auf Panels debuggen soll theoretisch möglich sein (in der WinCC flex Hilfe gibt es glaube ich ein Thema dazu, oder hier im Forum wurde es mal erwähnt), man braucht aber eigentlich keinen Debugger. Ich skripte viel und komme immer ohne Debugger aus - ich mache mir beim Test Testausgaben mit ShowSystemAlarm.
Mache an den Stellen wo Du etwas überprüfen willst (testweise) Ausgaben, gerne mit Variablenwerten, dann kannst Du z.b. sehen ob das Skript überhaupt aufgerufen wurde und wo es lang ging und welche Werte Variablen hatten.

Vielleicht hilft Dir auch noch diese FAQ: Protool/WinCCflex/TIA Daten lesen / schreiben mit VB-Script, z.B. Beitrag #2 kannst Du das Datei-Schreiben unter PC-Windows und WinCE vergleichen

Willst Du bei f.open eine neue Datei anlegen oder Zeilen anhängen? Ich habe nicht im Kopf, was f.open macht wenn man keinen Modus angibt. Gib mal den Modus mit an. Und wenn Du den Wert von HMI-Variablen verwendest dann gib mal das SmartTags(...) mit an, und laß die Klammern beim f.LinePrint weg. (Und: bei csv-Dateien ist es eigentlich unüblich, daß man am Ende der Zeile noch ein ";" schreibt.)
Code:
[COLOR="#0000FF"]Const ForWriting = 2[/COLOR]
...
    Set f = CreateObject("FileCtl.File")

    [COLOR="#0000FF"]ShowSystemAlarm "xyz-Skript: Datei öffnen '" & Path & "'"[/COLOR]

    'Datei öffnen bzw. Datei erstellen
    f.open Path[COLOR="#0000FF"], ForWriting[/COLOR]
...
    f.LinePrint "TaktNo; " & [COLOR="#0000FF"]SmartTags([/COLOR]"212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[1].TaktNo") [COLOR="#FF0000"]& ";"[/COLOR]
...
    ShowSystemAlarm "Datensicherung ist erfolgt"

Thema Aktualisierung der Variablenwerte: Wie liest Du eigentlich die Werte für die csv-Datei ins Panel ein? So daß sie auch garantiert aktualisiert sind? Das funktioniert nur sicher mit Rezepturen. suche mal in der Forumshilfe nach "GetDataRecordTagsFromPLC"

Harald
 
Hallo Harald,

danker erstmal :D
212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[1].TaktNo ist der aktuelle Wert
Wenn eine Eingabe z.B. Test oder 1 im Panel eingegeben wurde, dann speichere ich das über einen DB und diesen dann durch Laden, Transfrieren und Blockmove
den Wert
212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[1].TaktNo
raus. In dem Fall der DB2199. DBX 65.0

KAAAAAElFTkSuQmCC


Dieser Bereich muss gesichert werden. Insgesamt aber etwa 20x
Habe deine Tipps genau gelesen und das Skript angepasst. Leider passiert auf dem Panel rein gar nichts! Die anderen Skripte funktionieren. Nur das derzeit gleich null :-(
Hilft dir das weiter?
Gruß
Jörn
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Leider passiert auf dem Panel rein gar nichts!
Das heißt, das Skript wird gar nicht aufgerufen?
Wodurch soll es aufgerufen werden? Ist das eine Schaltfläche, ist das ein Triggerbit von der SPS, wie wird das Bit (die HMI-Variable) aktualisiert? Wird die HMI-Variable irgendwo verwendet? Wenn nicht verwendet dann muß die Aktualisierung auf "zyklisch fortlaufend" stehen.

PS: Dein Bild ist nicht zu sehen.

Harald
 
Der Speicherort bei CE beginnt mit \\
Code:
If  SmartTags("DB800\DB_VISU_Daten.Allgemein.Steuern.Uebernahme_Schraubtech") = 0 Then
Path = "\[B][COLOR=#ff0000]\[/COLOR][/B]Storage Card MMC\Logs\Schrauberdaten_Cockpit.csv"
Else
Path= "\[B][COLOR=#ff0000]\[/COLOR][/B]Storage Card USB\Schrauberdaten_Cockpit.txt"
End If
desweiteren natürlich prüfen was pn/dp geschrieben hat.
 
"\Storage Card MMC" und "\Storage Card USB" ist korrekt so. Nur Netzwerk-Pfade beginnen mit 2 Backslash "\\PCname\Freigabename"

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

leider bin ich wieder im Büro und kann das erst in zwei Wochen wieder ausprobieren.

Ich rufe das Skript direkt über einen Button in der Visu auf. Vielleicht liegt da der Fehler und ich brauche eine Variable (zykl. fortlaufend) um das Skript aufzurufen?
Komisch das es dann bei Win 7 funktioniert :eek:
Danke an alle und schönes Wochenende :)

Siemens.JPG
 
Nein, der Trigger muß nicht Wertänderung einer Variable sein. Eine Schaltfläche drücken ist sogar besser.

Dein Skript heißt "Schrauberdaten_archivieren"?
Du übergibst da anscheinend noch Variablen? Das ist in dem Skriptcode den Du uns gezeigt hast nicht zu sehen. Du hast den Code zum posten gekürzt? Was passiert in dem nicht gezeigten Code? Wird da vielleicht das Skript gewollt oder ungewollt beendet?

Vielleicht erklärst Du uns mal zweifelsfrei was genau Du meinst mit "Leider passiert auf dem Panel rein gar nichts!" Hast Du gecheckt ob das Skript überhaupt aufgerufen wird und ob es bis zu der Stelle mit dem Datei-schreiben kommt (mehrere ShowSystemAlarm einfügen, wie in Beitrag #4 empfohlen)?

In der Funktionsliste nach dem Aufruf "Schrauberdaten_archivieren" hast Du noch ein "SetzeBit (irgendwas)" - kann das die Ausführung des Skriptes beeinflussen? Es ist nicht garantiert daß das "SetzeBit" erst nach dem Beenden des Skriptes ausgeführt wird, das kann auch schon während der Laufzeit des Skriptes ausgeführt werden.

Was hast Du an der Schaltfläche bei "Loslassen" projektiert?

Harald
 
Hallo Harald,

das oben beschrieben Skript heißt Schrauberdaten_archivieren. Warum?

Die Codes habe ich, wie von dir empfohlen, alle in das Skript geschrieben.
Konnte dies ungenügend testen (Heimreise)
Das Setze / Rücksetze lässt den Button nur kurz grün aufleuchten und kommt in dem Skript gar nicht vor / wollte alle Fehler ausschließen.

Mit "nichts" meine ich, dass keine Fehlermeldung kommt, keine Datei erzeugt wird bzw. wenn ich eine vorhandene Sicherung von einem Win 7 Rechner (.csv) nehme, wird diese nicht überschrieben.
Es scheint, als würde dieses Skript gar nicht existieren bzw. Win CE bzw. WinFlex damit nichts anfangen kann bzw. übersieht.
Habe kurz vor Feierabend noch einen Loop Befehl bei den Fehlermeldungen eingebaut. Da hatte ich aber nur einen Versuch.

Zu dem Skript: Es ist wesentlich länger, aber ich habe nur die gezeigten Zeilen am laufen. Den Rest habe ich auskommentiert.
Code:
'Spindel 1 Typtabelle 1f.LinePrint "TaktNo; " & SmartTags("212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[1].TaktNo") & ";"
f.LinePrint "StatSeq; " & SmartTags("212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[1].StatSeq") & ";"
'fo.LinePrint(Now & Delimiter & SmartTags("212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[1].StatSeq") & Gab)
'fo.LinePrint(Now & Delimiter & SmartTags("212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[1].Bezeichnung") & Gab)
'fo.LinePrint(Now & Delimiter & SmartTags("212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[1].PG") & Gab)
'fo.LinePrint(Now & Delimiter & SmartTags("212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[2].TaktNo") & Gab)
'fo.LinePrint(Now & Delimiter & SmartTags("212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[2].StatSeq") & Gab)
'fo.LinePrint(Now & Delimiter & SmartTags("212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[2].Bezeichnung") & Gab)
'fo.LinePrint(Now & Delimiter & SmartTags("212100_SR1_SP1\212100+SR1-SP1.Typ[1].Takt[2].PG") & Gab)
usw. (delimiter / gab waren Versuche)


Das Skript wird nur über diesen Button aufgerufen! Sonst wird es nirgendwo verwendet.

Da ich erst in 14 Tagen wieder vor Ort bin, werde ich mir deine Links nächste Woche im Büro nochmal in Ruhe genau anschauen.
Auf der Baustelle ist das ein bissl blöd mit Handyempfang usw.

Danke und schönes WE
Jörn
 
Schönen guten Morgen,


wieder im Büro.
Ich habe letztendlich das Skript und die dazugehörenden Komponenten komplett gelöscht -> Temporäre Dateien gelöscht -> Speichern und optimieren -> alles neu generiert und reingespielt. Danach das Skript wieder rein kopiert -> Temporäre Dateien gelöscht -> alles neu generiert und läuft :)


Danke für eure Hilfe
 
Zurück
Oben