TIA PDF Protokoll direkt aus TIA erstellen möglich?

leon31

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

Wir planen gerade eine Anlage für einen Kunden und haben die Anforderung erhalten, dass nach einem Durchlauf des Prozesses ein Protokoll mit Messwerten direkt als PDF abgelegt werden soll. Ist das mit TIA ohne Umwege (CSV und VBA-Skript) überhaupt möglich? Hat Siemens dafür eventuell eine eigene Funktion?

VG und Danke
 
Nein meines Wissens nach ist das nicht ohne Umwege möglich.
Das einzigste wie es gehen würde wäre über VBA bzw auch über den ODK Server.
 
Moin leon31,

ich muss noch was dazu schreiben.
Erstmal muss (wenn es sich um ein comfort-Panel handelt) ein PDF-Drucker installiert werden. Das geht mit SIMATIC PorSave (Optionen > Pinter Driver PDF V1.5).
Dann gibt es noch ein paar Haken und Ösen, weil das Anstossen über ein Skript laufen muss und dabei auf den Drucker gewartet werden muss (in der zwischenzeit kann das Panel keine anderen Aktionen ausführen). Das Warten auf den Drucker ist auch ein bisschen "tricky", da die Systemfunktion zwar den Druckauftrag anstösst, aber nicht auf Fertigstellung wartet und das auch nicht rückmeldet. Da muss man indirekt abfragen, ob die Datei geschrieben wurde.
Das habe ich gelöst, indem ich prüfe, ob sich nach Zeit x noch die Größe der Datei ändert (wird während des Druckvorgangs größer).
Hier das Skript dazu (Entsprechende Objekte müsstest Du dann noch in Deine Visu einfügen):
Code:
Sub PDF_Druck()

'*** Deklarationen ***

Dim f, fs, path, pathname, filepath, file, oldFile, newFile
Dim Attribut
Dim filepathALLPDF
Dim oldFileLEN, newFileLEN, fileLEN, fileLENnext
Dim directoryPath, directoryName
Dim USBpath, SDpath, SDlogpath
Dim USBpathName, SDpathName, SDlogpathName
Dim SCREEN, errFIELD
Dim myDateTime, myYear, myMonth, myDay, myHour, myMinute, mySecond
Dim printFileDateCreate, printFileDateModified
Dim KdNr, RBGNr
Dim FileAttr
Dim i, j


'*** Initialisierungen ***

Err.Clear
On Error Resume Next

Set fs = CreateObject("FileCtl.Filesystem")
'Set f = CreateObject("FileCtl.File")



'*** Zuweisungen ***

errFIELD = "TextError"
SCREEN = "240_DIAGNOSE_Statistik"

HmiRuntime.ActiveScreen.ScreenItems("TextError_1").text = ""
HmiRuntime.ActiveScreen.ScreenItems("TextError_2").text = ""
HmiRuntime.ActiveScreen.ScreenItems("TextError_3").text = ""
HmiRuntime.ActiveScreen.ScreenItems("TextError_4").text = ""
HmiRuntime.Screens(SCREEN).ScreenItems(errFIELD).text = ""

HmiRuntime.ActiveScreen.ScreenItems("TextError_1").Visible = False
HmiRuntime.ActiveScreen.ScreenItems("TextError_2").Visible = False
HmiRuntime.ActiveScreen.ScreenItems("TextError_3").Visible = False
HmiRuntime.ActiveScreen.ScreenItems("TextError_4").Visible = False
HmiRuntime.Screens(SCREEN).ScreenItems(errFIELD).Visible = False

HmiRuntime.ActiveScreen.ScreenItems("TextPrint").text = "Druckauftrag angestossen!"
HmiRuntime.ActiveScreen.ScreenItems("TextPrint").Visible = True


'*** CODE ***



'Prüfen, ob ein USB-Stick gesteckt ist,
'wenn nicht, Script beenden!
USBpathName = "Storage Card USB" ' "Storage Card USB"
USBpath = "\" & USBpathName ' "\Storage Card USB"

