WinCC PDF Writer - dynamischer Dateiname

borromeus

Level-3
Beiträge
2.271
Reaktionspunkte
331
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

prinzipiell wäre die Aufgabenstellung so, dass alle Ausdrucke, die von einem PC gemacht werden (nicht nur vom WinCC aus) auf einem Netz- Laufwerk als pdf gespeichert werden sollen.
Im WinCC existiert immer eine Chargennummer, z.B. "N12345-CM1", diese steht in einer WinCC- Variablen.

Die Dateien sollen, wenn gedruckt wird
(Chargennummer)_YYMMDD_HHMMSS.pdf
heissen.

Wenn wer dazu eine Möglichkeit sieht, bitte um Unterstützung.

In "unserem" PDF- Writer Standardprogramm "PDF- Creator" 3.4.0 kann man als Token <Environment> (=Umgebungsvariable) in den Dateinamen einbauen.
Kennt wer eine Möglichkeit, eine selbsterstellte Umgebungsvariable (vom Betriebssystem) von WinCC aus zu beschreiben, das könnte m.E. das Problem auch lösen.

Gruß
Karl
 
Hallo borroemeus,
an der selben Stelle hänge ich auch.
Vielleicht findet sich noch ein Kommentar mit einem Vorschlag.

Danke und Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

mein Wissen ist vielleicht etwas veraltet, aber als wir so etwas umsetzen mussten, konnte man keinen Dateinamen vorgeben. Wir haben die Datei nachträglich umbenannt. Das hat einwandfrei funktioniert.
 
Ich sehe in dem Moment zwei Lösungswege: Entweder führst Du einen Kommandozeilenbefehl aus und setzt die Umgebungsvariable mit SET oder wie @MFreiberger sagt: Du speicherst unter einem allgemeinen Namen ab und benennst sie dann nach Deinem Muster um.
Alternativ kann man sich einen anderen Druckertreiber zulegen, eventuell: https://www.pdfprinter.at/ der soll auch Variablen können, also hilft Dir das vielleicht weiter.
 
Also ich habe das damals so gelöst:

1. Umgebungsvariabel im Windows erstellen, in meinem Fall "LotNr"

2. VBS-Script:

Code:
Option Explicit
Function action

    Dim objShell
    Dim objEnv
    Dim LotNr
    
    Set LotNr = HMIRuntime.Tags("ZE32/Access_nach_PCS7.lotNo")  //bei mir der Datenbaustein und das Feld wo die Chargennummer steht.
    LotNr.Read
    
    Set objShell = CreateObject("WScript.Shell")
    Set objEnv = objShell.Environment("USER")
    
    objEnv("LotNr") = LotNr.Value  //das ist die Umgebungsvariable
    
End Function

3. PDF- Creator konfigurieren
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Ich stecke gerade an einem ähnlichen Problem.
Code:
Sub action()


Dim WSHShell, env
Dim Protokoll
 
On Error Resume Next
 
Protokoll = "Protokoll_Messwerte"
 

 
'-----ShowSystemAlarm "PDF Name: " & Name
 
Set WSHShell = CreateObject("WScript.Shell")
 

    ShowSystemAlarm "Start printout"

    '-----ShowSystemAlarm "Druckerwahl vor Print " & Drucker
    'Digitalprotokoll   
    '======================

        ' Laufende Nummer in Umgebungsvariable des Betriebssystems schreiben
        ' Um die Umgebungsvariable ändern zu können, muss in der Benutzerkontensteuerung "Nie benachrichtigen" eingestellt sein!
        WSHShell.Environment("System").Item("printName") = Protokoll
        ShowSystemAlarm "Umgebungsvariable: " & Protokoll
        PrintReport "Protokoll_Messwerte"   

 

 
Set WSHShell = Nothing
 
If Err.Number <> 0 Then
    ShowSystemAlarm "Protokoll_Messwerte_PDF: " & CStr(Err.Number) & ", " & Err.Description & ", " & Err.Source
Err.Clear
End If
 

End Sub

Sobald ich den Druckauftrag gebe, erhalte ich folgende Systemmeldungen

1732271933436.png

1732271979527.png

Ich benutze bioPDF zum Erstellen des Protokolls

1732272045220.png

Das Verzeichnis bleibt nur leider leer

1732272115506.png
Script wird aufgerufen

1732272149749.png

Ich verwende TIA V19 und habe einen IPC PX-39A 15" mit Siemens WinCC RT Advanced

Hat jemand eine Idee was diese Fehlermeldung bedeutet? Es muss ja anscheinend irgendwas mit dem pdf-Drucker zu tun haben, nur komme ich nicht drauf, was ich falsch mache. Das script an sich scheint aufgerufen zu werden, da ja auch der Alarm "start printout" angezeigt wird. Das scheint ja soweit zu funktionieren.
 
1732273057806.png
Erster Fehler wird schon einmal sein, dass du den Druck 2x gleichzeitig auslöst.

1 x Als Systemfunktion
1732273048078.png

Und 1 x im Skript

1732273053549.png

Man darf nicht mehr als einen Druck gleichzeitig auslösen.
 
Zuletzt bearbeitet:
Anscheinend kann ich nicht auf die Systemvariablen zugreifen. Habe es jetzt auf "User" geändert. Jetzt scheint es zu funktionieren

WSHShell.Environment("USER").Item("pdfName") = NamePDF
 
Zurück
Oben