自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 告别传统BMS!深度解读阳光电源 BM^2T 电池管理技术白皮书

从“被动监测”到“主动控制”,从“管安全”进化到“管健康”。阳光电源《BM^2T 电池管理技术白皮书》的发布,不仅是一次技术的秀肌肉,更代表了储能行业在追求极致安全与全生命周期高收益道路上的必然趋势。在大储时代,谁能更聪明地“听懂”电池的语言,谁就能掌握未来电力系统的核心密码。*(本文内容提炼自《阳光电源 BM^2T 电池管理技术白皮书》)*

2026-03-21 18:26:56 126

原创 为什么SOC总是不准?从原理到工程,讲透电池管理的最大难题(AI模型+电池管理)

电池SOC(荷电状态)估算不准的根本原因在于其本质是不可直接观测的隐变量,受四大因素影响:安时积分的误差累积、OCV-SOC曲线的平台区问题、动态工况干扰以及电池老化特性。传统方法(安时积分、OCV、卡尔曼滤波)存在固有局限,因其依赖有限观测维度(电压/电流/温度)。行业突破方向包括引入多物理量传感(如膨胀力)、AI数据驱动建模及机理-AI融合技术。工程实践中需分阶段优化:基础方案需结合库仑计数与动态校正,而未来BMS核心竞争力将取决于多维感知能力和精准建模水平。SOC问题的核心在于观测维度不足,而非单纯算

2026-03-21 09:45:51 253

原创 为什么传统BMS无法提前预警热失控?一张图讲透电池安全的本质

储能安全监测存在重大误区:传统VIT(电压、电流、温度)监测无法识别早期热失控风险。研究表明,电池热失控是渐进过程,分为四个阶段,其中早期隐患阶段的阻抗和膨胀力变化是最关键信号,而温度变化已属滞后指标。未来BMS系统需转向多维感知(电+热+力+阻抗),实现提前5-10分钟预警。这一认知突破揭示:电池安全管理的核心在于"测对数据"而非"测更多数据",行业竞争重点将从电池本身转向管理能力升级。

2026-03-20 17:05:33 157

原创 嵌入式设备OTA升级实战:从MQTT命令到自动重启的全流程解析

本文详细介绍了物联网设备OTA远程固件升级的实现方案。系统采用MQTT协议接收云端升级命令,通过状态机设计完成下载、校验、安装全流程。关键点包括:JSON命令解析、HTTP/FTP文件下载、MD5完整性校验、业务状态感知的安全重启机制,以及实时状态上报功能。文章还总结了开发经验,如命令验证、断线重试、存储空间检查等技术要点,并针对升级失败回滚、网络不稳定等常见问题提供了解决方案。该方案已在储能充电项目中成功应用,实现了可靠、高效的远程设备维护。

2026-03-20 16:42:05 323

原创 嵌入式 OTA(远程固件升级)(二)

本文档详细阐述了储能备份管理系统的OTA远程固件升级技术方案。方案基于MQTT协议实现云端命令下发和设备自动升级,采用分层压缩格式的升级包结构(包含应用固件、MD5校验文件和可选脚本),严格遵循命名规范和大小限制(<100MB)。系统通过MD5校验、文件存在性检查等多重验证确保安全性,并设计了完整的日志记录机制和异常处理策略。升级流程采用状态机设计,包含下载、校验、安装和重启等环节,特别考虑了充电状态检测和CCU同步等安全因素。文档还提供了配置参数说明、测试建议和维护指南,确保升级过程的可靠性和系统稳

2026-03-19 20:26:55 279

原创 嵌入式 OTA(远程固件升级)(一)

本文介绍了能源管理系统中远程固件升级(OTA)的实现方案。系统通过MQTT接收云端下发的升级命令,自动完成下载、校验、安装和重启流程,并将状态实时回传。核心架构包括命令解析层、执行层和状态上报机制,采用状态机管理升级流程,支持HTTP/FTP下载、MD5校验和延迟升级功能。重点解决了命令验证、下载可靠性、完整性校验等关键技术问题,同时针对升级失败回滚、多模块同步等难点提出了解决方案。实践建议包括规范升级包格式、控制升级窗口、建立守护机制等,确保系统升级的安全性和可靠性。

2026-03-19 20:04:30 327

原创 MQTT通信协议业务层实现的完整开发流程

本文基于储能备份管理系统的MQTT报告器模块,详细阐述了MQTT协议在嵌入式Linux设备中的业务层实现。系统需实时上报充电桩数据并接收控制指令,面临网络不稳定、资源受限等挑战。文章从需求分析、技术选型到架构设计,重点剖析了连接管理、消息处理、数据适配等核心模块的实现,并针对异步并发、连接稳定性、数据序列化等难点提出解决方案。通过采用QoS保障、指数退避重连、消息队列等技术,确保了系统的可靠通信。最后总结了项目涉及的MQTT协议应用、网络编程、嵌入式开发等关键技术点,为物联网设备通信提供了实践参考。

2026-03-19 19:12:20 309

原创 PID 调节在 EMS 功率控制中的工程落地:从原理到代码实现(含参数体系与防抖策略)(一)

本文介绍了储能系统(EMS)中PID功率调节的实现方案。文章首先阐述了PID调节的必要性,包括解决电表功率波动、执行端延迟、外部扰动等问题。然后详细说明了增量式PI+补偿项的设计思路,通过将补偿量与目标功率相加的方式实现平滑控制。在工程实现方面,文章重点介绍了参数体系设计、网页调参功能、使能条件约束以及多种工程化增强措施,如死区控制、比例积分分离、限幅保护等。此外还说明了参数热更新机制和调试验证方法。整体方案强调工程实用性,在保持控制核心简单的同时,通过完善的约束条件和灵活的配置功能确保系统稳定运行。

2026-03-18 13:49:01 316

原创 S32K146OFBMU_B BMS工程专业评价报告

S32K146OFBMU_BBMS工程专业评价报告显示该系统为专业级BMS,综合评分4.2/5。核心优势包括清晰的分层架构、多源融合SOC/SOH算法、完善的保护机制和良好的实时性。不足在于缺少高级算法(如EKF、OCV修正)、部分高级功能缺失和优化空间。短期建议完善SOC算法和保护机制,中期加强均衡控制和故障诊断,长期优化热管理和数据分析。该系统适用于储能、低速电动车等场景,但需改进才能满足高速电动车等高要求应用。

2026-03-17 17:45:07 280

原创 卡尔曼滤波SOC算法模型

c// 状态向量: x = [SOC, V1, V2]^T (二阶模型)// 或 x = [SOC, V1]^T (一阶模型)float soc;float v1;// RC网络1电压 (V)float v2;// RC网络2电压 (V) - 仅二阶模型。

2026-03-17 17:36:19 301

原创 OpenClaw(龙虾)初体验

OpenClaw成为GitHub史上最受欢迎的开源项目,星标数达25.2万。本文分享了安装配置教程:1)安装Node.js;2)通过npm安装OpenClaw;3)配置参数时推荐选择qwen模型;4)设置iMessage通信渠道;5)选择实用插件;6)需管理员权限运行;7)测试后即可通过网页界面与AI交互。安装过程中需注意国内镜像源设置和权限问题。

2026-03-04 14:07:44 1168

原创 MQTT开发总结(二)

本文解析了MQTT协议的底层传输原理与实现机制。MQTT作为一种轻量级的发布/订阅消息协议,其核心特性包括:1)基于主题的发布/订阅模式实现消息路由;2)客户端-服务器架构通过TCP/IP建立连接;3)三种QoS级别保障消息可靠性;4)支持一对多消息分发。文章详细剖析了连接建立、状态管理、消息发布/订阅流程,重点阐述了MQTT实现应用程序解耦的三大机制:时间解耦、空间解耦和同步解耦。通过代码示例展示了MQTT在实际应用中的连接管理、消息处理、错误恢复等关键实现细节,为物联网设备通信提供了高效可靠的解决方案。

2026-02-08 14:56:43 759

原创 体验使用Cursor自动化编程

Cursor自己根据需求写出来的代码还是可以使用的,经过我的验证和编译运行,一切正常。后面开发一些简单的需求业务开发可以使用Cursor辅助,甚至一些难一些的开发也可以丢给Cursor帮我整理思路和分析解决方案,正确合理的结合AI工具能极大的提高工作效率,同时也能补齐和纠正自己的认证短板。

2026-02-03 20:29:33 1065

原创 基于 Linux 实时线程与 UDP 快速通道的防逆流逻辑实现

本文介绍了防逆流策略,采用分层架构设计:感知层通过RS485电表采样,决策层由EMS算法实现,执行层由PCS逆变器完成功率调整。系统采用TCP/UDP双通道通信,TCP保障控制面可靠性,UDP实现毫秒级快速响应。关键技术包括:1) 实时功率监测与双表比对逻辑,当电网侧和储能侧功率同时为负时触发调节;2) 基于SystemV信号量的进程间通信机制,实现事件驱动的快速响应;3) Linux实时线程优化,确保高优先级处理;4) 故障安全闭锁设计,通信中断时自动进入保护状态。系统亮点在于通过分层解耦和快速通道设计

2026-01-31 23:45:00 1098

原创 Linux进程以及线程

本文摘要: 文章系统介绍了Linux进程与线程的核心概念及操作。主要内容包括:1) 进程管理(创建、终止、状态转换),重点说明僵尸/孤儿进程的处理;2) 进程间通信机制(管道、信号、共享内存等),比较有名/无名管道的异同;3) 多线程编程,详述线程创建、同步(互斥锁、条件变量)及信号量使用;4) 守护进程的实现步骤。文中特别强调了关键系统调用如fork/exec、进程清理机制,以及线程同步中互斥锁与条件变量的配合使用。最后对比了进程与线程所用信号量的区别,为Linux系统编程提供了实用参考。

2026-01-28 14:35:42 658

原创 储能和AI,会碰撞出什么

AI赋能储能系统的创新与挑战 摘要:随着新能源占比提升,AI技术正推动储能系统从被动执行向主动预测转型。AI在储能领域可应用于材料研发、设备管理、系统优化及业务决策四个层面,显著提升安全性、经济性和运营效率。具体应用包括精准预测、智能调度、故障预警等场景。然而,AI+储能落地面临数据整合、模型解释性、系统集成等技术挑战。未来储能将向多元化技术组合发展,并与虚拟电厂等新型业态融合。工程师需具备跨学科能力,掌握数据分析与AI基础,以适应行业变革趋势。

2026-01-26 10:16:08 645

原创 C语言中的sqlite语句

sqlite3_bind_text` 提供了一种灵活且安全的方法,将文本数据绑定到 SQLite SQL 语句中。这使得开发者能够将字符串数据持久化到 SQLite 数据库中。通过正确地使用此函数,可以有效地将文本信息存储在数据库的 TEXT 列中。`sqlite3_bind_blob` 提供了一种灵活且安全的方法,将二进制数据绑定到 SQLite SQL 语句中。这使得开发者能够存储多样化的数据类型,如文件、图像和其他非文本信息。

2026-01-23 16:39:08 518

原创 储能EMS(三)

前面讨论两种工商业的拓扑需求模型,一个是基于单柜的,最基础的削峰填谷的盈利模式,一个是基于园区的多变压器的应用场景,接下来继续讲解几种基于工业园区的多种拓扑图。

2026-01-22 23:45:00 1194

原创 C语言:JSON格式操作

根据你的需求选择合适的筛选方法,这样可以灵活地处理 JSON 数据。在实际应用中,确保遵循内存管理的最佳实践,以避免潜在的内存泄漏问题。

2026-01-22 15:12:05 517

原创 储能EMS(二)

站级 EMS 系统 (Station EMS System) :站级 EMS 系统是通过多台储能设备( BESS )与站级能量管理系统连接而组成的网络拓扑,构成完整的储能电站系统模型。它作为储能电站的“大脑”,负责协调、管理和优化整个站内所有 储能单元的运行。多种网络拓扑结构,高度适配不同场景:可形成多种网络拓扑结构,应用与不同的工商业场景,具备及时响应以及灵活的资源调度。高效的资源调动与聚合能力:站级 EMS 可将多台储能设备视为统一的可调控资源,实现电站级功率与容量的动态调度。

2026-01-19 21:00:00 1147

原创 储能EMS(一)

最近接触的储能EMS业务开发比较多,多数场景为工商业的储能。首先是核心功能方面。

2026-01-17 11:22:08 815

原创 MQTT开发总结(一)

由于这几个数据除了URL是需要链接客户端,剩下的name,password,clientID 都是组合的,这里我们只需要输入clientID,deviceName,productKey,deviceSecret这几个由客户提供,提供之后由代码组合构造成name,Password这几个关键数据信息。结合前面的Init_MqttMsgInfo函数,会调用到后面的句柄函数,其中的句柄函数用于当独处理不同报文类型的数据信息发送给平台。主要的功能逻辑部分分为:将本地的EMS数据信息发送给客户端的EMS。

2026-01-09 17:55:24 983

原创 将设备上所有的版本号显示在WEB界面

关键字符串:byBMSAirSoftVersion。由CAN解析函数解析由BMS发送过来的版本信息,再有数据跟新线程函数解析结构体容量池中的数据实时的跟新WEB网页端的数据信息。(1)找出显示版本信息界面的WEB端代码:api_home.c文件,Handle_Home_GeneralData()函数。(1)把所有的版本信息如,空调版本号,IMMU2版本号,CCU版本号,BMS版本号显示出在同一个界面。(2)在WEB界面把显示的信息列为两列,一列是版本的名称,一列是对应的版本的版本号。

2025-11-26 10:34:40 19

原创 对数据库的插入操作处理

c2文件,插入数据库的函数 Insert_Json_To_Data_DB(cJSON* json_str, DATA_TYPE DataType).c2文件,从数据库中select数据并发送出去。

2024-09-13 14:52:57 298

原创 snprintf讲解

3. **`const char *format`**: 一个格式化字符串,其中可以包含文本和格式说明符(如 `%s`, `%d`, `%f` 等),这些格式说明符将在后续参数中替换。2. **`size_t size`**: 指定要写入的最大字符数,包括字符串结束符 `\0`。- **`szHeader` 和 `szContent`**: 这两个是待格式化的字符串,将依次替换 `%s` 中的格式说明符。- **`512`**: 这是允许写入 `szBuf` 的最大字符数(包括结尾的 `\0` 字符)。

2024-08-29 22:00:00 1093

原创 C函数里的GET函数讲解

`&esRunData`:这是 `esRunData` 结构体的地址,`esRunData` 是一个 `A_BLOB_ES_RUN_DATA` 类型的结构体,用于存储运行数据。- `sizeof(PARAM_VAL_GET)`:这是 `PARAM_VAL_GET` 结构体的大小,用于指定传递给 `Get` 函数的数据大小。- `val.blobValue`:这是 `PARAM_VAL_GET` 结构体中的一个成员,类型为 `BYTE*`,表示一个指向字节数据的指针。

2024-08-29 16:07:04 506

原创 C语言关于数组指针部分

(a+1): a,&a 的值是一样的,但意思不一样, a 是数组首元素的首地址,也就是 a[0]的首地址, &a 是数组的首地址, a+1 是数组下一元素的首地址,即 a[1]的首地址,&a+1 是下一个数组的首地址。&a + 1: 取数组 a 的首地址,该地址的值加上 sizeof(a) 的值,即 &a + 5*sizeof(int),也就是下一个数组的首地址,显然当前指针已经越过了数组的界限。(int *)(&a+1): 则是把上一步计算出来的地址,强制转换为 int * 类型,赋值给 ptr。

2024-08-24 18:00:00 214 1

原创 平台设备总线模型-整理

平台设备总线 概念: 一般对于 I2C、SPI、USB 这些常见类型的物理总线来说,Linux 内核会自动创建与之相应的驱动总线,因此 I2C 设备、SPI 设备、USB 设备自然是注册挂载在相应的总线上。但是,实际项目开发中还有很多结构简单的设备,对它们进行控制并不需要特殊的时序。它们也就没有相应的物理总线,比如 led、rtc 时钟、蜂鸣器、按键等等,Linux 内核将不会为它们创建相应的驱动总线。为了使这部分设备的驱动开发也能够遵循设备驱动模型,Linux 内核引入了一种虚拟的总线——平台总线(

2023-10-05 20:41:45 223

原创 hi3516开发板挂载文件系统命令

启动挂载 挂载Ubuntu系统命令:mount -t nfs -o nolock,vers=3 192.168.100.77:/home/alientek/nfs_rootfs /mnt。挂载到开发板的/mut目录下。 开机自动挂载 开机自动挂载: 挂载SD卡:mkdir /sd。mount -t vfat /dev/mmcblk0p3 /sd:挂载分区3 SD卡介绍 开机自动挂载SD卡: 开发板的ub

2023-10-03 17:36:13 649

原创 hi3516dv300驱动OLED

路径:/home/alientek/hi3516/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/kernel/linux-4.9.y/arch/arm/boot/dts下的hi3516dv300-demb.dtb文件。在i2c1中追加oled节点。修改为以下函数,0x40是写数据,0x00为写命令,在头文件里定义了两个。当mod为OLED_CMD则为写命令,为OLED_DATA时是写数据。- 地址:0x3c(手册中0x78,实际0x3c)- 体积:27*27*2。

2023-08-10 14:28:52 771 1

原创 linux进程和线程知识点

了解Linux下多线程fork和多进程pthread以及同步机制(信号,信号量,互斥锁),了解RTSP和RTMP协议,H264/H265视频编解码协议。 多线程和多进程,同步机制, 进程和线程 什么是进程 进程是资源分配的基本单位,它是程序执行时的一个实例,在程序运行时创建 Linux中创建线程的方式 函数: pthread_create函数详解(向线程函数传递参数)pthread_create函数详解(向线程函数传递参数)_焱齿的博客-CSDN博客^v91^ins

2023-08-06 22:09:47 175 1

原创 live555移植到hi3516开发板推流

live555下载 1:下载live555源码 出现错误include/TLSState.hh:34:25 fatal error: openssl/ssl.h: No such file or directory 解决:加入-DNO_OPENSSL=1(方法不可行) 下载OpenSSL源码:海思平台交叉编译openssl - 简书 wget http://distfiles.macports.org/openssl/openssl-1.0.2q.tar.gz t

2023-07-21 16:06:52 1298 3

原创 ffmpeg移植到hi3516

1:编译和安装,x264编译。下载x264 VideoLAN / x264 · GitLab。下载ffmpeg git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg 配置:命令:CC=arm-himix200-linux-gcc ./configure --prefix=/home/alientek/tool/FFmpeg/x264-master --enable-static --enable-shared --host=arm-linux-gnueab

2023-07-21 01:45:00 405 1

原创 yolov5训练自己的数据集(Windows环境30显卡)

1:搭建好环境 Yolov5的配置+训练(超级详细!!!)_yolov5训练_小学生玩编程的博客-CSDN博客 anaconda pytorch ........ 激活环境 conda activate pytorch 2:下载labelimg 这里主要讲的是在window系统中的安装,首先打开cmd命令行(快捷键:win+R)。进入cmd命令行控制台。输入如下的命令: pip install labelimg -i Simple Index 创建目录:

2023-07-20 16:04:08 613

原创 yolov3的模型转换为caff以及如意工具量化

1:Caffe环境搭建 博客:01 环境搭建相关/如何在Ubuntu20.02 上面搭建caffe环境.md · wgm/wuguiming - Gitee.com 下载文件修改源:修改pip 2:Darknet2caffe模型转换 1:在Ubuntu系统下,分步执行下面的命令,安装编译darknet2caffe时需要的torch环境 pip3 install torchvision==0.5.0 -i Simple Index some-package pip3 install tor

2023-07-20 15:55:01 624 1

原创 Yolov3在windows下的训练

一:搭建环境一:Opencv安装下载3.4.0版本:https://zh.osdn.net/projects/sfnet_opencvlibrary/releases/ 接着配置opencv环境变量: 我的电脑--->属性--->高级系统设置--->高级--->环境变量--->系统变量--->path--->编辑 将OpenCV安装目录的bin目录添加进去 二、显卡驱动、CUDA(版本 >= 7.5)、CUDNN

2023-07-20 15:49:32 633

原创 Linux驱动之I2C驱动

device_driver 驱动结构体,如果使用设备树的话,需要设置 device_driver 的of_match_table 成员变量,也就是驱动的兼容(compatible)属性。i2c_algorithm 函数最终会调用 I2C 适配器中里面的 master_xfer 函数,对于。i2c_add_numbered_adapter或 i2c_add_adapter。i2c_driver 类似 platform_driver。当设备和驱动匹配以后 i2c_driver。2:i2c_driver结构体。

2023-07-20 15:40:41 181

原创 平台设备驱动模型

7 };plantform_bus_type是platform平台总线,platform_match是匹配函数,其匹配方式主要有四种2 {58 return!910 /* Attempt an OF style match first *///第一种方式:设备树的方式比较1314 /* Then try ACPI style match */第二种方式:ACPI 的方式,使用的比较少17。

2023-07-20 11:31:58 351

原创 Linux字符设备驱动模型

内核将调用驱动程序release()函数:void release(struct inode inode,struct file *file),release函数的主要任务是清理未结束的输入输出操作,释放资源,用户自定义排他标志的复位等。在文件结构被释放时引用这个操作. 如同 open, release 可以为 NULL.

2023-07-18 17:27:51 189 1

原创 yolov3在hi3516上实现区域检测《一》(在hi3516DV300上使用VGS接口函数实现画线和矩形)

1:首先找到原NNIE画框函数的C文件:sam_comm_nnie.c文件,HI_S32 SAMPLE_COMM_SVP_NNIE_FillRect(VIDEO_FRAME_INFO_S *pstFrmInfo, SAMPLE_SVP_NNIE_RECT_ARRAY_S* pstRect, HI_U32 u32Color)该函数就是我们检测到目标后执行的画框函数。该函数通过使用VGS提供的API来创建VGS任务,并根据输入的矩形框位置信息和颜色,通过添加覆盖物任务,实现在图像帧上绘制矩形框的功能。

2023-07-17 10:35:20 911 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除