运动控制卡应用编程技巧

合集下载

MPC08D 运动控制器 编程手册说明书

MPC08D 运动控制器 编程手册说明书

编程手册(0.3版)版权申明乐创自动化技术股份有限公司保留所有权利乐创自动化技术股份有限公司(以下简称乐创自动化公司)保留在不事先通知的情况下,修改本手册中的产品和产品规格等文件的权利。

乐创自动化公司不承担由于使用本手册或本产品不当,所造成直接的、间接的、附带的或相应产生的损失或责任。

乐创自动化公司具有本产品及其软件的专利权、版权和其它知识产权。

未经授权,不得直接或间接地复制、制造、加工、使用本产品及其相关部分。

前言感谢购买MPC08D 运动控制器!MPC08D 是本公司研制的一款高性价比通用控制器。

本编程手册描述MPC08D 运动指令的使用。

使用前请充分理解MPC08D 的使用功能。

安全警告注意以下警告,以免伤害操作人员及其他人员,防止机器损坏。

◆下面的“危险”和“警告”符号是按照其事故危险的程度来标出的。

◆下列符号指示哪些是禁止的,或哪些是必须遵守的。

常规安全概要指示一个潜在的危险情况,如果不避免,将导致死亡或严重伤害。

危险指示一个潜在的危险情况,如果不避免,将导致轻度或中度伤害,或物质损坏。

警告这个符号表示禁止操作。

这个符号表示须注意的操作。

请查看下列安全防范措施以避免受伤害并防止对本产品或任何与其相连接的产品造成损伤。

为避免潜在的危险,请按详细说明来使用本产品。

使用正确的电源线。

请使用满足国家标准的电源线。

正确地连接和断开。

先将控制卡输出连接至转接板,再将电机、驱动器连接到转接板,最后开启电源。

断开时先关闭外部电源,再断开电机、驱动器与转接板的连接,最后断开控制卡与转接板的连接。

当有可疑的故障时不要进行操作。

如果您怀疑本产品有损伤,请让有资格的服务人员进行检查。

不要在湿的/潮湿环境下操作。

不要在爆炸性的空气中操作。

保持产品表面清洁和干燥。

防止静电损伤。

静电释放(ESD)可能会对运动控制器及其附件中的元件造成损伤。

为了防止ESD,请小心处理控制器元件,不要触摸控制器上元器件。

不要将控制器放置在可能产生静电的表面。

运动控制卡应用编程技巧

运动控制卡应用编程技巧

运动控制卡应用编程技巧内容来源网络,由“深圳机械展(11万㎡,1100多家展商,超10万观众)”收集整理!更多cnc加工中心、车铣磨钻床、线切割、数控刀具工具、工业机器人、非标自动化、数字化无人工厂、精密测量、3D打印、激光切割、钣金冲压折弯、精密零件加工等展示,就在深圳机械展.关于源代码的阅读,需要读者有一定的C++编程基础,至少对以下表示形式不会产生误解:const char *pString; //指定pString邦定的数据不能被修改char * const pString; //指定pString的地址不能被修改const char * const pString; //含上面两种指定功能当然,随便提醒一下,这些源代码若需要加入你的软件工程当中,还需要作一些调整和修改,因此,这些源代码实质上称为伪代码也可以,之所以展现它们,是让程序员们有个可视化的快感,特别是那些认为源代码就是一切的程序员。

同时,为了提高针对性,大部分控制卡调用的函数会明确指出是邦定哪些卡的,实际应用时,程序员可自行选择,以体现一下自己的智商是可以写写软件的。

一、控制卡类的单一实例实现把控制卡类作一个类来处理,几乎所有C++程序员都为举双手表示赞同,故第一个什么都没有的伪代码就此产生,如下表现:class CCtrlCard{public:…Functionpublic:…attrib}于是,用这个CctrlCard可以产生n多个控制卡实例,只要内存足够。

然而,针对现实世界,情况并不那么美好。

通常情况下,PC机内只插同种类型的控制卡1到2张,在通过调用d1000_board_init或d3000_board_init函数时,它们会负责返回有效卡数nCards,然后从0-nCards*4- 1自行按排好轴数。

初始化函数就是C++的new或malloc的操作,取得系统的资源,但是控制卡的资源与内存不一样,取得资源后必需要释放才可以再次获取,即控制卡资源是唯一的。

运动控制卡应用编程技巧

