引言

CAN总线是一种开放式、数字化、多点通信的控制系统局域网络,是当今自动化领域中最具有应用前景的技术之一。由于CAN总线具有通信速率高、开放性好、报文短、纠错能力强以及控制简单、扩展能力强、系统成本低等特点,越来越受到人们的关注。以太网具有快速、灵活、方便、可靠的特长,如果把现场总线与以太网互联的话,可实现过程控制中从设备层到管理层的一体化,使得企业可以广泛地应用如互联网、无线通信、智能设备和决策支持系统等新技术,以达到提高效率和降低成本的目的。
硬件设计

硬件选择

要实现现场总线设备接入Internet,关键就是要实现TCP/IP 协议、以及传输信息介质的选择。笔者用SX52微控制器作为处理器, 以太网驱动芯片RTL8019AS经耦合隔离滤波器HR61101G和RJ45接口接入以太网,配有RS232和CAN总线两个扩展接口,可以将具有RS232接口的设备或采用CAN总线协议通信的设备连到以太网上。RS232接口采用MAX232CPE芯片,CAN总线控制器采用Philips公司的SJA1000芯片,CAN收发器采用PCA82C250芯片。硬件结构框图见图1。

图1  硬件结构框图


工作原理为:当以太网中发送数据和请求,通过RJ45送到RTL8019AS,RTL8019AS 负责将处理后的以太网帧送入SX52的TCP/IP协议栈,由协议栈对数据报进行解析,得到原始的请求和控制信息。请求和控制信息再经过SJA1000进行CAN协议格式的数据封装,然后和现场的CAN总线设备进行通信。请求和控制的回复信息到局域网的过程与上面正好相反。

硬件电路图

在CAN到Ethernet网关的硬件设计中,在确保通信功能顺利实现的同时,充分利用了SX52芯片I/O口灵活配置的特点,最大程度地节约了微控制器SX52的硬件资源。其电路简图见图2。

图2  电路简图



SX52有5个I/O口共40个引脚,在设计中利用SX52的C口的RC0~RC7连接RTL8019AS的数据口SD0~SD7,SX52的B口兼顾选址和读写控制功能,在开发中用它与RTL8019AS 的地址及读写控制引脚连接。RTL8019AS 基地址选择引脚IOS0~ IOS3接地,此时I/O基地址为300H,即001100000000,所以地址线SA9、SA8接+ 5V。又因为寄存器地址偏移量为00H~1FH 共32个,对应地址从300H到31FH,所以只需将地址线SA0~SA4接SX52 的RB0~RB4,其余地址线接地即可。芯片IORB、IOWB引脚为读写信号线,接SX52的RB6、RB5读写控制引脚。RTL8019AS 可以兼容8位和16位操作。图2中IOCS16是16位I/O的选择脚,当RTL8019AS上电复位的时候,如果这个脚为低电平,选择8位模式,为高电平选择16位模式。由于SX52是8位的数据总线,因此要用8位总线模式,所以将这个脚接地。RTL8019AS有3种工作方式,笔者采用第一种工作方式,此时JP 引脚接高电平。AUI引脚决定使用AUI还是BNC接口。高电平时使用AUI 接口,低电平时使用BNC接口,支持8线双绞线或同轴电缆。设计中采用双绞线为通信介质,将该引脚接地。RTL8019AS 使用引脚TPIN+ 、TPIN- 、TPOUT+和TPOUT-连接耦合隔离滤波器HR61101G,通过RJ45插头实现与以太网的连接。SJA1000是独立的CAN 通信控制器, 支持CAN2.0B协议。它的AD0~AD7为地址数据复用线,与SX52的D口RD0~RD7相连。当远程用户通过Web服务器查询现场的CAN总线数据时,SJA1000将现场控制单元的CAN 总线数据解析,发送到SX52,再传到Internet。PCA82C250对总线提供发送能力并对CAN控制器提供接收能力,它支持1Mbps的速度。为保证SX52与SJA1000协同工作,在硬件设计中将两个芯片共用一个硬件复位线,以确保SX52与SJA1000硬件同步复位。MAX232CPE完成232电平与TTL电平转换。用于提供一个本地接口,为调试和维护提供方便。TXD接SX52的RA2脚,RXD接SX52的RA3脚,RS—RXD和RS—TXD是RS232电平,为标准串口电平。数据可以从串口输入到单片机SX52,SX52再把数据送到RTL8019AS。

网关的软件设计

  整个互联系统的软件设计可以分为3个部分:CAN总线设备接口通信程序、网关协议转换程序和基于以太网的TCP/IP协议的程序实现。

网关协议转换程序

