运动控制卡应用编程技巧审批稿

合集下载

运动控制卡开发流程

运动控制卡开发流程

运动控制卡开发流程我搞这个运动控制卡开发啊,那可真是有不少门道嘞。

首先呢,你得把这运动控制卡瞅清楚喽。

这卡啊,就像个小盒子似的,上面一堆接口,密密麻麻的,看着就有点头疼。

我就盯着它看,眼睛都快瞪出来了,心里想这都是些啥玩意儿啊。

我就去找那些懂行的人问。

我找着了老张,老张这人啊,长得精瘦精瘦的,眼睛小小的,一笑就眯成一条缝。

我拿着控制卡跟他说:“老张啊,你看这卡,我是一点儿头绪都没有啊。

”老张接过卡,看了一眼就开始给我讲:“你看啊,这接口得先分清哪个是管数据传输的,哪个是供电的。

这就好比人的血管和吃饭的嘴,能一样吗?”我听着觉得挺有道理,可还是迷糊。

然后啊,就得看这开发的软件环境了。

我坐在那电脑前,屏幕上全是代码啥的,那灯光照得我脸煞白煞白的。

我就感觉自己像掉进了一个代码的大网子里,怎么也挣不脱。

这时候又来个小李,小李是个年轻小伙子,头发乱得像个鸡窝。

他跑过来瞅了瞅说:“哥,你这软件环境配置得不对啊。

”我就有点急了,说:“咋不对了?我都是照着说明书来的。

”小李嘿嘿一笑说:“说明书有时候也不准嘞。

你得这么着……”他一边说一边动手改,我就在旁边看着,心里那叫一个佩服。

再就是编程部分了。

这编程就像是在搭积木,可这积木块儿也太多了,我常常找不着北。

有时候编着编着,就出问题了。

我就对着电脑喊:“你这东西,咋就不听话呢?”可电脑也不回我,就那么静静地闪着屏幕。

我又得从头开始找错误,那感觉就像在一堆沙子里找一颗小金粒儿,难啊。

我还得测试这运动控制卡。

把它和那些设备连起来的时候,那线缠得像一团乱麻。

我在那摆弄线的时候,就像个手忙脚乱的大蜘蛛。

连接好了之后,一启动,要是有问题,那可不得了。

我就紧张得手心出汗,眼睛死死盯着设备,就盼着它能按照我想的那样动起来。

要是动得顺畅了,我就高兴得像个孩子似的,咧着嘴笑,心里想:“可算是成了。

”这运动控制卡开发啊,真是酸甜苦辣啥味儿都有。

EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用

EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用

EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用今天,正运动小助手给大家分享一下EtherCAT运动控制卡开发教程之Qt,主要介绍一下如何通过Qt编程实现直线插补的运动控制。

一、ECI2828运动控制卡的硬件介绍ECI2828系列控制卡支持最多达16轴直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴、机械手指令等;采用优化的网络通讯协议可以实现实时的运动控制。

ECI2828系列运动控制卡支持以太网,232通讯接口和电脑相连,接收电脑的指令运行,可以通过EtherCAT总线和CAN总线去连接各个扩展模块,从而扩展输入输出点数或运动轴。

ECI2828系列运动控制卡的应用程序可以使用VC、VB、VS、C++、C#等多种高级语言编程来开发,程序运行时需要动态库zmotion.dll。

调试时可以把ZDevelop软件同时连接到控制器,从而方便调试、方便观察。

二、Qt进行运动控制卡开发的流程1.新建Qt项目。

图1:新建Qt项目图2:选择项目路径图3:选择Qt编译套件(kits)图4:选择基类2.将函数库相关的文件复制到新建的项目中。

3.向新建的项目里面添加函数库的静态库。

(zmotion.lib)第一步:添加函数库1第二步:添加函数库2第三步:添加函数库34.添加函数库相关的头文件到项目中。

5.声明相关头文件,并定义连接句柄。

