基于嵌入式Linux的智能重型拖拉机远程监控系统开发

2021-03-13 02:51朱青松李军伟王进李德芳高松
内燃机与动力装置 2021年1期
关键词:内核串口报文

朱青松,李军伟*,王进,李德芳,高松

1.山东理工大学 交通与车辆工程学院,山东 淄博 255049;2.雷沃重工股份有限公司,山东 潍坊 261200

0 引言

通信技术的发展推动了农业智能化的蓬勃发展,智能化重型拖拉机不再是传统的纯机械式的拖拉机,它集成了众多电控单元,各个单元相互协作共同完成对重型拖拉机的控制。为实现对重型拖拉机运行状态的监控,实时获取重型拖拉机的运行状态,及时发现异常状态并进行处理,开发一套基于Linux的智能重型拖拉机监控系统非常有必要。文献[1]中基于Fescale 9S12X128芯片研究了电控拖拉机远程监控系统,通过控制器局域网络(controller area network,CAN)总线采集拖拉机的运行数据,通用无线分组业务(general packet radio service,GPRS)网络将数据发送到Internet,但此系统受控制芯片处理能力,局限较大,而且可移植性较差。

本文中采用具有先进处理性能和多内核处理器的IMAX6Q芯片,该芯片可搭载嵌入式Linux系统,嵌入式Linux系统具有开源、多体系、多驱动的优点,并且具有定制化功能,使设计的监控系统具有高效、稳定以及处理能力强大的优点,系统结合GPRS和全球定位系统(global positioning system,GPS)模块使用,能够实时高效地监控智能重型拖拉机的运行状态。

1 系统总体方案

图1 远程监控系统总体设计图

基于嵌入式Linux的智能重型拖拉机远程监控系统总体方案如图1所示。由图1可知:重型拖拉机的整车控制器(vehicle control unit,VCU)通过CAN总线与监控系统相连接,监控系统接收来自VCU的CAN报文并根据文献[2]协议对接收到的CAN报文进行解析[3-5],获取当前拖拉机运行的状态信息;监控系统的GPS模块接收到来自卫星的信息,由监控系统选取所需的数据进行提取,获取当前拖拉机的位置信息;然后监控系统将采集到的重型拖拉机的运行数据通过传输控制协议/网际协议(transmission control protocol/Internet protocol,TCP/IP)进行打包处理[6-7],并通过4G模块将打包好的数据发送到移动基站,转发至Internet,上传到云服务器,在云服务器将数据包进行解析,后台监控端访问服务器获取数据,从而实现对重型拖拉机行驶状态的远程监控。

2 程序设计及测试

2.1 CAN模块设计

CAN模块的使用在整个智能重型拖拉机远程监控系统中至关重要,因此重点对CAN模块进行程序设计。本文中智能重型拖拉机远程监控系统开发时,由于所用的Ubuntu系统缺少使用CAN模块所必须的库文件,因此首先应设计CAN模块的库文件并挂载到Ubuntu系统,将设计的库文件设置为普通用户级读写权限,将库文件生成链接文件,确保程序能够正常运行。CAN模块的程序设计及数据收发过程的流程如图2所示。

图2 CAN模块收发数据流程图

设计CAN模块程序时,应将CAN模块禁止,将波特率设置为500 kbits/s。Linux系统中,CAN设备被当作网络设备进行管理,所以需要设计专用于CAN通信的套接字来实现CAN通信,分配CAN设备,设计CAN模块的连接程序,进入接收或发送数据状态[8]。CAN模块接收数据程序时,首先在can_filter结构体中定义接收 CAN节点的报文ID和掩码(MASK),设计该结构体,并进入接收状态,read函数读取can_frame结构体中的报文信息。

将监控系统的CAN_H和CAN_L用双绞线连接到智能重型拖拉机VCU的CAN_H和CAN_L上完成硬件连接[9],通过CAN总线获取重型拖拉机的车速、发动机转速、动力输出轴(power take off,PTO)转速、差动锁状态、行驶里程、剩余油量等信息[10]。

2.2 GPS模块程序设计

2.2.1 串口初始化

由于IMAX6Q开发板中外扩了GPS模块,利用GPS模块可以实现全球范围内的定位,满足实时监测智能重型拖拉机位置的需求。Linux内核中安装了相应的驱动,GPS模块对应的文件名为/dev/ttymxc,GPS模块通过串口进行数据传输,程序设计流程如图3所示。

图3 GPS串口程序设计流程图

Linux系统中设备是以文件的方式进行读写,因此首先在程序中设置串口的文件句柄用于打开文件”/dev/ttymxc”,将串口设为阻塞状态,并检测是否为终端设备,获取串口对应终端的相关参数并在程序中将其初始化,然后设置串口的波特率、初始位、停止位、奇偶校验位和处理未接收的字符。串口初始化函数是串口初始化的通用函数,其它需要使用的模块可直接移植调用。

2.2.2 数据解析

由于GPS的数据$GPRMC为结构体格式,因此首先定义一个结构体data[ ],用于存放GPS数据,然后定义buffer[ ]数组作为缓冲数组存放从串口中读到的数据[11]。读取数据时,从文件句柄 fd 中读取一个字符存放在buffer[ ]数组中,并将该数据连接至dest[ ]的尾部。GPS数据解析流程如图4所示。

对该组数据进行解析的软件流程如图5所示。首先定义一个标志位变量 SectionID,用于标识数据组的不同信息,然后通过判断$GPRMC 数据组中的字符串是否是“,”来区分不同的数据信息。每当检测到一个“,”,则 SectionID加1,通过 switch 语句根据 SectionID判别该字符属于哪个数据,并根据不同的数据(如时间、经纬度等)进行相应的计算,将信息存储到 data[ ]数组里,便于打印或传输。

图4 GPS数据解析流程图 图5 GPS_$GPRMC组数据提取流程图

2.3 4G通信模块

2.3.1 USB驱动架构

图6 USB驱动架构

设计时选用EC20模块用于4G通信,由于IMAX6Q开发板中没有EC20模块的驱动程序,导致无法识别该设备,因此需要向 Linux 内核源码中添加EC20模块驱动程序,再编译生成Ubuntu系统文件后烧录到开发板,才能使用EC20模块与服务器进行数据传输[12]。EC20模块驱动程序设计完成后,在Ubuntu下作为通用串行总线(universal serial bus,USB)设备使用。USB是分级的总线结构,通过USB模块实现USB设备与主机之间的数据传输。USB驱动程序的体系结构如图6所示。

Linux USB主机驱动程序包括USB主机控制器驱动程序、USB 内核和 USB 设备驱动程序3部分。USB主机控制器驱动程序是架构的底层,直接与硬件交互;USB内核是整个USB主机驱动程序的核心,负责管理USB总线、USB总线设备和USB总线带宽,为USB设备驱动程序提供接口,应用程序可以通过接口访问USB系统文件;USB设备驱动程序与应用程序交互,主要提供访问特定USB设备的接口。

2.3.2 Linux内核源码修改

将EC20模块连接到USB串口即设置成USB串口设备,并将EC20模块的厂商识别码和产品识别码添加到设计程序中,Ubuntu系统会自动识别该设备,但应在相关文件中删除和EC20冲突的USB驱动的代码。设计修改内核源码时,添加回调代码,用来恢复由于Linux系统进入挂起或休眠模式时部分USB主机控制器或USB集线器的断电或复位。完成上述设计后进入内核目录下,修改环境变量ARCH为arm、交叉编译器为arm-none-linux-gnueabi,输入相关命令使能USB驱动,完成后输入加载驱动的命令并重启Ubuntu。

2.3.3 Ubuntu系统文件编译

Ubuntu系统包括引导文件、内核文件、文件系统3个文件。因此,设计完成 EC20 的内核驱动后,应交叉编译生成上述3个文件。在源码文件夹下的引导文件目录中,编译脚本build_uboot.sh,编译该文件即可在该文件夹下生成uboot.bin文件,即引导文件。在内核文件目录中,编译脚本文件build_qt_kernel.sh,生成uImage文件即内核镜像。将Ubuntu系统压缩包上传至虚拟机并进行解压,可以在解压后的文件中进行修改,实现相应的功能。源码修改完成后,再压缩生成.tar.gz文件,即为 Ubuntu 的文件系统。

2.3.4 Ubuntu系统烧录

将引导文件、内核文件和文件系统使用飞思卡尔烧写工具Mfgtools烧录至开发板,并根据开发板的型号进行相应的屏幕参数设置。烧录成功的Ubuntu系统,使用ls /dev/ttyUSB*命令可以看到系统中已存在ttyUSB 0~4共5个文件。其中,ttyUSB1用于GPS信息的输出接口,ttyUSB2用于终端设备与PC应用之间的连接与通信指令(attention,AT)的输入接口,ttyUSB3既可以用于AT指令的输入接口,也可以作为点到点协议连接的接口。

2.3.5 EC20 数据传输软件设计

EC20模块的驱动设计安装完成后,对其进行数据传输的软件设计。EC20模块的初始化程序设计流程为:首先给模块上电,通过“AT + CPIN?”指令查询SIM卡的状态,如果返回“READY! OK”,则进行下一步,否则重新启动该模块。继续使用“AT + CREG?” “AT + CGREG?”指令查询相关初始状态值;在查询状态为全部正常后,使用“AT + QIAT=”指令激活相应的报文ID;使用“AT+QIACT?”可以查询到本机IP;然后使用“AT + QIOPEN”指令进行服务器的连接,在参数中可以设置数据传输方式[13-14]。

2.4 监控系统设计

图7 系统总体程序流程图

远程监控系统所需要的各个模块的程序设计完成后,需要在Linux开发环境下对系统总体程序进行开发设计,程序设计流程如图7所示。首先要Linux开发环境下分别对CAN设备、GPS串口、EC20模块进行初始化,然后向Linux系统内核注册中断,最后对程序的主函数进行设计,主函数设计包括将GPS数据采用轮询方式采集,CAN总线数据采用中断方式采集,并且设置每隔一段时间对采集的GPS和CAN总线信息进行数据处理和打包,通过4G模块发送至远程服务器端[15-16]。

2.5 系统测试

将开发板作为CAN总线的一个节点,挂载在重型拖拉机的CAN总线网络,然后将开发板设置为可以接收所有的报文信息。来自重型拖拉机VCU的报文经开发板传送到监控端,开发板与车载端连接,在 PC 机上登录监控后台界面,通过访问远程服务器,实现车载端与PC端的连接,客户端工作界面如图8所示。部分监控系统端采集到的报文信息及其解析如表1所示,其中报文信息为车速、整车状态(“1”为运行状态,“0”为停止状态)、纬度、经度信息,经解析后转化为重型拖拉机的车速、发动机转速、PTO转速、差动锁状态、行驶里程、剩余油量、地理位置等信息。

图8 PC端客户端工作界面

表1 部分报文数据解析表

由图8和表1可知,来自监控系统端的CAN报文能够通过开发板传送至服务器端,再通过服务器传到后台客户端。重型拖拉机的车速、发动机转速、PTO转速、差动锁状态、行驶里程、剩余油量、地理位置等数据均可以在监控界面实时显示,达到设计要求。

3 结论

基于嵌入式Linux操作系统研究开发了智能重型拖拉机远程监控系统,包括CAN模块、GPS模块、4G通信模块及控制软件,并对开发的监控系统进行了测试。

1)设计了智能重型拖拉机远程监控系统的总体方案。

2)在Linux开发环境下设计CAN通信模块程序,通过CAN总线将监控系统挂载到重型拖拉机的控制器上,实现数据采集。通过Linux系统自带GPS驱动,将GPS模块作为USB设备在Linux系统中进行程序设计并获取位置信息,针对4G通信模块,修改了Linux内核驱动及相关文件,对修改后的 Linux 内核进行编译,4G模块程序设计完成后能够将数据上传到服务器端。

3)对开发的基于嵌入式Linux的智能重型拖拉机远程监控系统进行试验测试,远程监控端能够接收到来自重型拖拉机的车速、发动机转速、PTO转速、差动锁状态、行驶里程、剩余油量、地理位置等数据,满足设计要求。

猜你喜欢
内核串口报文
基于J1939 协议多包报文的时序研究及应用
以太网QoS技术研究及实践
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
基于API函数库实现串口数据通信的分析与设计
基于EM9000工控板高性能双串口通信模型设计与实现
浅析反驳类报文要点
微软发布新Edge浏览器预览版下载换装Chrome内核
MCS—51单片机中的多串口通讯技术的应用