基于CANopen协议的电动执行机构设计(2)

2013-06-27 胥布工 华南理工大学自动化科学与工程学院

  程序中为在CAN open协议里规定的每种报文分配一个专用缓冲区,该缓冲区是应用程序与队列之间的公用接口;当需要发送报文时,应用程序先把待发送的报文按CANopen协议规定封装好,再写入相应缓冲区,然后依次入队,最后启动发送命令,报文出队并发送到总线上。接收报文时采用中断接收方式,为了减轻总线负载,设置了一个软件滤波环节,若收到的CAN报文满足软件滤波条件时才放入接收队列中。同时程序在不断扫描接收队列,若其中有报文则执行出列,出列后的报文根据其COB-ID,写入到对应的专用缓冲区中,应用程序从缓冲区中取出报文并进行后续处理。程序中定义了2个队列:接收队列和发送队列,队列采用顺序存储结构的循环队列。

  具体代码如下:

  #defineMAXsize16//循环队列长度

  typedefstruct_CAN_MSG

  {uCANTFIFrameInfo;//CAN报文帧信息

  uCANIDmsgCANID;//CAN报文ID

  uint8bDb[8];//CAN报文数据字节

  }CAN_MSG;//CAN报文格式定义

  typedefstruct_Queue

  {CAN_MSGMsg[MAXsize];//存储CAN报文

  intfront,rear;//队头、队尾指示器

  boolRLock,WLock;//读、写队列允许标志

  }Queue;//循环队列定义

  QueueTxQueue,RxQueue;//定义发送、接收队列

  为了增强程序的健壮性,在定义循环队列时,增加了队列读、写的允许标志位。队列的初始状态为front=rear=0,表示队列为空,当有新报文入队时,rear加1;同时若有报文出队,则front加1。初始时刻RLock=WLock=0,表示队列处于可读可写状态,报文在入队过程中保持WLock=1,入队完成后重置WLock=0,这样就避免了2条报文同时入队。RLock用于出队操作中,使用方法与WLock类似。

  报文的发送和接收都有入队和出队操作,下面以接收报文的入队和出队为例,说明应用程序是如何对队列进行操作的。当通过中断方式接收到的报文满足滤波条件时,将调用函数gCB_CanBuffer-Msg执行入队操作,其部分代码如下:

  voidgCB_CanBufferMsg(CAN_MSG*pMtsg)

  {CAN_MSG*pEntry;

  pEntry=gQue_PeekFree((Queue*)RxQueue);

  /*获取报文在队列中的存储地址*/

  if(pbEntry){//队列未满

  memcpy(pEntry,pMtsg,sizeof(CAN_MSG));

  /*入队操作*/

  :

  }

  }

  接收报文入队的详细操作流程,如图8所示。

基于CANopen协议的电动执行机构设计

图8 接收报文入队流程图

  相对于接收报文入队流程,其出队过程要简单一些。接收报文出队的详细操作流程如图9所示。

基于CANopen协议的电动执行机构设计

图9 接收报文出队流程图

  程序中通过函数gQue_IsElement检测接收队列,若其中有报文则队头元素出列,其部分代码如下:

  voidgCB_TestInMsg(void)

  {CAN_MSG*pMtsg;

  if(!gQue_IsElement((Queue*)RxQueue)

  {returnNO_MESSAGE;}

  else{

  pMtsg=gQue_PeekTop((Queue*)RxQueue);

  /*队头报文出列*/

  :

  }

  }

  采用这种基于队列分块存储报文处理模式有以下两方面优点:首先,通过队列缓冲,避免了由于节点收发报文过于频繁,应用程序来不及处理而产生的丢包现象;其次,存储区按报文种类来分类,可以让应用程序快速存取,保证了系统的实时性。

5、应用实例

  根据以上设计方案,构建了一个基于CANopen协议的电动执行机构现场总线控制系统,系统实物,如图10所示。

基于CANopen协议的电动执行机构设计

图10 系统实物图

  该系统主要由电动执行机构、上位机、PCI_CAN智能通讯接口卡等几部分组成。其中,上位机和PCI_CAN通讯卡组合在一起作为CAN open网络的主节点,执行机构作为从节点,主从节点之间通过PDO来交换实时数据。为实现人机对话,利用VC++6。0设计了人机交互界面,如图11所示。

基于CANopen协议的电动执行机构设计

图11 人机界面

  通过该人机界面不仅可以对每台电动执行机构的状态进行实时监控,而且还能对执行机构进行远程控制、参数标定、功能组态和故障诊断。

  在系统运行过程中,对远程控制精度进行测试。初始时刻,把3台执行机构的零点和行程分别调整为0和5115,其对应阀门的0°~90°。上位机通过PDO给3台执行机构分别发送控制阀位0%,25%,50%,75%和100%,其预期的角度值分别为0°,22.5°,45°,67.5°,90°,而测试结果,见表2。

表2 控制精度测试结果

基于CANopen协议的电动执行机构设计

  测试结果表明,3台执行机构的阀位给定值和实际值之间虽有一点小偏差,但经计算后发现它们的相对误差都在1%以下,可见远程控制精度还是很高的,能够满足实际控制精度需求。同时,在上述测试过程中,通过测试软件ZLGCANTest测得发送每条PDO报文的平均时间为2.283ms,表明系统实时性较好。另外,经初步成本核算,采用这种控制方式时,硬件成本节约了3.57%。通过这些数据表明本文提出的设计方案是合理可行的。

6、结语

  本文针对常规型电动执行机构传统点对点连接方式存在的弊端,提出了基于CAN open协议的总线型电动执行机构设计方案。该方案通过把CAN open协议应用到执行机构的设计当中,使其具备总线通讯功能,合理有效地解决执行机构数据传输可靠性、远程网络通讯和操作维护困难等方面的问题。通过实际工程应用表明,这种总线型电动执行机构具有智能化、信息化、数字化等特点,实现了高可靠性、低成本的目标,其应用前景一片光明。