Forum Migration Notice
We're transitioning to a more modern community platform by the end of this year. Learn about the upcoming changes and what to expect.

Synchronizing to controller cycle

mkatliar
mkatliar
edited January 2021 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

  • 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?
  • 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.
  • 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