zeitlich gesteuertes Logging

  • Hi und Hallo,

    ich bin neu hier und benötige etwas Hilfe bei einem Problem.

    Ich habe mich an AutoIT und der LogAitDave_UDF.au3 für ein Logo-Programm versucht. Die Kommunikation haut super hin und auch meine gewandelten Analog-Werte kommen auf dem PC an.
    Nun möchte ich das Programm in sofern abwandeln / erweitern, dass bestimmte Analog- und Status-Werte in zeitlichen Abständen (10 Minuten) in ein Logfile geschrieben werden. Ansatzweise hab ich das auch hinbekommen, aber irgendwie schreibt mir die Funktion dann eine Minute lang Zeile um Zeile ins File. Ich möchte aber nur eine Zeile und dann soll erst nach 10 Minuten wieder eingetragen werden

    Hier ein Auszug wie ich es versucht habe zu realisieren:

    [autoit]


    _include <File.au3>
    ....
    $Datum = "" & @YEAR & @MON & @MDAY & ".csv"
    $logeintrag = ";" & $DisplayDB_1 & ";" & $DisplayDB_2 & ";" & $DisplayDB_4 & ";" & $DisplayDB_6
    If @MIN=00 then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)

    ElseIf @min=10 Then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)

    ElseIf @min=20 Then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)

    ElseIf @min=30 Then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)

    ElseIf @min=40 Then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)

    ElseIf @min=50 Then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)

    EndIf

    [/autoit]

    Ich muss dazu sagen, das ganze ist Neuland hier für mich, auch wenn ich auf Arbeit mit der Programmierung von Steuerungen zu tun habe.

    Schon mal Danke im Vorraus für euere Vorschläge und Hilfen

    Einmal editiert, zuletzt von Flitzpiepe84 (20. März 2014 um 16:55)

  • If @MIN=00 then ... ergibt nunmal im Idealfall eine Minute lang TRUE. Also führt er auch die dazugehörige Aktion die gesamte Minute immer und immer wieder aus.

    Versuch dich mal an einem Timer. Einen Anfang findest du in der Hilfe bei TimerInit()

  • Also ich würde AdLibRegister nehmen. Und _include gibts nicht, wenn dann #include.

    Ich muss dazu sagen, das ganze ist Neuland hier für mich, auch wenn ich auf Arbeit mit der Programmierung von Steuerungen zu tun habe.


    Würde jetzt ne Logo nicht als Steuerung bezeichen ^^. Eher Spielzeug.

  • Würde jetzt ne Logo nicht als Steuerung bezeichen ^^. Eher Spielzeug.

    Sicherlich ist eine Logo keine richtige oder vollwertige Steuerung, aber für das was sie hier realisieren soll, ist es vollkommen ausreichend. Wir haben hier auch noch anderes wie Logo! :D

  • wenn dein Problem nur ist, dass zu oft geloggt wird, dann kannst du evtl. so machen:

    Spoiler anzeigen
    [autoit]


    $Datum = "\" & @YEAR & @MON & @MDAY & ".csv"
    $logeintrag = ";" & $DisplayDB_1 & ";" & $DisplayDB_2 & ";" & $DisplayDB_4 & ";" & $DisplayDB_6
    If $i = 0 And @MIN=00 then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)
    $i = 1
    ElseIf $i = 0 And @min=10 Then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)
    $i = 1
    ElseIf $i = 0 And @min=20 Then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)
    $i = 1
    ElseIf $i = 0 And @min=30 Then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)
    $i = 1
    ElseIf $i = 0 And @min=40 Then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)
    $i = 1
    ElseIf $i = 0 And @min=50 Then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)
    $i = 1
    Else
    $i = 0
    EndIf

    [/autoit]
  • Das geht noch kürzer:

    [autoit]

    $Datum = "\" & @YEAR & @MON & @MDAY & ".csv"
    $logeintrag = ";" & $DisplayDB_1 & ";" & $DisplayDB_2 & ";" & $DisplayDB_4 & ";" & $DisplayDB_6
    If $i = 0 And (@min=00 or @min=10 or @min=20 or @min=30 or @min=40 or @min=50) Then
    _FileWriteLog(@ScriptDir & $Datum, $logeintrag)
    $i = 1
    EndIf

    [/autoit]
  • Also wenn ihr schon dabei seid den Code zu verschönern... ;)

    [autoit]

    Local $sLogFile, $sText
    $sLogFile = @ScriptDir & "\" & @YEAR & @MON & @MDAY & ".csv"
    $sText = ";" & $DisplayDB_1 & ";" & $DisplayDB_2 & ";" & $DisplayDB_4 & ";" & $DisplayDB_6
    If Mod(@MIN, 10) = 0 Then FileWrite($sLogFile, $sText)

    [/autoit]

    LG
    Christoph :)

  • hach, da war man mal 2 Tage nicht anwesend und schon hat man soviele Vorschläge zum Ausprobieren... Ich werd das ganze mal austesten und dann Bescheid geben was ich verwendet habe.

    Jedenfalls super Hilfe hier... :thumbup:

  • so ich habe mich jetzt für folgende Variante entschieden um es zum Funktionieren zu bewegen:

    [autoit]

    Local $sZuluft = 0, $sMitte = 0, $sHarz = 0, $sSollwert = 0, $sLogFile = 0, $sText = 0
    $sZuluft = GUICtrlRead($DisplayDB_1)
    $sMitte = GUICtrlRead($DisplayDB_2)
    $sHarz = GUICtrlRead($DisplayDB_4)
    $sSollwert = GUICtrlRead($DisplayDB_6)
    $sLogFile = @ScriptDir & "\" & @YEAR & "-" & @MON & "-" & @MDAY & ".csv"
    $sText = @YEAR & "-" & @MON & "-" & @MDAY & ";" & @hour & ":" & @min & ";" & $sZuluft & ";" & $sMitte & ";" & $sHarz & ";" & $sSollwert & @CRLF
    If (@min=00 or @min=10 or @min=20 or @min=30 or @min=40 or @min=50) and @sec = 00 Then
    FileWrite($sLogFile, $sText)
    sleep (1000)
    EndIf

    [/autoit]

    Funktioniert auch soweit, sauberes Logfile, lässt sich dann mit Excel zu einem Diagramm verarbeiten...

    Nur jetzt hab ich das Problem, dass ich nach einigen Stunden Programm-Laufzeit einen AutoIt-Fehler der .exe bekomme: Error: allocating memory. Gibt nur die Möglichkeit OK zu klicken und dann ist das Programm zu. Neustart ist möglich, aber Fehler erscheint wieder. Wenn ich mir den Taskmanager aufrufe, dann sehe ich, dass die erstellte .exe immer mehr Speicher belegt.

    Woran könnte das liegen? Werden vielleicht irgendwie Variablen (Arrays?, Strings?, was weiß ich nicht...) mit ihren Werten nicht zurückgesetzt.
    Ich würde ja das Script mal posten, wenn jemand mal drauf schauen will.
    Mir wäre da jedenfall ziemlich geholfen, ich hab von reiner Software-Programmierung nicht allzuviel Plan bisher. Meine Programmier-Kenntnisse beschränken sich mehr auf Siemens-Steuerungen ala S7 und Co

  • Ohne das komplette Script wird dir hier niemand helfen können, also poste es einfach mal. ;)
    (und die Lösung per Modulo war schöner :P :whistling: )

    ausprobiert hab ich das mit dem Modulo.Das Problem war aber irgendwie, dass ich trotzdem innerhalb der Minute mehrere Einträge im Logfile hatte...

    Warum nicht AdLibRegister mit 600000 ms?

    wenn ich wüßte wie ich das programmiere, dann würd ich mir das vielleicht auch mal anschauen, aber bisher bin ich da noch nicht dahinter gestiegen wie das mit dem AdLibRegister funktioniert ...

  • so dann mal hier das komplette Script, die LogAitDave_V3.0 stammt von "vivus" sowie Großteil des Scriptes für die Visualisierung. Ich habe hier nur ein paar Felder noch eingefügt das Loggen der Werte und die Formatierung analoger Werte

    Spoiler anzeigen
    [autoit]

    ; FILEINSTALL
    FileInstall(".\libnodave.dll",".\libnodave.dll")
    FileInstall(".\LogAitDave_V3.0.exe",".\LogAitDave_V3.0.exe")
    FileInstall(".\LAD.ico",".\LAD.ico")
    FileInstall(".\Visualisierung.kxf",".\Visualisierung.kxf")

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; includes für Softwareverarbeitung
    #include <Constants.au3>
    #include <String.au3>
    #include <Array.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; die UDF für die LogAitDave
    #include "LogAitDave_UDF.au3"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{ESC}", "Terminate") ; hier wird ein HOTKEY gesetzt auf die Taste ESC

    [/autoit] [autoit][/autoit] [autoit]

    ; hier die Gui in Koda erstellt
    #Region ### START Koda GUI section ### Form=H:\Logimat\Release20130116\Logimat-Visualisierung.kxf
    $Form1_1 = GUICreate("Visualisierung für Logimat-Klappensteuerung", @DesktopWidth, @DesktopHeight - 72, 0, 0)
    GUISetState (@SW_MAXIMIZE)
    $Label1 = GUICtrlCreateLabel("IP", 13, 13, 14, 17)
    $imput_ip = GUICtrlCreateInput("192.168.2.177", 13, 33, 98, 21)
    $Start = GUICtrlCreateButton("Start", 13, 229, 100, 20)
    $Label2 = GUICtrlCreateLabel("Refresh Time", 13, 65, 67, 17)
    $imput_refreshT = GUICtrlCreateInput("100", 13, 85, 98, 21)
    $Input_1_8 = GUICtrlCreateGroup("Input_1_8", 130, 13, 72, 202)
    $CB_I01 = GUICtrlCreateCheckbox("I01", 137, 52, 46, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I02 = GUICtrlCreateCheckbox("I02", 137, 72, 46, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I03 = GUICtrlCreateCheckbox("I03", 137, 91, 46, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I04 = GUICtrlCreateCheckbox("I04", 137, 111, 46, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I05 = GUICtrlCreateCheckbox("I05", 137, 130, 46, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I06 = GUICtrlCreateCheckbox("I06", 137, 150, 46, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I07 = GUICtrlCreateCheckbox("I07", 137, 169, 46, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $L_I_1_8 = GUICtrlCreateLabel("000", 137, 33, 22, 17)
    $CB_I08 = GUICtrlCreateCheckbox("I08", 137, 189, 46, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Merker1_8 = GUICtrlCreateGroup("Merker1_8", 299, 13, 72, 202)
    $L_M_1_8 = GUICtrlCreateLabel("000", 306, 33, 22, 17)
    $CB_M01 = GUICtrlCreateCheckbox("M01", 306, 52, 52, 14)
    $CB_M02 = GUICtrlCreateCheckbox("M02", 306, 72, 52, 13)
    $CB_M03 = GUICtrlCreateCheckbox("M03", 306, 91, 52, 14)
    $CB_M04 = GUICtrlCreateCheckbox("M04", 306, 111, 52, 13)
    $CB_M05 = GUICtrlCreateCheckbox("M05", 306, 130, 52, 14)
    $CB_M06 = GUICtrlCreateCheckbox("M06", 306, 150, 52, 13)
    $CB_M07 = GUICtrlCreateCheckbox("M07", 306, 169, 52, 14)
    $CB_M08 = GUICtrlCreateCheckbox("M08", 306, 189, 52, 13)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Input_9_16 = GUICtrlCreateGroup("Input_9_16", 130, 221, 72, 202)
    $CB_I09 = GUICtrlCreateCheckbox("I09", 137, 260, 46, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I10 = GUICtrlCreateCheckbox("I10", 137, 280, 46, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I11 = GUICtrlCreateCheckbox("I11", 137, 299, 46, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I12 = GUICtrlCreateCheckbox("I12", 137, 319, 46, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I13 = GUICtrlCreateCheckbox("I13", 137, 338, 46, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I14 = GUICtrlCreateCheckbox("I14", 137, 358, 46, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I15 = GUICtrlCreateCheckbox("I15", 137, 377, 46, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I16 = GUICtrlCreateCheckbox("I16", 137, 397, 46, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $L_I_9_16 = GUICtrlCreateLabel("000", 137, 241, 22, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Input_17_24 = GUICtrlCreateGroup("Input_17_24", 215, 13, 72, 202)
    $CB_I17 = GUICtrlCreateCheckbox("I17", 222, 52, 46, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I18 = GUICtrlCreateCheckbox("I18", 222, 72, 46, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I19 = GUICtrlCreateCheckbox("I19", 222, 91, 46, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I20 = GUICtrlCreateCheckbox("I20", 222, 111, 46, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I21 = GUICtrlCreateCheckbox("I21", 222, 130, 39, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I22 = GUICtrlCreateCheckbox("I22", 222, 150, 39, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I23 = GUICtrlCreateCheckbox("I23", 222, 169, 46, 14)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $CB_I24 = GUICtrlCreateCheckbox("I24", 222, 189, 46, 13)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $L_I_17_24 = GUICtrlCreateLabel("000", 222, 33, 22, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Merker_9_16 = GUICtrlCreateGroup("Merker_9_16", 299, 221, 72, 202)
    $L_M_9_16 = GUICtrlCreateLabel("000", 306, 241, 22, 17)
    $CB_M09 = GUICtrlCreateCheckbox("M09", 306, 260, 52, 14)
    $CB_M10 = GUICtrlCreateCheckbox("M10", 306, 280, 52, 13)
    $CB_M11 = GUICtrlCreateCheckbox("M11", 306, 299, 52, 14)
    $CB_M12 = GUICtrlCreateCheckbox("M12", 306, 319, 46, 13)
    $CB_M13 = GUICtrlCreateCheckbox("M13", 306, 338, 46, 14)
    $CB_M14 = GUICtrlCreateCheckbox("M14", 306, 358, 46, 13)
    $CB_M15 = GUICtrlCreateCheckbox("M15", 306, 377, 46, 14)
    $CB_M16 = GUICtrlCreateCheckbox("M16", 306, 397, 46, 13)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Merker_17_24 = GUICtrlCreateGroup("Merker_17_24", 384, 13, 78, 202)
    $L_M_17_24 = GUICtrlCreateLabel("000", 391, 33, 22, 17)
    $CB_M17 = GUICtrlCreateCheckbox("M17", 391, 52, 52, 14)
    $CB_M18 = GUICtrlCreateCheckbox("M18", 391, 72, 52, 13)
    $CB_M19 = GUICtrlCreateCheckbox("M19", 391, 91, 52, 14)
    $CB_M20 = GUICtrlCreateCheckbox("M20", 391, 111, 46, 13)
    $CB_M21 = GUICtrlCreateCheckbox("M21", 391, 130, 52, 14)
    $CB_M22 = GUICtrlCreateCheckbox("M22", 391, 150, 46, 13)
    $CB_M23 = GUICtrlCreateCheckbox("M23", 391, 169, 46, 14)
    $CB_M24 = GUICtrlCreateCheckbox("M24", 391, 189, 46, 13)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Merker_25_32 = GUICtrlCreateGroup("Merker_25_32", 384, 221, 78, 202)
    $L_M_25_32 = GUICtrlCreateLabel("000", 391, 241, 22, 17)
    $CB_M25 = GUICtrlCreateCheckbox("M25", 391, 260, 46, 14)
    $CB_M26 = GUICtrlCreateCheckbox("M26", 391, 280, 46, 13)
    $CB_M27 = GUICtrlCreateCheckbox("M27", 391, 299, 46, 14)
    $CB_M28 = GUICtrlCreateCheckbox("M28", 391, 319, 46, 13)
    $CB_M29 = GUICtrlCreateCheckbox("M29", 391, 338, 46, 14)
    $CB_M30 = GUICtrlCreateCheckbox("M30", 391, 358, 46, 13)
    $CB_M31 = GUICtrlCreateCheckbox("M31", 391, 377, 46, 14)
    $CB_M32 = GUICtrlCreateCheckbox("M32", 391, 397, 46, 13)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Out_1_8 = GUICtrlCreateGroup("Out_1_8", 475, 13, 59, 202)
    $L_Q_1_8 = GUICtrlCreateLabel("000", 482, 33, 22, 17)
    $CB_Q01 = GUICtrlCreateCheckbox("Q01", 482, 52, 52, 14)
    $CB_Q02 = GUICtrlCreateCheckbox("Q02", 482, 72, 52, 13)
    $CB_Q03 = GUICtrlCreateCheckbox("Q03", 482, 91, 52, 14)
    $CB_Q04 = GUICtrlCreateCheckbox("Q04", 482, 111, 46, 13)
    $CB_Q05 = GUICtrlCreateCheckbox("Q05", 482, 130, 46, 14)
    $CB_Q06 = GUICtrlCreateCheckbox("Q06", 482, 150, 46, 13)
    $CB_Q07 = GUICtrlCreateCheckbox("Q07", 482, 169, 46, 14)
    $CB_Q08 = GUICtrlCreateCheckbox("Q08", 482, 189, 46, 13)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Out_9_16 = GUICtrlCreateGroup("Out_9_16", 475, 221, 59, 202)
    $L_Q_9_16 = GUICtrlCreateLabel("000", 482, 241, 22, 17)
    $CB_Q09 = GUICtrlCreateCheckbox("Q09", 482, 260, 46, 14)
    $CB_Q10 = GUICtrlCreateCheckbox("Q10", 482, 280, 46, 13)
    $CB_Q11 = GUICtrlCreateCheckbox("Q11", 482, 299, 46, 14)
    $CB_Q12 = GUICtrlCreateCheckbox("Q12", 482, 319, 46, 13)
    $CB_Q13 = GUICtrlCreateCheckbox("Q13", 482, 338, 46, 14)
    $CB_Q14 = GUICtrlCreateCheckbox("Q14", 482, 358, 46, 13)
    $CB_Q15 = GUICtrlCreateCheckbox("Q15", 482, 377, 46, 14)
    $CB_Q16 = GUICtrlCreateCheckbox("Q16", 482, 397, 46, 13)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Stop = GUICtrlCreateButton("Stop", 13, 253, 100, 20)
    $Label3 = GUICtrlCreateLabel("DB->", 13, 117, 28, 17)
    $I_DB1 = GUICtrlCreateInput("0", 46, 117, 20, 21)
    $Label4 = GUICtrlCreateLabel("=", 72, 117, 10, 17)
    $DisplayDB_1 = GUICtrlCreateLabel("00,00", 85, 117, 28, 17)
    $Label5 = GUICtrlCreateLabel("DB->", 13, 143, 28, 17)
    $I_DB2 = GUICtrlCreateInput("2", 46, 143, 20, 21)
    $Label6 = GUICtrlCreateLabel("=", 72, 143, 10, 17)
    $Label7 = GUICtrlCreateLabel("DB->", 13, 169, 28, 17)
    $I_DB4 = GUICtrlCreateInput("4", 46, 169, 20, 21)
    $Label9 = GUICtrlCreateLabel("=", 72, 169, 10, 17)
    $DisplayDB_2 = GUICtrlCreateLabel("00,00", 85, 143, 28, 17)
    $Label8 = GUICtrlCreateLabel("DB->", 13, 195, 28, 17)
    $I_DB6 = GUICtrlCreateInput("6", 46, 195, 20, 21)
    $DisplayDB_4 = GUICtrlCreateLabel("00,00", 85, 169, 28, 17)
    $Label10 = GUICtrlCreateLabel("=", 72, 195, 10, 17)
    $DisplayDB_6 = GUICtrlCreateLabel("00,00", 85, 195, 28, 17)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    ;############## ENDe der GUI ( des User interfaces ) ###########################

    [/autoit] [autoit][/autoit] [autoit]

    ;~ ; handler Array's für das setzen der von der Logo intern beschalteten zustände auf das User interface
    Dim $GUI_I1to8_Handler[8]
    $GUI_I1to8_Handler[0] = $CB_I01
    $GUI_I1to8_Handler[1] = $CB_I02
    $GUI_I1to8_Handler[2] = $CB_I03
    $GUI_I1to8_Handler[3] = $CB_I04
    $GUI_I1to8_Handler[4] = $CB_I05
    $GUI_I1to8_Handler[5] = $CB_I06
    $GUI_I1to8_Handler[6] = $CB_I07
    $GUI_I1to8_Handler[7] = $CB_I08

    [/autoit] [autoit][/autoit] [autoit]

    Dim $GUI_I9to16_Handler[8]
    $GUI_I9to16_Handler[0] = $CB_I09
    $GUI_I9to16_Handler[1] = $CB_I10
    $GUI_I9to16_Handler[2] = $CB_I11
    $GUI_I9to16_Handler[3] = $CB_I12
    $GUI_I9to16_Handler[4] = $CB_I13
    $GUI_I9to16_Handler[5] = $CB_I14
    $GUI_I9to16_Handler[6] = $CB_I15
    $GUI_I9to16_Handler[7] = $CB_I16

    [/autoit] [autoit][/autoit] [autoit]

    Dim $GUI_I17to24_Handler[8]
    $GUI_I17to24_Handler[0] = $CB_I17
    $GUI_I17to24_Handler[1] = $CB_I18
    $GUI_I17to24_Handler[2] = $CB_I19
    $GUI_I17to24_Handler[3] = $CB_I20
    $GUI_I17to24_Handler[4] = $CB_I21
    $GUI_I17to24_Handler[5] = $CB_I22
    $GUI_I17to24_Handler[6] = $CB_I23
    $GUI_I17to24_Handler[7] = $CB_I24

    [/autoit] [autoit][/autoit] [autoit]

    Dim $GUI_M1to8_Handler[8]
    $GUI_M1to8_Handler[0] = $CB_M01
    $GUI_M1to8_Handler[1] = $CB_M02
    $GUI_M1to8_Handler[2] = $CB_M03
    $GUI_M1to8_Handler[3] = $CB_M04
    $GUI_M1to8_Handler[4] = $CB_M05
    $GUI_M1to8_Handler[5] = $CB_M06
    $GUI_M1to8_Handler[6] = $CB_M07
    $GUI_M1to8_Handler[7] = $CB_M08

    [/autoit] [autoit][/autoit] [autoit]

    Dim $GUI_M9to16_Handler[8]
    $GUI_M9to16_Handler[0] = $CB_M09
    $GUI_M9to16_Handler[1] = $CB_M10
    $GUI_M9to16_Handler[2] = $CB_M11
    $GUI_M9to16_Handler[3] = $CB_M12
    $GUI_M9to16_Handler[4] = $CB_M13
    $GUI_M9to16_Handler[5] = $CB_M14
    $GUI_M9to16_Handler[6] = $CB_M15
    $GUI_M9to16_Handler[7] = $CB_M16

    [/autoit] [autoit][/autoit] [autoit]

    Dim $GUI_M17to24_Handler[8]
    $GUI_M17to24_Handler[0] = $CB_M17
    $GUI_M17to24_Handler[1] = $CB_M18
    $GUI_M17to24_Handler[2] = $CB_M19
    $GUI_M17to24_Handler[3] = $CB_M20
    $GUI_M17to24_Handler[4] = $CB_M21
    $GUI_M17to24_Handler[5] = $CB_M22
    $GUI_M17to24_Handler[6] = $CB_M23
    $GUI_M17to24_Handler[7] = $CB_M24

    [/autoit] [autoit][/autoit] [autoit]

    Dim $GUI_M25to32_Handler[8]
    $GUI_M25to32_Handler[0] = $CB_M25
    $GUI_M25to32_Handler[1] = $CB_M26
    $GUI_M25to32_Handler[2] = $CB_M27
    $GUI_M25to32_Handler[3] = $CB_M28
    $GUI_M25to32_Handler[4] = $CB_M29
    $GUI_M25to32_Handler[5] = $CB_M30
    $GUI_M25to32_Handler[6] = $CB_M31
    $GUI_M25to32_Handler[7] = $CB_M32

    [/autoit] [autoit][/autoit] [autoit]

    Dim $GUI_Q1to8_Handler[8]
    $GUI_Q1to8_Handler[0] = $CB_Q01
    $GUI_Q1to8_Handler[1] = $CB_Q02
    $GUI_Q1to8_Handler[2] = $CB_Q03
    $GUI_Q1to8_Handler[3] = $CB_Q04
    $GUI_Q1to8_Handler[4] = $CB_Q05
    $GUI_Q1to8_Handler[5] = $CB_Q06
    $GUI_Q1to8_Handler[6] = $CB_Q07
    $GUI_Q1to8_Handler[7] = $CB_Q08

    [/autoit] [autoit][/autoit] [autoit]

    Dim $GUI_Q9to16_Handler[8]
    $GUI_Q9to16_Handler[0] = $CB_Q09
    $GUI_Q9to16_Handler[1] = $CB_Q10
    $GUI_Q9to16_Handler[2] = $CB_Q11
    $GUI_Q9to16_Handler[3] = $CB_Q12
    $GUI_Q9to16_Handler[4] = $CB_Q13
    $GUI_Q9to16_Handler[5] = $CB_Q14
    $GUI_Q9to16_Handler[6] = $CB_Q15
    $GUI_Q9to16_Handler[7] = $CB_Q16

    [/autoit] [autoit][/autoit] [autoit]

    ;############################### Hier die Main schleife !! ( hier arbeitet das Programm ) ##########################

    [/autoit] [autoit][/autoit] [autoit]

    Global $refresh;
    Global $isStarted = 0 ; variable die speichert, ob start gedrückt wurde
    Global $nMsg; ; variable welche den inhalt der Gui Message zwischenspeichert.
    Global $call = 1; durchlaufzähler, welcher die abarbeitung verschiedener befehle auf verschiedene durchläufe sortiert,
    ; Da sonst die Gui träge erscheint. Ein aufruf oder abruf von oder zu der Logo dauert rund 50ms
    ; pro durchlauf also nur ein aufruf.

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Local $begin = TimerInit() ; initialisierung einer stoppuhr

    [/autoit] [autoit][/autoit] [autoit]

    $nMsg = GUIGetMsg() ; Gui Message in zwischenvariable speichern
    Switch $nMsg ; der main case verteiler ;
    Case $Start ; wenn Start gedrückt wurde
    GUICtrlSetState($Start, $GUI_DISABLE) ; the label is in disable state
    GUICtrlSetState($imput_refreshT, $GUI_DISABLE) ; the label is in disable state
    GUICtrlSetState($Stop, $GUI_ENABLE) ; the label is in disable state
    GUICtrlSetState($imput_ip, $GUI_DISABLE) ; the label is in disable state
    GUICtrlSetState($I_DB1, $GUI_DISABLE) ; the label is in disable state
    GUICtrlSetState($I_DB2, $GUI_DISABLE) ; the label is in disable state
    GUICtrlSetState($I_DB4, $GUI_DISABLE) ; the label is in disable state
    GUICtrlSetState($I_DB6, $GUI_DISABLE) ; the label is in disable state

    [/autoit] [autoit][/autoit] [autoit]

    ; die IP aus der Gui Holen
    _LAD_SetIP(GUICtrlRead($imput_ip))
    $refresh = GUICtrlRead($imput_refreshT) ; abspeichern der usereingabe
    $isStarted = 1

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Case $Stop ; wenn stop gedrückt wurde
    GUICtrlSetState($Start, $GUI_ENABLE) ; the label is in disable state
    GUICtrlSetState($imput_refreshT, $GUI_ENABLE) ; the label is in disable state
    GUICtrlSetState($Stop, $GUI_DISABLE) ; the label is in disable state
    GUICtrlSetState($imput_ip, $GUI_ENABLE) ; the label is in disable state
    GUICtrlSetState($I_DB1, $GUI_ENABLE) ; the label is in disable state
    GUICtrlSetState($I_DB2, $GUI_ENABLE) ; the label is in disable state
    GUICtrlSetState($I_DB4, $GUI_ENABLE) ; the label is in disable state
    GUICtrlSetState($I_DB6, $GUI_ENABLE) ; the label is in disable state

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($imput_refreshT, $refresh)

    [/autoit] [autoit][/autoit] [autoit]

    $isStarted = 0

    [/autoit] [autoit][/autoit] [autoit]

    Case $CB_Q01 ; wenn Checkbox angeklickt wurde
    _LAD_Q_tougle(1);_Q_chance($CB_Q01, 1, GUICtrlRead($CB_Q01))
    Case $CB_Q02
    _LAD_Q_tougle(2);_Q_chance($CB_Q02, 2)
    Case $CB_Q03
    _LAD_Q_tougle(3);_Q_chance($CB_Q03, 3)
    Case $CB_Q04
    _LAD_Q_tougle(4);_Q_chance($CB_Q04, 4)
    Case $CB_Q05
    _LAD_Q_tougle(5);_Q_chance($CB_Q05, 5)
    Case $CB_Q06
    _LAD_Q_tougle(6);_Q_chance($CB_Q06, 6)
    Case $CB_Q07
    _LAD_Q_tougle(7);_Q_chance($CB_Q07, 7)
    Case $CB_Q08
    _LAD_Q_tougle(8);_Q_chance($CB_Q08, 8)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Case $CB_Q09
    _LAD_Q_tougle(9);_Q_chance($CB_Q09, 9)
    Case $CB_Q10
    _LAD_Q_tougle(10);_Q_chance($CB_Q10, 10)
    Case $CB_Q11
    _LAD_Q_tougle(11);_Q_chance($CB_Q11, 11)
    Case $CB_Q12
    _LAD_Q_tougle(12);_Q_chance($CB_Q12, 12)
    Case $CB_Q13
    _LAD_Q_tougle(13);_Q_chance($CB_Q13, 13)
    Case $CB_Q14
    _LAD_Q_tougle(14);_Q_chance($CB_Q14, 14)
    Case $CB_Q15
    _LAD_Q_tougle(15);_Q_chance($CB_Q15, 15)
    Case $CB_Q16
    _LAD_Q_tougle(16);_Q_chance($CB_Q16, 16)

    [/autoit] [autoit][/autoit] [autoit]

    Case $CB_M01
    _LAD_M_tougle(1);_M_chance($CB_M01, 1)
    Case $CB_M02
    _LAD_M_tougle(2);_M_chance($CB_M02, 2)
    Case $CB_M03
    _LAD_M_tougle(3);_M_chance($CB_M03, 3)
    Case $CB_M04
    _LAD_M_tougle(4);_M_chance($CB_M04, 4)
    Case $CB_M05
    _LAD_M_tougle(5);_M_chance($CB_M05, 5)
    Case $CB_M06
    _LAD_M_tougle(6);_M_chance($CB_M06, 6)
    Case $CB_M07
    _LAD_M_tougle(7);_M_chance($CB_M07, 7)
    Case $CB_M08
    _LAD_M_tougle(8);_M_chance($CB_M08, 8)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Case $CB_M09
    _LAD_M_tougle(9);_M_chance($CB_M09, 9)
    Case $CB_M10
    _LAD_M_tougle(10);_M_chance($CB_M10, 10)
    Case $CB_M11
    _LAD_M_tougle(11)
    Case $CB_M12
    _LAD_M_tougle(12)
    Case $CB_M13
    _LAD_M_tougle(13)
    Case $CB_M14
    _LAD_M_tougle(14)
    Case $CB_M15
    _LAD_M_tougle(15)
    Case $CB_M16
    _LAD_M_tougle(16)

    [/autoit] [autoit][/autoit] [autoit]

    Case $CB_M17
    _LAD_M_tougle(17)
    Case $CB_M18
    _LAD_M_tougle(18)
    Case $CB_M19
    _LAD_M_tougle(19)
    Case $CB_M20
    _LAD_M_tougle(20)
    Case $CB_M21
    _LAD_M_tougle(21)
    Case $CB_M22
    _LAD_M_tougle(22)
    Case $CB_M23
    _LAD_M_tougle(23)
    Case $CB_M24
    _LAD_M_tougle(24)

    [/autoit] [autoit][/autoit] [autoit]

    Case $CB_M25
    _LAD_M_tougle(25)
    Case $CB_M26
    _LAD_M_tougle(26)
    Case $CB_M27
    _LAD_M_tougle(27)
    Case $CB_M28
    _LAD_M_tougle(28)
    Case $CB_M29
    _LAD_M_tougle(29)
    Case $CB_M30
    _LAD_M_tougle(30)
    Case $CB_M31
    _LAD_M_tougle(31)
    Case $CB_M32
    ;~ _LAD_M_tougle(32)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Case $GUI_EVENT_CLOSE ; wenn auf schließen gedrückt wird
    $isStarted = 0
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case Else ; wenn nichts gedrückt wird
    ; Gui Funktionen
    Sleep($refresh) ; eine pause

    [/autoit] [autoit][/autoit] [autoit]

    If $isStarted = 1 Then ; abfragen, ob Start betätigt wurde

    [/autoit] [autoit][/autoit] [autoit]

    ; connect !!

    [/autoit] [autoit][/autoit] [autoit]

    ; nur ein LOGO call pro GUI aktuialisierung !! sonst wirds zeitkritisch

    [/autoit] [autoit][/autoit] [autoit]

    If $call = 1 Then
    $array = _LAD_ReadAllInputs() ; holt die imput register aus der logo
    GUICtrlSetData($L_I_1_8, $array[1])
    _CB_Update($GUI_I1to8_Handler, $array[1])
    GUICtrlSetData($L_I_9_16, $array[2])
    _CB_Update($GUI_I9to16_Handler, $array[2])
    GUICtrlSetData($L_I_17_24, $array[3])
    _CB_Update($GUI_I17to24_Handler, $array[3])
    ElseIf $call = 2 Then
    $array = _LAD_ReadAllMerker()
    GUICtrlSetData($L_M_1_8, $array[1])
    GUICtrlSetData($L_M_9_16, $array[2])
    GUICtrlSetData($L_M_17_24, $array[3])
    _CB_Update($GUI_M1to8_Handler, $array[1], $GUI_INDETERMINATE)
    _CB_Update($GUI_M9to16_Handler, $array[2], $GUI_INDETERMINATE)
    _CB_Update($GUI_M17to24_Handler, $array[3], $GUI_INDETERMINATE)
    ElseIf $call = 3 Then
    _CB_Update($GUI_M25to32_Handler, _LAD_ReadMerkerRegister(4), $GUI_INDETERMINATE)

    [/autoit] [autoit][/autoit] [autoit]

    ElseIf $call = 4 Then
    GUICtrlSetData($L_M_25_32, _LAD_ReadMerkerRegister(4))

    [/autoit] [autoit][/autoit] [autoit]

    ElseIf $call = 5 Then
    $array = _LAD_ReadAllOutput()
    GUICtrlSetData($L_Q_1_8, $array[1])
    GUICtrlSetData($L_Q_9_16, $array[2])
    _CB_Update($GUI_Q1to8_Handler, $array[1], $GUI_INDETERMINATE)
    _CB_Update($GUI_Q9to16_Handler, $array[2], $GUI_INDETERMINATE)

    [/autoit] [autoit][/autoit] [autoit]

    ElseIf $call = 6 Then
    $newValue = _LAD_ReadWord(GUICtrlRead($I_DB1))
    $newValue1 = StringReplace(StringFormat( "%.2f", $newValue /10), ".", ",")
    GUICtrlSetData($DisplayDB_1, $newValue1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ElseIf $call = 7 Then
    $newValue = _LAD_ReadWord(GUICtrlRead($I_DB2))
    $newValue1 = StringReplace(StringFormat( "%.2f", $newValue /10), ".", ",")
    GUICtrlSetData($DisplayDB_2, $newValue1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ElseIf $call = 8 Then
    $newValue = _LAD_ReadWord(GUICtrlRead($I_DB4))
    $newValue1 = StringReplace(StringFormat( "%.2f", $newValue /10), ".", ",")
    GUICtrlSetData($DisplayDB_4, $newValue1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ElseIf $call = 9 Then
    $newValue = _LAD_ReadWord(GUICtrlRead($I_DB6))
    $newValue1 = StringReplace(StringFormat( "%.2f", $newValue /10), ".", ",")
    GUICtrlSetData($DisplayDB_6, $newValue1)

    [/autoit] [autoit][/autoit] [autoit]

    Else
    $call = 0 ; hier wird auf 0 initialisiert, weil direkt danach ein +1 kommt !!

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $call = $call + 1

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($imput_refreshT, StringFormat("%d", TimerDiff($begin))) ; anzeigen der Stoppuhr in einem speziellen format
    Local $sZuluft = 0, $sMitte = 0, $sHarz = 0, $sSollwert = 0, $sLogFile = 0, $sText = 0
    $sZuluft = GUICtrlRead($DisplayDB_1)
    $sMitte = GUICtrlRead($DisplayDB_2)
    $sHarz = GUICtrlRead($DisplayDB_4)
    $sSollwert = GUICtrlRead($DisplayDB_6)
    $sLogFile = @ScriptDir & "\" & @YEAR & "-" & @MON & "-" & @MDAY & ".csv"
    $sText = @YEAR & "-" & @MON & "-" & @MDAY & ";" & @hour & ":" & @min & ";" & $sZuluft & ";" & $sMitte & ";" & $sHarz & ";" & $sSollwert & @CRLF
    If (@min=00 or @min=10 or @min=20 or @min=30 or @min=40 or @min=50) and @sec = 00 Then
    FileWrite($sLogFile, $sText)
    sleep (1000)
    EndIf
    Else

    [/autoit] [autoit][/autoit] [autoit]

    ; disconnect
    ; hier passier erstamal gar nix ..
    ;ToolTip("Disconnect"& _TD($TIMER_1),0,0)

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndSwitch

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;######################### ENDE der Hauptschleife ###############################################

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;; Funktion um die Gui mit den werten der Logo zu beschreiben.
    ;; Parameter 1-> $Conrole_ID_Handler_Array = verlangt ein Array welches den inhalt der Handels auf die entsprechenden Controls hat.
    ;; Parameter 2-> $value = ein dezimales Value 0-beliebig welches bitweise auf die handels aufgesplittet werden soll
    ;; Parameter 3-> $checkTo = $GUI_CHECKED = hat einen PRESET bedeutet, dass wenn nichts angegeben wird das Entsprechende handel bei einer aktivierung mit dem Gui parameter CHECKED versetzt wird.
    ;, ; ansonsten mit dem Value, welcher an dieser stelle mitübergeben wird.
    ; RETVAL -> Funktion hat keinen Returnvalue sondern beschreibt die Controls direkt über die Globale Handle
    Func _CB_Update($Conrole_ID_Handler_Array, $value, $checkTo = $GUI_CHECKED)
    ; dec to Binary umrechnen
    $binary = _DecToBinary($value)
    ; ein Array erstellen in abhängigkeit der Arraygröße
    Dim $DIArray[UBound($Conrole_ID_Handler_Array)];9]

    [/autoit] [autoit][/autoit] [autoit]

    ;die bits dem array übergeben
    For $i = 0 To (UBound($DIArray) - 1) Step 1
    $DIArray[$i] = StringMid($binary, BinaryLen($binary) - $i, 1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; emptie's mit 0en füllen
    ; ist eigentlich total überflüssig , das dies später sowieso überschrieben wird
    For $i = 0 To (UBound($DIArray) - 1) Step 1
    If Not (($DIArray[$i] = "1") Or ($DIArray[$i] = "0")) Then
    $DIArray[$i] = 0
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; den Gui State in das array übertragen
    For $i = 0 To (UBound($DIArray) - 1) Step 1
    If ($DIArray[$i] = "1") Then
    $DIArray[$i] = $checkTo; $GUI_INDETERMINATE
    Else
    $DIArray[$i] = $GUI_UNCHECKED
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; den Status in die Handles der gui übertragen
    For $i = 0 To (UBound($DIArray) - 1) Step 1
    GUICtrlSetState($Conrole_ID_Handler_Array[$i], $DIArray[$i])
    Next
    EndFunc ;==>_CB_Update

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; funktion für hotkey
    Func Terminate()
    $isStarted = 0
    $nMsg = $Stop
    ;Exit 0
    EndFunc ;==>Terminate

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • OMG 8|
    Da hast du dir ja viel Mühe gegeben.
    Also meine Visualisierung für eine S7 hat ca. 1200 Zeilen. Wenn ich es so wie du schreiben würde, wären es wahrscheinlich 3000 Zeilen oder so ^^

    Ok lassen wir es mal mit dem AdLibRegister, würde ich es einbauen wollen, müsste ich auch deinen Code ein "wenig" komprimieren.
    Da ich es so umschreiben würde, dass es dann übersichtlicher und einfacher wäre. Das ist bei mir so ein Zwang bei unübersichtlichen Scripten.

    Aber wenn es so funktioniert ist gut.

    Wegen dem Speicher: Das liegt wahrscheinlich an der LogAitDave. Also da müsstest du dich mal an vivus richten oder selber mal die UDF durchgucken. Das Problem hatte ich aber auch damals bei der LibNoDave, da sie damals noch nicht so ausgereift war ( :love: jaja, der funkey).

    Beim überfliegen ist mir noch das aufgefallen:

    [autoit]

    Case $GUI_EVENT_CLOSE ; wenn auf schließen gedrückt wird
    $isStarted = 0
    Exit

    [/autoit]


    Für wem setzt du $isStarted denn auf 0? Das Programm wird doch sowieso über Exit beendet.

    Und

    [autoit]

    $nMsg = $Stop

    [/autoit]


    wird nicht funktionieren.
    Nimm lieber GUISetAccelerators.

    2 Mal editiert, zuletzt von m-obi (30. Juli 2013 um 20:38)