If fs.dir (USBpath) <> USBpathName Then
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").text = "Das Kopieren ist fehlgeschlagen: kein USB-Stick gesteckt!"
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").Visible = True
    Delay(3)
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint").Visible = False
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").Visible = False
    Exit Sub
End If

'Prüfen, ob eine SD-Card gesteckt ist,
'wenn nicht, Script beenden!
SDpathName = "Storage Card SD" ' "Storage Card SD"
SDpath = "\" & SDpathName ' "\Storage Card SD"

If fs.dir (SDpath) <> SDpathName Then
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").text = "Das Kopieren ist fehlgeschlagen: keine SD-Card gesteckt!"
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").Visible = True
    Delay(3)
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint").Visible = False  
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").Visible = False  
    Exit Sub
End If

'Prüfen, ob der Ordnerpfad auf der SD-Card angelegt ist,
'wenn nicht, Odnerpfad anlegen!
directoryName = "log"
directoryPath = "\" & directoryName '"\log"

SDlogpathName = "Storage Card SD" & directoryPath ' "Storage Card SD\log"
SDlogpath = "\" & SDlogpathName ' "\Storage Card SD\log"

If fs.dir (SDlogpath) <> directoryName Then
    fs.MkDir SDlogpath
End If

'Prüfen, ob der Ordner das Attribut "Versteckt" hat.
'Wenn nicht, Attribut zu "Verstteckt" setzen
If fs.getattr(SDlogpath) <> 2 Then
    fs.setattr SDlogpath,2
End If

'Prüfen, ob der Ordnerpfad auf der SD-Card leer ist,
'wenn nicht, dann leeren
'Ausdruck kopieren und dabei umbenennen

filepath = SDlogpath & "\*.pdf"

file = fs.dir(filepath)

If file <> "" Then
    fs.kill filepath
End If


'Protokoll drucken
HmiRuntime.ActiveScreen.ScreenItems("TextPrint").text = "Druckauftrag gestartet!"
PrintReport("Statistik") 'Protokoll "Statistik" ausdrucken
'Als Drucker ist ein PDF-Drucker eingestellt
'Der Druckerpfad ist auf die SD-Card eingestellt

HmiRuntime.ActiveScreen.ScreenItems("TextPrint").text = "Druckauftrag aktiv!"

While fs.dir(filepath) = "" ' warten, bis eine Datei vorhanden ist
Wend

file = fs.dir(filepath)
filepath = SDlogpath & "\" & file

printFileDateCreate = fs.filedatetime(filepath)
printFileDateModified = printFileDateCreate

While printFileDateCreate = printFileDateModified
    printFileDateModified = fs.filedatetime(filepath)
Wend

fileLEN = fs.FileLen(filepath)
fileLENnext = 0
i = 0

HmiRuntime.ActiveScreen.ScreenItems("TextPrint").text = "Druckauftrag aktiv! Dateigröße: 0 byte"

While fileLEN <> fileLENnext
    fileLEN = fileLENnext
    Delay(3)
    fileLENnext = fs.FileLen(filepath)
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint").text = "Druckauftrag aktiv! Dateigröße: " & fileLEN & " byte"
Wend

filepathALLPDF = SDlogpath & "\*.pdf"

KdNr = SmartTags("HMI_CONSTANT_DB_Kundennummer")
RBGNr = SmartTags("HMI_CONSTANT_DB_RBG_NO")

'Quelldatei
file = fs.dir(filepathALLPDF)
oldFile = SDlogpath & "\" & file


'Datumsformat für Dateinamen umbauen
myYear = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),7,4)
myMonth = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),4,2)
myDay = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),1,2)
myHour = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),12,2)
myMinute = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),15,2)
mySecond = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),18,2)
myDateTime = myYear & myMonth & myDay & "_" & myHour & myMinute & mySecond

'Zieldatei
newFile = USBpath & "\" & KdNr & "_RBG" & RBGNr & "_" & myDateTime & ".PDF"

fs.setattr oldFile, 0 ' Quelldatei auf 'Normal' setzen

fs.FileCopy oldFile, newFile ' Datei von SD-Card auf USB-Stick kopieren und dabei umbenennen

