基于VC++的运动控制卡软件系统设计

合集下载

基于运动控制卡的转台控制系统设计

基于运动控制卡的转台控制系统设计

基于运动控制卡的转台控制系统设计作者:高群马俊林来源:《电脑知识与技术》2015年第06期摘要:设计了一种转台运动控制系统。

采用凌华PCI-8014A运动控制卡产生脉冲和方向等控制信号给伺服驱动器驱动伺服电机。

采用VC++ 编写控制程序软件,通过调用运动控制卡的函数库,实现转台系统的转速,加减速的实时闭环控制,达到了良好的控制效果。

关键词:运动控制卡;伺服控制系统;VC++中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)06-0220-02Designof Turntable Control System for DMD Based on Motion Control CardGAO Qun, MA Jun-lin(Research and Development Center for Opto-electronic, Changchun Institute of Optics ,Fine Mechanics and Physics,Chinese Academy of Sciences, Changchun 130033, China)Abstract: A turntable motion control system is designed. The signals of pulse and direction are produced by the ADLINK’s PCI-8134A motion control card and passed to the servo driver driving the servo motor. The control program software is writed by VC++. It realizedthe real time closed loop control of turntable system’s speed ,acceleration and deceleration and achieved good control effect.Key words: motion control card;servo control system;VC++随着工业的迅速发展,生产制造领域的自动化程度越来越高,人们对数控系统的灵活性要求越来越高。

运动会管理系统c语言程序设计

运动会管理系统c语言程序设计

运动会管理系统C语言程序设计
简介
运动会管理系统是一个用C语言编写的程序,用于管理学校或机构举办的各类
运动会活动。

该系统能够帮助组织者有效地安排赛程、记录成绩以及生成相关报表,提高管理效率和赛事质量。

功能模块
1. 用户登录
•提供管理员和裁判员两类用户登录选项
•管理者可以对比赛项目、队伍信息进行管理
•裁判员可以录入比赛成绩
2. 赛事管理
•管理者可以添加、编辑、删除赛事项目
•每个赛事项目包括项目名称、参赛队伍、赛程安排等信息
3. 队伍管理
•管理者可以添加、编辑、删除参赛队伍
•每个参赛队伍包括队名、队员信息等
4. 成绩录入
•裁判员可以录入每个队伍在各个项目中的成绩
•系统可以自动计算并显示队伍的总成绩
5. 报表生成
•系统可以根据录入的成绩数据生成成绩报表
•报表可以按照项目、队伍等不同维度展示成绩数据
技术实现
该系统基于C语言编写,采用了结构体、文件读写、数据处理等基本功能和技术。

通过数据结构的设计和文件操作,实现了用户登录、赛事管理、队伍管理、成绩录入、报表生成等功能。

系统优势
•界面简洁明了,操作便捷高效
•数据处理准确可靠,确保成绩数据的准确性
•面向对象的设计,方便扩展和维护
结语
运动会管理系统C语言程序设计为学校或机构举办运动会提供了一种高效的管理方式,使赛事组织更加顺畅和专业化。

通过不断的优化和改进,该系统能够更好地满足不同运动会的管理需求,为相关活动的顺利进行提供有力支持。

基于VC与开放式运动控制器的并联机器人控制软件开发

基于VC与开放式运动控制器的并联机器人控制软件开发

基于VC与开放式运动控制器的并联机器人控制软件开发近年来,随着工作效率的不断提升和生产流程的不断完善,机器人技术被越来越多的企业所使用。

尤其是在制造业中,机器人的应用越来越广泛,其中并联机器人是一种比较常见的形式。

基于VC与开放式运动控制器的并联机器人控制软件开发,对于机器人制造和应用有着重要的意义,本文将详细阐述软件开发的过程和方法。

一、并联机器人控制的环境与软件开发基础基于VC与开放式运动控制器的并联机器人软件开发,需要具备一定的控制背景和编程基础。

并联机器人的控制环境离不开控制器和运动控制器,通过使用C语言和相应的控制组件及开发工具,可以实现对并联机器人的完整控制。

1、VC是微软公司的一款程序开发工具,它是Windows应用程序开发的重要工具之一,具有丰富的界面设计功能和强大的编程功能,可实现快速构建各种质量高、功能完整的应用程序。

2、开放式运动控制器是一种用于控制机器人运动的软、硬件系统,它包括运动控制板、运动控制器、运动控制器语言等,是机器人控制系统的核心部件,它可以自由设置各个轴的运动和速度,实现对机器人的精确控制。

二、并联机器人控制软件的开发流程并联机器人控制软件的开发流程主要包括需求分析、软件设计、编码实现、测试与调试和软件维护等步骤。

其中,软件设计是整个开发流程的关键环节,决定了软件开发的效率和最终的产品质量。

1、需求分析需求分析是软件开发的第一步,它是确定软件需求和目标的过程。

在并联机器人控制软件的开发中,需求分析主要包括以下几个步骤:a、确定目标和要求:分析并集中各个环节标定其功能和应用范围,进而确定软件的目标和要求,从而有助于确定开发方案。

b、需求收集:收集软件开发的相关需求,也就是收集机器人的相关控制参数,确定机器人的工作类型、动作方式、运动范围与运动速度等关键参数,以便将此信息输入初始控制系统。

同时,也需要对机器提供的外部接口进行收集和分析,以用于与前端交互操作及数据传输。

运动控制卡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)速度设定部分—用于设定各轴的起始速度、驱动速度和加速度;位置设定—设定各轴的驱动脉冲;驱动信息—实时显示各轴的逻辑位置、实际位置和运行速度。

教案-基于DMC运动控制卡的运动控制系统设计及实现20110411

教案-基于DMC运动控制卡的运动控制系统设计及实现20110411

基于DMC运动控制卡的运动控制系统设计及实现试讲人:赵本利时间:2011-4-13 地点:佛职院机电系授课方式:讲授/实操重点:运动控制卡编程(实现)、系统控制方案的全面性(设计)难点:编程语言学习(实现)导入:(任务布置)1、运动控制应用领域:包括医疗(CAT扫描仪)、半导体(电路板特型铣)、纺织(地毯编织机)、物料搬运(包装机械)、食品加工(精密切肉机)、机床(超声焊接机)、产业机械(座标检验)、航天(空间摄像控制)、测试测量等等十分广泛。

2、系统控制方案要求:协调性、可靠性、稳定性、精密性。

正文:1、系统组成:主计算器、运动控制器、功率放大器、电机、传感器,即众所周知的闭环伺服系统。