三、PC函数介绍1.PC函数手册也在光盘资料里面,具体路径如下:“光盘资料\8.PC函数\函数库2.1\ZMotion函数库编程手册V2.1.pdf”。

2.PC编程,一般如果网口对控制器和工控机进行链接。

网口链接函数接口是ZAux_OpenEth();如果链接成功,该接口会返回一个链接句柄。

通过操作这个链接句柄可以实现对控制器的控制。

ZAux_OpenEth()接口说明:指令1ZAux_OpenEthint32 __stdcall ZAux_OpenEth(char *ipaddr, ZMC_HA 指令原型NDLE * phandle)指令说明以太网链接控制器。

基于C8051的运动控制卡研制和应用

基于C8051的运动控制卡研制和应用

PID前馈控制器的算法如图4所示,公式为:
坼(f)=群(“f)+专丘,渺+%警)+巧(‰(o一咯(f))
式中,K是比例常数:乃是积分常数%是微分常数,
%+l O)为第k次采样时所给定的k+1时刻的指令位置值,
巧为前馈系数-
由于计算机控制是一种采样控制,所以数字PID控
制是根据采样时刻的偏差值计算控制量,因此上式中的 积分项和微分项要进行离散化处理,离散的PID表达式 为:
The DeVeIopment and Application of Motion Control Card Based
on
C8051
Wang Ting
Yao Chen
Li
Xiao胁
Bai Haicheng
(SlQte}ce)}L曲ordtory巧R曲olics She唧nng lnstilHte可AHtomntion Chi№se Acddem),《Sciences She唧n曙iiooj6 Chi∞)
第29卷第8期增刊仪器仪表 Nhomakorabea学

voI.29No.8
兰塑!笙苎星
篁垫l翌兰塑!全坚婴垒!竺!墨里!!里堑!!!!翌堑坐里呈坐
垒竺墨:三塑墨
基于C805 1的运动控制卡研制和应用
王挺 姚辰 李小凡
中科院沈阳自动化所,
白海城
沈阳
110016)
(机器人学国家重点实验室
摘要:本文针对排爆机器人手臂多关节联动控制的需要,开发了一种具有高集成度的基于c8051单片机和CAN总线的 运动控制卡。介绍了运动控制卡的原理及实施方案,同时给出了运动控制卡在机器人平台的应用实例。在排爆机器人平台 上的应用表明该运动控制卡具有较高的精度及很好的可靠性和实时性。 关键词:c805l CAN总线运动控制卡

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

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

雷赛运动控制卡应用程序开发注意事项发布时间: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)函数功能:释放控制卡占用的系统资源。

工控:C#如何控制运动卡

工控:C#如何控制运动卡

工控:C#如何控制运动卡现在越来越多的非标设备使用的是运动控制卡,那什么是运动控制卡?运动控制卡是一种基于PC机及工业PC机、用于各种运动控制场合(包括位移、速度、加速度等)的上位控制单元。

所以运动控制卡的编程就需要用到高级语言,常用的有C++,,Labview,C#这几种下面高级语言以C#为例,运动控制卡以固高GT-400-G-PCI(4轴控制卡)为例常见的系统架构一控制卡组成1.控制卡控制卡需要插在PC的PCI插槽内,露出的接口CN17需要用排线和外部端子板连接运动控制卡2.端子板端子板一般装在配电盘上,用于接线,下图中左边的四个AXIS就是轴系的脉冲接口右边为IO和限位接线端子最上门的CN17需要用排线连接到PC内的运动控制卡端子板二.配置运动控制卡(固高官网下载地址:/pro_view-3.html)1.首先装好驱动程序,驱动包可以找供应商拿2.配置卡的参数安装好驱动后,打开固高配置软件,主要配置为伺服的脉冲模式,正负极限的设置,急停的设置当中细节太多这边不一一讲3.用demo控制轴运动配置好参数后,用配置软件动一下轴确定轴参数都对后才能用上位机控制轴一的配置界面轴控制三.用C#编程1.新建一个winform窗体程序,把固高的动态链接库拷贝进去(正常和供应商索取驱动还有相关资料)动态链接库还有文件2.程序内引用gts文件右击项目➡添加➡现有项➡选择刚才拷贝的文件添加完效果3.开始编程卡操作流程:初始化➡读取参数配置(就是用DEMO软件配置好的参数)➡按逻辑控制每个轴归零➡程序控制轴进行位移运动我们在新建一个GtsCard类,把gts类中提供的方法重新整理下,方便以后复用//固高运动控制卡 public class GtsCard { /// <summary> /// 初始化,加载配置,清除轴系报错/// </summary> /// <paramname='cardNum'></param> /// <param name='filePath'></param> /// <param name='axis'></param> /// <returns></returns> public bool Initial(gtsCardID gtsCard, Axis[] axis) { short result; bool isOk = false; try { //channel : 打开运动控制器的方式。

