机舱综合网关控制器的设计与实现
2023-04-07王萌萌林建宝
王萌萌 曹 辉 林建宝 孙 泽
(大连海事大学轮机工程学院 辽宁 大连 116026)
0 引 言
随着计算机技术和网络技术在机舱中的广泛应用,机舱自动化的水平逐渐提高,正向信息集中、信息共享、综合管理方向发展[1]。然而,机舱中设备繁多,采用的组网方式不同,各设备间具有相互独立性,这不利于机舱中各设备的互联和信息共享[2]。因此有必要对机舱网关进行研究与设计,实现机舱各设备间信息传递和共享。
目前,国外具有代表性的KONGSBERG公司K-Chief500和CAE公司的IBSC系统,采用开放式的网络,实现了异构网络之间信息共享[3]。美国海军提出ICAN舰载系统,支持多种协议转换,简化了系统的同时提高了效率[4]。国内的机舱设备供应商能够提供船舶主推进系统、辅机系统、电站监控系统、机舱监视与报警系统、火灾监控系统等自动化产品,但是它们之间配合性差,难以达到信息共享、综合管理的状态[5]。针对这一问题,本文开发了异构网络综合网关控制器,构建覆盖了机舱的主要设备网络通信,从而实现机舱各设备系统的信息共享。
1 综合网关控制器的总体设计
机舱中的设备采用的通信方式主要有三种,分别是RS- 485串行通信总线、CAN总线、Ethernet网。其中:CAN总线因实时性好、抗干扰性强、成本低等优点,在机舱的现场应用最为广泛[6];RS- 485串行通信总线出现的时间早、实现简单且可靠,在机舱中也具有一定的应用;以太网组网方式简单,具有能够传输大容量数据等优点,一般用于在机舱的上层监控[7]。
综合网关控制器作为机舱各设备系统的桥梁,其主要作用是实现TCP/IP协议、CAN总线协议、RS- 485串口协议两两之间相互转换。综合网关控制器总体结构如图1所示,主要包括两部分:硬件层和软件层[8]。硬件层主要包含RS- 485串行通信接口、CAN总线接口、以太网接口和STM32F767IGT6微处理器等。软件层主要由各通信接口驱动程序、μC/OS-III嵌入式操作系统、多协议转换应用程序三部分组成。
图1 综合网关控制器总体结构
2 综合网关控制器接口方案设计
综合网关控制器接口方案设计如图2所示,主要包括Ethernet网接口电路、双CAN冗余接口电路、RS- 485串行通信接口电路,各接口电路均采用隔离模块作为保护措施。主控芯片选用基于ARM Cortex-M7架构的STM32F767IGT6微处理器作为逻辑控制单元,其内嵌了1 MB Flash和512 KB RAM足以满足μC/OS-III嵌入式操作系统移植和搭建。另外,其内部还集成了丰富的外设,如3路CAN控制器、6路SPI总线、4路IIC总线、8路串口等,简化了外围电路的设计,并提高了硬件电路的抗干扰能力[9]。
图2 综合网关控制器接口方案设计图
Ethernet网接口电路,采用微处理器+W5500+网络变压器+RJ45的连接形式。W5500是一款嵌入式以太网控制器,其内部不仅集成了固件TCP/IP协议栈,支持TCP、UDP等协议,而且还内嵌了10/100 Mbit/s以太网数据链路层(DL)和物理子层(PHY),这两个子层构成介质访问控制层(MAC),在设计中只需要通过带有网络变压器的RJ45就可以和Ethernet网连接[10]。此外,W5500内嵌了16 KB发送和16 KB接收的缓存区用于存放以太网数据包。
微处理器和W5500连接如图3所示,W5500支持串行SPI总线和微处理器连接,此连接方式只需要4个通用输入输出口(GPIO)引脚便可实现数据通信。这四个GPIO引脚分别为从机选择SCS、时钟SCLK、主机输出从机输入MOSI、主机输入从机输出MISO。另外,还配置了一个GPIO作为W5500的复位引脚,一个外部中断引脚来响应W5000的中断。在SPI总线通信中,微处理器作为主机,W5500为从机,时钟SCLK提供主机与从机同步节拍,主机通过MISO引脚实现数据的输入,通过MOSI引脚实现数据的输出,从而完成数据的交换[11]。
图3 微处理器和W5500连接图
CAN接口电路,采用双CAN总线冗余设计[12]。具体的方案是:采用两套完全相同的微处理器内嵌的CAN控制器+数字隔离芯片AduM1201+CAN收发器TAJA1050。在正常工作时,两个CAN通道的初始化设置相同,一路为工作通道,另一路为备用通道,当工作通道发生故障时,备用通道切换为工作通道,并对故障通道进行软复位,使其恢复正常。
RS- 485接口采用了磁隔离技术,隔离电压达到了2 500 V,具有非常强的抗干扰能力。选用ANALOGDEVICES公司生产的带隔离增强型ADM2483BRW作为RS- 485的收发器。利用微处理器STM32F767IGT的通用输入输出口(GPIO)复用为异步串口功能,对RS- 485串口进行控制,具有简单方便等优点。
3 综合网关控制器的软件设计
以集成开发环境Keil5为软件开发平台,基于嵌入式操作系统μC/OS-III利用C语言编写外设接口驱动程序和多协议转换程序。μC/OS-III是一个可剥夺的多任务操作系统,能够将多协议转换程序分割成多个简单任务,简化了程序编写,便于程序的维护[13]。
3.1 各通信接口驱动程序设计
(1) Ethernet网通信接口驱动程序。由于W5500以太网通信芯片内嵌了全硬件TCP/IP协议栈,以太网帧的封装和解析都是由硬件TCP/IP协议来完成,不需要对TCP/IP协议代码编写,只需要SPI总线对W5500的端口(Socket)简单配置。考虑到综合网关对数据的实时性要求高,选用UDP通信方式。UDP通信程序主要由UDP端口初始化程序、UDP数据发送程序和UDP数据接收程序组成。UDP初始化程序主要设置本地IP地址、目标IP地址、本地端口、目标端口、MAC地址、子网掩码等。UDP数据收发流程如图4所示,UDP数据收发处理机制是相同的,都是对W5500芯片的接收数据缓存区或者发送数据缓存区进行数据的读写操作。
图4 UDP数据收发流程
(2) CAN通信接口驱动程序。在CAN通信程序设计中,首先对微处理器内置的CAN控制器初始化,主要完成波特率的设置、CAN工作模式的选择、滤波器的配置和开启CAN数据接收中断。初始化完成后,CAN控制器会自动对CAN数据帧进行封装和解包,在数据接收过程中,通过中断服务来实现CAN数据接收寄存器的读取操作,在发送时,将数据直接写入发送寄存器实现数据的发送。由于采用了双CAN冗余设计,发生故障时CAN通道需要切换,CAN通道切换机制如图5所示。
图5 CAN通道切换机制
步骤1CAN控制器初始化后,CAN通道处于正常工作状态下。
步骤2CAN通道故障检测。根据CAN控制器的接收或发送错计数值判断是否发生故障,当接收或错误计数值累加到大于96判定该通道发生故障[14]。
步骤3备用通道检测。根据通道标志位来判定,1表示通道正常,0表示通道异常。当备用通道标记为1时,将备用通道设置为工作通道,当前通道设置为备用通道。
步骤4在新的工作通道发送切换帧,通知CAN总线上的其他设备节点进行通道切换,切换到备用CAN总线。
步骤5通道修复。通过CAN控制器软复位,复位成功后将备用通道标记为正常。
(3) RS- 485串行通信接口驱动程序。RS- 485驱动程序实质上是微处理器的异步串口的驱动,主要由初始化程序和收发程序组成。初始化主要设置串口波特率、起始位、校验位、数据位、停止位和开启串口数据接收中断。收发程序采用FIFO缓冲器来协调微处理的高速并行数据和低速串行数据,FIFO缓冲器设置为10个字节。在发送过程中,发送FIFO缓冲器被写入将发送的数据,根据先进先出的原则,将FIFO数据存入移位寄存器,通过RS- 485数据线串行发送出去。在数据接收时,数据线上的串行数据经移位寄存器转换为并行数据,存入接收FIFO并产生中断,在中断服务函数对数据进行读取。
3.2 多协议转换程序设计
多协议转换程序是整个综合网关软件的核心关键。本文的各接口驱动程序已经实现了各数据帧的收发,在多协议转换程序主要完成把接收到的数据重新封装并发送出去。多协议转换程序流程见图6,划分为三个数据帧的封装和发送任务,分别是CANData_Tx_Task、RS- 485Data_Tx_Task和UDPData_Tx_Task,这三个任务主要完成将接收的数据封装为CAN报文、UDP数据帧、串口数据帧格式并发送出去,数据的接收均在各自通信接口的中断服务程序中完成。此外,在任务设计时根据每个任务实时性要求确定任务的优先级,CANData_Tx_Task优先级为3,RS- 485Data_Tx_Task优先级为4,UDPData_Tx_Task优先级为5。开始任务的优先级为2,主要完成上述三个任务的创建和启动以及开启系统节拍,然后将自身挂起不再运行。
图6 多协议转换流程
多协议转换程序设计时采用信号量实现中断服务函数与各个任务函数之间的同步通信,中断与任务之间同步机制如图7所示,首先定义有效数据的第一个字节表示数据的流向,比如当接收到Ethernet网UDP数据包时,触发以太网数据接收中断,在中断服务函数中把接收到的数据去除IP头和UDP头后获得有效数据,然后根据有效数据的第一个字节来判定数据的流向,0XFE表示将数据发送到CAN总线,UDP有效数据被存入到CAN数据缓冲区,并调用OSQPost(&CANTx_sem)函数释放CANTx_sem信号量。CANData_Tx_Task一直等待CANTx_sem信号量,当没有获得信号量时,此任务不会被执行,当获得了信号量时,CANData_Tx_Task被唤醒,将CAN数据缓冲区中的数据重新封装为CAN数据帧发送至CAN总线。当数据的第一字节为0XEF时,有效数据被存入到RS- 485串口缓冲区,并调用OSQPost(&RS- 485Tx_sem)函数释放RS- 485Tx_sem信号量,RS- 485Data_Tx_Task任务被唤醒,把RS- 485串口缓冲区的数据以串口数据帧的形式发送出去。
图7 中断与任务之间同步机制
3.3 通信协议设计
基于软件应用层设计了机舱网络综合网关的通信协议,CAN、RS- 485和Ethernet均采用统一的协议格式[15]。CAN2.0A给出了11位标识符的标准报文格式,11位标识符添加上5位标识符正好是2个字节,再加上CAN标准报文的数据段的8字节正好是10字节。CAN、RS- 485和Ethernet的数据格式采用10字节有效数据形式,其中:第1字节代表数据传递到具体的网络,0XFE传递到CAN总线、0XEF传递到RS- 485网、0XFF传递到Ethernet网;第2字节代表具体的设备或系统识别码;3~10字节表示具体的数据字节。通信协议解析表见表1(表中空白处为根据需要制定数据)。
表1 通信协议解析表
4 综合网关控制器的测试与分析
综合网关硬件和软件设计只证明了在理论具有可行性,在设计完成后需要对相关的指标进行测试分析。本实验主要测试两两协议之间相互转换功能和协议转换速率。
4.1 实验环境要求
实验的工具主要有:综合网关电路板、USBCAN分析仪、USB转RS- 485串口线、网线、PC机(含有串口调试助手、TCP/UDP调试工具、CAN测试工具)。综合网关的各接口分别通过USBCAN分析仪、USB转串口线、网线连接PC机,具体测试环境如图8所示。
图8 测试环境
4.2 协议转换功能测试
首先设置好相关参数,然后通过TCP/UDP调试工具、串口调试助手、CAN测试工具三种调试工具自动每隔1 ms发送1帧数据,每帧10个字节,发往综合网关控制器的各接口。综合网关控制器根据应用层通信协议对数据进行解析,数据格式的转换,重新封装发送,然后被各调试工具接收。具体的数据转换功能测试结果如表2所示。
表2 数据转换功能测试结果
由表2可知,发送方和接收方的帧数一致,并未出现丢包现象,表明实现了TCP/IP协议、CAN总线协议、RS- 485串口协议两两之间相互转换功能。
4.3 协议转换速率测试
Ethernet网和RS- 485串口的通信速率均大于CAN总线的通信速率,因此本系统网关的协议转换速率取决于CAN接口的收发速率。测试方法:通过逐渐增大Ethernet网端的发送速率来测试CAN端的接收速率,当CAN端开始出现丢包现象时,则认为CAN端的接收速率达到了最大。协议转换速率测试数据见表3。
表3 协议转换速率测试数据
由表3分析可知,综合网关控制器在0~75 KB/s的通信速率下并未出现丢包现象,当通信速率大于75 KB/s时,CAN端接收到的数据和以太网发送的帧数不一致,出现了丢包现象,表明本网关的最大协议转换速率为75 KB/s。
5 结 语
本文综合网关控制器基于STM32F767IGT微处理器构建了包含CAN总线、RS- 485串口、Ethernet网接口的硬件平台,在硬件设计中各接口均采用了隔离模块,增强了综合网关的可靠性和抗干扰能力。再通过在μC/OS-III嵌入式实时操作系统添加接口驱动程序和多协议转换程序,具有较好的可移植性和通用性。模拟测试结果证明了能够实现三种网络互联,可以满足机舱各设备系统的数据传递和分享。