Synchronizing to controller cycle

mkatliar
mkatliar Warsaw
edited January 18 in RAPID Programming
Dear colleagues,
I want some code to be executed on each controller cycle. This is what I have in mind:

MODULE SomeModule
    PROC MyProc()
        WHILE TRUE DO
            ! do something important
            DoSomething;

            ! here I want to wait until the next controller cycle, how can I do that?
            WaitUntilNextControllerCycle;
        ENDWHILE
    ENDPROC
ENDMODULE

The thing is that I can't find a way in RAPID to wait for the next controller cycle; does it exist?
I could use WaitTime, but then a) it is not synchronized to the controller cycle; b) the time of the WHILE cycle will be equal to the wait interval + the execution time of DoSomething, but I want DoSomething to be executed at regular intervals.

What would you suggest?

Comments

  • VictorAx
    VictorAx Sweden
    I don't really understand your question, do you want this to be used as a continiously running proc while the robot is doing something else?

    If so, is this meant a second task?
  • mkatliar
    mkatliar Warsaw
    VictorAx said:
    I don't really understand your question, do you want this to be used as a continiously running proc while the robot is doing something else?

    If so, is this meant a second task?
    Yes you are correct -- this is supposed to be run in a separate "monitoring" task. The second task is the motion task.
  • VictorAx
    VictorAx Sweden
    Then you could do something like this;

    PROC main()
        Set StartMonitor; !StartMonitor is configured as a digital output
        WaitUntil StartMonitor = 0;
        DoSomething;
    ENDPROC

    PROC Monitor();
        WaitUntil StartMonitor = 1;
        Reset StartMonitor;
        DoSomethingElse;
    ENDPROC