体验使用Cursor自动化编程

一:Cursor介绍

AI编程如今已经不是什么新鲜事情了,如今的AI编程已经能基本取代一些基本的开发工作,最近尝试了一下使用Curso来完成相关的储能需求开发,我发现Cursor目前已经能完成绝大数任务了,这是一个简单化的指令编译工具,我只需要提出和说明我的相关需求,Cursor便能帮我完成,基本上不需要修改,它能完整的分析解读整个系统工程文件,而不是如ChatGPT等喂入数据似的问答软件,并且基于VS code,它能被我们经常使用VS code的工程师熟悉上手。下面使用Cursor来完成一个相关的下发CAN数据的需求:

二:使用示例

1:选框右侧对话框输入我的需求:

功能开发需求:BSU通过0x161432xx命令上传至BMU,BMU通过0x1614ff32、0x1615ff32、0x1616ff32、0x1617ff32上送到MU2,一个bit代表一个电芯的Safe状态(0表示正常,1表示异常),此上传方法和均衡状态上传方法类似。后续可通过增加MU2和云平台的协议,直观的看出各个电芯的Safe状态。此外,如果通过云平台看到电芯进入Safe状态,那么就需要远程对相应的BSU进行AFE重置及BSU复位,协议如下:例如,通过云平台看到第3个PACK的某个电芯进入到Safe状态,那么就需要在MU2界面上远程下发对第三个PACK的AFE重置命令,发送报文示例:0x0556325a C1 1F 01 03 00 00 00 00 当下发这个命令后,BSU将会在CAN2上收到0x0556ff32 C3 0A 03 00 01 00 00 00 第三个BSU就会进入AFE重置状态。当下发完AFE重置后,MU2需要继续下发复位BSU的动作,协议为:此时,当AFE重置完后,对应的BSU需要复位, MU2发送报文示例:0x0556325a C1 20 01 03 00 00 00 00 当下发这个命令后,BSU将会在CAN2上收到0x0556ff32 C3 0B 03 00 01 00 00 00 第三个BSU就会进入复位状态。

需求解读:开发本地网页端的检控,采用输入数值的形式,分别下发AFE重置和BSU重置,根据电池pack数量不同,下发对应的数值对对应的Pack下发重置命令。

2:下发给Cursor的指令:

如上的讲解,我现在要开发AFE重置功能和BSU重置功能,请你分析System.sql文件,以及st_batt_sampler文件夹下的文件,具体需求是:这两个重置功能使用监控通过CAN下发,位置放在Web_MainIdx表下的"BMS"下的Web_SubIdx表的"电池组-1"下面,以可以输入编辑的样式,数值范围1~5,请你根据图上新加的协议和我需要的功能为我完成。

三:Cursor的回答和解读:

分析 System.sql 和 st_batt_sampler 下的文件,以实现 AFE 重置和 BSU 重置。先查看相关文件结构。

AFE 重置和 BSU 复位功能已实现,修改如下。

1. 枚举与定义

**`st_batt_sampler.h`**

  • 新增 `CTRL_STBATT_AFE_RESET`、`CTRL_STBATT_BSU_RESET`

**`can_infy_batt.h`**

  • 新增 `CAN_S_CMD_C2S_AFE_RESET`、`CAN_S_CMD_C2S_BSU_RESET`

2. CAN 协议实现(`can_infy_batt.c`)

  • **`YFY_PackC2S_AfeReset_CtrlCmd`**:AFE 重置

  • 报文:`C1 1F 01 [PACK] 00 00 00 00`

  • CAN ID:`0x0556xxyy`(xx = BMU 地址,yy = EMS 地址)

  • **`YFY_PackC2S_BsuReset_CtrlCmd`**:BSU 复位

  • 报文:`C1 20 01 [PACK] 00 00 00 00`

  • PACK 序号:1--5(对应 nBattIdx+1)

  • 在 `YFY_Send_C2S_Status` 中增加上述两个命令的分发

  • 在 `YFY_Batt_Control` 中增加对 `CTRL_STBATT_AFE_RESET`、`CTRL_STBATT_BSU_RESET` 的处理

3. 控制逻辑(`st_batt_sampler.c`)

  • 在 `Control` 中增加对参数 545、546 的处理

  • 通过 `nDevId` 计算 `nBattIdx`(501→PACK1,502→PACK2,...)

  • 调用 `Send_Ctrl_STBatt` 发送对应命令

4. 数据库配置(`System.sql`)

**Charger_DeviceModel_ControlParameters**

  • 545:AFE Reset,Web_Main=3,Web_Sub=42(BMS → 电池组-1)

  • 546:BSU Reset,Web_Main=3,Web_Sub=42

**Resources**

  • 8700:AFE Reset(中文:AFE重置)

  • 8701:BSU Reset(中文:BSU复位)

使用说明

  1. **界面位置**:BMS → 电池组-1,与"重启 BMS""故障清除"等同页。

  2. **操作顺序**:先执行 AFE 重置,等待完成后再执行 BSU 复位。

  3. **PACK 选择**:根据当前电池组(Device 501--504)自动选择对应 PACK。

  4. **适用协议**:INFY BMU-CAN(`BATT_MFG_INFY_SELF_500K` 等)。

CAN 报文格式与协议文档一致,CRC 字节按协议说明暂未使用,填 0x00。

修改需求诉求:

现在的需求是,frm.byData[3] = (BYTE)(nBattIdx + 1); /* PACK 1-5 */这个位置是由网页端输入相应的数值(范围1~5,表示第1~5个pcak),frm.byData[2] = 0x01; /* AFE Reset: 1=reset */表示重置,请你根据我的需求,将(545, 'AFE Reset', 8700, NULL, NULL, 501, 'ENUM', NULL, '0(8702),1(1058)', NULL, '[200,2,217]>0', NULL, 15, 3, 42);修改为:(526, 'Resistance Detection Point', 2826, NULL, NULL, 501, 'UINT', NULL, '0/65535', NULL, '', NULL, 15, 3, 42);这种可以输入编辑的样式,范围1~5,当我在AFE选框中输入3时,CAN数据下发:C1 1F 01 03 00 00 00 00,表示对第三个pcak进行AFE重置。当我在BSU重置选框中输入4时,CAN下发:C1 20 01 03 00 00 00 00,表示对第四个pack进行BSU重置。

Cursor解读:

将 AFE 重置和 BSU 复位改为可输入 1--5 的 UINT 控件,并用输入值作为 PACK 序号填充 `byData[3]`。

正在修改:将 AFE/BSU 改为可输入 1--5 的 UINT 控件,并用输入值作为 PACK 序号。

已按你的需求改完,修改如下。

1. System.sql(ControlParameters)

  • **545 AFE Reset**

  • `Value_Type`: `'ENUM'` → `'UINT'`

  • `Value_Range`: `'0(8702),1(1058)'` → `'1/5'`

  • `Controlable_Expression`: `NULL`

  • `Display_Expression`: `''`

效果:网页端显示为可编辑数字框,范围 1~5。

  • **546 BSU Reset**

同上,改为 UINT、范围 1/5、可编辑样式。

2. st_batt_sampler.c(Control 逻辑)

  • **545(AFE Reset)**

  • 从网页取值:`nPackNum = (int)pVarVal->ulValue`(1~5)

  • 校验:`1 <= nPackNum <= 5` 且 `nPackNum <= nSystemCfgBattNum`

  • 调用:`Send_Ctrl_STBatt(..., CTRL_STBATT_AFE_RESET, nPackNum - 1)`

即 PACK 序号 1~5 由网页输入决定,内部用 `nBattIdx = nPackNum - 1` 发 CAN。

  • **546(BSU Reset)**

逻辑相同,仅命令改为 `CTRL_STBATT_BSU_RESET`。

`can_infy_batt.c` 里已满足协议,无需改:

  • `byData[2] = 0x01` 表示执行重置

  • `byData[3] = (BYTE)(nBattIdx + 1)`,即 PACK 1~5 对应 0x01~0x05

行为说明

| 网页输入 | 内部 nBattIdx | CAN 数据 (byData) |

|----------|----------------|-------------------|

| AFE 输入 3 | 2 | C1 1F **01** **03** 00 00 00 00(对第 3 个 PACK 做 AFE 重置) |

| BSU 输入 4 | 3 | C1 20 **01** **04** 00 00 00 00(对第 4 个 PACK 做 BSU 重置) |

说明:你之前写的 BSU 示例 "输入4时 CAN 下发 C1 20 01 **03**" 应为 **04**(第 4 个 PACK);当前实现会按输入 4 正确发出 `04`。

总结

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

相关推荐
软件派2 小时前
Elasticsearch终极教程:从基础到进阶的技术指南
运维·jenkins
杨浦老苏2 小时前
轻量化服务器和硬盘监控系统Vigil
运维·docker·群晖
酉鬼女又兒2 小时前
Linux快速入门指南:常用快捷键➕命令行高效操作
linux·运维·服务器
没有bug.的程序员2 小时前
Docker 与 K8s 生产级实战:从镜像极致优化到集群自动化部署全流程
spring cloud·docker·kubernetes·自动化·k8s·镜像·集群自动化
小韩加油呀2 小时前
jenkins声明式pipline和shell从环境变量配置到打包构建再到发布到k8s
运维·kubernetes·jenkins
林shir2 小时前
3-19-项目部署(Linux)
linux·运维·服务器
顶点多余2 小时前
Linux第一个系统程序-进度条
linux·运维·服务器
会写代码的饭桶2 小时前
【DevOps实战】使用 GitHub Actions 自动构建镜像并双推至 Docker Hub 和 GHCR
docker·自动化·github·devops
代码AI弗森2 小时前
NAS 服务器 vs 普通服务器:一场关于「存储中心」与「计算中心」的系统分工之争
运维·服务器