当前位置: 首页 > news >正文

利用Cursor编写工业WebScad-005创建历史查询界面

本次实现目的

实现设备故障、设备运行,通讯故障,控制操作、日月年报表的查询

1.初始提示词

下面这段可以直接复制给 **Claude Code**:```text
你现在是我的 C# / .NET 8 / Blazor Server 工业 WebSCADA 高级架构工程师。当前项目是现有 IndustrialWebScada 系统。注意:
1. 不允许新建项目
2. 不允许推翻现有架构
3. 不允许修改现有 PLC / MQTT / SignalR 实时通讯逻辑
4. 不允许破坏现有实时数据页面
5. 只允许新增历史查询、事件记录、报表查询功能
6. 必须基于现有项目代码修改
7. Razor 页面不要写大量业务逻辑
8. 业务逻辑放到 Service / ViewModel
9. 每次最多修改 5 个文件
10. 修改前先分析项目结构
11. 修改后说明测试方法==================================================
一、本次目标
==================================================我要新增一个“历史查询与报表中心”。页面建议路由:/history
/history/faults
/history/communication
/history/pump-runs
/history/operations
/reports/daily
/reports/monthly
/reports/yearly也可以根据现有菜单结构调整。最终实现以下功能:1. 查询所有设备故障记录
2. 查询所有设备通讯故障记录
3. 查询泵运行 / 停止记录
4. 查询所有用户操作记录
5. 生成日报表、月报表、年报表==================================================
二、设备故障历史查询
==================================================需要查询所有泵设备故障。故障来源点位:PUMP1_FAULT
PUMP1_VFD_FAULT
PUMP2_FAULT
PUMP2_VFD_FAULT
PUMP3_FAULT
PUMP3_VFD_FAULT
PUMP4_FAULT
PUMP4_VFD_FAULT故障记录分两类显示:A. 故障发生记录需要显示:1. 故障发生时间
2. 泵站名称
3. 泵站编号
4. 几号泵
5. 故障类型- 泵故障- 变频故障
6. 故障点位名称
7. 故障值
8. 当前状态示例:2026-05-14 10:20:15
1#泵站
1#泵
变频故障
PUMP1_VFD_FAULT
发生B. 故障恢复记录需要显示:1. 故障恢复时间
2. 泵站名称
3. 泵站编号
4. 几号泵
5. 故障类型
6. 故障点位名称
7. 恢复值
8. 当前状态示例:2026-05-14 10:35:20
1#泵站
1#泵
变频故障
PUMP1_VFD_FAULT
恢复要求:1. 需要根据点位值变化判断事件
2. false -> true 记录故障发生
3. true -> false 记录故障恢复
4. 不要重复插入相同状态记录
5. 页面支持按时间范围查询
6. 页面支持按泵站筛选
7. 页面支持按泵号筛选
8. 页面支持按故障类型筛选==================================================
三、通讯故障历史查询
==================================================需要查询所有设备通讯故障。通讯状态来源:优先使用现有设备在线状态、采集状态、PLC连接状态或实时缓存中的 IsOnline / CommunicationStatus 字段。如果现有字段名称不同,请先列出当前项目中的字段,不要擅自改名。通讯故障记录需要显示:1. 通讯正常时间
2. 通讯故障发生时间
3. 通讯故障恢复时间
4. 泵站名称
5. 泵站编号
6. 通讯状态
7. 故障持续时间
8. 最后一次正常数据时间
9. 恢复后第一次正常数据时间状态变化规则:1. true -> false:记录通讯故障发生
2. false -> true:记录通讯故障恢复
3. 不允许重复插入相同状态
4. 通讯故障需要计算持续时间页面字段:| 时间 | 泵站 | 通讯状态 | 故障发生时间 | 恢复时间 | 持续时间 |==================================================
四、泵运行 / 停止历史查询
==================================================需要查询每台泵什么时候运行,什么时候停止。运行状态点位:PUMP1_VFD_RUNNING
PUMP2_VFD_RUNNING
PUMP3_VFD_RUNNING
PUMP4_VFD_RUNNING记录规则:1. false -> true:记录泵启动 / 运行开始
2. true -> false:记录泵停止 / 运行结束
3. 需要记录运行持续时间
4. 不允许重复记录相同状态运行记录字段:1. 泵站名称
2. 泵站编号
3. 泵号
4. 运行开始时间
5. 停止时间
6. 运行时长
7. 状态
8. 关联点位名称示例:1#泵站
1#泵
开始运行:2026-05-14 08:00:00
停止时间:2026-05-14 09:30:00
运行时长:1小时30分钟页面支持:1. 按时间范围查询
2. 按泵站查询
3. 按泵号查询
4. 按运行状态查询
5. 导出 Excel,预留即可==================================================
五、用户操作历史查询
==================================================需要查询所有用户操作。操作来源:所有控制按钮、参数修改、启动、停止、清零、模式切换、液位设定、频率给定等操作。每次操作必须记录日志。操作记录字段:1. 操作时间
2. 用户名
3. 用户ID
4. 泵站名称
5. 泵站编号
6. 操作对象
7. 操作类型
8. 操作点位
9. 操作前值
10. 操作后值
11. 操作结果
12. 失败原因
13. 客户端IP,可选操作类型包括:1. 启动泵
2. 停止泵
3. 累计运行时间清零
4. 控制模式切换
5. 频率给定修改
6. 启泵液位修改
7. 停泵液位修改
8. 延时启动时间修改
9. 其他参数修改要求:1. 所有操作必须统一走 IPumpStationCommandService
2. 不允许页面直接写 PLC
3. 写入前弹出二次确认
4. 写入成功记录成功日志
5. 写入失败记录失败日志
6. 页面支持按时间、用户、泵站、操作类型查询==================================================
六、日报表
==================================================新增日报表生成页面。用户可以选择:1. 泵站
2. 日期
3. 统计间隔统计间隔示例:1小时
2小时
4小时
6小时日报表要求:用户选择某一天和间隔后,生成该天的数据。例如用户选择:日期:2026-05-14
间隔:1小时则生成:00:00
01:00
02:00
03:00
...
23:00每隔 1 小时一条记录。日报表每条记录包括:1. 时间
2. 水位 WATER_LEVE
3. 1#泵状态
4. 2#泵状态
5. 3#泵状态
6. 4#泵状态泵状态显示规则:如果 PUMPx_FAULT = true 或 PUMPx_VFD_FAULT = true
显示:故障否则如果 PUMPx_VFD_RUNNING = true
显示:运行否则
显示:停止日报表还需要统计:1. 当天最高水位
2. 最高水位发生时间
3. 当天最低水位
4. 最低水位发生时间
5. 当天平均水位
6. 当天每台泵运行总时长
7. 当天每台泵故障次数,可选==================================================
七、月报表
==================================================新增月报表生成页面。用户选择:1. 泵站
2. 年月例如:2026年05月月报表按天统计。每条记录为一天:1. 日期
2. 当天平均液位
3. 当天最高液位
4. 最高液位发生时间
5. 当天最低液位
6. 最低液位发生时间
7. 1#泵当天运行时长
8. 2#泵当天运行时长
9. 3#泵当天运行时长
10. 4#泵当天运行时长
11. 当天故障次数月报表汇总:1. 本月平均液位
2. 本月最高液位
3. 本月最高液位发生日期和时间
4. 本月最低液位
5. 本月最低液位发生日期和时间
6. 本月总运行时长
7. 本月故障总次数==================================================
八、年报表
==================================================新增年报表生成页面。用户选择:1. 泵站
2. 年份例如:2026年年报表按月统计。每条记录为一个月:1. 月份
2. 当月平均液位
3. 当月最高液位
4. 最高液位发生日期和时间
5. 当月最低液位
6. 最低液位发生日期和时间
7. 1#泵当月运行总时长
8. 2#泵当月运行总时长
9. 3#泵当月运行总时长
10. 4#泵当月运行总时长
11. 当月故障次数年报表汇总:1. 本年平均液位
2. 本年最高液位
3. 本年最高液位发生日期和时间
4. 本年最低液位
5. 本年最低液位发生日期和时间
6. 本年总运行时长
7. 本年故障总次数==================================================
九、数据表设计建议
==================================================如果当前项目已有历史数据表,请优先复用。如果没有,请新增以下表或实体。1. FaultEventLog字段建议:Id
StationId
StationName
PumpNo
FaultType
PointName
EventType
Value
EventTime
RecoverTime
DurationSeconds
RemarkEventType:FaultStart
FaultRecover2. CommunicationEventLog字段建议:Id
StationId
StationName
EventType
NormalTime
FaultStartTime
FaultRecoverTime
DurationSeconds
LastNormalDataTime
FirstRecoverDataTime
Remark3. PumpRunEventLog字段建议:Id
StationId
StationName
PumpNo
PointName
EventType
StartTime
StopTime
DurationSeconds
RemarkEventType:RunStart
RunStop4. OperationLog字段建议:Id
OperateTime
UserId
UserName
StationId
StationName
TargetName
OperationType
PointName
OldValue
NewValue
Result
ErrorMessage
ClientIp5. RealtimeSnapshotHistory用于报表统计。字段建议:Id
StationId
StationName
CollectTime
WaterLevel
Pump1Status
Pump2Status
Pump3Status
Pump4Status
Pump1Running
Pump2Running
Pump3Running
Pump4Running
Pump1Fault
Pump2Fault
Pump3Fault
Pump4Fault==================================================
十、历史快照记录要求
==================================================为了支持日报、月报、年报,需要保存实时快照。要求:1. 定时保存实时数据快照
2. 默认每 1 分钟保存一次
3. 保存内容包括:- WATER_LEVE- PUMP1_VFD_RUNNING- PUMP2_VFD_RUNNING- PUMP3_VFD_RUNNING- PUMP4_VFD_RUNNING- PUMP1_FAULT- PUMP1_VFD_FAULT- PUMP2_FAULT- PUMP2_VFD_FAULT- PUMP3_FAULT- PUMP3_VFD_FAULT- PUMP4_FAULT- PUMP4_VFD_FAULT
4. 快照保存服务使用 BackgroundService
5. 不影响实时采集性能
6. 保存失败要记录日志,不能影响主程序运行==================================================
十一、事件检测服务
==================================================新增事件检测服务。服务名称建议:PumpEventDetectService功能:1. 从实时缓存读取当前值
2. 保存上一轮状态
3. 比较当前状态和上一轮状态
4. 检测:- 泵故障发生- 泵故障恢复- 通讯故障发生- 通讯故障恢复- 泵运行开始- 泵运行停止
5. 状态变化时写入事件日志
6. 无变化不写入
7. 服务使用 BackgroundService
8. 检测周期建议 1 秒或 2 秒注意:必须避免重复插入事件。==================================================
十二、页面设计
==================================================新增历史查询中心页面。页面风格:1. 深色工业风
2. 卡片式查询条件
3. 表格显示结果
4. 支持时间范围筛选
5. 支持泵站筛选
6. 支持泵号筛选
7. 支持操作类型筛选
8. 支持查询按钮
9. 支持重置按钮
10. 预留导出 Excel 按钮页面包括:1. 故障历史
2. 通讯历史
3. 泵运行历史
4. 操作日志
5. 日报表
6. 月报表
7. 年报表==================================================
十三、代码结构要求
==================================================建议新增目录:Models/History
Services/History
ViewModels/History
Components/Pages/History
Components/Pages/Reports建议新增类:FaultEventLog.cs
CommunicationEventLog.cs
PumpRunEventLog.cs
OperationLog.cs
RealtimeSnapshotHistory.csFaultHistoryService.cs
CommunicationHistoryService.cs
PumpRunHistoryService.cs
OperationLogService.cs
ReportService.cs
PumpEventDetectService.cs
RealtimeSnapshotService.csDailyReportViewModel.cs
MonthlyReportViewModel.cs
YearlyReportViewModel.csHistoryCenter.razor
FaultHistory.razor
CommunicationHistory.razor
PumpRunHistory.razor
OperationHistory.razor
DailyReport.razor
MonthlyReport.razor
YearlyReport.razor==================================================
十四、报表计算规则
==================================================日报:按用户选择的间隔,从 RealtimeSnapshotHistory 中取最接近该时间点的数据。月报:按天分组统计:
Average(WaterLevel)
Max(WaterLevel)
Min(WaterLevel)年报:按月分组统计:
Average(WaterLevel)
Max(WaterLevel)
Min(WaterLevel)泵运行时长:优先从 PumpRunEventLog 计算。
如果事件日志不完整,可以从快照中的 Running 状态估算。故障次数:从 FaultEventLog 中统计 FaultStart 数量。==================================================
十五、执行步骤
==================================================请严格按阶段执行。第一阶段:1. 分析当前项目结构
2. 找到数据库上下文
3. 找到实时缓存服务
4. 找到设备在线状态字段
5. 找到现有用户认证信息来源
6. 输出需要新增和修改的文件清单
7. 暂时不要写代码第二阶段:1. 新增历史事件实体
2. 新增报表快照实体
3. 修改 DbContext
4. 生成迁移或说明建表 SQL
5. 保证项目可编译第三阶段:1. 新增 PumpEventDetectService
2. 实现故障事件检测
3. 实现通讯故障检测
4. 实现泵运行停止检测
5. 避免重复插入事件第四阶段:1. 新增 RealtimeSnapshotService
2. 每分钟保存一次实时快照
3. 用于日报、月报、年报统计第五阶段:1. 新增历史查询 Service
2. 新增报表 Service
3. 支持按时间、泵站、泵号查询
4. 支持日报、月报、年报生成第六阶段:1. 新增历史查询页面
2. 新增报表页面
3. 加入菜单入口
4. 页面使用深色工业风
5. 表格清晰展示数据第七阶段:1. 接入操作日志
2. 所有控制命令写入 OperationLog
3. 写入成功和失败都必须记录==================================================
十六、特别注意
==================================================如果当前项目中字段名和我提供的不一致:请先列出来,不要擅自修改。如果当前项目中没有数据库:请给出 SQLite / SQL Server 两种建表方案。如果当前项目中已有历史表:请优先复用,不要重复造表。如果当前项目没有用户系统:OperationLog 中 UserName 暂时使用当前登录名或 “System”。如果当前项目没有导出功能:导出 Excel 先预留按钮,不必第一阶段实现。==================================================
十七、最终交付
==================================================最终我要得到:1. 故障历史查询
2. 通讯故障历史查询
3. 泵运行停止历史查询
4. 用户操作历史查询
5. 日报表
6. 月报表
7. 年报表
8. 实时快照保存
9. 事件变化检测
10. 不影响现有实时监控功能请先分析项目结构,输出修改计划,不要立刻大规模写代码。
```

 

 

2.涉及修改的内容

一、新增文件

1. Modbus 写入通道(控制功能)
- Core/Drivers/IDeviceDriverRegistry.cs — 驱动注册表接口
- Application/DeviceDriverRegistry.cs — 驱动注册表实现(ConcurrentDictionary)
- Application/ModbusPumpStationCommandService.cs — 替代 Stub,实现真正的 PLC 写入
- Drivers/Modbus/ModbusTcpDriver.cs — 实现 WriteAsync(FC05/FC06/FC16)

2. 数据模型扩展(6个新 Model)
- OperationLog.cs — 操作日志
- CommunicationEventLog.cs — 通讯事件
- FaultEventLog.cs — 故障事件
- PumpRunEventLog.cs — 泵运行事件
- RealtimeSnapshotHistory.cs — 实时快照

3. 后台服务(2个新 Service)
- PumpEventDetectService.cs — 泵事件检测
- RealtimeSnapshotService.cs — 实时快照归档

4. 数据层(3个新 Service)
- DatabaseInitializer.cs — 数据库表自动创建
- HistoryQueryService.cs — 历史查询 + 操作日志写入
- ReportService.cs — 报表服务
- Application/HistoryDataService.cs + IHistoryDataService.cs

5. UI 组件(新增)
- PumpControlButtons.razor — 启动/停止/清零按钮 + 确认弹窗
- PumpDeviceCard.razor — 泵设备卡片(替代 PumpStatusIcon)
- PumpStationHeader.razor — 泵站顶部状态栏
- 历史页面: CommunicationHistory / FaultHistory / OperationHistory / PumpRunHistory
- 报表页面: DailyReport / MonthlyReport / YearlyReport

---
二、修改的核心文件

┌──────────────────────────┬────────────────────────────────────────────────────────────────┐
│ 文件 │ 修改内容 │
├──────────────────────────┼────────────────────────────────────────────────────────────────┤
│ IProtocolDriver.cs │ WriteAsync 签名改为接收 TagPoint(非 tagId 字符串) │
├──────────────────────────┼────────────────────────────────────────────────────────────────┤
│ DataCollectionService.cs │ 注入 IDeviceDriverRegistry,驱动创建后注册到 Registry │
├──────────────────────────┼────────────────────────────────────────────────────────────────┤
│ Program.cs │ 注册新服务(Registry、CommandService、后台服务),外部配置加载 │
├──────────────────────────┼────────────────────────────────────────────────────────────────┤
│ PumpStationList.razor │ 重写:增加搜索框、状态筛选按钮、轻量级卡片 │
├──────────────────────────┼────────────────────────────────────────────────────────────────┤
│ PumpStationDetail.razor │ 重写:使用新 PumpDeviceCard,增加参数编辑、液位设定 │
├──────────────────────────┼────────────────────────────────────────────────────────────────┤
│ scada.js │ 新增 positionDialogOnCard() 对话框定位函数 │
├──────────────────────────┼────────────────────────────────────────────────────────────────┤
│ app.css │ 新增泵卡片、确认弹窗、历史/报表页面样式 │
└──────────────────────────┴────────────────────────────────────────────────────────────────┘

---
三、删除的文件

GitHub 版本有但本地删除的:
- .razor.css 样式文件(7个)— 样式合并到 app.css

---
四、架构变化

GitHub 版本(写入链路断开):
UI → StubPumpStationCommandService(仅记日志)

本地版本(完整写入链路):
UI → ModbusPumpStationCommandService
→ IDeviceDriverRegistry → ModbusTcpDriver.WriteAsync
→ FC05 (线圈) / FC06 (寄存器) / FC16 (多寄存器) → PLC

 

 3.最终效果

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

http://www.jsqmd.com/news/835596/

相关文章:

  • MCP (Model Context Protocol) 完全指南
  • 口碑好的海报灯箱源头厂家 - 速递信息
  • 全场景赋能职场提效,WorkBuddy解锁企业数字化办公新范式 - 速递信息
  • 呼和浩特:报考中质协六西格玛黑带和绿带指定报考机构推荐 - 众智商学院课程中心
  • 内蒙古黄金回收哪家靠谱?呼市5家优质门店精选推荐 - 速递信息
  • 航空器配载与货运管理系统三次迭代作业学习总结博客
  • 厦门:报考中质协六西格玛黑带和绿带指定报考机构推荐 - 众智商学院课程中心
  • AI Agent 的生产力悖论
  • 2026淄博烧烤深度测评:牧羊村、三昧真火、小滋博,到底哪家值得吃? - 速递信息
  • Java 流程编排新范式 Solon Flow:一个引擎,七种节点,覆盖规则/任务/工作流/AI 编排全场景
  • vue2指令深入学习
  • 2026 江苏南京局部改造旧房装修翻新涂料刷新服务公司 TOP5 权威推荐 + 避坑指南 - 速递信息
  • 大一Java第六周学习总结:封装与继承
  • 博客搭建——CSS外观美化
  • 陷车清零效率提升58%:非标履带底盘案例解析 - 速递信息
  • 宁远装修避坑指南!选对装修公司少花冤枉钱,大秦装饰用实力说话 - 速递信息
  • 航空器配载与货运管理系统三次作业集总结
  • 2026年新疆旅行社行业横向测评白皮书:品质服务与用户体验深度解析 - 速递信息
  • 2026年至今湖北搏击行业现状调查:真实场馆挑选标准与避坑指南 - 速递信息
  • 500以内送礼高跟鞋排行:玫瑰米兰达领衔实用之选 - 奔跑123
  • 合肥黄金回收哪家靠谱?实测3家热门商家,第一名出乎意料 - 速递信息
  • 2026 南京旧房局部改造装修/涂料刷新服务商 TOP5 精选推荐(附避坑攻略) - 速递信息
  • 全城热议!2026 郑州整装口碑榜出炉!几何整装稳居业主首选 - 速递信息
  • 2026年东莞办公家具选购指南:性价比与品质兼得的优选推荐 - 速递信息
  • 零基础精通 GEO 优化:行业发展趋势、核心技术内核与企业全域落地全方位专业解读 - 速递信息
  • 2026年新疆旅行社行业深度攻略:从选型到落地全流程指南 - 速递信息
  • 中山靠谱的汽车贴膜知名店家 - 速递信息
  • 2026年新疆旅行社选型指南白皮书 - 速递信息
  • 2026农村光伏发电租赁屋顶安装推荐:河南区域品牌测评,本土标杆脱颖而出 - 速递信息
  • 恶劣工况下的耐用之选:2026重载领域质量稳定的电动推杆厂家实力榜单 - 速递信息