基于CAN总线的机械手控制系统

发布者:温柔花香最新更新时间:2011-06-24 关键字:CAN总线  机械手控制 手机看文章 扫描二维码
随时随地手机看文章
  1 引言   
 
  机械手可在空间抓放物体,动作灵活多样,适用于可变换生产品种的中、小批量自动化生产,广泛应用于柔性自动线。我们开发的用于热处理淬火加工的物料搬运机械手,是一种按预先设定的程序进行工件分拣、搬运和淬火加工的自动化装置,可部分代替人工在高温和危险的作业区进行单调持久的作业,并可根据工件的变化以及淬火工艺的要求随时更改相关控制参数。由于目前许多商品化的工业机器人(或机械手)大都采用封闭结构的专用控制系统,一般采用专用计算机(如PUMA工业机器人使用PDP-11)作为上层主控计算机,使用专用机器人语言(如VAL)作为离线编程工具,采用专用微处理器,并将控制算法固化在EPROM中[1],这种专用系统很难进行扩展、修改或再集成外部硬件(如传感器)和软件。因此,我们自行开发了气、电混合驱动的三自由度圆柱坐标型机械手以及相应的物料分拣装置,并根据其控制要求设计了基于CAN总线的分式布开放结构机械手控制系统。

本文重点阐述了该机械手控制系统的结构组成,并从多个方面对控制系统软件的设计方法作了进一步分析。

2 机械手基本结构   

物料搬运机械手由机械手和物料分拣两部分装置组成。如图1所示,机械手主要由机座(采用步进电机驱动旋转)、水平手臂(采用直线坐标气缸HMP-20-200)、垂直手臂(采用滑块气缸SLT-16-50)、气爪(采用平行气爪HGP-10-A)等部分组成。物料分拣装置则由三个普通气缸构成,用以将不同长度的工件送至不同的轨道中,供机械手分别抓取和搬运。

图1 物料搬运机械手结构简图   

3 基于CAN总线的机械手控制系统组成   

在机械手控制系统的开发中,我们始终立足于开放结构机械手控制器的设计思想,主要体现在以下几方面:   

(1) 硬件基于标准总线结构,能实现现场设备之间、设备与各种传感器之间以及现场设备与控制室之间的数据通信。

现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。CAN(controller Area Network)总线是现场总线的一个分支,是应用于生产现场控制设备之间实现双向串行多节点数字通信的系统,是开放式、数字式的底层控制网络。因其具有很高的可靠性和性能价格比,已经成为国际标准,受到工业界的广泛重视,并已被公认为几种最有前途的现场总线之一。机械手控制系统建立在CAN总线网络基础上,能够更好地满足其开放性和可靠性的要求。

如图2所示,控制系统中上位机采用PC机,在上位机的PCI总线插槽中安装了瑞隆德公司的CANPCA单口CAN总线适配卡。下位机则采用若干CAN总线智能节点,分别与气阀、步进电机驱动器、传感器、开关等相连。上、下位机间的数据通信都是通过各自的CAN总线控制器SJA1000芯片和CAN总线收发器82C250芯片来实现的。其中,SJA1000具有完成CAN总线通信协议所要求的全部特性,它与独立CAN总线控制器82C200完全兼容,并有支持CAN2.0B协议、扩展接收缓冲器、增强错误处理能力和增强验收滤波等新增功能。四个下位机智能节点各自独立完成现场数据采集和运行控制任务,并通过SJA1000实现与上位机间的数据接收和发送。而上位机则通过PCI桥和接口控制电路来访问CAN控制器,从而实现与下位机间的数据通信。

图2 物料搬运机械手CAN总线控制系统示意图   

(2)使用基于非专用计算机平台的开发系统(本控制系统中采用PC机)。

(3)使用标准的操作系统和标准的控制语言。

机械手控制系统监控软件采用Visual C++6.0作为开发工具,运行于Windows98平台上。VC是一种面向对象的编程语言,它提供了可视化编程环境,特别是提供了MFC类库,封装了Windows API接口函数,并建立了应用程序框架,使程序开发人员可以将主要精力集中于所要解决的具体问题上。

