TIA F(x) Kurve Siemens Faq "Aufbohren" :-)

Speedevil

Level-2
Beiträge
38
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi zusammen,

ich sitze gerade auf IBN und brauche Hilfe, ich Möchte Soll und Ist Kurve aus einem DB in der Visu anzeigen (Durchfluss x / Druck Y).

Mit dem Skript von der Siemens Seite zur F(x) Kurve, habe ich das auch abgeändert geschafft, nun möchte ich aber in einer Kurvenanzeige, 2 Kurven sprich 2 CSV Dateien anzeigen (Ist / Sollkurve).

Ich habe alles kopiert und unbenannt, leider schreibt er mir die Werte aus dem 2. FB aber nicht in die "2." CSV sondern nur mist, Siehe Screenshot. Anbei das Skript für die 2. Kurve.

Function TrendControl_1()

Dim timestring, ObjFile, ObjFileSystem, arrx, arry, ObjFilePath, ObjFileName, ObjLoopCount, ObjIndex, ObjTime, Objx, Objy

Const varNametagX = "LogValX_1"
Const varNametagY = "LogValY_1"
Const splitsign = ";"
Const ForAppending = 8

'Get current datetime
timestring = "'" & Now & "'"

Set ObjFileSystem = CreateObject("Scripting.FileSystemObject")
Set arrx = SmartTags("Input_X_1")
Set arry = SmartTags("Input_Y_1")

ObjLoopCount = UBound(arrx)
ObjFilePath = "C:\Logs\" ' File location for tag log
ObjFileName = "TrendControl_f(x)20.csv" ' Name of tag log

' Closing logs
CloseAllLogs

Do While SmartTags("LogsAreClosed") = False ' Wait until all logs are closed
Loop

' Deleting old file
On Error Resume Next

ObjFileSystem.DeleteFile ObjFilePath & ObjFileName, True

If Err.Number <> 0 Then
ShowSystemAlarm "Error: Deleting old file not possible. " & Err.Number & " " & Err.Description
Err.Clear
OpenAllLogs
TrendControl_1 = 1 ' RetVal: 1= error deleting old file
Exit Function
End If

' Create new archive as csv file
Set ObjFile = ObjFileSystem.OpenTextFile(ObjFilePath & ObjFileName, ForAppending, True)

If Err.Number <> 0 Then
ShowSystemAlarm "Error: Open file not possible. " & Err.Number & " " & Err.Description
Err.Clear
OpenAllLogs
TrendControl_1 = 2 ' RetVal: 2= error creating new file
Exit Function
End If

' Write header into data log
ObjFile.WriteLine("VarName" & splitsign & "TimeString" & splitsign & "VarValue" & splitsign & "Validity" & splitsign & "Time_ms")

If Err.Number <> 0 Then
ShowSystemAlarm "Error: Can not write to data log. " & Err.Number & " " & Err.Description
Err.Clear
OpenAllLogs
TrendControl_1 = 3 ' RetVal: 3= error writing to new file
Exit Function
End If

' Write entries into data log
For ObjIndex = 0 To ObjLoopCount

' Write x element to log
Objx = arrx(ObjIndex)
ObjFile.WriteLine(varNametagX & splitsign & timestring & splitsign & Objx & splitsign & "1" & splitsign & ObjIndex)

' Write y element to log
Objy = arry(ObjIndex)
ObjFile.WriteLine(varNametagY & splitsign & timestring & splitsign & Objy & splitsign & "1" & splitsign & ObjIndex)

Next

ObjFile.Close
OpenAllLogs

Do While SmartTags("LogsAreClosed") = True 'Wait until all logs are opened
Loop


1736794221952.png

' End function
ShowSystemAlarm "Load new file"
Set ObjFile = Nothing
Set ObjFileSystem = Nothing
TrendControl_1 = 0 ' RetVal: 0= no error occurred

End Function
 
Ich habe nicht versucht, mich in Dein Programm hinein zu vertiefen. Mir ist lediglich die Zeile ...
'For ObjIndex = 0 To ObjLoopCount'
... ins Auge gesprungen.
In Deiner Schleife wird vermutlich 1 Element zuviel angesprochen?
Ich hätte z.B. ...
'For ObjIndex = 1 To ObjLoopCount'
... oder ...
'For ObjIndex = 0 To ObjLoopCount - 1'
... erwartet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wenn das Script eine Kopie des Scriptes für die erste Kurve ist, von der du die Werte geschrieben bekommst dann wird aus meiner Sicht das Script selbst okay sein. Es kann also nur am adressieren des/der Array's liegen. Das wäre dann diese Zeile :
Code:
Set arrx = SmartTags("Input_X_1")
Set arry = SmartTags("Input_Y_1")
- stimmen diese Tags denn ?
- wie sehen die in dem anderen Script aus ?
- steht nur Unsinn in deiner CSV oder stimmen auch Werte ?
- wie steht es um die Aktualisierung der ursprünglichen Tags ?
 
Was für ein HMI programmierst du da? Eine PC Runtime? Advanced? TIA? Was für eine Version?

Mit dem Skript von der Siemens Seite zur F(x) Kurve
Was für ein Skript von welcher Siemens Seite?

Ich habe alles kopiert und unbenannt, leider schreibt er mir die Werte aus dem 2. FB aber nicht in die "2." CSV sondern nur mist, Siehe Screenshot.
Kommt dein Skript überhaupt bis zum Ende oder wird es schon vorher beendet?
Was meinst du mit "2. FB"?

