jmitchelloptomec.com Posted July 13, 2019 Share Posted July 13, 2019 Here is a snippet for X axis in my Home.plc I understand the concept about calling Timers in a subroutine via creating a subroutine in the Libraries folder, but I would like to keep the execution as local as possible to the plc. The variable I'm most concerned with is AXIS1_DWELL_TIME. Any insight or constructive criticism to optimize or clean up this routine would be appreciated. I've included the snippet in a file as well because of the formatting within this thread window. /********************** AXIS 1 **********************/ // WATCH FOR MOTOR #1 HOME COMMAND if ((AXIS1_HOME_STATE == 0 && M1_HOME_INPROGRESS == 1) && (AXIS1_HOME_POS != 0)){ AXIS1_HOME_STATE=1; } // WAIT FOR AXIS TO BE AT HOME OFFSET POS if (AXIS1_HOME_STATE == 1 && abs(M1_ACTUAL_VELOCITY) < 1000 && M1_IN_POS == 1 && M1_HOME_COMPLETE == 1){ if (AXIS1_TIMER_STARTED==0){ AXIS1_DWELL_TIME = (200 * 8388608)/Sys.ServoPeriod; TIMER5_START = Sys.ServoCount; AXIS1_TIMER_STARTED = 1; } TIMER5_ELAPSED = Sys.ServoCount - TIMER5_START; AXIS1_HOME_OFF_COMPARE = abs(M1_COUNTER_POS - M1_HOME_POS) - abs(M1_HOMEOFFSET/16); if (AXIS1_TIMER_STARTED == 1 && TIMER5_ELAPSED > AXIS1_DWELL_TIME && abs(AXIS1_HOME_OFF_COMPARE) < AXIS1_AT_HOME_BANDWIDTH){ AXIS1_TIMER_STARTED = 0; AXIS1_HOME_COMPLETE = 0; AXIS1_HOME_STATE = 2; } } closeP3Home.txt Link to comment Share on other sites More sharing options...
Eric Hotchkiss Posted July 15, 2019 Share Posted July 15, 2019 One option is to put the timer into a subroutine inside the PLC instead of a subprogram. In the below example, PLC 1 uses a subprogram timer to increment P1 every second while PLC 2 uses a subroutine. Calling the subroutine does not allow variable passing, so you will need to handle that on your own if you use this method. OPEN PLC 1 P1++ CALL DelayTimer.sec(1) CLOSE OPEN PLC 2 P2++ Gosub 999 RETURN N999: LOCAL EndTimeSec EndTimeSec = Sys.Time + 1 WHILE (EndTimeSec > Sys.Time) {} RETURN CLOSE Link to comment Share on other sites More sharing options...
Recommended Posts