软件综合项目笔记

架构设计

硬件感知,软件算法决策,驱动控制

一、工业物联网架构

|------|------|----|------|
| 工业线程 | 智能网关 | 云端 | 终端设备 |

端 - 边 - 云 - 用"

感知层(设备层)、网络层(网关层)、平台层(云端层)、应用层

1.智能网关

地位:工业现场设备与云端系统之间的关键枢纽

功能

1.本地数据处理与管理

数据汇总,数据显示,数据存储,数据预警,整体参数采集

2.数据上传与云端交互

3.扩展能力:视频监控、边缘计算、机器人规划

4.多协议数据汇聚与转换

2.云端

地位:工业物联网架构中的数据中枢与服务出口

云端类型:公有云,私有云

公有云平台:华为云、阿里云、腾讯云、OneNet

核心功能

1.多网关数据汇聚与存储:

接收并存储来自多个智能网关的工业现场数据,实现数据的集中管理与持久化。

2.数据可视化与推送服务

提供 HTTP 服务器,支持远程用户通过 IP + 浏览器访问。

将原始数据转换为可视化界面,并推送给手机、平板、PC 等终端设备,方便用户实时查看。

3.并发处理能力

可同时响应多终端、多用户的访问请求

访问方式

公有云:MQTT 接入

智能网关通过 MQTT 协议 连接公有云平台的 MQTT Broker;

设备使用平台分配的设备证书 / 密钥完成身份认证,以 发布(Publish) 方式上传数据到指定 Topic,或 订阅(Subscribe) 方式接收云端指令。

私有云:数据库访问

智能网关将采集到的数据写入私有云环境中的数据库(如 MySQL);

上层应用或终端通过内网 / VPN 方式,使用标准数据库驱动直接访问私有数据库,完成数据查询、分析与展示。

二、数据传输

地位:工业物联网架构中的核心纽带与全链路支撑

应用链路

1.工业线程 ↔ 智能网关 2.工业线程内部(设备间)

3.智能网关 ↔ 上层系统 / 云端 4.无线终端 ↔ 网关 / 中继器

传输方式

有线传输:RS485,CAN总线,以太网(ETH)

无线传输:Zigbee,Lora,Wifi

文档内容

一、需求分析总结

目标定义:明确要实现的系统 / 产品核心目标。

整体架构:规划系统包含的平台数量与模块划分。

功能细节:逐一描述各模块的具体功能与实现细节。

界面设计:明确界面展示内容、布局样式与交互逻辑。

数据存储:确定需存储的数据类型、结构,以及数据更新 / 持久化的频率。

预警联动:梳理数据异常时所需的告警方式与联动处理机制。

二、概要设计总结

1.技术方案

整体方案:确定系统整体技术选型与架构方向。

模块方案:细化各模块的技术实现路径与交互逻辑。

流程图:绘制核心业务流程与数据流转的可视化图表。

代码接口:定义软件模块间的调用接口、参数规范与返回格式。

技术支持

日志模块

日志级别

FATAL(0): 致命错误,程序必须退出**ERROR(1):**功能错误,程序继续运行

WARN(2): 警告,潜在问题**INFO(3):**运行信息,用于观察程序状态

DEBUG(4): 调试信息,开发排查用**TRACE(5):**跟踪日志,最详细

复制代码
typedef enum LogLevel {
    LOG_LEVEL_FATAL,
    LOG_LEVEL_ERROR,
    LOG_LEVEL_WARN,
    LOG_LEVEL_INFO,
    LOG_LEVEL_DEBUG,
    LOG_LEVEL_TRACE,
}LogLevel_t;

日志操作:打开日志文件,关闭日志文件,设置日志级别,向日志文件写入信息

1.打开日志文件

复制代码
int LogInit(const char *pLogPath)
{
    fLog = fopen(pLogPath, "a");
    if (NULL == fLog)
    {
        perror("fail to fopen");
        return -1;
    }   
    return 0;
}

2.关闭日志文件

复制代码
int LogDeInit(void)
{
    if (fLog != NULL)
    {
        fclose(fLog);
        fLog = NULL;
    }
    return 0;
}

设置日志级别

复制代码
void LogSetLevel(LogLevel_t level)
{
    gCurLogLevel = level;

    return;
}

向日志文件写入信息

复制代码
//关闭日志文件
int LogDeInit(void)
{
    if (fLog != NULL)
    {
        fclose(fLog);
        fLog = NULL;
    }

    return 0;
}

//设置当前日志级别
void LogSetLevel(LogLevel_t level)
{
    gCurLogLevel = level;

    return;
}

//向日志文件中写入消息
int LogWrite(LogLevel_t level, char *pmsg)
{
    time_t t;
    struct tm *ptm = NULL;

    if (level > gCurLogLevel)
    {
        return 0;
    }

    time(&t);
    ptm = localtime(&t);
    fprintf(fLog, "[%04d-%02d-%02d %02d:%02d:%02d][%s:%d]:%s\n", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday, 
                                                          ptm->tm_hour, ptm->tm_min, ptm->tm_sec, 
                                                          __FILE__, __LINE__, pmsg);

    return 0;
}

嵌入式linux第三方日志库:zlog

多任务模块

多任务间通信

1.全局变量+锁(适用于线程间通信)

问题:多任务速率不匹配(可能数据丢失)

解决方法:缓存队列

2.线程邮箱机制(缓存队列)

实现方式:自定义实现,消息队列实现,第三方多任务通信库实现

自定义实现

线程名称,线程入口函数,线程ID,线程队列头节点地址

线程邮箱中的线程节点

创建,注册申请,回收,发送,接收

显示模块

前端+后端(b/s型)(资源在服务器端)

库实现:Qt库(界面开发)(c/s型)(资源提前下载到本地)优点:跨平台特性(Windows,;Linux,Android,macOS)

Windows开发语言/框架:c#,.NET

FrameBuffer

Qt库本质是调用FrameBuffer实现显示

LVGL库,MiniGUI库(基于Framebuffer)

有的嵌入式可以有多个Framebuffer,不同的Framebuffer有着图层区别

一帧图像的大小

像素点:显示图像的基本单元

ioctl

向设备发送命令(查询设备信息的命令)

横向像素点*纵向像素点*RGB

颜色标准:

RGB565:5位红色,6位绿色,5位蓝色;16位

RGB888:8位红色,8位绿色,8位蓝色

ARGB888:空出来的颜色+RGB888

三个像素点

多个像素点

数据量过大,如何高效率写入

mmap内存映射

将磁盘空间映射到内核层和用户层

零拷贝思想:访问同一片磁盘空间,可读可写

显示模块-framebuff实现

打开文件 open

获取屏幕属性 ioctl

映射显存空间 mmap

显示对应的信息

位运算

与1

右移一位

网络上传模块

相关推荐
志尊宝44 分钟前
Vue3 零基础每日笔记(071):暗黑模式与主题切换——CSS 变量 + Element Plus 暗黑方案
前端·css·笔记·vue·html·前端开发·软件开发
沪上企服通2 小时前
历史账套科目重映射与规则版本重算:旧账梳理的“口径复位”工程
笔记·架构
Go Work6 小时前
2026 Cadence SPB 24.1中文版安装图文详解(附安装包)
经验分享·笔记
ACP广源盛139246256737 小时前
HDMI2.0 转 DP1.4 桥接方案评估:国产 GSV2125C@ACP 芯片选型笔记
笔记·硬件架构·hdmi·type-c·国产芯片
龙仔7257 小时前
RustDesk 自建服务器 Key 强校验配置笔记
运维·服务器·笔记
悟乙己8 小时前
AFAC2026 赛题四金融长文本 Agent竞赛学习笔记:赛题解析(一)
笔记·学习·金融
PC2005-cloud8 小时前
MySQL学习笔记:GTID 主从复制,从原理到实践,告别传统 Binlog+Position 的痛点
笔记·学习·mysql
悟乙己10 小时前
AFAC2026 赛题四金融长文本 Agent竞赛学习笔记:关联技术(二)
笔记·学习·金融
yi01111 小时前
LeetCode 424. 替换后的最长重复字符|不定长滑动窗口:如何判断窗口是否合法?
笔记·python·算法·leetcode·双指针·滑动窗口
杨逢昌工厂6S管理11 小时前
116——杨逢昌:归位三定闭环法的旺季轻量化执行方案与工具清单
经验分享·笔记·职场和发展·学习方法