XPLC006E is a kind of multi-axis economical EtherCAT bus motion controller developed by ZMotion Technology, and XPLC series motion controllers can be applied in all kinds of occasions that need offline or online operation.
XPLC006E has 6 motor axes itself, and motion control of 12 axes at most can be achieved (including virtual axes). Also, it supports 12-axis linear interpolation, electronic cam, electronic gear, synchronous follow, virtual axis setting, etc.
In addition, XPLC006E cost-effective controller supports multi-task run synchronously. At the same time, it can do simulation on PC directly. There are several valid programming methods, such as, Basic / PLC ladder diagram / HMI configuration in ZDevelop software and commonly used upper computer software.
For PC upper computer API programming, following interfaces are supported: C#, C++, LabVIEW, VB, matlab, Qt, Linux, .Net, iMAC, Python, ROS, etc.
→Actually, according to different axis numbers, there are XPLC004E, XPLC006E and XPLC008E
There is one note: XPLC006E belongs to bus motion controller, which means it only supports EtherCAT bus axes, pulse axes and encoder axes are invalid. Then, it uses EtherCAT bus and drive to communication with refresh cycle of 1ms.
Let's see XPLC864E2, it is upgraded on the basis of XPLC006E, which means, it supports all functions of XPLC006E mentioned above, and usages are basically the same. However, some resource spaces are better than XPLC006E. What's more, XPLC864E2 supports 32 inputs, 32 outputs, 2 ADs and 2 DAs in hardware level, pulse axis and bus axis can be hybrid used. The number of real axes is 8 totally. Except EtherCAT interface, in hardware of output, signal output of 8 axes in pulse direction can be configured, and be with 2 encoder inputs set by input configuration.
Same, XPLC864E2 supports PLC, Basic and HMI configuration programming methods. For PC upper computer API programming, following interfaces are supported: C#, C++, LabVIEW, VB, matlab, Qt, Linux, .Net, iMAC, Python, ROS, etc.
It is valid for XPLC864E motion controller to program through three kinds of methods of ZDevelop, at the same time, it supports multiple interpolation functions. Here, 2 different multi-task routines can be referred.
Program is downloaded to run, firstly start the file with AutoRun Task No., and several or one auto-run task No. can be set. Then, other file tasks use "RUN" instruction to open.
Next, in files that run automatically, add "RUN" or "RUNTASK" instruction to call other tasks for execution,according to the place where the program to be called is.
At last, while programming, depend on functions, each module assigns one task No. to run. Task will be called and executed when modular program block is needed. In this way, program scanning time can be reduced, and execution efficiency of controller can be promoted.
7.1 Basic Multi-Task Program
There are 2 Basic files, "Main" file will run as task 0 when powered on. For other tasks, use instruction to open, see below image.
(1) File 1: Main.bas
RAPIDSTOP(2)
WAIT IDLE
GlobalInit 'parameter definition
AxesInit 'axis parameter initialization
WHILE 1
IF SCAN_EVENT(IN(0))> 0 THEN 'start main motion
STOPTASK 2
'Basic open task, call Basic file
RUN "TuXing_001.bas",2 'as task 2 to run main motion program
ENDIF
IF SCAN_EVENT(IN(1))> 0 THEN 'stop
sub_stop
ENDIF
IF SCAN_EVENT(IN(2))> 0 THEN 'homing
RUNTASK 1,task_home 'as task 1 to start homing
ENDIF
WEND
END 'main program ends
'''parameters definition
GLOBAL SUB GlobalInit()
'main program
GLOBAL CONST AXISNUM = 3 'axes in all
GLOBAL g_state 'controller status
g_state = 0 '0--initail state, 1--standby, 2--homing, 3--running
GLOBAL deal_home 'homing mark
deal_home = 0
END SUB
'''axis parameters and IO definition
GLOBAL SUB AxesInit()
BASE(0,1,2)
DPOS=0,0,0
MPOS=0,0,0
UNITS = 100,100,100 'pulse amount
ATYPE = 1,1,1 'step method
SPEED=100,100,100
LSPEED=0,0,0 'initial speed
CREEP=10,10,10 'inverse speed while homing
ACCEL=1000,1000,1000
DECEL=1000,1000,1000
SRAMP = 20,20,20 'S curve time setting
DATUM_IN=8,9,10 'origin input configuration
REV_IN=-1,-1,-1 'negative position limit, which is connected to origin
FWD_IN=-1,-1,-1 'positive position limit
ALM_IN = -1,-1,-1
'special IO reverse is changed into commonly-opened input
INVERT_IN(8,ON)
INVERT_IN(9,ON)
INVERT_IN(10,ON)
MERGE = ON 'main axis 0 is configured as continuous interpolation by default
CORNER_MODE = 2 'start corner deceleration
DECEL_ANGLE = 15 * (PI/180) 'initial deceleration angle: 15
STOP_ANGLE = 45 * (PI/180) 'decrease to the lowest angle: 45
END SUB
GLOBAL SUB task_home()
g_state = 2 'in the homing
FOR i = 0 TO AXISNUM - 1
BASE (i) 'select the axis to join in motion
CANCEL(2) 'stop
WAIT IDLE
NEXT
FOR i=0 TO AXISNUM-1
SPEED(i)=50 'homing speed
HOMEWAIT(i)=100 'reverse find waiting time
DATUM(3) AXIS(i) 'homing method
NEXT
WAIT UNTIL IDLE(0) AND IDLE(1) AND IDLE(2)
WA 10
PRINT "homing finished..."
BASE(0,1,2)
DPOS=0,0,0
MPOS=0,0,0
g_state = 1 'homing finished, back to standby state
deal_home = 1 'homing end mark
END SUB
GLOBAL SUB sub_stop() 'stop
STOPTASK 2 'stop main program motion
STOPTASK 1
RAPIDSTOP(2)
WAIT IDLE
g_state = 1 'axis stops, back to standby state
END SUB
(2) file 2: TuXing_001.bas
IF deal_home = 1 THEN 'judge whether homing is done or not, execute main program module
g_state = 3 'in motion
PRINT "start to move..."
TRIGGER
BASE(0,1,2)
MOVEABS(0,0,0)
MOVE(100) AXIS(2)
MOVECIRC(200,0,100,0,1) 'draw half-circle at 100 radius in clockwise
MOVE(0,-200)
MOVECIRC(-200,0,-100,0,1)
MOVE(0,200)
WAIT IDLE(0)
WAIT IDLE(2)
PRINT "end motion..."
g_state = 1 'motion finished
ELSE
PRINT "if axis doesn't homing, please homing firstly..."
ENDIF
END
Position curve of each axis and resultant trajectory under XY mode captured by oscilloscope
Position curve
Resultant trajectory under XY mode
7.2 Basic and PLC multi-task hybrid program
It is recommended to only set one PLC file task. If two PLC file tasks run at the same time, there will be alarm information: Warn file:"PLC2.PLC" line:1 task:2, can not set PLC main task, task:1 already be set.
PLC has one master task 1, task 2 also can run normally.
PLC subprogram task started by "RUNTASK" in PLC file or Basic file only can run once, the effect is same as open PLC subprogram in PLC.
--Use RUNTSAK instruction in Basic file to open PLC subprogram task.
--Use RUNTASK instruction in PLC file to open PLC subprogram task
For example, Basic file is used to do parameter initialization, and PLC file is used as condition to control axis motion. Basic file is opened by auto-run task 0, and PLC file is opened by RUN instruction in Basic file, then scan circularly.
Routine Cases:
(1) Basic File Program
RAPIDSTOP(2)
WAIT IDLE(0)
WAIT IDLE(1)
'parameters initialization
BASE(0,1) 'select XY
DPOS = 0,0
MPOS = 0,0
ATYPE=1,1 'pulse stepper or servo
UNITS = 100,100 'pulse amount
SPEED = 100,100
ACCEL = 500,500
DECEL = 500,500
FASTDEC=2000,2000
SRAMP=100,100 'S curve
MERGE = ON 'open continuous interpolation
RUN "PLC1.PLC" ,1 'call PLC file task
(2) PLC file ladder diagram program, below shows how the effect is using PLC to achieve above Basic program
(3) PLC ladder diagram corresponds to the statement table program (note: the PLC ladder diagram and the statement table can be switched mutually)
// linear interpolation
LD M8002
ZRST M0 M10
LDP X0
DEMOV K300 D0
DEMOV K400 D2
// IN1 rising edge starts and runs, IN2 is pressed, motion stops rapidly.
LDP X1
OR M0
ANI M1
ANI X2
OUT M0
EXEP @TRIGGER
MOVE D0 D2
LD M8100
PLS M1
END
(4) Linear interpolation motion effect -- position curve + resultant trajectory under XY mode
For more information, please pay close attention to "Support" and