fs.kill oldFile

If Err.Number <> 0 Then
    HmiRuntime.Screens(SCREEN).ScreenItems(errFIELD).text = "Oops! #21 " & Err.Number & " " & Err.Description
    HmiRuntime.Screens(SCREEN).ScreenItems(errFIELD).Visible = True
    Delay(2)
    HmiRuntime.Screens(SCREEN).ScreenItems(errFIELD).Visible = False
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint").Visible = False
    Exit Sub
End If

Set fs = Nothing ' Filesystem-Objekt freigeben

HmiRuntime.ActiveScreen.ScreenItems("TextPrint").Visible = False

End Sub

Ich hoffe ich konnte Dir damit etwas unter die Arme greifen ;)


P.S.: je nach größe der Druckdatei und Performance des Panels muss man noch an den DelayFunktionen die Zeit anpassen.
Code:
Sub Delay(ByRef DelayTime)


    Dim StartTime, StopTime, i

    StartTime = Now
    StopTime = StartTime + DelayTime/24/3600

    Do
        If i = 0 Then
            'ShowSystemAlarm "Script is waiting for " & DelayTime & " seconds"    '+++ zeigt die verbleibende Dauer +++
            i = i + 1
        End If
    
    Loop Until Now >= StopTime
    
End Sub


VG

MFreiberger
 
Moin leon31,

ich muss noch was dazu schreiben.
Erstmal muss (wenn es sich um ein comfort-Panel handelt) ein PDF-Drucker installiert werden. Das geht mit SIMATIC PorSave (Optionen > Pinter Driver PDF V1.5).
Dann gibt es noch ein paar Haken und Ösen, weil das Anstossen über ein Skript laufen muss und dabei auf den Drucker gewartet werden muss (in der zwischenzeit kann das Panel keine anderen Aktionen ausführen). Das Warten auf den Drucker ist auch ein bisschen "tricky", da die Systemfunktion zwar den Druckauftrag anstösst, aber nicht auf Fertigstellung wartet und das auch nicht rückmeldet. Da muss man indirekt abfragen, ob die Datei geschrieben wurde.
Das habe ich gelöst, indem ich prüfe, ob sich nach Zeit x noch die Größe der Datei ändert (wird während des Druckvorgangs größer).
Hier das Skript dazu (Entsprechende Objekte müsstest Du dann noch in Deine Visu einfügen):
Code:
Sub PDF_Druck()

'*** Deklarationen ***

Dim f, fs, path, pathname, filepath, file, oldFile, newFile
Dim Attribut
Dim filepathALLPDF
Dim oldFileLEN, newFileLEN, fileLEN, fileLENnext
Dim directoryPath, directoryName
Dim USBpath, SDpath, SDlogpath
Dim USBpathName, SDpathName, SDlogpathName
Dim SCREEN, errFIELD
Dim myDateTime, myYear, myMonth, myDay, myHour, myMinute, mySecond
Dim printFileDateCreate, printFileDateModified
Dim KdNr, RBGNr
Dim FileAttr
Dim i, j


'*** Initialisierungen ***

Err.Clear
On Error Resume Next

Set fs = CreateObject("FileCtl.Filesystem")
'Set f = CreateObject("FileCtl.File")



'*** Zuweisungen ***

errFIELD = "TextError"
SCREEN = "240_DIAGNOSE_Statistik"

HmiRuntime.ActiveScreen.ScreenItems("TextError_1").text = ""
HmiRuntime.ActiveScreen.ScreenItems("TextError_2").text = ""
HmiRuntime.ActiveScreen.ScreenItems("TextError_3").text = ""
HmiRuntime.ActiveScreen.ScreenItems("TextError_4").text = ""
HmiRuntime.Screens(SCREEN).ScreenItems(errFIELD).text = ""

