PROFINET 是一种实时以太网标准,面向各种工业应用 (包括工厂自动化、过程自动化和楼宇自动化)所需的高速、确定性通信;PROFINET 最初在西门子主导下作为常用的 PROFIBUS 现场总线技术的网络扩展而开发,现在得到了 PROFIBUS & PROFINET International 的支持。
本期我们来注重介绍一下Superisys RFID如何使用PROFINET总线网关与西门子1200系列PLC进行通讯读写。 Superisys IACM-P4系列工业网关是一种提供标准工业总线协议的RFID控制器,支持ProfiNet、EtherCAT、Ethernet/IP协议;包含两个M12 T-CODE电源供电接口,两个M12 D-CODE 4-PIN 网络接口与4个M12 A-CODE RFID读写头接口;工业以太网传输速率最高支持100Mbps,可级联多个总线模块到PLC中,提供强大的现场采集数据能力。外壳采用轻便坚固的工程塑料,具有连接范围广、通信能力强、环境适应好、防护等级高等特点。
ü 可同时连接4个RFID读写头进行独立操作;
ü 支持ProfiNet、EtherCAT、EtherNet/IP协议;
ü IP67的防护等级,能够适应油污、粉尘、潮湿等恶劣工况;
ü 双网口,集成交换机功能,可组星型网络和树型网络;
RFID架构系统主要组成如下:
控制器(PLC):
下发命令控制读写头进行操作;
网关总线控制器:
PLC与网关总线控制器进行通讯,间接控制读写头;
读写头(超高频/高频):
获取控制器的命令,执行对载码体的读/写数据操作;
载码体载码体(超高频/高频):
存储数据的载体,数据存储区域划分如下:
高频载码体有UID区(通常只有8 byte/只读且唯一)、USER区(实际内存大小因载码体类型而异/可读可写);
打开西门子TIA软件,新建一个项目程序,在“选项”栏下方选择“管理通用站描述文件(GSD)”选项,选择GSD文件的相应文件夹,如下图所示:
勾选相应文件夹下的GSD文件,点击“安装”,完成即可。
Ø 双击“设备组态”,选择 “网络视图”,在右方的“硬件目录”下依次点击“其它现场设备”——“Gateway”——“Superisys”——“IACM-P4”——“Superisys_PN_V2.32”,将其拖拽至“网络视图”空白栏,如下图所示:
Ø 双击“IACM-P4-PN”设备,选择硬件模块的“网口”图标双击,修改配置PN网关的IP地址为192.168.0.10(默认),如下图所示:
设置完成,编译好点击“保存”即可。
Ø 选择“设备组态”图标,在上方选项栏点击“下载到设备”,选择好相应的PC网络接口以及子网连接,“搜索”到PLC的IP地址后,点击“下载”按钮对“硬件组态”进行下载(本例程使用西门子1200系列型号的PLC,IP地址设置为:192.168.0.8)下载完硬件组态后,点击上方“转至在线”按钮,选择“网络设备”栏,如下图所示:
通常进行一个PN总线网关使用测试时,“IACM-P4-PN”总线网关是直接显示正常在线的,如上图所示,显示绿色;
(用户也可通过总线网关状态指示灯对连接状态进行确认)
Ø 在进行多个PN总线网关的连接测试时,通常后续PN总线网关需要重新分配设备名称,点击“转至在线”后,“IACM-P4-PN_1”总线网关会显示未能正常连接,选择“DP-NORM”模块,右键选择“分配设备名称”,在出现的“分配PROFINET设备名称”的串口中,点击“更新列表”按钮,选中更新出现的“IACM-P4”设备,点击“分配名称”按钮对PN总线网关设备进行PROFINET设备名称在线分配,如下图所示:
Ø 分配完成后,关闭“分配PROFINET设备名称”弹窗,点击“转至离线”按钮,再次进行“设备组态”下载,下载完成后,再次点击“转至在线”按钮,查看PN总线网关设备的在线连接状态,如下图所示:
选择例程程序的“IACM-P4-PN”模块,右键选择“属性”,点击“系统常数”,对应网关读写头的输入输出地址映射自动分配如下图所示:
一个“RFID_RW_FB”功能块实例调用对应一个端口通道的读写头,功能块图形如下:
Ø 功能块引脚说明
每个功能块实例对应一个读写头,功能块引脚定义及功能如下:
输入引脚定义解析:
序号 | 名称 | 数据类型 | 说明 |
1 | IN_Address | HW_SUBMODULE | RFID组态输入硬件标识符 |
2 | xRead | Bool | 读取载码体的USER区(需指定起始地址、长度进行读取) |
3 | wReadAddress | Word | 读操作指定的载码体内存起始地址 |
4 | iReadLength | Int | 读操作指定的载码体内存字节长度 |
5 | xWrite | Bool | 对载码体的USER区写入(需指定起始地址、长度进行写入) |
6 | wWriteAddress | Word | 写操作指定的载码体内存起始地址 |
7 | iWriteLength | Int | 写操作指定的载码体内存字节长度 |
8 | arrWriteData | Array[Byte] | 写载码体USER内存数据填充区 |
9 | xReset | Bool | 复位命令,复位状态机 |
10 | OUT_Address | HW_SUBMODULE | RFID组态输出硬件标识符 |
输出引脚定义解析:
序号 | 名称 | 数据类型 | 说明 |
1 | xReady | Bool | 读写头连接信号 0:未建立连接 1:已建立连接 |
2 | xTP | Bool | 读写头检测载码体信号 0:未检测到载码体 1:已检测到载码体 |
3 | xBusy | Bool | 读写头命令执行状态 0:空闲 1:执行命令中 |
4 | iTagRSSI | Int | 读写头感应载码体信号强度 0:未感应到 1:信号强度较弱 2:信号强度较好 3:信号强度强 |
5 | iUIDLength | Int | 载码体ID长度 |
6 | arrUIDData | Array[Byte] | 载码体ID数据区 |
7 | arrReadData | Array[Byte] | 读载码体内存数据存储区 |
输入输出引脚定义:
序号 | 名称 | 数据类型 | 说明 |
1 | wErrorCode | Word | 读写头命令执行状态码 16#00 :成功 16#XX :错误码(具体见第四章错误代码定义详情) |
2 | iStepNum | Int | 功能块命令执行步序 |
3 | xReadError | Bool | 读取载码体内存命令执行错误 |
4 | xReadDone | Bool | 读取载码体内存命令执行成功 |
5 | xWriteError | Bool | 写入载码体内存命令执行错误 |
6 | xWriteDone | Bool | 写入载码体内存命令执行成功 |
xRead,xWrite两个信号互斥,同一时间只能有一个信号为高电平,功能块只会执行第一个检测到的有效信号。 |
本例程中,PN总线网关的各个RFID地址映射通过组态的“硬件标识符”进行映射的,如下图所示,RFID1的输入、输出硬件标识符分别是“282”、“283”,分别将数字填写到相应的RFID1调用功能块“IN_Address”和“OUT_Address”引脚即可:
1、载码体ID读取
调用RFID读写功能块后,默认保持RFID使能;当读写头感应到载码体的在位信号(xTP)的上升沿,自动上传载码体ID数据,当载码体离开读写头感应区域时,载码体ID数据自动清空,具体的时序如下图所示:
2、命令执行
在执行读写载码体内存数据命令时,需要先填写好读写的参数(读写载码体内存的起始地址,字节长度,写入的数据填充区数据内容等),然后再触发读写命令,具体的命令执行时序如下图所示:
在xRead/Write执行过程中,在未收到(xRead/WriteDone、xRead/WriteError)信号时,请不要手动复位xRead/Write信号,也建议用xTP信号去替代xRead信号进行自动读取触发。 |
Ø 操作步骤如下:
a) 载码体靠近读写头,读写头自动感应载码体,载码体到位信号“xTP”变为“TRUE”;
b) arrUIDData[0] – arrUIDData[7] 自动获取所靠近载码体的UID数据,固定长度8个字节;
备注:UID数据出厂时设定,可读不可写,数据序列是唯一的。
Ø 写入数据至载码体
当载码体静止在读取范围时,通过写入功能可以向一个载码体指定的地址写入特定长度的数据;命令的执行以”xWrite”高电平开始,在命令执行前,需要填写以下参数:
序号 | 参数 | 参数类型 | 说明 |
1 | wWriteAddress | 输入 | 指定载码体内存的起始地址 |
2 | iWriteLength | 输入 | 写载码体的内存字节长度 |
3 | arrWriteData | 输入 | 写载码体内存的数据填充区 |
Ø 写入操作步骤如下:
a) 载码体靠近到位,载码体到位信号xTP信号的值为“1”;
b) 在arrwriteData数组中填充数据要写入的数据;
c) 载码体到位,载码体到位信号xTP信号的值为“TRUE”;
d) 修改数据长度iWriteLength的值8,单位为字节;
e) 修改起始地址wWriteAddress的值为16#0000;
f) 修改写入命令xWrite 为 “1”;
g) 查看功能块反馈回来的完成信号xWriteDone和错误信号xWriteError。
如下图所示:从起始地址0开始,写入8个字节数据进入载码体的用户区成功。
Ø 从载码体读取数据
当载码体在读取范围时,通过读取功能可从载码体指定起始地址读取特定长度的数据;命令的执行以”xRead”高电平开始,在命令执行前,需要先填充部分引脚参数:
序号 | 参数 | 参数类型 | 说明 |
1 | wReadAddress | 输入 | 指定载码体内存的起始地址 |
2 | iReadLength | 输入 | 读取载码体的内存字节长度 |
3 | arrReadData | 输出 | 读取载码体内存的数据存储区 |
Ø 读取操作步骤如下:
a) 载码体到位,载码体到位信号xTP信号的值为“TRUE”;
b) 修改数据长度iReadLength的值为8,单位为字节;
c) 修改起始地址wReadAddress的值为16#0000;
d) 修改写入命令xRead 为 “1”(必须先复位xWrite信号);
e) 查看功能块反馈回来的完成信号xReadDone和错误信号xReadError。
如下图所示:从起始地址0开始,读取8个字节载码体的用户区数据成功。
读写头自定义错误码(命令执行错误时):
错误码 | 定义 | 说明 | |
十进制 | 十六进制 | ||
144 | 90H | 无标签响应 | 此时标签可能不在读取范围 |
145 | 91H | 射频数据错误 | 此时可能有强电磁干扰导致数据传输出错,或者数据传输一半标签离开读取区域 |
147 | 93H | 标签内存锁定 | 标签内存已经锁定,禁止写入 |
149 | 95H | 标签离开 | 读取到一半数据,标签离开 |
150 | 96H | 标签离开 | 写一半数据,标签离开 |
161 | A1H | 射频数据发射异常 | 射频数据无法发送出去 |
176 | B0H | 参数错误 |
功能块自定义错误码:
错误码 | 定义 | 说明 | |
十进制 | 十六进制 | ||
144 | 70H | 读写头未连接 | 读写头未正常连接 |
145 | 71H | 命令无效 | 命令执行时参数错误 |
147 | 74H | 读取超时 | 读取命令执行超时 |
149 | 75H | 写入超时 | 写入命令执行超时 |
150 | 90H | 标签不在位 | 命令执行时,载码体不在感应区域 |
楼主最近还看过