一种典型的伺服系统如图1所示:图1、典型的伺服系统1.1、总体解说控制DC电机,用增量式编码器的数字位置系统伺服(亦适用于带有旋转变压器或绝对值编码器的AC或液压电机的系统)。

系统中各个元件的工作类似于人体,电机和功率放大器的结合VS于使人的四肢活动的肌肉。

功率放大器产生驱动电机所需要的电流,电机是产生运动的元件。

控制器是命令运动的智能元件,亦即系统的大脑。

它产生用于功率放大器的信号,称作运动命令。

位置传感器的功能类似于人的眼睛,它检测电机的位置并将结果告知控制器,即形成闭环。

闭环系统接收来自外部的命令,通常是主计算机,继续与人类社会相比较,命令源可以视作老板,产生命令,经常要求状态报告。

用其它方式如PLC,终端或开关组亦可产生命令。

1.2、部分解说:电机:更确切地讲,就是将电流转换成旋转扭矩。

DC电机的关键参数有扭矩常数Kt,电机电阻r,转动惯量Jm和最大扭矩。

扭矩常数单位为Nm/A或oz-in/A,它表示每个电流单位电机产生的扭矩量大小。

Eg:一台扭矩常数为0.1Nm/A的DC电机将2A电流转换成0.2Nm的扭矩。

电机特性是它所产生扭矩的大小,扭矩大小用两个参数来表达:连续扭矩和峰值扭矩。

功率放大器:一般是0~±10V输入端是模拟信号,利用线性放大器或脉宽调制(PWM)放大器方式来产生所需电压或电流,PWM放大器产生在高、低电平之间切换的电压,大多数功率在100W左右的放大器,均采用PWM方法以减少功率损耗。

基于VC的液下搅拌机器人控制软件的开发

基于VC的液下搅拌机器人控制软件的开发

多轴运动控制卡 ) 为基础构建液下搅拌机器人控 制 系统 , 用 Vsa C + 采 i l+ u 编制控制程序 , 将机器人 系统 中管理、 制功 能的实现分作 若干个模块 , 控 负责底层伺服驱动的函数利用 P A M C运动语言编
写 , 以直接 调 用 。整 个控制 软件 能 完成 数 据及 运 动 状 态 显 示 、 可 伺服 驱 动 、 器人路 径 规 划 , 位 机 定
机具有运行速度快 、 存储量大 、 应用灵活的优点 , 在 设计系统时充分了考虑工控机(P ) P A IC 和 M C的各
收 稿 日期 :0 5—1 0 20 0— 8
图 1 机器人控制系统结构图
基金项 目: 北京市教委科技 发展 基金项 目( M 03 1 23 ) K 20 12 18 3
Ab ta t T ed sg f h o o o t l y tm stec r n ted v lp n f h o o ytm. yu sr c : h e in o erb t nr se i h oei e eo me t erb t s t c os h ot s e B — sn iu l +ac nrl ot r se i dfrt erb t y tm a e n P ig V s a . o to f C+ s waei dt o o o se b sd o MAC. h n gn n o e h s T ema a iga d c n to u cin r e l e ydvdn e it e ea at. eb t m— r eln u g oc nrl h o rlfn t saerai db iiigt m os v rl r T ot d i g a et o t er— o z h n p sh o v a ot b ti e i d b MAC ln u g . h h l o t l ot ae i u e rd s lyo otn aaa d sa o dt yP s e a g a e T ew oe c nr f r s sd f i a fi os w o p mp r t t n t. a d ts sn0d iig,o o ah pa nn n o in . u ,e r rvn rb tp t ln iga d p st g i Ke r s rb tP y wo d :o o ; MA c nr1sf r C; o to.ot e wa

基于VC 的运动控制卡软件系统设计

基于VC  的运动控制卡软件系统设计

基于VC++的运动控制卡软件系统设计在自动控制领域,基于PC和运动控制卡的伺服系统正演绎着一场工业自动化的革命。

目前,常用的多轴控制系统主要分为3大块:基于PLC的多轴定位控制系统,基于PC_based的多轴控制系统和基于总线的多轴控制系统。

由于PC 机在各种工业现场的广泛运动,先进控制理论和DSP技术实现手段的并行发展,各种工业设备的研制和改造中急需一个运动控制模块的硬件平台,以及为了满足新型数控系统的标准化、柔性化、开放性等要求,使得基于PC和运动控制卡的伺服系统备受青睐。

本文主要是利用VC++6.0提供的MFC应用程序开发平台探索研究平面2-DOF四分之过驱动并联机构的运动控制系统的软件开发。

平面2-DOF四分之过驱动并联机构的控制系统组成并联机构的本体如图1,该机构由4个分支链组成,每条支链的一段与驱动电动机相连,而另一端相交于同一点。

该并联机构的操作末端有2个自由度(即X 方向和Y方向的平动),驱动输入数目为4,从而组成过驱动并联机构。

For personal use only in study and research; not for commercial use控制系统的硬件主要有4部分组成:PC机,四轴运动控制卡,伺服驱动器和直流电动机。

系统选用的是普通PC机,固高公司的GT-400-SV-PCI运动控制卡,瑞士Maxon公司的四象限直流伺服驱动器及直流永磁电动机。

伺服驱动器型号为4-Q-DCADS50/5,与驱动器适配直流电动机型号为Maxon RE-35。

运动控制系统的构成如图2所示。

上位控制单元由PC机和运动控制卡一起组成,板卡插在PC机主板上的PCI插槽内。

PC机主要负责信息流和数据流的管理,以及从运动控制卡读取位置数据,并经过计算后将控制指令发给运动控制卡。

驱动器控制模式采用编码器速度控制,驱动器接受到运动控制卡发出的模拟电压,通过内部的PWM电路控制直流电动机RE-35的运转,并接受直流电动机RE-35上的编码器反馈信号调整对电动机的控制,如此构成一个半闭环的直流伺服控制系统。

_基于VC_工控组态软件的总体设计与实现

