基于QT的嵌入式系统文件传输上位机软件设计

2022-02-17 12:11贾贝贝康明才
电子设计工程 2022年3期
关键词:机软件下位上位

贾贝贝,康明才

(南京理工大学电子工程与光电技术学院,江苏南京 210014)

在嵌入式系统文件传输的过程中,传统文件传输的方式是通过串口直接传输,或通过其他存储介质间接传输。这些传统的传输方式不仅存在传输效率低下的问题,而且在调试过程中,调试人员必须处于嵌入式设备工作现场,这些情况给嵌入式系统调试带来了很大的麻烦。在嵌入式系统的实际应用中,嵌入式设备往往处于各种复杂的网络环境,支持部分网络协议和有限的带宽。因此文中将嵌入式系统中使用最广的MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)通信协议和Ymodem 文件传输机制相结合,基于QT 编程开发框架设计出通过物联网对嵌入式设备进行文件传输的上位机软件。

1 总体方案设计

1.1 基于QT的上位机方案设计

QT 是一种跨平台的上位机应用程序开发框架。MQTT 是一种物联网中常用的协议[1],它基于发布/订阅模式,而且是一种轻量级的通信协议。该协议通常构建于TCP/IP 协议之上,因为其协议的轻量级特性,可以用极少的代码和有限的带宽为远程设备提供实时可靠的消息服务。因此,MQTT 协议广泛应用于各种物联网设备和嵌入式系统中。YModem 协议每包数据可以达到1 024 字节,是一个非常高效的文件传输协议[2]。YModem 数据的发送使用CRC 校验,确保了接收端接收数据的准确性,它每传输一个信息块数据时,就会等待接收端回应ACK 信号,接收到回应后,才会继续传输下一个信息块,保证下位机可以全部正确接收到数据。

通过MQTT 通信协议可以确保上位机与嵌入式系统之间的通信,通过Ymodem 文件传输的校验机制可以确保文件传输的正确性,避免传输中间出现错误或被修改。

上位机软件设计的总体方案如图1 所示。

图1 系统总体方案图

1.2 嵌入式系统方案

嵌入式系统包括MCU、通信模块、存储模块、电源模块和其他功能模块。嵌入式系统可以通过网络模块与MQTT 服务器进行通信,并将得到的文件存储到存储模块中[3-5]。

1.3 服务器方案

服务器使用基于Mosquitto 软件的MQTT 服务器。Eclipse Mosquitto 是一个开源MQTT 消息代理软件,可以运行在大型服务器上,也可以运行在低功耗设备上。

2 上位机软件设计

2.1 上位机主要功能

上位机需要实现MQTT 客户端创建功能、Ymodem 传输机制功能、文件打开功能和嵌入式系统唤醒功能:

1)MQTT 客户端创建功能。建立MQTT 客户端,与服务器建立连接,进行通信。

2)Ymodem 传输机制功能。实现文件传输过程中的Ymodem 机制,确保每一帧都正确传输,不会中途丢失或被篡改。

3)文件打开功能。打开并读取待传输的文件。

4)嵌入式系统唤醒功能。发送特定指令,唤醒被传输文件的下位机。

软件流程图如图2 所示。

图2 软件流程图

2.2 基于MQTT的通信方式

MQTT 通信过程中只有一个服务器(Broker),其他设备称为客户端(Client),服务器建立在固定IP的主机上,客户端通过与服务器建立连接进行通信[6]。

上位机通过发送主题为下位机的MAC(Media Access Control Address,媒体访问控制地址)和“CLIENT”组合的字符串即“MAC+CLIENT”,对指定下位机发送消息。通过订阅下位机的MAC和“SERVER”组合的字符串即“MAC+SERVER”的主题,接收指定下位机发送给上位机的消息。通过这种机制,可以避免只用一个主题的情况下接收到自身发送消息的情况,减少了多余数据的处理,提高了系统的性能。

上位机与服务器建立连接后,通过上述通信方式,发送字符串“+++”唤醒指定下位机。下位机唤醒后,根据Ymodem 文件传输机制,回复单字符‘C’表示成功进入Ymodem 传输阶段。上位机结束唤醒功能,开始文件传输。

2.3 界面设计

界面UI 上包括输入部分、控制部分和显示部分。输入部分包括服务器IP 地址输入、端口号输入、用户名输入、密码输入、下位机MAC 输入、文件选择。控制部分包括连接服务器、与下位机通信、启动传输、启动发送和清除、置顶等功能。显示部分包括文件传输进度条、程序运行具体信息显示等。界面具体设计如图3 所示。

图3 上位机界面设计

2.4 功能具体实现

2.4.1 文件打开功能

文件打开功能是借助QFileDialog 库来实现的[7],通过QFileDialog 下的getOpenFileName 函数即可实现打开特定文件:

2.4.2 MQTT客户端创建

利用QT 官方提供的MQTT 库可以创建客户端[8],其创建和参数设置通过new QMqttClient 实现:

2.4.3 Ymodem文件传输机制

Ymodem 文件传输机制是通过一个发送函数和接收中断实现的[9]。点击发送按钮后,软件进入发送函数中。按照Ymodem 协议组合发送数据[10-12]和CRC(Cyclic Redundancy Check,循环冗余校验)数据。每发送一帧数据后,进入接收等待,接收到发送数据接收成功信号后,发送下一帧数据。

发送数据的功能是通过使用publish 函数来实现的:

Ymodem 数据发送流程如图4 所示。

图4 Ymodem文件传输流程

2.4.4 下位机唤醒功能

点击启动传输按钮后,上位机开始以一定频率给下位机发送唤醒信号。下位机被唤醒后,发送被唤醒信号给上位机,上位机结束发送。

通过使用定时器Qtimer[13-15]来实现上述功能。首先创建定时器:

上位机设置定时器超时函数,在超时函数中检测是否已唤醒下位机设备,若未唤醒则继续发送唤醒命令:

3 上位机软件测试

3.1 上位机软件的使用

打开软件后,输入服务器IP、端口号、用户名和密码,点击connect 按钮登录服务器。然后输入MAC地址,点击通信,建立与下位机通信的通道。点击打开文件按钮,打开待传输的文件,然后点击启动传输按钮,等待下方消息窗口显示“TRANSMIT READY”,点击发送,进入文件传输。进度条和下方消息框可显示传输进度。传输完成后,下方消息窗口显示“TRANSMIT END”,可继续重新选择文件或重新选择下位机MAC 地址进行文件传输。

3.2 服务器的搭建

在云服务器上使用MQTT 开源服务器软件Mosquitto。该软件提供Linux、Windows 等多种系统的安装包,可以使用命令直接在服务器上安装。安装后可以通过修改配置文件mosquitto.conf和aclfile,修改端口号和登录用户等设置。

3.3 上位机软件的测试

完成上位机软件编写和下位机软件编写后,可以对其文件传输功能进行测试。测试结果表明,该上位机软件可以稳定连续地对下位机进行文件传输,且传输过程中可以正确重发出错或异常的包。传输过程如图5 所示。

图5 传输过程

4 结论

文中基于解决嵌入式设备远程文件传输的目的,采用QT 编程框架设计出基于物联网传输协议MQTT和Ymodem 文件传输协议的嵌入式系统文件传输上位机软件。首先介绍了上位机软件的设计架构、MQTT 通信原理和Ymodem 通信机制。然后实现了基于QT的MQTT 客户端和Ymodem 机制,最终完成嵌入式系统文件传输的上位机设计。该上位机提供了友好的用户使用界面,能够便捷稳定地将文件传输至嵌入式系统中。通过测试,可以看到该上位机不仅传输运行稳定,而且在嵌入式设备处于较为复杂的网络环境下,也可以顺利地完成文件传输。

猜你喜欢
机软件下位上位
无线传感网气象监测系统上位机软件设计
基于Qt的探测器温控上位机软件设计
提高火力发电厂自动电压控制系统投入率的措施
发射机房监控系统之下位机
特斯拉 风云之老阿姨上位
小水电站计算机监控系统上位机软件的开发
基于ZigBee和VC上位机的教室智能监测管理系统
围观党“下位”,吐槽帝“登基”
CAN总线并发通信时下位机应用软件设计
基于VC的PLC数据采集管理系统