运动控制卡应用编程技巧

运动控制卡应用编程技巧1.熟悉运动控制卡的指令集和接口:不同的运动控制卡有不同的指令和接口,首先需要熟悉所使用的运动控制卡的指令和接口。

这样可以更好地理解和掌握编程时的参数设置和指令调用。

2. 使用合适的编程语言:选择适合的编程语言可以更加方便地开发运动控制卡的应用程序。

常用的编程语言有C/C++、Python等。

其中C/C++的性能比较高,适合对实时性要求较高的应用场景;Python则具有简洁易读的特点,适合快速开发和调试。

3.精确控制运动参数:在运动控制卡的编程中,控制运动参数的精确性关系到设备的稳定性和运行效果。

要尽量准确地设置加速度、减速度、速度和位置等参数,并根据具体应用场景进行调整。

在编写控制程序时,可以通过采样和调试等手段来实现精确控制。

4.实现实时控制:对于需要实时控制的场景,需要特别注意处理程序的响应速度。

在编程中,可以使用多线程或中断控制的方式来实现实时性要求,确保控制程序能及时响应和处理运动控制卡的指令。

5.异常处理和错误检测:运动控制卡的编程过程中,需要时刻关注可能出现的异常情况和错误。

在程序中加入相应的异常处理和错误检测机制,可以及时发现和解决问题,提高系统的稳定性和可靠性。

6.数据存储和分析:对于一些特殊应用场景,可能需要将运动控制卡的数据进行存储和分析。

在编程中,可以设置数据采集和存储的机制,并使用相应的分析工具对数据进行处理和分析,从而为后续的优化和决策提供依据。

7.优化程序性能:为了提高运动控制卡应用程序的性能,可以采取一些优化措施。

比如使用合适的数据结构、减少不必要的计算、提高算法效率等。

通过优化程序性能,可以提高系统的响应速度和效率,提升运动设备的运行效果。

总的来说,编程运动控制卡需要熟悉控制卡的指令和接口,选择合适的编程语言,精确控制运动参数,实现实时控制,处理异常和错误,进行数据存储和分析,并优化程序性能。

通过合理应用这些技巧,可以有效地开发和控制运动设备,提高自动化设备的性能和效率。

雷赛运动控制卡应用程序开发注意事项

雷赛运动控制卡应用程序开发注意事项

发布时间:2011年6月1日雷赛科技刘玉平概述:对于一些初次使用雷赛运动控制产品的客户,由于对本公司产品的特点以及程序开发流程不够熟悉,在应用程序的开发过程中,难免会疏漏一些细节,从而产生各种问题,浪费很多宝贵的时间。

如果在应用程序开发前,就可以考虑到那些既重要又容易疏漏的细节,这样可以避免很多不必要的问题产生,从而大大缩短程序的开发周期。

本文总结以往的经验,以雷赛运动控制卡DMC2410B为例,为客户在开发应用程序时的初始化过程给出了一些参考与建议(其他产品与此类似),其中包括运动控制卡的初始化、特殊参数的设置及各种信号的设置,如图1虚线框内所示,这些处理过程必须加载至应用程序的初始化过程中,不同编程环境下,应用程序的初始化过程略有不同,例如在VB6.0编程环境下,须在Form_Load()函数中做程序的初始化处理,而在VC6.0编程环境下,须在OnInitDialog()函数中做程序的初始化处理。

图1 DMC2410B控制卡应用程序开发流程图1所示的控制卡初始化过程中,实线框内所示的参数设置或特殊信号的设置必须在初始化过程中加以处理,而虚线框内的信号在未选择使用时,可以不用设置,而当选择使用这些信号时,必须进行正确设置。

下面对这些初始化过程的方法及必要性做出简要的说明。

一、初始化运动控制卡相关函数:WORD d2410_board_init (void)函数功能:为控制卡分配系统资源并初始化控制卡;若在应用程序中未初始化控制卡,则系统无法为控制卡分配资源,导致控制卡无法正常使用,程序在运行时提示错误,弹出如图2所示对话框:图2 未初始化控制卡时的错误提示注意:程序在结束运行时,必须关闭运动控制卡,以释放系统资源,否则控制卡将一直占用系统资源,导致再次运行该应用程序时产生错误。

关闭控制卡的方法及说明如下:相关函数:Void d2410_board_close (void)函数功能:释放控制卡占用的系统资源。

控制卡应用编程技巧

