西门子 S7-1500 PLC 的串行通信主要通过点对点通信模块(CM PtP)和通信板(CB PtP)来实现。这些模块允许 S7-1500 通过 RS232、RS422 或 RS485 接口与其他设备(如扫描仪、打印机、变频器、旧式仪表或其他 PLC)进行数据交换。以下是关于 S7-1500 串行通信的详细解析,涵盖硬件选型、通信协议、配置步骤及编程方法。
---
1. 硬件选型:CM PtP 与 CB PtP
S7-1500 提供了两种形式的串行通信硬件,需根据安装空间和性能需求选择:
A. 通信模块 (CM PtP)
安装在 CPU 右侧的导轨上,占用一个模块位置。性能更强,支持更多功能。
CM PtP RS232 HF (6ES7541-1AD00-0AB0): 高性能,支持 RS232,最大波特率 115.2 kbps。CM PtP RS422/485 HF (6ES7541-1AB00-0AB0): 高性能,支持 RS422/485,最大波特率 115.2 kbps,支持多点连接。CM PtP RS232 BA (6ES7541-1AD00-0AB0 的 базовый вариант? 注意型号区分): 基本型,功能较少。CM PtP RS422/485 BA (6ES7541-1AB00-0AB0 的 базовый вариант): 基本型。注:HF (High Feature) 推荐用于复杂协议或高速通信;BA (Basic) 适用于简单应用。B. 通信板 (CB PtP)
直接插在 CPU 正面的选件插槽中,不占用导轨空间,适合紧凑型设计。
CB 1241 (RS232) / CB 1241 (RS485): 虽然型号名为 CB 1241(源自 S7-1200 系列命名),但在 S7-1500 上也有对应的兼容板卡(如 CB PtP RS232 和 CB PtP RS485)。功能与 CM PtP 类似,但通常只有一个端口,且在某些高级功能上可能略少于 HF 版模块。
---
2. 支持的通信协议
S7-1500 的串行通信主要支持以下三种模式:
(1) 自由口通信 (Freeport / ASCII)
描述: 用户完全定义数据帧格式(起始符、数据长度、结束符、校验等)。适用场景: 与非标准协议设备通信,或自定义协议。指令: 使用 Prc_Ptp_Send (发送) 和 Prc_Ptp_Recv (接收) 指令。特点: 灵活性最高,但编程复杂度也最高,需要处理缓冲区、状态机和时序。(2) Modbus RTU
描述: 工业界最通用的主从协议。S7-1500 可作为 Master (主站) 或 Slave (从站)。适用场景: 连接变频器、温控表、智能电表等支持 Modbus 的设备。指令:主站:Modbus_Comm_Load (初始化), Modbus_Master (读写)。
从站:Modbus_Comm_Load, Modbus_Slave。
特点: TIA Portal 内置库支持,配置简单,无需手动解析报文。(3) USS 协议 (Universal Serial Interface Protocol)
描述: 西门子专用的驱动通信协议。适用场景: 专门用于连接西门子变频器(如 MM440, G120 等)。指令: USS_DRV, USS_CTRL 等。现状: 在新项目中,越来越多的用户倾向于使用 Modbus RTU 甚至 Profinet 替代 USS,但在旧设备改造中仍常用。---
3. 硬件组态与参数设置 (TIA Portal)
在 TIA Portal (STEP 7) 中进行配置的通用步骤:
添加设备: 在项目树中添加 S7-1500 CPU。插入模块:右键点击 CPU 右侧 -> “添加新设备” -> 选择对应的 CM PtP 模块。
或者在 CPU 属性中选择“接口” -> “集成通信模块”添加 CB PtP。
参数配置: 双击模块进入设备视图,设置以下关键参数:接口参数 (Interface Parameters):波特率 (Baud rate): 如 9600, 19200, 115200 bps。数据位 (Data bits): 通常 7 或 8。奇偶校验 (Parity): None, Even, Odd。停止位 (Stop bits): 1, 1.5, 2。流控 (Flow control): 硬件 (RTS/CTS) 或 软件 (Xon/Xoff),通常设为“无”。协议选择 (Protocol):选择 ASCII (自由口)、Modbus RTU 或 USS。
若选 Modbus/USS,需进一步设置站地址、超时时间等。引脚分配: 确认 RS232/485 的引脚定义是否符合现场接线(特别是 RS485 的 A/B 线)。
---
4. 编程实现详解
场景 A: Modbus RTU 通信 (最常用)
主站示例逻辑:
初始化: 调用 Modbus_Comm_Load 指令。PORT: 选择硬件标识符 (如 PCM_PTP_1)。BAUD, PARITY 等参数通常由硬件组态决定,此处可留空或覆盖。MB_DB: 关联一个背景数据块 (Instance DB)。仅在 CPU 启动或通信故障复位时执行一次。
读写操作: 调用 Modbus_Master 指令。REQ: 上升沿触发请求。MODE: 0=读保持寄存器,1=写单个寄存器,等等。DATA_ADDR: 从站寄存器地址 (注意偏移量,有时需 +1 或 +40001 转换)。DATA_LEN: 读取/写入的数据长度。DATA_PTR: 指向本地数据区 (如 PM100.0 BYTE 10)。MB_HOLD_REG: 关联 Modbus 映射数据块。MB_DB: 关联 Modbus_Comm_Load 使用的同一个背景 DB。场景 B: 自由口通信 (ASCII)
发送流程:
准备发送数据:将数据填入发送缓冲区 (Send Buffer)。
调用 Prc_Ptp_Send 指令:
REQ: 触发发送。PORT: 硬件标识符。BUFFER: 指向发送缓冲区 (Variant 类型,通常用 PDBx.DBX0.0 BYTE N)。DONE, ERROR, STATUS: 监控发送状态。接收流程:
调用 Prc_Ptp_Recv 指令 (通常周期性调用,如在 OB1 或定时中断中)。
EN_R: 使能接收。PORT: 硬件标识符。BUFFER: 指向接收缓冲区。NDR (New Data Received): 当有新数据到达时置位。LEN: 返回接收到的字节数。ERROR, STATUS: 监控错误。数据处理: 当 NDR=1 时,程序需解析缓冲区数据(检查帧头、帧尾、校验和),提取有效数据。---
5. 常见问题与调试技巧
硬件标识符 (Hardware Identifier):
在编程时,PORT 引脚需要填入模块的硬件 ID。可在设备视图的“属性” -> “常规” -> “PROFINET/串口接口”中查看,通常是十进制数(如 272, 512 等)或使用标签 %Q... 对应的系统常量。
接线问题:
RS232: 确保 TXD 接 RXD,RXD 接 TXD,GND 接 GND。如果是直连线可能需要交叉。RS485: 确保 A 接 A (或 D+ 接 D+),B 接 B (或 D- 接 D-)。终端电阻(120Ω)在长距离或高速通信时需启用(模块上通常有拨码开关或组态选项)。通信干扰:
串行通信对干扰敏感。务必使用屏蔽双绞线,并将屏蔽层单端接地。
如果通信不稳定,尝试降低波特率。
诊断:
利用 TIA Portal 的“在线与诊断”功能,查看 CM/CB 模块的 LED 状态和诊断缓冲区。
监控指令的 STATUS 输出代码(例如 Modbus 的错误代码 0x0001 表示超时,0x0002 表示校验错误等),查阅手册对应解决。
数据区重叠:
在自由口通信中,确保发送缓冲区和接收缓冲区在内存中没有重叠,且长度足够,防止数据溢出。
总结
S7-1500 的串行通信功能强大且灵活。对于标准设备,首选 Modbus RTU 库指令,开发效率最高;对于非标设备或特殊协议,使用 自由口 (ASCII) 配合 Prc_Ptp 指令可实现任意定制。正确的硬件选型、精准的波特率匹配以及规范的接线是通信成功的关键。