HmiRuntime.ActiveScreen.ScreenItems("TextError_1").Visible = False
HmiRuntime.ActiveScreen.ScreenItems("TextError_2").Visible = False
HmiRuntime.ActiveScreen.ScreenItems("TextError_3").Visible = False
HmiRuntime.ActiveScreen.ScreenItems("TextError_4").Visible = False
HmiRuntime.Screens(SCREEN).ScreenItems(errFIELD).Visible = False

HmiRuntime.ActiveScreen.ScreenItems("TextPrint").text = "Druckauftrag angestossen!"
HmiRuntime.ActiveScreen.ScreenItems("TextPrint").Visible = True


'*** CODE ***



'Prüfen, ob ein USB-Stick gesteckt ist,
'wenn nicht, Script beenden!
USBpathName = "Storage Card USB" ' "Storage Card USB"
USBpath = "\" & USBpathName ' "\Storage Card USB"

If fs.dir (USBpath) <> USBpathName Then
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").text = "Das Kopieren ist fehlgeschlagen: kein USB-Stick gesteckt!"
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").Visible = True
    Delay(3)
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint").Visible = False
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").Visible = False
    Exit Sub
End If

'Prüfen, ob eine SD-Card gesteckt ist,
'wenn nicht, Script beenden!
SDpathName = "Storage Card SD" ' "Storage Card SD"
SDpath = "\" & SDpathName ' "\Storage Card SD"

If fs.dir (SDpath) <> SDpathName Then
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").text = "Das Kopieren ist fehlgeschlagen: keine SD-Card gesteckt!"
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").Visible = True
    Delay(3)
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint").Visible = False 
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint_1").Visible = False 
    Exit Sub
End If

'Prüfen, ob der Ordnerpfad auf der SD-Card angelegt ist,
'wenn nicht, Odnerpfad anlegen!
directoryName = "log"
directoryPath = "\" & directoryName '"\log"

SDlogpathName = "Storage Card SD" & directoryPath ' "Storage Card SD\log"
SDlogpath = "\" & SDlogpathName ' "\Storage Card SD\log"

If fs.dir (SDlogpath) <> directoryName Then
    fs.MkDir SDlogpath
End If

'Prüfen, ob der Ordner das Attribut "Versteckt" hat.
'Wenn nicht, Attribut zu "Verstteckt" setzen
If fs.getattr(SDlogpath) <> 2 Then
    fs.setattr SDlogpath,2
End If

'Prüfen, ob der Ordnerpfad auf der SD-Card leer ist,
'wenn nicht, dann leeren
'Ausdruck kopieren und dabei umbenennen

filepath = SDlogpath & "\*.pdf"

file = fs.dir(filepath)

If file <> "" Then
    fs.kill filepath
End If


'Protokoll drucken
HmiRuntime.ActiveScreen.ScreenItems("TextPrint").text = "Druckauftrag gestartet!"
PrintReport("Statistik") 'Protokoll "Statistik" ausdrucken
'Als Drucker ist ein PDF-Drucker eingestellt
'Der Druckerpfad ist auf die SD-Card eingestellt

HmiRuntime.ActiveScreen.ScreenItems("TextPrint").text = "Druckauftrag aktiv!"

While fs.dir(filepath) = "" ' warten, bis eine Datei vorhanden ist
Wend

file = fs.dir(filepath)
filepath = SDlogpath & "\" & file

printFileDateCreate = fs.filedatetime(filepath)
printFileDateModified = printFileDateCreate

While printFileDateCreate = printFileDateModified
    printFileDateModified = fs.filedatetime(filepath)
Wend

fileLEN = fs.FileLen(filepath)
fileLENnext = 0
i = 0

HmiRuntime.ActiveScreen.ScreenItems("TextPrint").text = "Druckauftrag aktiv! Dateigröße: 0 byte"

While fileLEN <> fileLENnext
    fileLEN = fileLENnext
    Delay(3)
    fileLENnext = fs.FileLen(filepath)
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint").text = "Druckauftrag aktiv! Dateigröße: " & fileLEN & " byte"
Wend

filepathALLPDF = SDlogpath & "\*.pdf"

KdNr = SmartTags("HMI_CONSTANT_DB_Kundennummer")
RBGNr = SmartTags("HMI_CONSTANT_DB_RBG_NO")