另外,在机械手的水平手臂气缸伺服控制中,采用德国Festo公司的伺服定位控制器SPC200以及与之配套的内置位移传感器MLO-POT-0225、伺服定位控制连接器SPC-AIF-POT和比例方向流量阀MPYE-5-1/8-LF-010-B等装置。机械手的回转控制则采用北京凯恩帝数控公司的BD-3Y三相混和式步进电机驱动器。

4 机械手控制系统监控软件设计   

4.1 监控软件基本结构   

机械手监控软件采用VC++6.0作为开发工具,应用其提供的MFC类库和APPWizard功能生成SDI单文档界面应用程序。VC++6.0提供了现成的窗口、工具条等制作手段,大大简化了界面的开发过程,并且使得开发出的界面具有组态软件风格,使用起来方便、灵活。如图3所示,监控软件主要由系统界面、CAN总线通信、机械手监控以及运行状态显示等模块组成。下面就其中的数据通信、运行监控及动态显示部分作进一步分析。

图3 机械手监控软件功能框图   

4.2 CAN总线数据通信   

CAN总线是一种有效支持分布式控制及实时控制的多主串行总线,它具有短报文帧收发灵活、非破坏性基于优先权的总线仲裁技术等多种优越性能。在机械手控制系统中,CAN总线数据通信是通过与CANPCA适配卡一起提供Pcicandrv.LIB(CAN总线函数库)中的相关函数调用实现的[5]。为了及时准确地了解CAN总线状态,并尽可能减少故障和缩小故障范围,在控制软件中专门设计了测试程序,负责CAN总线接口及通信部分的调试、运行任务。只有在测试正常的前提下,才能进一步运用CAN总线对机械手进行控制。CAN总线数据有标准帧和扩展帧之分,它们都是由信息和数据两部分组成的,只是地址标识符的位数不同。下面是CAN总线初始化及CAN标准帧数据收发的部分代码。

//CAN总线初始化   void CWuLiao::InitCAN()   {   int retval;   retval =CAN_Open(); //打开PCI适配卡函数   if(retval!=1) AfxMessageBox("打开PCI卡失败!");   ptrConfig = &Config;   ptrStruct = &Struct; //定义CAN数据帧结构指针   ptrConfig->timer0=0x3f;   ptrConfig->timer1=0xff; //设置波特率为5K   ptrConfig->workMode=0; //使用11位的CAN节点地址   ptrStruct->card=0; //PCI适配卡卡号   ptrConfig->accCode=0; //CAN接收码   ptrConfig->accMask=0xff; //CAN屏蔽码   ptrConfig->Control=1; //开放中断   ptrConfig->filterMode=0; //CAN控制器采用单滤波方式   retval =CAN_Init(ptrStruct,ptrConfig); //调CAN初始化函数   if(retval!=1) AfxMessageBox("初始化失败!");   }   //CAN数据发送   void CWuLiao::OutputCAN(unsigned int CanID,unsigned char H8B,unsigned char L8B)   {   int retval;   ptrPacket = &Packet;   ptrStruct = &Struct;   ptrStruct->card=0;   ptrPacket->length=4;//发送数据长度4个字节   ptrPacket->rtr=0;//表示发送的是数据帧,而非远程帧   ptrPacket->CAN_ID=CanID;//定义CAN节点地址   ptrPacket->data[0]=0x44;   ptrPacket->data[1]=0x4f;//CAN数据发送命令字   ptrPacket->data[2]=H8B;   ptrPacket->data[3]=L8B;//要发送的高、低字节   retval=CAN_Trans(ptrStruct,ptrPacket);//调发送数据帧函数   }   //CAN数据接收   void CWuLiao::InputCAN(unsigned int ID)   {   ptrPacket = &Packet;   ptrStruct = &Struct;   int Rece_Length,retval,n;   ptrStruct->card=0;   ptrPacket->length=2;   ptrPacket->rtr=0;   ptrPacket->CAN_ID=ID;   ptrPacket->data[0]=0x44;   ptrPacket->data[1]=0x49; //CAN数据接收命令字   retval=CAN_Trans(ptrStruct,ptrPacket); //调发送数据帧函数,发出接收命令   if(retval==1)   {   retval=CAN_Rece(ptrStruct,ptrPacket); //调接收数据帧函数   if(retval==1) //接收成功,则返回值为1   {   Rece_Length=ptrPacket->length; //取接收到的数据长度   for(n=0;n   {   Rece_Data[n]=ptrPacket->data[n]; //接收到的数据从ptrPacket的成员变量Data中读取,Race.Data[8]已 设置为全局变量   }   }   }   }   

