抖音粉丝群1
『7x24小时有问必答』

一、通信概述
西门子 RFID 系统支持PROFINET IO通信协议,可作为IO 设备无缝接入 S7-1200 PLC 的分布式 I/O 系统,实现高速实时的射频识别数据交换。

1.1 西门子 RFID 系统系列

系列
型号
频率
读取距离
应用场景
RF600
RF620R/RF640R/RF680R
UHF 865-928MHz
0-12m
物流追踪、仓储管理
RF200
RF240R/RF280R
HF 13.56MHz
0-200mm
生产线识别、门禁
RF300
RF310R/RF340R/RF350R
HF 13.56MHz
0-400mm
汽车制造、装配线
RF400
RF420R/RF470R
UHF 865-928MHz
0-8m
集装箱识别
MOBY
MOBY D/I/U
HF/UHF
根据型号
特殊工业应用
MV 读码器
MV420/MV440
光学
根据型号
条码/二维码识别

1.2 通信架构

1.png

1.3 通信特点

特性
说明
通信类型
PROFINET IO RT(实时)
数据交换
过程数据 + 参数数据
传输距离
标准 100 米(可扩展)
通信周期
4ms ~ 512ms 可调
识别距离
根据 RFID 系列(HF:0-400mm, UHF:0-12m)
多标签识别
支持防碰撞,同时识别多个标签

---

二、硬件与软件要求

2.1 软件要求

软件
最低版本
推荐版本
说明
TIA Portal(博途)
V15.1
V17/V18/V19
S7-1200 组态
RFID 固件
根据型号
最新版本
支持 PROFINET 功能
GSDML 文件
V2.3
TIA Portal 内置
PROFINET 设备描述
RF-Viewer
V2.0+
最新版本
RFID 调试软件(可选)

2.2 硬件要求

设备
型号/订货号
说明
S7-1200
CPU 1214C/1215C/1217C V4.0 及以上
IO 控制器
RF600
6GF34xx 系列
UHF RFID 阅读器
RF200
6GT28xx 系列
HF RFID 阅读器
RF300
6GT23xx 系列
HF RFID 阅读器
RF400
6GF33xx 系列
UHF RFID 阅读器
天线
根据应用选择
圆形/矩形/近场等
电子标签
根据应用选择
无源/有源标签
网线
CAT5e 及以上
标准工业以太网线

2.3 常见 RFID 阅读器型号

系列
型号
订货号
接口
RF620R
标准型
6GF3420-0AA00
PROFINET/PROFIBUS
RF640R
高性能型
6GF3440-0AA00
PROFINET/PROFIBUS
RF680R
长距离型
6GF3480-0AA00
PROFINET/PROFIBUS
RF240R
紧凑型
6GT2840-0AB00
PROFINET
RF280R
标准型
6GT2880-0AB00
PROFINET
RF310R
紧凑型
6GT2310-0AB00
PROFINET
RF340R
标准型
6GT2340-0AB00
PROFINET
RF350R
高性能型
6GT2350-0AB00
PROFINET

---

三、配置步骤(TIA Portal 侧)

第一步:创建 TIA Portal 项目

打开TIA Portal软件
点击「创建新项目」,输入项目名称
选择「添加新设备」

第二步:添加 S7-1200 CPU(IO 控制器)

添加 PLC
选择「控制器」→「SIMATIC S7-1200」→「CPU」
选择具体型号(如 CPU 1215C DC/DC/DC)
选择固件版本(V4.0 及以上)
配置 PROFINET 接口
进入「设备视图」→ 点击 CPU 上的 PROFINET 接口
在「属性」→「以太网地址」中设置:
IP 地址:如  192.168.0.1
子网掩码:255.255.255.0
勾选「自动生成 PROFINET 设备名称」

第三步:添加 RFID 阅读器(IO 设备)

添加 RFID 设备
进入「网络视图」
在右侧「硬件目录」→「识别系统」→「SIMATIC RF」→ 选择对应系列
选择对应型号(如 RF620R/RF340R 等)
拖拽到网络视图中
配置 PROFINET 接口
双击网络视图中的 RFID 阅读器
在「属性」→「以太网地址」中设置:
IP 地址:如  192.168.0.2(与 PLC 同一网段)
子网掩码:255.255.255.0
取消勾选「自动生成 PROFINET 设备名称」
手动设置设备名称(如:"rfid_reader1")
分配 IO 控制器
在网络视图中选中 RFID 阅读器
点击「未分配」
选择 S7-1200 作为 Controller

