在工业自动化领域,PLC通讯是设备间数据交互的核心技术。西门子S7-1200 PLC凭借其稳定性和灵活性,成为中小型自动化项目的首选控制器。本文将聚焦1200 PLC在从站模式下的TCP通讯实现,通过HslCommunicationDemo调试工具,手把手解决实际工程中的连接配置、数据转换等典型问题。
实现PLC与调试工具的通讯需要以下硬件支持:
注意:若现场环境存在强电磁干扰,建议采用光纤转换器替代普通网线,可显著降低通讯丢包率。
在TIA Portal中新建项目时,需特别注意以下参数设置:
| 配置项 | 推荐值 | 作用说明 |
|---|---|---|
| PLC型号 | CPU 1214C DC/DC/DC | 根据实际硬件选择 |
| IP地址 | 192.168.0.1/24 | 需与调试工具同网段 |
| 子网掩码 | 255.255.255.0 | 标准C类局域网配置 |
| 系统和时钟存储器 | 启用 | 便于周期触发通讯 |
tia复制// 启用时钟存储器的系统块配置示例
{
"SystemMemoryByte": 1,
"ClockMemoryByte": 0,
"ClockMemoryBits": ["M0.5"] // 1Hz脉冲信号
}
在OB1中右键添加新全局DB块时,必须取消"优化访问"选项,否则无法获取偏移量地址。建议采用以下变量命名规则:
DB1.DBW0开始的连续字(如10个字对应20字节)DB1.DBW20开始的等长区域DB1.DBW40用于存储通讯错误代码stl复制// 典型的数据块定义
DATA_BLOCK "PLC_Comm_DB"
{ S7_OptimizedAccess := FALSE }
VERSION : 0.1
NON_RETAIN
SendBuffer : ARRAY[0..9] OF WORD; // 发送数据区
RecvBuffer : ARRAY[0..9] OF WORD; // 接收数据区
CommStatus : WORD; // 通讯状态字
END_DATA_BLOCK
从站模式需特别注意TSEND_C和TRCV指令的配合使用:
TSEND_C组态要点:
TRCV手动输入参数:
stl复制// 典型通讯指令调用示例
"TSEND_C_DB"(
REQ := "Clock_1Hz", // 1Hz触发信号
CONT := TRUE, // 持续连接
CONNECT := "TCON_Param", // 连接参数
DATA := P#DB1.DBX0.0 WORD 10,
LEN := 20);
"TRCV_DB"(
EN_R := TRUE,
ID := W#16#301, // 必须手动输入
DATA := P#DB1.DBX20.0 WORD 10,
LEN := 20);
打开调试工具后,需按以下步骤配置:
提示:若出现连接超时,可尝试关闭Windows防火墙或添加出入站规则。
由于PLC采用WORD格式而调试工具显示字节,需注意:
例如PLC发送W#16#1234,调试工具将显示:
code复制地址 0: 34
地址 1: 12
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 连接超时 | 网络不通 | 用ping测试物理连接 |
| 拒绝连接 | 端口冲突 | 使用netstat -ano查看端口占用 |
| 数据不更新 | ID不匹配 | 核对TRCV的ID与TSEND_C的Local_TSAP |
案例1:接收数据位序颠倒
W#16#3412而调试工具发送12 34stl复制// 字节交换处理代码
L "RecvBuffer"[0];
CAW; // 交换高低字节
T "ProcessedData";
案例2:数据截断
在最近的一个包装线项目中,调试时发现连续运行8小时后会出现通讯中断。最终查明是交换机端口缓存溢出,通过调整流控参数和增加心跳包机制解决了该问题。