正运动EtherCAT运动控制卡硬件比拟输出和编码器锁存Word下载.docx
- 文档编号:19519920
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:7
- 大小:19.09KB
正运动EtherCAT运动控制卡硬件比拟输出和编码器锁存Word下载.docx
《正运动EtherCAT运动控制卡硬件比拟输出和编码器锁存Word下载.docx》由会员分享,可在线阅读,更多相关《正运动EtherCAT运动控制卡硬件比拟输出和编码器锁存Word下载.docx(7页珍藏版)》请在冰豆网上搜索。
F.函数库详细途径如下。
4.将厂商提供的C#的库文件和相关文件复制到新建的工程中。
A.将zmcaux.cs文件复制到新建的工程里面中。
B.将zaux.dll和zmotion.dll文件放入bin\debug文件夹中。
5.用vs翻开新建的工程文件,在右边的解决方案资源管理器中点击显示所有,然后鼠标右键点击zmcaux.cs文件,点击包括在工程中。
6.双击Form1.cs里面的Form1,出当代码编辑界面,在文件开始写入usingcszmcaux,并声明控制器句柄g_handle。
至此工程新建完成,可进展C#工程开发。
02查看PC函数手册
A.PC函数手册也在光盘资料里面,详细途径如下:
“光盘资料\8.PC函数\函数库2.1\ZMotion函数库编程手册V2.1.pdf〞。
B.PC编程,一般假如网口对控制器和工控机进展链接。
网口链接函数接口是ZAux_OpenEth();
假如链接成功,该接口会返回一个链接句柄。
通过操作这个链接句柄可以实现对控制器的控制。
ZAux_OpenEth()接口讲明:
C.使用对下位机存放器操作的指令操作链接句柄“g_handle〞,对控制器进展存放器内容取值,实时控制下位机相关的指令如下。
实时全局变量指令:
ZAux_Direct_HwPswitch2硬件比拟输出指令到位置后硬件自动触发op输出信号:
ZAux_Direct_HwTimer硬件定时器硬件比拟输出后一段时见复原电平:
锁存相关指令:
ZAux_Direct_Regist接收到指定信号输入后立即锁存当前位置记录,R0,R1输入一般对应到输入口0和1:
ZAux_Direct_GetMark判断锁存mark是否产生:
ZAux_Direct_GetMarkB判断锁存markB是否产生:
ZAux_Direct_GetRegPos锁存信号触发时反应位置:
ZAux_Direct_GetRegPosB获取R1类型锁存反应到的编码器位置位置:
硬件比拟输出相关功能:
单点触发
多点触发
运动控制器内有位置比拟单元,硬件比拟输出是通过比拟轴是否到达设定位置,来操作输出口动作,一般使用时将编码器位置与设定位置比拟,当编码器的位置到达一个设定比拟位置时,触发相应输出口电平翻转一次。
如下列图所示,到达设置的位置1,电平翻转,到达位置2电平再次翻转,到达位置3电平再翻转,直达比拟完所有的点后,电平维持最后一次翻转后的状态。
03c#进展实时程序的运行和读写控制开发
1.实时程序的运行和读写控制开发人机交互界面如下。
2.例程功能介绍
位置比拟输出功能实现:
使用以下数据传输到控制器的table表中,硬件比拟输出功能到位置将会选择将对应信号进展翻转到达硬件比拟输出的功能目的。
位置比拟输出参数设置
通过进展设置比拟的轴号,对应操作的输出口编号,进展动作,以起始点table存放器编号内容数据到完毕点的编号内容数据,运动到达每个对应的数据位置时将会进展翻转电平。
硬件定时器操作
在硬件比拟输出功能操作后,可使用硬件定时器功能,进展对应设置周期时间内op口信号的复原,保证op口不存在长时间输出信号的情况。
状态显示
PC定时器进展刷新当前获取到控制器的坐标和操作的op输出口的状态,显示在界面上,并记录锁存触发的次数。
运动局部
选定运动的间隔,确保位置比拟输出的坐标数据点在运动范围内,可以触发到对应的信号点并进展动作。
编码器锁存
指定锁存形式和锁存轴,当运动到达比拟输出位置时op输出信号到in口,触发对应的上升沿或下降沿进展锁存当前位置,并将位置记录下来,显示在当前界面上。
3.例程简易流程图。
4.在Form1的构造函数中调用接口ZAux_OpenEth(),使在系统初始化的时候自动链接控制器。
privatevoidC_Open_Eth_Click(objectsender,EventArgse)//以太网连接控制器{if
(g_handle==(IntPtr)0){C_Close_Card_Click(sender,e);
//断开前面的连接}
zmcaux.ZAux_OpenEth(C_Ip_Address.Text,outg_handle);
//网口连接控制器if(g_handle!
=
(IntPtr)0){this.Text="
已连接"
;
timer1.Enabled=true;
//C_Move_Axis_TextChanged(sender,e);
}}
5.通过定时器更新控制器轴状态:
当前坐标、OP输出状态等等。
privatevoidtimer1_Tick(objectsender,EventArgse)//刷新状态显示{float
AxisDpos=0;
intiret=0;
UInt32Op_status=0;
updata_value();
if(RadioButton1.Checked==true)//位置比拟是否开启m_POS_IfOpen=
false;
if(RadioButton2.Checked==true)m_POS_IfOpen=true;
if
(RadioButton4.Checked==true)//定时器输出反转是否开启m_Timer_IfOpen=false;
(RadioButton3.Checked==true)m_Timer_IfOpen=true;
iret=
zmcaux.ZAux_Direct_GetDpos(g_handle,m_AxisNum,refAxisDpos);
zmcaux.ZAux_Direct_GetOp(g_handle,m_POS_out,refOp_status);
label_dpos.Text=
"
轴"
+m_AxisNum.ToString()+"
坐标:
+AxisDpos.ToString();
op.BackColor=
Color.Red;
if(Op_status==1)op.BackColor=Color.LimeGreen;
}
6.设置比拟点位置并选择启用硬件比拟输出和硬件定时器并开场进展运动:
privatevoidButton2_Click(objectsender,EventArgse)//运动{if(g_handle
==(IntPtr)0){MessageBox.Show("
未链接到控制器!
"
提示"
);
return;
}intiret=0;
iret
=zmcaux.ZAux_Direct_SetUnits(g_handle,m_AxisNum,100);
zmcaux.ZAux_Direct_SetSpeed(g_handle,m_AxisNum,100);
zmcaux.ZAux_Direct_SetAccel(g_handle,m_AxisNum,2000);
zmcaux.ZAux_Direct_HwPswitch2(g_handle,m_AxisNum,2,0,0,0,0,0,0);
//去除前面的比拟输出指令if(m_POS_IfOpen==false)//比拟完成一次后需要重新调用HwPswitch{iret=
zmcaux.ZAux_Direct_SetTable(g_handle,m_POS_StartTable,m_POS_EndTable,
fPointPos);
//将比拟点填入TABLEif(iret!
=0){stringtempstr;
tempstr="
SetTable失败
返回值:
+iret.ToString();
MessageBox.Show(tempstr,"
}iret=
zmcaux.ZAux_Direct_HwPswitch2(g_handle,m_AxisNum,1,m_POS_out,
m_POS_OutStatus,m_POS_StartTable,m_POS_EndTable,m_PSO_dir,0);
if(iret!
=0)
{stringtempstr;
HwPswitch2失败返回值:
}}else{iret=0;
//去除比拟输出指令if(iret!
+
iret.ToString();
inttempoutstatus=0;
if(m_POS_OutStatus==0)tempoutstatus=1;
else
tempoutstatus=0;
if(m_Timer_IfOpen==false){iret=
zmcaux.ZAux_Direct_HwTimer(g_handle,2,m_Timer_Cycle,m_Timer_Valid,
m_Timer_Num,tempoutstatus,m_POS_out);
tempstr
="
HwTimer失败返回值:
//return;
}}else{iret=zmcaux.ZAux_Direct_HwTimer(g_handle,0,m_Timer_Cycle,
m_Timer_Valid,m_Timer_Num,tempoutstatus,m_POS_out);
=0){string
tempstr;
MessageBox.Show(tempstr,
}}zmcaux.ZAux_Trigger(g_handle);
zmcaux.ZAux_Direct_SetDpos(g_handle,m_AxisNum,0);
zmcaux.ZAux_Direct_Single_MoveAbs(g_handle,m_AxisNum,m_Start_Pos);
zmcaux.ZAux_Direct_Single_MoveAbs(g_handle,m_AxisNum,m_End_Pos);
7.选择锁存形式和锁存轴位置启用锁存。
privatevoidButton1_Click(objectsender,EventArgse)//启动锁存{if(g_handle
(m_Regist_IfOpen==false){m_RegistCount=0;
zmcaux.ZAux_Direct_SetAtype(g_handle,m_RegistAxis,4);
//必须是编码器轴才可以int
ReglistListSel=ComboBox1.SelectedIndex;
if(ReglistListSel=0
ReglistListSel=3){RegistMode=ReglistListSel+1;
}elseif
(ReglistListSel==4||ReglistListSel==5){RegistMode=10+ReglistListSel;
}elseif(ReglistListSel5||ReglistListSel9){RegistMode=12+
ReglistListSel;
}iret=zmcaux.ZAux_Direct_Regist(g_handle,m_RegistAxis,
RegistMode);
timer2.Start();
m_Regist_IfOpen=true;
ComboBox1.Enabled=false;
Button1.Text=
停顿锁存"
}else{timer2.Stop();
m_Regist_IfOpen=false;
ComboBox1.Enabled=true;
Button1.Text="
启动锁存"
DataGridView2.Rows.Clear();
8.定时器定时判断当前是否触发锁存状态,并将锁存位置读取出来并显示在界面上。
privatevoidtimer2_Tick(objectsender,EventArgse)//定时器刷新{intiret=0;
intMarkStatus=0;
floatRegistPos=0;
if(RegistMode=0
RegistMode=4){iret=
zmcaux.ZAux_Direct_GetMark(g_handle,m_RegistAxis,refMarkStatus);
}else
if(RegistMode=14||RegistMode16){iret=
zmcaux.ZAux_Direct_GetMarkB(g_handle,m_RegistAxis,refMarkStatus);
if(RegistMode=18||RegistMode20){floattempc=0;
zmcaux.ZAux_Direct_GetParam(g_handle,"
MARKC"
m_RegistAxis,reftempc);
MarkStatus=(int)tempc;
}elseif(RegistMode=20||RegistMode22){
floattempd=0;
iret=zmcaux.ZAux_Direct_GetParam(g_handle,"
MARKD"
m_RegistAxis,reftempd);
MarkStatus=(int)tempd;
if(MarkStatus==-1){if(RegistMode=0RegistMode=
4){iret=zmcaux.ZAux_Direct_GetRegPos(g_handle,m_RegistAxis,refRegistPos);
//获取锁存位置}elseif(RegistMode=14||RegistMode16){iret=
zmcaux.ZAux_Direct_GetRegPosB(g_handle,m_RegistAxis,refRegistPos);
(RegistMode=18||RegistMode20){iret=
REG_POSC"
m_RegistAxis,refRegistPos);
}elseif(RegistMode=20||RegistMode22){iret=
REG_POSD"
}string[]tempstr=newstring[2];
tempstr[0]=m_RegistCount.ToString();
tempstr[1]=RegistPos.ToString();
DataGridView2.Rows.Add(tempstr);
m_RegistCount=m_RegistCount+1;
iret=zmcaux.ZAux_Direct_Regist(g_handle,
m_RegistAxis,RegistMode);
//重新触发锁存}stringtemps;
temps="
锁存触发状态:
MarkStatus.ToString()+"
次数:
+m_RegistCount.ToString();
Label3.Text=temps;
04调试与监控
编译运行例程,同时连接ZDevelop软件进展调试,对运动控制的轴参数和运动情况进展监控。
1.位置比拟功能
通过界面上的位置比拟输出功能和对应的位置表,在指定位置将会对信号口电平进展翻转,如图示波器所示位置。
2.硬件定时器功能
硬件定时器主要是用于硬件比拟输出后一段时间后复原电平,可以用于保证输出口的状态输出时间,控制输出时间长短。
3.编码器锁存功能
开启锁存功能,对应输入口接收到信号的同时将会锁存当前位置的mpos大小,并将读取到的对应内容显示到界面上。
锁存形式3:
R0上升沿触发(默认RO信号口为in0)
如图:
外部输入口IN由导通状态进入截止状态的一瞬间触发,位置进展记录显示在表格中。
锁存形式4:
R0下降沿触发(默认RO信号口为in0)
当外部输入口由截止状态进入导通状态的一瞬间触发,位置进展记录显示在表格中。
演示视频
本次,正运动技术EtherCAT运动控制卡的IO动作与运动控制的同步,就共享到这里。
本文由正运动技术原创,欢送大家转载,共同学习,一起进步中国智能制造程度。
文章版权归正运动技术所有,如有转载请注明文章来源。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动 EtherCAT 控制 硬件 比拟 输出 编码器