4.3 多线程技术在机械手实时监控中的应用   

机械手控制程序是在Windows98下开发的,除了具有丰富的用户图形操作界面,该控制程序还需完成实时数据采集和控制任务。然而Windows98并不是实时操作系统,它是基于消息驱动机制的抢先式多任务系统,没有提供足够的实时处理功能。因此,在程序开发中,我们采用多线程技术来实现系统的实时功能。线程是多任务的基本单元,是操作系统用来调度执行的最小单位。一个进程可以由多个线程组成,系统调度程序将CPU时间片划分给各个线程,各个线程在各自的时间片内使用CPU,从而实现了微观上轮流执行、宏观上并发运行的多任务效果。

为了避免机械手控制软件前台显示界面因CAN总线数据采集和机械手控制指令的程序循环而导致响应过慢或任务阻塞(Blocking)现象,增强应用程序的快速响应特性,我们将主要的数据采集和控制任务:“机械手搬运”及“物料分拣”定义成独立的可以按并行方式执行的工作线程,让这个工作线程在后台通过对CAN总线节点的读写完成数据输入和控制参数输出的任务。前台显示界面则通过PostMessage()函数与后台数据采集及控制程序进行通信,以共享数据单元的方式得到实时采集数据并加以显示。在“机械手系统运行”界面中设置了一个按钮用于数据采集和控制线程的启动。以下给出部分“送料缸”运行控制代码:   //设置全局变量   int Rece_Data[8]; //CAN输入数据数组   //以下是主线程   ……   #define WM_THREADCAN WMUSER+10 //用户消息定义   ……   ON_MESSAGE(WM_THREADCAN,OnThreadCAN) //用宏将消息和处理函数联系起来   ……   LRESULT CWuLiao::OnThreadCAN(WPARAM wParam,LPARAM lParam)   {   CWuLiao::InputCAN(0x10); //读2#CAN节点输入状态   if (Rece_Data[2]==0x7e) CWuLiao::OutputCAN(0x10,0x00,0x55); //满足条件,则输出控制送料缸运动   ……   return 0;   }   void CWuLiao::OnWuLiaoThread()   {   InitCAN(); //CAN总线初始化   pThread=AfxBeginThread(CAN_IN,GetSafeHwnd(),THREAD_PRIORITY_NORMAL); //创建工作线程   }   //以下是CAN数据采集和控制子线程   UINT CAN_IN(LPVOID pParam)   {   HWND hWnd;   hWnd=(HWND)param;   do   {   PostMessage(hWnd,WM_THREADCAN,0,0);   Sleep(10);   }   while (Rece_Data[2]!=0xef); //停止按钮按下则中止工作线程   return 0;   }   上述代码中,由主线程建立并初始化子线程,而子线程负责读取CAN节点的状态数据,并通过分析、计算给出相应的控制信号,完成控制任务。子线程一旦被创建,它将独立于创建它的主线程运行。由于一个进程中的所有线程都共享该进程的虚拟地址空间,从而可以通过将主线程和子线程间需共享的数据声明为全局变量的方法来访问该进程的所有全局变量。在机械手监控程序中引入多线程机制,充分利用了Windows系统的多任务特点,可以有效地克服CAN总线数据采集和控制过程中的停滞和反应不及时现象,并能大大提高程序的运行效率和可靠性。

4.4 机械手运行过程的动态显示   

