The value of Zmotion is to bring customers more success!
今天,正运动小助手给大家分享一下如何使用C#上位机编程实现 运动控制卡网络通讯的心跳检测功能。
ECI2618B经济型多轴运动控制卡是一款脉冲型、模块化的网络型运动控制卡。控制卡本身最多支持6轴,可扩展至12轴的运动控制,用以实现直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴以及机械手指令等简单的轨迹控制需求;采用优化的网络通讯协议可以实现实时的运动控制。
1. 实时监测:
通过检测上位机与下位机的通信状态,可以实时监测上位机是否正常连接和通讯。一旦发现上位机掉线,系统可以及时采取相应的应对措施,避免因为掉线导致通讯中断或数据丢失。
(一)前情提要
心跳检测的实现主要是两个部分组成:
在示例中,上位机程序会周期修改Heart_Status,控制器程序会周期扫描Heart_Status,并在检测到变量的值异常的时候打开输出口,模拟掉线急停的操作。
流程图如下所示:
(二)创建变量
'**************************心跳相关变量定义************************ Global Heart_StarFlag '开始通讯标识变量 Global Heart_Status '通讯标识变量 Global Heart_Time '心跳超时时间 Global Heart_OutNum '急停OP数量 Global OutList_Address '急停OUTmodbus_long起始地址(Ps:3系列以下,自定义变量为24位浮点数,32位精度丢失,用modbus_long来代替) GLOBAL CONST cVer=CONTROL Heart_StarFlag =-1 Heart_Status = 0 Heart_OutNum = 10 OutList_Address =0 dim i,j
扫描流程:
1.等待上位机发送扫描开始指令;
2.根据控制器信号进入不同扫描程序(原理一样只是实现略有不同);
3.将通讯标识变量置1;
4.等待一个超时时间;
5.判断通讯标识;
6.如果为1表示上位机没有进行通讯,掉线状态。进行掉线保护操作;
7.为0表示进行通讯,正常状态。开启下一次扫描。
WHILE TRUE WAIT until Heart_StarFlag = 1 '等待PC软件连接 DELAY Heart_Time 'PC连接之后,延时一个超时时间,避免上位 WHILE TRUE if Heart_Status = 0 then Heart_Status = 1 '等待PC上修改通讯变量 ticks = Heart_Time '超时判断处理,等待PC上修改Heart_Flag = 0 WAIT until ticks < 0 or Heart_Status=0 if Heart_Status = 1 THEN RAPIDSTOP(2) WAIT IDLE OP(0,31,MODBUS_LONG(OutList_Address)) 'MODBUS_LONG存储32位整型按位控制掉线急停IO Heart_StarFlag=-1 Heart_Status = 0 ELSE OP(0,31,0) Endif WEND WEND end
1.在VS2010菜单“文件”→“新建”→“项目”,启动创建项目向导。
2.选择开发语言为“Visual C#”和.NET Framework 4以及Windows窗体应用程序。
3.找到厂家提供的光盘资料里面的C#函数库,路径如下(32位库为例)。
(1)进入厂商提供的光盘资料找到“04PC函数”文件夹,并点击进入。
(2)选择“01PC函数库V2.1”文件夹。
(3)选择“windows平台”文件夹。
(4)根据需要选择对应的函数库,这里选择32位库。
(5)解压C#压缩包,里面有C#对应的函数库。
(6)函数库具体路径如下。
4.将厂商提供的C#的库文件以及相关文件复制到新建的项目中。
(1)将Zmcaux.cs文件复制到新建的项目里面中。
(2)将zauxdll.dll和zmotion.dll文件放入bin\debug文件夹中。
5.用vs打开新建的项目文件,在右边的解决方案资源管理器中点击“显示所有文件”,然后鼠标右击Zmcaux.cs文件,点击“包括在项目中”。
6.双击Form1.cs里面的Form1,出现代码编辑界面,在文件开头写入using cszmcaux,并声明控制器句柄g_handle。
(二)PC函数介绍
1.PC函数手册可在光盘资料查看,具体路径如下。
2.链接控制器,获取链接句柄。
3.下载并运行控制器程序。
4.设置控制器程序参数。
(一)前情提要
上位机软件的主要功能:
1.下载并运行控制器程序;
2.设置扫描参数;
3.开启和关闭心跳检测;
4.设置急停IO
界面如下图所示:
(二)例程讲解
1.连接控制器获取句柄,上位机操作通过获取到的句柄来操作控制器。
//连接控制器,控制器默认IP是192.168.0.11 ZauxErr = zmcaux.ZAux_OpenEth("192.168.0.11", out g_Handle); if (0 != ZauxErr) { AlmInifFile.Write(DateTime.Now.ToString("F"), "ZAux_OpenEth执行错误,错误码:" + ZauxErr.ToString(), "错误码信息"); }
2.下载心跳bas程序
函数介绍:
通过OpenFileDialog获取控制器程序路径,然后通过openFile判断文件是否为空,最后通过ZAux_BasDown将控制器程序下载到控制器。
private void btnFile_Click(object sender, EventArgs e) { string m_strOpenFileName; FileStream openFile; OpenFileDialog fileOpen = new OpenFileDialog(); fileOpen.Filter = "Basic Files (*.bas)|*.bas|All Files (*.*)|*.*"; fileOpen.RestoreDirectory = true; fileOpen.FilterIndex = 1; if (fileOpen.ShowDialog() == DialogResult.OK) { m_strOpenFileName = fileOpen.FileName; try{ openFile = new FileStream(fileOpen.FileName, FileMode.Open, FileAccess.Read); openFile.Close(); } catch (Exception ex) { MessageBox.Show("Open Failed!"); return; } ret = zmcaux.ZAux_BasDown(g_handle, m_strOpenFileName, 0); controlReturnQue.Enqueue(ret); if (ret == 0) MessageBox.Show("心跳程序已成功加载"); } }
3.启动心跳检测
private void btnStart_Click(object sender, EventArgs e) { SetTimeOutPara(); ret = zmcaux.ZAux_Direct_SetUserVar(g_handle, "Heart_StarFlag", 1); controlReturnQue.Enqueue(ret); timeOut = 0; timer1.Enabled = true; timer1.Interval = int.Parse(tbxUpTimer.Text); tbState.Text = "已启动"; } //上位机扫描程序 private void timer1_Tick(object sender, EventArgs e) { ret = zmcaux.ZAux_Direct_SetUserVar(g_handle, "Heart_Status", 0); controlReturnQue.Enqueue(ret); if (ret != 0) timeOut++; if (timeOut > 1) { tbState.Text = "未启动"; timer1.Stop(); } }
4.RTSys的使用
(1)打开【RTSys】软件,点击【连接】输入控制器的IP(默认IP:192.168.0.11)。
(2)打开输出口界面,即可通过输出口观察是否掉线。
(三)教学视频
视频教程可点击→“运动控制卡网络通讯的心跳检测之C#上位机编程”查看。
完整代码获取地址
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有:运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位_XPCIe/XPCI系列运动控制卡等。