硬件介绍
PCIE464运动控制卡是正运动推出的一款EtherCAT总线+脉冲型、PCIE接口式的运动控制卡,可选6-64轴运动控制,支持多路高速数字输入输出,可轻松实现多轴同步控制和高速数据传输。
PCIE464产品介绍
接线参考
J400包含一个差分脉冲输出接口,一个差分编码器反馈,通过转接板接入。其中IN2-7有单端编码器轴的功能,只支持24V编码器输入。
C#语言进行项目开发
1、在VS2010菜单“文件”→“新建”→“项目”,启动创建项目向导。
2)选择“函数库2.1”文件夹。
5.双击Form1.cs里面的Form1,出现代码编辑界面,在文件开头写入using cszmcaux,并声明控制器句柄g_handle。
6、至此,项目新建完成,可进行C#项目开发。
PC函数介绍
1.PC函数手册可在光盘资料查看,具体路径如下。
指令4 | ZAux_OpenPci | ||||
指令原型 | int32 __stdcall ZAux_OpenPci(uint32 cardnum, ZMC_HANDLE *phandle) | ||||
指令说明 | 连接PCI卡。 | ||||
输入参数 |
| ||||
输出参数 |
| ||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||
指令示例 | PCI方式连接控制器 | ||||
详细说明 | 1.PCI连接,需要PCI类型的控制卡才可进行PCI连接,该类型连接通讯速率最高,但该连接需要工控机含有PCI卡槽接口。 2.ZMC_HANDLE 类型:Zmotion库中,专门用于控制卡连接数据定义类型; |
指令197 | ZAux_Direct_GetIn | ||||||
指令原型 | int32 __stdcall ZAux_Direct_GetIn(ZMC_HANDLE handle,int ionum,uint32 *piValue) | ||||||
指令说明 | 读取输入口状态, 参见软件手册里面的“IN”指令。 | ||||||
输入参数 |
| ||||||
输出参数 |
| ||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||
指令示例 | IO读取与设置 | ||||||
详细说明 | 1.若设置了翻转,读取的是INVERT_IN翻转以后的状态。 2.ZIO扩展板的IO通道号与拨码有关,起始值为(16 +拨码组合值*16),EIO总线扩展IO使用NODE_IO指令,只能设置为8的倍数,详细查看硬件手册。 注意:IO映射编号要大于控制器自身最大的IO编号,不能与控制器的编号重合。 |
指令199 | ZAux_Direct_GetOp | ||||||
指令原型 | int32 __stdcall ZAux_Direct_GetOp(ZMC_HANDLE handle, int ionum, uint32 *piValue); | ||||||
指令说明 | 读取输出口,参见软件手册里面的“OP”指令。 | ||||||
输入参数 |
| ||||||
输出参数 |
| ||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||
指令示例 | IO读取与设置 | ||||||
*piValue | 返回状态值 | ||||||
详细说明 | ZIO扩展板的IO通道号与拨码有关,起始值为(16 +拨码组合值*16),EIO总线扩展IO使用NODE_IO指令,只能设置为8的倍数,详细查看硬件手册。 注意IO映射编号要大于控制器自身最大的IO编号,不能与控制器的编号重合。 最多可操作32个输出口。 |
指令203 | ZAux_Direct_GetOutMulti | ||||||||
指令原型 | int32 __stdcall ZAux_direct_GetOutMulti (ZMC_HANDLE handle, uint16 iofirst, uint16 ioend, uint32 * istate); | ||||||||
指令说明 | IO接口获取多路输出状态。 | ||||||||
输入参数 |
| ||||||||
输出参数 |
| ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||
指令示例 | 多个IO读取设置 | ||||||||
详细说明 | / |
指令204 | ZAux_Direct_GetInMulti | ||||||||
指令原型 | int32 __stdcall ZAux_Direct_GetInMulti (ZMC_HANDLE handle, int startio , int endio, int32 *piValue ); | ||||||||
指令说明 | IO接口读取多路输入。 | ||||||||
输入参数 |
| ||||||||
输出参数 |
| ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||
指令示例 | 多个IO读取设置 | ||||||||
详细说明 | / |
指令198 | ZAux_Direct_SetOp | ||||||||
指令原型 | int32 __stdcall ZAux_Direct_SetOp(ZMC_HANDLE handle, int ionum,uint32 iValue); | ||||||||
指令说明 | 打开输出口,参见软件手册里面的“OP”指令。 | ||||||||
输入参数 |
| ||||||||
输出参数 | / | ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||
指令示例 | IO读取与设置 | ||||||||
详细说明 | ZIO扩展板的IO通道号与拨码有关,起始值为(16 +拨码组合值*16),EIO总线扩展IO使用NODE_IO指令,只能设置为8的倍数,详细查看硬件手册。 注意IO映射编号要大于控制器自身最大的IO编号,不能与控制器的编号重合。 |
指令202 | ZAux_Direct_SetOutMulti | ||||||||||
指令原型 | int32 __stdcall ZAux_SetOutMulti (ZMC_HANDLE handle, uint16 iofirst, uint16 ioend, uint32 *istate); | ||||||||||
指令说明 | IO接口设置多路输出。 | ||||||||||
输入参数 |
| ||||||||||
输出参数 | / | ||||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||||
指令示例 | 多个IO读取设置 | ||||||||||
详细说明 | / |
指令29 | ZAux_Direct_GetMpos | ||||||
指令原型 | int32 __stdcall ZAux_Direct_GetMpos(ZMC_HANDLE handle, int iaxis, float *pfValue) | ||||||
指令说明 | 读取轴测量反馈位置,单位units。 | ||||||
输入参数 |
| ||||||
输出参数 |
| ||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||
指令示例 | 轴基本运动参数设置获取 | ||||||
详细说明 | / |
指令63 | ZAux_Direct_GetAllAxisPara | ||||||||
指令原型 | int32 __stdcall ZAux_Direct_GetAllAxisPara(ZMC_HANDLE handle, const char *sParam,int imaxaxis,float *pfValue) | ||||||||
指令说明 | 一次性读取多个轴轴参数。 | ||||||||
输入参数 |
| ||||||||
输出参数 |
| ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||
指令示例 | float fAtype[8]; ZAux_Direct_GetAllAxisPara(handle,"ATYPE",8,fAtype); //获取0-7轴的轴类型 | ||||||||
详细说明 | / |
指令264 | ZAux_Execute | ||||||||
指令原型 | int32 __stdcall ZAux_Execute(ZMC_HANDLE handle, const char *pszCommand, char *psResponse, uint32 uiResponseLength) | ||||||||
指令说明 | 发送字符串命令到控制器,缓存方式(当控制器没有缓冲时自动阻塞)。 | ||||||||
输入参数 |
| ||||||||
输出参数 |
| ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||
指令示例 | 在线命令函数的使用 | ||||||||
详细说明 | 上位机调用上位机未封装的Basic指令功能 |
单个或批量读取IO和编码器数据
1.链接控制器获取句柄,上位机操作通过获取到的句柄来操作控制器。
//连接PCIe控制卡,控制卡卡号缺省从0开始
int ret = zmcaux.ZAux_OpenPci(0, out g_handle);
if (g_handle != (IntPtr)0)
{
MessageBox.Show("控制卡链接成功!" , "提示");
timer_GetData.Enabled = true; //开启定时器或在单独线程里实时读取I/O信号
}
else
{
MessageBox.Show("控制卡链接失败,请检测PCI卡号!" , "警告");
}
//定时器刷新I/O和轴反馈数据
private void timer_GetData_Tick(object sender, EventArgs e)
{
uint[] instate = new uint[4];
uint[] opstate = new uint[4];
float[] mpos = new float[4];
for (int i = 0; i < 4; i++)
{
zmcaux.ZAux_Direct_GetIn(g_handle, i, ref instate[i]); //读取单个IN
zmcaux.ZAux_Direct_GetOp(g_handle, i, ref opstate[i]); //读取单个OUT
zmcaux.ZAux_Direct_GetMpos(g_handle, i, ref mpos[i]); //读取单轴反馈位置MPOS
}
IN0.Checked = (instate[0] == 1);
IN1.Checked = (instate[1] == 1);
IN2.Checked = (instate[2] == 1);
IN3.Checked = (instate[3] == 1);
OP0.Checked = (opstate[0] == 1);
OP1.Checked = (opstate[1] == 1);
OP2.Checked = (opstate[2] == 1);
OP3.Checked = (opstate[3] == 1);
MPOS0.Text = mpos[0].ToString();
MPOS1.Text = mpos[1].ToString();
MPOS2.Text = mpos[2].ToString();
MPOS3.Text = mpos[3].ToString();
int[] inputs = new int[4];
uint[] outputs = new uint[4];
float[] allmpos = new float[8];
zmcaux.ZAux_Direct_GetInMulti(g_handle, 16, 31, inputs); //批量读取输入IN16-31
zmcaux.ZAux_Direct_GetOutMulti(g_handle, 16, 31, outputs); //批量读取输出OUT16-31
zmcaux.ZAux_Direct_GetAllAxisPara(g_handle, "MPOS", 8, allmpos);//批量读取轴反馈位置MPOS 0-7
InputGroup1631.Text = inputs[0].ToString("X4");
}
//单个输出口状态切换函数
private void OP0_CheckedChanged(object sender, EventArgs e)
{
if (g_handle == (IntPtr)0)
{
MessageBox.Show("未链接到控制卡!", "提示");
return;
}
if (OP0.Checked)
{
zmcaux.ZAux_Direct_SetOp(g_handle,0, 1);
OP0.Text = "out0 打开";
}
else
{
zmcaux.ZAux_Direct_SetOp(g_handle, 0, 0);
OP0.Text = "out0 关闭";
}
}
//批量切换输出口状态函数
private void OutputGroup03_CheckedChanged(object sender, EventArgs e)
{
if (g_handle == (IntPtr)0)
{
MessageBox.Show("未链接到控制卡!", "提示");
return;
}
uint[] iostate = new uint[4];
if (OutputGroup03.Checked)
{
iostate[0] = 0xF; //以二进制组合OUT,十六进制0xF即OUT0-3全部置1
zmcaux.ZAux_Direct_SetOutMulti(g_handle, 0, 3, iostate);
OutputGroup03.Text = "全部置ON";
OP0.Checked = true;
OP1.Checked = true;
OP2.Checked = true;
OP3.Checked = true;
}
else
{
iostate[0] = 0x0;
zmcaux.ZAux_Direct_SetOutMulti(g_handle, 0, 3, iostate);
OutputGroup03.Text = "全部置OFF";
OP0.Checked = false;
OP1.Checked = false;
OP2.Checked = false;
OP3.Checked = false;
}
}
4.若想验证通过函数获取的IO状态和数据是否准确,可以使用正运动的调试软件RTSys连接到控制卡。
通过工具→输入口/输出口观察当前控制卡的实时IO状态,通过轴参数窗口观察各轴的反馈位置MPOS,并与C#获取的数据进行对比。
“?IN(0),IN(3),OP(1),OP(4),MPOS(2),MPOS(5)”;
其中,英文 “?” 字符和“PRINT”字符为同一含义,表示读取后续参数的值;参数字符不用区分大小写。
private void getData_Click(object sender, EventArgs e)
{
//通过Execute函数发送Basic字符串组合实现一次性读取多个参数
if (g_handle == (IntPtr)0)
{
MessageBox.Show("未链接到控制卡!", "提示");
return;
}
string pszCommand; //发送的Basic命令字符串
StringBuilder psResponse = new StringBuilder(1024); //接收返回的字符串
uint uiResponseLength = 1024; //接收返回的字符长度,不能小于接收的字符串长度
pszCommand = "?IN(4),IN(5),OP(4),OP(5),MPOS(4),MPOS(5)";//读取数据Basic字符串,共6个数据
zmcaux.ZAux_Execute(g_handle, pszCommand, psResponse, uiResponseLength);
string psResponseResult = "";
psResponseResult += psResponse;
string[] parts = psResponseResult.Split('\t'); //这里以空格对字符串分割
IN4.Checked = Convert.ToInt32(parts[0]) == 1;
IN5.Checked = Convert.ToInt32(parts[1]) == 1;
OP4.Checked = Convert.ToInt32(parts[2]) == 1;
OP5.Checked = Convert.ToInt32(parts[3]) == 1;
MPOS4.Text = parts[4];
MPOS5.Text = parts[5];
}
视频讲解。
完整代码获取地址
本次,正运动技术PCIe EtherCAT实时运动控制卡PCIE464的IO与编码器读写应用,就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
回顾往期内容
开奖啦!参与《运动控制系统应用与实践》赠书活动的粉丝们看这里
送书福利!全自主IDE的《运动控制系统应用与实践》
C#之Delta并联机械手的视觉同步分拣
C#之Delta并联机械手的视觉相机标定与形状匹配
C#之Delta并联机械手正逆解的建立和手动运动
EtherCAT总线冗余让制造更安全更可靠更智能
机器视觉运动控制一体机结构体功能上线,助力客户高效开发
正运动携手EPLAN,以高效的电气设计助力运动控制的数字化设计
机器视觉运动控制快组态软件RTFuse在XYZ三轴运动平台的应用方案
机器视觉运动控制一体机在喇叭跟随点胶上的应用
机器视觉运动控制一体机在光伏汇流焊机器人系统的解决方案
机器视觉运动控制一体机在点胶胶路检测上的应用
机器视觉运动控制一体机在SCARA机械手柔性上下料的应用
PCIE超高速实时运动控制卡在六面外观视觉检测上的应用
超高速PCIe EtherCAT运动控制卡在高速异形插件机上的应用
开放式激光振镜运动控制器在动力电池模组连接片的焊接应用
开放式激光振镜运动控制器的视觉校正振镜精度解决方案
基于VPLC711的曲面外观检测XYR运动控制解决方案
基于VPLC532E开放式数控系统在五轴义齿机上的应用
运动控制器多工位位置比较输出在转盘式视觉筛选设备中的应用
6月6号直播预告 | 认识PCIE464控制卡及其EtherCAT驱动器与控制卡常用回零模式介绍
6月13号直播预告 | 认识PCIE464控制卡以及连续轨迹加工和速度前瞻介绍
6月17号直播预告 | 认识XPCIE1032H控制卡以及单轴PSO视觉飞拍和精准输出知识分享
6月20号直播预告 | 认识XPCIE1032H控制卡以及硬件位置比较输出和编码器锁存知识分享
6月24号直播预告 | 认识XPCIE1032H控制卡以及二维/三维的多轴PSO视觉飞拍与精准输出分享
6月27号直播预告 | 认识XPCIE1032H控制卡以及PT/PVT运动模式介绍
7月1号直播预告 | 认识全国产EtherCAT运动控制器ZMC432HG以及板载IO与扩展IO配置技巧和应用
7月4号直播预告 | 全国产EtherCAT运动控制器ZMC432HG及其EtherCAT总线使用
7月8号直播预告 | 全国产EtherCAT运动控制器ZMC432HG及其EtherCAT驱动器与控制器常用回零模式介绍
7月15号直播预告 | 超高速PCIe EtherCAT实时运动控制卡PCIE464M以及单轴PSO视觉飞拍和精准输出知识分享
PCIe EtherCAT实时运动控制卡PCIE464的安装与调试
PCIe EtherCAT实时运动控制卡的DXF图形的CAD导图与多条运动指令的快速加工
EtherCAT运动控制器在UVW对位平台中的应用
EtherCAT运动控制器Delta机械手应用
EtherCAT运动控制器的MATLAB开发
运动控制器/运动控制卡配套ZCAN总线ZIO模块的使用
运动控制卡/运动控制器的ZCAN总线ZMIO310扩展模块使用
EtherCAT运动控制器在ROS上的应用(下)
EtherCAT运动控制器在ROS上的应用(上)
皮带同步跟随:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十四)
自定义电子凸轮曲线的运动:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十三)
连续轨迹加工和速度前瞻:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十二)
PT/PVT运动模式介绍:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十一)
项目工程下载与XML配置文件下载:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十)
EtherCAT驱动器回零与控制器回零:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(九)
二维/三维的多轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(八)
单轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(七)
硬件位置比较输出和编码器锁存:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(六)
EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(五):通过RTSys进行调试与诊断
EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(四):板载IO与总线扩展IO的编码器与脉冲配置的应用
EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(三):EtherCAT总线CSP,CSV,CST模式切换
EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(二):EtherCAT总线初始化
EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(一):驱动安装与建立连接
全国产EtherCAT运动控制边缘控制器(六):RtBasic文件下载与连续轨迹加工的Python+Qt开发
全国产EtherCAT运动控制边缘控制器(五):IO配置与回零运动的Python+Qt开发
全国产EtherCAT运动控制边缘控制器(四):轴参数配置与单轴运动PC上位机C++控制
全国产EtherCAT运动控制边缘控制器(三):外设读写与RTSys开发诊断
全国产EtherCAT运动控制边缘控制器(二):统一的上位机API接口
全国产EtherCAT运动控制边缘控制器(一):ZMC432H硬件接口
高柔SS加减速曲线在锂电池焊接中的应用
EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?
工业以太网时代,该如何选择总线运动控制器?
正运动技术运动控制器如何快速实现单轴/多轴同步跟随功能?
EtherCAT运动控制器在数控加工手轮随动中的应用
EtherCAT运动控制器在数控加工手轮随动中的应用之C++
EtherCAT运动控制器在LabVIEW中的运动控制与实时数据采集
运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出
运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO
运动控制器八通道PSO的视觉飞拍与精准输出
Windows实时运动控制软核(七):LOCAL高速接口测试之Labview
Windows实时运动控制软核(六):LOCAL高速接口测试之Matlab
Windows实时运动控制软核(五):LOCAL高速接口测试之VC6.0
Windows实时运动控制软核(四):LOCAL高速接口测试之VB.NET
Windows实时运动控制软核(三):LOCAL高速接口测试之C++
Windows实时运动控制软核(二):LOCAL高速接口测试之Qt
Windows实时运动控制软核(一):LOCAL高速接口测试之C#
开放式激光振镜运动控制器:C++ 快速调用图形库应用
开放式激光振镜运动控制器:C++振镜矫正方法与实现
开放式激光振镜运动控制器:C++快速开发
开放式激光振镜运动控制器(五):ZMC408SCAN 光纤激光器的能量控制
开放式激光振镜运动控制器(四):ZMC408SCAN振镜控制光纤激光器加工
开放式激光振镜运动控制器(三):ZMC408SCAN轴控光纤激光器加工
开放式激光振镜运动控制器(二):ZMC408SCAN激光接口与控制
开放式激光振镜运动控制器(一):ZMC408SCAN接口与功能
运动控制器PSO位置同步输出(三):高精度等间距二维三维PSO输出
运动控制器PSO位置同步输出(一):硬件平台与PSO指令简介
经济型EtherCAT运动控制器(四):ModbusRTU或ModbusTcp与触摸屏通讯
经济型EtherCAT运动控制器(三):PLC实现多轴直线插补与电子凸轮
经济型EtherCAT运动控制器(二):ZBasic实现多轴直线插补运动
运动控制+机器视觉Demo软件框架(三):视觉纠偏+连续插补的配方编辑
运动控制+机器视觉Demo软件框架(二):移动标定和形状匹配
开放式激光振镜+运动控制器(五):ZMC408SCAN控制器硬件介绍
开放式激光振镜+运动控制器(四):PSO位置同步输出在激光振镜加工中的应用
快速入门 | 篇十九:正运动技术运动控制器多轴同步与电子凸轮指令简介
快速入门 | 篇十六:正运动控制器EtherCAT总线快速入门
快速入门 | 篇十四:运动控制器基础轴参数与基础运动控制指令
快速入门 | 篇十三:正运动技术运动控制器ZDevelop 编程软件的使用
快速入门 | 篇八:如何进行运动控制器EtherCAT总线的基础使用?
快速入门 | 篇七:如何进行运动控制器ZCAN总线扩展模块的使用?
快速入门 | 篇五:如何进行运动控制器输入/输出IO的应用?
快速入门 | 篇二:如何进行运动控制器ZBasic程序开发?
EtherCAT与RTEX驱动器轴回零的配置与实现
EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续
EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用
EtherCAT运动控制卡的PWM与模拟量输出和运动速度同步
EtherCAT运动控制卡的硬件接线与C#的硬件外设读写与回零运动
简单易用的运动控制卡(十四):PWM、模拟量输出与运动控制的同步
简单易用的运动控制卡(六):Basic文件下载和连续轨迹加工
EtherCAT运动控制卡和LabVIEW构建智能装备(五)
EtherCAT运动控制卡和LabVIEW构建智能装备(四)
EtherCAT运动控制卡和LabVIEW构建智能装备(三)
EtherCAT运动控制卡和LabVIEW构建智能装备(二)
EtherCAT运动控制卡和LabVIEW构建智能装备(一)
关于正运动技术
深圳市正运动技术有限公司成立于2013年,专注于纯国产运动控制技术研究和通用运动控制软硬件平台和产品的研发,是国家级高新技术和专精特新“小巨人”企业。
正运动技术汇集了来自华为、中兴等公司的优秀人才。力求创新,目前公司拥有专利、著作权等知识产权五十余项。在坚持自主创新的同时,积极联合各大高校和科研院所协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。
正运动技术除本部研发中心外,设有中山、武汉、上海三个研发分部。为更好地服务客户,本部之外设有苏州、东莞两个区域性服务中心,设有佛山、厦门、青岛、西安、武汉、成都、天津、郑州等销售和技术服务机构。
经过众多合作伙伴多年的开发应用,正运动技术的产品广泛地应用于3C电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。