1. S7-1200PLC通讯基础与硬件选型
第一次接触S7-1200PLC通讯时,我被各种接口类型和协议搞得晕头转向。经过多年实战,我发现只要掌握核心要点,PLC通讯并没有想象中复杂。S7-1200PLC主要支持两种通讯方式:串口通讯和以太网通讯,每种方式都有其适用场景。
1.1 串口通讯方案选择
在工业现场,当遇到需要长距离传输或成本敏感的场景时,串口通讯仍然是可靠的选择。S7-1200支持三种常见串口标准:
RS232:这是最基础的串口通讯方式。我曾在老式设备改造项目中使用过,它的传输距离只有15米左右,而且只能一对一连接。全双工特性意味着可以同时收发数据,但实际速率通常不超过115.2kbps。记得有次在电机控制项目中,由于现场电磁干扰严重,RS232通讯频繁中断,后来改用RS485才解决问题。
RS485:这是我推荐的首选串口方案。半双工工作方式下,传输距离可达3000米,最高速率10Mbps。支持一对多连接(最多32个节点),在变频器群控系统中表现优异。实际使用时要注意终端电阻匹配,我曾遇到过因为忘记接120Ω终端电阻导致通讯不稳定的情况。
RS422:虽然具备RS485的所有优点,但需要4根线(两对差分线)连接,接线复杂且成本较高。除非特殊场合要求全双工长距离传输,否则一般不建议采用。
1.2 以太网通讯实战配置
随着工业4.0发展,以太网通讯已成为S7-1200的主流选择。它的优势非常明显:
PROFINET接口:集成RJ45接口,支持自动交叉线序识别(auto-cross-over),最高100Mbps速率。在汽车生产线项目中,我通过一台S7-1215C同时与20多个HMI、变频器建立连接,运行三年零故障。
硬件配置要点:
- 使用超五类或更高规格网线
- IP地址设置要避开DHCP范围(如192.168.0.100-200)
- 子网掩码通常设为255.255.255.0
- 务必在TIA Portal中启用"系统和时钟存储器"(建议MB0时钟,MB1系统)
这里有个实际案例:某包装线需要两台S7-1200PLC交换数据,我采用直连网线配置:
PLC1: 192.168.0.10 PLC2: 192.168.0.11 子网掩码: 255.255.255.0关键是要在"设备组态→属性→以太网地址"中正确设置,并创建PROFINET子网。
2. 通讯协议深度解析
选对协议相当于成功了一半。根据硬件连接方式不同,S7-1200支持的协议也各有特点。
2.1 串口协议应用场景
PPI协议:西门子专有协议,早期用于S7-200系列,现在基本被淘汰。我曾用它连接老款文本显示器,需要特殊PC/PPI电缆。
Modbus RTU:这是工业领域通用协议。在锅炉控制系统项目中,我用S7-1200通过CM1241模块(RS485)与第三方温控器通讯。关键参数:
- 波特率:19200bps
- 数据位:8位
- 停止位:1位
- 校验位:偶校验
USS协议:专为西门子变频器设计。配置G120变频器时,只需在TIA Portal中安装USS库,设置站地址为1-31即可。注意波特率要与变频器参数P2023一致。
2.2 以太网协议实战技巧
S7协议:西门子设备间专用协议,效率最高。V2.0及以上固件支持单边通讯(只需客户端编程)。我常用它实现S7-1200与S7-1500的数据交换。
TCP协议:开放式通讯的首选。通过TSEND_C/TRCV_C指令,可以与任何支持TCP的设备通讯。在MES系统集成项目中,我用它实现了与上位机的数据交互,关键参数配置:
- 本地/伙伴IP地址
- 端口号(默认2000)
- 连接类型(TCON_IP_v4)
- 连接ID(范围1-4095)
特别提醒:使用TCP协议时,一定要在防火墙中放行相应端口。有次调试就因为Windows防火墙拦截导致通讯失败,排查了整整一天。
3. S7通讯编程全流程
S7通讯是西门子设备间最高效的数据交换方式,下面以PUT/GET指令为例详解操作步骤。
3.1 PUT指令实现数据发送
在给食品厂做自动化改造时,我需要将灌装机的产量数据发送到中央监控PLC,以下是具体操作:
硬件组态:
- 在TIA Portal中拖入两个S7-1200 CPU(V4.1版本)
- 分别设置IP地址(192.168.0.10和192.168.0.20)
- 在网络视图中创建S7连接
连接配置:
右键点击客户端CPU → 添加新连接 → 选择S7连接 → 指定伙伴IP 勾选"允许PUT/GET访问"(路径:CPU属性→防护与安全→连接机制)数据块创建:
- 新建DB块"SendDB",取消"优化的块访问"
- 添加Real型变量:Production_Qty、Speed_Setpoint
OB1编程:
CALL "PUT" , DB3 REQ := M0.0 //上升沿触发 ID := W#16#100 //连接ID ADDR_1 := P#DB1.DBX0.0 BYTE 8 //目标地址 SD_1 := P#SendDB.DBX0.0 BYTE 8 //源地址
调试技巧:监控STATUS字(MW10),常见错误代码:
- 16#7002:连接不存在
- 16#80B0:目标区域长度错误
3.2 GET指令实现数据读取
从中央PLC获取配方数据的典型配置:
- 创建接收DB块"RecvDB",定义对应变量
- OB1中调用GET指令:
CALL "GET" , DB4 REQ := M0.1 ID := W#16#100 ADDR_1 := P#DB2.DBX0.0 BYTE 12 //源地址 RD_1 := P#RecvDB.DBX0.0 BYTE 12 //目标地址 - 通过NDR位(M1.5)判断数据是否更新
实际项目中,我习惯用时钟脉冲(如M0.3,2Hz)自动触发GET指令,避免频繁手动操作。
4. 开放式TCP通讯实战
当需要与非西门子设备通讯时,开放式TCP是更通用的选择。去年在智能仓储项目中,就用它实现了与AGV调度系统的数据交互。
4.1 同一项目组态步骤
硬件配置:
- 添加两个CPU(1215C和1214C)
- 分配IP地址(192.168.0.30/31)
- 创建PROFINET子网PN/IE_1
网络连接:
网络视图 → 拖拽连接线 → 选择TCP连接 设置主动/被动方(建议客户端主动)发送端编程:
CALL "TSEND_C" , DB5 REQ := M0.5 CONT := TRUE //保持连接 LEN := 100 DATA := P#DB5.DBX0.0 BYTE 100接收端配置:
CALL "TRCV_C" , DB6 EN_R := TRUE CONT := TRUE DATA := P#DB6.DBX0.0 BYTE 100
4.2 跨项目通讯要点
当PLC不在同一项目时,需要特别注意:
- 在TCON指令中选择"未指定"伙伴
- 手动输入对方IP和端口号
- 确保双方防火墙允许通讯
- 建议添加心跳检测机制(如定期发送特定字节)
调试时,我常用Wireshark抓包分析,重点关注三次握手是否成功,数据包是否正常传输。遇到连接不稳定时,适当调整发送间隔(建议≥100ms)能显著改善性能。