Trigger einbauen

  • Hi,

    ich möchte das mein script erst nach zb 3 mal triggern sich weiter ausführt.

    Also erst nach 3 maligem aufrufen soll es weiter gehen.

    Geht das?

    Klingt vielleicht dämlich ist aber notwendig für die Funktion meines vorhabens.

    Einmal editiert, zuletzt von Sascha123456 (1. Februar 2018 um 10:16)

  • es geht darum das ein bestimmtes autoit script bei jeder messung meiner Koordinatenmessmaschine getriggert wird (ist anders nicht möglich aufgrund der software der maschine)

    Jedoch muss das script erst anfangen zu arbeiten wenn ich 5 teile gemessen habe, d. h. das ich 4 mal abbreche und beim 5 mal es dann wirklich verwende.

    Das script verarbeitet dann die Messwerte weiter und das darf erst geschehen wenn ich 5 Bauteile vermessen habe.

    Und ich wollte das es die ersten 4 trigger ignoriert und beim 5ten mal weiß ok jetzt starte ich.

    Gut wäre es auch wenn diese Trigger innerhalb 30 minuten kommen müssen, ansonsten fängt es wieder bei null an!

    Einmal editiert, zuletzt von Sascha123456 (31. Januar 2018 um 12:09)

  • Hallo Sascha123456 !

    Möglicherweise etwas rustikal, aber schreibe die Programmstarts doch einfach in eine kleine Zählerdatei.

    - jeder Programmstart erhöht den Zähler.

    - wenn z.B. 5 erreicht ist, wird das Programm ausgeführt und die Zählerdatei wird gelöscht.

    - ist der gewünschte Zählerstand noch nicht erreicht, dann das Programm ohne Aktion beenden.

    - ist die Datei beim Programmstart älter als xx Minuten, dann wieder von vorne anfangen.

    Das Ganze ähnelt dem sog. Polling-Verfahren.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Das wäre doch perfekt, allerdings weiß ich nicht wie das geht..kann mir da jemand helfen ?

    So schwer ist das nicht, nur einfache Dateilese- und Schreibzugriffe sowie ein Vergleich von Zeitangaben.

    Der Codeblock sollte zu Beginn deines Skriptes stehen, also noch bevor etwas angezeigt wird (z.B. eine GUI).

    Name der Zählerdatei z.B. 'polling.txt' im @ScriptDir.

    Prüfen, ob die Datei existiert :

    -> Stichwort FileExists()

    Falls NEIN :

    Textdatei mit dem Wert 1 anlegen -> FileOpen , Modus= 2 bzw. $FO_OVERWRITE

    Falls Ja :

    Prüfen, ob die Datei älter ist als z.B. 30 Min. -> Stichwort FileGetTime

    Falls Ja, wieder Textdatei mit dem Wert 1 anlegen -> FileOpen , Modus= 2 bzw. $FO_OVERWRITE

    Ansonsten :

    Zählerstand in eine Variable einlesen, z.B. $iStartCounter.

    -> Ist der Wert kleiner 5 dann $iStartCounter um 1 erhöhen -> in die Datei schreiben -> Exit

    -> Ist der Wert = 5, dann Zählerdatei löschen und das Skript ausführen

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Oh das hat mich auf eine bessere Idee gebracht, was vielleicht geschickter wäre.

    Am anfang des skriptes müsste zunächst ein FileExists prüfen wie viele Dateien in "T:\21. Messtechnik\Zeiss\Zeiss_Skripting\caq_vorbereitung" vorhanden sind, sind es 5 Stück, dann führe das skript aus, ist dies nicht der fall wird das skript wieder abgebrochen.

    Das wäre eigentlich die optimale Lösung.

    Nur kann mir das einer schreiben? (Ich versuche es gerade selbst bekomme es aber nicht hin)

  • Nur kann mir das einer schreiben? (Ich versuche es gerade selbst bekomme es aber nicht hin)

    Wenn Du es wirklich selbst machen möchtest, solltest Du schon etwas mehr als 25 Min.darauf verwenden ;).

    Poste doch einfach mal deinen bisherigen Stand, dann können wir uns daran abarbeiten.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Falls Du nicht weiterkommst, versuche mal das hier :

    AutoIt
    #include <AutoItConstants.au3>
    $aFiles = DirGetSize(@ScriptDir, BitOR($DIR_EXTENDED, $DIR_NORECURSE))
    ConsoleWrite("Verzeichnis = " & @ScriptDir & " enthält " & $aFiles[1] & " Dateien" & @CRLF)

    EDIT :

    In deinem Fall also :

    AutoIt
    #include <AutoItConstants.au3>
    Global $sDir = "T:\21. Messtechnik\Zeiss\Zeiss_Skripting\caq_vorbereitung"
    $aFiles = DirGetSize($sDir, BitOR($DIR_EXTENDED, $DIR_NORECURSE))
    ConsoleWrite("Verzeichnis = " & $sDir & " enthält " & $aFiles[1] & " Dateien" & @CRLF)

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi (31. Januar 2018 um 16:33)

  • Danke schon mal,

    leider mache ich das in der Arbeit nebenher und komme nicht wirklich gerade dazu.

    Aber danke für den Ansatz, was genau macht dein skript jetzt bereits? Ich dachte das müsste man mit einen If machen oder ist das so nicht mehr nötig?

  • Aber danke für den Ansatz, was genau macht dein skript jetzt bereits? Ich dachte das müsste man mit einen If machen oder ist das so nicht mehr nötig?

    Das 'Skript' ermittelt die Anzahl der Dateien in einem Verzeichnis, also das, was Du im Beitrag #9 :

    Oh das hat mich auf eine bessere Idee gebracht, was vielleicht geschickter wäre.

    Am anfang des skriptes müsste zunächst ein FileExists prüfen wie viele Dateien in "T:\21. Messtechnik\Zeiss\Zeiss_Skripting\caq_vorbereitung" vorhanden sind, sind es 5 Stück, dann führe das skript aus, ist dies nicht der fall wird das skript wieder abgebrochen.

    Das wäre eigentlich die optimale Lösung.

    gewünscht hast ^^. Eine FileExists etc. ist dafür nicht mehr erforderlich !

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • super perfekt :) , ich hätte das nicht geschafft...ich versteh zwar das wie und warum aber ich hab echt probleme immer die passenden codes zu den jeweiligen Fällen anzuwenden!

    Vielen Dank

  • super perfekt , ich hätte das nicht geschafft...ich versteh zwar das wie und warum aber ich hab echt probleme immer die passenden codes zu den jeweiligen Fällen anzuwenden!

    Hallo Sascha123456 !

    Freut mich, dass es passt :).

    Ich möchte aber anmerken, dass die von Dir gewünschte Vorgehensweise gewisse Schwächen aufweist.

    Da lediglich die Anzahl der Dateien (hier 5) im angegebenen Verzeichnis als Auslöser dient, muss natürlich sichergestellt sein, dass keine anderen Dateien dort angelegt werden (Backup- , Tempfiles usw.). Sofern das gewährleistet ist, kann man es so machen.

    Bei meinem ersten Vorschlag würde das Programm selbst einen Zähler setzen und darauf reagieren. Damit wären solche Fremdeinflüsse ausgeschlossen, und das Verfahren somit sauberer.

    Das musst letztlich aber Du entscheiden :P.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Das ist sicher gestellt, das dort nur die gewünschten Protokolle erscheinen :)

    Ich habe außerdem noch eingefügt das bei mehr als 5 Protokollen (was durch eine Fehlbedinung der Maschine passieren kann) er die überschüssigen Protokolle anschließend entfernt:) :), das Funktioniert prima.

  • Ok interessant :D

    Ja die Funktion ist gegeben!

    Allerdings hänge ich jetzt an einem anderen Problem, wie ich ihm sagen kann nur das jüngste protokoll zu löschen...also die txt.

    Ich hab es bisher so :

    Switch MsgBox(64 + 4, "Bewertung", "War die Messung i.O?")

    Case 6 ; Messung als i.O bewertet

    Case 7 ; Messung als n.i.O bewertet

    Exit 0 & FileDelete("T:\21. Messtechnik\Zeiss\Zeiss_Skripting\caq_vorbereitung") & MsgBox(16,"Info", "Es wurden sämtliche Protokolle entfernt!")

    EndSwitch


    aber da löscht er mir ja alles.