工业监控软件中,现场采集来的数据都需要以某种方式表示在屏幕上。在机械手系统中,主要的控制对象是气缸和步进电机,为了能直观地反映出它们的运行状态,必须将CAN总线采集到的各传感器状态以及运动部件的运行情况以动画的形式表现出来。为此,我们采用了ActiveX控件开发及应用技术。ActiveX控件是微软公司提供的功能强大的程序设计和开发技术,它是提高程序开放性和可重用性的重要手段。在机械手控制程序中,通过MFC ActiveX Control Wizard建立了一个名为jixieshou的ActiveX控制的应用程序框架,并在其中生成了可动态显示的机械手装置图形控件。通过对该控件中诸如气缸宽度、高度等属性的设置来改变控件的形状;通过气缸活塞每移动一步的延时和每移动一步的距离来改变气缸的运动速度;通过调用该控件的接口函数来显示气缸、步进电机、传感器等的运动和状态。而上述行为的发生是由CAN总线数据采集和控制子线程向主线程传递相应全局变量的值引发的,由此将图形显示与实物动作紧密联系。

5 结束语   

利用CAN总线技术,并采用面向对象的程序设计方法以及多线程技术、ActiveX技术等,可以使监控软件具有较强的通用性、可扩展性和可靠性,同时进一步提高了控制系统的开放性和实时性。通过在物料搬运机械手控制中的应用表明:该控制系统运行可靠,能够完全满足设计要求。

关键字:CAN总线  机械手控制 引用地址:基于CAN总线的机械手控制系统

上一篇:OPC服务器的研究及其在CAN总线系统中的实现
下一篇:基于CAN总线的智能家电远程监控系统

推荐阅读最新更新时间:2024-05-02 21:27

基于CAN总线的温度检测设计
在对电子点火模块的测试中,为了模拟电子点火系统的真实工况,电子点火模块往往被置于高于常温的环境下进行电子点火实验,以获得最接近真实汽车运行工况的点火参数数据。由于电子点火模块自身的发热,其核心元件的温度成为影响电子模块性能的重要因素;另外,还要考虑环境温度是否达到模拟真实工况的要求等。 本文介绍了一种应用LM35温度传感器和PICMicro的温度检测节点的设计方案,用于检测在模拟汽车电子点火的过程中,电子点火模块的核心模块温度和环境温度,将阐明模块结构、工作原理及采样值量化的方法。 节点原理与结构 该温度检测节点由传感器电路、信号调理电路、单片机应用系统、CAN总线接口等构成。电路基本工作原理是:传感器电路将感应到的温度信号以
[测试测量]
基于<font color='red'>CAN总线</font>的温度检测设计
基子CAN总线的分布式网架健康状态监测系统的设计
在某大网架结构的建筑中,由于网架结构的特殊性及其所处地理位置在沿海台风多发地带,因此需要设计高速数据采集系统对网架结构的健康状况进行实时监测,并对数据进行实时分析和评估。由于需要对网架上受力情况进行多点监测,考虑到硬件集中控制扩展能力差且在现场施工有较大的布线困难,因此本系统采用目前广泛应用的分布式系统设计方案,将各个控制单元分布在现场各采集点上。为了实现分布式系统的监测与控制功能,需要建立良好的通讯方式,以完成系统主机与各智能单元之间的信息交换与通信。根据本数据采集系统的特点,其通信系统应具有良好的可靠性、适应性、可扩展性和简单的连接方式,并能满足长距离传输的需要。由于此数据采集系统节点数多(100路)、对信号传输速度要求高且误码
[单片机]
基子<font color='red'>CAN总线</font>的分布式网架健康状态监测系统的设计
重型商用车CAN总线通讯平台的设计
引言   本文所叙述的基于J1939的重型商用车CAN通讯平台,主要用于独立开发的发动机电控单元、AMT(Automatic and Mechanical Transmission机械自动变速箱)电控单元以及防抱死制动系统三者之间,通过接收和发送来自不同节点的消息实现信息的实时传递和共享。   SAE J1939协议规范及通信原理   在早期载货卡车、大客车上的电子系统采用串行通信的方法,用SAE J1587标准来实施,但是其速度较慢且传递的数据量少,不适用于高速通信的场合。近年来CAN总线已发展成为车辆电子系统的主流总线,载货车及大客车已制定了SAE J1939协议作为它的通信标准。SAE J1939协议是由SAE组
[嵌入式]
基于CAN总线的双容水箱控制系统
  1  引言   CAN(Control Area Network)即控制器局域网络,它最初是由德国的BOSCH公司为汽车监测、控制系统而设计的。由于其高性能、高可靠性及独特的设计,越来越受到人们的重视。目前,CAN总线是唯一已成为国际标准的,被公认为是几种最有前途的现场总线之一。   CAN具有下列主要特性:   (1) 多主站依据优先权进行总线访问;   (2) 无破坏性的基于优先权的仲裁;   (3) 借助接收滤波的多地址传送;   (4) 远程数据请求;   (5) 配置灵活性;   (6) 全系统数据兼容性;   (7) 错误检测和出错信息;   (8) 若丢失仲裁或由于出错
