WinCC VB Script exportieren und kontrollieren von Daten

PLC_

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe folgendes Problem:

bei einem Neustart kontrolliere und exportiere ich gegebenfalls alle Rezepturdatein als "txt-Datei" für die Dartsellung der Rezepturwerte im Grid-Viewer. Hierzu nutze ich die Funktion:
"ExportDataRecords" im nächsten Schritt überprüfe ich mit der Funktion "FileExists" ob alle Dateien richtig angelegt wurden.

Die Funktion "FileExists" ist jedoch die ganze Zeit True auch wenn die Daten nicht vorhanden sind.
Ich habe die Funktion FileExist mit anderen Dateien getestet die nicht durch einen Scriptbefehl erstellt werden. Bei diesen ist die Funktion gegeben und es wird erst weiter geschaltet wenn die Datei vorhanden ist.

Die Visualisierung läuft auf einem IPC von Siemens mit installiertem Windows 7-CE vom CustomerSupport wurde mit dazu geraten die Funktion "dir" zu verwenden, da die Funktion "FileExists" nicht für die CE Betriebssysteme geeignet ist. Der Befehl "dir" kann jedoch nicht ausgeführt werden, da ich von Siemens eine Fehlermeldung ("Fehler ActiveX component can't create object: filectl.filesystem") erhalte wenn das Objekt "filectl.filesystem"angelegt wird.
Von der Abfrage des Status der Funktion ExportDataRecords wurde mir auch abgeraten, da dieser laut Service nicht zuverlässig funktioniert.

Hat jemand von euch schon ähnliche Erfahrungen gemacht oder eine Idee wie das Problem gelöst werden kann ?

Vielen Dank
 
Unterschiede der Dateioperationen WinCE zu Win32 siehe diese FAQ Protool/WinCCflex/TIA Daten lesen / schreiben mit VB-Script
Ein Beispiel für eine für beide Windows-Versionen nutzbare Funktion FileExist findest Du auch da:
Code:
' Function FileExist(Path) prüft, ob die angegebene Datei vorhanden ist
' Rückgabewert muß True/False sein!
' Skript kann unter OP-WinCE und PC-Windows laufen
' Path darf unter WinCE wildcards *? enthalten
Dim fso

FileExist = False
If SmartTags("_System\!_RT-Sim_!") Then 'PC-Windows
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists(Path) Then FileExist = True
Else 'WinCE
    Set fso = CreateObject("FileCtl.FileSystem")
    If fso.Dir(Path) <> "" Then FileExist = True
End If

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit "Windows 7 CE" meinst Du "Windows 7 embedded"? Das ist nicht Windows CE. Die Anweisung "Dir" vom ActiveX "filectl.filesystem" kann nicht funktionieren. Da hat der Support was falsches erzählt. Zur Sicherheit: wie heißt der IPC von Siemens genau?

Die Funktion "FileExists" ist jedoch die ganze Zeit True auch wenn die Daten nicht vorhanden sind.
Kannst Du mal ein Stück Script-Code zeigen?

Harald
 
Es handelt sich um den IPC 427D, mit dem Betriebssystem hattest du recht Windows 7 embedded.

Code:
'Überprüfe ob TXT-Dateien für GridControl vorhanden sind, falls nicht werden diese durch globalen Export aller Rezepte erstellt

Set objCheckGridExports = CreateObject("Scripting.FileSystemObject")

If objCheckGridExports.FileExists(SmartTags("FileSystem_InternalSpace.PathDrive")&FileSystemPathGridControl&SmartTags("TXTRecipeFilesGridControl.A")) And_
 objCheckGridExports.FileExists(SmartTags("FileSystem_InternalSpace.PathDrive")&FileSystemPathGridControl&SmartTags("TXTRecipeFilesGridControl.B")) And _
objCheckGridExports.FileExists(SmartTags("FileSystem_InternalSpace.PathDrive")&FileSystemPathGridControl&SmartTags("TXTRecipeFilesGridControl.C")) And_
 objCheckGridExports.FileExists(SmartTags("FileSystem_InternalSpace.PathDrive")&FileSystemPathGridControl&SmartTags("TXTRecipeFilesGridControl.D")) Then_
    
