ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:69.64KB ,
资源ID:24096982      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24096982.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(运动控制卡C程序示例.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

运动控制卡C程序示例.docx

1、运动控制卡C程序示例 2. VC编程示例2.1 准备工作(1) 新建一个项目,保存为“VCExample.dsw”;(2) 根据前面讲述的方法 ,将静态库“8840.lib”加载到项目中;2.2 运动控制模块(1) 在项目中添加一个新类 ,头文件保存为“CtrlCard.h”,源文件保存为“CtrlCard.cpp”;(2) 在运动控制模块中首先自定义运动控制卡初始化函数 ,对需要封装到初始化函数中的库函数进行初始化;(3) 继续自定义相关的运动控制函数 ,如:速度设定函数 ,单轴运动函数 ,差补运动函数等;(4) 头文件 “CtrlCard.h”代码如下:# ifndef _ADT8840_

2、CARD_# define _ADT8840_CARD_/* 运动控制模块 * 为了简单、方便、快捷地开发出通用性好、可扩展性强、 维护方便的应用系统 ,我们在控制卡函数库的基础上将 所有库函数进行了分类封装。下面的示例使用一块运动 控制卡*/#define MAXAXIS 4 /最大轴数class CCtrlCard public: int Setup_HardStop(int value, int logic); int Setup_Stop1Mode(int axis, int value, int logic);(设置stop1信号方式) int Setup_Stop0Mode(int

3、 axis, int value, int logic);(设置stop0信号方式) int Setup_LimitMode(int axis, int value1, int value2, int logic);(设置限位信号方式) int Setup_PulseMode(int axis, int value); (设置脉冲输出方式) int Setup_Pos(int axis, long pos, int mode); (设置位置计数器) int Write_Output(int number, int value);(输出单点函数) int Read_Input(int numbe

4、r, int &value);(读入点) int Get_CurrentInf(int axis, long &LogPos, long &ActPos, long &Speed); (获取运动信息) int Get_Status(int axis, int &value, int mode); (获取轴的驱动状态) int StopRun(int axis, int mode); (停止轴驱动) int Interp_Move4(long value1, long value2, long value3, long value4); (四轴差补函数) int Interp_Move3(int

5、 axis1, int axis2, int axis3, long value1, long value2, long value3); (三轴差补函数) int Interp_Move2(int axis1, int axis2, long value1, long value2); (双轴差补函数) int Axis_Pmove(int axis ,long value);(单轴驱动函数) int Axis_Cmove(int axis ,long value);(单轴连续驱动函数) int Setup_Speed(int axis ,long startv ,long speed ,l

6、ong add ); (设置速度模块) int Init_Board(int dec_num);(函数初始化)(设置速度模块) CCtrlCard(); (定义了一个同名的无参数的构造函数) int Result; /返回值;#endif(5) 源文件 “CtrlCard.cpp”代码如下:#include stdafx.h#include DEMO.h#include CtrlCard.h#include adt8840.hint devnum=-1;CCtrlCard:CCtrlCard()(构造函数,为什么是空的?)/*初始化函数* 该函数中包含了控制卡初始化常用的库函数 ,这是调用 其