_基于VC_工控组态软件的总体设计与实现
1)系统开发环境。它是自动化工程设计师为实施其控制方 案,在组态软件的支持下进行应用程序的系统生成工作所必须 依赖的工作环境。通过建立一系列用户数据文件,生成最终的图 形目标系统,供系统运行环境运行时使用。
2)系统运行环境。在系统运行环境下,目标应用程序被载入 计算机内存并投入实时运行。系统运行环境根据工程画面上图 元的动画连接实时更新图形画面,将现场工程运行状况以组态 图形的方式显示出来。 2 工控组态软件的设 计与实现
工业自动化组态软件的出现为解决上述实际工程问题提供 了一种崭新的方法,使用户能根据自己的控制对象和控制目的 任意组态,完成最终的自动化控制工程。 1 工业监控组态软件的体系结构
以使用软件的工作阶段来划分,从总体上讲,软件是由系统 开发环境和系统运行环境两大部分构成。自动化工程设计师首 先利用系统的开发环境,通过一定工作量的系统组态和调试,生 成目标应用程序,并最终将目标程序在系统运行环境中投入实 时运行,完成一个工程项目。
图 2 各图形对象类之间的关系 2.1.1 图形对象子模块
图形对象子模块的主要功能是完成对各图元的绘制。每个 图形元素是图形元素类创建的一个对象,本设计采用链表对图 形元素进行管理,在创建图形元素时即创建一个新的图形对象 类指针,并把这个指针添加到链表的尾部。这里用虚函数来实现 绘制功能,在图形元素基类 CDraw 中,抽象定义一个进行绘制 操作的虚函数,因为不用 CDraw 来直接定义对象,所以可以将 虚函数定义为纯虚函数: virtua l void Dra w(CDC Lp DC)=0;
参考文献 [1]马国华.监控组态软件及其应用[M].北京:清华大学出版社,2001 [2]王亚民,陈青,刘畅生,等.组态软件设计与开发[M].西安:西安电子
科技大学出版社,2003 [3]刘耀,刘连浩.组态软件图形系统的设计与实现[J ].企业技术开发,

基于VC的直角坐标机器人控制系统设计

基于VC的直角坐标机器人控制系统设计

