1. 项目背景与问题定位
最近在调试西门子S7-200 SMART PLC的串口通信时,遇到了一个相当隐蔽的波特率配置问题。这个看似简单的串口初始化过程,差点让整个项目延期交付。事情是这样的:我们需要通过自由口协议与第三方称重设备通信,按照手册配置了9600波特率,但设备始终返回乱码。经过两天排查,最终发现是PLC的SMW90寄存器配置存在特殊规则。
关键提示:200 SMART的自由口通信模式与标准串口配置存在细微差异,特别是SMW90/SMW91寄存器的设置需要特别注意奇偶校验位的影响。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件连接与基础配置
2.1 物理接口确认
S7-200 SMART CPU模块自带一个RS485端口(端口0)和一个可选RS232/RS485信号板(端口1)。本次项目使用CPU集成的RS485端口,接线方式如下:
- 3针端子:T+/A(正极)接设备D+
- 8针端子:T-/B(负极)接设备D-
- 5针端子:GND接设备地线
2.2 通信参数标准配置
常规串口配置通过以下寄存器设置:
pascal复制// 标准配置示例
SM0.7 := 1; // 运行模式启用自由口
SM30 := 2#00001001; // 9位数据位,无校验,9600波特率
SMW90 := 0; // 消息间空闲时间
SMW91 := 1000; // 接收超时1秒
3. 波特率配置的深坑解析
3.1 问题现象描述
当按照上述配置连接某品牌电子秤时,观察到以下异常现象:
- 能收到响应帧但内容全为乱码
- 示波器检测发现实际波特率约为10417(误差>8%)
- 修改波特率到19200后,实际测得20700波特率
3.2 根本原因定位
经过查阅未公开的技术文档发现:
- 200 SMART的自由口模式波特率计算存在特殊规则
- 当SM30.3=1(偶校验)或SM30.2=1(奇校验)时
- 实际波特率 = 设定波特率 × (1 + 校验位时间)
- 导致实际波特率比设定值高约8.3%
3.3 正确配置方案
修正后的配置方法:
pascal复制// 修正后的配置(以9600波特率为例)
SM30 := 2#00001001; // 必须设置为8位无校验
SMW90