第四步:配置数据交换区(过程映像)

这是最关键的配置,决定数据交换格式:
进入设备视图
双击 RFID 阅读器图标
进入「设备视图」
配置子模块
数据类型
长度
说明
输入数据
64~256 字节
标签数据、状态字、诊断信息
输出数据
32~64 字节
读/写命令、控制字、参数设置
选择合适的子模块(过程数据区)
典型配置包括:
配置 I/O 地址
输入地址(PLC 读取):如 %IW0-%IW127
输出地址(PLC 写入):如 %QW0-%QW31

第五步:建立网络连接

进入「网络视图」
选中 S7-1200 的 PROFINET 接口(绿色方块)
拖拽连线到 RFID 阅读器的 PROFINET 接口
连接成功后显示绿色实线

第六步:分配设备名称(关键步骤)

连接 PLC
使用网线连接 PC 与 S7-1200
确保 PC 与 PLC 在同一网段
在线访问
点击「在线」→「访问 PG/PC」
选择连接的网卡
点击「更新」搜索网络设备
分配名称
找到未分配名称的 RFID 阅读器(显示 MAC 地址)
输入配置的设备名称(如:"rfid_reader1")
点击「分配名称」
验证
点击「显示」确认名称已分配
设备名称必须与 TIA Portal 组态完全一致

第七步:RFID 阅读器参数配置

使用RF-Viewer软件或 Web 界面配置 RFID 参数:
参数
设置值
说明
工作模式
PROFINET IO
选择 PROFINET 通信
Device Name
rfid_reader1
与 TIA 组态一致
IP Address
192.168.0.2
与 TIA 组态一致
天线功率
根据应用
UHF:10-30dBm, HF:根据标签
读取模式
连续/触发
根据应用选择
过滤条件
根据标签类型
EPC/UID/TID 等
数据更新周期
10ms~100ms
根据应用选择

第八步:编译并下载

编译项目
点击「编译」→「编译全部」
检查是否有错误
下载组态
连接 S7-1200 PLC
下载组态到 PLC
将 PLC 切换到RUN 模式
RFID 阅读器上电
阅读器会自动从 PLC 获取组态
无需单独下载

---

四、数据交换格式详解

4.1 输入数据(RFID→PLC)

偏移
数据类型
长度
说明
0
状态字
2 字节
设备状态、就绪标志
2
标签数量
2 字节
检测到的标签数量
4
标签 1 EPC/UID
16 字节
第一个标签 ID
20
标签 1 数据
32 字节
第一个标签用户数据
52
标签 2 EPC/UID
16 字节
第二个标签 ID(可选)
68
诊断信息
4 字节
错误代码、警告

4.2 输出数据(PLC→RFID)

偏移
数据类型
长度
说明
0
控制字
2 字节
启动/停止/复位命令
2
命令字
2 字节
读/写/锁定命令
4
天线选择
2 字节
选择工作天线
6
过滤条件
4 字节
标签过滤设置
10
写入数据
32 字节
写入标签的数据

4.3 状态字详解

名称
功能
0
1
0
就绪
设备就绪
未就绪
就绪
1
通信正常
PROFINET 通信
故障
正常
2
读取就绪
可读取标签
就绪
3
故障
故障状态
无故障
故障
4
标签检测到
有标签
无标签
有标签
5
数据有效
数据有效性
无效
有效
6
写入完成
写入操作
进行中
完成
7
报警
报警状态
无报警
报警

4.4 控制字详解

名称
功能
0
1
0
启动
启动设备
停止
启动
1
停止
停止读取
运行
停止
2
复位
故障复位
-
复位
3
读取命令
触发读取
-
读取
4
写入命令
触发写入
-
写入
5
清除数据
清除缓存
-
清除
6
天线 1 使能
天线 1
禁用
使能
7
天线 2 使能
天线 2
禁用
使能

---

五、编程示例

5.1 标准 PROFINET IO 编程(SCL)

// 定义数据块

DATA_BLOCK "RFID_Data"