以及 电主轴 , 其 中 X、 y、 z轴为 成直 角关 系的伺 服 轴 , 完 成 定位 工作 , 电 主轴为 变频 器 驱动 轴 , 在伺 服轴 的带
动下 完成 雕刻 任 务 。
收 稿 日期 : 2 O l 3 一O8~ 2 O
基金项 目: 国 家 自然科 学 基 金 项 目( 6 1 1 7 4 1 3 1 , 6 1 1 0 4 0 7 6 ) ; 山东 省 高等 学 校 科 技 计 划 项 目( J l l [ G0 4 )
的发展 方 向 , 而现代 化工 业通 常要 求一 个运 动控 制 系统 能够完 成 直线 、 平面、 立体 等 多维空 间运 动轨 迹 ( 如机 器 人控 制 系统 ) , 为 了达 到这个 目的 , 需 要为 每个 坐标 轴 配备 一 个伺 服 电机[ 6 - 7 ] 。 因此 , 针 对 现代 工 业对 机 器
制系 统主 要包 括硬 件设 计 、 软件设 计 和轨迹 规 划 , 实 现 了单轴 点动 、 连续 运 动 、 回零 运 动 以
及多 轴直 线插 补 、 圆弧插 补 等功 能 。机器人 根 据末端 执 行机 构 的不 同 , 可完 成不 同作 业任 务, 具 有 良好 的开放 性 和扩展 性 。本 文执行 机构 采用 雕 刻机专 用 电主轴 , 根 据设定 的雕 刻
中图分 类 号 :T P 2 4 2 . 2 文 献标识 码 : A
直 角坐标 机 器人有 多 个 自由度 , 各 自由度 可建 成 空 间直 角关 系 , 具 有运 动 简 单 、 强度 高 、 能 重 复 编程 、 不 产生 奇异 状态 等优 点 , 根据 执行 机构 的不 同 , 可完成 不 同作 业 任务 , 因此 , 在雕刻、 焊接 、 搬运 、 装 配 等 领域 广

基于VC的开放式数控系统软件设计

基于VC的开放式数控系统软件设计

基于VC的开放式数控系统软件设计摘要本文基于Visual C++6.0平台,利用多线程同步技术设计了开放式数控系统上层软件,论述了上层软件的架构及多线程同步方式等关键模块的实现方法。

关键词开放式数控系统运动控制卡 Visual C++ 多线程为了满足实际生产中对数控系统的可移值性、模块独立性的要求,数控系统从传统的封闭式结构逐步转向现代的开放式结构。

开放式数控系统具有可互换性、可伸缩性、可移植性、互操作性和可扩展性等特点,极大的增加了用户功能的定制范围,为实现用户的特殊功能提供了途径。

工业计算机+运动控制卡结构的开放式数控系统是目前应用最广泛的开放式数控系统结构。

该结构将运动控制功能分配于运动控制卡中,工业计算机通过上层软件根据操作者指令对运动控制卡的功能进行调用。

工业计算机和运动控制卡之间一般通过PCI总线进行通讯。

工业中应用较广泛的运动控制卡有美国的PMAC及深圳GoogolTech等。

而上层软件需要用户自行设计。

为降低降低各个模块间的耦合性,需对上层软件的各功能模块进行划分;同时,数控系统中各个任务模块需要在固定时间间隔内运行,对时间要求严格,是一个复杂的实时系统,因此需设计合理的任务执行顺序。

为满足上述要求本文基于Visual C++平台设计开发了开放式数控系统的上层软件。

1.系统硬件平台的构建本文以三轴铣床为对象,对其进行数控化改造。

该机床X轴行程280mm,Y轴行程250mm,Z轴行程200mm。

进给系统均采用滚珠丝杠作为传动部件,丝杠导程10mm。

要求改造后达到10m/min的切削进给速度,并实现半闭环控制。

通过选型对比,最终选择深圳固高科技的UC-X04-EPV-M01-L2型运动控制器作为开放式数控系统硬件。

GUC系列运动控制器是嵌入式PC与运动控制器结合为一体的产品,与“工业计算机+运动控制器”结构的运动控制系统相比,具有更高的可靠性、稳定性、抗干扰能力和更好的性价比。

它以Intel 标准X86 架构的CPU和芯片组为系统处理器,采用高性能DSP 和FPGA 作为运动控制协处理器。

运动会管理系统课程设计c语言

运动会管理系统课程设计c语言

运动会管理系统课程设计介绍运动会是学校生活中的一项重要活动,为了更好地组织和管理运动会,开发一个运动会管理系统是非常必要的。

本文将详细介绍一个基于C语言的运动会管理系统的设计和实现。

需求分析在开始设计运动会管理系统之前,首先需要进行需求分析,明确系统需要具备的功能和特点。

根据任务名称,我们可以总结出以下需求:1.学生信息管理:包括学生基本信息(姓名、性别、年龄等)和参加项目信息(报名项目、成绩等)。

2.项目管理:包括项目的创建、修改和删除。

3.成绩管理:包括成绩录入、查询和统计。

4.报名管理:学生可以报名参加感兴趣的项目。

5.排名管理:根据成绩对学生进行排名,并显示排名结果。

系统设计基于以上需求,我们可以进行系统设计。

数据结构设计首先需要定义适当的数据结构来存储学生和项目信息。

以下是一个可能的数据结构设计:typedef struct {char name[50];char gender[10];int age;} Student;typedef struct {char name[50];int score;} Project;功能模块划分根据需求分析,我们可以将系统功能划分为以下几个模块:1.学生信息管理模块:用于管理学生的基本信息和参加项目信息。

2.项目管理模块:用于管理项目的创建、修改和删除。

3.成绩管理模块:用于录入、查询和统计成绩。

4.报名管理模块:用于学生报名参加感兴趣的项目。

5.排名管理模块:根据成绩对学生进行排名,并显示排名结果。

系统流程图graph LRA[开始] --> B[学生信息管理]A --> C[项目管理]A --> D[成绩管理]A --> E[报名管理]A --> F[排名管理]B --> G[添加学生信息]B --> H[修改学生信息]B --> I[删除学生信息]C --> J[添加项目]C --> K[修改项目]C --> L[删除项目]D --> M[录入成绩]D --> N[查询成绩]D --> O[统计成绩]E --> P[报名参加项目]F --> Q[根据成绩排名]实现基于以上设计,我们可以开始实现运动会管理系统。

基于VC++的超声检测运动控制系统的设计及实现

基于VC++的超声检测运动控制系统的设计及实现

基于VC++的超声检测运动控制系统的设计及实现韩明;苗长云;白华【摘要】A motion control system for ultrasonic testing is designed based on VC++, which is composed of industrial machines, ultrasonic testing system, motion control system, immersion ultrasonic probe and other components. The hardware of the system is designed using ultrasonic nondestructive testing technology and motion control technology, and the software of the system using VC++. The laboratory terrace is constructed and are experiment and relaxation are conducted, the precision and speed of the motion control system are improved the detection efficiency is also increased. The system enables motion control of ultrasound probe and the detected object, with functions of continuous scanning and directional scanning.%提出一种基于VC++的超声检测运动控制系统的设计方案,该系统主要由工控机、运动控制系统、超声检测系统和超声水浸探头等部分组成。

基于VC++与开放式运动控制器的并联机器人控制软件开发

基于VC++与开放式运动控制器的并联机器人控制软件开发
制器 作 为 下 位 机 , 以VC + + 开 发 工 具 实 现机 器 人 各 控 制模 块 的软 件 设计 , 从而完成控制 目标任务的要求。 因此本文将基于本系统的硬 件 体 系结 构 , 按 开 放 性和 系 统 稳 定性 要 求 开 发 出控 制 软 件来 实 现 高 精 度 精 密 加 工 的 目标 。

且该机构能够实 现运动轨迹 、 运动速度 、 定位 以及重复 定位 的高精 度精 确控制 的要 求 , 故在精密加 工和制造业 中具有举 足轻重的作 用, 因此已成为控制科学领域 与精密加工应用领域 中一个很有意义 的研 究方向。 本 文所研究 的控制系统 以六 自由度并联机构本体为 对象, 采用P C / 1 0 4 总线工控机为上位机 , P MAC 2 A— P C1 0 4 运动控 游
。I 与 应 用
基于 V C + +与开放式运动 控制器的并联机器人控制软件开发
刘 磊
( 宁波技 师 学 院 电气信 息技 术 系 浙 江 宁波 3 1 5 0 3 2 )
摘要 : 结合 I P c + P MA c+ s E Rvo M 0T E R的层 次结 构 , 开发 出一种 六 自由度 并联机 器人 的控制 软件 。 采 用V c + + 编程 开发 工 具 , 利 用 开放 式运动控 制 器P MAC 的强 大功能 , 所 设计 的软件 满足并联 机 器人 高实时性 , 高精 度 的运动控制要 求, 体现 出开放性 的特点 。 实验进 一步验 证 了整 个 控 制 软件 的可 靠性 与稳 定性 。 关键 词 : P MA C 并联机 器人 开放 式结 构 控制软 件设 计 V i s u a l c + + 中图分 类 号 : T P 2 4 2 文献标识码 : A 文 章编号 : 1 0 0 7 — 9 4 1 6 ( 2 0 1 3 ) 0 1 — 0 1 6 0 — 0 2

VC++运动控制卡软件系统设计方案

VC++运动控制卡软件系统设计方案

基于VC++地运动控制卡软件系统设计在自动控制领域,基于PC和运动控制卡地伺服系统正演绎着一场工业自动化地革命.目前,常用地多轴控制系统主要分为3大块:基于PLC地多轴定位控制系统,基于PC_based地多轴控制系统和基于总线地多轴控制系统.由于PC机在各种工业现场地广泛运动,先进控制理论和DSP技术实现手段地并行发展,各种工业设备地研制和改造中急需一个运动控制模块地硬件平台,以及为了满足新型数控系统地标准化、柔性化、开放性等要求,使得基于PC和运动控制卡地伺服系统备受青睐.本文主要是利用VC++6.0提供地MFC应用程序开发平台探索研究平面2-DOF四分之过驱动并联机构地运动控制系统地软件开发.平面2-DOF四分之过驱动并联机构地控制系统组成并联机构地本体如图1,该机构由4个分支链组成,每条支链地一段与驱动电动机相连,而另一端相交于同一点.该并联机构地操作末端有2个自由度(即X方向和Y方向地平动),驱动输入数目为4,从而组成过驱动并联机构.控制系统地硬件主要有4部分组成:PC机,四轴运动控制卡,伺服驱动器和直流电动机.系统选用地是普通PC机,固高公司地GT-400-SV-PCI运动控制卡,瑞士Maxon公司地四象限直流伺服驱动器及直流永磁电动机.伺服驱动器型号为4-Q-DCADS50/5,与驱动器适配直流电动机型号为Maxon RE-35.运动控制系统地构成如图2所示.上位控制单元由PC机和运动控制卡一起组成,板卡插在PC机主板上地PCI插槽内.PC机主要负责信息流和数据流地管理,以及从运动控制卡读取位置数据,并经过计算后将控制指令发给运动控制卡.驱动器控制模式采用编码器速度控制,驱动器接受到运动控制卡发出地模拟电压,通过内部地PWM电路控制直流电动机RE-35地运转,并接受直流电动机RE-35上地编码器反馈信号调整对电动机地控制,如此构成一个半闭环地直流伺服控制系统.1.1 GT-400-SV控制卡介绍固高公司生产地GT系列运动控制卡GT-400-SV-PCI可以同步控制4个轴,实现多轴协调运动.其核心由ADSP2181数字信号处理器和FPGA组成,能实现高性能地控制计算.控制卡同时提供了C语言函数库和Windows下地动态链接库,可实现复杂地控制功能.主要功能如下:(1) PCI总线,即插即用;(2)可编程伺服采样周期,4轴最小插补周期为200us,单轴点位运动最小控制周期为25us;4路16位分辨率模拟电压输出信号或脉冲输出信号模拟量输出范围:-10V-+10V,每路课独立控制,互不影响;(4) 4路四倍频增量编码器输入,作为各轴反馈信号输入,最高频率8MHz;(5)四轴协调运动;(6)每轴2路限位开关信号、一路原点信号及一路驱动报警信号输入;(7)每轴1路驱动使能信号、1路驱动复位信号输出;(8)运动方式:单轴点位运动、直线插补、圆弧插补、速度控制模式、电子齿轮模式;(9) PID(比例-积分-微分)数字滤波器,带速度和加速度前馈,带积分限值、偏差补偿和低通滤波器;支持DOS、WindowsNT/2000/XP等操作系统,提供底层库函数,可用DOS、VC、VB等进行软件开发.控制卡结构及端子板地接口如图3所示.1.2直流永磁电动机PWM驱动基本原理图4为利用开关管实现直流电动机PWM调速控制地原理图和输入输出电压波形.当开关MOSFET地栅极输入高电平时,开关管导通,直流电动机电枢绕组两端有电压Us.T1时间后,栅极输入变为低电平,开关管截止,电动机电枢两端电压为零.T2时间后,栅极输入重新变为高电平,开关管重复前面地动作过程.这样,对应着输入地点评高低,直流伺服电动机电枢绕组两端地电压波形如图4b所示.占空比a表示了在一个周期T里,开关管导通地时间与周期地比值.a地变化范围为0<a<1.由此式可知,当电源电压Us不变地情况下,电枢绕组两端地电压平均值Uo取决于占空比a地大小,改变a地值就可以改变端电压地平均值,从而达到调速地目地.2 基于GT-400-SV-PCI卡地软件设计GT-400-SV控制卡具有良好地开放性,用户可以再DOS、VC、VB、Delphi环境下进行软件开发.文中是在Windows2000系统下利用Visual C++6.0地MFC以面向对象方式进行编程.控制卡在Windows下开发地底层动态库包括头文件GT400.h,GT400.lib和GT400.dll.在VC++环境中使用时,选择Project—Setting—Link,在Object/Library modules中输入GT400.lib,然后就可以在程序中调用动态链接库中地函数.2.1 Windows程序内部运行原理因为Visual C++6.0是Windows开发语言,所以用Visual C++6.0开发程序之前首先需要弄清楚Windows程序内部运行机制.在Windows环境下地软件开发是完全不同于DOS下地,它是一种事件驱动方式地程序设计模式,主要是基于消息地.当用户需要完成某种功能时,会调用操作系统地某种支持,然后操作系统将用户地需要包装成消息并投递到消息队列当中,最后应用程序从消息队列中取走消息并进行响应.2.2 程序设计运动控制卡接受PC机上发出地操作命令和运动控制系统反馈回地信息,并据其进行实时地运动操作,直接控制伺服驱动器.控制卡控制直流电动机地过程可分为:打开控制卡并初始化,设置运动参数,执行运动程序,关闭卡.控制系统流程图如图5所示.2.2.1卡地初始化卡地初始化应在程序开始时就执行,主要用到地控制函数见表1.表1 函数名称及功能名称功能GT_Open()打开运动控制器设备GT_Reset()复位运动控制器GT_SetSmplTm()设置控制周期GT_LmtSns()设置限位开关地有效电平GT_EncSns()设置编码器地记数方向GT_CloseLp()设置为闭环控制GT_CtrlMode()设置输出模拟量/脉冲量以上参数应根据具体地硬件平台来设置,一般只在程序初始化时设置一次,以后不应再设置.另外,控制周期地设定GT_SetSmplTm(double Timer),参数Timer地单位是us.因为运动控制卡要在控制周期内完成必要地控制计算,控制周期不能太小,因此设定地范围为48-1966.08us.运动控制卡默认地控制周期为200us,这个控制周期对于普通地用户能够安全可靠地工作.一般情况下,在程序中不应改变控制周期值,否则会出现不可预期地后果.2.2.2运动控制模块该运动控制卡可以实现单轴及多轴协调运动.对于单轴所执行地运动操作有绝对运动、连续点动、急停缓停、回零等;对于多轴协调运动有直线插补和圆弧插补.单轴运动控制主要用来调试直流电动机运动性能.采用梯形曲线运动模式,设置速度、加速度、目标位置3个参数,通过设置合适地PIDP控制参数,使电动机运动达到系统设计要求.4轴协调运动采用直线插补法,正确地设置坐标映射,合成速度、加速度,再加轨迹设置命令及目标位置,即可实现四轴协调运动.运动控制卡通过坐标映射函数GT_MapAxis(short Axis_Num,double * map_count)将控制轴由单轴运动控制模式转换为坐标系运动控制模式.同时运动控制卡开辟了底层运动数据缓冲区,在坐标系运动控制模式下,可以实现多段轨迹快速、稳定地连续运动.这些运动操作都是相互独立地,在控制面板中每个操作按键对应一个独立地事件.2.2.3运动状态显示模块通过调用GT_GetAltPos(long * Apos)和GT_GetPrfPnt(double * Pnt)分别获得当前轴地实际位置和坐标系各轴地坐标位置,参数*Apos返回实际位置,双精度参数*Pnt指向一个长度为4地数组.然后转换成各电动机地实际角度,并在控制面板上显示.2编程开发实例现以单轴调试与4轴协调运动实现直线和圆轨迹为例具体介绍开发过程:打开Visual C++6.0,利用MFC AppWizard[exe]创建一个基于对话框地Robot2008工程,将GT400.h,GT400.lib添加进工程,编程时要在头文件里包含头文件GT400.h.在对话框中添加按钮和编辑框等操作见图6.单轴控制模块,先在OnInitDialog()中添加如下代码,进行初始化工作:GT_Open();GT_Reset();GT_LmtsOff();GT_AlarmOff();GT_CtrlMode(0);GT_CloseLp();在CRobot2008Dlg中添加成员变量m_Kp,m_Ki,m_Kd,m_Pos,m_Vel,m_Acc 并作原型说明.然后在“单轴运动”按钮添加BN_CLICKED消息响应地函数OnButtonSrtMov(),并在函数中添加如下代码:GT_Axis();GT_AxisOn();GT_ZeroPos();GT_PrflT();GT_SetKp(m_Kp);GT_SetKi(m_Ki);GT_SetKd(m_Kd);GT_SetPos(m_Pos);GT_SetVel(m_Vel);GT_SetAcc(m_Acc);GT_Update();最后在“单轴停止”按钮BN_CLICKED响应函数OnButtonStop()中添加代码:GT_AxisOff();GT_Close();四轴协调运动地初始化与单轴情况基本相同,但要加入坐标映射函数GT_MapAxis(short Axis_Num,double *map_count).double cnt1[5]={1,0,0,0,0};double cnt2[5]={0,1,0,0,0};double cnt3[5]={0,0,1,0,0};double cnt4[5]={0,0,0,1,0};GT_MapAxis(1,cnt1);GT_MapAxis(2,cnt2)GT_MapAxis(3,cnt3);GT_MapAxis(4,cnt4);GT_MvXYZA(0,0,0,0,1,0.01);前文已提到,运动显示模块经编译无误后生成可执行文件,执行后如图7所示.与硬件连接后可以实现对平面2-DOF四分之过驱动并联机构末端位置地直线及圆运动位置规划,可以实时读出直流电动机转角位置,达到了预期效果.3结语本文利用Visual C++6.0提供地微软基础类库MFC及控制卡支持地底层函数库,详细介绍了二次开发地全过程并给出了编程实例,方便对多轴运动控制卡软件开发地理解.整个控制软件能完成数据及运动状态显示、伺服驱动、并联机构地位置规划等任务.实践证明该并联机构控制系统运行稳定.版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.GMsIa。

毕业设计82基于运动卡的控制系统

毕业设计82基于运动卡的控制系统

论文摘要本文介绍了一种自行研制的基于运动控制卡的实用于实验室及一般机械化的场所的工业机器人控制系统。

机器人具有三个自由度(即:RRP-------大臂回旋、仰角、小臂伸缩三个运动)和一个手爪开合动作,采用全电动驱动方式控制。

该控制系统以PCI---208系列TYIO运动控制卡为主要硬件设备,其它外围设备包括直流电机调速器、行程开关、光电编码器、中间继电器和与之配套的接口电路。

整个系统通过PCI—208运动控制卡实现对机器人各个关节的位置伺服控制和多个关节的协调控制,并与光电轴角编码器相组合构成一个全闭环系统,达到对机器人各个部位的转速和角位移量进行精确控制,实现其精准定位。

实践证明基于TRIO运动控制卡的工业机器人控制系统可以有效地提高整个机器人系统的性能及开发效率。

关键词:工业机器人;伺服电机;TRIO运动控制卡;PCI—208;AbstractThis thesis introduces a robot control system based on the TRIO sport control card. The robot has three freedoms degree( namely :RRP—The big arm return ,angle of elevating ,small arm flexible three sport ) open to match the action with a hand claw, adopt whole dynamoelectric drive the way control . The main hardware of the system is the series PCI—208 TRIO sport control the card ,other peripherals include the direct-current electrical engineering to adjust soon machine ,route of travel switch ,light electricity stalk Cape coder ,middle relay and its interface circuit.The whole system is controlled by the sport PCI-208 control card .It can control the position of all joint and make them work coordination .The system is a semi-close loop control with light electricity stalk Cape coders .So it can control the robot’s motion with high precision . It is practiced that the AGV robot based on the TRIO sport control card can work with high efficiency .Keyword: Industry robot; Servo motor ;Sport control card ; PCI-208; TRIO Control card前言机器人学是进40年来才发展起来的一门交叉学科,它涉及到机械工程、电子学、控制理论、传感器技术、计算机科学、仿真学、人工智能等学科领域。

基于VC的四轴运动控制卡在界面设计中的应用

基于VC的四轴运动控制卡在界面设计中的应用
Th p c f n o sg n e f c fF u e Ap H a o fDe i n I t r a e o o r—Ax s M o in Co t o r s d o i i t n r lCa d Ba e n VC o
【 src]B s ntem t ncnrl yt tem to fP Abt t aeo o o ot s m, h e do C+m t ncnr adi ue ,A ev ytm i d— a h i os e h oi ot lcr s sd C sross e o o e s
中对 PD参 数 界 面 的控 制 。 I
【 关键词 】四轴运动控制卡; C+ MF 界面控制 V +; C; 【 中图分类号 1T 2 T 9 2 P ; N 1 【 文献标识码 】A
D N  ̄ a , A G Y u u A G Meu n D N oy n (c ol f l t nc Ifr ai , ia o t h i U i r t , ia 10 8 hn ) Sh o o e r i E c o s& nom t n X ’nP l e n nv sy X ’n7 0 4 ,C ia o yc 】以运 动控制系统为基础, 采用 P c机 +运动控制卡的设计方案, 设计 了基于 P M 9 4 D C一 52四轴运动控制卡
的交流伺服 系统 , 利用 V +提供 的 M coo o n ̄i ls( C 编辑程序界面的方法 , C+ irsfFu d o Cas MF ) t n 实现 了WS K仿真软件 D
MC一 5 2运动控制 卡 , 94 安川 伺 服 驱动 器 和安 川交 流
PI C 总线 P MC一94 D 52四轴 运 动控 制 卡 是 宝 伦 公 司和美 国 G LL公 司联 合设 计 采用 3 i微 处 理 AI 2b t

