>ECI1000 Motion Control Card (Pulse)
>ECI2000 Motion Control Card (Pulse / EtherCAT)
>ECI3000 Motion Control Card (Pulse / EtherCAT)
>PCI EtherCAT PC-Based Motion Control Card
>PCIe EtherCAT PC-Based Motion Control Card
>Free Vision & Motion Development RTSys
>VPLC532E Vision Motion Controller
XPCIE1032H is one EtherCAT PCI Express motion control card developed by Zmotion Technology.
*XPCIE1032H Introduction Video*:https://youtu.be/B1ktSxIRa44
*XPCIIE1032H Lesson 1- Lesson 12*: https://youtu.be/0C96S5_hVf0
*XPCIE1032H Lesson 13 Video: https://youtu.be/7bljdiy3wME

And one software kernel is built.
--XPCIE1032H Card & MotionRT7 Soft Kernel--
P 1D/2D/3D PSO (high-speed hardware position comparison output): suit to vision fly-shooting, precise dispensing, laser energy control, etc.
P in PC Windows development, it can achieve real-time, and the instruction interaction speed is faster 10 times than traditional PCI / PCIe.
Average Value | C++ LOCAL | C# LOCAL | Traditional PCI / PCIe | PLC EtherNET |
Period of one command reading with 1W times | 4.70us | 5.3us | 64us | 500us-10ms |
Period of one command reading with 10W times | 3.90us | 5.7us | 65us | 500us-10ms |
Period of multi-command reading with 1W times | 6.20us | 8.85us | 472us | 500us-10ms |
Period of multi-command reading with 10W times | 5.50us | 8.37us | 471us | 500us-10ms |
[Zmotion Speed Look-Ahead Introduction]
[C# Routine Showing & Design]
[C# Routine Operation & Effect]
In automation motion control, speed look-ahead function can play an important role, especially it is matched with Merge continuous processing (not stop in motion), which can improve the machine efficiency, also can reduce the impact & increase the flexibility. In this way, at the same time, the parts wear will be less, the equipment service life will be longer, your costs also can be reduced.
ü Higher Efficiency
It can wholly plan each segment speed, and do acceleration & deceleration control for segments within instruction, making the machine tool keep running at the high-speed. At the same time, “merge” continuous interpolation function is used together, the loading motion will be more flexible, no need to stop and run again. Obviously, the efficiency is promoted.
ü Less Impact & Safer
As we all know, when one machine runs rapidly, machine shock and overshoot maybe appear. At this time, look-ahead algorithm can be used to identify the trajectory changes in advance, then decelerate correspondingly. Therefore, through deceleration / stop merging function, it can restrict the impact effectively.
There are 3 modes of speed look-ahead:
A. Corner Decleration
“C# Instruction: ZAux_Direct_SetCornerMode=2”
When the angle between commands is too large, and if it runs at high-speed, there will cause a big machine impact at the angle, make the trajectory deviate. Now, corner deceleration can be used : recognize the angle change in advance, then compare it with deceleration / stop angle, according to that, it will determine whether to decelerate for stable operation.
In a word, corner deceleration is applied to automatically judge whether decelerates at the corner without changing the motion trajectory. It is only for improving machine shaking, and the occasion requires high trajectory accuracy (no speed requirement).
--Example--

*the angle 1 (OA → OB) < deceleration angle: not deceleration for S1-S2.
*the angle 2 (AB → BC) > deceleration angle: decelerate for S2-S3
*the angle 3 (BC → CD) > stop angle: decelerate to 0 for S3-S4

Note: the deceleration angle means the change value of motor reference angle that corresponds to the former motion. Like below shown, this angle is not the real trajectory angle, but the angle converted to the motor transformation (only for reference).

B. Auto-Chamfer
“C# Instruction: ZAux_Direct_SetCornerMode=32”
The automatic chamfering function does radian processing at the corner according to one certain chamfer radius, that is, for big corner, it will do automatically smoothing . And after using it, the motion trajectory will be change, but the speed won’t be reduced.
Therefore, it is mainly applied in the occasion that requires high speed (no accuracy requirement).
C. Small-Circle Speed Limit
“C# Instruction: ZAux_Direct_SetCornerMode=8”
In motion trajectory, when it runs the small circle that is made by circular trajectory, but it appears the deviation due to big angle. Now, it needs to limit the speed at this position. Then, this is the small-round speed limit function.
*small-round radius > speed limit radius – no speed limit
*small-round radius < speed limit radius – speed limit
(1) Speed Look-Ahead Related C# Command
ZAux_FastOpen – please check lesson 2 | |
ZAux_Direct_SetCornerMode (handle, iaxis, iValue) | |
handle | Connection handle |
iaxis | Axis No. |
imode | modes l Bit 0 = value 1 – reserved. l Bit 1 = value 2 – automatic corner deceleration l Bit 2 = value 4 – reserved l Bit 3 = value 8 – automatic small-round speed limit l Bit 4 = value 16 – reserved l Bit 5 = value 32 – automatic chamfering |
ZAux_Direct_SetFullSpRadius (handle, iaxis, fValue) | |
fValue | Small round radius |
ZAux_Direct_SetStopAngle (handle, iaxis, pfValue) | |
pfValue | Stop deceleration angle |
ZAux_Direct_SetZsmooth (handle, iaxis, pfValue) | |
pfValue | Deceleration chamfering radius |
For details, please refer to Zmotion PC Programming Manual. Download Add.: https://www.zmotionglobal.com/download_list_17.html Contact Us: https://www.zmotionglobal.com/contactus.html Including the C# library file. How to call the PC library file, please review lesson 2. | |
(2) Speed Look-Ahead C# Routine UI Design

(3) Speed Look-Ahead C# Routine Steps
This C# routine moves one continuous hexagon trajectory. You also a move needed motion by modifying each motion coordinates.

Step 1: connect to XPCIE1032H motion control card
In Form 1, call the interface “ZAux_FastOpen()” to make it automatically connect to controller when the system initializes.
Step 2: update axis state
Update controller axis state by timer, including current coordinates, remain buffer numbers, motion state, etc.
Step 3: set parameters & move
Set axis parameters and look-ahead parameters, then run it according to set trajectory points. [for full codes, please contact us]
private void Button_start_Click(object sender, EventArgs e) //run
{
if (g_handle == (IntPtr)0)
{
MessageBox.Show("Not Connect to Controller!", "Note");
}
else
{
int RemainBuffer = 0;
int CornerMode = 0;
int[] axislist = { 0, 1, 2 };
float[] poslist = { Convert.ToSingle(endpos1.Text), Convert.ToSingle(endpos2.Text), Convert.ToSingle(endpos3.Text) };
float[] midlist = { Convert.ToSingle(midpos1.Text), Convert.ToSingle(midpos2.Text), Convert.ToSingle(midpos3.Text) };
float[] firstlist = { Convert.ToSingle(firstpos1.Text), Convert.ToSingle(firstpos2.Text), Convert.ToSingle(firstpos3.Text) };
float[] seclist = { Convert.ToSingle(secpos1.Text), Convert.ToSingle(secpos2.Text), Convert.ToSingle(secpos3.Text) };
float[] thirdlist = { Convert.ToSingle(thirdpos1.Text), Convert.ToSingle(thirdpos2.Text), Convert.ToSingle(thirdpos3.Text) };
float[] fourlist = { Convert.ToSingle(fourpos1.Text), Convert.ToSingle(fourpos2.Text), Convert.ToSingle(fourpos3.Text) };
float[] fivelist = { Convert.ToSingle(fivepos1.Text), Convert.ToSingle(fivepos2.Text), Convert.ToSingle(fivepos3.Text) };
float[] sixlist = { Convert.ToSingle(sixpos1.Text), Convert.ToSingle(sixpos2.Text), Convert.ToSingle(sixpos3.Text) };
zmcaux.ZAux_Direct_Base(g_handle, 3, axislist); //select motion axes list
zmcaux.ZAux_Direct_SetMerge(g_handle, axislist[0], 1);
//for the interpolation motion, use spindle parameters (the first axis of BASE)
zmcaux.ZAux_Direct_SetSpeed(g_handle, axislist[0], Convert.ToSingle(textBox_speed.Text));
zmcaux.ZAux_Direct_SetAccel(g_handle, axislist[0], Convert.ToSingle(textBox_acc.Text));
zmcaux.ZAux_Direct_SetDecel(g_handle, axislist[0], Convert.ToSingle(textBox_dec.Text));
zmcaux.ZAux_Direct_SetSramp(g_handle, axislist[0], Convert.ToSingle(textBox_sramp.Text));
if (checkBox1.Checked == true)
CornerMode += 2;
if (checkBox2.Checked == true)
CornerMode += 8;
if (checkBox3.Checked == true)
CornerMode += 32;
//set look-ahead mode and corresponding parameters
zmcaux.ZAux_Direct_SetCornerMode(g_handle, axislist[0], CornerMode);
zmcaux.ZAux_Direct_SetDecelAngle(g_handle, axislist[0], Convert.ToSingle(textBox_DecelAngle.Text));
zmcaux.ZAux_Direct_SetStopAngle(g_handle, axislist[0], Convert.ToSingle(textBox_StopAngle.Text));
zmcaux.ZAux_Direct_SetFullSpRadius(g_handle, axislist[0], Convert.ToSingle(textBox_SpRadius.Text));
zmcaux.ZAux_Direct_SetZsmooth(g_handle, axislist[0], Convert.ToSingle(textBox_ZSmooth.Text));
zmcaux.ZAux_Direct_SetForceSpeed(g_handle, axislist[0], Convert.ToSingle(textBox_speed.Text));
......
Step 4:
stop motion
Press stop button to call the stop interface “ZAux_Direct_Single_Cancel()” to make it end.
Step 5: clear coordinates
Press clear button to call the coordinate clearing interface “ZAux_Direct_SetDpos()” to reset the current motion coordinates.
In this C#, let’s test 3 modes that were mentioned above: run the motion in C# & check running effect (capture data) by RTSys “SCOPE” tool (for RTSys debugging information, please review lesson 6).
Note: for real operation and scope configurations, please check this lesson’s video.

A. Test “Corner Deceleration”
--Corner Deceleration is OFF--

--Corner Deceleration is ON (deceleration condition is met)--

B. Test “Auto-Chamfer”
--Chamfering is OFF--

--Chamfering is ON--

C. Test “Small-Round Speed Limit”
--Small-Round Speed Limit is OFF--
Small-circle radius 100 > speed limit radius 30, the speed is normal, meeting the peak value.

--Small-Round Speed Limit is ON--
Small-circle radius 100 < speed limit radius 150, the speed is limited.

<b