运动控制卡应用编程技巧

运动控制卡应用编程技巧

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

运动控制卡C程序示例

运动控制卡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__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 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 number, 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 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 ,long 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.h"int devnum=-1;CCtrlCard::CCtrlCard()(构造函数,为什么是空的?){}/*******************初始化函数************************该函数中包含了控制卡初始化常用的库函数,这是调用其他函数的基础,所以必须在示例程序中最先调用返回值<=0表示初始化失败,返回值>0表示初始化成功*****************************************************/int CCtrlCard::Init_Board(int devnum){/***********************************************************/int mode =0;//应答模式为1时,响应串口接收有效,0时无效if(devnum==0)(devnum:设备号){for (int i = 1; i<=MAXAXIS(最大轴数); i++){Result=adt8840a_set_command_pos(devnum, mode,i,0);(设定逻辑计数器)adt8840a_set_actual_pos(devnum, mode,i,0);(设定实位计数器)adt8840a_set_startv(devnum, mode,i,0);(设定初始速度)adt8840a_set_speed(devnum, mode,i,0);(设定驱动速度)adt8840a_set_acc(devnum, mode,i,0);(设定加速度)}if(Result==0 )return 1;elsereturn Result;}elsereturn -1;}/**********************设置速度模块***********************依据参数的值,判断是匀速还是加减速设置轴的初始速度、驱动速度和加速度参数:axis -轴号startv - 初始速度speed -驱动速度add -加速度返回值=0正确,返回值=1错误*********************************************************/int CCtrlCard::Setup_Speed(int axis(轴号), long startv(初始速度), long speed(驱动速度), long add (加速度)) {if (startv - speed >= 0) //匀速运动{Result = adt8840a_set_startv(devnum,axis, startv); (设定初始速度)adt8840a_set_speed (devnum,axis, startv);(设定驱动速度)}else //加减速运动{Result = adt8840a_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(devnum,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;}/*******************任意三轴插补函数********************该函数用于驱动任意三轴进行插补运动参数: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四轴进行插补运动参数:value1,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 CCtrlCard::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_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::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)返回值: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, 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, pos);(设置实位计数器)}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;}/********************设置限位信号方式********************** 该函数用于设定正/负方向限位输入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;}/********************设置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-有效logic 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){Result = adt8840a_continue_move(devnum,axis, value);return Result;}2.3 功能实现模块2.3.1 界面设计说明:(1)速度设定部分—用于设定各轴的起始速度、驱动速度和加速度;位置设定—设定各轴的驱动脉冲;驱动信息—实时显示各轴的逻辑位置、实际位置和运行速度。

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

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

发布时间: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)函数功能:释放控制卡占用的系统资源。

MPC07运动控制卡说明书

MPC07运动控制卡说明书
5 函数描述........................................................................22
5.1 控制卡和轴设置函数........................................................................22 5.2 运动指令函数....................................................................................27
6 常见问题及解决方法....................................................42
6.1 基本功能及实现方法........................................................................42 6.1.1 函数库初始化 ........................................................................................... 42 6.1.2 简单的定位运动 ....................................................................................... 43 6.1.3 简单的连续运动和回原点运动 ............................................................... 43 6.1.4 多轴插补运动 ........................................................................................... 44