CloseAllLogs

Do While SmartTags("LogsAreClosed") = False ' Wait until all logs are closed
Loop
(...)

OpenAllLogs

Do While SmartTags("LogsAreClosed") = True 'Wait until all logs are opened
Loop
Wodurch ändert sich der Wert der HMI-Variable "LogsAreClosed"?


Hinweis: Bitte benutze zum posten von Code die Code-Tags, dann ist der Code viel besser lesbar und Einrückungen werden nicht entfernt.
 
wenn das Script eine Kopie des Scriptes für die erste Kurve ist, von der du die Werte geschrieben bekommst dann wird aus meiner Sicht das Script selbst okay sein. Es kann also nur am adressieren des/der Array's liegen. Das wäre dann diese Zeile :
Code:
Set arrx = SmartTags("Input_X_1")
Set arry = SmartTags("Input_Y_1")
- stimmen diese Tags denn ?
- wie sehen die in dem anderen Script aus ?
- steht nur Unsinn in deiner CSV oder stimmen auch Werte ?
- wie steht es um die Aktualisierung der ursprünglichen Tags ?

Im "original" Siemens Script, heisst die Variable "Input_X", für die 2. Kurve habe ich zum Testen die Variable alle mit _1 umgenannt.

-Ne steht nur Mist in der 2. CSV (Siehe Screenshot)
-Ich habe die Werte fest in einen DB geschrieben, für X und Y aktuell verändert sich da noch nix.

Was für ein HMI programmierst du da? Eine PC Runtime? Advanced? TIA? Was für eine Version?


Was für ein Skript von welcher Siemens Seite?


Kommt dein Skript überhaupt bis zum Ende oder wird es schon vorher beendet?
Was meinst du mit "2. FB"?


Wodurch ändert sich der Wert der HMI-Variable "LogsAreClosed"?


Hinweis: Bitte benutze zum posten von Code die Code-Tags, dann ist der Code viel besser lesbar und Einrückungen werden nicht entfernt.
HMI Tia RT Advanced V17 (Tia Portal V19)

Script aus dem Beispiel :
: https://support.industry.siemens.com/cs/at/de/view/109481693

Ja ich vermute einfach mal das es durchläuft, ich habe ja bis auf die Var:Namen nichts verändert.

Ich habe den FB aus dem Beispiel ein 2. mal aufgerufen für die 2. Kurve. Sorry etwas blöd ausgedrückt von mir.


Danke für eure Hilfe! Wäre super wenn ich das noch zum laufen bekomme...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kommt denn die Systemmeldung "Load new file" vom Ende deines Skriptes? Kannst du Systemmeldungen sehen, d.h. hast du eine Meldeanzeige für Systemmeldungen (am besten aus dem Meldepuffer)?
Guten Morgen nochmal Danke für eure Hilfe, anbei Screenshot der Meldeliste
1737010637284.png


Ähh ... wie heißt denn die Array-Variable bei dir ? Also mit welchem Namen steht sie bei dir in der Variablenliste ?
"Input_x" ist vom Origianl Skript, bei mir Kurve 1. Für Kurve 2 habe ich sie "Input_x_1" genannt. Anbei Screenshot.#
1737010711182.png

Über den Button "Aktualisiere Kurve" rufe ich beide Skripts auf. (Die Funktionen Links sind ausser Kraft, da ich ja nur eine Simple Darstellung brauche vorerst wie im Screenshot

1737010804717.png
 
Etwas geht schief mit entweder
Code:
Do While SmartTags("LogsAreClosed") = False ' Wait until all logs are closed
Loop
oder
Code:
Do While SmartTags("LogsAreClosed") = True 'Wait until all logs are opened
Loop
Es hat vielleicht zu tun mit die ADO Fehler.

Umplaziere die On Error Resume Next nach oben.

Füge mehrere Debug Zeilen zu, in diesen Stil:
Code:
If Err.Number <> 0 Then
    ShowSystemAlarm "Zeile xxx " & Err.Number & " " & Err.Description
    Err.Clear
    OpenAllLogs
    TrendControl_1 = 2 ' RetVal: 2= error 
    Exit Function
End If
 
Es kann auch sein es gibt eine Timing Problem.
Du rufst 2 Skripte auf mit dieselbe Button.
Das wurde bedeuten das die erste Skript durchlauft bevor die nächste. Aber vielleicht stört die Systemfunktionen von CloseAllLogs un OpenAllLogs sich wenn sie zu schnell aufgerufen werden.

Ich habe eine f(x) mit 2 Kurven, aber ich habe einfach das eizelne Skript mit den 2. Kurve erweitert. Nicht 2 Skripte gemacht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

ich würde es mit den CloseLogs anders lösen. Ich hatte das Problem mit Audit und PM_Quality etc. dass es nicht zuverlässig geklappt hat mit CloseLogs. Je nach Gösse hat das CloseLogs manchmal recht lange gedauert. Ich habe ein Script das ich auslöse um die Logs zu schliessen und an der Meldung "80019 Alle Archive wurden erfolgreich geschlossen" bei gekommen habe ich das eigentliche Script ausgeführt. In deinem Fall hinter der ersten While Schleife. Dann bist du immer sicher, dass die Logs geschlossen sind. Genau so das OpenLogs. "80026 Initialisierung der Archive beendet. Alle Archive OK."
Des Weiteren, wie @JesperMP schreibt, ich würde beide Kurven in einem Script verarbeiten.
 
Zurück
Oben