STRUCT

      // 输出数据(写入 RFID)

      Control_Word : WORD;         // 控制字 %QW0

      Command_Word : WORD;         // 命令字 %QW2

      Antenna_Select : WORD;      // 天线选择 %QW4

      Filter_Condition : DWORD; // 过滤条件 %QD6

      Write_Data : Array[0..15] OF BYTE; // 写入数据 %QB10

      // 输入数据(从 RFID 读取)

      Status_Word : WORD;          // 状态字 %IW0

      Tag_Count : WORD;             // 标签数量 %IW2

      Tag1_EPC : Array[0..15] OF BYTE; // 标签 1 EPC %IB4

      Tag1_Data : Array[0..31] OF BYTE; // 标签 1 数据 %IB20

      Tag2_EPC : Array[0..15] OF BYTE; // 标签 2 EPC %IB52

      Diagnostic : DWORD;          // 诊断信息 %ID68

END_STRUCT

END_DATA_BLOCK

// 主程序 OB1

// 读取 RFID 状态

"RFID_Data".Status_Word := %IW0;

"RFID_Data".Tag_Count := %IW2;

// 判断设备就绪

IF ("RFID_Data".Status_Word AND 160001) <> 0 THEN

      "RFID_Ready" := TRUE;

ELSE

      "RFID_Ready" := FALSE;

END_IF;

// 判断通信正常

IF ("RFID_Data".Status_Word AND 160002) <> 0 THEN

      "Communication_OK" := TRUE;

ELSE

      "Communication_Fault" := TRUE;

END_IF;

// 判断标签检测到

IF ("RFID_Data".Status_Word AND 160010) <> 0 THEN

      "Tag_Detected" := TRUE;

      "Tag_Valid" := TRUE;

ELSE

      "Tag_Detected" := FALSE;

      "Tag_Valid" := FALSE;

END_IF;

// 判断数据有效

IF ("RFID_Data".Status_Word AND 160020) <> 0 THEN

      "Data_Valid" := TRUE;

      // 读取标签 EPC

      FOR  i  := 0 TO 15 DO

            "Tag1_EPC_String"[i] := "RFID_Data".Tag1_EPC[i];

      END_FOR;

ELSE

      "Data_Valid" := FALSE;

END_IF;

// 判断故障

IF ("RFID_Data".Status_Word AND 160008) <> 0 THEN

      "RFID_Fault" := TRUE;

      "Fault_Code" := "RFID_Data".Diagnostic;

ELSE

      "RFID_Fault" := FALSE;

END_IF;

// 启动 RFID 阅读器

IF "Start_Button" AND "RFID_Ready" THEN

      "RFID_Data".Control_Word := 160001;   // 启动命令

      %QW0 := "RFID_Data".Control_Word;

END_IF;

// 停止 RFID 阅读器

IF "Stop_Button" THEN

      "RFID_Data".Control_Word := 160002;   // 停止命令

      %QW0 := "RFID_Data".Control_Word;

END_IF;

// 触发读取(上升沿)

"Read_Rising_Edge" := "Read_Button" AND NOT "Read_Prev";

IF "Read_Rising_Edge" AND "RFID_Ready" THEN

      "RFID_Data".Control_Word := 160008;   // 读取命令

      %QW0 := "RFID_Data".Control_Word;

END_IF;

"Read_Prev" := "Read_Button";

// 故障复位

IF "Reset_Button" AND "RFID_Fault" THEN

      "RFID_Data".Control_Word := 160004;   // 复位命令

      %QW0 := "RFID_Data".Control_Word;

END_IF;

5.2 标签数据处理

// EPC/UID 数据转换(字节转字符串)

FOR  i  := 0 TO 15 DO

      // 高 4 位转十六进制字符

       high_nibble := "RFID_Data".Tag1_EPC[i] / 16;

      CASE  high_nibble OF

            0..9: "Tag1_EPC_Hex"[i*2] := CHAR(high_nibble + 48);

            10..15: "Tag1_EPC_Hex"[i*2] := CHAR(high_nibble + 55);

      END_CASE;

      // 低 4 位转十六进制字符

       low_nibble := "RFID_Data".Tag1_EPC[i] MOD 16;

      CASE  low_nibble OF

            0..9: "Tag1_EPC_Hex"[i*2+1] := CHAR(low_nibble + 48);

            10..15: "Tag1_EPC_Hex"[i*2+1] := CHAR(low_nibble + 55);

      END_CASE;

END_FOR;

// 标签计数

IF "Tag_Detected" AND NOT "Tag_Detected_Prev" THEN

      "Tag_Count_Total" := "Tag_Count_Total" + 1;

END_IF;

"Tag_Detected_Prev" := "Tag_Detected";

// 标签去重(简单实现)