控制卡应用编程技巧

控制卡应用编程技巧

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

C#2010编程基础及在运动控制卡上的应用
件要求也高,只有64位系统。现在用Win8为时尚早。 )
在Win7下,使用什么编程软件好? 继续用VB6.0。但VB6.0在Win7下兼容性不好、慢,且太老(1998年上市) 、功能差; 改用VB2010。但VB2010和VB6.0差别很大,要学新东西。 用C#、VC。会不会太难? VB2010、C#、VC,选用哪一个为好?先调查一下,大家都在用什么软件。 2012年底的Tiobe编程语言排行榜图1所示:
// Form1.cs 为窗体事件的代码 public partial class Form1 : Form { public Form1() { InitializeComponent(); }
// 创建名为Form1的公共类
private void button1_Click(object sender, EventArgs e) // 开始按键被点击 { string[] MyData = new string [3]; // 红色所示代码为编程者写的,其他均为自动生成 MyData[0] = textBox1.Text; // 输入数据 MyData[1] = textBox2.Text; MyData[2] = textBox3.Text; Array.Sort(MyData); // 排序 textBox1.Text = MyData[0]; // 输出结果 textBox2.Text = MyData[1]; textBox3.Text = MyData[2]; } // Form1.Designer.cs 为窗体设计代码,由Visual Studio自动生成 /// <summary> /// 必需的设计器变量。 /// </summary> private ponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源。 /// </summary> /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) {

qt creator数据采集卡运动控制卡编程实例

qt creator数据采集卡运动控制卡编程实例

qt creator数据采集卡运动控制卡编程实例Qt Creator是一款强大的集成开发环境(IDE)工具,能够支持多种编程语言的开发,其中包括C++。

本篇文章将向大家介绍如何在Qt Creator中使用C++编程来控制数据采集卡和运动控制卡。

第一步:准备工作在开始编写程序之前,需要先准备好相应的硬件设备以及开发环境。

对于数据采集卡和运动控制卡,需要根据其型号和规格进行适当的连接和配置。

同时,需要安装好Qt Creator开发环境和相关的库文件,如NI-DAQmx、Motion Control和Serial Communication。

第二步:创建Qt项目打开Qt Creator,点击菜单栏中的“File”,然后选择“NewFile or Project”来创建一个新的Qt项目。

在弹出的对话框中,选择“Application”类型,并在下拉菜单中选中“Qt Widgets Application”。

然后,输入项目名称和项目路径,最后点击“Create”按钮来创建项目。

第三步:添加头文件和库文件在Qt Creator中创建新项目后,需要添加相应的头文件和库文件。

在代码文件中加入以下头文件:```c++#include <NIDAQmx.h>#include "MotionControl.h"#include "SerialPort.h"```接着,在项目的.pro文件中添加相应的库文件:```c++LIBS += -lNIDAQmxLIBS += -lMotionControlLIBS += -lSerialPort```第四步:编写程序代码这一步是关键,需要根据具体的设备和需求编写相应的代码。

在此,我们以运动控制卡为例,来展示如何编写一个简单的控制程序。

下面是一个示例代码:```c++#include <QApplication>#include <QDebug>#include "MotionControl.h"int main(int argc, char *argv[]){QApplication a(argc, argv);MotionControl *mc = new MotionControl();mc->connect("COM1");mc->setAxis(1);mc->setServoOn();mc->moveTo(100, 5000);mc->setServoOff();mc->disconnect();delete mc;return a.exec();}```代码中,我们首先启动一个运动控制卡对象,并指定其连接的串口号("COM1")。

iMC系列六轴四轴运动控制卡快速应用v1.1

iMC系列六轴四轴运动控制卡快速应用v1.1

iMC系列六轴四轴运动控制卡快速应用v1.1iMC2X00系列运动控制卡快速应用此文档用于指引用户快速应用iMC2X00系列运动控制卡,对于iMC2X00系列运动控制卡各项功能的详细说明,请参考“iMC2X00系列运动控制卡使用手册”。

