运动控制卡应用开发教程之VB60.docx

上传人:安*** 文档编号:17779513 上传时间:2022-05-26 格式:DOCX 页数:94 大小:4.62MB
返回 下载 相关 举报
运动控制卡应用开发教程之VB60.docx_第1页
第1页 / 共94页
运动控制卡应用开发教程之VB60.docx_第2页
第2页 / 共94页
点击查看更多>>
资源描述

《运动控制卡应用开发教程之VB60.docx》由会员分享,可在线阅读,更多相关《运动控制卡应用开发教程之VB60.docx(94页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、运动控制卡应用开发教程之VB6.0 正运动技术 导语:我们主要从VB6.0的工程新建、函数库引用和PC函数使用方面讲起,最后通过工程实战总线初始化例程讲解,来让大众熟悉它的工程开发。 今天,正运动小助手为大众分析一下应用VB6.0开发一个总线初始化的运动控制应用。 我们主要从VB6.0的工程新建、函数库引用和PC函数使用方面讲起,最后通过工程实战总线初始化例程讲解,来让大众熟悉它的工程开发。 在正式学习之前,我们先解析一下正运动技术的运动控制卡ECI2418和ECI2618。这两款产品分别是4轴,6轴运动控制卡。 ECI2418支持4轴脉冲输入与编码器反应,板载24点输入,16点输出,2AD,

2、2DA,支持手轮接口,其中特定输出口支持高速PWM控制。 ECI2618支持6轴脉冲输入与编码器反应,板载24点输入,16点输出,2AD,2DA,支持手轮接口,其中特定输出口支持高速PWM控制。 ECI2418,ECI2618均使用同一套API函数,均支持C、C+、C#、LabVIEW、Python、Delphi等开发语言,支持VC6.0、VB6.0、Qt、.Net等平台,支持Windows、Linux、WinCE、iMac等操作系统。 以下是VB6.0 开发流程 一 新建EXE工程,加载函数库。 (一)新建工程 翻开Microsoft Visual Basic菜单,在“文件“新建工程,选择新

3、建“标准EXE工程。 新建工程自带一个起始窗口,可以通过菜单“工程“属性更改起始窗口。 (二)加载PC函数库 VB6.0需要对添加的dll文件进展加载,否那么系统找不到函数所引用的函数库源,加载步骤如下。 1.找到厂家提供的光盘资料中的VB6.0资料。 2.将VB6.0压缩包解压,找到其中的dll库文件 3.将dll文件zmotion.dll和zauxdll.dll一起复制放入系统文件夹C:WindowsSystem32中。假设编程系统是64位系统,也要把上述文件复制到C:WindowsSysWOW64中。 4.通过“开场菜单“Windows系统“命令提示符或在“开场菜单搜索“cmd翻开命令提

4、示符窗口,使用如下指令: regsvr32 C: Windows SysWOW64 zmotion.dll regsvr32 C: Windows system32 zmotion.dll regsvr32命令用于注册COM组件,是Windows系统提供的用来向系统注册控件或卸载控件的命令,以命令行方式运行。Zmotion.dll加载后,才可以调用zauxdll的函数。 可以将该条指令复制到记事本上,然后把txt文件另存为bat文件来运行。另外,一些自己下载vb6.0的额外部件可以以用该方法加载,加载后能在菜单“工程“引用,“工程“部件中找到对应文件,本例程使用函数库无需加载部件或者引用。 (

5、三)函数库使用 将zauxdll.bas与工程文件放入同一文件夹,方便管理。 在工程资源管理器中右键添加模块,或在菜单“工程“添加模块功能中将zauxdll.bas添参加工程。 这样就做好使用正运动PC函数库的准备了。 二 查看PC函数手册,解析其用法。 (一)PC函数手册也在光盘资料里面。 详细途径如下: (二)PC编程。 一般先根据控制器连接方式选择对应的连接函数连接控制器,返回控制器句柄。接着用返回的控制器句柄,实现对控制器的控制,大局部函数都有对控制器的指向。通常有: Public g_handle As Long 控制器句柄是连接控制器的重要标志。 (三)通过网口连接控制器,获取句柄

6、。 通过网口 iret = ZAux_OpenEth(“127.0.0.1, g_handle)或串口 iret = ZAux_OpenCom(1, g_handle)连接控制器,获取控制器句柄 g_handle。 (四)下载总线初始化bas文件 下载总线初始化 bas文件到控制器 iret = ZAux_BasDown(g_handle, sFilePath, 1),sFilePath是对应总线初始化的文件地址,利用 CommonDialog对话框操作部件,获取对象文件地址。 总线初始化文件是基于ZDevelop编写的EtherCAT和RTEX初始化程序,通过ZAux_BasDown方式下载

7、到控制器以直接运行。 (五)EtherCAT数据字典读写 EtherCAT数据字典读写 ZAux_BusCmd_SDORead和 ZAux_BusCmd_SDOWrite。 其中对象字典编号、对象字典子编号、数据类型是十进制输入,手册上是十六进制表示,使用时注意转换。 (六)位置环增益与速度环增益调整 松下A6B系列EtherCAT总线驱动器中: 位置环增益对应数据字典为 3100H-00H(第一位置环增益)和 3105H-00H(第二位置环增益); 速度环增益对应数据字典为 3101H-00H(第一速度环增益)和 3106H-00H(第二速度环增益); 自动选择增益参数的标志位为 3002H

8、-00H。 详细请参考光盘资料(P315P318):技术资料ECAT通讯规格篇MINAS_A6B系列EtherCAT通讯/选择类型。 本篇文章使用第一位置环增益和第一速度环增益,通过实时自动增益调谐设置选择是否改变增益参数。 三 工程实战之连续插补运动例程讲解 (一)界面讲解 (二)例程简易流程图 /相关函数 / 建立与控制器的网口通讯 iret = ZAux_OpenEth(m_ipaddress, g_handle) 网口连接控制器 /定时器刷新 ret = ZAux_Direct_GetAxisEnable(g_handle, m_axisnum, i_AxisPara(0) ret =

9、 ZAux_Direct_GetAxisStatus(g_handle, m_axisnum, i_AxisPara(1) /下载初始化bas文件到控制器 iret = ZAux_BasDown(g_handle, sFilePath, 1) 下载到ROM /轴使能 iret = ZAux_Direct_SetAxisEnable(g_handle, m_axisnum, 0) 轴使能关闭 iret = ZAux_Direct_SetAxisEnable(g_handle, m_axisnum, 1) 轴使能翻开 /正转 iret = ZAux_Direct_Single_Vmove(g_ha

10、ndle, m_axisnum, 1) /反转 iret = ZAux_Direct_Single_Vmove(g_handle, m_axisnum, -1) /相对运动 iret = ZAux_Direct_Single_Move(g_handle, m_axisnum, Val(T_Move_s) /绝对运动 iret = ZAux_Direct_Single_MoveAbs(g_handle, m_axisnum, Val(T_Move_s) /停顿 iret = ZAux_Direct_Single_Cancel(g_handle, m_axisnum, 2) /运动增益读写 ire

11、t =ZAux_BusCmd_SDORead(g_handle, 0, T_SdoNode, Val(CLng( H 3100), 0, 3, m_sdo_data2_1) iret =ZAux_BusCmd_SDORead(g_handle, 0, T_SdoNode, Val(CLng( H 3101), 0, 3, m_sdo_data2_2) / IO信号读写 iret = ZAux_Direct_GetIn(g_handle, i , IN_status) iret = ZAux_Direct_GetOp(g_handle, i , OP_status) iret = ZAux_Di

12、rect_SetOp(g_handle, i , OP_status) (三)模块程序 1.初始化变量 Public g_handle As Long 当前使用的卡句柄 Public iret As Long 函数返回值 Public g_basflag As Boolean /BAS文件加载标志位 Public g_InitStatus As Integer /总线初始化完成状态 0-失败 1-成功 -1-初始化未完成 Public Bus_type As Single /BAS文件中变量判断总线类型,也作为BAS文件是否下载成功判断 Public if_home As Boolean Pu

13、blic m_axisnum As Integer 2.控制器连接 Private Sub T_OpenCom_Click() 串口连接 If g_handle 0 Then 断开前面的连接ZAux_Close (g_handle)g_handle= 0 End If iret= ZAux_OpenCom(Val(T_ComId.Text), g_handle) If (g_handle 0) Then Form1.Caption = 已连接 Timer1.Enabled = True T_AxisId_Change Dim ret As Integer iret= ZAux_Direct_G

14、etUserVar(g_handle, BUS_TYPE, Bus_type) 读取BAS文件中的变量判断是否有加载BAS文件 If (iret= 0 And Bus_type -1) Then g_basflag= True/文件已经加载 End If Else Form1.Caption = 未连接 MsgBox 控制器链接失败,请检测IP地址!, vbOKOnly, 警告 End If End Sub Private Sub T_IpAddress_DropDown() 下拉搜索IP Dim Buffer As String * 10240 T_IpAddress.Clear T_IpA

15、ddress.AddItem (127.0.0.1) iret= ZAux_SearchEthlist(Buffer, 10230, 200) 搜索IP地址列表 Dim Ip_List() As String Ip_List= Split(Buffer, ) For i= 0 To UBound(Ip_List) T_IpAddress.AddItem (Ip_List(i) Next End Sub Private Sub T_OpenEth_Click() 以太网连接 Dim m_ipaddress As String m_ipaddress= T_IpAddress.Text If g_

16、handle 0 Then 断开前面的连接 ZAux_Close (g_handle) g_handle= 0 End If iret= ZAux_OpenEth(m_ipaddress, g_handle)网口连接控制器 If (g_handle 0) Then Form1.Caption= 已连接 Timer1.Enabled = True T_AxisId_Change iret = ZAux_Direct_GetUserVar(g_handle, BUS_TYPE, Bus_type) 读取BAS文件中的变量判断是否有加载BAS文件 If (iret= 0 And Bus_type -

17、1) Then g_basflag = True/文件已经加载 End If Else Form1.Caption = 未连接 MsgBox 控制器链接失败,请检测IP地址!, vbOKOnly, 警告 End If End Sub Private Sub T_PciId_DropDown() 下拉搜索PCI Dim m_maxpci As Integer T_PciId.Clear m_maxpci= ZAux_GetMaxPciCards() For i= 0 To m_maxpci - 1 T_PciId.AddItem (i.ToString()Next End Sub Private

18、 Sub T_OpenPci_Click() Dim m_cardid As Integer If g_handle 0 Then 断开前面的连接 ZAux_Close (g_handle) g_handle= 0 End Ifm_cardid= Val(PCIADDRESS.Text) iret= ZAux_OpenPci(m_cardid, g_handle)PCI方式连接 If g_handle 0 Then Form1.Caption= 已连接 Timer1.Enabled = True T_AxisId_ChangeDim ret As Integeriret= ZAux_Direc

19、t_GetUserVar(g_handle, BUS_TYPE, Bus_type) 读取BAS文件中的变量判断是否有加载BAS文件If (iret = 0 And Bus_type -1) Then g_basflag= True/文件已经加载 End IfElse MsgBox 连接失败,请检查PCI, vbOKOnly, 提示 Form1.Caption = 未连接 End If End Sub Private Sub T_Close_Click() 断开链接If (g_handle 0) Then Timer1.Enabled = False ZAux_Close (g_handle)

20、 g_handle= 0 Form1.Caption= 未连接 End If End Sub 3.总线初始化 Private Sub T_DownLoad_Click() 下载文件到控制器 If (g_handle = 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示 Else WithCommonDialog1 .Filename = Basic1 .InitDir = App.Path .CancelError = True .Filter = 文件(*.bas)|*.bas End With Me.CommonDialog1.ShowOpen sFilePath

21、 = Me.CommonDialog1.Filename T_BasFile.Text = sFilePath iret = ZAux_BasDown(g_handle, sFilePath, /下载到ROM If (iret 0) Then MsgBox 文件下载失败!, vbOKOnly, 提示ElseMsgBox 下载成功!, vbOKOnly, 提示 End If End If End Sub 重新初始化总线,下载ROM时程序会自动初始化一次 PrivateSub T_BusInit_Click() If(g_handle = 0) Then MsgBox 未链接到控制器!, vbOK

22、Only, 提示 Else If(g_basflag And(g_InitStatus -1) Then -1:可能正在执行初始化 g_InitStatus = -1 Dim Buffer As String * 10240T_BusStatus.Text = 初始化未完成 任务1重新运行BAS中的初始化函数 iret = ZAux_Execute(g_handle, RUNTASK 1,Ecat_Init, Buffer, 0) Else MsgBox Bas文件未加载!, vbOKOnly, 提示 End If End If EndSub 4.轴运动 Private Sub T_SetEn

23、able_Click() /切换使能If (g_handle= 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示 Else If (T_EnableStatus.Text= on) Then iret = ZAux_Direct_SetAxisEnable(g_handle, m_axisnum, 0) Elseiret= ZAux_Direct_SetAxisEnable(g_handle, m_axisnum, 1) End If End If End Sub Private Sub T_ClearAlm_Click() /去除轴报警 If (g_handle =

24、 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示 Else iret= ZAux_BusCmd_DriveClear(g_handle, m_axisnum, 0) End If End Sub Private Sub T_FwdMove_Click() 正转 If (g_handle = 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示Elseiret= ZAux_Direct_SetUnits(g_handle,m_axisnum,Val(T_Units.Text) iret= ZAux_Direct_SetSpeed(g_handle

25、,m_axisnum,Val(T_Speed.Text) iret= ZAux_Direct_SetAccel(g_handle,m_axisnum,Val(T_Accel.Text) iret= ZAux_Direct_Single_Vmove(g_handle,m_axisnum,1) End If End Sub Private Sub T_RevMove_Click() 反转If (g_handle = 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示 Else iret= ZAux_Direct_SetUnits(g_handle,m_axisnum,Val

26、(T_Units.Text) iret= ZAux_Direct_SetSpeed(g_handle,m_axisnum,Val(T_Speed.Text) iret= ZAux_Direct_SetAccel(g_handle,m_axisnum,Val(T_Accel.Text) iret= ZAux_Direct_Single_Vmove(g_handle,m_axisnum,-1) End If End Sub Private Sub T_Move_Click() 运动If (g_handle = 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示 Elseir

27、et= ZAux_Direct_SetUnits(g_handle,m_axisnum,Val(T_Units.Text) iret= ZAux_Direct_SetSpeed(g_handle,m_axisnum,Val(T_Speed.Text) iret= ZAux_Direct_SetAccel(g_handle,m_axisnum,Val(T_Accel.Text) If T_moveType(0).value = True Then iret= ZAux_Direct_Single_Move(g_handle, m_axisnum,Val(T_Move_s) ElseIf T_mo

28、veType(1).value = True Then iret= ZAux_Direct_Single_MoveAbs(g_handle,m_axisnum,Val(T_Move_s) End If End If End Sub Private Sub T_Move_Click() 运动 If (g_handle = 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示 Else iret= ZAux_Direct_SetUnits(g_handle,m_axisnum,Val(T_Units.Text) iret= ZAux_Direct_SetSpeed(g_han

29、dle,m_axisnum,Val(T_Speed.Text) iret= ZAux_Direct_SetAccel(g_handle,m_axisnum,Val(T_Accel.Text) If T_moveType(0).value = True Then iret= ZAux_Direct_Single_Move(g_handle,m_axisnum, Val(T_Move_s) ElseIf T_moveType(1).value = True Then iret= ZAux_Direct_Single_MoveAbs(g_handle,m_axisnum,Val(T_Move_s)

30、End If End If End Sub Private Sub T_Stop_Click() 停顿 If (g_handle = 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示 Else iret= ZAux_Direct_Single_Cancel(g_handle, m_axisnum, 2) End If End Sub 5.总线回零 Private Sub T_StartHome_Click() 驱动器自身回零 If (g_handle = 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示 Else If (Bus_type=

31、0) Then iret= ZAux_Direct_SetSpeed(g_handle,m_axisnum,Val(T_HomeSp1.Text) iret= ZAux_Direct_SetCreep(g_handle,m_axisnum,Val(T_HomeSp2.Text) iret= ZAux_BusCmd_SetDatumOffpos(g_handle,m_axisnum, _ Val(T_HomeOffpos.Text)iret= ZAux_BusCmd_Datum(g_handle,m_axisnum,Val(T_HomeMode.Text) Else MsgBox rtex不支持

32、!, vbOKOnly, 提示 End If End If End Sub Private Sub T_StopHome_Click() 停顿 T_Stop_Click End Sub 6.总线数据交互 Private Sub T_EcatWrite_Click() ETHERCAT写 If (g_handle = 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示 Else If (Bus_type = 0) Then Dim m_sdo_node0 As Long Dim m_sdo_index0 As Long Dim m_sdo_sub0 As Long Dim

33、 m_sdo_type0 As Long Dim m_sdo_data0 As Long m_sdo_node0 = Val(T_SdoNode0.Text) m_sdo_index0= Val(T_SdoIndex0.Text) m_sdo_sub0= Val(T_SdoSub0.Text) m_sdo_type0= T_SdoType0.ListIndex + 1 m_sdo_data0= Val(T_SdoData0.Text) iret= ZAux_BusCmd_SDOWrite(g_handle,0, _ m_sdo_node0,m_sdo_index0,m_sdo_sub0,m_s

34、do_type0,m_sdo_data0)If (iret 0) ThenMsgBox 写入失败!, vbOKOnly, 提示End If Else MsgBox 非ETHERCAT模块!, vbOKOnly, 提示 End If End If End Sub Private Sub T_EcatRead_Click() ETHERCAT读取 If (g_handle = 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示 Else If (Bus_type = 0) Then Dim m_sdo_node1 As Long Dim m_sdo_index1 As Lo

35、ngDim m_sdo_sub1 As LongDim m_sdo_type1 As LongDim m_sdo_data1 As Longm_sdo_node1 = Val(T_SdoNode1.Text) m_sdo_index1 = Val(T_SdoIndex1.Text)m_sdo_sub1 = Val(T_SdoSub1.Text) m_sdo_type1 = T_SdoType1.ListIndex + 1 m_sdo_data1 = 0 iret=ZAux_BusCmd_SDORead(g_handle,0, _ m_sdo_node1, m_sdo_index1, m_sdo

36、_sub1, m_sdo_type1, m_sdo_data1) If (iret 0) Then MsgBox 读取失败!, vbOKOnly, 提示 ElseT_SdoData1.Text = Str(m_sdo_data1) End IfElseMsgBox 非ETHERCAT模块!, vbOKOnly, 提示 End If End If End Sub Private Sub auto_gain_check_Click() 自动增益标志设置 If (Bus_type = 0) Then If auto_gain_check.value = 0 Then iret=ZAux_BusCmd

37、_SDOWrite(g_handle,0, Val(T_SdoNode2.Text), Val(CLng( H 3002), 0, 3, 0) Else iret= ZAux_BusCmd_SDOWrite(g_handle, 0, Val(T_SdoNode2.Text), Val(CLng( H 3002), 0, 3, 1) End IfElse MsgBox 非ETHERCAT模块!, vbOKOnly, 提示 End If End Sub Private Sub T_ECAT_W_Click() 速度环、位置环增益写 If (g_handle = 0) Then MsgBox 未链接

38、到控制器!, vbOKOnly, 提示 Else If (Bus_type = 0) Then iret = ZAux_BusCmd_SDOWrite(g_handle,0, Val(T_SdoNode2.Text), Val(CLng( H 3100), 0, 3, Val(T_PostGain_W.Text) 位置环增益写 iret = iret + ZAux_BusCmd_SDOWrite(g_handle, 0, Val(T_SdoNode2.Text), Val(CLng( H 3101), 0, 3, Val(T_VeloGain_W.Text) 速度环增益写 If (iret 0

39、) Then MsgBox 写入失败!, vbOKOnly, 提示 End If ElseMsgBox 非ETHERCAT模块!, vbOKOnly, 提示 End IfEnd If End Sub Private Sub T_ECAT_R_Click() 速度环、位置环增益读 If (g_handle = 0) Then MsgBox 未链接到控制器!, vbOKOnly, 提示 Else If (Bus_type = 0) Then iret = ZAux_BusCmd_SDORead(g_handle, 0, Val(T_SdoNode3.Text), Val(CLng( H 3100)

40、, 0, 3, m_sdo_data2_1) 位置环增益读 iret = iret + ZAux_BusCmd_SDORead(g_handle, 0, Val(T_SdoNode3.Text), Val(CLng( H 3101), 0, 3, m_sdo_data2_2) 速度环增益读 If (iret 0) Then MsgBox 写入失败!, vbOKOnly, 提示 ElseT_PostGain_R = Str(m_sdo_data2_1) T_VeloGain_R = Str(m_sdo_data2_2) End If Else MsgBox 非ETHERCAT模块!, vbOKO

41、nly, 提示 End If End If End Sub 7.IO口操作 Sub IN_OP_read() IO口读取 Dim IN_status As Long Dim OP_status As Long Dim in_page As Long Dim op_page As Longin_page = T_IN_page.ListIndex op_page = T_OP_page.ListIndex Dim i For i = 0 To 7 iret = ZAux_Direct_GetIn(g_handle, i + in_page * 8, IN_status) iret = ZAux_Direct_GetOp(g_handle, i + op_page * 8, OP_status)T_IN_Check(i).value = IN_status T_IN_Check(i).Caption = Str(i + in_p

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