基于CANopen协议的电动执行机构设计(2)
程序中为在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所示。
图8 接收报文入队流程图
相对于接收报文入队流程,其出队过程要简单一些。接收报文出队的详细操作流程如图9所示。
图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所示。
图10 系统实物图
该系统主要由电动执行机构、上位机、PCI_CAN智能通讯接口卡等几部分组成。其中,上位机和PCI_CAN通讯卡组合在一起作为CAN open网络的主节点,执行机构作为从节点,主从节点之间通过PDO来交换实时数据。为实现人机对话,利用VC++6。0设计了人机交互界面,如图11所示。
图11 人机界面
通过该人机界面不仅可以对每台电动执行机构的状态进行实时监控,而且还能对执行机构进行远程控制、参数标定、功能组态和故障诊断。
在系统运行过程中,对远程控制精度进行测试。初始时刻,把3台执行机构的零点和行程分别调整为0和5115,其对应阀门的0°~90°。上位机通过PDO给3台执行机构分别发送控制阀位0%,25%,50%,75%和100%,其预期的角度值分别为0°,22.5°,45°,67.5°,90°,而测试结果,见表2。
表2 控制精度测试结果
测试结果表明,3台执行机构的阀位给定值和实际值之间虽有一点小偏差,但经计算后发现它们的相对误差都在1%以下,可见远程控制精度还是很高的,能够满足实际控制精度需求。同时,在上述测试过程中,通过测试软件ZLGCANTest测得发送每条PDO报文的平均时间为2.283ms,表明系统实时性较好。另外,经初步成本核算,采用这种控制方式时,硬件成本节约了3.57%。通过这些数据表明本文提出的设计方案是合理可行的。
6、结语
本文针对常规型电动执行机构传统点对点连接方式存在的弊端,提出了基于CAN open协议的总线型电动执行机构设计方案。该方案通过把CAN open协议应用到执行机构的设计当中,使其具备总线通讯功能,合理有效地解决执行机构数据传输可靠性、远程网络通讯和操作维护困难等方面的问题。通过实际工程应用表明,这种总线型电动执行机构具有智能化、信息化、数字化等特点,实现了高可靠性、低成本的目标,其应用前景一片光明。