资讯动态

倍加福RFID读写头+博图V15.1+IO-Link载码体调试实战

发布时间:2026/10/24 10:22:38 来源:尧图企业网站定制
简介倍加福读写头与西门子1500PLC通过Profinet协议通信的调试说明文档面向工业自动化现场调试人员及电气工程师重点解决读写头、转换器、载码体三者协同工作时的硬件接线与软件配置问题。压缩包为单个docx文档大小约604KB内容组织清晰便于按章节查阅和学习。文档详细讲解了转换器航插电源1正极3负的接法、工业4芯网线黄白橙蓝与航插1234的对应线序、8芯RJ45网口的接线注意事项并给出线序异常时的万用表排查思路软件侧覆盖博图V15.1中通过在线访问分配IP和设备名称、复位为出厂设置及重启识别的完整流程。针对载码体读写文档演示了通过浏览器登录转换器管理界面设置起始地址与字节长度以读取或写入用户记忆区数据并说明Hex Command生成与Logging Monitor查看操作日志的方法。同时介绍了同一载码体中分段存储数据便于不同PLC系统独立提取所需信息并附有倍加福官网查询载码体存储区结构的指引。目前已有3261人学习下载适合需要快速上手Profinet读写头调试的工程技术人员。1. 倍加福读写头博图V15.1载码体这套组合到底解决什么问题在产线上每个工件要带一个能变化的“身份证”到了某个工位先确认身份再把加工结果写回去。过去最常见的方案是配一台独立RFID控制器读写头挂在控制器上控制器再通过以太网或串口和PLC说话程序两边来回调。现在用倍加福读写头配合博图V15.1可以把那台控制器直接省掉读写头挂到S7-1200/1500的IO-Link主站上载码体数据变成PLC的I/O区地址博图里写几行SCL就能读能写。我第一次调通这套组合时最惊讶的不是通信有多快而是调试方式变了——不用在专用软件和PLC之间来回切换所有验证都在博图的监控表里完成。这篇文章就是写给在设备现场对着博图和读写头不知道从哪下手的电气调试人员也写给做产线集成的工程师。我会按实际动手顺序把从选型、接线、组态、程序到排错的完整路径讲清楚每个参数为什么这么设以及我在现场踩过的坑。2. 倍加福读写头选型与接线IO-Link还是RS485载码体间距怎么算2.1 读写头接口选型IO-Link在博图V15.1下的优势倍加福读写头按通信接口分市面上最常见的是IO-Link和RS485两种也有少数PROFINET直接接口但价格和调试复杂度都上去了。我一般优先选IO-Link原因很实际IO-Link主站模块是S7-1200/1500的选件直接插在CPU左侧总线博图V15.1原生支持读写头变成主站的一个子设备数据按周期自动刷新到过程映像区。RS485则需要独立的通信模块或者从站适配器报文里要自己拼地址、功能码、校验和调试周期至少多一天。从维护角度看IO-Link也明显优于RS485。倍加福读写头的一些参数比如读写功率、天线滤波、命令触发模式都写在IODD文件里通过博图的通道设置就能下发。更换读写头时新设备一插上就自动应用原参数不需要拿着调试盒在现场重新配置。而RS485方案里参数通常存在读写头内部换备件后往往忘记同步导致功率不对读距变短。下表是我在选型时的对比情况对比项IO-LinkRS485组态方式博图导入IODD通道绑定设备需配置通信模块手动组报文传输速率COM1/COM2/COM3最高230.4kbps取决于网关常见9600/19200bps电缆长度20米以内标准IO-Link可达100米甚至更长参数下发主站自动下发换备件省心需要专用工具或组态指令调试体验监控表直接读写I/O地址需要报文解析和协议转换如果你的PLC机架有空闲槽位读写头距离PLC不超过20米听我的直接选IO-Link后面会少很多麻烦。距离超过20米或者现场电磁干扰特别重RS485配合屏蔽双绞线还是更稳但程序工作量要提前算进去。比如我有个项目读写头装在转台内距离PLC超过30米就用了RS485配合RS485转PROFIBUS网关程序里每个读写周期要处理接收帧超时比IO-Link麻烦不少。2.2 载码体选型抗金属、读写距离和安装间距的计算载码体就是RFID标签倍加福的叫法是数据载体有高频HF和低频LF两种。做产线工件追踪我几乎都用HF工作频率13.56MHz符合ISO 15693标准读写速度快数据区大一般一个载码体有128字节用户区存工单号、工序结果、操作员编号都够用。低频125kHz的优点是抗干扰强、读距远但数据区小通常只有几个字节适合只做身份识别的场景不适合写过程数据。选型时先看应用别一味追求读距。载码体有抗金属和非抗金属之分这是最容易出问题的地方。非抗金属载码体内部没有铁氧体层紧贴金属表面时射频能量被金属吸收读取距离可能从30mm掉到5mm甚至完全读不出来。如果你要把载码体安装在金属工件或金属支架上必须选抗金属型号。我习惯在选型阶段就问清楚载码体最终安装面材质如果材质不确定就用双面胶暂时贴在金属板上现场测一遍再决定是否换抗金属型号。读写头安装间距不能只看载码体贴的位置和读写头感应面之间的垂直距离还要考虑偏移角度和载码体移动路径。倍加福读写头规格书会给出最大读距我一般把这个值打八折作为基准安装距离。比如标称读距30mm安装垂直距离就控制在24mm以内同时允许侧向偏移约10mm。如果两个读写头在同一条输送线上连续安装感应区不能重叠否则会出现串读。最简单办法是让两个读写头中心距大于最大读距的2倍比如标称30mm中心距至少60mm实际我做项目都放到100mm以上彻底避开边缘干扰。2.3 物理接线M12针脚定义与现场电源规划倍加福IO-Link读写头绝大多数是M12圆形接头四芯或五芯。标准A编码M12插头的针脚定义是针脚1接24V电源正极针脚3接0V针脚4接IO-Link通信数据线针脚2在不同型号上略有区别有的作为数字量输入有的作为另一个通信通道。不要凭颜色记忆不同厂家的线缆颜色并不统一我见过好几次把针脚2和针脚4接反读写头LED亮绿灯但一直不进组态。接线时用标准M12连接器预制线缆最安全如果现场需要自己做线建议剥线后对着读写头标签上的针脚定义图逐根确认。IO-Link要求使用非屏蔽标准电缆即可但射频读写头工作时会产生微弱的高频信号再加上现场变频器、伺服驱动器多我建议使用屏蔽M12电缆屏蔽层在PLC侧单端接地。线缆总长度控制在IO-Link标准20米内如果读写头在移动机构上要用高柔电缆固定安装则用普通PVC护套电缆就够。电源规划是最容易被忽略的环节。IO-Link主站模块和读写头共用一个24V电源没问题但读写头在写入载码体的瞬间电流会比待机时高出不少如果电源线过长或电源功率余量不足电压跌落会让IO-Link通信直接中断。我一般会给IO-Link主站模块单独供电尤其是系统里还带着其他电磁阀、继电器负载时。供电线径也注意距离超过2米就选0.75mm²以上IO-Link信号线和电源线共用一根M12电缆线芯截面积由电缆决定所以选择预制电缆时就要选线径足够粗的规格。3. 博图V15.1组态步骤从导入IODD到配置IO-Link通道3.1 导入倍加福读写头的IODD文件并添加到硬件目录第一次在博图V15.1里组态IO-Link读写头最容易被卡住的是打开IO-Link主站模块的通道设置下拉列表里没有任何读写头可选。原因是博图不认识倍加福读写头必须先导入它对应的IODD描述文件。IODD文件是一个XML格式的包包含设备ID、参数定义、数据布局等信息。正常渠道是找倍加福的技术支持获取对应型号的IODD文件下载后通常是个压缩包里面包含estedes.xxdd、vendor.xxdd等文件。导入步骤打开博图V15.1后从菜单栏选“设备描述文件”—“管理”在弹出窗口中点击“安装”定位到下载的IODD文件夹。博图会识别出供应商“PepperlFuchs”和设备型号。安装完成后在硬件目录的“其他现场设备”或IO-Link主站的设备列表里就能找到这个读写头。要注意IODD文件版本必须和读写头硬件版本匹配比如读写头的IODD版本是V2.1你却安装了V1.0的文件组态后可能无法识别。我习惯把下载的IODD压缩包命名为带型号和日期的格式比如“IQH1_HF_20250315”避免版本混乱。导入成功后把IO-Link主站模块拖到S7-1200的左侧总线。博图自动分配模块的I/O地址。右键点击IO-Link主站模块选择“IO-Link设备”属性选项卡在每个通道的下拉框里选择对应的读写头型号。选择后通道下方会出现输入长度和输出长度的默认值通常输入6~16字节输出4~6字节取决于读取头型号。这里我建议记录下博图自动分配的输入起始地址和输出起始地址比如输入IW64、输出QW64后面监控表编程全用这两个地址。3.2 配置IO-Link端口模式、通信速率与循环时间博图组态IO-Link主站时每个通道有几种操作模式数字量输入、数字量输出、IO-Link模式。很多人这一步会忽略通道默认为数字量模式读写头虽然接了信号线但只是作为一个开关量输入工作数据根本进不了PLC。必须双击IO-Link主站模块在每个通道属性里把端口模式改为“IO-Link”然后选择之前添加的读写头设备。只有改为IO-Link模式通道才执行周期通信。通信速率方面IO-Link标准有COM14.8kbps、COM238.4kbps、COM3230.4kbps三档。倍加福HF读写头一般支持COM3博图里默认可能是COM2建议手动设为COM3。速率改好后读写头的LED会从慢闪变为常亮表示通信建立。如果线缆长度超过15米COM3可能因信号衰减出现偶发断线这时要降回COM2并重启PLC再观察。循环时间是主站与读写头的通信周期默认通常是10ms对RFID应用来说太短了因为读写头内部处理载码体天线扫描需要几十毫秒过短的循环没有实际意义。我在参数表里把数据循环时间设为50ms这样可以减轻PLC通信负载也不影响产线节拍——除非你的工位节拍小于100ms但那种场景一般不用RFID。还有一项“数据处理类型”对倍加福读写头选“字节数据”而不是“位数据”因为载码体数据是字节流。端口参数里有一项“设备ID校验”建议保持默认。博图会在每次通信开始时读取读写头的设备ID与IODD文件里的设备ID比对如果不一致通道会报错。倍加福原厂读写头设备ID都是统一的不会存在不一致的情况除非你买到的是兼容第三方读写头。如果你发现组态后通道报“设备ID错误”先确认读写头型号与IODD文件是否完全匹配不要手动修改设备ID改了只会让通信更奇怪。3.3 下载硬件组态并用监控表验证在线状态组态参数设好后选中PLC站点执行“编译—硬件”然后下载到CPU。下载完成后在博图的“在线与诊断”界面里选择IO-Link主站模块查看通道的状态。正常状态下通道项会显示通信已建立并且可以看到读写头的供应商ID、设备ID、协处理器版本等具体信息。如果通道状态显示“无连接”或“设备失败”就要回到硬件侧排查接线和供电。确认在线后打开一个监控表把IO-Link主站模块的输入字节地址和输出字节地址添加到“监视”区域。以地址字为单位监视例如输入地址IW64、输出QW64。接通电源后输入字的低字节应该出现状态值。倍加福读写头的状态字一般是一个16位整数常见空闲状态值0x8000。如果看到0x8000说明读写头已就绪物理通信链路完全正常。如果状态值是0x0000大概率是端口模式没改对或者接线针脚有误。监控表还能验证读写头是否能检测到载码体。把一枚载码体靠近读写头正常情况下状态字会从0x8000变为“已检测到载码体”的值比如0x8001。如果状态字不变先检查载码体是否在读写头感应范围内再确认载码体工作频率是否匹配。我用过一枚低频载码体放在高频读写头上半天没反应后来才意识到两者协议都不一样。这一步做完硬件层面就没问题了下面进入程序调试。4. 读写命令调试用SCL实现读取UID和写入载码体数据4.1 监控表强制发送命令快速验证读写头收发在正式写PLC程序前先用监控表手动发送一条命令确认读写头能正确响应。假设IO-Link主站输出起始地址是QW64输入起始地址是IW64。倍加福HF读写头常见命令布局是输出第一个字命令码输出第二个字数据长度或地址输出后续字数据输入第一个字状态字输入后续字节数据。具体偏移要以IODD或说明书为准但思路一致。在监控表里把QW64强制设为“1”即发送读取UID的命令。然后观察IW64的变化如果读写到载码体状态字变成0x8001紧接着的几个字节里就是载码体UID的前几个字节。我用这个方法验证过不同尺寸的载码体读取到的UID完全不同能直观判断读写头天线是否正常工作。强制发送时不要一直按“立即刷新”因为写入命令是边沿触发的持续发送重复命令可能会让读写头不停执行相同操作。监控表发送命令的另一个好处是能测出读写命令返回的数据格式。比如发送读取用户数据命令时要先在输出第二个字里指定读取起始地址比如设为地址0。如果监控表里看到返回数据带了前4个字节0xFF、0xFF、0xFF、0xFF说明载码体用户区还没有写入有效数据。这个结果能帮你判断命令参数设置是否正确避免上来就写程序排查问题时黑匣子一样。4.2 读取载码体UID和用户数据的SCL函数实现监控表验证命令格式正确后就可以在博图的“程序块”里创建FC把读写逻辑封装成可复用的函数。下面是我在一个S7-1212C项目里用的简化版读取函数用来读取载码体UID。这里的地址做了抽象实际项目中要把“ID64”和“QD64”替换成你的主站模块地址。// 读取载码体UID的SCL函数用于S7-1200 FUNCTION FC_ReadUID : Void VAR_INPUT bTrigger : Bool; // 上升沿触发读取 iwInAddr : Int; // IO-Link主站输入字地址偏移如64 qwOutAddr : Int; // IO-Link主站输出字地址偏移如64 END_VAR VAR_OUTPUT bReady : Bool; // 状态字空闲 bDone : Bool; // 读取完成 aUID : Array[0..7] Of Byte; // 读取到的UID 8字节 wStatus : Word; // 状态字 END_VAR VAR_TEMP ptIn : Word; // 临时变量 END_VAR BEGIN // 非触发状态不发送命令 IF NOT bTrigger THEN bReady : FALSE; bDone : FALSE; RETURN; END_IF; // 发送读取UID命令命令码1 POKE(word, qwOutAddr, W#16#0001); // 等待状态字出现0x8001最多等待20个扫描周期 FOR i : 1 TO 20 DO wStatus : PEEK(word, iwInAddr); IF wStatus W#16#8001 THEN bDone : TRUE; // 拷贝输入缓冲区中从第2个字节开始的8字节UID FOR j : 0 TO 7 DO aUID[j] : PEEK(byte, iwInAddr 2 j); END_FOR; EXIT; END_IF; END_FOR; // 状态字不是空闲也不是完成则视为错误 IF NOT bDone THEN bReady : FALSE; END_IF; END_FUNCTION这段代码用POKE和PEEK指令直接访问过程映像区不需要担心地址重叠问题。参数说明bTrigger是外部启停信号必须用上升沿触发否则每个扫描周期都会发一次命令。iwInAddr和qwOutAddr是主站模块的起始地址注意博图里有些CPU支持“字”地址直接用I64有些需要访问字节地址我的写法是用整型表示地址偏移更方便参数化。FOR循环等待状态字是最简单的同步方式但对扫描周期有影响更好的做法是用定时器实现异步等待。如果状态字迟迟不变化循环20次后函数自动退出避免程序卡死。读取用户数据区的逻辑类似只需要把命令码从0x01改成0x02并指定读取起始地址和数据长度。倍加福标准命令中输出第二个字通常是起始地址输出第三个字是读取长度。要注意用户数据区长度不要超过读写头协议支持的最大长度比如一次读32字节如果你的载码体用户区有128字节可以分4次读取。我在实际项目里只读一次因为工位写入的数据一般不超过16字节一次能读完。4.3 写入载码体数据的时序控制防止写坏载码体写入命令比读取命令复杂因为载码体内部闪存写入需要时间。发送写入命令后读写头会先进入忙状态等到数据完全写入才返回完成状态。如果PLC在忙状态时发送下一条命令可能打断写入过程轻则写入失败重则载码体数据区损坏。我遇到过载码体写了一半之后再读取整个用户区都是0xFF只能报废。安全的写入流程分四步第一步发送写入命令第二步轮询状态字是否为“写入完成”第三步空闲后延时50ms再允许下一条命令第四步重新读取该地址区域校验数据。下面是一个写入用户数据的SCL片段使用了一个内部定时器做延时。// 写入载码体用户区的关键逻辑 // bWriteTrigger: 写入触发 // qwOutAddr: 输出起始地址 // iwInAddr: 输入起始地址 IF bWriteTrigger AND NOT bWriteBusy THEN // 组装写入命令 // 命令码0x03起始地址bStartAddr数据长度Len POKE(word, qwOutAddr, W#16#0003); POKE(word, qwOutAddr 2, bStartAddr); POKE(word, qwOutAddr 4, Len); FOR i : 0 TO Len - 1 DO POKE(byte, qwOutAddr 6 i, aData[i]); END_FOR; bWriteBusy : TRUE; tonWriteTimer(IN:TRUE, PT:T#50MS); END_IF; // 轮询状态字 IF bWriteBusy THEN wStatus : PEEK(word, iwInAddr); IF wStatus W#16#8002 THEN // 写入完成 bWriteBusy : FALSE; bWriteDone : TRUE; tonWriteTimer(IN:FALSE); ELSIF wStatus W#16#8000 THEN // 回到空闲说明写入失败 bWriteBusy : FALSE; bWriteError : TRUE; END_IF; END_IF;这个片段的要点写入命令的触发要加互锁防止重复写入写完必须轮询完成状态不能只发命令不管结果写入完成后要再读一遍数据区做校验这是我在现场总结出来最有效防错手段。另外载码体写入有最小页大小限制常见是4字节一页所以Len必须是4的倍数不够就补0xFF。如果写入长度不合法读写头会立即返回错误状态比如0x8413。程序里还有一个容易忽略的点载码体的地址映射。用户区地址有的从0x00开始有的从0x10开始读写头通过命令参数指定起始地址。我在一台设备上调试时写入命令的起始地址设为0但读回来数据都在地址16以后原因是那款载码体的用户区本身把前16字节保留用于特殊功能。查阅载码体数据手册后改用起始地址16写入一次成功。调试这种问题不能只看PLC数据要结合载码体内部地址图和读写头命令说明。5. 倍加福读写头调试常见问题排查5个翻车现场5.1 博图找不到读写头IODD未导入或端口模式错现象是IO-Link主站通道设备列表里是空的下拉框没有倍加福读写头可选。检查过程分两层先看IODD文件是否安装成功在博图“设备描述文件—管理”里应能看到倍加福设备的条目。如果没有重新导入并注意安装时选择正确文件夹。第二层看端口模式即使设备条目已安装如果通道属性是“数字量输入/输出”下拉框也不会出现IO-Link设备列表。解决方法是把端口模式改为“IO-Link”再重新选择设备。还有一种情况是读写头本身供电异常。IO-Link主站模块的通道会为连接的设备提供24V电源如果读写头电源针脚接触不良或线缆内部断芯读写头LED不亮或闪红灯。这时候博图里无论如何找不到设备因为主站没有检测到设备的存在。优先用万用表量读写头M12插头针脚1和3之间的电压应在24V左右。5.2 能读UID但用户数据全零起始地址与长度参数问题读写头能读到载码体UID证明射频通信正常但读取用户数据时返回全0或数据位数不对。这个问题原因有两个一是读写头读取用户区时需要指定起始地址如果不指定或指定的地址超出载码体有效地址范围读写头会返回空数据。二是载码体的用户区只有部分字节已写入出厂默认填充0x00如果你读取的地址段从未写入过数据读回来自然全是0。解决步骤是先用监控表强制发送读取命令命令参数里显式写上起始地址为0数据长度为16字节观察返回内容。如果还是全0换一个已知写入数据的载码体再试。如果已知载码体在别的读写头上能读出数据在这台读写头上全0那就是读写头的”读取区“配置有问题比如激活了某种数据过滤或掩码功能。查看读写头IODD参数关闭“数据过滤”即可。5.3 写入载码体报错写保护、页大小和供电压降写入错误的表现是状态字返回错误码或者明明提示写入完成但重新读取时数据仍是旧值。最常见的三个原因按优先级排列载码体写保护位被置位数据长度不是页大小的整数倍以及写入瞬间电源电压跌落。写保护位可以通过读写头命令读取状态字中的保护位标志但更直接的方法是换一枚全新载码体测试排除保护位问题。页大小问题在倍加福载码体上很典型比如某型号一页4字节写入长度给5字节读写头返回错误。解决办法是把数据长度补成4的倍数补的字节用0xFF或0x00都可以。供电压降这个坑很隐蔽我见过一个读写头写入时报“射频错误”排查到最后发现是IO-Link主站模块电源线太细写入瞬间电流上升到350mA线缆压降导致电压低于21.5V。把电源线加粗到0.75mm²写入就正常了。5.4 多读写头串读感应区重叠与分时使能在相邻工位安装两个读写头有时读写头A的缓冲区里出现了读写头B感应区的载码体数据。这种现象叫串读本质是射频场重叠或反射。解决方法是拉开距离让两个读写头的感应区在物理上不重叠。如果空间不允许可以在程序里给每个读写头加一个“使能”命令写入空闲命令到不工作的读写头使其天线停止发射然后再操作另一个读写头。软件分时使能的方法很简单每个读写头输出缓冲区有一个“读/写”命令口发送命令0x0000表示休眠不发送任何射频命令。在SCL里两个读写头的工作触发做互锁同一时间只让一个读写头发送命令。这样即使感应区有重叠也不会发生同时识别。这个办法我用于同一个龙门架上两个读写头间距只有40mm的场景问题立即消失。5.5 地址写错通道主站地址分配与字对齐陷阱程序里明明把命令写到了QD64但读写头没有反应检查后才发现读写头接在通道2而QD64是通道1的地址。这是组态时最容易犯的错误。博图添加IO-Link主站模块后起始地址是针对整个模块的每个通道地址按顺序排列但不会自动直观显示。需要在组态界面点选具体通道在“地址”选项卡里查看它对应的输入/输出起始地址然后修改程序中的地址。另一个隐藏问题是对齐方式。有些IO-Link主站模块的I/O地址是字对齐的输入地址从IW64开始但读写头的第一个状态字节不是最低字节而是最高字节也就是大端模式。在这种情况下直接用“W”访问状态字没问题但如果你用“B”访问字节可能读到的实际是状态字的高字节或低字节导致判断逻辑错误。我建议始终以字为单位读取状态字避免字节对齐差异。如果一定要用字节先在监控表里确认数据布局再写程序。6. 把读写头嵌进产线用UID做多工位追溯的验证习惯单点调试通过后读写头真正落地到产线通常要解决多工位追溯问题。我的常规做法是建立一张“载码体跟踪表”把每枚载码体的UID作为唯一标识在PLC全局DB中维护一条记录记录内容是工件号、各工位的工序结果和写入时间。每个工位读写头读取UID后在跟踪表中查找该UID是否存在不存在则新建存在则更新对应工位数据。这个表在博图里用STRUCT数组实现数组大小按产线同时运行的工件数量确定比如100个工件就建100条记录再多就要考虑与MES的通信。实际验证这套系统我留下来的习惯是每调试一个工位就拿一枚载码体在这枚载码体上手动写入一个递增的测试编号然后让载码体顺着输送线走到下一个工位观察工位程序是否识别。这个过程不能只在编程软件里看变量要在HMI上做一个“最近读取记录”页面直接显示读到的UID和上一工位写入的数据。用HMI页面验证比看DB监视值更直观也方便产线维护人员日后使用。验证过程中最怕出现脏数据。如果之前调试时手动写过不完整的记录这些数据残留在载码体用户区会干扰后续工位判断。我多次吃过这个亏所以现在养成一个习惯每次测试前先用“清除载码体用户区”的命令把所有测试载码体重置为统一状态再开始新的测试序列。这不算复杂功能但在SCL里增加一个系统维护页面手动触发清除命令调试和试生产阶段都非常有用。调试多工位追溯其实是在和数据残留作斗争。处理好这一点产线上的RFID系统会稳定很多。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