运动控制卡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)速度设定部分—用于设定各轴的起始速度、驱动速度和加速度;位置设定—设定各轴的驱动脉冲;驱动信息—实时显示各轴的逻辑位置、实际位置和运行速度。

基于Visual C++的运动控制系统开发

基于Visual C++的运动控制系统开发

基于Visual C++的运动控制系统开发
胡皓;周妮娜
【期刊名称】《伺服控制》
【年(卷),期】2006(000)004
【摘要】分析了运动控制卡的结构、功能,介绍了用Visual C++开发Windows 下的运动控制系统的方案。

给出了Visual C++的运动控制应用程序部分代码。

实验表明,本方案可以方便地开发数控系统、检测设备、自动生产线,可以大大缩短控制系统的开发周期。

【总页数】3页(P32-34)
【作者】胡皓;周妮娜
【作者单位】
【正文语种】中文
【中图分类】TP273.5
【相关文献】
1.Visual C++ .NET应用与开发系列讲座--Visual C++ .NET概述 [J], 丁有和
2.Visual C++(MFC)与Visual C++(.NET)应用于游戏设计 [J], 郑赟
3.Visual C++语言开发经验之四用Visual C++语言进行色彩处理 [J], 李爱光
4.Visual C++语言开发经验之一——用Visual C++语言实现对文字的编辑处理[J], 李爱光
5.Visual C++语言开发经验之三用Visual C++语言实现自绘列表框 [J], 李爱光
因版权原因,仅展示原文概要,查看原文内容请购买。