基于iMC2X00的运动控制应用系统开发流程如图所示:iMCSOFT 是本公司针对iMC2系列运动控制卡开发的应用开发调试软件,用于辅助用户加快运动控制应用的开发过程。

iMCSOFT 软件下的编程采用一种类似于BASIC 的语言,语法简单、易用。

若用户对运动控制卡的应用较熟悉,可跳过此步骤,直接采用VC 、VB 编写应用程序。

在iMCSOFT 下使用的指令,绝大多数都能在动态链接函数库中找到对应的函数,且格式相似,因此,只要在iMCSOFT 平台下编程调试了的控制功能,都可以用高级语言调用相应的函数编程实现。

1 硬件安装与连接iMC2X00系列运动控制卡与接口卡是分离的,用户可以选择本公司配套的接口卡,或根据需要自行设计接口卡。

iMC2X00系列运动控制卡与接口卡、伺服(或步进)驱动器的连接如“图1-1”所示,限位开关、原点开关等的布局如“图 1-2”所示。

注:限位开关、原点开关等的布局仅供参考,用户可根据具体应用情况采用不同的布局。

建议原点开关安装在靠近机械行程的末端位置,并设置偏移位置,这样可以固定一个搜寻原点的出发方向。

图 1-1图1-2轴接口卡运动控制卡上位机伺服驱动伺服驱动iMCSOFT 或用户程序 ...开关、传感器输入等输出接口卡...电磁阀、继电器等运动平台负限位开关原点开关正限位开关IMC2400U控制卡接口及跳线1.1iMC2400U的外形如“图 1-3”所示:图 1-3 IMC2400U控制卡外形图1.1.1各接口说明J1:USB总线接口,计算机通过该接口与控制卡通信;J2:外部供电插座;iMC2400U可由计算机的USB总线供电或外部5V电源供电,但一般计算机的USB总线供电能力只有800mA,建议iMC2400U由用外部电源供电。

基于LabVIEW的运动控制卡的开发与应用

基于LabVIEW的运动控制卡的开发与应用

基于LabVIEW的运动控制卡的开发与应用吴刚;李银禹【摘要】针对一种"PC机+运动控制卡"的控制系统进行研发.该系统以PC机、运动控制卡PCI-1243U、动态链接库函数和Windows操作系统等作平台为基础.采用LabVIEW开发人机交互界面,采用导入共享库的方式调用动态链接库,实现对运动控制卡的驱动,驱动器控制电机动作,实现了运动控制要求.该系统方案在运动控制系统方面有着广泛地运用,开发周期短、成本低、实用性好、可扩展性高.【期刊名称】《机械工程师》【年(卷),期】2016(000)011【总页数】2页(P41-42)【关键词】LabVIEW;运动控制卡;动态链接库;PCI-1243U【作者】吴刚;李银禹【作者单位】三峡大学机械与动力学院,湖北宜昌443002;三峡大学机械与动力学院,湖北宜昌443002【正文语种】中文【中图分类】TH416.26随着PC机的普及和发展,采用“PC机+运动控制卡”作为上位机的开发模式逐渐成为运动控制系统的一个主流发展方向[1-2]。

在这种模式下,我们可以充分发挥PC机资源丰富的优势,又可以利用运动控制卡多种多样的运动方式,从而提高控制系统的应用范围。

本文选用的是基于PC机和运动控制卡的运动控制系统设计方案[3],上位机发送控制指令,运动控制卡选用研华公司的PCI-1243U,实现对伺服电机的精确控制,比如:间歇性运行等。

该系统选用LabVIEW作为上位机系统软件,开发人机交互界面。

LabVIEW软件采用的是图形化编程语言(即G语言),具有强大的界面功能[4]。

“PC机+运动控制卡”的开发模式,和传统的运动控制系统相比,极大地提高了系统柔性、可扩展性,同时也降低了成本。