'Quelldatei
file = fs.dir(filepathALLPDF)
oldFile = SDlogpath & "\" & file


'Datumsformat für Dateinamen umbauen
myYear = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),7,4)
myMonth = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),4,2)
myDay = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),1,2)
myHour = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),12,2)
myMinute = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),15,2)
mySecond = Mid(SmartTags("MAIN_CLOCK_DB_Lokalzeit"),18,2)
myDateTime = myYear & myMonth & myDay & "_" & myHour & myMinute & mySecond

'Zieldatei
newFile = USBpath & "\" & KdNr & "_RBG" & RBGNr & "_" & myDateTime & ".PDF"

fs.setattr oldFile, 0 ' Quelldatei auf 'Normal' setzen

fs.FileCopy oldFile, newFile ' Datei von SD-Card auf USB-Stick kopieren und dabei umbenennen

fs.kill oldFile

If Err.Number <> 0 Then
    HmiRuntime.Screens(SCREEN).ScreenItems(errFIELD).text = "Oops! #21 " & Err.Number & " " & Err.Description
    HmiRuntime.Screens(SCREEN).ScreenItems(errFIELD).Visible = True
    Delay(2)
    HmiRuntime.Screens(SCREEN).ScreenItems(errFIELD).Visible = False
    HmiRuntime.ActiveScreen.ScreenItems("TextPrint").Visible = False
    Exit Sub
End If

Set fs = Nothing ' Filesystem-Objekt freigeben

HmiRuntime.ActiveScreen.ScreenItems("TextPrint").Visible = False

End Sub

Ich hoffe ich konnte Dir damit etwas unter die Arme greifen ;)


P.S.: je nach größe der Druckdatei und Performance des Panels muss man noch an den DelayFunktionen die Zeit anpassen.
Code:
Sub Delay(ByRef DelayTime)


    Dim StartTime, StopTime, i

    StartTime = Now
    StopTime = StartTime + DelayTime/24/3600

    Do
        If i = 0 Then
            'ShowSystemAlarm "Script is waiting for " & DelayTime & " seconds"    '+++ zeigt die verbleibende Dauer +++
            i = i + 1
        End If
   
    Loop Until Now >= StopTime
   
End Sub


VG

MFreiberger
Danke für den Input, werde mir das mal in Ruhe anschauen, aber scheint ja nicht ganz trivial zu sein :D

An sich wäre das schon eine elegante Lösung für den Kunden, wenn er direkt sein PDF hätte.. aber eventuell muss man irgendwo auch mal die Kirche im Dorf lassen. Aber cool zu sehen, dass es grundsäzlich eine Möglichkeit gibt :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin leon31,

das könntest Du (bei einem Comfort-Panel oder PC-VISU) mit "Protokolle" lösen.

VG

MFreiberger
Ich habe dies auch schon mittels Comfort Panel / Protokoll und dem PDF Printer gelöst. Funktioniert gut mit den Einschränkungen die Mario schon schrieb. Und man kann keinen eigenen Dateinamen vorgeben ( nur einen zusammenklicken, Datum / Uhrzeit... ). Aber hierfür hat Mario dir auch gute Hinweise gegeben.
 
Ich habe dies auch schon mittels Comfort Panel / Protokoll und dem PDF Printer gelöst. Funktioniert gut mit den Einschränkungen die Mario schon schrieb. Und man kann keinen eigenen Dateinamen vorgeben ( nur einen zusammenklicken, Datum / Uhrzeit... ). Aber hierfür hat Mario dir auch gute Hinweise gegeben.
Das stimmt so nicht ganz. Wenn man es über Skripte löst kann man vor dem anstossen des Druckes eine Umgebungsvariable beschreiben. Diese unterstützen die meisten PDF Drucker als Name.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das stimmt so nicht ganz. Wenn man es über Skripte löst kann man vor dem anstossen des Druckes eine Umgebungsvariable beschreiben. Diese unterstützen die meisten PDF Drucker als Name.
Was heißt "die meisten Drucker"? Die meisten Drucker kann man nicht auf einem Panel installieren. Und der Drucker, der installiert werden kann, hat keine entsprechende Umgebungsvariable.

