目录

上篇:基础与界面开发篇

一、C#面向对象基础与设计模式(工具化)

二、上位机界面开发技术选型:WinForm vs WPF(工具化)

三、WPF深入详解(工具化)

中篇:通信与硬件交互篇(Part 1)

四、通信与硬件交互(工具化)

4.1 串口通信

4.2 Modbus协议

4.3 PLC交互

4.4 运动控制卡

4.5 工业相机

中篇:通信与硬件交互篇(Part 2)

4.6 IO采集模块

4.7 通信协议进阶分析

4.8 HslCommunication库

五、数据处理与持久化(工具化)

5.1 数据持久化方式

5.2 日志管理

六、版本控制与协作(工具化)

6.1 Git客户端工具

6.2 Git工作流程

七、上位机系统架构与开发流程(工具化)

7.1 系统设计工具

7.2 开发与调试工具

7.3 部署工具

7.4 配置管理

7.5 日志监控与运维

八、补充:常用第三方库清单

九、总结与学习路径



上篇:基础与界面开发篇

一、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:轻量级框架,提供 ViewModelBaseRelayCommand 等基础功能,适合中小型项目和学习入门。

    • 示例(使用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 ExplorerMQTT.fxMQTTX。用于订阅主题、发布消息,可视化查看消息内容。

      • 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

    • GitHub地址https://github.com/dathlin/HslCommunication

    • 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.TraceTextWriter 手动写入文件。

  • 结构化日志

    • Serilog:最推荐的日志库。

      • NuGet包SerilogSerilog.Sinks.FileSerilog.Sinks.ConsoleSerilog.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.UIMyApp.BLLMyApp.DAL)。

    • Enterprise ArchitectVisioDraw.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读写(含旧格式)
PDF iTextSharp / iText7 PDF生成
单元测试 xunit 测试框架
Moq 模拟
依赖注入 Microsoft.Extensions.DependencyInjection DI容器
MVVM框架 Prism.Core Prism核心
Prism.Unity Prism + Unity容器
Prism.DryIoc Prism + DryIoc
MvvmLightLibsStd10 MVVM Light(已停止更新)

九、总结与学习路径

  1. 基础阶段

    • 熟练掌握C#语法、面向对象、委托、事件、泛型。

    • 使用Visual Studio进行简单的WinForm开发,熟悉控件和事件。

  2. 进阶阶段

    • 深入学习WPF(XAML、数据绑定、命令、样式模板、MVVM)。

    • 学习常用的设计模式(单例、工厂、观察者)。

    • 掌握多线程编程(Task、async/await、线程同步)。

  3. 通信与硬件阶段

    • 通过虚拟串口和Modbus模拟器学习串口编程和Modbus协议。

    • 使用OPC UA模拟器和UaExpert学习OPC UA客户端开发。

    • 如果有条件,购买便宜的PLC(如西门子LOGO!或三菱FX系列)或开发板进行实战。

  4. 系统架构阶段

    • 学习使用分层架构、依赖注入、日志框架、ORM。

    • 掌握Git进行版本管理。

    • 学习如何制作安装包和自动更新。

  5. 项目实战

    • 选择一个综合项目(如温湿度监控系统、小型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>

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