工控上位机开发(C# × 西门子/汇川 PLC)的核心知识,源自约 50 篇系列教程的合并提炼(affweb #398–#451,其中 6 组完全重复的剪藏已合并)。

通信方式选型总览(#405/#410)

  • 串口:PPI(仅 200/200Smart)、ModbusRTU(主/从);
  • 以太网:S7 协议(最省事,无需写 PLC 程序)、ModbusTCP、开放 TCP(UDP/TCP socket);
  • OPC:PC Access / SIMATIC NET / KepServer(重但通用);
  • 官方答案:WinCC(HMI 级)、CP5611 卡、CM1241、OPC 是西门子认可的 four 条路。

S7 通信必做配置(#405 等)

勾选”允许来自远程对象的 PUT/GET 通信访问”;DB 块取消”优化的块访问”(否则无偏移地址);确认地址有效;必要时调通信负载。

S7netplus 库要点(#408/#424/#430/#438)

  • CpuType 枚举:200Smart 用 S71200 驱动、V 区用 DB1 代替;
  • 类型映射:Bit→bool / Word→ushort / Int→short / Real→float;
  • 1200/1500 默认 rack=0 slot=0(300/400 是 slot=2);端口 102;
  • 字符串坑:需先读长度字节再读内容;S7-1500 String 占 256 字节(前 2 字节为总长/当前长)、WString 512 字节且高低字节序与 C# 相反;单次读取上限 ≈ PDU 220 字节;
  • 读到的都是大端序,x86 需字节序转换。

协议层(#429/#425,手搓 S7 时)

S7 通信 = TCP + TPKT + COTP + S7 连接四层握手;SetupConnection 报文固定 25 字节(03 00 00 19 02 F0 80 32…);MaxPDUSize 从响应第 18-19 字节取;单次读取上限 = MaxPDUSize-18;通信组上限 20 个。库选型:S7netplus(.NET 原生)、Snap7(C 库二次封装)、HslCommunication(多品牌商业库)。

零成本仿真环境(#409/#423/#422/#436)

  • 路线一:TIA Portal + PLCSIM Advanced(虚拟网卡配静态 IP;V3 需先装 WinPcap);
  • 路线二:PLCSIM + NetToPLCSIM——必须先启动 NetToPLCSIM 再启仿真;102 端口被占点”是”;
  • 安装坑:防火墙、360、IP 规划、授权文件、PG-PC 接口顺序(博途 V18 + Advanced V5.0 全流程)。

Modbus 要点(#427/#437/#446)

  • 功能码-地址区间:01 线圈 00001- / 02 离散 10001- / 03 保持 40001- / 04 输入 30001-;
  • NModbus4 读到的都是 ushort,short/float 写入需转换链;
  • 汇川 AM402/H3U:MW↔D 寄存器映射,单次最多读 123 个寄存器,断网必须重连设计;
  • 调试用 ModbusPoll/ModbusSlave + vspd 虚拟串口联调。

自定义协议示例:宇电 AIBUS(#417/#418)

读 = 地址代号+52H+参数代号+00+00+校验;写 = 地址代号+43H+参数代号+低字节+高字节+校验;校验码 = (参数代号×256 + 82或67 + 值 + ADDR) 取低字节;返回固定 10 字节(PV/SV/MV/参数/校验)。

工程化配套

  • 数据库:ADO.NET SqlHelper 三版演进(参数化→可变参数)→ EF Core;
  • 架构参考:立体车库开源项目(IPlcCommunicationService 接口 + DDD 分层 + WebAPI + 依赖注入 + NUnit InMemory 测试);
  • UI:HZH_Controls 工业风控件库(管道/水泵/传送带/温度计);GDI+ 自绘控件(OnPaint 分层绘制);
  • 实战案例:温控监控系统(SQLite 存储+多线程断线重连+ini 配置)、S7.NET+Log4Net+SQLSugar+MySQL 的 IoT 上云。

原始素材

  • #398 以太网通信概述
  • #405 C 上位机与西门子PLC通信方式分析 - 哔哩哔
  • #408 C 上位机与西门子PLC数据交互_s7netpl
  • #409 C 与西门子PLC通讯——新手快速入门_c 西门
  • #410 S7-1200与上位机程序通信都有哪些方式?-找
  • #417 C 与宇电温控表自定义协议通信实例
  • #418 【免费学习】自由口通信上位机实战案例
  • #422 西门子PLC上位机测试_西门子上位机调试-CSD
  • #423 C 西门子PLC上位机开发环境搭建_c 博途 西
  • #424 C 与西门子PLC通信上位机程序_c 上位机源码
  • #425 信捷plc485通信上位机_基于Snap7实现与
  • #427 Modbus测试工具ModbusPoll与Mod
  • #429 C 与西门子PLC通讯——手搓S7通讯协议_c
  • #430 C 使用S7NetPlus以及PLCSIM Ad
  • #436 c 与西门子plc通讯_c 和西门子plc联机-
  • #437 C 与西门子PLC1500的ModbusTcp服
  • #438 C 中使用S7.net与西门子PLC通讯-CSD
  • #446 汇川AM402、H3U和上位机C Modebus
  • #451 上位机开发UI界面重不重要?

相关页面

出处 · https://github.com/szwnba/affweb/issues/ (398-451 系列, 417, 418, 427, 446)