- 博客(60)
- 资源 (2)
- 收藏
- 关注
原创 从零搭建半导体设备上位机(九):拖拽与交互,Adorner、DragDrop 与晶圆拖放信息
拖拽与交互:Adorner、DragDrop 与晶圆拖放信息 这是「从零搭建半导体设备上位机」系列第9篇,也是界面骨架这批的最后一篇。晶圆从一个腔拖到另一个腔,看起来是个纯 UI 动作,实际牵着"能不能拖、能拖到哪、拖过去之后设备认不认"三层判断。 一次"拖过去没反应" 第一版拖拽上线那天,操作员把一片晶圆从 Loadlock 拖到腔体 A,松手,什么都没发生。 不是报错,不是卡住,是完全没反应—
2026-11-09 07:21:26
282
原创 从零搭建半导体设备上位机(八):自定义控件(二),阀门控件家族——气体阀、水阀、MFC 阀
自定义控件(二):阀门控件家族——气体阀、水阀、MFC 阀 这是「从零搭建半导体设备上位机」系列第8篇。上一篇讲状态灯,这一篇讲阀门。阀门控件是这套界面里被点得最多的东西,也是最容易出安全事故的地方。 从一条 git 记录说起 翻提交历史,有一条特别短: "添加透明按钮用于点击"——这句话本身就说明出了问题:原来的点击区域不能点了。 事实是:气体阀控件用的是三张素材图(关闭态、打开态、中间态),切
2026-11-08 08:22:00
334
原创 从零搭建半导体设备上位机(七):自定义控件(一),三色灯、到位指示与状态指示器
自定义控件(一):三色灯、到位指示与状态指示器 这是「从零搭建半导体设备上位机」系列第7篇。上一篇讲了 XAML 的组织,这一篇进到最细的粒度:一个"就画个圈"的状态灯控件,为什么写了 74 行 XAML 加 124 行代码。 一个"就画个圈"的控件,写了 124 行 第一次看到 BreatheLight.xaml.cs 的时候,我的反应是:这玩意儿有 124 行? XAML 那边 74 行,一共
2026-11-07 16:36:19
518
1
原创 从零搭建半导体设备上位机(六):十五万行 XAML 的组织法,7 个资源字典与全局样式基线
十五万行 XAML 的组织法:7 个资源字典与全局样式基线 这是「从零搭建半导体设备上位机」系列第6篇。上一篇讲了三个 UI 库怎么不打架。这一篇讲更实际的问题:一个 156,524 行 XAML 的工程,到底该怎么组织,才不会变成一坨谁也改不动的石头。 先别被行数吓到 上一篇说"十五万行 XAML",听起来像个灾难。但把它按目录拆开统计,结论完全不一样: 真正需要人维护的界面布局只有 27,11
2026-11-06 07:18:03
259
原创 从零搭建半导体设备上位机(五):三套 UI 库共存,HandyControl、MaterialDesign、Wu.Wpf 的样式基线
三套 UI 库共存:HandyControl、MaterialDesign、Wu.Wpf 的样式基线 这是「从零搭建半导体设备上位机」系列第5篇。一个 WPF 应用里同时装了 HandyControl、MaterialDesignThemes、Wu.Wpf 三套控件库。这篇讲它们为什么会打架、打架的具体机制是什么,以及怎么建立一套"谁也别想偷偷改我外观"的样式基线。 一个下拉框,白底白字 界面做完
2026-11-05 18:34:49
474
原创 从零搭建半导体设备上位机(四):单实例、启动流程与配置文件,App 里那 526 行到底在干什么
单实例、启动流程与配置文件:App 里那 526 行到底在干什么 这是「从零搭建半导体设备上位机」系列第4篇。上一篇讲了两套 MVVM 框架怎么分。这一篇拆开那个 526 行的 App.xaml.cs:启动时到底按什么顺序做事、两套配置文件各管什么、以及几个"看起来没事其实有坑"的写法。 打开这个文件之前 上一篇我说过,RegisterTypes 有两百行。那剩下的三百多行在干什么? 答案是:启动
2026-11-03 21:25:39
500
原创 从零搭建半导体设备上位机(三):CommunityToolkit.Mvvm 与 Prism 混用,哪些用源生成器,哪些手写
CommunityToolkit.Mvvm 与 Prism 混用:哪些用源生成器,哪些手写 这是「从零搭建半导体设备上位机」系列第3篇。上一篇说主 ViewModel 是单例、注册集中在一个方法里。这一篇处理一个更麻烦的问题:项目里同时存在 Prism 的 MVVM 体系和 CommunityToolkit.Mvvm,到底该怎么分。 同一个项目里,有三套基类 把整个解决方案扫一遍,按"属性通知怎么
2026-10-29 07:07:48
338
原创 从零搭建半导体设备上位机(二):Prism + DryIoc,五个工程与区域导航怎么串起来
Prism + DryIoc:五个工程与区域导航怎么串起来 这是「从零搭建半导体设备上位机」系列第2篇。上一篇定了三层架构,这一篇把骨架落地:五个工程怎么划边界、App 启动时到底按什么顺序跑、区域导航怎么组织,以及一个 526 行的 App.xaml.cs 里藏着的三个坑。 一个方法写了两百行 项目第一次交给我 review 的时候,我打开 App.xaml.cs,滚了十几屏,全是 Regist
2026-10-25 21:43:28
376
原创 从零搭建半导体设备上位机(一):半导体上位机为什么要自己写,从产线需求到架构全景
半导体上位机为什么要自己写:从产线需求到架构全景 这是「从零搭建半导体设备上位机」系列第1篇。从一台半导体设备的产线需求出发,搞清楚上位机为什么必须自己写,再把分层、选型和项目骨架摊开看一遍。这一篇不写业务代码,只解决"为什么这么搭"。 设备到厂那天,界面还没人写 设备进厂调试那阵子,最尴尬的不是机械手对不上位,也不是真空抽不下去,而是——所有东西都能动,就是没有一个界面能让人看见它在动。 PLC
2026-10-23 22:48:36
479
原创 从零搭建灌装监控系统(二十一):项目打包与部署,完结篇
项目打包与部署(完结篇) 这是「从零搭建灌装监控系统」系列第21篇,也是最后一篇。功能写完了,测试过了,但把整个目录拷到现场机器上双击,它不一定跑得起来。这篇把系统打成真正能交付的包:发布配置、自包含运行时、单文件的取舍,以及首次启动必须自动完成的初始化。 拷过去打不开 第一次交付的时候,我把开发机上 bin\Debug 整个目录拷到 U 盘,拿到现场,双击 exe。 弹了一个框:“需要安装 .N
2026-10-17 08:33:16
181
原创 从零搭建灌装监控系统(二十):用户认证与权限管理
用户认证与权限管理 这是「从零搭建灌装监控系统」系列第20篇。谁都能改工艺参数,这件事迟早会出事。这篇实现密码哈希、三级角色和登录窗口,并处理两个容易做错的点:固定盐为什么不安全,以及密码框为什么天生不能绑定。 操作员把工艺参数改了 现场调试的时候,我给了操作员一个账号,本意只是让他看数据。 第二天工艺工程师找过来,说配方里的加热温度被人从 180 改成 175,找不出是谁改的。查了半天,只能确定
2026-10-16 08:14:50
365
原创 从零搭建灌装监控系统(十九):单元测试实战,xUnit + 内存SQLite + 反射测试私有方法
单元测试实战:xUnit + 内存SQLite + 反射测试私有方法 这是「从零搭建灌装监控系统」系列第19篇。前面十八篇写完,每次改动都得手动点一遍界面才能确认没坏。这篇搭起测试工程:用临时 SQLite 文件做数据隔离,用 fixture 共享数据库生命周期,再用反射把私有方法拉出来测。 改一行导出逻辑,手动验了半小时 CSV 导出那里我改了一个条件——把时间范围从闭区间改成半开区间。 改完要
2026-10-13 08:27:45
510
原创 从零搭建灌装监控系统(十八):自定义控件,三色灯与状态指示
自定义控件:三色灯与状态指示 这是「从零搭建灌装监控系统」系列第18篇。界面上的红绿圆点、状态标签、液位指示,一开始都是复制粘贴出来的。这篇把它们做成可复用的自定义控件,用依赖属性和值转换器驱动,并讲清一个特别容易踩的 WPF 规则:本地值为什么会盖掉触发器。 改一次配色,翻了十四个文件 界面做到第八个页面的时候,我决定把状态灯的绿色调深一点——现在这个绿在车间的强光下有点发白。 结果我改了十四处
2026-10-12 17:34:37
599
原创 从零搭建灌装监控系统(十七):LiveCharts 实时温度曲线
LiveCharts 实时温度曲线 这是「从零搭建灌装监控系统」系列第17篇。数字只能告诉你此刻的温度,曲线才能告诉你温度在往哪走。这篇用 LiveCharts 画实时温度,重点不是“怎么画出来”,而是怎么在几百毫秒一次的刷新下不卡、不崩、不无限膨胀。 曲线跑到第二天就卡住了 首页加温度曲线的时候,我的实现非常朴素:每次收到数据就往 ChartValues 里 Add 一个点。 刚开始特别顺。跑了
2026-10-11 09:19:52
451
原创 从零搭建灌装监控系统(十六):Dashboard 设计,KPI卡片与液位可视化
Dashboard 设计:KPI卡片与液位可视化 这是「从零搭建灌装监控系统」系列第16篇。前面十五篇把通信、数据、报警、日志都做完了,但操作员每天盯着的是首页。这篇把后端数据翻译成一眼能看懂的东西:四张 KPI 卡片、一个液位柱、一个会呼吸的阀门指示灯。 数据都对,但没人看得懂 功能联调的时候,我在首页上放了一排 Label,把设备状态原样显示出来:产量 102、温度 25.6、运行时间 4.2
2026-10-08 13:02:22
571
原创 从零搭建灌装监控系统(十五):日志查看器,筛选与分页
日志查看器:筛选与分页 这是「从零搭建灌装监控系统」系列第15篇。上一篇把日志写进了 SQLite,但能保存不等于能使用。日志查看器要让操作员快速找到一段时间内的错误,也要让开发人员按级别和关键字缩小范围。这篇围绕 LogsViewModel 实现查询条件、50条分页、忙碌状态和导出入口。 日志很多,真正有用的只有几行 设备断线那天,日志窗口里有几千条轮询信息。操作员滚动了很久,还是没找到第一次断
2026-10-07 18:59:52
566
原创 从零搭建灌装监控系统(十四):Serilog四路日志输出
Serilog 四路日志输出 这是「从零搭建灌装监控系统」系列第14篇。报警系统需要日志,设备通信需要日志,配置保存也需要日志。真正让人头疼的不是写一条日志,而是同一条日志如何同时服务现场操作员、开发调试、历史查询和问题定位。这篇用 Serilog 设计文件、SQLite、控制台和 UI 四路输出。 出了问题,日志却只在窗口里 调试阶段,最方便的写法是把信息追加到 RichTextBox。程序运行
2026-10-06 20:14:35
514
原创 从零搭建灌装监控系统(十三):报警系统设计,生命周期与通知
报警系统设计:生命周期与通知 这是「从零搭建灌装监控系统」系列第13篇。报警系统不能只写一个 IsAlarm = true。一条报警需要知道什么时候触发、什么时候恢复、是否确认、由谁确认,以及如何通知页面和日志。这篇把报警生命周期拆开,再用服务、数据库和事件把它们串起来。 红灯亮了,但没人知道它为什么亮 早期版本的报警处理很简单:设备状态异常时把一个布尔属性设成 true,界面用红色触发器显示;状
2026-10-05 19:33:25
503
原创 从零搭建灌装监控系统(十二):配置系统,原子写入与容错
配置系统:原子写入与容错 这是「从零搭建灌装监控系统」系列第12篇。配置文件看起来只是几行 JSON,真正运行在现场以后,它却承担了设备地址、串口参数和操作偏好。这篇不讨论怎么反序列化对象,而是解决保存过程中最容易被忽略的三个问题:原子写入、并发保存和损坏恢复。 断电以后,设备参数变成半个 JSON 现场调试时,操作员改了串口号,点击保存,程序马上退出。第二次启动时,系统提示配置格式错误,设备也连
2026-10-04 06:50:54
469
原创 从零搭建灌装监控系统(十一):CSV流式导出,大数据量也不拖垮界面
CSV 流式导出 这是「从零搭建灌装监控系统」系列第11篇。生产记录已经落到 SQLite,但现场人员还需要按日期导出数据。这篇实现 CSV 导出,重点不只是“能写文件”,还要处理大数据量、中文编码、分隔符、文件占用和取消操作。 导出按钮把软件卡死了 有一次测试数据只有几百条,点击导出很快就结束了。于是有人把“查询全部记录,再一次性写 CSV”的代码提交了。上线后数据量涨到几万条,操作员点下按钮,
2026-10-02 16:43:40
562
原创 从零搭建灌装监控系统(十):生产追溯,条码触发自动记录
生产追溯:条码触发自动记录 这是「从零搭建灌装监控系统」系列第10篇。上一篇把 SQLite 和 FreeSql 接通了,但数据库不会自动知道一批产品什么时候开始、什么时候结束。这篇从 PLC 轮询到的条码变化入手,实现去重、记录快照和异常保护,让“看见一个新条码”真正变成一条生产记录。 条码读到了,为什么数据库里有三条 第一次把条码接到轮询循环时,代码很直观:每次收到设备状态,就读取条码;只要条
2026-10-01 08:33:21
548
原创 从零搭建灌装监控系统(九):SQLite与FreeSql ORM,让监控数据真正落盘
SQLite 与 FreeSql ORM 这是「从零搭建灌装监控系统」系列第9篇。监控数据不应该只停留在内存里,这篇把 SQLite、FreeSql 和应用启动流程接起来,让采集到的生产记录、报警记录可以查询、追溯,也让后面的导出和日志查看有真正的数据来源。 软件重启后,昨天的记录去哪了 现场第一次试跑的时候,操作员问了我一个很朴素的问题:“刚才那批数据能不能查?” 当时界面上的曲线和状态都还在,
2026-09-29 06:59:39
645
原创 从零搭建灌装监控系统(八):断线检测与自动重连
断线检测与自动重连 这是「从零搭建灌装监控系统」系列第8篇。上一篇实现了 200ms 轮询循环,但 PLC 断线后只是检测到断线,不会自动恢复。这篇实现自动重连机制——3次超时阈值判定断线、串口和TCP分别重连策略、重连间隔递增、重连成功后恢复轮询。让系统在 PLC 重启或网络抖动后自动恢复,不需要人工干预。 半夜被叫起来重启软件 我朋友的系统上线跑了两天,第三天凌晨他接到电话——操作员说界面数据
2026-09-28 09:29:17
392
原创 从零搭建灌装监控系统(七):轮询循环与线程安全
轮询循环与线程安全 这是「从零搭建灌装监控系统」系列第7篇。上一篇封装了 PlcService 的连接和读写,但数据怎么持续读上来?这篇实现 PollDataLoop 后台轮询循环——200ms 定时读 PLC、SemaphoreSlim 互斥、Task.WhenAny 超时保护、跨线程事件通知。解决工业上位机最经典的跨线程问题。 数据不动的界面 我朋友把 PlcService 的连接和读写写完之
2026-09-27 09:43:25
310
原创 从零搭建灌装监控系统(六):PlcService 实现,串口与TCP双模式
PlcService 实现:串口与TCP双模式 这是「从零搭建灌装监控系统」系列第6篇。上一篇搞懂了 Modbus RTU 协议,这篇把它变成代码。封装 PlcService,用 NModbus4 实现串口通信,同时支持 TCP 模式切换。涉及 SerialPort 配置、ModbusMaster 创建、ConnectionMode 双模式架构、异步读写封装。 通信代码写成一团乱麻 我朋友第一版
2026-09-25 17:59:45
498
原创 从零搭建灌装监控系统(五):Modbus RTU 协议入门,主从模型与四种寄存器
Modbus RTU 协议入门 这是「从零搭建灌装监控系统」系列第5篇。前面四篇搭好了 MVVM 骨架、DI 容器、导航和主题,但界面数据全是 0。从这篇开始接 PLC 通信。先搞懂 Modbus RTU 协议——主从模型、四种寄存器、报文格式、CRC 校验,不背规范,用灌装线的实际数据讲清楚。 第一次接 PLC 的懵圈 我朋友拿到 PLC 手册的时候,整个人是懵的。手册上写着"支持 Modbus
2026-09-23 20:11:51
723
原创 从零搭建灌装监控系统(四):深色主题与样式系统,ResourceDictionary 统一管理
深色主题与样式系统 这是「从零搭建灌装监控系统」系列第4篇。上一篇搞定了导航,但界面还是默认白底蓝按钮,丑得像上个世纪的 WinForms。这篇用 ResourceDictionary 建一套深色主题系统,统一管理颜色画刷和控件样式,让整个应用一键换上工业上位机该有的深色专业风。 白底界面的灾难 我朋友把导航搞通之后,兴冲冲地给我看效果。功能没问题,但界面……白底黑字,按钮是 Windows 默认
2026-09-21 06:45:27
399
原创 从零搭建灌装监控系统(三):主窗口与导航系统,ViewModel-first 导航
主窗口与导航系统 这是「从零搭建灌装监控系统」系列第3篇。上一篇引入了 DI 容器,ViewModel 的创建交给容器管了。但界面怎么从 Dashboard 切到日志页、再切到报警页?这篇用 ViewModel-first 导航 + DataTemplate 映射,让 ContentControl 自动切换 View,导航只管改 ViewModel,界面自己跟。 切页面切到怀疑人生 我朋友把 DI
2026-09-19 16:56:17
334
原创 从零搭建灌装监控系统(二):依赖注入与服务架构,告别手动 new
依赖注入与服务架构 这是「从零搭建灌装监控系统」系列第2篇。上一篇搭好了 MVVM 骨架,但 ViewModel 还是手动 new 的。这篇引入 DI 容器,把对象创建和依赖管理交给容器,为后续接入 PLC、数据库、报警服务打好架构底座。 当手动 new 变成噩梦 上篇结尾留了个坑:DataContext = new DashboardViewModel() 这种手动 new 的写法,项目小的时候
2026-09-18 14:00:39
523
原创 从零搭建灌装监控系统(一):灌装监控系统设计,从业务场景到MVVM骨架
灌装监控系统设计:从业务场景到MVVM骨架 这是「从零搭建灌装监控系统」系列第1篇。从一个灌装车间的真实需求出发,搞清楚上位机到底要干什么,再手把手搭建一个能跑的MVVM骨架。 一场灾难性的重构 去年有个朋友找我帮忙,他在给一家做饮料灌装的小厂写上位机软件。软件功能不复杂——跟PLC通信读数据、界面上显示产量温度液位、超限了弹报警、生产记录存数据库。 他给我看代码的时候,我差点没绷住。MainWi
2026-09-17 21:14:21
669
原创 从零搭建工业控制系统(二十九):项目打包与部署,从开发机到工厂
项目打包与部署:从开发机到工厂 这是「从零搭建工业控制系统」系列第29篇,最后一篇。代码写完了,测试过了,但送到工厂能跑起来才是真的完成。这篇说打包、混淆、部署那些事。 第一次现场部署的尴尬 第一次去现场部署,我把Debug目录打包拷过去,双击exe就启动了。看起来没问题。 然后客户问:"这个.NET Framework是什么?要我装吗?" 工厂的电脑是IT统一管控的,没有管理员权限装不了运行时。
2026-09-14 21:15:43
527
原创 从零搭建工业控制系统(二十九):项目打包与部署,从开发机到工厂
项目打包与部署:从开发机到工厂 这是「从零搭建工业控制系统」系列第29篇,最后一篇。代码写完了,测试过了,但送到工厂能跑起来才是真的完成。这篇说打包、混淆、部署那些事。 第一次现场部署的尴尬 第一次去现场部署,我把Debug目录打包拷过去,双击exe就启动了。看起来没问题。 然后客户问:"这个.NET Framework是什么?要我装吗?" 工厂的电脑是IT统一管控的,没有管理员权限装不了运行时。
2026-09-13 10:35:56
213
原创 从零搭建工业控制系统(二十八):日志系统——出了问题靠它救命
日志系统:出了问题靠它救命 这是「从零搭建工业控制系统」系列第28篇。前面所有功能模块都依赖日志,这篇终于讲日志系统本身——log4net分级别输出、自定义UI Appender、性能优化、调试技巧。 没有日志的深夜 有一次凌晨两点现场报故障,说程序闪退了。我问有没有日志,对方说"有啊,但是Logs文件夹是空的"。 远程连上去一看,log4net配置文件没被复制到输出目录。程序里到处调 logge
2026-09-13 10:14:15
339
原创 从零搭建工业控制系统(二十七):软件授权与代码混淆
软件授权与代码混淆 这是「从零搭建工业控制系统」系列第27篇。前面讲了调试标记,这篇讲软件保护——怎么防止软件被复制盗用,怎么防止代码被反编译。 为什么要做软件授权 工业软件不是免费产品。开发投入大,不能让客户随便复制给别的工厂用。 两个层面的问题: 授权:软件绑定到特定硬件,换机器不能用 混淆:代码不能被反编译看到源码,防止被抄 硬件绑定授权 授权机制基于硬件指纹——读取机器的CPU序列号、主板
2026-09-12 09:45:51
351
原创 从零搭建工业控制系统(二十六):调试标记系统,.tag文件切换开发与生产模式
调试标记系统:.tag文件驱动的开发模式切换 这是「从零搭建工业控制系统」系列第26篇。前面25篇都在讲功能实现,这篇讲调试技巧——怎么用简单的文件标记切换开发模式和生产行为。 问题:开发时和生产时行为不一样 工业软件有个尴尬的需求:开发时需要方便调试,生产时需要安全限制。但代码是同一套。 举几个例子: 开发时想跳过互锁预检(不然每次调试都要把安全条件凑齐) 开发时想自动登录(不然每次启动都要输密
2026-09-09 22:22:11
214
原创 从零搭建工业控制系统(二十五):Web API集成与数据上报
Web API集成与数据上报 这是「从零搭建工业控制系统」系列第25篇。前面讲了本地数据存储,这篇讲远程上报——怎么把采集的数据推送到Web服务器,怎么处理网络断开。 为什么需要数据上报 工业设备产生的数据不只是本地用。远程监控、数据分析、报表生成都需要数据集中到服务器。 项目里的气体流量数据需要上报到Web API: 远程监控页面实时显示流量 数据分析平台统计历史趋势 管理层报表自动生成 Htt
2026-09-07 19:07:05
916
原创 从零搭建工业控制系统(二十四):泄漏测试系统——密封性检测
泄漏测试系统:密封性检测 这是「从零搭建工业控制系统」系列第24篇。前面讲了设备管理,这篇讲一个具体功能——泄漏测试。腔体密封性直接影响工艺质量,怎么自动检测、记录、判定。 为什么需要泄漏测试 工业腔体必须密封。如果漏气,工艺过程中外部空气进入,会导致: 压力不稳定,工艺参数失控 气体污染,影响产品质量 严重时可能损坏真空泵 所以每次工艺开始前,都要做泄漏测试——确认腔体不漏气才允许继续。 泄漏测
2026-09-06 06:55:06
433
原创 从零搭建工业控制系统(二十三):设备唤醒与重连机制
设备唤醒与重连机制 这是「从零搭建工业控制系统」系列第23篇。前面讲了线程安全,这篇讲设备管理——设备睡眠了怎么唤醒,断线了怎么自动重连。 设备睡眠唤醒场景 工业设备不是永远在线的。有些设备有睡眠模式——长时间不操作会自动休眠以省电。设备休眠后,上位机的Modbus连接就断了。 操作员走到设备前要点"开始"时,设备还在睡觉。如果上位机不处理这个场景,操作员点了没反应,以为系统坏了。 唤醒流程: 1
2026-09-05 16:00:18
492
原创 从零搭建工业控制系统(二十二):线程安全与并发控制
线程安全与并发控制 这是「从零搭建工业控制系统」系列第22篇。前面讲了状态管理,这篇讲并发——工业软件有十几个后台服务同时跑,怎么保证不互相打架。 为什么工业软件特别需要线程安全 普通软件一个用户点一个按钮,大部分时间单线程。工业软件不一样: 后台轮询服务每500ms读一次Modbus 安全监控服务每200ms检查一次压力 追踪监控服务每100ms采集一次数据 命令执行器随时可能被触发 UI线程随
2026-09-04 22:19:07
479
原创 从零搭建工业控制系统(二十一):状态管理系统——中心状态对象设计
状态管理系统:中心状态对象设计 这是「从零搭建工业控制系统」系列第21篇。前面讲了消息通信,这篇讲状态管理——设备状态散落在各处怎么管,怎么跟Modbus寄存器映射,怎么绑定到UI。 问题:状态散落各处 工业系统有大量状态——阀门开关、压力读数、温度值、连接状态、运行状态……一开始这些状态散落在各个Service和ViewModel里。 问题很快出现: 阀门状态在ModbusService里,压力
2026-09-03 18:13:00
573
RealTemp CPU温度检测
2009-08-12
DOS批处理高级教程
2011-09-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