本系统涉及到硬件和软件两个方面。

在硬件方面,首先是将PCI-1243U运动控制卡安装在工控机的机箱的插槽里面,板卡的端口通过总线PCL-10162-1电缆拓展到接线端子ADAM3962上面,然后根据动作需要将D2驱动器和接线端子进行连接,最后将伺服电机和驱动器连接以及伺服电机和滚珠丝杠连接;在软件方面,采用LabVIEW软件编写人机交互界面,运用调用动态链接库的方式进行控制程序的编写,采用Lightening软件对驱动器进行参数配置。

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

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

发布时间: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)函数功能:释放控制卡占用的系统资源。

运动控制卡

运动控制卡

'该函数用于驱动任意两轴进行插补运动
'参数: axis1 , axis2 - 参与插补的轴号
' pulse1,pulse2-对应轴的输出脉冲数
'返回值=0正确,返回值=1错误
'*******************************************************
' Speed -驱动速度
' Add -加速度
' 返回值=0正确,返回值=1错误
'*********************************************************
Public Function Setup_Speed(ByVal axis As Long, ByVal startv As Long, ByVal speed As Long, ByVal add As Long, ByVal tacc As Double) As Integer
' set_symmetry_speed 0, axis, startv, startv, tacc
Else
Result = adt8940a1_set_startv(gCardIndex, axis, startv)
' pulse1,pulse2,pulse3-对应轴的输出脉冲数
'返回值=0正确,返回值=1错误
'*******************************************************
Public Function Interp_Move3(ByVal axis1 As Long, ByVal axis2 As Long, ByVal axis3 As Long, ByVal pulse1 As Long, ByVal pulse2 As Long, ByVal pulse3 As Long) As Integer

控制运动编程实验报告(3篇)

控制运动编程实验报告(3篇)

第1篇一、实验目的1. 熟悉控制运动编程的基本原理和方法;2. 掌握利用编程控制运动物体的方法;3. 提高动手能力和编程能力。

二、实验原理控制运动编程是指通过编写程序来控制运动物体的运动轨迹、速度和方向等。

本实验采用PLC(可编程逻辑控制器)作为控制核心,利用传感器获取运动物体的实时信息,通过编程实现对运动物体的精确控制。

三、实验器材1. PLC:罗克韦尔CompactLogix系列可编程序控制器;2. 小车运动控制系统实训模型;3. 电源模块、CPU模块、数字量输入模块、数字量输出模块、通信编程电缆等;4. 传感器:光电传感器、电感式传感器、电容式传感器、超声波传感器、行程开关等;5. 编程软件:RSLogix 5000。

四、实验步骤1. 连接PLC与实训模型,搭建控制系统;2. 编写程序,实现以下功能:(1)运动距离测量:利用光电传感器和行程开关测量小车运动距离;(2)传动控制:通过数字量输出模块控制直流电机转速,实现小车运动速度调节;(3)键值优化比较行走控制:根据按键输入,实现小车正转、反转、停止等动作;(4)定向控制:根据传感器反馈,实现小车循线运动;(5)定位控制:根据预设位置,实现小车精确定位;(6)报警运行控制:当小车运动超出预设范围时,发出报警信号;(7)点动控制:实现小车单步前进、后退;(8)位置显示控制:通过显示屏显示小车当前位置;3. 编译程序,下载到PLC;4. 对程序进行调试,确保各项功能正常运行;5. 实验结束后,整理实验器材,撰写实验报告。

五、实验结果与分析1. 运动距离测量:实验中,利用光电传感器和行程开关成功测量了小车运动距离,测量精度满足实验要求;2. 传动控制:通过数字量输出模块控制直流电机转速,实现了小车运动速度的调节,满足实验要求;3. 键值优化比较行走控制:根据按键输入,实现了小车正转、反转、停止等动作,满足实验要求;4. 定向控制:根据传感器反馈,实现了小车循线运动,满足实验要求;5. 定位控制:根据预设位置,实现了小车精确定位,满足实验要求;6. 报警运行控制:当小车运动超出预设范围时,发出报警信号,满足实验要求;7. 点动控制:实现小车单步前进、后退,满足实验要求;8. 位置显示控制:通过显示屏显示小车当前位置,满足实验要求。