控制卡应用编程技巧

控制卡应用编程技巧1.合理设计数据结构:在进行控制卡应用编程时,首先需要考虑合理的数据结构设计。

选择适当的数据结构可以提高代码执行效率,减小内存占用,并便于扩展和维护。

例如,使用链表结构来存储数据可以方便地插入和删除节点,而使用数组结构可以提高数据的访问速度。

2.优化算法和算法复杂度:在编写控制卡应用程序时,尽量使用高效的算法来提高程序的执行速度。

可以通过降低算法的时间和空间复杂度来优化程序的性能。

例如,使用二分算法代替线性算法,可以在有序数据中快速找到目标值。

3.合理利用缓存机制:缓存是提高程序执行效率的有效手段。

在控制卡应用编程中,可以使用缓存来存储频繁访问的数据,避免重复计算或IO操作,从而减少系统资源的消耗。

例如,可以将频繁访问的数据存储在高速缓存中,以提高数据的读取速度。

4. 错误处理和异常处理:在编写控制卡应用程序时,需要合理处理各种可能的错误和异常情况。

错误处理和异常处理能够提高程序的稳定性和鲁棒性,并提供更好的程序健壮性。

例如,可以使用try-catch语句块来捕获异常并进行相应的处理,避免程序崩溃。

5.避免内存泄漏和资源泄漏:内存泄漏和资源泄漏是程序开发中常见的问题。

在控制卡应用编程中,需要注意合理管理内存和资源,及时释放不再使用的对象和资源,避免造成内存泄漏和资源泄漏。

例如,在使用完毕后,可以显式地调用释放内存和资源的函数。

6.多线程和并发编程:在控制卡应用编程中,多线程和并发编程可以提高程序的性能和响应能力。

合理使用多线程和并发编程可以并行执行多个任务,充分利用系统资源,并加快程序的响应速度。

例如,可以使用多线程来处理并发请求,提高系统的吞吐量。

7.代码重用和模块化设计:在编写控制卡应用程序时,应鼓励代码的重用和模块化设计。

通过将相关代码封装成函数或类,并进行适当的抽象和封装,可以提高代码的可读性、可维护性和可扩展性。

例如,可以将相似的功能模块进行封装,通过调用函数或对象来实现代码的重用。

C#2010编程基础及在运动控制卡上的应用

C#2010编程基础及在运动控制卡上的应用

本人感受: C#的功能强:类库庞大、多线程、速度快; 界面设计简单、美观,和VB类似; 稳定性比VB6.0强(调试运动控制卡时没有自动退出现象) ; 智能化水平高(写代码时格式自动对齐,有智能提示;调试程序时方便,能给出 有用的信息等) ; 学C#比学VC容易(难点是要适应一些新概念,如:类) 。
C#的巨大成功是安德斯· 海尔斯伯格在编译器领域的领袖地位的又一次体现。可是说:安 德斯· 海尔斯伯格是C #之父。 (Turbo Pascal、Delphi也是出自他手) 三. C#的优点: C#是一种强大的、面向对象的程序开发语言,是专门用于.Net的编程语言,用C#编程的 代码总是在.Net Framework中运行。 C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法 风格、创新的语言特性和便捷的面向组件编程的支持成为.NET平台的首选语言。 C#在继承C和C++强大功能的同时去掉了一些它们的复杂特性 (例如没有指针、 宏以及不 允许多重继承等) 。 C#语言和Java很相似。学会C#后,学习Java很容易。

Python/ˈpaɪθən/是一种解释型、 面向对象、 动态数据类型的高级程序设计语言。 自从1991Python语言诞生至今, 它逐渐被广泛应用于处理系统管理任务和Web编程。免费、开源。
数据表明:用C#的人比用VB的人多近一倍。 二. C#的历史: C#读作C Sharp。符号#有2种解释: #在五线谱中读作Sharp,是“升半个音”的意思。这里用#有对C提升之意。 C C++ C + + + + ,为了方便写成了C #。
// Form1.cs 为窗体事件的代码 public partial class Form1 : Form { public Form1() { InitializeComponent(); }

MPC02 运动控制卡运动函数库操作手册:

MPC02 运动控制卡运动函数库操作手册:
步进机电有限公司
Step-servo Co. Ltd.
MPC02 运动控制卡
操 作 手 册
2.1 版
MPC02 运动控制卡操作手册 2.1 版
目录
1 概 述............................................................................1
2 控制卡的安装..................................................................8
2.1 硬件安装..............................................................................................8 2.2 软件安装..............................................................................................8
69iii概述1概概述述11mpc02的软硬件简介的软硬件简介mpc02控制卡是基于pc机pci总线的步进电机或数字式伺服电机的上位控制单元它与pc机构成主从式控制结构pc机负责人机交互界面的管理和控制系统的实时监控等方面的工作例如键盘和鼠标的管理发送外部信号的监控等等mpc02卡完成运动控制的所有细节向信号的输出自动升降速的处理原点和限位等信号的检测等等卡可控制3轴步进电机或数字式伺服电机轴的控制每轴均可输出脉冲和方向信号减速限位等开关信号以实现回原点保护等功能这些开关信号由mpc02卡自动检测并作出反应另外mpc02卡还提供了适用于伺服系统的伺服使能和偏差清零信号接口以及供用户使用的通用io接口mpc02卡采用先进的专用控制芯片具有梯形及s形升降速曲线最高输出频率可达24mhz带有编码器反馈端口主要适用于数字式交流伺服系统或闭环的步进电机控制系统mpc02配备了功能强大内容丰富的运动控制驱动软件工具算法和运动函数的执行效率方面采用了更有效的方法和实时性这些软件工具主要分为示范软件和运动函数库两大类利用mpc02的示范软件既可以很快地熟悉mpc02控制卡的软硬件功能又可以方便快捷地测试执行电机及驱动系统在完成各种运动时的性能特性发用户只要用vc或visualbasic等支持dll调用的开发工具编制所需的用户界面程序并把它与mpc02运动库链接起来就可以开发出自己的控制系统例如数控系统检测设备自动生产线等mpc02的运动函数库能够完成与运动控制有关的复杂细节比如升降速直线插补系统的开发周期系统状态的显示控制指令的包括脉冲和方每块mpc02以实现多于三个运动同时可外接原点并支持多卡共用以控制电机的运转mpc02在插补插补速度提高了插补精度mpc02运动函数库用于二次开圆弧插补等这样就可以大大缩短控制1mpc02运动控制卡操作手册21版12mpc02的结构的结构mpc02控制卡作为开发运动控制系统的平台其结构是开放式的该卡插在pc机pci扩展槽内使用同时使用控制卡的数量和各卡上的控制轴数可方便地配置mpc02卡提供了功能强大的运动控制函数库开发完美的运动控制系统mpc02控制卡的结构示意图如下并可以充分利用pc机现有的资源来pc机cpumpc02运动控制智能ic脉冲发射光电隔离长线驱动指令状态pci总线光电隔离光电隔离pc接口光电隔离理想位置实际位置状态等脉冲方向报警行程减速原点运动控制函数库光码盘通用iompc02

控制卡的应用技巧

控制卡的应用技巧

5、 MoveTo成员
功能:让指定轴移动到指定的位置,调用控制卡中的 d5400_t_pmove函数实现 6、Line成员 功能:让X、Y和Z轴作直线插补(相对运动),调用控制卡中的 d5400_t_line3函数实现 7、Line成员 功能:让X、Y和Z轴作直线插补(绝对运动),调用控制卡中的 d5400_t_line3函数实现
pCard.LineTo x1, y1, 0 ‘(运行到线段的起点) If pCard.WaitDone = True Then Exit For pCard.LineTo x2, y2, 0 ‘(运行到线段的终点) If pCard.WaitDone = True Then Exit For End If End If Next
关于控制卡封装后的对象成员
1、mmScale成员 功能:确定机床的定位精度(脉冲数/毫米)
2、set_axis_speed成员 功能:设置指定轴的速度,调用控制卡中的 d5400_set_profile函数实现 3、set_vect_speedd成员 功能:设置指定直线/圆弧插补的速度,调用控制卡中的 d5400_set_vector_profile函数实现 4、Move成员 功能:让指定轴移动一相对位移,调用控制卡中的 d5400_t_pmove函数实现
2、添加dmc5400卡的函数定义模块
3、在工程中添加一个新的类
a、添加一个新的类,并命名为CardCls
2、添加dmc5400卡的函数定义模块
3、在工程中添加一个新的类
a、添加一个新的类,并命名为CardCls
b、加入CardCls控制卡相关的代码,实现 对控制卡功能函数的二次封装。
封装的好处: 1)对控制卡自动初始化和自动关闭的实现
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