Allerdings gehe ich da von einem comfort-Panel und nicht von einem PC-System aus. Für ein PC-System müsste man sowieso nochmal beim Skript Hand anlegen.

VG

MFreiberger
 
Was heißt "die meisten Drucker"? Die meisten Drucker kann man nicht auf einem Panel installieren. Und der Drucker, der installiert werden kann, hat keine entsprechende Umgebungsvariable.

Allerdings gehe ich da von einem comfort-Panel und nicht von einem PC-System aus. Für ein PC-System müsste man sowieso nochmal beim Skript Hand anlegen.

VG

MFreiberger

Die meisten Drucker heißt alle die ich bisher getestet habe. (PDF24, PDF Creator)
Jedoch nutzen wir jediglich IPC's. Daher habe ich direkt mit dem Comfort Panels keine Erfahrungen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Wir planen gerade eine Anlage für einen Kunden und haben die Anforderung erhalten, dass nach einem Durchlauf des Prozesses ein Protokoll mit Messwerten direkt als PDF abgelegt werden soll. Ist das mit TIA ohne Umwege (CSV und VBA-Skript) überhaupt möglich? Hat Siemens dafür eventuell eine eigene Funktion?

VG und Danke

Ohne Umwege und VBA funktionert dies mit unserer DataSuite Software. Man kann eine Excel-Datei als Vorlage angeben. Die Excel (XLSX) Datei kann man frei gestalten, also mit Schriftformatierungen, Diagrammen und anderen Dingen. In der DataSuite muss man dann nur noch eine Zuweisung zwischen Excel-Zeile/Zelle/Spalte und S7 Adresse/Symbol machen. Also z.B. "Bauteilnummer" in "A2". Nun füllt die DataSuite bei Eintritt eines konfigurierbaren Ereignisses oder Zyklisch eine Excel-Datei auf Basis der Vorlage. Wenn alles abgeschlossen ist und die Datei vollständig ist, kann diese automatisch als PDF an einen beliebigen Ort gespeichert werden. Alternativ ist HTML Ausgabe oder Ausdrucken an einem angeschlossenen Drucker möglich.
 
Vor etwas über einem Jahr musste ich Protokolle für die QS ausgeben. Vorhanden war eine 1500er CPU sowie eine WinCC Runtime auf einem PC.
Da hatte ich sehr viele Anbieter kontaktiert und oder verglichen, da ich mit dem PDF-Drucker eigentlich nicht so zufrieden war.

Am Ende haben wir für 230€ die Logging-Lizenz von Siemens weiterverkauft sowie eine Stunde für die Scripte und Batch-Dateien damit der PDF24-Drucker als Standarddrucker die Dateien nach dem Speichern sortiert. Das System läuft bis jetzt ohne Fehler.

Das Problem war, wie bei fast allen Anbietern, das es entweder eine Kommunikationsschnittstelle gab, diese aber nicht sicherstellen konnte das alle Daten richtig empfangen wurden (fehlender Handshake oder Konsistenz), oder aber das Put/Get genutzt werden musste und somit nicht optimierte Bausteine zum Einsatz kommen sollten sowie die Sicherheitseinstellungen der CPU nicht mehr dem Standard entsprachen.

An diesem Umstand müssen Firmen, die Protokollierungen anbieten, definitiv arbeiten, und dann preislich natürlich noch irgendwo im Logging-Rahmen liegen oder einfach einen Batzen mehr können den man auch braucht und keine 1000€+ aufschlagen.
 
Es ließe sich beispielsweise eine Postscript Datei in der SPS erzeugen, und diese auch z.B. auf einem FTP-Server anlegen. Postscript ist eine Vorstufe von PDF, die sich z.B. mit FreePDF öffnen und in ein PDF konvertieren lässt. Für direkt PDF ist das Format vermutlich zu aufwändig um alles in der SPS abzuwickeln, und FTP ohne S ist ja auch böse.
 
Zurück
Oben