Typdaten aus CSV-Datei in CPU315 2PN/DP einlesen

Hexmex

Level-2
Beiträge
52
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich programmiere einen Prüfstand. Der Prüfstand soll für mehrere Typen eines Produkts sein. Die Prüfparameter aller einzelnen Modelle bekomm ich als CSV-Datei (Werte getrennt durch Semicolon). Ich möchte es gerne so umsetzen, dass es lediglich nötig ist, eine neue CSV-Datei auf den IPC mit WinCCflex RT zu kopieren, anschließend nur den Dateipfad in der Visu eingeben und schon kann man die neuen Prüfparameter importieren und einen neuen Typen anlegen.

Die Spaltenanzahl der CSV, also die Anzahl der Prüfungen, können unterschiedlich viele sein. In der ersten Spalte stehen dabei Header-Informationen, somit auch infos über die maximale Anzahl (Breite) der Spalten, was auch gleichzeitig dem maximalen Schritt des Prüfablaufs wiedergibt.

Mein Gedanke war nun der, die Prüfparameter-CSV über ein Script in eine Rezeptur zu laden und von dort auf einen DB in die Steuerung zu schreiben. Das funktioniert im Augenblick für eine einzige Spalte. Auch die Geschichte mit der variablen Datei-Pfad-Angabe.

Mein wunsch wäre nun, das Ganze auf alle Spalten umzusetzen, also alle Spalten gleichzeitig zu laden. Ist das in WinCCflexible prinzipiell möglich? Oder kann über das Script mit dem Befehl "ImportDataRecords" nur eine Spalte importiert werden?

Vielleicht hat einer von euch einen Tip wie man das auf andere Weise lösen könnte, ich bin in VB-Scripten nicht so bewandert, eventuell gibt es da andere Befehle die mir weiter helfen können.



Ich hoffe, ich konnte mein Problem verständlich erklären und danke euch schon mal im Voraus für eure Hilfe!
mfg
 
Hallo Froma,

du kannst das Einlesen der CSV-Datei in einem Script mit Hilfe des FileSystemObject realisieren. Damit kannst du den gesamten Dateiinhalt einlesen und nach eigenem Gutdünken ver-/bearbeiten. Ich glaube, bei Siemens gibt es sogar Beispielapplikationen zum Download.


Gruß, Fred


P.S: Die Suchfunktion dieses Forums sollte auch einige Ergebnisse liefern... ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Fred,

vielen Dank für deinen Denkanstoß!
Ich habe mir die FileSystemObject-Methode einmal etwas näher angesehen, aber leider muss ich, zu meinem Bedauern gestehen, dass der Funke dabei einfach noch nicht überspringen will..
Wäre es möglich mir noch Beispiele zu nennen, mit denen ich an mein Ziel komme? Ich habe sowohl die Forum als auch Google-Suchfunktion genutzt, jedoch mit überschaubarem Erfolg.

Ich hoffe wir sprechen auch vom selben Anwendungsfall. Nochmals zur Sicherheit:
Ich möchte eine "mehrspaltige" CSV-Datei in einen Datenbaustein laden. Die erste Spalte der CSV ist dabei so etwas wie ein "Header" der unter anderm auch die maximale Spaltenanzahl enthält. Alle Spalten ab dem Header (also ab der 2.) sind dann Prüfparameter. Je nach CSV kann es unterschiedlich viele Prüfungen geben, darum ist diese auch unterschiedlich breit.
Im Anhang habe ich die maximale Spaltenzahl mal rot markiert.

Ich arbeite mit Siemens Step7 V5.5 und das ganze CSV-Management soll auf einem PC mit WinCC-Flexible RT funktionieren.

Ich wäre sehr dankebar wenn ich noch etwas Unterstützung bei meinem Problem bekomme.
mfg


BspCSV.JPG
 
Mit den vorgefertigten Rezepturfunktionen kann man keine csv-Dateien mit wechselndem Format einlesen. Das Einlesen und flexible Auswerten muss man selber programmieren.

Benutze mal die Forumssuche nach "FileSystemObject", da findest Du jede Menge VBS-Beispiele rund um csv/txt-Dateien.
Und diese FAQ: Protool/WinCCflex Daten lesen / schreiben mit VB-Script

Harald
 
steht der datensatz immer in zeile 5?

Code:
Set fs = CreateObject("Scripting.FileSystemObject")
Set TextFile1 = fs.openTextFile(datei, 1)
delim=";"
dim parameter(100)
do while textfile1.atendofstream <> true
 z = z + 1
 inzeile = TextFile1.readline
 if z = 5 then
  i2=0
  i1=instr(i1+1,inzeile,delim)
  if i1>0 then
   anzahl=mid(inzeile,i2+1,i1-i2-1)
   i2=i1
  end if
  for i = 0 to anzahl-1
   i1=instr(i1+1,inzeile,delim)
   if i1>0 then
    parameter(i)=mid(inzeile,i2+1,i1-i2-1)
    i2=i1
   end if
  next
  parameter(i)=mid(inzeile,i2+1)
  exit do
 end if
loop
 
Zuletzt bearbeitet:
Vielleicht mal so als Denkanstoss (wegen dem variablen Aufbau und Inhalts-Bestandteilen) :
Das Format der Datei sollte m.E. eher XML (oder etwas selbst gebautes Vergleichbares) sein. Du kannst dann die gewünschten und benötigten Inhalte (egal, wo sie stehen) anhand ihres Namens identifizieren und entsprechend zuordnen.
WinCCFlexibel unterstützt dich da mit eigenen Funktionen nicht - du hast aber im VB-Script-Befehlssatz alles drin, was du dafür benötigst, dir das selber zu programmieren. Das gilt auch für das Finden der gewünschten Datei mit den Daten.
Hier ist aber auf jeden Fall eine gute Portion Kreativität (und Eigen-Engagement) gefragt.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo nochmal an alle die auf meinen Hilfeschrei reagiert haben!

Habe die Aufgabe jetzt durch eure Denkanstöße gelöst. Ich verwende dafür das "FileSystemObject", mit dem es super geht.

@Volker: Danke für deine Code-Zeilen, war nicht ganz so, wie ich es gebraucht habe, aber allein die Tatsache, dass ich mich an deinem Beispiel orientieren konnte, hat mir sehr weiter geholfen.

Ist schon prima, welche Unterstützung man hier bekommt. Klasse Leute, klasse Forum!

Grüße alle,
Froma
 
Zurück
Oben