🚀 30 天工业软件转型学习计划(详细执行版)
🗓️ 30 天系统性转型计划 · 面向有 Web 开发经验的 C# 转型者 · 目标岗位:工业软件 / MES / 上位机(成都)
📑 目录
- IDE 与运行时
- 数据库
- 工业通信模拟工具
- 开发辅助
- 1️⃣ 第一阶段:C# 上位机基础与通信打底(Day1-Day7)
- 2️⃣ 第二阶段:Modbus 协议与数据采集(Day8-Day14)
- 3️⃣ 第三阶段:OPC UA 与 MES 业务开发(Day15-Day22)
- 4️⃣ 第四阶段:MQTT、AI 与整合投递(Day23-Day30)
- ✅ 每周自检清单
- 💼 面试准备要点
- 简历关键词清单
- 项目包装话术
- Q1:Modbus 和 OPC UA 有什么区别?什么时候用哪个?
- 成都本地投递渠道
- 薪资参考(成都)
📋 前言:三个前提
- 时间投入:工作日每天 2-3 小时,周末 4-6 小时,30 天累计约 80-100 小时。对于有 Web 开发经验的开发者,C# 语法迁移成本较低,重点在于工业协议与硬件通信。
- 不等学完再投:第 15 天起就开始投递,边学边面。成都高新区、郫都区、龙泉驿区有大量 MES/上位机岗位,面试反馈是最好的学习方向标。
- 每天有产出:代码、笔记、截图、可演示程序。30 天后你将拥有一个完整的 GitHub 仓库和演示视频,而非一堆零散笔记。
🛠️ 第 0 天:环境准备(详细版)
IDE 与运行时
- Visual Studio 2022 Community:免费,工控首选。安装时勾选「.NET 桌面开发」和「ASP.NET Web 开发」工作负载。
- .NET 8 SDK:LTS 版本,工业界主流。从 https://dotnet.microsoft.com/download/dotnet/8.0 下载,安装后命令行执行
dotnet --version验证。 - Rider(可选):付费但跨平台体验好,若已有 License 可直接使用。
数据库
- SQL Server Express 2022:免费,C# 生态原生支持。从微软官网下载,安装时选择「基本」模式,记住 SA 密码。
- MySQL 8:若目标公司用 MySQL 则装此版本。
- DBeaver:免费开源数据库工具,支持所有主流数据库。从 https://dbeaver.io 下载 Community 版。
工业通信模拟工具
- Modbus Slave:Windows 平台,模拟从站设备。从 https://modbustools.com 下载,免费版支持 1 个从站。
- Modbus Poll:模拟主站,用于测试读写。同上网站下载。
- Prosys OPC UA Simulation Server:免费试用 30 天,从 https://prosysopc.com 下载,用于 OPC UA 开发调试。
- FreeOpcUa:开源 OPC UA 服务器,GitHub 搜索 FreeOpcUa/opcua-asyncio 可获取 Python 版本用于测试。
IoT 与消息队列
- EMQX:Docker 部署,执行
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p18083:18083 emqx/emqx:latest。管理面板 http://localhost:18083,默认账号 admin/public。 - MQTTX:跨平台 MQTT 测试工具,从 https://mqttx.app 下载。
开发辅助
- Git + GitHub:创建私有仓库 IndustrialSoftware30Days,每天提交代码。
- Postman:API 测试,从 https://www.postman.com 下载。
- VS Code:写 Python/FastAPI 用,安装 Python、Pylance、Jupyter 扩展。
- Python 3.11+:从 https://www.python.org 下载,安装时勾选「Add to PATH」。执行
pip install fastapi uvicorn paho-mqtt sqlalchemy python-dotenv。
1️⃣ 第一阶段:C# 上位机基础与通信打底(Day1-Day7)
Day1:C# 核心回炉
🎯 学习目标 补齐 C# 在工控场景下的核心特性,重点掌握异步编程与内存管理。
📌 技术重点
- async/await 与 Task:工控程序大量 IO 操作(串口、TCP、数据库),必须掌握异步模式。重点理解
Task.Run()、ConfigureAwait(false)、CancellationToken取消令牌。 - 委托与事件:
Action<T>、Func<T>、event、EventHandler<T>。工控中设备状态变更、数据到达都靠事件驱动。 - LINQ:
Where、Select、GroupBy、ToDictionary。处理采集数据时高频使用。 - 泛型与集合:
List<T>、Dictionary<TKey,TValue>、ConcurrentDictionary、BlockingCollection<T>。线程安全集合在多线程采集中必用。 - 反射与属性:
Type、PropertyInfo、自定义Attribute。用于动态加载配置、自动映射点位。
💡 学习思路 你有 Web 开发基础,C# 语法迁移快。不要从头看教程,直接针对上述 5 个点写控制台程序验证。重点放在async/await和ConcurrentDictionary,这两个在工控中踩坑最多。推荐微软官方文档「Asynchronous programming with async and await」章节。
✅ 具体练习 创建一个控制台项目 Day1_CSharpCore:
- 写一个异步方法模拟设备数据采集,使用
CancellationToken支持优雅停止。 - 用
ConcurrentDictionary实现线程安全的设备状态缓存。 - 用自定义
Attribute+ 反射实现一个简单的配置类自动加载。
⚠️ 常见坑与注意事项
async void仅用于事件处理程序,其他场景一律返回Task。- UI 线程中不要直接
await耗时操作,用Task.Run()包裹。 ConcurrentDictionary的GetOrAdd不是原子操作,复杂逻辑需配合Lazy<T>。
Day2:WinForm 快速上手
🎯 学习目标 掌握 WinForm 在工控场景下的快速开发能力,很多老项目仍用 WinForm。
📌 技术重点
- 控件体系:
DataGridView(数据展示核心)、Timer(定时采集)、BackgroundWorker(后台任务)、TabControl、SplitContainer。 - 跨线程 UI 更新:
Invoke、BeginInvoke、Control.CheckForIllegalCrossThreadCalls。 - 自定义控件:重写
OnPaint、UserControl、ControlStyles。工控中自定义指示灯、仪表盘是刚需。 - 布局与锚定:
Anchor、Dock、TableLayoutPanel、FlowLayoutPanel。工控界面需适配不同分辨率。
💡 学习思路 WinForm 上手极快,1 天足够。重点不是学控件属性,而是理解「跨线程 UI 更新」和「自定义控件绘制」。推荐看微软官方「Windows Forms documentation」中的「Custom Painting」章节。
✅ 具体练习 创建 WinForm 项目 Day2_WinForm:
- 用
DataGridView展示模拟设备数据,支持按列排序。 - 用
Timer每秒更新数据,通过BeginInvoke安全刷新 UI。 - 自定义一个
IndicatorLight控件,支持颜色、闪烁、状态文本。
⚠️ 常见坑与注意事项
Timer.Tick在 UI 线程执行,耗时操作必须丢到后台。DataGridView数据量大时(>1000 行)必须用虚拟模式VirtualMode。- 自定义控件务必调用
SetStyle(ControlStyles.OptimizedDoubleBuffer, true)防闪烁。
Day3:WPF + MVVM 入门
🎯 学习目标 掌握 WPF + MVVM,现代上位机开发的主流选择。
📌 技术重点
- MVVM 模式:
INotifyPropertyChanged、ICommand、RelayCommand、数据绑定、命令绑定。 - Prism 框架:模块化、导航、事件聚合器、依赖注入。工控项目复杂度高,Prism 是事实标准。
- 样式与模板:
Style、ControlTemplate、DataTemplate、ResourceDictionary。工控界面需要统一主题。 - 附加属性与行为:
AttachedProperty、Behavior<T>。扩展控件能力而不继承。
💡 学习思路 WPF 学习曲线陡,但你有 Web 经验,XAML 类比 HTML,Binding 类比 Vue/React 的响应式。不要从零手写 MVVM,直接用 Prism 模板。推荐 Brian Lagunas 的「Prism Bootcamp」免费视频。
✅ 具体练习 创建 WPF 项目 Day3_WpfMvvm(使用 Prism 模板):
- 实现一个设备监控主界面,左侧设备列表,右侧详情。
- 用
EventAggregator实现设备选择联动详情刷新。 - 自定义一个
LedIndicator控件,通过绑定改变状态。
⚠️ 常见坑与注意事项
- 不要在 ViewModel 中引用 View,违反 MVVM 原则。
Binding忘记设置Mode=TwoWay导致数据不回传是新手最常见错误。- Prism 的
INavigationAware接口用于页面间传参,务必掌握。
Day4:串口通信开发
🎯 学习目标 掌握串口通信,工控中最基础的物理层通信方式。
📌 技术重点
- SerialPort 类:
PortName、BaudRate、DataBits、StopBits、Parity、Handshake。 - RS232 vs RS485:RS232 点对点,RS485 多点总线,接线方式、终端电阻、通信距离差异。
- 数据接收:
DataReceived事件、ReadExisting()、Read(byte[], offset, count)。 - 粘包处理:串口是字节流,无消息边界。必须实现帧头帧尾校验、状态机解析。
- 编码:ASCII、UTF8、GB2312。工控设备常用 ASCII 或自定义编码。
💡 学习思路 先理解物理层差异,再写代码。用 Modbus Slave 模拟从站,你的程序作主站发送 Modbus RTU 帧。重点攻克「粘包处理」,这是串口开发的核心难点。推荐看「Serial Communication Protocols」相关文档。
✅ 具体练习 创建项目 Day4_SerialPort:
- 实现串口配置界面(端口、波特率、数据位等下拉选择)。
- 实现帧解析状态机:IDLE -> HEADER -> DATA -> CHECKSUM -> COMPLETE。
- 用 Modbus Slave 模拟从站,你的程序发送 03 功能码读取寄存器并解析。
⚠️ 常见坑与注意事项
DataReceived不一定一次收完一帧,必须缓存+状态机解析。- 串口打开/关闭必须在非 UI 线程,且需处理异常(如 USB 转串口拔出)。
- RS485 总线注意终端电阻和接地,软件层面注意主从轮询时序。
Day5:TCP Socket 通信
🎯 学习目标 掌握 TCP Socket 编程,工业以太网通信的基础。
📌 技术重点
- Socket 编程:
TcpListener、TcpClient、NetworkStream、异步 Accept/Read/Write。 - TCP vs UDP:TCP 可靠有序,UDP 快速不可靠。工控中 Modbus TCP、OPC UA 用 TCP,某些实时采集用 UDP。
- 心跳机制:定时发送心跳包,检测连接存活。工控网络不稳定,心跳是必备。
- 断线重连:指数退避重连策略,避免网络恢复时瞬间大量重连请求。
- 粘包拆包:同串口,TCP 也是流式协议。常用方案:固定长度、长度前缀、分隔符。
💡 学习思路 你有 Web 后端经验,TCP Socket 概念不陌生。重点放在「心跳+断线重连+粘包」三件套,这是工控 TCP 通信的标配。推荐看《C# Network Programming》相关章节。
✅ 具体练习 创建项目 Day5_TcpSocket:
- 实现 TCP 服务端,支持多客户端连接,用
ConcurrentDictionary管理会话。 - 实现长度前缀协议:4 字节长度头 + N 字节数据体。
- 实现心跳检测(30 秒无数据断开)和断线重连(指数退避:1s/2s/4s/8s…最大 60s)。
⚠️ 常见坑与注意事项
NetworkStream.Read返回值可能小于请求长度,必须循环读取直到收够。- 服务端必须用异步 Accept,否则单线程只能处理一个连接。
- 心跳超时判断要考虑时钟漂移,用
Stopwatch而非DateTime差值。
Day6:多线程与 UI 解耦
🎯 学习目标 掌握工控程序的多线程架构,确保 UI 流畅、采集稳定。
📌 技术重点
- Task 与 ThreadPool:
Task.Run()、Task.WhenAll()、Parallel.ForEach()。 - Dispatcher:WPF 的
Dispatcher.Invoke/BeginInvoke,WinForm 的Control.Invoke/BeginInvoke。 - 生产者消费者模式:
BlockingCollection<T>、Channel<T>(.NET Core 推荐)。采集线程生产,处理线程消费。 - 线程安全:
lock、SemaphoreSlim、Interlocked、volatile。 - 内存泄漏:事件未取消订阅、Timer 未释放、大对象驻留 LOH。
💡 学习思路 工控程序典型架构:采集线程(后台)-> 消息队列 -> 处理线程(后台)-> UI 更新(主线程)。这个模型必须烂熟于心。重点理解 Channel<T>,它是.NET Core 下生产者消费者的最佳实践。
✅ 具体练习 创建项目 Day6_MultiThread:
- 用
Channel<T>实现采集-处理-UI 三层架构。 - 采集线程每秒产生 100 条模拟数据,处理线程聚合后推送到 UI。
- 用
SemaphoreSlim限制并发数据库写入数。
⚠️ 常见坑与注意事项
- UI 线程只做渲染,任何耗时操作(包括 JSON 序列化)都丢到后台。
BlockingCollection在取消时用CompleteAdding(),消费者用GetConsumingEnumerable()自动退出。- 高频 UI 更新(>30fps)必须节流,用
DispatcherTimer或采样后批量刷新。
Day7:工程化与项目骨架
🎯 学习目标 搭建工控项目的标准工程化骨架,后续所有项目复用。
📌 技术重点
- Serilog 日志:结构化日志、文件滚动、控制台输出、日志级别。工控现场排障全靠日志。
- JSON 配置:
appsettings.json、IOptions<T>、配置热重载。 - 全局异常捕获:
AppDomain.UnhandledException、Dispatcher.UnhandledException、TaskScheduler.UnobservedTaskException。 - 单元测试:NUnit/xUnit + Moq。工控逻辑(协议解析、报警规则)必须可测试。
- 依赖注入:
Microsoft.Extensions.DependencyInjection。Prism 内置 DI,但理解原理很重要。
💡 学习思路 工程化不是可选项,是工控软件的底线。现场环境千奇百怪,没有日志和异常处理等于裸奔。把 Day7 的产出作为后续所有项目的模板。
✅ 具体练习 创建项目 Day7_ProjectTemplate:
- 集成 Serilog,配置按天滚动+控制台输出。
- 实现全局异常捕获,异常写入日志并弹窗提示。
- 写一个协议解析器的单元测试,覆盖正常帧、异常帧、边界值。
- 将以上整合为 Visual Studio 项目模板。
⚠️ 常见坑与注意事项
- 日志路径必须用绝对路径或 AppData,工控机当前目录可能无写权限。
- 全局异常捕获后不要直接退出,先保存现场再提示用户。
- 单元测试不要依赖真实硬件,全部用 Mock 或模拟器。
2️⃣ 第二阶段:Modbus 协议与数据采集(Day8-Day14)
Day8:Modbus 协议原理
🎯 学习目标 彻底理解 Modbus 协议,这是工控通信的「普通话」。
📌 技术重点
- Modbus RTU vs TCP:RTU 基于串口,帧头帧尾用静默时间判断;TCP 基于以太网,6 字节 MBAP 头替代地址+校验。
- 四种数据区:线圈(0x,读写)、离散输入(1x,只读)、输入寄存器(3x,只读)、保持寄存器(4x,读写)。
- 功能码详解:01 读线圈、02 读离散、03 读保持寄存器、04 读输入寄存器、05 写单线圈、06 写单寄存器、15 写多线圈、16 写多寄存器。
- 地址偏移:协议地址从 0 开始,但很多 PLC 文档从 1 开始。40001 对应协议地址 40000。这是最常见的坑。
- 异常响应:功能码+0x80 + 异常码(01 非法功能、02 非法地址、03 非法数据值)。
💡 学习思路 不要死记硬背,对照 Modbus Slave 的界面理解四种数据区。用 Modbus Poll 手动发几条指令,观察报文和响应。推荐《Modbus Application Protocol Specification V1.1b3》官方文档。
✅ 具体练习
- 用 Modbus Slave 创建模拟设备:线圈 10 个、保持寄存器 20 个。
- 用 Modbus Poll 读取并写入,记录每次的完整报文(十六进制)。
- 手动计算:读 40001 开始的 3 个寄存器,写出完整 RTU 帧和 TCP 帧。
⚠️ 常见坑与注意事项
- 地址偏移问题:务必确认 PLC 文档的地址是协议地址还是显示地址。
- 功能码 16 写多寄存器时,字节数=寄存器数 x2,写错会导致设备拒绝。
- RTU 帧的 CRC 校验是低字节在前,高字节在后,与常规相反。
Day9:NModbus4 实战
🎯 学习目标 用 C# 库实现 Modbus 通信,替代手写协议解析。
📌 技术重点
- NuGet 安装:
NModbus4或更现代的FluentModbus。 - ModbusTcpClient:
ReadHoldingRegisters()、WriteSingleRegister()、WriteMultipleRegisters()。 - 异步 API:
ReadHoldingRegistersAsync(),工控程序必须用异步版本。 - 异常处理:
ModbusSlaveException(设备返回异常)、IOException(网络/串口故障)、TimeoutException。 - 连接管理:连接池或长连接+重连,避免频繁建连。
💡 学习思路 先读 NModbus4 的 GitHub README 和示例,理解 API 设计。然后对接 Day8 的 Modbus Slave,验证读写。重点测试异常场景:设备离线、非法地址、超时。
✅ 具体练习 创建项目 Day9_ModbusClient:
- 封装
ModbusService类,提供ReadRegistersAsync(address, count)和WriteRegisterAsync(address, value)。 - 实现自动重连:连接失败时指数退避重试 3 次。
- 写单元测试:用 Modbus Slave 模拟正常和异常响应。
⚠️ 常见坑与注意事项
- NModbus4 的
ReadHoldingRegisters返回ushort[],转int/float需自行处理字节序。 - 不要每次读写都新建连接,复用连接或实现连接池。
- 超时时间设置要合理:串口建议 500ms-1s,TCP 建议 1-3s。
Day10:点位表设计
🎯 学习目标 掌握工业点位表设计,这是数据采集的配置核心。
📌 技术重点
- Excel 模板设计:设备名、点位名、PLC 地址、数据类型、单位、倍率、读写属性、报警上下限、描述。
- 配置驱动:程序启动时加载 Excel/CSV/JSON 点位表,动态生成采集任务。避免硬编码。
- 数据类型映射:Bool->线圈、Int16/UInt16->单寄存器、Int32/Float->双寄存器、Double->四寄存器。
- 倍率处理:PLC 存整数,上位机乘倍率转浮点。如温度 PLC 存 256,倍率 0.1,实际 25.6 度 C。
- 版本管理:点位表变更需记录版本号,支持回滚。
💡 学习思路 找一份真实的 MES 点位表模板(网上搜「PLC 点位表模板」),理解每个字段的含义。然后设计自己的模板,用 EPPlus 或 MiniExcel 库实现加载。
✅ 具体练习 创建项目 Day10_PointTable:
- 设计 Excel 点位表模板,包含至少 20 个点位,覆盖各种数据类型。
- 实现
PointTableLoader类,加载 Excel 并校验(地址格式、数据类型合法性)。 - 根据点位表自动生成 Modbus 采集任务列表。
⚠️ 常见坑与注意事项
- 点位表必须有校验:地址重复、数据类型与寄存器数不匹配、倍率为 0。
- 浮点数占用 2 个寄存器,需确认高低字顺序(ABCD vs CDAB)。
- 点位表变更后程序应支持热重载或重启提示,不要硬编码。
Day11:字节序与类型转换坑
🎯 学习目标 彻底解决工控中最头疼的字节序问题。
📌 技术重点
- Endianness:BigEndian(大端,高字节在前)、LittleEndian(小端,低字节在前)。Modbus 默认 BigEndian,但 PLC 可能是 LittleEndian。
- 浮点数存储:IEEE754 Float 占 2 个寄存器,4 种字节序:ABCD、CDAB、BADC、DCBA。
- Int32/UInt32:同样占 2 个寄存器,字节序问题同浮点。
- 位操作:从 UInt16 中提取单个 Bit 作为 Bool 值。
value & (1 << bitIndex)。 - BitConverter:C# 的
BitConverter依赖平台字节序,工控中必须手动处理。
💡 学习思路 这是纯实操技能,看文档不如写代码验证。准备已知值的浮点数,写入 PLC 后用不同字节序读取,观察哪种正确。推荐用在线工具「Float to Hex Converter」辅助验证。
✅ 具体练习 创建项目 Day11_Endianness:
- 写一个字节序转换工具类,支持 BigEndian/LittleEndian 互转。
- 实现浮点数与字节数组的双向转换(覆盖 4 种字节序)。
- 用已知值验证:如浮点数 3.14 在不同字节序下的十六进制表示。
⚠️ 常见坑与注意事项
- 不同品牌 PLC 字节序不同:西门子默认 ABCD,三菱默认 CDAB,欧姆龙可选。
- Modbus 协议规定高位字节在前,但很多 PLC 出厂设置是小端。
- 浮点数转换错误是现场排障最耗时的 bug 之一,务必写单元测试覆盖。
Day12:数据库设计
🎯 学习目标 设计工业数据采集的数据库模型,支撑后续 MES 业务。
📌 技术重点
- 核心表设计:设备表(Device)、点位表(Point)、实时数据表(RealtimeData)、报警表(Alarm)、产量汇总表(ProductionSummary)。
- 时间序列数据存储:实时数据表按时间分区、定期归档到历史表。
- 索引策略:设备 ID+时间戳联合索引、报警表的状态索引。
- ORM 选型:Entity Framework Core(快速开发)或 Dapper(高性能查询)。
- 数据清理策略:实时数据表保留 30 天,历史表按月归档。
💡 学习思路 先画 ER 图再写 SQL。工业数据的特点是写入量大、读取按时间范围查询。表设计要兼顾写入性能和查询效率。推荐看「Time-series database design patterns」相关文档。
✅ 具体练习 创建项目 Day12_Database:
- 用 SQL Server/MySQL 创建上述 5 张核心表。
- 写 EF Core 实体类和 DbContext。
- 实现批量插入优化:用
BulkCopy或 EF Core 的AddRange+ 事务。
⚠️ 常见坑与注意事项
- 实时数据表不要用自增主键,用设备 ID+时间戳做复合主键。
- DateTime 类型注意时区问题,工业现场统一用 UTC 存储。
- 批量插入时注意事务大小,一次插入 1 万条比 100 万条快得多。
Day13:实时曲线与报警系统
🎯 学习目标 实现工业监控的核心功能:实时曲线和报警。
📌 技术重点
- ScottPlot:高性能实时绘图控件,支持百万级数据点流畅渲染。NuGet 安装
ScottPlot.WPF或ScottPlot.WinForms。 - LiveCharts2:现代化 WPF 图表库,支持实时数据绑定。NuGet 安装
LiveCharts2.Wpf。 - 报警规则引擎:基于点位配置的阈值判断(上限/下限/变化率),支持报警确认/消音/恢复。
- 报警优先级:紧急(红色)、重要(橙色)、一般(黄色)、提示(蓝色)。
💡 学习思路 先学会用 ScottPlot 画静态曲线,再实现动态刷新。报警系统先做简单的阈值判断,后续可升级为规则引擎。
✅ 具体练习 创建项目 Day13_Alarm:
- 用 ScottPlot 实现温度/压力实时曲线,支持缩放和游标。
- 实现报警规则:当温度>80 度时触发高级别报警,<30 度触发低级别报警。
- 报警列表支持确认、消音、历史记录查询。
⚠️ 常见坑与注意事项
- ScottPlot 在 UI 线程高频刷新会卡顿,用
RenderAsync或后台线程渲染。 - 报警不要频繁触发,加防抖机制(如阈值持续 5 秒超限才触发)。
- 曲线数据点过多时要做降采样,否则内存和渲染都会出问题。
Day14:阶段复盘与项目包装
🎯 学习目标 整理第一阶段成果,开始准备简历和面试素材。
📌 技术重点
- README 撰写:项目简介、技术栈、架构图、运行说明、截图展示。
- 架构图绘制:用 Draw.io 或 Excalidraw 画系统架构图、数据流程图。
- Git 规范:语义化提交信息(feat/fix/docs/chore)、标签管理。
- 简历初稿:提炼项目亮点,量化成果(如「实现了毫秒级数据采集」「报警响应时间<1 秒」)。
💡 学习思路 不要等所有阶段结束才准备简历。第 14 天就开始写,后面每个阶段都往简历里加内容。面试看的是你能做出东西,不是学了多久。
✅ 具体练习
- 整理 Day1-Day7 的所有代码到一个 GitHub 仓库,写完整的 README。
- 画一张系统架构图:上位机 -> Modbus -> 数据库 -> 看板。
- 写简历初稿,重点描述你做的上位机项目。
⚠️ 常见坑与注意事项
- GitHub 仓库设为私有也可以,面试官可以要求你现场演示。
- README 截图要用真实运行效果,不要放空白界面。
- 简历不要写「熟悉」写「掌握」,面试会被深挖。
3️⃣ 第三阶段:OPC UA 与 MES 业务开发(Day15-Day22)
Day15:MES 核心业务流
🎯 学习目标 理解 MES 系统的核心业务流程,这是工业软件的核心价值所在。
📌 技术重点
- 工单管理:工单创建、下发、执行、报工、关闭全流程。状态机:待生产->生产中->暂停->完成->关闭。
- 工序定义:工序 BOM、工艺路线、工序参数模板。
- 报工流程:完工报工、废品报工、返工报工、工时统计。
- 批次追溯:正追溯(原料->成品)、反追溯(成品->原料),满足 ISO/食品医药行业要求。
- OEE 计算:OEE = 可用率 x 表现性 x 质量率。可用率=运行时间/计划时间,表现性=实际产量/理论产量,质量率=合格品数/总产量。
💡 学习思路 先理解业务再写代码。找一份 MES 需求文档(网上搜「MES 系统需求规格说明书」),理解每个业务环节的数据流。推荐看 ISA-95 标准中关于 MES 功能的描述。
✅ 具体练习
- 画 MES 核心业务流程图:ERP 下计划 -> MES 排工单 -> 产线执行 -> 报工 -> 数据回传 ERP。
- 设计工单状态机代码,覆盖所有状态流转和非法操作拦截。
- 实现 OEE 计算器:输入设备运行日志,输出 OEE 指标。
⚠️ 常见坑与注意事项
- 工单状态机一定要做防御性编程,非法状态流转要记录日志并拒绝。
- OEE 计算的分母不能为 0,要有默认值和告警。
- 批次追溯的关联关系要在每个工序报工时就绑定好,不要事后补。
Day16:MES 数据模型设计
🎯 学习目标 设计 MES 系统的数据库模型和 API 接口。
📌 技术重点
- 核心表设计:工单表(WorkOrder)、工序表(Operation)、报工表(Report)、物料消耗表(MaterialConsumption)、质量检验表(QualityInspection)、设备 OEE 表(EquipmentOEE)。
- API 接口设计:RESTful 风格,工单 CRUD、报工提交、数据查询、看板统计。
- 权限模型:RBAC 基于角色的访问控制,车间操作员/班组长/车间主任/管理员不同权限。
- 审计日志:关键操作记录操作人、时间、IP、前后值变更。
💡 学习思路 先设计表结构再写代码。工业系统的表设计比 Web 系统更复杂,因为涉及大量的状态流转和追溯关系。推荐看「Database design for manufacturing execution systems」相关文档。
✅ 具体练习 创建项目 Day16_MES_Model:
- 创建 MES 核心数据库表(工单、工序、报工、质量、OEE)。
- 用 EF Core 生成实体类和 DbContext。
- 实现工单 API:创建、查询、报工、关闭。
⚠️ 常见坑与注意事项
- 工单表要记录 ERP 源单号,方便与 ERP 对账。
- 报工表要记录操作人和操作时间,满足审计要求。
- 质量检验表要支持抽样规则和判定规则配置。
Day17:扫码过站追溯实现
🎯 学习目标 实现工业追溯的核心功能:扫码过站。
📌 技术重点
- 条码/RFID 集成:串口扫码枪模拟键盘输入、RFID 读卡器 TCP 通信。
- 过站逻辑:产品到达工序 -> 扫码确认 -> 绑定工单/批次/设备/操作员 -> 记录过站时间。
- 追溯链构建:正向追溯(原料批次 -> 生产工序 -> 成品批次)、反向追溯(成品批次 -> 生产工序 -> 原料批次)。
- 防错机制:扫码重复提示、工单未下发拦截、物料批次过期拦截。
💡 学习思路 先用串口模拟扫码枪(很多扫码枪支持串口模式),实现基本的扫码录入。然后构建追溯链。推荐看「Barcode scanning in industrial applications」相关文档。
✅ 具体练习 创建项目 Day17_Traceability:
- 实现串口扫码枪监听,自动读取条码并解析。
- 实现过站逻辑:扫码后查询工单状态,记录过站信息到数据库。
- 实现追溯查询:输入成品条码,展示完整生产链路。
⚠️ 常见坑与注意事项
- 扫码枪有各种模式(串口/键盘/HID),要支持多种模式适配。
- 扫码后要有声音/灯光反馈,现场环境嘈杂需要明显提示。
- 追溯数据不能删除,只能标记作废,满足合规要求。
Day18:OPC UA 协议原理
🎯 学习目标 理解 OPC UA 协议架构和核心概念,这是工业 4.0 的通信标准。
📌 技术重点
- OPC UA 架构:客户端-服务器模型、发布订阅模型。
- 命名空间:每个服务器定义自己的命名空间,节点 ID 由命名空间 URI+标识符组成。
- 节点模型:对象节点、变量节点、方法节点、视图节点、引用类型。
- 浏览节点树:Organizes 节点、HasComponent、HasProperty、HasChild 引用。
- 数据类型:基础类型(Int32、Float、Double、Boolean、DateTime)、结构化类型、数组。
- 安全认证:匿名、用户名密码、证书认证三种安全模式。
💡 学习思路 OPC UA 比 Modbus 复杂很多,不要试图一次性学完。先理解架构和节点浏览,能读数据就行。推荐看 OPC Foundation 官方文档「OPC UA Specification Part 1-3」和 Prosys 的免费教程。
✅ 具体练习
- 启动 Prosys Simulation Server,用 UA Expert(免费 OPC UA 客户端)浏览节点树。
- 理解命名空间、节点 ID、变量值的结构。
- 手动读取模拟服务器的温度、压力等变量。
⚠️ 常见坑与注意事项
- OPC UA 的节点 ID 格式复杂(numeric、string、guid、opaque),用字符串格式最容易调试。
- 浏览节点树时要处理分页,大型服务器节点数可能上万。
- 安全策略配置是入门最大障碍,先用 Anonymous+None 安全模式跑通。
Day19:OPC UA 订阅式开发
🎯 学习目标 用 C# 实现 OPC UA 客户端,掌握订阅式数据读取。
📌 技术重点
- C# OPC UA 客户端:使用
OPCFoundation.NetStandard.Opc.Ua官方库。 - 同步读取:
ReadValueAsync,适合一次性查询。 - 订阅式读取:
CreateSubscription+MonitoredItem,服务器主动推送数据变化。 - 历史数据读取:
ReadHistoryDataAsync,获取过去某时间段的数据。 - 报警事件订阅:
CreateSubscription订阅报警和事件。
💡 学习思路 先实现同步读取验证连接正常,再实现订阅模式。订阅是工业采集的最佳实践,比轮询更高效。推荐看 GitHub 上 OPCFoundation/UA-.NETStandard 的示例代码。
✅ 具体练习 创建项目 Day19_OpcUaClient:
- 实现 OPC UA 客户端连接 Prosys 仿真服务器。
- 实现同步读取:读取指定节点的值。
- 实现订阅模式:订阅 10 个变量,数据变化时自动回调处理。
- 读取历史数据并绘制曲线。
⚠️ 常见坑与注意事项
- 订阅要设置合适的 SamplingInterval,太频繁会拖垮服务器。
- 连接断开后订阅自动失效,需要实现重连后重新订阅。
- 节点 ID 字符串要完全匹配,大小写敏感。
Day20:OEE 计算与设备看板
🎯 学习目标 实现 OEE 计算和设备状态看板,这是车间主任最关注的指标。
📌 技术重点
- OEE 六大类损失:设备故障、换型调整、启动废品、减速运行、加工废品、产能损失。
- 可用率计算:运行时间 = 计划时间 - 停机时间。停机包括计划停机和意外停机。
- 表现性计算:实际节拍 / 理论节拍。需要考虑换型损失和减速运行。
- 质量率计算:合格品数 / 总产量。包括返工品和废品。
- 设备状态机:运行、待机、故障、保养、换型、休息等状态。
💡 学习思路 OEE 计算看似简单,但实际落地有很多细节。先实现基础版本(可用率 x 表现性 x 质量率),后续根据工厂实际情况调整。推荐看 SMED 和 TPM 相关方法论。
✅ 具体练习 创建项目 Day20_OEE:
- 实现设备状态记录服务:记录设备状态切换时间和原因。
- 实现 OEE 计算器:按班/天/周/月统计 OEE 及三大率。
- 用 WPF/WinForm 制作设备看板界面:显示实时状态、OEE 趋势、报警信息。
⚠️ 常见坑与注意事项
- 设备状态切换要有确认机制,避免误操作导致数据不准。
- OEE 统计要排除计划保养时间,否则可用率会被拉低。
- 看板数据刷新频率不宜太高,5-10 秒一次即可。
Day21:生产看板开发
🎯 学习目标 开发车间生产看板,实时展示生产进度和关键指标。
📌 技术重点
- 前端框架:Blazor(C# 全栈)或 Vue.js(前端专业)。工控推荐 Blazor,技术栈统一。
- WebSocket 实时推送:SignalR(.NET 内置)实现服务端推送数据到前端。
- 图表组件:Gantt 图(生产进度)、柱状图(产量对比)、折线图(趋势)、仪表盘(OEE)。
- 大屏适配:1920x1080/3840x2160 分辨率适配,字体大小、颜色对比度。
💡 学习思路 先用 Blazor Server 做一个简单的看板页面,再逐步丰富内容。工控看板不同于 BI 报表,要突出实时性和异常提示。推荐看「Factory dashboard design best practices」相关文档。
✅ 具体练习 创建项目 Day21_Dashboard:
- 用 Blazor Server 创建生产看板页面。
- 用 SignalR 实现实时数据推送(设备状态、产量、报警)。
- 集成图表组件:生产进度甘特图、OEE 仪表盘、报警列表。
- 适配大屏分辨率,设置自动全屏模式。
⚠️ 常见坑与注意事项
- SignalR 在 IIS 部署时要注意连接数限制和超时设置。
- 看板数据不要每次都查数据库,用内存缓存+定时刷新。
- 大屏颜色要考虑到车间照明条件,避免暗色主题看不清。
Day22:权限审计与系统集成
🎯 学习目标 完善 MES 系统的权限管理和系统集成能力。
📌 技术重点
- RBAC 权限模型:用户-角色-权限三级模型,菜单权限+按钮权限+数据权限。
- 审计日志:关键操作记录(谁、何时、做了什么、改了什么),满足 ISO 审计要求。
- Excel 导出:用 EPPlus 或 MiniExcel 实现报表导出,支持多 Sheet、图表嵌入。
- HTTP/WebSocket 接口:对外提供 RESTful API,供 ERP/WMS/AGV 系统调用。
- JWT 认证:API 接口统一认证,支持 Token 刷新和权限校验。
💡 学习思路 权限和审计是工业系统从「能用」到「好用」的关键。先实现基础 RBAC,再根据实际需求扩展。推荐看「Role-based access control implementation patterns」相关文档。
✅ 具体练习 创建项目 Day22_Integration:
- 实现 RBAC 权限系统:用户管理、角色管理、权限分配。
- 实现审计日志中间件:自动记录所有写操作。
- 实现 Excel 导出服务:导出生产报表、质量报表。
- 用 Postman 测试所有 API 接口,编写接口文档。
⚠️ 常见坑与注意事项
- 权限判断要在 API 层和 UI 层都做,不能只靠前端控制。
- 审计日志不要阻塞主流程,用异步写入。
- Excel 导出大数据量时要分页或异步生成文件。
4️⃣ 第四阶段:MQTT、AI 与整合投递(Day23-Day30)
Day23:MQTT 协议原理
🎯 学习目标 掌握 MQTT 协议,实现工业设备数据上云。
📌 技术重点
- 发布订阅模式:Publisher -> Broker -> Subscriber 架构。
- Topic 设计:层级结构(工厂/车间/设备/指标)、通配符(+ 和 #)。
- QoS 等级:QoS 0(最多一次)、QoS 1(至少一次)、QoS 2(恰好一次)。
- Retained 消息:保留消息,新订阅者立即收到最新状态。
- Last Will 遗嘱消息:客户端异常断开时 Broker 发布遗嘱消息。
- EMQX 部署:Docker 部署、用户认证、ACL 权限、WebSocket 桥接。
💡 学习思路 MQTT 比 Modbus 和 OPC UA 简单很多,重点理解 Topic 设计和 QoS。工业场景下 MQTT 常用于边缘设备到云平台的数据传输。推荐看 EMQX 官方文档和 MQTT.org 规范。
✅ 具体练习
- Docker 部署 EMQX,用 MQTTX 连接测试发布订阅。
- 设计工业 Topic 规范:如
factory/{code}/device/{deviceId}/telemetry。 - 实现 C# MQTT 客户端:连接 EMQX、发布设备数据、订阅控制指令。
⚠️ 常见坑与注意事项
- Topic 不要包含敏感信息(如设备 IP),用编码后的设备 ID。
- QoS 2 虽然可靠但性能低,工业遥测数据用 QoS 1 即可。
- 遗嘱消息要设置合理的保留消息和过期时间。
Day24:断网缓存与补传机制
🎯 学习目标 实现工业场景下的断网数据缓存和恢复补传,这是现场真实痛点。
📌 技术重点
- 本地缓存策略:SQLite 或 JSON 文件做本地缓存,网络恢复后补传。
- 缓存策略:FIFO 队列、容量限制、过期清理。
- 断网检测:心跳失败判定断网、网络恢复检测。
- 补传机制:断网期间数据暂存本地、网络恢复后按时间顺序补传。
- 消息去重:用消息 ID+时间戳去重,防止网络抖动导致重复上报。
💡 学习思路 这是区分「Demo 项目」和「工业级项目」的关键能力。现场网络不稳定是常态,不能假设网络永远在线。推荐看「Edge computing data buffering patterns」相关文档。
✅ 具体练习 创建项目 Day24_Offline:
- 实现本地 SQLite 缓存服务:数据写入本地表。
- 实现断网检测:定时心跳,失败 3 次判定断网。
- 实现补传服务:网络恢复后从本地表读取未上报数据,按序发送。
- 实现消息去重:服务端记录最近 N 条消息 ID,拒绝重复。
⚠️ 常见坑与注意事项
- 本地缓存要有容量上限和过期策略,防止磁盘写满。
- 补传时要控制速率,不要瞬间大量请求打爆服务端。
- 缓存数据要加密存储,防止设备丢失导致数据泄露。
Day25:FastAPI 数据服务
🎯 学习目标 用 Python FastAPI 搭建工业数据服务接口。
📌 技术重点
- FastAPI 基础:路由定义、请求/响应模型、依赖注入、中间件。
- RESTful API 设计:资源命名规范、HTTP 状态码、分页、过滤、排序。
- 数据库操作:SQLAlchemy ORM、异步查询、连接池。
- Swagger 文档:FastAPI 自动生成 API 文档,开发调试方便。
- 异步支持:
async/await支持高并发 IO 操作。
💡 学习思路 你有 Python 基础,FastAPI 上手很快。重点理解 RESTful 设计原则和异步编程模式。推荐看 FastAPI 官方文档和「REST API design best practices」相关文档。
✅ 具体练习 创建项目 Day25_FastAPI:
- 搭建 FastAPI 项目骨架:路由、中间件、异常处理、日志。
- 实现设备数据 API:上传数据、查询数据、统计汇总。
- 实现 MES 业务 API:工单管理、报工、质量检验。
- 自动生成 Swagger 文档,用 Postman 测试所有接口。
⚠️ 常见坑与注意事项
- 数据库连接要用连接池,不要每次请求新建连接。
- API 响应要有统一的格式(code/message/data),方便前端解析。
- 敏感接口(如写操作)要加认证和权限校验。
Day26:大模型自动生成生产日报
🎯 学习目标 利用大模型能力自动生成生产日报,展示 AI 在工业场景的应用。
📌 技术重点
- 大模型 API 调用:对接通义千问/OpenAI/GPT 等 API。
- Prompt 工程:设计生产日报的 Prompt 模板,包含数据模板和格式要求。
- 数据格式化:将数据库查询结果格式化为大模型可理解的文本。
- 日报模板:生产概况、OEE 分析、异常汇总、改进建议。
- 异步任务:日报生成耗时操作,用后台任务+邮件/消息通知。
💡 学习思路 这是 AI Agent 在工业场景最落地的应用之一。先手写几个日报模板,再用大模型自动生成。重点在于 Prompt 工程和数据结构化。推荐看「Prompt engineering for business automation」相关文档。
✅ 具体练习 创建项目 Day26_AIGen:
- 设计生产日报 Prompt 模板(包含日期、产量、OEE、异常等数据占位符)。
- 实现日报生成服务:查询数据 -> 填充模板 -> 调用大模型 -> 返回日报文本。
- 支持多种日报:日报、周报、月报、异常专项报告。
- 集成到 FastAPI,提供 API 接口。
⚠️ 常见坑与注意事项
- 大模型调用要设置超时和重试机制,不能阻塞主流程。
- Prompt 要包含数据校验,防止大模型胡编数据。
- 敏感生产数据不要发送到公共大模型,考虑本地部署或私有化方案。
Day27:RAG 工厂知识库问答
🎯 学习目标 实现基于 RAG 的工厂知识库问答系统,让 AI 读懂设备手册和工艺文档。
📌 技术重点
- RAG 架构:检索增强生成 = 向量数据库检索 + 大模型生成。
- 文档处理:PDF/Word/Excel 文档解析、文本切片、元数据提取。
- 向量数据库:ChromaDB(轻量入门)、Milvus(生产级)、pgvector(PostgreSQL 扩展)。
- 嵌入模型:文本向量化,推荐开源模型如 text2vec、bge-m3。
- 问答流程:用户提问 -> 文本向量化 -> 向量检索相似文档 -> 拼接上下文 -> 大模型生成答案。
💡 学习思路 RAG 是目前企业级 AI 应用最成熟的方案。先从本地文档问答做起,再扩展到设备手册、工艺规程、质量记录等工业文档。推荐看 LangChain 官方文档和「RAG implementation guide」相关文档。
✅ 具体练习 创建项目 Day27_RAG:
- 搭建 RAG 服务:文档上传 -> 解析切片 -> 向量化 -> 存储到 ChromaDB。
- 实现问答接口:用户提问 -> 检索相关文档片段 -> 调用大模型生成答案。
- 预导入设备手册、故障排除指南等文档。
- 测试问答效果,优化检索策略。
⚠️ 常见坑与注意事项
- 文档切片要考虑语义完整性,不要按固定字符数切。
- 向量检索的 top_k 参数要调优,太少信息不全,太多引入噪声。
- 大模型回答要标注信息来源,方便用户验证准确性。
Day28:项目整合与演示视频
🎯 学习目标 整合所有模块为一个完整项目,录制演示视频。
📌 技术重点
- 全链路联调:Modbus 采集 -> 数据库 -> 上位机看板 -> MQTT 上报 -> FastAPI 接口 -> AI 分析。
- 项目架构整理:统一项目结构、配置文件、启动脚本。
- 演示脚本准备:设计 3-5 个演示场景,覆盖核心功能。
- 录屏工具:OBS Studio(免费)、Camtasia(付费),录制+字幕+标注。
- 视频剪辑:剪映/CapCut,添加标题、标注、背景音乐。
💡 学习思路 面试时一个可演示的项目比 100 句自我介绍都有用。视频要控制在 3 分钟内,突出亮点。推荐看「Technical demo video best practices」相关文档。
✅ 具体练习
- 整合所有代码到一个 GitHub 仓库,写完整的 README 和架构图。
- 准备演示场景:设备数据采集 -> 实时看板 -> 报警 -> OEE 统计 -> AI 日报。
- 录制 3 分钟演示视频,上传 B 站/YouTube(设为不公开)。
- 在简历中附上项目链接和视频链接。
⚠️ 常见坑与注意事项
- 演示视频不要录屏报错和卡顿,提前彩排。
- 视频开头要有项目简介标题页,结尾有技术栈总结。
- GitHub 代码要有清晰的目录结构和注释。
Day29:简历定稿
🎯 学习目标 完成求职简历,针对工业软件岗位优化。
📌 技术重点
- 简历关键词:C# 上位机、MES 开发、工业软件、智能制造、Modbus、OPC UA、MQTT、WPF、WinForm、SQL Server、FastAPI、AI Agent。
- 项目描述包装:用 STAR 法则(情境-任务-行动-结果)描述项目,量化成果。
- 技能清单:按熟练程度分类(精通/熟练/了解),不要全部写精通。
- 简历排版:简洁专业,1-2 页,PDF 格式,文件名「姓名_工业软件工程师」。
- GitHub 整理:代码规范、README 完整、有 README 截图。
💡 学习思路 简历不是一次写好的,投几轮面试后根据反馈持续优化。先投 10 个试试水,看看哪些岗位回复率高,再针对性调整。推荐看「Technical resume writing guide」相关文档。
✅ 具体练习
- 制作简历(Word/PDF),重点突出工业软件项目经验。
- 整理 GitHub 仓库,确保 README 完整、有截图。
- 准备 1 分钟和 3 分钟自我介绍话术。
- 制作技术博客文章 1 篇(如「30 天从 Web 开发转型工业软件」),展示学习能力。
⚠️ 常见坑与注意事项
- 不要写「精通 XX」除非你真能现场手写实现,面试会被深挖。
- 项目经验用数据说话:「采集频率 100Hz」「支持 500 点并发」「报警响应<1 秒」。
- 简历文件名不要用「个人简历.pdf」,要用「张三C# 上位机工程师3 年.pdf」。
Day30:密集投递与面试准备
🎯 学习目标 开始密集投递,同时准备面试。
📌 技术重点
- 投递渠道:BOSS 直聘(工控岗位最多)、猎聘、智联招聘、拉勾(偏互联网)、脉脉(内推)。
- 投递策略:每天投 20-30 个,优先投「C# 上位机」「MES 开发」「工业软件工程师」「智能制造」关键词岗位。
- 面试准备:
- 技术面:C# 基础、TCP/串口通信、Modbus/OPC UA 协议、数据库设计、多线程。
- 项目面:准备 3 个项目的 STAR 描述,每个准备 2 个踩坑故事。
- HR 面:离职原因、职业规划、薪资期望、能否接受出差/加班。
- 薪资谈判:成都 C# 上位机/MES 岗位薪资范围 10K-20K,有项目经验可争取 15K-25K。
💡 学习思路 面试是双向选择,不要怕被拒。每次面试后记录问题和自己的回答,持续优化。推荐看「System design interview patterns」和「Behavioral interview preparation」相关文档。
✅ 具体练习
- 在 BOSS 直聘投递 30 个工业软件相关岗位。
- 准备面试题库:技术题 20 道 + 项目题 5 个 + HR 题 5 个。
- 模拟面试:找朋友或对着镜子练习自我介绍和项目描述。
- 建立投递台账:公司名、岗位、投递日期、状态、跟进提醒。
⚠️ 常见坑与注意事项
- 不要只投大公司,中小型集成商往往成长更快、接触面更广。
- 面试时带笔记本现场演示项目,比口头描述有力得多。
- 薪资谈判不要先报数字,先了解岗位预算范围。
✅ 每周自检清单
第 1 周末(Day7)自检
- ☐ 能否不看教程写出串口/TCP 采集程序?
- ☐ 能否实现多线程 UI 不卡顿?
- ☐ 能否写出带日志和异常处理的项目骨架?
- ☐ 项目代码是否已提交 GitHub?
第 2 周末(Day14)自检
- ☐ 能否正确解析 Modbus 字节序和倍率?
- ☐ 能否设计合理的数据库表结构?
- ☐ 能否画出系统架构图并解释数据流?
- ☐ 简历初稿是否完成?
第 3 周末(Day21)自检
- ☐ 能否讲清工单->工序->报工->追溯的完整流程?
- ☐ 能否拿出可演示的 OEE 看板和 MES 模块?
- ☐ 能否解释 OPC UA 与 Modbus 的适用场景和取舍?
- ☐ 能否用 OPC UA 客户端读取设备数据?
第 4 周末(Day30)自检
- ☐ 能否完整演示项目(设备采集->看板->AI 分析)?
- ☐ 能否说出 3 个以上踩坑点和解决方案?
- ☐ 简历和 GitHub 是否已优化到可投递状态?
- ☐ 是否已开始投递并收到面试通知?
⚠️ 三个常见陷阱
陷阱 1:只看教程不动手
很多开发者陷入「教程地狱」——看 100 个教程不如写 1 个完整项目。每天必须产出可展示的东西:代码、截图、演示视频。面试时展示的是作品,不是看过的教程数量。
陷阱 2:想先学 PLC 梯形图再转
你不需要会写 PLC 程序,你需要的是「读懂点位表」和「对接设备数据」。PLC 梯形图是电气工程师的活,你的价值在软件层。花时间在协议和系统架构上,回报率远高于学 PLC 编程。
陷阱 3:等项目完美了再投简历
这是最致命的陷阱。第 15 天就应该开始投简历。面试反馈是最好的学习方向标——面试官问什么,你就补什么,效率最高。而且边工作边学比全职学压力小,还有收入。
🚀 30 天后的进阶路线
第 2-3 个月:深化与入职
- 补 S7 协议(西门子)、MC 协议(三菱),能对接主流品牌 PLC。
- 学习 KepServerEX(工业数据采集平台),很多外企/大厂在用。
- SQL 性能优化:索引优化、查询优化、存储过程。
- 拿第一个 offer,入职工业软件/MES 方向公司。
第 4-6 个月:岗位深耕
- 在岗位上打通设备层->执行层->管理层全链路。
- 主导一个完整的 MES 模块开发(工单+报工+追溯)。
- 学习 ERP 接口对接(SAP/用友/金蝶)。
- 争取参与项目售前和技术方案编写。
第 7-12 个月:能力跃迁
- 叠加 Python 数据服务与 AI Agent 能力。
- 做工业数据分析和预测性维护项目。
- 往「工业数据工程师」或「智能制造解决方案工程师」方向转型。
- 薪资目标:成都 18K-25K,有经验可到 30K+。
💼 面试准备要点
简历关键词清单
| 项目 | 内容 | |
|---|---|---|
| 核心技术 | C#、.NET 8、WPF、WinForm、SQL Server、MySQL | |
| 工业协议 | Modbus TCP/RTU、OPC UA、MQTT、TCP Socket、串口通信 | |
| 工业系统 | MES、SCADA、WMS、OEE、工单管理、批次追溯 | |
| 框架工具 | Prism、EF Core、Dapper、Serilog、SignalR、FastAPI | |
| AI 能力 | 大模型 API、RAG、Prompt 工程、Python 数据分析 |
项目包装话术
- 「我设计并实现了一套基于 C# 的上位机数据采集系统,通过 Modbus TCP 协议采集 PLC 数据,支持实时曲线展示和报警监控,采集频率达到 100Hz,数据准确率 99.9%。」
- 「我开发了 MES 工单管理模块,实现了工单状态机、扫码过站追溯和 OEE 自动计算,帮助车间实现生产全过程数字化管理。」
- 「我基于 FastAPI 和 OPC UA 搭建了工业数据服务平台,集成 MQTT 设备接入和 AI 分析能力,实现了生产异常自动分析和日报自动生成。」
常见面试问题与回答思路
Q1:Modbus 和 OPC UA 有什么区别?什么时候用哪个?
答:Modbus 简单轻量,适合单一品牌设备、点对点通信场景;OPC UA 跨品牌、带安全认证和复杂数据模型,适合多系统对接和工业 4.0 场景。我的项目里,设备层用 Modbus(简单稳定),系统层用 OPC UA(标准化对接)。
Q2:串口粘包怎么处理?
答:串口是字节流没有消息边界,我实现了一个帧解析状态机:IDLE->HEADER->DATA->CHECKSUM->COMPLETE,每收到一个字节状态机推进一步,校验通过后输出完整帧。同时配合超时机制处理不完整帧。
Q3:多线程 UI 卡怎么优化?
答:核心原则是 UI 线程只做渲染。我用 Channel 实现生产者消费者模式:采集线程生产数据放入 Channel,处理线程消费并聚合,UI 线程通过 Dispatcher 定时从 Channel 取最新数据刷新。同时用 Stopwatch 做高频 UI 更新的节流。
Q4:为什么选 C# 而不是 Python 做上位机?
答:C# 在 Windows 工控领域是事实标准,WPF/WinForm 生态成熟,.NET 性能优秀,与 PLC/SCADA 等工业软件的集成度高。Python 更适合做数据服务和 AI 分析层,两者配合使用效果最佳。我的方案是 C# 做上位机和数据采集,Python 做数据服务和 AI 分析。
成都本地投递渠道
| 项目 | 内容 | |
|---|---|---|
| BOSS 直聘 | 搜索「C# 上位机」「MES 开发」「工业软件」,成都岗位最多 | |
| 猎聘 | 中高端岗位,适合有 3 年以上经验 | |
| 智联招聘 | 传统企业岗位多 | |
| 脉脉 | 内推渠道,可联系目标公司员工内推 | |
| 猎云网/工控网 | 工控行业垂直招聘 |
薪资参考(成都)
| 项目 | 内容 | |
|---|---|---|
| 初级 C# 上位机 | 8K-12K | |
| 中级 MES 开发 | 12K-18K | |
| 高级工业软件工程师 | 18K-25K | |
| 智能制造解决方案工程师 | 20K-30K | |
| 有 AI 能力加分 | 可上浮 10%-20% |