Back to top

AKD Basic Sample Program for Selecting Indexing Moves with Modbus

'-------------- Device Params -----------------------
Params

End Params

'-------------- Define (dim) Global Variables --------

Dim indexdistance as integer
Dim indexspeed as integer
Dim jogspeed as integer
Dim starthome as integer
Dim startmove as integer
Dim moveselection as integer
Dim startmoveselected as integer
Dim homefound as integer
Dim startjogpos as integer
Dim startjogneg as integer

MBInfo
$MBMap32(5000, indexdistance) 'Modbus registers 5000 and 5001 for indexdistance from HMI
$MBMap32(5002, indexspeed) 'Modbus registers 5002 and 5003 for indexspeed from HMI
$MBMap32(5004, jogspeed) 'Modbus registers 5004 and 5005 for jogspeed from HMI
$MBMap16(5006, starthome) 'Modbus register 5006 for starthome button from HMI
$MBMap16(5007, startmove) 'Modbus register 5007 for startmove button from HMI
$MBMap16(5008, moveselection) 'Modbus register 5008 for startmove button from HMI
$MBMap16(5009, startmoveselected) 'Modbus register 5009 for startmove button from HMI
$MBMap16(5010, homefound) 'Modbus register 5010 for homestatus indicator in HMI
$MBMap16(5011, startjogpos) 'Modbus register 5011 for startjogpos button from HMI
$MBMap16(5012, startjogneg) 'Modbus register 5012 for startjogneg button from HMI
End
'-------------- Main Program -------------------------
'Home switch on Input 2
Main
DRV.SWENABLE = 0
starthome = 0
homefound = 0
startmove = 0
startjogpos = 0
startjogneg = 0
startmoveselected = 1
indexdistance = 360
indexspeed = 60
jogspeed = 60
Move.Acc = 1000  ' Acceleration (drive units)
Move.Dec = 1000  ' Deceleration (drive units)

'Enable Interrupts
INTR.HWLS.POSSTATE = 1
INTR.HWLS.NEGSTATE = 1
Intr.DRV.FAULTS = 1
INTR.DISABLE = 1
INTR.DRV.HWENABLE = 1

DRV.SWENABLE = 1
While DRV.ACTIVE = 0 : Wend 'wait for hardware and software enable
While 1 = 1 'start continuous loop

'Homing uses Input 2 for the position capture
If homefound = 0 Then 'If axis has not been homed, then wait for starthome button
    While starthome = 0 : Wend 'starthome HMI button
    CAP0.MODE = 0 'standard position capture
    CAP0.TRIGGER = 1 'Use input 2 for position capture
    CAP0.EDGE = 1 'positive edge
    CAP0.EVENT = 0 'no pre-conditions must be met
    CAP0.EN = 1 'Start looking for the capture trigger
    MOVE.RUNSPEED = 60 'deg/s
    MOVE.DIR = 1 'negative direction
    MOVE.GOVEL 'start moving
    While CAP0.STATE = 0 : Wend 'wait for the capture to trigger
    Print "cap"
    MOVE.RUNSPEED = 0
    MOVE.GOVEL 'stop moving, zero speed
    While MOVE.MOVING = 1 : Wend 'wait for motion to stop
    MOVE.POSCOMMAND = (PL.FB -CAP0.PLFB ) 'set position to the difference between the actual position and captured position
    Pause (.2)
    MOVE.RUNSPEED = 10 'deg/s
    MOVE.TARGETPOS = 0
    MOVE.GOABS 'move back to the captured position
    Pause (1) 'this is the end of the homing routine
    homefound = 1 'set homefound tag
End If

While DRV.HWENABLE = 0  : Wend
DRV.SWENABLE = 1

'Indexing Move
While startmove = 0 : Wend 'start "Cut to Length" indexing move
startmove = 0 'reset startmove tag
Move.RunSpeed = indexspeed 'index speed in integer position units per sec (from HMI)
MOVE.RELATIVEDIST = indexdistance 'index distance in integer position units (from HMI)
Move.GoRel
While MOVE.MOVING = 1 : Wend

If startmoveselected = 1 Then
'Predefined Move Selection
If moveselection = 1 Then
Move.RunSpeed = 3600 'deg/s
Move.TargetPos = 0
Move.GoAbs
ElseIf moveselection = 2 Then
Move.RunSpeed = 360 'deg/s
MOVE.RELATIVEDIST = 90 'degrees
MOVE.GOREL
ElseIf moveselection = 3 Then
Move.RunSpeed = 360 'deg/s
MOVE.RELATIVEDIST = 180 'degrees
MOVE.GOREL
ElseIf moveselection = 4 Then
Move.RunSpeed = 360 'deg/s
MOVE.RELATIVEDIST = 270 'degrees
MOVE.GOREL
ElseIf moveselection = 5 Then
Move.RunSpeed = 360 'deg/s
MOVE.RELATIVEDIST = 360 'degrees
MOVE.GOREL
End If
startmoveselected = 0
End If
While MOVE.MOVING = 1 : Wend

If startjogpos = 1 Then
startjogpos = 0 'reset tag
Move.RunSpeed = jogspeed 'from HMI
Move.Govel
ElseIf startjogneg = 1 Then
startjogneg = 0 'reset tag
Move.RunSpeed = jogspeed 'from HMI
Move.Govel
End If
While MOVE.MOVING = 1 : Wend

Wend 'return to "While 1 = 1" loop
End Main

'-------------- Subroutines and Functions ------------

'-------------- Interrupt Routines -------------------
Interrupt HWLS.NEGSTATE
    If homefound = 0 Then 'look for home in the other direction
    While MOVE.MOVING = 1 : Wend
        MOVE.DIR = 0 'positive direction
        MOVE.RUNSPEED = 50 'mm/s
        MOVE.GOVEL 'start moving
        While DIN2.STATE = 0 : Wend 'wait for home switch to turn on
        While DIN2.STATE = 1 : Wend 'wait for home switch to turn off (pass the home switch)
        Pause (0.5)
        MOVE.RUNSPEED = 0
        MOVE.GOVEL 'stop moving, zero speed
        While MOVE.MOVING = 1 : Wend
        CAP0.EN = 1 'Start looking for the capture trigger
        MOVE.DIR = 1 'negative direction
        MOVE.RUNSPEED = 50 'mm/s
        MOVE.GOVEL 'start moving
    ElseIf homefound = 1 Then
        Restart
    End If
    INTR.HWLS.NEGSTATE = 1
End Interrupt

Interrupt HWLS.POSSTATE
    Restart
End Interrupt

Interrupt DRV.HWENABLE
    Restart
End Interrupt

Interrupt disable
    Restart
End Interrupt

Interrupt DRV.FAULTS
    Restart
End Interrupt