7、他函数的基础 ,所以必须在示例程序中最先调用 返回值0表示初始化成功*/int CCtrlCard:Init_Board(int devnum)/*/ int mode =0;/应答模式为1时 ,响应串口接收有效,0时无效 if(devnum=0)(devnum:设备号) for (int i = 1; i= 0) /匀速运动 Result = adt8840a_set_startv(devnum,axis, startv); (设定初始速度) adt8840a_set_speed (devnum,axis, startv);(设定驱动速度) else /加减速运动 Result = adt8

8、840a_set_startv(devnum,axis, startv); (设定初始速度) adt8840a_set_speed (devnum,axis, speed); (设定驱动速度) adt8840a_set_acc (devnum,axis, add); (设定加速度) return Result;/*单轴驱动函数* 该函数用于驱动单个运动轴运动 参数: axis-轴号 ,value-输出脉冲数 返回值=0正确 ,返回值=1错误*/int CCtrlCard:Axis_Pmove(int axis, long value) Result = adt8840a_pmove(devnu

9、m,axis, value(脉冲数)); return Result;/*任意两轴插补函数* 该函数用于驱动任意两轴进行插补运动 参数:axis1,axis2-轴号、value1,value2-脉冲数 返回值=0正确 ,返回值=1错误*/int CCtrlCard:Interp_Move2(int axis1, int axis2, long value1, long value2) Result = adt8840a_inp_move2(devnum,axis1, axis2, value1, value2); return Result;/*任意三轴插补函数* 该函数用于驱动任意三轴进行插

10、补运动 参数:axis1,axis2,axis3-轴号、value1,value2,value3-脉冲数 返回值=0正确 ,返回值=1错误*/int CCtrlCard:Interp_Move3(int axis1, int axis2, int axis3, long value1, long value2, long value3) Result = adt8840a_inp_move3(devnum,axis1, axis2, axis3, value1, value2, value3); return Result;/*四轴插补函数* 该函数用于驱动XYZW四轴进行插补运动 参数:va

11、lue1,value2,value3,value4-输出脉冲数 返回值=0正确 ,返回值=1错误*/int CCtrlCard:Interp_Move4(long value1, long value2, long value3, long value4) Result = adt8840a_inp_move4(devnum,value1, value2, value3, value4); return Result;/*停止轴驱动* 该函数用于立即或减速停止轴的驱动 参数:axis-轴号、mode-减速方式(0立即停止, 1减速停止) 返回值=0正确 ,返回值=1错误*/int CCtrlC

12、ard:StopRun(int axis, int mode) if(mode = 0) /立即停止 Result = adt8840a_sudden_stop(devnum, axis); else /减速停止 Result = adt8840a_dec_stop(devnum, axis); return Result;/*获取轴的驱动状态* 该函数用于获取单轴的驱动状态或插补驱动状态 参数:axis-轴号 ,value-状态指针(0-驱动结束 ,非0正在驱动) mode(0-获取单轴驱动状态 ,1获取插补驱动状态) 返回值=0正确 ,返回值=1错误*/int CCtrlCard:Get_

13、Status(int axis, int &value, int mode) if (mode=0) /获取单轴驱动状态 Result=adt8840a_get_status(devnum,axis,&value); else /获取插补驱动状态 Result=adt8840a_get_inp_status(devnum,&value); return Result;/*获取运动信息* 该函数用于反馈轴当前的逻辑位置 ,实际位置和运行速度 参数:axis-轴号,LogPos-逻辑位置,ActPos-实际位置,Speed-运行速度 返回值=0正确 ,返回值=1错误*/int CCtrlCard:

14、Get_CurrentInf(int axis, long &LogPos, long &ActPos, long &Speed ) Result = adt8840a_get_command_pos(devnum,axis, &LogPos);(获取逻辑位置) adt8840a_get_actual_pos (devnum, axis, &ActPos); (获取实际位置) adt8840a_get_speed (devnum, axis, &Speed);(获取驱动速度) return Result;/*读取输入点* 该函数用于读取单个输入点 参数:number-输入点(0 39) 返回值

15、:0 低电平 ,1 高电平 ,-1 错误*/int CCtrlCard:Read_Input(int number,int &value) Result = adt8840a_read_bit(devnum, number, &value); return Result;/*输出单点函数* 该函数用于输出单点信号 参数: number-输出点(0 15),value 0-低电平、1高电平 返回值=0正确 ,返回值=1错误*/int CCtrlCard:Write_Output(int number, int value) Result = adt8840a_write_bit(devnum,

16、number, value); return Result;/*设置位置计数器* 该函数用于设置逻辑位置和实际位置 参数:axis-轴号,pos-设置的位置值 mode 0设置逻辑位置,非0设置实际位置 返回值=0正确 ,返回值=1错误*/int CCtrlCard:Setup_Pos(int axis, long pos, int mode) if(mode=0) Result = adt8840a_set_command_pos(devnum,axis, pos);(设置逻辑计数器) else Result = adt8840a_set_actual_pos(devnum, axis, p

17、os);(设置实位计数器) return Result;/*设置脉冲输出方式* 该函数用于设置脉冲的工作方式 参数:axis-轴号 , value-脉冲方式 0脉冲脉冲方式 1脉冲方向方式 返回值=0正确 ,返回值=1错误 默认脉冲方式为脉冲方向方式 本程序采用默认的正逻辑脉冲和方向输出信号正逻辑*/int CCtrlCard:Setup_PulseMode(int axis, int value) Result = adt8840a_set_pulse_mode(devnum,axis, value, 0, 0);(设置脉冲模式) return Result;/*设置限位信号方式* 该函数用

18、于设定正/负方向限位输入nLMT信号的模式 参数: axis轴号 value1 0正限位有效 1正限位无效 value2 0负限位有效 1负限位无效 logic 0低电平有效 1高电平有效 默认模式为:正限位有效、负限位有效、低电平有效 返回值=0正确 ,返回值=1错误 */int CCtrlCard:Setup_LimitMode(int axis, int value1, int value2, int logic) Result = adt8840a_set_limit_mode(devnum,axis, value1, value2, logic); return Result;/*设

19、置stop0信号方式* 该函数用于设定stop0信号的模式 参数: axis轴号 value 0无效 1有效 logic 0低电平有效 1高电平有效 默认模式为:无效 返回值=0正确 ,返回值=1错误 */int CCtrlCard:Setup_Stop0Mode(int axis, int value, int logic) Result = adt8840a_set_stop0_mode(devnum,axis, value ,logic); return Result;/*设置stop1信号方式* 该函数用于设定stop1信号的模式 参数: axis轴号 value 0无效 1有效 lo

20、gic 0低电平有效 1高电平有效 默认模式为:无效 返回值=0正确 ,返回值=1错误 */int CCtrlCard:Setup_Stop1Mode(int axis, int value, int logic) Result = adt8840a_set_stop1_mode(devnum,axis, value, logic); return Result;/*单轴连续驱动函数* 该函数用于驱动单个运动轴运动 参数: axis-轴号 ,value-脉冲方向返回值=0正确 ,返回值=1错误*/int CCtrlCard:Axis_Cmove(int axis, long value) Re

21、sult = adt8840a_continue_move(devnum,axis, value); return Result; 2.3 功能实现模块 2.3.1 界面设计说明:(1)速度设定部分用于设定各轴的起始速度、驱动速度和加速度;位置设定设定各轴的驱动脉冲;驱动信息实时显示各轴的逻辑位置、实际位置和运行速度。(2)驱动对象通过选择驱动对象 ,确定参与联动或插补的轴;(3)联动用于向所选驱动对象的所有轴发出单轴驱动指令;插补用于向所选驱动对象的所有轴发出插补指令;停止停止所有轴的脉冲输出;以上所有数据均以脉冲为单位。 2.3.2 运动控制卡初始化代码位于窗体初始化中 ,用户新增代码如下

22、: SetDlgItemText(IDC_EDIT_OPPIP,192.168.0.123);/指定控制卡IP地址SetDlgItemText(IDC_EDIT_MAC,00-AB-CD-00-01-23);/指定网卡地址SetDlgItemText(IDC_EDIT_INFO,请先执行初始化);DeviceAddr_init();/ 设备接口地址初始化 /* 设置默认初始速度为100 * m_nStartvX = 100; m_nStartvY = 100; m_nStartvZ = 100; m_nStartvA = 100;/*设置默认驱动速度为2000* m_nSpeedX = 2000; m_nSpeedY = 2000; m_nSpeedZ = 2000; m_nSpeedA =

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1