网关协议转换程序的整体设计思路为:当以太网应用层有数据要发送到CAN节点时,首先,数据发送到网关,由以太网控制器协议转换模块从UDP数据报文中解析出完整的CAN 协议数据包,存放在数据缓冲区A,再调用CAN 控制器协议模块将它发送到CAN 总线上。反过来,当CAN 设备有数据要发送到用户层时,首先数据发送到网关,由CAN控制器协议模块将完整的CAN 协议数据包存放在数据缓冲区B,再调用以太网控制器协议转换模块将完整的CAN协议数据包作为应用层数据封装发送到以太网应用层。

 

CAN 控制器协议模块

CAN 控制器协议转换模块程序主要由SJA1000的寄存器读、写程序,初始化程序和发送、接收程序5 个子程序组成。之所以要编写单独的SJA1000寄存器读、写子程序,这是由SX52 芯片只有I/O端口的特点所决定的。

(1) 读SJA1000 寄存器子程序CANRead()其过程为:Re引脚设为输出;CS片选清零;Rd引脚设为输出;输出地址;置位ALE;延时20 ns ;ALE位清零;Rd 引脚设为输入;/Read 位清零;读入数据;延时20ns ;/Read 位置位;CS片选置位;返回。

(2) 写SJA1000寄存器子程序CANWrite()其过程为:Re引脚设为输出;CS片选清零;置位ALE;Rd 引脚设为输出;输出地址;ALE位清零;/wr位清零;输出数据;延时20ns;CS片选置位; 返回。

(3) SJA1000初始化子程序CANInit()选用CAN2.0A协议构建CAN总线控制网络,对SJA1000的初始化主要完成控制寄存器CR、验收代码寄存器ACR、验收屏蔽寄存器AMR、总线定时寄存器BTR0,1和输出控制寄存器OCR的设置。

(4) 发送接收子程序txdsub(),rxdsub()发送子程序负责节点报文的发送,由CAN控制器SJA1000独立完成。主控制器SX52只需将数据缓冲区A中已按CAN2.0A协议格式组合成的一帧报文送入SJA1000 发送缓冲区中,然后将命令寄存器里的发送请求标志置位,即可发送报文。

接收子程序负责节点报文的接收。SJA1000自动接收发往该节点的数据并将收到的数据放到它的接收缓冲器中。SJA1000 的报文接收主要有两种方式:中断接收方式和查询接收方式。该系统采用查询接收方式。可以发送给主控制器SX52的接收信息由状态寄存器的接收缓冲器状态标志RBS和接收中断标志RI 标出。SX52将会把这一帧数据包存入数据缓冲区B中,然后释放接收缓冲器,再通知总调度程序,由总调度程序调用以太网控制器协议转换模块转发。

以太网控制器协议转换模块

以太网控制器协议转换模块主要负责从UDP数据包中解析出完整CAN协议报文,存入数据缓冲区A。同时,将数据缓冲区B中的完整CAN协议报文封装成UDP数据报后发送到以太网上。采用UDP协议是考虑到CAN 协议数据报为短帧形式(每个数据帧最多为8个字节),因为TCP协议要进行3次握手建立连接,这对网络来说无疑是一种资源的浪费。而UDP是无连接的传输,这样可以提高网络传输效率,同时,也减轻网关的处理任务。当然,UDP是不可靠的传输协议。为了提高通信的可靠性,在应用层建立回传校验机制,通过实验 测试表明这种方式是行之有效的。以太网控制器协议转换模块主要由若干个ARP、UDP协议的API函数组成。

TCP/IP应用层程序设计

基于以太网的高层通信协议一般采用TCP/IP协议。这里采用流行的SOCKET套接字编程,传输层协议选择UDP(用户数据报协议),通过VisualC++编写应用层程序。WinSock提供了对UDP的支持,通过UDP协议可以向指定IP 地址的网关发送CAN 协议数据,同时也可以从它接收CAN协议数据,发送和接收方处于相同的地位没有主次之分。利用CAsyncSocket类操纵无连接的数据发送较简单,首先生成一个本地套接口,然后利用int CAsyncSocket : : SendTo ( constvoid 3 1pBuf , int nBufLen , UINT nHostPort , LPCTSTR1pszHostAddress = NULL ,int nFlags = 0) 发送数据,intCAsyncSocket : : ReceiveFrom ( void 3 1pBuf , int nBufLen ,CString & rSocketAddess ,UINT & rSocketPort , intnFlags = 0) 接收数据。利用UDP 协议发送和接收都可以是双向的,即管理主机和SX52网关都可以发送和接收数据。在程序设计中,创建了一个CAsyncSocket 派生类CCanSocket ,该派生类CCanSocket 有若干成员函数,通过这些类成员函数,可以很方便地实现CAN总线到Internet 的通信。

结 论

  随着Internet技术的日益成熟测控系统网络和以太网将渐渐融合。CAN总线到Internet的互联网关的设计研究是一项具有重要意义的工作,它有非常广阔的应用前景。