Else
    ExportDataRecords 0,0,SmartTags("FileSystem_InternalSpace.PathDrive")&FileSystemPathGridControl&SmartTags("TXTRecipeFilesGridControlAll"),hmiOverwriteAlways,hmiOff,intState    
End If

Do
    'Warten
    
Loop Until objCheckGridExports.FileExists(SmartTags("FileSystem_InternalSpace.PathDrive")&FileSystemPathGridControl&SmartTags("TXTRecipeFilesGridControl.A")) And_
 objCheckGridExports.FileExists(SmartTags("FileSystem_InternalSpace.PathDrive")&FileSystemPathGridControl&SmartTags("TXTRecipeFilesGridControl.B")) And_
 objCheckGridExports.FileExists(SmartTags("FileSystem_InternalSpace.PathDrive")&FileSystemPathGridControl&SmartTags("TXTRecipeFilesGridControl.C")) And_ 
objCheckGridExports.FileExists(SmartTags("FileSystem_InternalSpace.PathDrive")&FileSystemPathGridControl&SmartTags("TXTRecipeFilesGridControl.D"))
 
Dein Unterstrich nach dem Then_ stört mich. Und es sieht total unübersichtlich aus. Versuche mal so:
Code:
'Überprüfe ob TXT-Dateien für GridControl vorhanden sind, 
'falls nicht werden diese durch globalen Export aller Rezepte erstellt

Dim objFSO, fpath, alleDa

Set objFSO = CreateObject("Scripting.FileSystemObject")

fpath = SmartTags("FileSystem_InternalSpace.PathDrive") & FileSystemPathGridControl

alleDa = objFSO.FileExists(fpath & SmartTags("TXTRecipeFilesGridControl.A")) _
     And objFSO.FileExists(fpath & SmartTags("TXTRecipeFilesGridControl.B")) _
     And objFSO.FileExists(fpath & SmartTags("TXTRecipeFilesGridControl.C")) _
     And objFSO.FileExists(fpath & SmartTags("TXTRecipeFilesGridControl.D"))

If Not alleDa Then
    ExportDataRecords 0, 0, fpath & SmartTags("TXTRecipeFilesGridControlAll"), hmiOverwriteAlways, hmiOff, intState
End If

Do  'Warten
    alleDa = objFSO.FileExists(fpath & SmartTags("TXTRecipeFilesGridControl.A")) _
         And objFSO.FileExists(fpath & SmartTags("TXTRecipeFilesGridControl.B")) _
         And objFSO.FileExists(fpath & SmartTags("TXTRecipeFilesGridControl.C")) _
         And objFSO.FileExists(fpath & SmartTags("TXTRecipeFilesGridControl.D"))

    'hier fehlt noch eine Wartezeitbegrenzung/Notabbruch der Schleife
Loop Until alleDa

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für deine Hilfe,

ich habe den Code bei mir ausprobiert (ohne Abbruch Kriterium in der Do Until Schleife) jedoch wird die Bedingung "alleDa" true und die Schleife wird unterbrochen obwohl die Dateien nicht exisitieren.
 
Mir ist soeben aufgefallen, dass das Problem nur Auftritt wenn die kompletten Rezepturdaten nicht vorhanden sind. Wenn Rezepturdaten vorhanden sind funktioniert das Skript von dir und mir.

Meiner Meinung nach müsste es jedoch auch funktionieren wenn die Rezeptudaten nicht vorhanden sind oder ?
 
Dann schaust Du vielleicht auf andere Dateien als Dein Skript.
Stimmt die Pfadangabe? Was steht in den SmartTags("TXTRecipeFilesGridControl...") drin?

Du kannst Dir die zusammengesetzten Dateinamen in einer Meldeanzeige für die Meldeklasse "System" anzeigen lassen:
Code:
ShowSystemAlarm "myScriptx A:'" & fpath & SmartTags("TXTRecipeFilesGridControl.A") & "'"
ShowSystemAlarm "myScriptx B:'" & fpath & SmartTags("TXTRecipeFilesGridControl.B") & "'"
ShowSystemAlarm "myScriptx C:'" & fpath & SmartTags("TXTRecipeFilesGridControl.C") & "'"
ShowSystemAlarm "myScriptx D:'" & fpath & SmartTags("TXTRecipeFilesGridControl.D") & "'"

Harald
 
Zurück
Oben