IF "Tag_Detected" THEN

      "Current_Tag_EPC" := "Tag1_EPC_Hex";

      IF "Current_Tag_EPC" <> "Last_Tag_EPC" THEN

            "Unique_Tag_Count" := "Unique_Tag_Count" + 1;

            "Last_Tag_EPC" := "Current_Tag_EPC";

      END_IF;

END_IF;

5.3 写入标签数据

// 写入标签数据(上升沿触发)

"Write_Rising_Edge" := "Write_Button" AND NOT "Write_Prev";

IF "Write_Rising_Edge" AND "RFID_Ready" AND "Tag_Detected" THEN

      // 准备写入数据

      "RFID_Data".Write_Data[0] := 1648;   // 'H'

      "RFID_Data".Write_Data[1] := 1645;   // 'E'

      "RFID_Data".Write_Data[2] := 164C;   // 'L'

      "RFID_Data".Write_Data[3] := 164C;   // 'L'

      "RFID_Data".Write_Data[4] := 164F;   // 'O'

      // 设置写入命令

      "RFID_Data".Command_Word := 160010;   // 写入命令

      "RFID_Data".Control_Word := 160010;   // 触发写入

      %QW2 := "RFID_Data".Command_Word;

      %QW0 := "RFID_Data".Control_Word;

END_IF;

"Write_Prev" := "Write_Button";

// 等待写入完成

IF ("RFID_Data".Status_Word AND 160040) <> 0 THEN

      "Write_Complete" := TRUE;

ELSE

      "Write_Complete" := FALSE;

END_IF;

5.4 完整控制程序示例

// 主程序 OB1

// 初始化

IF "First_Scan" THEN

      "RFID_Data".Control_Word := 160001;   // 启动命令

      %QW0 := "RFID_Data".Control_Word;

      "First_Scan" := FALSE;

END_IF;

// 读取状态

"RFID_Data".Status_Word := %IW0;

"RFID_Data".Tag_Count := %IW2;

// 设备就绪判断

IF ("RFID_Data".Status_Word AND 160001) <> 0 THEN

      "RFID_Ready" := TRUE;

ELSE

      "RFID_Ready" := FALSE;

END_IF;

// 通信状态判断

IF ("RFID_Data".Status_Word AND 160002) <> 0 THEN

      "Communication_OK" := TRUE;

ELSE

      "Communication_Fault" := TRUE;

      // 输出故障信号

      %QX0.0 := TRUE;

END_IF;

// 标签检测处理

IF ("RFID_Data".Status_Word AND 160010) <> 0 AND  

     ("RFID_Data".Status_Word AND 160020) <> 0 THEN

      "Tag_Detected" := TRUE;

      "Tag_Valid" := TRUE;

      "Read_Count" := "Read_Count" + 1;

      // 转换 EPC 为字符串

      "Convert_EPC_To_String"();

      // 标签去重计数

      IF "Current_Tag_EPC" <> "Last_Tag_EPC" THEN

            "Unique_Tag_Count" := "Unique_Tag_Count" + 1;

            "Last_Tag_EPC" := "Current_Tag_EPC";

            // 记录标签信息

            "Tag_Log"[log_index].EPC := "Current_Tag_EPC";

            "Tag_Log"[log_index].Time := LOCAL_TIME;

             log_index :=  log_index + 1;

      END_IF;

ELSE

      "Tag_Detected" := FALSE;

      "Tag_Valid" := FALSE;

END_IF;

// 故障处理

IF ("RFID_Data".Status_Word AND 160008) <> 0 THEN

      "RFID_Fault" := TRUE;

      "Fault_Code_Display" := "RFID_Data".Diagnostic;

      // 输出故障信号

      %QX0.1 := TRUE;

      // 自动复位尝试

      IF "Auto_Reset_Enable" THEN

            "Reset_Timer"(IN := TRUE, PT := T5S);

            IF "Reset_Timer".Q THEN

                  "RFID_Data".Control_Word := 160004;   // 复位

                  %QW0 := "RFID_Data".Control_Word;

                  "Reset_Timer"(IN := FALSE);

            END_IF;

      END_IF;

ELSE

      "RFID_Fault" := FALSE;

      %QX0.1 := FALSE;

END_IF;

// 手动控制

IF "Start_Button" AND "RFID_Ready" THEN

      "RFID_Data".Control_Word := 160001;   // 启动

      %QW0 := "RFID_Data".Control_Word;

END_IF;

IF "Stop_Button" THEN

      "RFID_Data".Control_Word := 160002;   // 停止

      %QW0 := "RFID_Data".Control_Word;

END_IF;

