WinCC Flex Dateinamen erstellen mit interner Variable

Gerrit-S

Level-2
Beiträge
91
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
mit einem Comfort Panel schreibe ich eine Text-Datei per Skript auf einen USB-Stick.
Den Dateinamen setzte ich vorher zusammen (ein String & Datum & .CSV).
Hatte bisher auch geklappt, doch jetzt habe ich eine interne Variable als Anteil für den Namen verwendet.
Doch diese kann ich nur(-noch) als WString definieren.
Damit scheint es aber nicht zu funktionieren.
Dann habe ich die Variable in der SPS als String definiert und es hat funktioniert.
Ist diese Erkenntniss richtig?
Eigentlich interessiert die SPS der Name ja gar nicht. Insofern wäre eine interne Variable schöner.
Gruß aus OWL
Gerrit
 
Die müsste dann aber vom Typ String sein, WString ist ja Unicode und das wird als Dateiname von den Bausteinen nicht unterstützt und auch nicht alle Dateisysteme unterstützen Unicode.
Nachtrag: Meine Idee scheint was WString angeht leider Blödsinn zu sein.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
mit einem Comfort Panel schreibe ich eine Text-Datei per Skript auf einen USB-Stick.
Du arbeitest sicher nicht mit WinCC flexible, sondern mit TIA. Comfort Panels gehen nur mit TIA.

Hatte bisher auch geklappt, doch jetzt habe ich eine interne Variable als Anteil für den Namen verwendet.
Doch diese kann ich nur(-noch) als WString definieren.
Damit scheint es aber nicht zu funktionieren.
Wie scheint das nicht zu funktionieren? Bekommst du irgendwelche Fehlermeldungen? Zeige uns mal, was nicht funktioniert.
In TIA geht für interne String-Variablen nur WString, was aber normal kein Problem ist.
 
Sorry, ja natürlich TIA, in dem Fall V18
Mit der internen Variable (WString) besteht der Dateiname auf den Stick nur aus Datum und .CSV -> 2024.06.06_.CSV
Mit dem String in der SPS wird dann daraus wie es sein soll Name und Datum und .CSV -> Abcd_01_2024.06.06_.CSV
Wobei 'Abcd_01_' in der Variablen steht, Eingabe am Panel.
Der Anteil mit WString wird bei der Namensgenerierung einfach ignoriert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist der Teil des Skriktes indem der Dateiname erstellt wird.

Code:
' Dateinamen erstellen
filename = SmartTags("DB8001 - Datensicherung_F_Name") 'Anteil über HMI einstellbar
datum = "20" & Right(Date,2) & "." & Mid(Date,4,2 )& "." & Left(Date,2)
datei = "\storage card usb\" & filename & "_" & datum & "_" & ".csv"

Ich habe nur die Variable <SmartTags("DB8001 - Datensicherung_F_Name")> genutzt statt einer internen,
die ist jetzt natürlich nicht mehr da.
Und schon hat es funktioniert.

Kleiner Nebeneffekt, eben festgestellt als Referenzprojekt geöffnet werden keine Skripte angezeigt....
Musste ich das Projekt direkt öffen.
 
Zuletzt bearbeitet:
Zuletzt bearbeitet:
Ich habe nur die Variable <SmartTags("DB8001 - Datensicherung_F_Name")> genutzt statt einer internen,
die ist jetzt natürlich nicht mehr da.
Und schon hat es funktioniert.
Ändere doch einfach mal die Projektierung der HMI-Variable "DB8001 - Datensicherung_F_Name" zu <Interne Variable> - geht es dann auch noch?
War die Länge der WString-Variable vielleicht zu kurz eingestellt oder war der Variable kein Wert zugewiesen (Panel/RT neu gestartet?) ? Oder hast du einen falschen Variablenname verwendet (Tippfehler?) ?

Also ich bastle auch Dateinamen zusammen mit Hilfe von internen WString-HMI-Variablen und habe keine Probleme.
Code:
filename = SmartTags("_System\file_prices_csv")  'z.B. auction_spot_prices_(market_area)_2023.csv
pos = InStrRev(filename, ".")  'Position des "." muß mind. 5. Zeichen sein: "YYYY." .. "YYYY.csv"
'...

'Dateiname links und rechts vom YYYY
fnL = SmartTags("_System\path_EM_PC") & "\" & Left(filename, pos - 5)
fnR = Mid(filename, pos)

'Gesamt-Dateiname Pfad + Dateiname + Jahr + Dateierweiterung
d = Date 'Datum jetzt
YYYY = Year(d)
filename = fnL & CStr(YYYY) & fnR
'ShowSystemAlarm "Dateiname '" & filename & "'"  '##Debug##

'...
FileCopy filename, tmpfile

Code:
datum = "20" & Right(Date,2) & "." & Mid(Date,4,2 )& "." & Left(Date,2)
Nicht gut. Dadurch ist dein Code davon abhängig, welches (sprachabhängige) Datumsformat auf dem Comfort Panel eingestellt ist. Ausserdem könnte zwischen den Date-Abfragen das Datum wechseln.
Besser:
Code:
d = Date
datum = Year(d) & "." & Right("0" & Month(d), 2) & "." & Right("0" & Day(d), 2)

FAQ: Datum und Uhrzeit für Dateinamen formatieren

PS: Die Punkte im Datum würde ich weglassen.
PPS: Wie merkt sich dein Comfort Panel die Eingabe des Dateinamens?
 
Zuletzt bearbeitet:
Es war nicht vorgesehen, dass sich das Panel die Eingabe merkt. Aber jetzt merkt sich die SPS den Teil des Namens bis ich ihn lösche.
Wie das Datumsformat und evtl die Uhrzeit im Namen aussehen soll muss der Kunde noch entscheiden.

Wenn ich mal Zeit habe mache ich einen neuen Versuch mit einer WString Variable.
Was ja die eigentliche Frage war....

Vielen Dank für die Ideen und Antworten.

Gruß aus OWL
Gerrit
 
Zurück
Oben