运动控制卡应用编程技巧内容来源网络,由“深圳机械展(11万㎡,1100多家展商,超10万观众)”收集整理!更多cnc加工中心、车铣磨钻床、线切割、数控刀具工具、工业机器人、非标自动化、数字化无人工厂、精密测量、3D打印、激光切割、钣金冲压折弯、精密零件加工等展示,就在深圳机械展.关于源代码的阅读,需要读者有一定的C++编程基础,至少对以下表示形式不会产生误解:const char *pString; //指定pString邦定的数据不能被修改char * const pString; //指定pString的地址不能被修改const char * const pString; //含上面两种指定功能当然,随便提醒一下,这些源代码若需要加入你的软件工程当中,还需要作一些调整和修改,因此,这些源代码实质上称为伪代码也可以,之所以展现它们,是让程序员们有个可视化的快感,特别是那些认为源代码就是一切的程序员。

同时,为了提高针对性,大部分控制卡调用的函数会明确指出是邦定哪些卡的,实际应用时,程序员可自行选择,以体现一下自己的智商是可以写写软件的。

一、控制卡类的单一实例实现把控制卡类作一个类来处理,几乎所有C++程序员都为举双手表示赞同,故第一个什么都没有的伪代码就此产生,如下表现:class CCtrlCard{public:…Functionpublic:…attrib}于是,用这个CctrlCard可以产生n多个控制卡实例,只要内存足够。

然而,针对现实世界,情况并不那么美好。

通常情况下,PC机内只插同种类型的控制卡1到2张,在通过调用d1000_board_init或d3000_board_init函数时,它们会负责返回有效卡数nCards,然后从0-nCards*4- 1自行按排好轴数。

初始化函数就是C++的new或malloc的操作,取得系统的资源,但是控制卡的资源与内存不一样,取得资源后必需要释放才可以再次获取,即控制卡资源是唯一的。

既然控制卡资源是唯一的,那么最好Cctrlcard产生的实例也是唯一的,这样,我们可以方便的需要定义一个全局变量即可:CctrlCard g_Dmcard;在其它需要调用的地方,进行外部呼叫:extern CctrlCard g_DmcCard;以上方法实在太简单了,很多人都会开心起来。

