Wie warten in Background logic?

  • Moin,


    ich würde an "meinem" CRX gerne in regelmäßigen Intervallen den Wert des Kraftsensors abfragen, um den Kraftverlauf beim Montieren von Bauteilen aufzunehmen. Dazu hab ich mir ein Programm für die Background logic geschrieben. Aber wie auch immer ich es anstelle, ich krieg den Roboter nicht dazu in der BG-logic eine gewisse Zeit zwischen dem Aufnehmen der Werte zu warten. Die erste Idee war diese:


    Code
    1: R[31]=($cr_var[1].$fs_mon[5])
    2: WAIT 0.01(sec)
    3: R[32]=($cr_var[1].$fs_mon[5])
    4: WAIT 0.01(sec)
    5: R[33]=($cr_var[1].$fs_mon[5])
    ...


    Dabei kommt ein INTP-443 Invalid item for Mixed Logic für Zeile 2 bei raus. Ok, seh ich ein. WAIT ist in der Liste der Availiable instructions für die BG-Logic nicht aufgeführt. Dann also so:


    Code
    1: R[31]=($cr_var[1].$fs_mon[5])
    2: R[199:i]=0
    3: LBL[31]
    4: R[199:i]=(R[199:i]+1)
    5: IF (R[199:i]<1000),JMP LBL[31]
    6: !
    7: R[32]=($cr_var[1].$fs_mon[5])
    ...


    Da gibt es ein INTP-443 Invalid item for Mixed Logic für Zeile 5?! Eigentlich sollte das aber gehen:



    Es gibt sogar ein ähnliches Beispiel in der Anleitung:


    pasted-from-clipboard.png


    Hat jemand eine Idee? Mir gehen sie langsam aus. ?(


    Gruß

    Jörn

    In der Theorie sind Theorie und Praxis identisch. In der Praxis nicht.

  • ANZEIGE
  • Eine relativ simple Möglichkeit ist, die Scanzeit der BG Logic mithilfe eines Registers zu addieren. Wenn der BG Logic Task z.B. im Mode NORMAL läuft, dann ist die Scanzeit 8ms. Diesen Registerwert kannst du dann mit deiner gewünschten Wartezeit vergleichen.

  • Perfektes Beispiel! :thumbup:


    So sieht das dann jetzt bei mir aus. R[27] bis R[30] werden vorbelegt und direkt vor dem Fahrbefehl wird DO[268] auf ON gesetzt. Der Rest geht dann von alleine.



    Nachtrag:

    Mein zweiter Versuch hat übrigens nicht funktioniert, weil man in der BG-Logic mit einem JMP ausschließlich vorwärts (Richtung Programmende / nach "unten" ^^ ) springen darf.

    In der Theorie sind Theorie und Praxis identisch. In der Praxis nicht.

    Einmal editiert, zuletzt von halbesYoyo ()

  • Hallo HalbesYoYo,

    ich würde in deinen Hauptprogramm dein Makro mit einem Run aufrufen.


    Erste Zeile LBL[1]- letzte Zeile Jump LBL[1] und dazwischen das rein Programmieren was du zu beginn geplant hattest.. so bist du nicht begrenzt mit deinem Code

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden