上位机核心知识点
本文系统介绍了C#上位机开发的核心技术与工具链。内容涵盖:1)基础开发(面向对象、设计模式、WinForm/WPF界面);2)硬件交互(串口通信、Modbus协议、PLC控制、运动控制卡);3)数据处理(Excel/JSON/数据库持久化、日志管理);4)系统架构(MVVM模式、分层设计、版本控制)。提供了具体代码示例和推荐工具(Visual Studio、Serilog、NModbus等),并详
目录
二、上位机界面开发技术选型:WinForm vs WPF(工具化)

上篇:基础与界面开发篇
一、C#面向对象基础与设计模式(工具化)
-
开发工具:所有示例和实战都基于 Microsoft Visual Studio 2022(社区版/企业版)。你将使用其IntelliSense(智能感知)、调试器(设置断点、查看变量)和重构工具。
-
设计模式实战:
-
单例模式:以日志记录器为例,使用 Serilog 库。通过NuGet安装
Serilog,并在一个静态类中封装单例日志实例,保证全局只有一个日志写入器,避免文件锁冲突。csharp
public sealed class Logger { private static readonly Logger _instance = new Logger(); static Logger() { } private Logger() { Log.Logger = new LoggerConfiguration().WriteTo.File("log.txt").CreateLogger(); } public static Logger Instance => _instance; public void Info(string msg) => Log.Information(msg); } -
工厂模式:处理多种PLC(如西门子S7-1200、三菱FX5U)。定义
IPlcDriver接口,由PlcFactory根据配置文件(如appsettings.json)返回具体驱动实例。csharp
public interface IPlcDriver { bool Connect(); bool ReadBool(string address); } public class SiemensDriver : IPlcDriver { ... } public class MitsubishiDriver : IPlcDriver { ... } public static class PlcFactory { public static IPlcDriver Create(string type) => type switch { "Siemens" => new SiemensDriver(), "Mitsubishi" => new MitsubishiDriver(), _ => throw new NotSupportedException() }; } -
观察者模式:使用C#内置的
event关键字实现。典型例子是SerialPort类的DataReceived事件。当串口有数据时,所有订阅了该事件的方法(如UpdateUI)都会自动被调用。 -
策略模式:处理不同的数据解析算法(如JSON、Modbus、CSV)。定义
IParseStrategy接口,实现不同解析类,程序运行时根据协议类型动态选择解析算法。
-
二、上位机界面开发技术选型:WinForm vs WPF(工具化)
-
具体产品/工具:
-
WinForm:在Visual Studio中新建项目时选择
Windows Forms 应用(.NET Framework)或.NET Windows Forms。工具箱中直接拖拽控件(Button, TextBox等)。 -
WPF:在Visual Studio中新建项目时选择
WPF 应用(.NET)。你会看到设计器和XAML代码编辑窗。
-
-
实际应用:
-
工业控制(WinForm):如开发一个简单的电机启停控制面板,界面包含几个大按钮和状态指示灯,要求响应快,开发周期短。
-
商业软件(WPF):如开发一个生产线数据监控大屏,需要包含实时曲线(可使用
LiveCharts或ScottPlot库)、3D模型展示(使用HelixToolkit)、以及流畅的页面切换动画。
-
三、WPF深入详解(工具化)
-
开发工具与辅助:
-
Visual Studio:主要用于编写XAML和C#代码。
-
Blend for Visual Studio:一个专门设计XAML界面的工具,用于快速绘制复杂形状、制作动画(时间线)、设置样式触发器。你可以在Visual Studio安装器中勾选安装。
-
运行时调试工具:Snoop 或 WPF Inspector。这些工具可以在程序运行时实时查看和修改任何元素的DataContext、属性值,是排查绑定问题的神器。
-
-
数据绑定(示例化):
xml
<TextBox Text="{Binding UserName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> -
值转换器(Value Converter):
-
产品示例:工业上位机中,常将PLC传来的 0/1 数值 绑定到界面上的 “启动/停止”文本 或 “红色/绿色”指示灯。你需要自定义一个继承自
IValueConverter的类,如IntToStatusColorConverter。csharp
public class IntToStatusColorConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (int)value == 1 ? Brushes.Green : Brushes.Red; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException(); }
-
-
控件模板(ControlTemplate):
-
工具示例:使用Blend或手动编写XAML,重写
Button的ControlTemplate,将其变为带有圆角、渐变背景、发光效果的工业级按钮。xml
<ControlTemplate TargetType="Button"> <Border Background="{TemplateBinding Background}" CornerRadius="5" BorderBrush="DarkGray" BorderThickness="1"> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> </Border> </ControlTemplate>
-
-
MVVM模式:
-
框架工具:
-
Prism:用于构建复杂、模块化的XAML应用。提供导航服务、依赖注入(支持Unity或DryIoc容器)、命令(DelegateCommand)、事件聚合器(EventAggregator)等。
-
MVVM Light Toolkit:轻量级框架,提供
ViewModelBase、RelayCommand等基础功能,适合中小型项目和学习入门。
-
-
示例(使用Prism):
csharp
public class MainViewModel : BindableBase { private string _title; public string Title { get => _title; set => SetProperty(ref _title, value); } public DelegateCommand ClickCommand { get; private set; } public MainViewModel() { ClickCommand = new DelegateCommand(ExecuteClick); } private void ExecuteClick() => Title = "Clicked"; }
-
-
多线程与UI更新:
-
示例:使用
Task.Run在一个后台线程中执行SerialPort.Read()读取数据。读取完成后,如果需要更新界面上的TextBox,必须使用Dispatcher.Invoke或Dispatcher.BeginInvoke将操作封送到UI线程执行,否则会抛出异常。csharp
Task.Run(() => { byte[] data = serialPort.ReadExisting(); // 假设这是耗时操作 Application.Current.Dispatcher.Invoke(() => { textBox1.Text = Encoding.ASCII.GetString(data); }); }); -
推荐做法:使用
async/await结合Task.Run,并在需要更新UI的代码行直接写,因为await会捕获当前同步上下文,如果原来在UI线程,await之后会自动回到UI线程(但Task.Run内的代码还是在后台线程)。csharp
private async void Button_Click(object sender, RoutedEventArgs e) { byte[] data = await Task.Run(() => serialPort.ReadExisting()); textBox1.Text = Encoding.ASCII.GetString(data); // 已在UI线程 }
-
中篇:通信与硬件交互篇(Part 1)
四、通信与硬件交互(工具化)
-
通用工具:
-
虚拟串口软件:VSPD (Virtual Serial Port Driver) 或 Free Virtual Serial Ports。可以在你的电脑上创建一对互相连通的虚拟串口(如COM3和COM4),用于在没有真实硬件的情况下调试串口程序。
-
串口调试助手:SSCOM、格西调试助手 或 MThings。用于手动发送和接收串口数据,验证你的上位机程序是否正确。
-
网络调试助手:SocketTool 或 NetAssist。用于调试TCP/IP和UDP通信。
-
协议分析工具:Wireshark。工业以太网调试的必备工具。可以抓取Modbus TCP、Profinet、EtherNet/IP等协议包,逐字节分析通信过程。
-
4.1 串口通信
-
硬件产品示例:
-
USB转串口模块:基于 CH340 或 FT232 芯片的转换器,用于电脑没有原生串口时连接RS232设备。
-
RS485转换器:如 宇泰 UT-2201,用于将电脑USB口转换为RS485接口,连接工业仪表、传感器。
-
-
传感器/设备示例:
-
维特智能 (WIT-Motion) 的 姿态传感器 (如WT901C-485)。这类传感器通常通过RS485接口和Modbus协议输出角度、加速度等数据。他们的官网提供了详细的 C# SDK和例程,展示了如何打开串口、发送读取命令、解析返回的Modbus数据包。
-
-
C# SerialPort类:
-
NuGet包:直接使用
System.IO.Ports。 -
实操:创建一个实例
SerialPort sp = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);,然后sp.Open();。注册DataReceived事件时需要注意跨线程更新UI。csharp
sp.DataReceived += (sender, e) => { int bytesToRead = sp.BytesToRead; byte[] buffer = new byte[bytesToRead]; sp.Read(buffer, 0, bytesToRead); // 更新UI必须使用Invoke Dispatcher.Invoke(() => textBox1.AppendText(Encoding.ASCII.GetString(buffer))); };
-
4.2 Modbus协议
-
库工具:
-
NModbus (现为NModbus4 / NModbus):工业界广泛使用的稳定库。NuGet安装。它提供了Modbus ASCII/RTU/TCP的主站和从站实现。
-
EasyModbus:一个更简单易用的库,封装层次更高,适合快速开发和学习。
-
-
模拟器工具:
-
Modbus Slave (从站模拟器):Witte Software产品。它可以模拟一个Modbus设备(如PLC、仪表),创建多个寄存器区,并手动改变寄存器的值。你的上位机作为主站去连接它,可以验证读写功能是否正确。
-
Modbus Poll (主站模拟器):与Slave对应,它模拟Modbus主站,用于测试你的设备(或你写的从站程序)是否响应正常。
-
-
代码示例(NModbus4):
csharp
using Modbus.Device; using System.IO.Ports; SerialPort port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One); port.Open(); IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port); // 读取从站地址为1,起始地址0的3个保持寄存器 ushort[] registers = master.ReadHoldingRegisters(1, 0, 3);
4.3 PLC交互
-
PLC品牌与软件:
-
西门子 (Siemens):博途 (TIA Portal) 软件 + PLCSIM Advanced(用于创建虚拟PLC,与上位机在同一台电脑通信)。
-
罗克韦尔 (Rockwell):Studio 5000 + Emulate 5000(虚拟控制器)。
-
汇川、信捷等国产PLC:都有自己的编程软件,但通常都支持 Modbus TCP/RTU 或 OPC UA。
-
-
C# 通信库:
-
S7netplus:用于与西门子S7系列PLC(通过S7协议)通信的明星库。NuGet可安装。它支持读写I区、Q区、M区、DB块等所有数据区。
csharp
using S7.Net; Plc plc = new Plc(CpuType.S71200, "192.168.0.1", 0, 1); plc.Open(); object value = plc.Read("DB1.DBW0"); -
HSLCommunication:国产强大工业通信库,支持几乎所有主流PLC以及Modbus等多种协议。
csharp
using HslCommunication.Profinet.Siemens; SiemensS7Net plc = new SiemensS7Net(SiemensPLCS.S1200, "192.168.0.1"); var read = plc.ReadByte("DB1.0"); if (read.IsSuccess) Console.WriteLine(read.Content); -
libplctag:跨平台库,专门用于与罗克韦尔(AB)的PLC(通过CIP协议,即EtherNet/IP)通信。
-
4.4 运动控制卡
-
品牌产品:
-
固高 (Googol):如 GT系列。他们提供基于C语言的 API动态库 (DLL)。C#上位机需要通过 P/Invoke (平台调用) 技术调用这些DLL中的导出函数。
-
雷赛 (Leadshine):知名运动控制产品供应商,提供类似DLL接口。
-
软控制(CODESYS):越来越多的控制器使用 CODESYS。上位机可通过 OPC UA 或 Modbus TCP 与CODESYS Runtime通信。
-
-
开发工具:
-
DLL Export Viewer:查看固高提供的DLL(如
gts.dll)中导出的所有函数名,帮助你正确进行P/Invoke声明。 -
P/Invoke Interop Assistant:自动将C/C++函数声明转换为C# P/Invoke声明的工具。
-
-
封装示例:
csharp
[DllImport("gts.dll", CallingConvention = CallingConvention.Cdecl)] public static extern short GT_Open(); [DllImport("gts.dll")] public static extern short GT_AxisMove(short axis, double pos, double vel, double acc, double dec, double smoothTime); public class GoogolController { public short Open() => GT_Open(); public short MoveAbs(short axis, double pos, double vel, double acc, double dec) => GT_AxisMove(axis, pos, vel, acc, dec, 0); }
4.5 工业相机
-
品牌与SDK:
-
海康威视 (Hikvision):提供 MVS (Machine Vision Software) 软件套件和SDK。SDK中包含C#示例代码,演示了枚举相机、设置参数、软触发采集、注册回调函数获取图像数据。
-
大恒图像 (Daheng Imaging):提供 Galaxy SDK,同样支持C#。
-
巴斯勒 (Basler):提供 pylon SDK,文档齐全,完美支持C#。
-
-
图像处理库:
-
OpenCVSharp:OpenCV在C#下的封装。用于对相机采集到的原始图像进行滤波、边缘检测、轮廓查找等。
csharp
using OpenCvSharp; Mat img = Cv2.ImRead("image.jpg"); Mat gray = new Mat(); Cv2.CvtColor(img, gray, ColorConversionCodes.BGR2GRAY); Cv2.ImShow("Gray", gray); -
AForge.NET / Accord.NET:包含图像处理、神经网络等模块。
-
Emgu CV:另一个流行的OpenCV .NET封装。
-
中篇:通信与硬件交互篇(Part 2)
4.6 IO采集模块
-
硬件品牌:
-
研华 (Advantech):ADAM-4000系列远程I/O模块,支持Modbus RTU/TCP。
-
泓格 (ICP DAS):7000系列I/O模块,同样支持Modbus。
-
MOXA:串口服务器和工业交换机,也提供I/O模块。
-
-
信号类型:
-
数字量:开关信号,如接近开关、光电开关。通过DI模块读取0/1。
-
模拟量:4-20mA电流信号(如压力变送器)或0-10V电压信号。通过AI模块读取,然后进行工程值转换。
-
脉冲量:如编码器输出。通过高速计数器模块采集脉冲个数。
-
-
工具:使用 Modbus Poll 或 ModScan 直接读取I/O模块的寄存器,验证通信是否正常。
4.7 通信协议进阶分析
-
EtherNet/IP:
-
工具:
-
Wireshark:抓包分析EtherNet/IP通信,了解其封装结构(TCP端口44818用于显式报文,UDP端口2222用于隐式I/O报文)。
-
C#库:
libplctag可用于连接AB的PLC,支持EtherNet/IP。 -
模拟器:罗克韦尔的 Studio 5000 Logix Emulate 用于创建虚拟控制器进行测试。
-
-
-
PROFINET:
-
工具:
-
西门子:TIA Portal中的 PLCSIM Advanced 支持PROFINET通信仿真。
-
分析工具:PROFINET Inspector 或 Wireshark(需安装PROFINET解析插件)。
-
C#库:可以使用 Snap7(虽然主要用于S7协议,但也支持一些PROFINET基础功能),或者使用OPC UA间接连接。
-
-
-
MQTT:
-
工具:
-
Broker(服务器):Mosquitto(开源),可在本地Docker运行:
docker run -it -p 1883:1883 eclipse-mosquitto -
客户端工具:MQTT Explorer、MQTT.fx、MQTTX。用于订阅主题、发布消息,可视化查看消息内容。
-
C#库:MQTTnet(高性能、开源)。NuGet安装。
csharp
using MQTTnet; using MQTTnet.Client; var factory = new MqttFactory(); var mqttClient = factory.CreateMqttClient(); var options = new MqttClientOptionsBuilder().WithTcpServer("localhost", 1883).Build(); await mqttClient.ConnectAsync(options); await mqttClient.SubscribeAsync("sensor/temperature"); mqttClient.UseApplicationMessageReceivedHandler(e => { Console.WriteLine($"Received: {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}"); }); -
-
-
Wireshark高级用法:
-
过滤表达式:
modbus过滤Modbus TCP包;ip.addr == 192.168.1.100过滤指定IP;tcp.port == 502过滤Modbus默认端口。 -
分析:逐层查看TCP/IP包,看到应用层数据。对于Modbus,可以看到事务标识符、协议标识符、单元ID、功能码、寄存器地址和数据。
-
4.8 HslCommunication库
-
具体信息:
-
作者:Richard.Hu
-
NuGet包:
HslCommunication -
支持的协议:西门子S7、三菱MC、欧姆龙Fins、Modbus RTU/TCP、AB PLC、松下PLC、基恩士PLC、台达PLC、Fanuc机器人等,还包括串口/网口设备、虚拟串口、文件传输等。
-
使用示例:
csharp
using HslCommunication.Profinet.Siemens; SiemensS7Net plc = new SiemensS7Net(SiemensPLCS.S1200, "192.168.0.1"); OperateResult<byte> read = plc.ReadByte("DB1.0"); if (read.IsSuccess) { Console.WriteLine("读取成功:" + read.Content); }
-
五、数据处理与持久化(工具化)
5.1 数据持久化方式
| 格式 | 库/工具 | 说明 | 代码示例/应用场景 |
|---|---|---|---|
| Excel | EPPlus | 开源库,读写Excel 2007+文件(.xlsx)。支持图表、公式等。 | 导出报表:using (var package = new ExcelPackage(new FileInfo("report.xlsx"))) { ... } |
| NPOI | 支持老格式(.xls)和.xlsx。功能全面。 | 常用于需要兼容老Office的场景。 | |
| JSON | Newtonsoft.Json (Json.NET) | 最流行的JSON库,支持LINQ to JSON。 | 序列化配置对象:string json = JsonConvert.SerializeObject(config); |
| System.Text.Json | .NET Core 3.0+内置,高性能,减少依赖。 | 微软推荐用于新项目。 | |
| XML | XmlSerializer | .NET内置,用于将对象序列化为XML或反序列化。 | 配置文件读写,需标记类为 [Serializable] 或使用 [XmlRoot] 等。 |
| LINQ to XML | System.Xml.Linq,提供简洁API操作XML。 |
手动构建或查询XML文档。 | |
| 数据库 | Entity Framework Core | ORM框架,支持多种数据库(SQL Server, SQLite, PostgreSQL等)。 | 用于复杂业务逻辑,如MES系统。Code First方式定义数据模型。 |
| Dapper | 轻量级微ORM,性能极高,接近原生ADO.NET。 | 适合高性能数据采集存储,写SQL语句直接映射对象。 | |
| SQLite | 嵌入式数据库,文件型,无需安装服务。常用于本地数据缓存。 | 使用 Microsoft.Data.Sqlite 或 System.Data.SQLite。 |
|
| SQL Server Express LocalDB | 轻量级SQL Server,适合开发测试。 | 用于开发环境。 |
5.2 日志管理
-
传统日志:
System.Diagnostics.Trace、TextWriter手动写入文件。 -
结构化日志:
-
Serilog:最推荐的日志库。
-
NuGet包:
Serilog,Serilog.Sinks.File,Serilog.Sinks.Console,Serilog.Sinks.Seq。 -
配置示例:
csharp
Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .WriteTo.File("logs/log-.txt", rollingInterval: RollingInterval.Day) .WriteTo.Seq("http://localhost:5341") // Seq服务器地址 .CreateLogger(); Log.Information("应用程序启动"); -
Seq:一个日志可视化服务器,可以接收Serilog发送的日志,提供搜索、聚合、仪表盘功能。可免费使用。
-
-
NLog:另一个流行的日志框架,也支持结构化输出和多种目标。
-
Elastic Stack (ELK):Elasticsearch + Logstash + Kibana。可用于大规模日志收集和分析。上位机日志通过Filebeat或直接发送到Logstash/Elasticsearch。
-
六、版本控制与协作(工具化)
6.1 Git客户端工具
-
GUI客户端:
-
GitHub Desktop:简单易用,适合初学者。
-
SourceTree:功能强大,支持复杂分支操作。
-
TortoiseGit:集成到Windows资源管理器右键菜单。
-
Visual Studio 自带Git工具:直接集成在IDE中,方便提交、推送、解决冲突。
-
-
命令行:Git官方命令行工具,功能最全。
-
代码托管平台:
-
GitHub:最流行,开源项目首选。
-
GitLab:支持私有仓库,CI/CD功能强大。
-
Gitee:国内平台,速度快。
-
Azure DevOps:微软产品,提供完整的DevOps工具链(代码托管、CI/CD、项目管理)。
-
6.2 Git工作流程
-
基本流程:
git clone->git checkout -b feature-> 开发 ->git add->git commit->git push-> 创建Pull Request -> 代码审查 ->git merge。 -
冲突解决:使用
git mergetool或 IDE 内置的合并工具(如VS的合并编辑器)。
七、上位机系统架构与开发流程(工具化)
7.1 系统设计工具
-
架构设计:
-
Visual Studio 项目模板:创建分层项目(如
MyApp.UI,MyApp.BLL,MyApp.DAL)。 -
Enterprise Architect、Visio、Draw.io:用于绘制架构图、类图、时序图。
-
-
数据库设计:
-
SSMS (SQL Server Management Studio):管理SQL Server。
-
Azure Data Studio:轻量级跨平台数据库工具。
-
DBeaver:通用的数据库管理工具。
-
EF Core Power Tools:Visual Studio扩展,可以从数据库反向工程生成实体类和DbContext。
-
7.2 开发与调试工具
-
单元测试:
-
xUnit / NUnit / MSTest:测试框架。
-
Moq:模拟对象库,用于隔离依赖。
-
-
性能分析:
-
Visual Studio 诊断工具(性能探查器):CPU使用率、内存分配。
-
JetBrains dotMemory / dotTrace:专业的内存和性能分析工具。
-
-
代码质量:
-
SonarQube:持续检查代码质量、漏洞。
-
FxCop / .NET Compiler Platform (Roslyn) 分析器:内置代码分析。
-
StyleCop:检查代码风格一致性。
-
7.3 部署工具
-
安装包制作:
-
Visual Studio Installer Projects:VS扩展,用于创建MSI安装包。
-
Inno Setup:免费脚本驱动的安装工具,可创建自定义安装程序。
-
WiX Toolset:基于XML,功能强大,但学习曲线陡。
-
Advanced Installer:商业软件,提供可视化界面。
-
-
自动更新:
-
ClickOnce:VS内置,简单易用,适用于WinForm/WPF,但有限制。
-
Squirrel.Windows:开源,可以创建增量更新,支持GitHub Releases。
-
自己实现:通过Web API检查版本,下载更新包,覆盖文件(需处理文件占用问题)。
-
7.4 配置管理
-
配置文件格式:
-
app.config / web.config:传统.NET Framework XML配置。
-
appsettings.json:.NET Core/5+ 推荐,使用JSON。
-
环境变量:适用于容器化部署。
-
-
配置框架:
-
Microsoft.Extensions.Configuration:.NET Core内置配置系统,支持多种配置源(JSON、XML、命令行、环境变量)。
-
读取示例:
csharp
var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); IConfiguration config = builder.Build(); string comPort = config["SerialPort:PortName"];
-
7.5 日志监控与运维
-
远程日志查看:
-
Seq:实时查看结构化日志。
-
ELK Stack:集中式日志管理。
-
-
系统健康监控:
-
性能计数器:使用
System.Diagnostics.PerformanceCounter收集CPU、内存使用情况。 -
Application Insights:Azure提供的应用性能监控服务。
-
八、补充:常用第三方库清单
为了方便开发,整理一份常用NuGet包列表:
| 类别 | 包名 | 用途 |
|---|---|---|
| 通信 | System.IO.Ports |
串口通信 |
NModbus4 |
Modbus协议 | |
EasyModbusTCP |
简单Modbus | |
S7netplus |
西门子PLC S7协议 | |
HslCommunication |
工业通信万能库 | |
MQTTnet |
MQTT客户端/服务器 | |
MQTTnet.Extensions.ManagedClient |
托管MQTT客户端 | |
| 界面 | LiveCharts / LiveCharts2 |
WPF/WinForm图表 |
ScottPlot |
简单绘图库 | |
OxyPlot |
跨平台绘图 | |
MaterialDesignThemes |
WPF Material Design样式 | |
HandyControl |
WPF控件库 | |
MahApps.Metro |
WPF Metro样式 | |
| 日志 | Serilog |
结构化日志 |
Serilog.Sinks.File |
文件输出 | |
Serilog.Sinks.Seq |
Seq输出 | |
NLog |
日志框架 | |
| 数据库 | Microsoft.EntityFrameworkCore |
EF Core |
Microsoft.EntityFrameworkCore.SqlServer |
SQL Server驱动 | |
Microsoft.EntityFrameworkCore.Sqlite |
SQLite驱动 | |
Dapper |
微ORM | |
System.Data.SqlClient |
ADO.NET SQL Server | |
| JSON | Newtonsoft.Json |
Json.NET |
System.Text.Json |
内置JSON | |
| Excel | EPPlus |
Excel读写 |
NPOI |
Excel读写(含旧格式) | |
iTextSharp / iText7 |
PDF生成 | |
| 单元测试 | xunit |
测试框架 |
Moq |
模拟 | |
| 依赖注入 | Microsoft.Extensions.DependencyInjection |
DI容器 |
| MVVM框架 | Prism.Core |
Prism核心 |
Prism.Unity |
Prism + Unity容器 | |
Prism.DryIoc |
Prism + DryIoc | |
MvvmLightLibsStd10 |
MVVM Light(已停止更新) |
九、总结与学习路径
-
基础阶段:
-
熟练掌握C#语法、面向对象、委托、事件、泛型。
-
使用Visual Studio进行简单的WinForm开发,熟悉控件和事件。
-
-
进阶阶段:
-
深入学习WPF(XAML、数据绑定、命令、样式模板、MVVM)。
-
学习常用的设计模式(单例、工厂、观察者)。
-
掌握多线程编程(Task、async/await、线程同步)。
-
-
通信与硬件阶段:
-
通过虚拟串口和Modbus模拟器学习串口编程和Modbus协议。
-
使用OPC UA模拟器和UaExpert学习OPC UA客户端开发。
-
如果有条件,购买便宜的PLC(如西门子LOGO!或三菱FX系列)或开发板进行实战。
-
-
系统架构阶段:
-
学习使用分层架构、依赖注入、日志框架、ORM。
-
掌握Git进行版本管理。
-
学习如何制作安装包和自动更新。
-
-
项目实战:
-
选择一个综合项目(如温湿度监控系统、小型MES、运动控制Demo)从头到尾实现一遍,巩固知识。
-
资料整理来自:<iframe src="//player.bilibili.com/player.html?isOutside=true&aid=115519604654327&bvid=BV15QkXB2EBg&cid=33859767351&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
更多推荐



所有评论(0)