基于VC的多轴运动控制器网络控制应用

基于VC的多轴运动控制器网络控制应用

基于VC的多轴运动控制器网络控制应用阐述了网络控制的原理和特点,分析了目前比较先进的基于VC分布式组件技术(DCOM技术)的网络控制应用方法,并以多轴运动控制器GT-400-SV为例,介绍其编程方法与应用。

关键词:网络控制;多轴运动控制器;DCOM1引言随着计算机技术以及网络技术的发展,尤其是Internet/Intranet的普及,人们对工业系统的过程控制提出了越来越高的要求,控制应当不仅仅局限于现场控制,它们应该与网络技术尤其是Internet/Intranet技术相结合,通过它们远程对实际控制系统进行监控。

网络控制的应用非常广泛,如远程控制数控机床、遥作机器人。

另外对于工作在有毒、有害、有危险的环境下的控制系统更具有实际意义。

2基于Internet的网络控制系统网络控制,即网络化的控制,是指在某个区域内一些现场检测、控制及操作设备和通信线路的集合中,用以提供设备之间的数据传输,使该区域内不同地点的用户实现资源共享和协调操作。

网络控制系统具有如下特点:(1) 网络化结构。

它支持如总路线型、星型、树型等拓扑结构,与分层控制系统的递阶结构相比,显得更加扁平与稳定。