可编程网络型运动控制卡的设计与实现

可编程网络型运动控制卡的设计与实现

可编程网络型运动控制卡的设计与实现林晓海;郑力新【摘要】设计出采用以太网接口代替传统 PCI 接口的网络型运动控制卡,可以支持多个运动控制卡共享同一台主机,降低了成本。

提供较为丰富的硬件资源,结合辅助开发软件,以十分直观的方式可对运动控制卡的资源进行配置。

同时,提供基于 FreeRTOS 操作系统的多任务开发软件框架,使得开发人员可以专注于运动控制流程的开发。

%A kind of motion control card based on Ethernet interface instead of the traditional PCI interface is designed , which allows multiple motion control cards to share a host , so that the costs of motion control systems are reduced . Rich hardware re-sources and develop assistant software are provided , making configurations of the resources of the movement control card are very intuitive . At the same time , the provided multiple tasks software framework based on operating system FreeRTOS allows developers to focus on the development of the movement control process .【期刊名称】《微型机与应用》【年(卷),期】2014(000)002【总页数】4页(P31-34)【关键词】可编程;网络型;运动控制卡【作者】林晓海;郑力新【作者单位】华侨大学信息科学与工程学院,福建厦门 361021;华侨大学工学院,福建泉州 362021【正文语种】中文【中图分类】TP29当今运动控制卡多采用PCI接口作为运动控制卡与PC进行数据传输的接口,造成用户即使仅仅使用较少部分PC资源,也必须配备一台PC或工控机,未使用的PC资源不仅带来浪费的问题和维护上的麻烦,也不利于系统的小型化。

普通运动控制卡在LabVIEW平台上的应用

普通运动控制卡在LabVIEW平台上的应用

摘要:介绍了一种在LabVIEW平台上使用普通运动控制卡实现快速开发多轴运动控制程序的方法。

该方法首先应用运动普通控制卡提供的函数库编译成通用动态链接库文件,然后使用LabVIEW与外部代码进行连接的动态连接库机制调用这个文件,实现实时的运动控制。

实践证明,该方法不仅可以很好地发挥运动控制卡的性能,而且可以借助LabVIEW强大的界面编辑功能,缩短程序开发周期,美化人机界面。

关键词:LabVIEW;运动控制卡;动态链接库一、引言LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是美国国家仪器公司(National Instruments)推出一种基于图形语言的开发环境,编程非常方便,人机交互界面直观友好,用户可以创建独立的可执行文件,能够脱离开发环境而单独运行,是目前最流行的虚拟仪器编程平台,广泛应用于测试测量、过程控制、实验室研究与自动化等方面。

在运动控制方面,LabVIEW有专门的运动控制模块,并且NI公司为其所有的运动控制卡配备相应的驱动程序,可以方便实现即插即用功能。

如果用户所使用的板卡不是NI公司的产品,又没有提供与LabVIEW 兼容的驱动程序,就不能为LabVIEW所用。

但是LabVIEW能够通过调用Windows32动态连接库(Dynamic Link Library,简称DLL)来编写与LabVIEW兼容的驱动程序,实现该运动控制卡在LabVIEW 环境下二次开发,不仅可以大大降低成本、缩短开发周期,而且可以使界面美观。

二、应用背景笔者在参与某二自由度运动平台运动仿真项目的研制过程中,选用深圳众为兴数控技术有限公司生产的ADT850型四轴运动控制卡,该型号的卡提供多种版本Windows下的驱动程序和在BorlandC++3.1、VB和VC等多种环境下开发所需的函数库。

虽然在这些编程环境中很容易实现所需的运动控制,但是,如果要开发出一个美观的人机交互界面,将会有很大一部分时间花在程序主界面的编写上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档