西门子 S7-1500 PLC 的自由口通信(Freeport Communication)是指通过串行通信模块(CM PtP),不依赖标准的协议栈(如 Modbus RTU 的主/从站库),而是直接通过发送和接收字节流的方式,与第三方设备(如扫码枪、称重仪表、打印机、变频器等)进行自定义协议的数据交换。以下是关于 S7-1500 自由口通信的详细解析,涵盖硬件选型、组态步骤、编程方法及注意事项。
---
1. 硬件基础:CM PtP 模块
S7-1500 本身 CPU 集成接口通常为 PROFINET,若需进行串口自由口通信,必须扩展 CM PtP (Communication Module Point-to-Point) 模块。
常用型号:CM PtP RS232 HF (6ES7541-1AD00-0AB0):高性能,支持 RS232。CM PtP RS422/485 HF (6ES7541-1AB00-0AB0):高性能,支持 RS422/485(推荐,抗干扰强,支持多节点)。CM PtP RS422/485 BA (6ES7541-1AB00-0AB0 的简化版):基本型,功能类似但性能略低。物理接口:支持 RS232(点对点)、RS422(全双工)、RS485(半双工,多节点)。---
2. 硬件组态 (TIA Portal)
在 TIA Portal (博途) 中进行硬件配置是实现自由口通信的第一步。
步骤详解:
添加模块:在项目树中右键点击 CPU 所在的机架,选择“添加新设备”,找到对应的 CM PtP 模块并插入插槽。设置操作模式:选中该模块,进入 “属性” (Properties) -> “参数” (Parameters) -> “接口” (Interface)。
协议 (Protocol):选择 “自由端口/Modbus” (Freeport/Modbus)。注意:即使只用自由口,通常也选此项,然后在程序中不调用 Modbus 块即可;或者某些固件版本直接有 "Freeport" 选项。工作模式:根据接线选择(如 RS485 选“半双工 2 线制”)。通信参数设置 (必须与从站设备完全一致):
波特率 (Baud rate):如 9600, 19200, 115200 等。数据位 (Data bits):通常为 8。奇偶校验 (Parity):无 (None)、偶 (Even) 或 奇 (Odd)。停止位 (Stop bits):1 或 2。消息帧检测 (Message Frame Detection) —— 关键步骤:自由口通信没有固定的帧长度,PLC 需要知道何时开始接收、何时结束接收。帧开始 (Start of frame):可选“任意字符”、“特定字符”或“空闲时间后”。
例如:如果协议规定以 STX (0x02) 开头,则设置为“特定字符”,值为 1602。 帧结束 (End of frame):可选“特定字符”、“消息超时”或“固定长度”。
最常用:“通过消息超时识别” (Time-controlled)。即:接收到最后一个字节后,若超过设定时间(如 10ms)没有新数据,则判定为一帧接收完成。下载硬件组态:将配置下载到 PLC。---
3. 软件编程 (LAD/SCL)
S7-1500 的自由口通信主要依赖两个系统功能块 (FB):
Ptp_Send (发送数据)Ptp_Recv (接收数据)(注:在较新的 TIA Portal 版本中,指令名称可能显示为 PtP_Send 和 PtP_Recv,位于“通信”->“串行通信”文件夹下)A. 调用接收块 (Ptp_Recv)
通常放在 OB1 或专门的通信 FB 中循环调用。
REQ (Request): 上升沿触发接收请求(通常设为常通或周期性触发,具体视固件版本,新版通常只需 EN 接通即可持续监听)。PORT: 选择硬件标识符 (Hardware Identifier),即组态时模块的地址 (如 P256)。DB_RECV: 关联一个背景数据块或全局 DB,用于存储接收到的数据。该 DB 中会自动生成数组 Data[] (存放字节) 和 Status (状态字)。
LEN: 当前接收到的字节数 (输出引脚)。DONE / ERROR / STATUS: 监控接收是否完成或出错。DONE = TRUE:表示一帧数据接收完毕(满足帧结束条件),此时 Data[] 中的数据有效。B. 调用发送块 (Ptp_Send)
当需要向从站发送指令时调用。
REQ: 上升沿触发发送。PORT: 同上,硬件标识符。DATA: 指向要发送的数据块 (DB) 或数组。注意:S7-1500 的 Ptp_Send 通常需要指定发送长度。LEN: 要发送的字节数量。DONE / ERROR: 监控发送状态。4. 关键难点与调试技巧
1. 帧结束的判断 (超时时间设置)
这是自由口通信最容易出问题的地方。
现象:接收不到完整数据,或者 DONE 一直不触发。解决:在硬件组态的“帧结束”选项中,设置字符间超时时间。计算公式参考:
例如 9600 波特率,传输一个字节约 1ms。建议设置超时时间为 10ms - 20ms。如果设得太短,正常字符间隔会被误判为帧结束;设得太长,程序响应会变慢。
2. 半双工切换 (RS485)
如果是 RS485 接口,模块内部会自动处理方向控制(发送时自动切到发送态,接收时切到接收态),不需要用户编程控制 RTS 引脚,这与 S7-200 SMART 不同,S7-1500 的 CM PtP 模块已硬件集成此功能。
3. 数据缓冲区溢出
如果在上一帧数据处理完之前,新数据又来了,可能会丢失数据。
对策:在 Ptp_Recv 的 DONE 触发后,尽快将 Data[] 数组的内容拷贝到另一个缓冲区进行处理,避免被新数据覆盖。4. 十六进制与 ASCII 码
很多仪表使用 ASCII 码传输(如发送 '1' 是 1631),而 PLC 内部处理通常是十六进制数值。编程时需注意转换(使用 CONV 指令或查表法)。 5. 诊断
利用 Ptp_Recv 和 Ptp_Send 输出的 STATUS 代码查阅西门子手册。
常见错误:端口被占用、校验错误、帧格式错误。
使用 串口调试助手 (如 SSCOM, XCOM) 连接电脑与 PLC 模块,模拟从站发送数据,观察 PLC 是否能正确接收并置位 DONE。
---
5. 与 Modbus RTU 的区别
特性 | 自由口 (Freeport) | Modbus RTU (标准库) |
| 协议灵活性 | 极高,可定义任意字节流格式 | 固定,必须符合 Modbus 规约 |
| 适用场景 | 非标设备、老式仪器、特殊加密协议 | 支持 Modbus 的标准变频器、仪表 |
| 编程复杂度 | 高,需手动处理帧头、帧尾、校验 | 低,调用 Modbus_Comm_Load 和 Modbus_Master/Slave |
| 校验方式 | 需用户自行编写 CRC/累加和校验逻辑 | 库函数自动处理 CRC16 |
总结
S7-1500 的自由口通信核心在于:正确的硬件组态(特别是帧起止条件) + Ptp_Send/Ptp_Recv 块的合理使用。对于非标准协议设备,这是唯一的通信途径。调试时建议先用串口助手抓包分析对方设备的报文格式(帧头、长度、数据、校验、帧尾),再在 PLC 中对应配置。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!