[嵌入式]
基于CAN总线的重型汽车内轮差预警系统设计
1 内轮差原理 内轮差是车辆转弯时的前内轮的转弯半径与后内轮的转弯半径之差。由于内轮差的存在,车辆转弯时,前、后车轮的运动轨迹不重合。内轮差的大小与转动方向盘的幅度和车辆轴距的长短有关,方向盘转动幅度越大即转向角度越大,内轮差越大,反之越小;车辆的轴距越长,内轮差越大,反之则越小。重型汽车车身都比较长,尤其是车头转过去后,还有很长的车身没有转过来,极易形成大型车辆司机的 视觉盲区 ,路人步入内轮范围后,容易造成生命危险。如图1中的阴影部分为内轮差的形成区域。 图1 内轮差示意图 2 超声波预警原理 2.1超声波测距原理 谐振频率高于20KHZ的声波被称为超声波。超声波为直线传播,频率越高,则绕射能力越弱,反射能
[单片机]
基于<font color='red'>CAN总线</font>的重型汽车内轮差预警系统设计
基于CAN总线的智能馈线终端的研究
1 前言 随着国民经济的发展,电力用户对供电质量和供电可靠性的要求越来越高,实现配电自动化是配电系统提高供电可靠性的最有效手段。在配电自动化系统中,馈线自动化是配电自动化系统的基础。而作为馈线自动化系统中核心设备的馈线终端则成为配电自动化系统成功实施的关键。 馈线终端简称FTU(Feeder Terminal Unit),它主要用来监控柱上负荷开关,重合器等一次设备。向配电主站/子站提供配电系统运行工况和提供各种参数:包括开关状态,电能参数,相间和接地故障及故障时的参数信息,并执行配电主站/子站对配电设备的控制及调节指令。 CAN总线作为具有国际标准,主要为工业现场设计的开放式总线,具有可靠性高,实时性强,组网灵活,成本低廉等优
[模拟电子]
基于<font color='red'>CAN总线</font>的智能馈线终端的研究
基于单片机μPD780822的客车CAN总线灯光节点的设计及实现
     采用μPD780822型单片机的CAN总线技术实现客车车灯控制和工作状态检测。介绍CAN总线和智能开关在客车车灯控制系统中的应用。给出节点的硬件设计方案,介绍节点控制软件的设计及实现。       1 引言             CAN(Controller Area Network)是德国Bosch公司最先提出的,是目前汽车控制器局域网中最流行、最常用的总线。它的主要特点是:CAN总线为多主站总线,各节点均可在任意时刻主动向网络上的其他节点发送信息,不分主从,通信灵活;CAN总线采用独特的非破坏性总线仲裁技术,优先级高的节点先传送数据,能满足实时性要求;CAN总线具有点对点、一点对多点及全局广播传送数据的功
[嵌入式]
基于CAN总线的汽车内部网络系统研究
摘要:研究汽车局域网CAN总线在汽车中的具体应用,实现采用Motorola公司16位单片机MC9S12DP256为核心的CAN节点设计。根据汽车内部CAN网络速率的不同,给出不同速率网络之间实现通信的网关软硬件设计。该系统具有结构简单、可靠性高等特点,具有广阔的应用前景。 关键词:汽车内部网络 CAN总线 MC9S12DP256 引 言   随着车用电气设备越来越多,从发动机控制到传动系统控制,从行驶、制动、转向系统控制到安全保证系统及仪表报警系统,从电源管理到为提高舒适性而作的各种努力,使汽车电气系统形成一个复杂的大系统,而且这一系统都集中在驾驶室控制。另外,随着近年来ITS的发展,以3G(GPS、GIS和GSM)为代表的新
[传感技术]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved