信息处理软件产品系统

我要开发同款
sleep2026年07月31日
11阅读

技术信息

语言技术
C++QT
系统类型
Linux
行业分类
项目任务

作品详情

行业场景

立项原因:
在国产化替代战略纵深推进的背景下,信息系统正经历从“可用”到“好用”的迭代升级。本项目从中标麒麟操作系统迁移至银河麒麟操作系统,本质上是信创产业由第一阶段(初步可用)迈向第二阶段(性能优化与生态完善)的典型缩影。中标麒麟作为早期国产操作系统代表,主要基于龙芯(MIPS架构)适配,在驱动兼容性、图形渲染性能、开发工具链完整性等方面存在一定局限;而银河麒麟(V10版本)基于更主流的ARM64架构(飞腾、鲲鹏芯片),具备更强的生态兼容性和更高的运行效率,已成为当前党政机关新一代信息化建设的主流底座。因此,将运行于旧版本国产系统的关键业务软件平滑迁移至新平台,是保障信息系统持续演进、避免技术债务累积的必然选择。

行业场景:
本系统属于dzdk/ldqb处理领域的数据汇聚与分发枢纽,部署于某型zzzh系统的信息处理中心节点。服务端承担多源探测数据(包括wx广播信号、st/zt/dh等设备状态信息)的实时采集、协议解析、格式化分发及持久化存储职责;客户端则为一线情报分析及指控人员提供数据实时可视、历史查询回放、多维度态势感知等操作界面。系统通过服务端-客户端的协同配合,构成完整的“数据采集→汇聚处理→存储归档→可视化呈现”业务闭环,是支撑日常战备值班、联合作战演习及突发事件处置的核心信息基础设施之一。

业务背景
近年来,随着gf信息化建设进入深水区,早期基于国产初代操作系统(中标麒麟)构建的zh信息系统面临多重困境:一方面,中标麒麟生态逐步收缩,主流国产软件及硬件驱动优先适配银河麒麟平台,导致旧系统难以接入新的数据源及周边设备;另一方面,原系统采用单体架构,服务端各功能模块耦合紧密,维护成本高、升级风险大,难以满足日益增长的多源数据并发处理需求。某研究所承担的信息处理系统已服役逾五年,面临操作系统版本停滞、数据库接口老旧、无法支持新式探测设备接入等瓶颈问题。

为响应上级机关关于“推进国产信息系统迭代升级”的专项要求,该研究所启动新一代信息处理软件研制项目,核心目标包括:①将服务端从旧版中标麒麟迁移至银河麒麟V10,并重构为模块化架构;②保留并优化wx广播数据处理、多源信息分发、系统状态监控、远程关机控制等六大核心功能;③客户端同步升级,强化数据实时渲染、多条件组合查询、轨迹回放等能力;④全部数据持久化存储至达梦数据库,确保数据安全合规。本人在项目中承担服务端部分模块重构、客户端Qt界面移植适配、数据库接口开发等关键工作,致力于打造一套稳定高效、易于扩展的新一代信息处理平台,为后续同类型系统升级提供技术范本。

功能介绍

信息处理软件主要工作是将原本运行于中标麒麟操作系统的软件,迁移至基于银河麒麟操作系统的国产化环境。
该系统采用服务端-客户端架构:
服务端主要功能分为六大模块:
1)广播数据处理:接收数据采集设备发送的实时数据,经有效性过滤后推送至指控端与客户端。
该模块支持自动推送与人工推送双模式——自动模式下,数据经校验后实时转发至指控;
人工模式下,由操作员手动筛选确认后再行发送,兼顾自动化效率与人工干预灵活性。

2)多源信息解析与分发: 接收zzw发送的st、zt、dh信息,按既定协议格式完成解析后,
分别转发至中导与客户端,实现多源数据的统一汇聚与按需分发。

3)系统状态监控: 点击状态查询后,系统按设定周期向jsj与zk发送状态探测报文,并等待对方响应。
若5秒内未收到状态回包,立即触发状态异常告警,实现通信链路的主动健康监测。

4)远程关机控制: 接收指控端下发的关机指令后,自动执行计算机安全关闭操作,支持远程运维管理。

5)数据库存储:所有收发报文均完整存储至达梦数据库。软件配备一键毁库功能,可清空指定用户下的所有表结构与数据;
重新登录后,系统自动重建数据库表结构,兼顾数据安全与快速恢复能力。

6)输出信息:所有收发信息均实时滚动展示于输出信息界面,便于运维人员实时监控系统运行状态。

客户端主要功能分为四大模块:
1)广播数据实时渲染:接收服务端推送的数据,在表格与GIS地图上实现毫秒级实时渲染。
用户双击表格目标可快速定位至地图对应位置;双击地图目标则弹出该目标的基本信息详情,实现双向联动交互。

2)数据库查询:支持按多条件组合筛选,从达梦数据库中查询历史记录,满足事后分析与审计需求。

3)数据加载:支持按时间段检索数据库中的历史数据,查询结果同步加载至表格进行列表展示,
并在地图上完成轨迹绘制与空间呈现。

4)多源态势信息展示: 接收服务端下发的st、zt、dh等信息,实时同步显示于客户端界面,
为操作员提供全面的态势感知视图。

项目实现

一、负责的具体任务
作为该项目Qt客户端及服务端模块重构的核心开发人员,主要承担以下工作:

1. 架构设计与技术选型

主导完成服务端由中标麒麟到银河麒麟的迁移方案评估,确定采用模块化插件架构对六大功能进行解耦。

客户端沿用Qt 5.12.9 + C++11框架,服务端采用C++11 + ACE框架(或自研网络库)处理高并发数据收发。

2. 服务端核心模块重构

wx广播数据处理模块:重构数据接收与解析逻辑,采用双模式推送机制(自动/人工),实现数据有效性过滤(校验和、帧头帧尾识别)及多路分发。

多源信息解析与分发模块:针对时统(st)、姿态(zt)、导航(dh)三种异构协议格式,设计统一解析适配器(Adapter Pattern),将解析后的标准化数据按目标地址(中导/客户端)路由分发。

系统状态监控模块:实现定时探测机制(QTimer或系统定时器),管理多个探测任务的生命周期及超时告警逻辑。

远程关机控制模块:封装Linux系统调用(systemctl poweroff或shutdown),接收网络指令后执行安全关机流程。

数据库存储模块:完成达梦数据库(DM8)Qt驱动编译及连接池封装;实现一键毁库功能的预编译脚本(DROP + CREATE),确保数据安全可恢复。

输出信息界面:使用QTextEdit + 异步日志队列实现实时滚动显示,支持日志级别过滤(Info/Warning/Error)。

3. 客户端核心模块重构

wx广播数据实时渲染模块:基于QAbstractTableModel + QGraphicsView双视图联动,实现毫秒级表格刷新及GIS地图目标定位。

数据库查询模块:封装达梦数据库查询接口,支持多条件组合筛选(时间范围、目标类型、区域等),查询结果异步加载。

数据加载与轨迹回放模块:实现按时间段检索历史数据,通过QPainter在地图上绘制目标运动轨迹,支持播放/暂停/调速控制。

多源态势信息展示模块:设计独立数据面板,实时接收并显示时统、姿态、导航等设备状态信息。

4. 国产化适配专项

解决银河麒麟V10(ARM64)下ACE框架编译兼容性问题,修复因glibc版本差异导致的符号未定义错误。

配置达梦数据库ODBC/Qt驱动在国产平台的环境依赖(LD_LIBRARY_PATH、DM_HOME等)。

针对银河麒麟V10的系统字体、主题样式进行Qt界面适配,确保客户端UI显示与原中标麒麟版本保持一致。

5. 性能优化与测试

服务端采用多线程+非阻塞IO模型,单机支撑200+客户端并发连接。

编写自动化测试脚本(Shell + Python),覆盖服务端状态探测、数据库读写、关机指令等关键流程。

协助完成系统在飞腾FT-2000/4 + 银河麒麟V10环境下的7×24小时稳定性压力测试。
二、技术栈、架构、实现亮点与难点
技术栈
分类 技术选型
开发语言 C++11/14(服务端+客户端)
客户端框架 Qt 5.12.9(Widgets + QGraphicsView + QML混合)
服务端网络库 ACE(Adaptive Communication Environment)或自研Epoll模型
通信协议 TCP/UDP + 自定义二进制协议(含CRC校验)
数据库 达梦DM8(DM8)+ ODBC/Qt驱动
多线程 QtConcurrent + std::thread(客户端);ACE_Task + ACE_Thread_Manager(服务端)
构建工具 Makefile + CMake(跨平台构建)
调试工具 GDB、Valgrind、strace、DM8性能分析工具
版本控制 Git(内网GitLab)
操作系统 服务端/客户端:银河麒麟V10(ARM64)+ 飞腾FT-2000/4 CPU
架构设计
采用服务端-客户端两层架构,服务端内部基于模块化插件总线设计:

text
┌──────────────────────────────────────────────────────────────┐
│ 客户端(Qt GUI) │
│ 表格视图 │ GIS地图 │ 查询面板 │ 态势展示 │ 日志 │
└─────────────────────────┬────────────────────────────────────┘
│ TCP长连接(自定义协议)
┌─────────────────────────▼────────────────────────────────────┐
│ 服务端(模块化架构) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │wx广播处理模块 │ │多源解析分发 │ │状态监控模块 │ │
│ │(自动/人工) │ │(Adapter) │ │(探测+告警) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │远程关机模块 │ │数据库存储模块 │ │输出信息模块 │ │
│ │(Linux调用) │ │(连接池) │ │(日志队列) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬────────────────────────────────────┘
│ UDP/组播(数据采集设备)
┌─────────────────────────▼────────────────────────────────────┐
│ 数据采集设备 / 指控端 / 中导 │
└──────────────────────────────────────────────────────────────┘
核心设计思想:

插件总线:服务端六大模块以动态库(.so)形式存在,由主程序动态加载,支持模块热插拔与独立升级。

生产者-消费者模型:数据采集线程作为生产者将原始报文放入队列,解析分发线程作为消费者取出并处理,解耦收发与处理逻辑。

连接池模式:数据库操作采用连接池管理,避免频繁创建/销毁连接的开销。
实现亮点
wx广播数据处理的双模式推送机制

自动模式:数据经校验通过后,通过信号槽异步转发至指控端与客户端,延时稳定在50ms以内。

人工模式:数据暂存待审队列,通过Qt列表控件展示待审数据供操作员筛选,确认后一键发送。两种模式可运行时切换,兼顾效率与安全。

多源异构协议的统一解析适配器

针对时统(ST)、姿态(ZT)、导航(DH)三种报文格式各异(定长/变长、大端/小端、ASCII/十六进制)的协议,设计了抽象解析接口(IParser) ,每个协议实现独立的Parser子类,主程序通过工厂根据报文类型字段动态创建对应解析器,新增协议无需修改主流程代码。

系统状态监控的多任务并发探测

将每个探测目标(JSJ、指控)封装为独立探测任务,每个任务持有独立定时器(ACE_Timer或QTimer)。5秒超时阈值通过状态机管理(IDLE→SENDING→WAITING→TIMEOUT/SUCCESS),避免阻塞主线程。

一键毁库的原子化安全设计

毁库操作封装为事务脚本:先备份当前表结构DDL脚本至安全目录,再执行DROP操作,最后执行CREATE重建空表。若任意步骤失败则回滚(通过达梦事务支持),确保系统不会处于半毁状态。

重新登录后触发启动时表结构自检,若检测到核心表缺失则自动执行重建脚本,实现无人值守恢复。

客户端表格/GIS双屏毫秒级联动

采用共享数据模型设计:表格(QTableView)和地图(QGraphicsView)共用同一个QAbstractTableModel派生类。数据更新时,Model发出dataChanged()信号,两个View各自响应刷新,保证数据一致性且无需额外同步代码。

双击双向定位:表格双击信号携带行索引→地图通过索引提取经纬度坐标并居中高亮;地图双击事件通过逆地理编码获取目标ID→表格选中对应行并滚动到可见区域,联动响应时间 < 100ms。

历史数据轨迹绘制性能优化

对于长时间段(如24小时)的轨迹回放,直接绘制所有轨迹点会导致QGraphicsView承载数千个图元卡顿。采用抽稀算法(Douglas-Peucker) 压缩轨迹点,在保留路径形状的前提下减少70%的绘制点;同时使用QPainterPath批量绘制替代逐个QGraphicsEllipseItem,渲染帧率从10fps提升至50fps。
技术难点及解决方案
难点 解决方案
ACE框架在银河麒麟V10(ARM64)下编译失败 原中标麒麟使用ACE 6.0.0版本,在银河麒麟V10 + GCC 9.3环境下存在模板特化冲突。解决方式:升级至ACE 7.0.0版本,修改ace/config-linux.h中的平台宏定义(#define ACE_HAS_LINUX_ARM64);修改Makefile链接选项,增加-lrt -lpthread -ldl。
达梦数据库Qt驱动在国产平台下无法加载 达梦官方ODBC驱动在ARM64下存在依赖库路径问题。解决方式:编译QODBC驱动时指定-I$DM_HOME/include -L$DM_HOME/bin;运行时设置LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH;编写环境加载脚本source dm_env.sh,随程序启动执行。
wx广播数据高并发(>500条/秒)导致服务端消息队列积压 采用双缓冲队列设计:生产者写入队列A,消费者从队列B读取;当队列A满时,原子交换A/B指针,无锁切换。配合批量处理策略,每次从队列取出100条报文统一解析后再分发,吞吐量提升约300%。
服务端与客户端自定义协议跨平台字节序不一致 原中标麒麟为MIPS架构(大端),银河麒麟为ARM64架构(小端)。解决方式:在协议编解码层统一使用htonl/ntohl/htons/ntohs标准化网络字节序;在报文头增加魔数(Magic Number)和版本字段,接收端根据魔数判断是否需要字节序转换。
一键毁库后表重建时外键约束导致失败 达梦数据库要求按依赖顺序创建表(先父表再子表)。解决方式:重建脚本采用延迟约束检查模式,执行SET CONSTRAINT ALL DEFERRED;同时重建脚本按拓扑排序后的顺序执行CREATE语句,保证依赖关系正确。
客户端GIS地图在银河麒麟下OpenGL渲染花屏 麒麟V10默认OpenGL驱动对Qt的QGraphicsView硬件加速支持不稳定。解决方式:设置Qt环境变量export QT_OPENGL=software强制使用软件渲染;在程序入口调用QApplication::setAttribute(Qt::AA_UseSoftwareOpenGL),牺牲部分渲染性能换取稳定性。

示例图片

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论