西门子1200和多台smart PN 通讯案例 网上西门子1200和200smart pn通讯例程都是一台smart从站,都没有讲多台从站时的配置和编程方法。 本案例展示了一台1200PLC和6台不同型号的smart PLC之间的通讯,从站有SR20.SR30.SR60。 手把手教会你配置smart pn从站通讯。 程序正常运行在项目中运行。 有效避免新手踩坑,讲解从站编程主站配置。 提供程序和操作讲解说明。
当西门子1200遇上六台Smart PN从站
项目现场遇到个头疼事儿——客户产线上1台S7-1200要同时跟6台不同型号的Smart PLC(SR20/SR30/SR60)通讯。网上搜了一圈发现,清一色都是单台Smart从站的教程,多台配置的关键细节全藏着掖着。折腾了三天终于调通,今天就把踩过的坑和实操代码掰开揉碎了讲。
硬件配置的坑先填上
首先明确硬件环境:
主站:S7-1200 CPU 1215C DC/DC/DC(固件V4.5)
从站:3台SR20、2台SR30、1台SR60(全系支持Profinet)
第一步:IP规划不能乱
主站IP固定为192.168.0.1,6台Smart的IP按顺序从192.168.0.11到192.168.0.16分配。这里有个隐藏雷区——
设备名称必须和GSD文件里的标识一致
。比如SR20的设备名称设定为"SR20_PN",在TIA里导入GSD时对应的设备型号就得对上,否则编译必报错。
!
(示意图:TIA中Profinet设备列表)
编程关键:数据块对齐
每个Smart从站需要单独的数据交换区。以SR20为例,它的输入输出各占20字节。在1200中需要创建对应的DB块:
// DB1: SR20_1通讯数据块
STRUCT
Input_Data : Array[0..19] of Byte; // 输入数据
Output_Data : Array[0..19] of Byte; // 输出数据
END_STRUCT
但SR30和SR60的I/O字节数不同(SR30为30字节,SR60为60字节),这时候必须
按最大型号分配空间
,否则会溢出导致通讯中断。例如处理SR60时:
// DB6: SR60通讯数据块
STRUCT
Input_Data : Array[0..59] of Byte; // 输入缓冲区
Output_Data : Array[0..59] of Byte; // 输出缓冲区
END_STRUCT
轮询机制避冲突
同时连接多台从站时,直接并行读写会引发数据错乱。这里用SCL写了个简易轮询控制器:
// 轮询控制逻辑
VAR
Station_Index : INT := 1;
Cycle_Counter : INT := 0;
END_VAR
IF Cycle_Counter >= 100 THEN // 每100ms切一个从站
Station_Index := Station_Index MOD 6 + 1;
Cycle_Counter := 0;
END_IF;
CASE Station_Index OF
1: // 操作SR20_1的DB1
L_PNIO("SR20_PN_1", DB1.Input_Data, DB1.Output_Data);
2: // 操作SR20_2的DB2
L_PNIO("SR20_PN_2", DB2.Input_Data, DB2.Output_Data);
// ...其他从站同理
END_CASE;
Cycle_Counter := Cycle_Counter + 1;
关键点
:
L_PNIO
指令必须带设备名称(不是IP!)
每个从站的读写操作需间隔至少一个PLC周期
实际项目中建议加入超时检测,防止某台从站故障导致整个轮询卡死
调试血泪经验
设备名称冲突
:曾因两台SR20名称重复导致只有最后一台能通讯,解决方案是在名称后加序号如"SR20
PN
1"
GSD文件版本
:Smart 2.8固件需要GSDML-V2.3,用旧版文件会识别为未知设备
数据对齐问题
:SR60的输入数据前4字节是状态字,实际有效数据从第5字节开始,需在程序中做偏移处理
程序打包技巧
最后把每个从站的配置导出为XML文件,新建项目时直接导入复用。附上项目中的实际代码片段:
<!-- SR20_PN_1的配置片段 -->
<Device xmlns="
<Name>SR20_PN_1</Name>
<Interface>PROFINET-Interface</Interface>
<IP>192.168.0.11</IP>
<Subnet>255.255.255.0</Subnet>
</Device>
搞过多台Profinet从站的老铁都懂,这玩意儿配置时就像在雷区跳街舞——稍有不慎就炸。
但只要抓住设备名称、数据对齐、轮询节奏这三个核心,剩下的就是耐心调试了。完整程序和组态文件已上传GitHub(地址私信),需要的老铁自取。