-> Hier kostenlos registrieren
Hallo Zusammen,
zuerst mal die Version und das Panel:
TIA V17 Upd4 WinCC Advanced
TP1200 Comfort
Meine Aufgabenstellung für die Programmierung:
An einer Verpackungsstation wird die Artikelnummer einer Baugruppe gescannt, danach sollen die Verpackung und optionale Inlays in die die Baugruppe verpackt wird erfasst werden. Diese sollen dann gespeichert werden. Dies geschieht bei allen Baugruppen die verpackt werden sollen. Hier kommt der erste Haken, es können ca. 20.000 verschiedene sein.
Wird beim nächsten scannen eine Artikelnummer erkannt die schon erfasst wurde sollen die vorher gespeicherten Verpackungsdaten angezeigt werden.
Soweit so gut, ich habe Aufgrund der Größe eine CSV-Datei die als Rezeptur dient.
Das klappt auch alles ABER...
Sollte die Verpackung falsch angelegt worden sein oder es ändert sich eine Option kann ich die Daten in der CSV nicht nachträglich ändern.
Aktuell ist mein Ansatz:
Die CSV öffnen, den Datensatz suchen und die nötigen Durchläufe für "file.LineInputString" zählen. Dann diesen um 1 verringern und vor diese Daten neue Daten schreiben. Die neueren Daten sollten dann bei der Suche zuerst gefunden werden und angezeigt werden. Leider überschreibt der eine neue Eintrag den kompletten Dateiinhalt. Ich habe bei der "file.open"-Methode schon die verschiedensten Kombinationen ausprobiert aber ohne Erfolg.
Hat jemand von euch eine Idee wie ich dieses Problem noch angehen kann?
Eine Anbindung an eine Datenbank (OPC UA) ist aktuell nicht möglich.
Ich habe auch gelesen, dass man eine neue Datei erzeug mit den alten Daten bis zum "Eintrag" und dann denen danach. Allerdings will ich nicht unbedingt potentiell bei einer Änderung 20.000 Einträge kopieren.
Viele Dank im Voraus für eure Unterstützung.
Anbei noch etwas Code aus meinen beiden Scripten:
zuerst mal die Version und das Panel:
TIA V17 Upd4 WinCC Advanced
TP1200 Comfort
Meine Aufgabenstellung für die Programmierung:
An einer Verpackungsstation wird die Artikelnummer einer Baugruppe gescannt, danach sollen die Verpackung und optionale Inlays in die die Baugruppe verpackt wird erfasst werden. Diese sollen dann gespeichert werden. Dies geschieht bei allen Baugruppen die verpackt werden sollen. Hier kommt der erste Haken, es können ca. 20.000 verschiedene sein.
Wird beim nächsten scannen eine Artikelnummer erkannt die schon erfasst wurde sollen die vorher gespeicherten Verpackungsdaten angezeigt werden.
Soweit so gut, ich habe Aufgrund der Größe eine CSV-Datei die als Rezeptur dient.
Das klappt auch alles ABER...
Sollte die Verpackung falsch angelegt worden sein oder es ändert sich eine Option kann ich die Daten in der CSV nicht nachträglich ändern.
Aktuell ist mein Ansatz:
Die CSV öffnen, den Datensatz suchen und die nötigen Durchläufe für "file.LineInputString" zählen. Dann diesen um 1 verringern und vor diese Daten neue Daten schreiben. Die neueren Daten sollten dann bei der Suche zuerst gefunden werden und angezeigt werden. Leider überschreibt der eine neue Eintrag den kompletten Dateiinhalt. Ich habe bei der "file.open"-Methode schon die verschiedensten Kombinationen ausprobiert aber ohne Erfolg.
Hat jemand von euch eine Idee wie ich dieses Problem noch angehen kann?
Eine Anbindung an eine Datenbank (OPC UA) ist aktuell nicht möglich.
Ich habe auch gelesen, dass man eine neue Datei erzeug mit den alten Daten bis zum "Eintrag" und dann denen danach. Allerdings will ich nicht unbedingt potentiell bei einer Änderung 20.000 Einträge kopieren.
Viele Dank im Voraus für eure Unterstützung.
Anbei noch etwas Code aus meinen beiden Scripten:
Code:
'Script zum Suchen der Artikelnummer
Do Until f.EOF
RezeptString = f.LineInputString
StringArray = Split(RezeptString,";",-1)
If StringArray(0) = SmartTags("Lesen_Rezept_Daten_1") Then
For i = 0 To 6 Step 1
SmartTags("Lesen_Rezept_Daten_"&i+1) = StringArray(i)
SmartTags("Lesen_Rezept_ArtikelBekannt") = True
bekannt = True
SmartTags("ZeilenEnde") = f.loc
Next
ShowSystemAlarm "Zeilenende: "& SmartTags("ZeilenEnde")
ShowSystemAlarm "Artikel bekannt: "&StringArray(0)
Exit Do
Else
j=j+1
ShowSystemAlarm "Zähler j: "& j
ShowSystemAlarm "durchsuchte Artikel: "& StringArray(0)
End If
Loop
ShowSystemAlarm "Zähler j: "& j
SmartTags("Zeile_Zähler") = j ' Anzahl Durchläufe für zu bearbeitende Artikelnummer
_________________________
Anderes Script ab hier:
'Script zum schreiben/ändern von Artikeln
If fs.dir(file) = "" Then ' Falls keine Rezepturdatei vorhanden ist, neue anlegen
f.open file,2
f.LinePrint "Artikelnummer;Karton;Option 1;Option 2;Option 3;Option 4;Option 5;"
f.Close
ShowSystemAlarm "Rezeptur wurde erstellt"
Else
If SmartTags("Lesen_Rezept_ArtikelBekannt") = True Then 'Daten des Artiekls ändern
f.open file,2
f.LinePrint SmartTags("Lesen_Rezept_Daten_1")&";"&SmartTags("Lesen_Rezept_Daten_2")&";"&SmartTags("Lesen_Rezept_Daten_3")&";"&SmartTags("Lesen_Rezept_Daten_4")&";"&SmartTags("Lesen_Rezept_Daten_5")&";"&SmartTags("Lesen_Rezept_Daten_6")&";"&SmartTags("Lesen_Rezept_Daten_7")&";"
f.Close
ShowSystemAlarm "Verpackung geändert"
Else
f.open file,8 'neue Daten am Ende anfügen
f.LinePrint SmartTags("Lesen_Rezept_Daten_1")&";"&SmartTags("Lesen_Rezept_Daten_2")&";"&SmartTags("Lesen_Rezept_Daten_3")&";"&SmartTags("Lesen_Rezept_Daten_4")&";"&SmartTags("Lesen_Rezept_Daten_5")&";"&SmartTags("Lesen_Rezept_Daten_6")&";"&SmartTags("Lesen_Rezept_Daten_7")&";"
f.Close
ShowSystemAlarm "neue Verpackung angelegt"
End If