(2) 智能化节点。

带有CPU的智能化节点之间通过网络实现信息传输和功能协调,每个节点都是组成网络控制系统的1个细胞,且具有各自相对独立的功能。

(3) 更好、更完全地实现了ISO7层模型,大大提高网络的可靠性。

网络化结构使原先由中央控制器实现的任务下放到智能化现场设备上执行,这使危险因素得到分散,从而提高了系统的可靠性和安全性。

在网络控制系统中,各节点都是智能体,具有计算、分析、处理和通信的能力,能对其管辖范围内发生的事件做出反应并提供控制。

(4) 混合的通信媒介。

可以使用双绞线、同轴电缆、光纤、无线电射频、红外线等等。

基于Internet/Intranet的分布式网络控制系统,就是将自动控制技术和Internet/Intranet技术相结合,使控制系统网络和Internet/Intranet网络互连,从而实现现场控制信息在Internet/Intranet上实时共享和在Internet/Intranet上对现场设备功能的在线编程。

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

基于VC++的运动控制卡软件系统设计在自动控制领域,基于PC和运动控制卡的伺服系统正演绎着一场工业自动化的革命。

目前,常用的多轴控制系统主要分为3大块:基于PLC的多轴定位控制系统,基于PC_based的多轴控制系统和基于总线的多轴控制系统。

由于PC 机在各种工业现场的广泛运动,先进控制理论和DSP技术实现手段的并行发展,各种工业设备的研制和改造中急需一个运动控制模块的硬件平台,以及为了满足新型数控系统的标准化、柔性化、开放性等要求,使得基于PC和运动控制卡的伺服系统备受青睐。

本文主要是利用VC++6.0提供的MFC应用程序开发平台探索研究平面2-DOF四分之过驱动并联机构的运动控制系统的软件开发。

平面2-DOF四分之过驱动并联机构的控制系统组成并联机构的本体如图1,该机构由4个分支链组成,每条支链的一段与驱动电动机相连,而另一端相交于同一点。

该并联机构的操作末端有2个自由度(即X 方向和Y方向的平动),驱动输入数目为4,从而组成过驱动并联机构。

控制系统的硬件主要有4部分组成:PC机,四轴运动控制卡,伺服驱动器和直流电动机。

系统选用的是普通PC机,固高公司的GT-400-SV-PCI运动控制卡,瑞士Maxon公司的四象限直流伺服驱动器及直流永磁电动机。

伺服驱动器型号为4-Q-DCADS50/5,与驱动器适配直流电动机型号为Maxon RE-35。

运动控制系统的构成如图2所示。

上位控制单元由PC机和运动控制卡一起组成,板卡插在PC机主板上的PCI插槽内。

PC机主要负责信息流和数据流的管理,以及从运动控制卡读取位置数据,并经过计算后将控制指令发给运动控制卡。

驱动器控制模式采用编码器速度控制,驱动器接受到运动控制卡发出的模拟电压,通过内部的PWM电路控制直流电动机RE-35的运转,并接受直流电动机RE-35上的编码器反馈信号调整对电动机的控制,如此构成一个半闭环的直流伺服控制系统。

1.1 GT-400-SV控制卡介绍固高公司生产的GT系列运动控制卡GT-400-SV-PCI可以同步控制4个轴,实现多轴协调运动。

其核心由ADSP2181数字信号处理器和FPGA组成,能实现高性能的控制计算。

控制卡同时提供了C语言函数库和Windows下的动态链接库,可实现复杂的控制功能。

主要功能如下:(1) PCI总线,即插即用;(2)可编程伺服采样周期,4轴最小插补周期为200us,单轴点位运动最小控制周期为25us;(3) 4路16位分辨率模拟电压输出信号或脉冲输出信号模拟量输出范围:-10V-+10V,每路课独立控制,互不影响;(4) 4路四倍频增量编码器输入,作为各轴反馈信号输入,最高频率8MHz;(5)四轴协调运动;(6)每轴2路限位开关信号、一路原点信号及一路驱动报警信号输入;(7)每轴1路驱动使能信号、1路驱动复位信号输出;(8)运动方式:单轴点位运动、直线插补、圆弧插补、速度控制模式、电子齿轮模式;(9) PID(比例-积分-微分)数字滤波器,带速度和加速度前馈,带积分限值、偏差补偿和低通滤波器;(10)支持DOS、WindowsNT/2000/XP等操作系统,提供底层库函数,可用DOS、VC、VB等进行软件开发。

控制卡结构及端子板的接口如图3所示。

1.2 直流永磁电动机PWM驱动基本原理图4为利用开关管实现直流电动机PWM调速控制的原理图和输入输出电压波形。

当开关MOSFET的栅极输入高电平时,开关管导通,直流电动机电枢绕组两端有电压Us。

T1时间后,栅极输入变为低电平,开关管截止,电动机电枢两端电压为零。

T2时间后,栅极输入重新变为高电平,开关管重复前面的动作过程。

这样,对应着输入的点评高低,直流伺服电动机电枢绕组两端的电压波形如图4b所示。

