内容摘要:介绍了一种CAN总线到以太网网关的软硬件研究与实现,该网关采用高速、高性能、低价格的8位单片机SX52作为微控制器,SX52通过以太网控制芯片RTL8019AS与以太网相连,进而连接到Internet。该设计可以实现基于TCP/IP协议的计算机网络设备与基于CAN总线协议的底层现场网络互连。
(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的互联网关的设计研究是一项具有重要意义的工作,它有非常广阔的应用前景。
来源:阿里互联电子网 责编:豆豆技术应用