“CAN总线是一种有效支持分布式控制或实时控制的串行通信网络。CAN可实现全分布式多机系统,且无主、从机之分;CAN可以用点对点、一点对多点及全局广播几种方式传送和接收数据;CAN直接通讯距离最远可达10km(传输率为5kbps),通讯速率最高可达1Mbps(传输距离为40m);CAN总线上节点数可达110个。
”作者:周治国,肖佩,程森
1. 前 言
上世纪90年代兴起的现场总线技术是用于现场仪表与控制系统和控制室之间的一种全分散、全数字化、智能、双向、多节点的通信系统结构,它是控制结构的一次革命;系统把控制的权力很大部分交给了处于现场的智能节点,交互信息通过现场总线传送。现场总线式的控制系统正在逐步取代集散式的控制系统而成为主流系统;其中,CAN总线由于可靠性高、稳定性好、抗干扰能力强、通信实时性好、系统造价低廉、维护成本低等特点而具有广泛的应用前景。
2. CAN总线概述
CAN总线是一种有效支持分布式控制或实时控制的串行通信网络。CAN可实现全分布式多机系统,且无主、从机之分;CAN可以用点对点、一点对多点及全局广播几种方式传送和接收数据;CAN直接通讯距离最远可达10km(传输率为5kbps),通讯速率最高可达1Mbps(传输距离为40m);CAN总线上节点数可达110个。
CAN根据优先权进行总线访问仲裁,总线中的数值为两种互补逻辑数值之一:“显形”或“隐性”。“显形”数值表示逻辑“0”,而“隐性”表示逻辑“1”。“显形”和“隐性”位同时发送时,最后总线数值将为“显形”。CAN总线数值信号内部包含传输地址,即所谓的标识符(ID),标识符还兼有识别优先权的作用。当许多节点一起开始发送数据时,首先发送标识符,每个发送器将发送电平同总线上监测到的电平进行比较,若相等则发送器继续发送;当送出一个“隐性”电平,而监测到的为“显形”电平时,表明节点丢失仲裁,并且不再发送更多位。显而易见,标识符越低,节点优先权越高。CAN总线信号传输为广播式,所有的节点都可以监听到总线上的信号,当节点监测到总线上的数据帧的标识符与自己的标识符相符时就接收数据帧。错误监测和自动隔离性能确保了总线正常工作。
3 .功率因素动态补偿系统
功率因素动态补偿系统对低压电力系统的无功功率进行实时监测、动态补偿,对电网运行状态和负载用电状态通过电压、电流互感器间接监测。本系统在保证系统可靠工作和降低成本的条件下,考虑到通用性、实时性和扩展性等方面的因素,采用了主要由上位计算机系统和网络节点模块构成的系统结构。系统的总体结构如图1所示。智能节点通过对各个模拟量和开关量信息的采集检测,达到电力的合理调配,并且将有关参数通过CAN总线控制器由CAN总线传递给上位机。上位机完成故障录波、自动数据分析、人机界面显示和报表打印等。补偿单元是由电容器组和晶闸管触发电路组成,它根据智能节点的解算值投入电容器来产生补偿电流注入低压电网,以此补偿无功功率。
4. CAN总线在功率因素动态补偿系统的应用
上位计算机系统由通用个人计算机以及接通至通用PC机内部的CAN总线通信接口适配卡PCCAN组成。该系统负责系统的总体调度,向网络节点发送命令,接收节点数据,并对节点信息加以分析、存储、显示及打印。智能节点负责对电流及功率进行检测,并对无功功率进行补偿。智能节点模块中采用以80C196KC微处理器为核心的硬件结构。Intel公司的高性能16位单片机80C196采用CHMOS工艺,具有功耗低、运行速度快、集成度高等优点。该控制器硬件结构CPU没有采用习惯的累加器结构,改用寄存器-寄存器结构,消除了累加器存在时的瓶颈效应,提高了操作速度和数据吞吐能力。这些特点使得80C196很适合用于数据量大、功能复杂的现场控制器中。CAN通信接口采用SJA1000通信控制器和82C250总线接受器。SJA1000是PHILIPS公司生产的独立CAN通信控制器,它是82C200的替代产品,引脚与82C200兼容。82C250是CAN控制器和物理总线间的接口芯片,它提供对总线的差动发送能力和对CAN控制器的差动接受能力。CAN硬件接口电路如图2所示:
SJA1000的AD0至AD7是分时复用地址/数据线,与单片机的系统总线引脚P1.0 至P1.7相连作为单片机的外部扩展存储器。SJA1000的INT脚与HSI.0脚相连,当中断允许时,一旦有中断发生,SJA1000的16脚INT就会被激活,出现一个由高电平到低电平的跳变,而80C196KC的外部中断HSI.0接受这一中断信号后,CPU随即响应中断,由执行其他任务转向为执行该中断任务。
上位机的CAN总线通信接口适配卡采用研华生产的pcl841板卡,pcl841能够同时在两套CAN网络上运行,提供4 KB的基地址空间,提供16 MHz的CAN控制频率。同时提供的库函数有七个子程序可供调用:
1 caninitHW() 初始化CAN接口
2 canExitHW() 释放CAN节点
3 canReset() 复位CAN控制器
4 canConfig() 设置CAN命令字
5 canNormalR~n() 设置CAN工作模式
6 canSendMsg() 发送数据桢
7 canReceiveMsg() 接受数据桢
通过调用这七个子程序,可以完成CAN总线通讯软件的大部分工作,极大地降低了开发人员的工作难度,减小了工作量,缩短了开发周期。
5. 控制系统通讯的软件实现
因为CAN控制器发送一个数据帧需要的时间是微秒级,补偿系统控制周期的时序是毫秒级(20毫秒),而上位机中断频率最高不过几秒,因此,每个智能节点的微处理器在外部中断服务程序中接受上位机发来的信息,在主程序内不断地向上位机传输数据信息,根据CAN协议ID标识符越低其优先权越高,所以通过定义不同的ID标识符使上位机比智能节点优先发送的数据。其主程序和外部中断服务程序流程图分别如图3、图4所示。
通过反复调试,已把通信部分的程序做成了模块,在实际系统中的应用良好。下面给出通信模块程序的部分代码(采用C96高级语言编写)
main()
{
……
*CR=0x001b; /*开始复位模式,开放接收、出错、超载中断,并置位
*ACR=0x02; /*初始化接受代码寄存器
*AMR=0xfd; /*初始化接受屏蔽寄存器
*BTR0=0x00;
*BTR1=0x14; /*确定波特率、同步跳转宽度、位周期长度、采样数目
*OCR=0xaa; /*选择输出方式
*CR=0x001a; /*初始化结束,SJA1000返回其工作模式
……
cansend:
temp2=*SR&0x04; /*查询状态寄存器
if(temp2==0x00)goto cansend;
sebuffer=(unsigned char*)0x800c;
*seid=0; /*发送数据的目的地
*sedlc=i1; /*发送数据的数目
for(i1=0;i1《6;i1++)
{
*sebuffer=a[i1];
sebuffer++;
} /*送数据至发送缓冲区
*CMR=0x05; /*发送数据
wait1:
temp2=*SR&0x00;
if(temp2==0x08)goto wait1 /*发送完毕否
callms( ); /*延时
goto cansend; /*继续发送数据
}
6. 结 论
CAN通讯系统经过充分的调试在功率因素动态补偿系统的控制和监测中取得实际的应用。实践证明,CAN现场总线监控系统具有全数字化通讯、抗干扰能力强、实时性能好、测量及控制精度高的优点,所以它必将随自动化监控系统的发展而被广泛采用。
分享到:
猜你喜欢