占空比a表示了在一个周期T里,开关管导通的时间与周期的比值。

a的变化范围为0<a<1。

由此式可知,当电源电压Us不变的情况下,电枢绕组两端的电压平均值Uo取决于占空比a的大小,改变a的值就可以改变端电压的平均值,从而达到调速的目的。

2 基于GT-400-SV-PCI卡的软件设计GT-400-SV控制卡具有良好的开放性,用户可以再DOS、VC、VB、Delphi环境下进行软件开发。

文中是在Windows2000系统下利用Visual C++6.0的MFC以面向对象方式进行编程。

控制卡在Windows下开发的底层动态库包括头文件GT400.h,GT400.lib和GT400.dll。

在VC++环境中使用时,选择Project—Setting—Link,在Object/Library modules中输入GT400.lib,然后就可以在程序中调用动态链接库中的函数。

2.1 Windows程序内部运行原理因为Visual C++6.0是Windows开发语言,所以用Visual C++6.0开发程序之前首先需要弄清楚Windows程序内部运行机制。

在Windows环境下的软件开发是完全不同于DOS下的,它是一种事件驱动方式的程序设计模式,主要是基于消息的。

当用户需要完成某种功能时,会调用操作系统的某种支持,然后操作系统将用户的需要包装成消息并投递到消息队列当中,最后应用程序从消息队列中取走消息并进行响应。

2.2 程序设计运动控制卡接受PC机上发出的操作命令和运动控制系统反馈回的信息,并据其进行实时的运动操作,直接控制伺服驱动器。

控制卡控制直流电动机的过程可分为:打开控制卡并初始化,设置运动参数,执行运动程序,关闭卡。

控制系统流程图如图5所示。

2.2.1 卡的初始化卡的初始化应在程序开始时就执行,主要用到的控制函数见表1。

表1 函数名称及功能名称功能GT_Open()打开运动控制器设备GT_Reset()复位运动控制器GT_SetSmplTm()设置控制周期GT_LmtSns()设置限位开关的有效电平GT_EncSns()设置编码器的记数方向GT_CloseLp()设置为闭环控制GT_CtrlMode()设置输出模拟量/脉冲量以上参数应根据具体的硬件平台来设置,一般只在程序初始化时设置一次,以后不应再设置。

另外,控制周期的设定GT_SetSmplTm(double Timer),参数Timer的单位是us。

因为运动控制卡要在控制周期内完成必要的控制计算,控制周期不能太小,因此设定的范围为48-1966.08us。

运动控制卡默认的控制周期为200us,这个控制周期对于普通的用户能够安全可靠地工作。

一般情况下,在程序中不应改变控制周期值,否则会出现不可预期的后果。

2.2.2 运动控制模块该运动控制卡可以实现单轴及多轴协调运动。

对于单轴所执行的运动操作有绝对运动、连续点动、急停缓停、回零等;对于多轴协调运动有直线插补和圆弧插补。

单轴运动控制主要用来调试直流电动机运动性能。

采用梯形曲线运动模式,设置速度、加速度、目标位置3个参数,通过设置合适的PIDP控制参数,使电动机运动达到系统设计要求。

4轴协调运动采用直线插补法,正确的设置坐标映射,合成速度、加速度,再加轨迹设置命令及目标位置,即可实现四轴协调运动。

运动控制卡通过坐标映射函数GT_MapAxis(short Axis_Num,double * map_count)将控制轴由单轴运动控制模式转换为坐标系运动控制模式。

同时运动控制卡开辟了底层运动数据缓冲区,在坐标系运动控制模式下,可以实现多段轨迹快速、稳定的连续运动。

这些运动操作都是相互独立的,在控制面板中每个操作按键对应一个独立的事件。

2.2.3 运动状态显示模块通过调用GT_GetAltPos(long * Apos)和GT_GetPrfPnt(double * Pnt)分别获得当前轴的实际位置和坐标系各轴的坐标位置,参数*Apos返回实际位置,双精度参数*Pnt指向一个长度为4的数组。

然后转换成各电动机的实际角度,并在控制面板上显示。

2编程开发实例现以单轴调试与4轴协调运动实现直线和圆轨迹为例具体介绍开发过程:打开Visual C++6.0,利用MFC AppWizard[exe]创建一个基于对话框的Robot2008工程,将GT400.h,GT400.lib添加进工程,编程时要在头文件里包含头文件GT400.h。

在对话框中添加按钮和编辑框等操作见图6。

单轴控制模块,先在OnInitDialog()中添加如下代码,进行初始化工作:GT_Open();GT_Reset();GT_LmtsOff();GT_AlarmOff();GT_CtrlMode(0);GT_CloseLp();在CRobot2008Dlg中添加成员变量m_Kp,m_Ki,m_Kd,m_Pos,m_Vel,m_Acc 并作原型说明。

然后在“单轴运动”按钮添加BN_CLICKED消息响应的函数OnButtonSrtMov(),并在函数中添加如下代码:GT_Axis();GT_AxisOn();GT_ZeroPos();GT_PrflT();GT_SetKp(m_Kp);GT_SetKi(m_Ki);GT_SetKd(m_Kd);GT_SetPos(m_Pos);GT_SetVel(m_Vel);GT_SetAcc(m_Acc);GT_Update();最后在“单轴停止”按钮BN_CLICKED响应函数OnButtonStop()中添加代码:GT_AxisOff();GT_Close();四轴协调运动的初始化与单轴情况基本相同,但要加入坐标映射函数GT_MapAxis(short Axis_Num,double *map_count)。

double cnt1[5]={1,0,0,0,0};double cnt2[5]={0,1,0,0,0};double cnt3[5]={0,0,1,0,0};double cnt4[5]={0,0,0,1,0};GT_MapAxis(1,cnt1);GT_MapAxis(2,cnt2)GT_MapAxis(3,cnt3);GT_MapAxis(4,cnt4);GT_MvXYZA(0,0,0,0,1,0.01);前文已提到,运动显示模块经编译无误后生成可执行文件,执行后如图7所示。

与硬件连接后可以实现对平面2-DOF四分之过驱动并联机构末端位置的直线及圆运动位置规划,可以实时读出直流电动机转角位置,达到了预期效果。

3结语本文利用Visual C++6.0提供的微软基础类库MFC及控制卡支持的底层函数库,详细介绍了二次开发的全过程并给出了编程实例,方便对多轴运动控制卡软件开发的理解。

整个控制软件能完成数据及运动状态显示、伺服驱动、并联机构的位置规划等任务。

实践证明该并联机构控制系统运行稳定。

相关文档
最新文档