简介这份资源面向工业自动化工程师与PLC编程学习者聚焦西门子S7-1200与SQL Server数据库的集成方案帮助解决控制器数据集中存储、查询与分析的难题。压缩包共19个文件约8.73MB以9个png截图、5个xml配置文件为主另含xsl、plf、pma、idx及ap13工程文件涵盖TIA项目配置、通信参数与运行日志等模块便于对照搭建实验环境。资源围绕PLC编程、以太网通信、数据库建表与数据映射等关键环节展开可帮助读者理解S7-1200通过TCP/IP与SQL Server交互的完整思路并参考示例配置排查通信与数据读写问题。目前已有4841人学习下载适合具备一定PLC与数据库基础、希望实现自动化系统与数据库无缝集成的技术人员参考。1. 当产线数据不再“只读不写”S7-1200 直连 SQL Server 的真实需求很多做自动化上位机的开发者都遇到过这个场景现场一台西门子 S7-1200 PLC 跑得好好的产线数据在 DB 块里跳来跳去但管理层想要的是能查询、能追溯、能出报表的关系型数据库记录。传统做法是加一台工控机跑 WinCC 或组态软件再通过 OPC 转发到数据库链路长、成本高、故障点还多。这个项目要解决的就是把中间环节砍掉——让 S7-1200 通过以太网直接和 SQL Server 对话把过程数据写进表里也能从表里读配方和参数。适合谁适合手里有 1200 系列 PLC、需要做 MES 轻量化对接、或者想给设备加数据追溯功能的一线开发和自动化工程师。下面从通信原理到代码落地把这条路走通。2. 通信链路拆解S7-1200 到底怎么和 SQL Server 说上话2.1 先搞清楚一个事实PLC 不会原生说 T-SQLS7-1200 的通信能力集中在 PROFINET、S7 通信、开放式用户通信OUC这几块。它支持 TCP/IP、ISO-on-TCP 这类底层协议但绝对不可能在 PLC 里跑一个 SQL 客户端。所以“直连”的本质是PLC 通过 TCP 把数据发给一个中间服务由这个服务去操作 SQL Server。这个中间服务可以跑在工控机、边缘网关或者一台常开的服务器上。项目里常见的做法是用 C# 写一个 Windows 服务或者用 Python 起一个常驻进程监听 PLC 发来的连接和数据包。提示别被“直连”两个字误导PLC 侧只负责建立 TCP 连接和收发字节流SQL 语句的拼装和执行全在服务端完成。2.2 两种主流通信方式S7 协议 vs 开放式用户通信如果你用 C# 开发S7.Net 或 Sharp7 这类库可以直接读写 PLC 的 DB 块不需要在 PLC 侧写任何通信代码。这种方式适合服务端主动轮询采集。另一种是 PLC 主动推送在 TIA Portal 里调用 TSEND_C 和 TRCV_C 指令让 PLC 作为客户端去连接服务端的 TCP 端口。两种方式各有适用场景下面用表格对比。对比项S7 协议服务端主动开放式用户通信PLC 主动PLC 侧编程量几乎为零需要调用 TSEND_C/TRCV_C实时性取决于轮询周期事件触发响应更快网络要求服务端能访问 PLC 的 102 端口PLC 能访问服务端的指定端口适合场景定时采集、批量读取报警触发、工位动作完成即上报项目里我一般会混合用常规数据用 S7 协议轮询关键事件用 OUC 推送。这样既保证数据完整性又不会让 PLC 的通信负载太高。2.3 数据格式约定字节流怎么变成表记录PLC 发出来的是一串字节服务端必须知道每个字节代表什么。常见做法是在 PLC 里定义一个专用的 DB 块比如叫DB_SQL_Interface里面按顺序排列好字段4 字节的工位号、4 字节的实时值、8 字节的时间戳、2 字节的状态码。服务端收到后按同样的偏移量解析。这个约定必须两边严格一致否则就是一堆乱码。下面是一个典型的解析代码片段。// 假设收到的字节数组为 buffer长度 18 int stationId BitConverter.ToInt32(buffer, 0); // 偏移 04 字节 float realValue BitConverter.ToSingle(buffer, 4); // 偏移 44 字节 long timestamp BitConverter.ToInt64(buffer, 8); // 偏移 88 字节 short status BitConverter.ToInt16(buffer, 16); // 偏移 162 字节 // 拼装 SQL 插入语句 string sql $INSERT INTO ProductionData (StationId, Value, RecordTime, Status) VALUES ({stationId}, {realValue}, {timestamp}, {status});这段代码的关键在于偏移量必须和 PLC 侧 DB 块的定义完全对应。BitConverter默认是小端序而 S7-1200 的存储格式是大端序所以实际项目中通常需要自己写转换函数或者用BinaryPrimitives.ReverseEndianness处理。时间戳建议统一用 Unix 毫秒避免时区问题。3. 服务端落地从 TCP 监听到 SQL 写入的完整实现3.1 环境准备与依赖选择服务端我推荐用 .NET 6 或 Python 3.9。C# 的优势是 S7.Net 库成熟和 Windows 服务集成方便Python 的优势是开发快python-snap7和pyodbc组合也很稳。下面以 C# 为例需要引入两个 NuGet 包S7.Net用于读写 PLCSystem.Data.SqlClient用于操作数据库。数据库连接字符串放在appsettings.json里不要硬编码。!-- App.config 或 appsettings.json 中的连接配置 -- connectionStrings add nameSqlServerConn connectionStringServer192.168.1.100;DatabaseFactoryDB;User Idsa;PasswordYourPassword; providerNameSystem.Data.SqlClient / /connectionStrings连接字符串里的Server填 SQL Server 的 IPDatabase是目标库名。如果 SQL Server 和服本文还有配套的精品资源点击获取