实质上,方法还有很多,即然可以产生n 多对实例,我们的核心是只要保证调用board_init函数一次即可,故也可以单独定义一个InitBoard函数:class CctrlCard{public:static int InitBoard(); //定义一个静态函数,以表警示}int CctrlCard::InitBoard(){return d1000_board_init();}还有一种方法,情况稍加复杂,但表达的功能也要强一些,以下展现可以稍微安慰一下代码狂。

Class CctrlCard{public:CctrlCard(); //请注意这个构造函数的定义}CctrlCard::CctrlCard(){//呵呵,也很明了static int n(0); //注意,是个静态变量n++; //每次调用CctrlCard生成实例时,都会计数一次assert( n == 1 ); //在DEBUG版本下,只有n==1的情况下可以通过//否则,会出现致命错误,还好,它会告诉你错在哪个文件,//哪一行,呵呵,是个好东东啊。

}通过强行报警处理,当你有g_DmcCard这个实例时,其它的所有控制卡的定义都只能是以引用或指针的方式进行了,不会再产生新有效的实例了,对于由小组编程的项目软件,而你又恰好负责编程控制卡这一块的话,以上的显性报警,会让其它人心领神会。

当然,你也可以将上面的方法加入到InitBoard当中去,可以避你的无意识的多次调用了。

附:无意识的多次调用经常发生,特别是那些对MFC机制不明确的程序员,在多文档框架下,不知道这个CctrlCard::InitBoard函数到底是应该放在CmainFrame的OnCreate里面,还是应该放在CchildFrame的OnCreate,或者是Cview的OnInitUpdate里面进行调用。

在一言难尽MFC的情况下,我建议两个小方法:No.1 将CctrlCard的函数置于Cmainframe的OnCreate或者Capp::Initstance内调用No.2 将InitBoard函数稍加改造成这样:Int CctrlCard::InitBoard(){static int n(-1000);//注意,-1000是控制卡函数不可能返回的值if( n == -1000 )n = d1000_board_init();return n;//这样,即使多次调用也不样怕了,呵呵,雕虫小技也可以除虫啊}必须额外声明一下,不是不重视资源的释放,而是作为一个C++程序员写下这些代码是基本的义务(这也是我为什么要交待读者必须要有一定的C++基础):class CctrlCard{public:~CctrlCard(){//定义析构函数,在此释放资源,对此,我不想再转到读者的眼球了d1000_board_close();}}二、数据结构及数据类型的定义,部分相关声明调用控制卡驱动函数时,经常会有如下形式:单轴相对运动d1000_start_t_move( axis, pulse, start, speed, accel );单轴绝对运动d1000_start_ta_move( axis, pulse, start, speed, accel );两轴相对插补d1000_start_t_line( axisArray, distArray, start, speed, accel );两轴绝对插补d1000_start_ta_line( axisArray, distArray, start, speed, accel );圆弧相对插补d3000_start_t_arc( axisArray, C1, C2, E1,E2, dir, start, speed, accel ); 圆弧绝对插补d3000_start_ta_arc( axisArray, C1, C2, E1,E2, dir, start, speed, accel );以上的调用,很多重复枯燥,又不直观,难于理解,并且在面向客户时,常常是指每分多少米,或者每秒多少毫米,很少有人问每秒多少脉冲,移动多少脉冲作距离,故需要单位之间的换算。

显然,对于这些问题,我想,C++程序员应该找到用武之地了,所以我们一步一步来,慢慢统一各个问题。

实质上,在以下的几个技巧,也需要在此澄清一些概念。

先来几个宏定义提高一下情绪:# define MAX_AXIS 4 //最多轴数# define XCH 0 //定义X轴的值# define YCH 1# define ZCH 2# define UCH 3…..(其它以次类推)# define M_ABS 0x01 //定义一个绝对标志位# define M_INP 0x02 //定义一个插补位接下来深入一点点,再来几个结构定义:typedef struct tag_ARC{tag_ARC( double ox=0.0, double oy=0.0, double ex=0.0, double ey=0.0, int dir=0 ):ox(ox), oy(oy),ex(ex), ey(ey),dir(dir)//定义这样一个构造函数需要勇气,看似不合理,但是好用麻{}double ox,oy;double ex,ey;int dir;}ARC;typedef struct tag_SPEED{tag_SPEED( double start=0.0, double speed=0.0, double accel=0.0, double decel=0.0,double scc=0.0 ) :start(start),speed(speed),accel(accel),decel(decel),scc(scc){}double start;double speed;double accel;double decel;double scc;}SPEED;以上两个ARC和SPEED的结构定义,把几个参数变成一个参数。

比如要实现的单轴驱动函数,就变得非常明了:void Move( int nAxis, double fMM, const SPEED &speed, int nFlag = M_ABS );//往后我们再具体完善其实现。

以上的结构具有类的特性,但是由于其每个成员都可以给外部直接使用,故就不需要什么类的public及其析构函数的定义了。

之所以全都采用double的数据类型,是面向客户习惯及单位计算方便的。

接下来是对控制卡常用的单位计算及部分常用变量的声明:class Cctrlcard{public:…(其它略去)public://属性mutable int ORGIN; //指定原点状态位mutable int LIMIT_A, LIMIT_B; //指定左右限位状态位private://以下的属性不给外部访问的struct tag_AXIS{//单轴属性double fUnitPM; //脉冲当量long nRP; //每转脉冲数double fJourey; //行程};tag_AXIS m_axis[MAX_AXIS];};定义ORGIN,LIMIT_A, LIMIT_B为变量,是有两个意义:No.1 当你访问它们的状态时,不需要每次调用d1000_get_axis_status函数,你可以这样:Int nStatus = d1000_get_axis( XCH );If( nStatus & g_IN == g_IN )If( nStatus & g_DmcCard.LIMIT_A == g_DmcCard.LIMIT_A )If( nStatus & g_DmcCard.LIMIT_B == g_DmcCard.LIMIT_B );No.2你可以扩展不同的卡,当外部调用的程序逻辑已被确定时,当你需要从DMC1000控制卡升级到DMC3000控制卡时,只需要给ORGIN等状态位指定不同的值即可。

指定状态位的值也有一个小小的技巧,以ORGIN为例,在DMC1000控制卡,其位值在2位,则可以这样:ORGIN = 1<<2;在DMC3000控制卡,其值在第9位,则这样:ORGIN = 1<<9;方法都很简单,关键是要想得到。

相关文档
最新文档