IF "Read_Button" AND "RFID_Ready" THEN

      "RFID_Data".Control_Word := 160008;   // 读取

      %QW0 := "RFID_Data".Control_Word;

END_IF;

---

六、通信状态监控与诊断

6.1 RFID 阅读器 LED 状态指示

LED
颜色/状态
含义
RUN
绿色常亮
运行正常
RUN
黄色闪烁
启动中/待机
RUN
红色
故障
LINK
绿色
网络连接正常
LINK
熄灭
网络连接断开
RF
绿色闪烁
正在读取标签
RF
红色
RF 故障

6.2 TIA Portal 在线监控

状态指示
颜色
含义
通信正常
绿色
PROFINET 连接建立成功
通信故障
红色
连接中断或配置错误
正在连接
黄色
设备正在建立连接

6.3 诊断缓冲区

在 TIA Portal 中查看 CPU 的「诊断缓冲区」
可获取详细的通信错误信息
常见错误:设备名称不匹配、IP 冲突、网线故障等

6.4 RFID 常见故障代码

错误码
含义
解决方案
0x0000
无错误
正常
0x0001
通信超时
检查 PROFINET 网络连接
0x0002
配置错误
检查 PROFINET 配置
0x0003
设备名称不匹配
重新分配设备名称
0x0100
无标签检测到
检查标签位置和天线功率
0x0101
标签读取失败
检查标签类型和频率
0x0102
标签写入失败
检查标签是否可写
0x0200
天线故障
检查天线连接
0x0201
RF 模块故障
重启阅读器或联系厂家
0x0202
温度过高
检查散热和环境温度

---

七、常见问题与解决方案

问题现象
可能原因
解决方案
RFID 无法识别
GSD 文件未导入
在 TIA Portal 中导入 GSDML 文件
设备名称分配失败
未在线操作
点击「在线」→「访问 PG/PC」分配名称
通信超时
IP 地址不在同一网段
检查并统一 IP 网段
标签读不到
天线功率过低
调整天线功率和标签距离
连接显示红色
PLC 未运行
将 PLC 切换到 RUN 模式
设备名称不匹配
名称不一致
确保 TIA 组态与阅读器配置一致
数据不更新
读取模式配置错误
检查连续/触发读取模式
频繁通信中断
网线质量差
更换高质量网线
多标签识别失败
防碰撞设置错误
调整防碰撞参数
写入失败
标签锁定或只读
检查标签类型和权限
读取距离短
天线不匹配
更换合适的天线
金属干扰
金属环境影响
使用抗金属标签或调整位置

---

八、配置要点总结

配置项
关键要点
软件版本
TIA Portal V15.1 及以上
GSD 文件
RFID 设备 GSDML 通常 TIA 内置
IP 地址
同一网段,不能冲突
设备名称
必须在线分配且与组态一致
数据交换区
正确配置输入/输出地址
天线功率
根据应用和标签调整
读取模式
连续/触发根据应用选择
过滤条件
设置合适的标签过滤
网络连接
使用标准网线,确保连接可靠
诊断功能
启用诊断便于故障排查
环境因素
注意金属/液体对 RF 的影响

---

九、推荐参考资料

资料名称
来源
链接
SIMATIC RF600 产品手册
西门子工业支持中心
下载
SIMATIC RF200/300 产品手册
西门子工业支持中心
下载
RFID PROFINET 配置指南
西门子工业支持中心
下载
RF-Viewer 调试软件
西门子工业支持中心
下载
TIA Portal PROFINET 配置指南
西门子工业支持中心
查看

---

十、总结

S7-1200 与西门子 RFID 系统的 PROFINET IO 通信是工业自动化中物品识别追踪的经典方案,具有以下优势:
优势
说明
高速实时
PROFINET RT 通信,周期可达 4ms
非接触识别
无需视线,可穿透非金属材料
配置简单
TIA Portal 统一组态,导入 GSD 即可
诊断完善
支持阅读器级诊断和故障定位
扩展灵活
支持多阅读器、多站点连接
成本优化
减少布线,降低安装成本
功能丰富
支持读/写/锁定/多标签识别
兼容性好
与 S7-1200 完美配合

配置流程简图

2.png

重要提示

RFID 阅读器需支持 PROFINET,确认型号带 PN 接口设备名称必须严格一致,区分大小写天线功率要根据标签和距离调整,避免过强或过弱注意金属和液体对 RF 信号的影响,合理安装位置多标签识别时启用防碰撞功能写入标签前确认标签可写且未锁定

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码