ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

三菱FX3U与PC的RS485通信实战:FX3U-485-BD接线和D8120设置

三菱FX3U与PC的RS485通信实战:FX3U-485-BD接线和D8120设置 简介面向PLC控制与上位机通信开发人员的实战文档围绕FX3U-128MT与主站PC间的无协议RS485通信展开适用于需要远程采集PLC报警信息、且传输距离超过RS232限值的自动化项目。文档完整记录了硬件选型与接线过程包括MOXA四通道PCI-RS485多串口卡和FX3U-485-BD模块的引脚定义、通信电缆焊接方式以及PLC端RS指令和D8120寄存器的配置方法。包体仅含1个doc文件约124KB为纯文档资源。已有147人学习适合电气工程师、PLC程序员及自动化专业学生参考。文中还复现了实验中遇到的PC与PLC无法互收问题并给出了线序调换与D8120设置为C81H的排错思路可帮助读者规避同类通信故障缩短现场调试时间。1. 挑残机项目里的RS485选型15米限制之外的可行解挑残机的主站PC需要记录PLCFX3U-128MT的报警信息设备布局决定了通信线缆要跨越较长距离。RS232最远15米的规格在这个场景下直接出局RS485凭借1200米的理论传输距离和差分信号抗干扰能力成为现实选择。但PLC本体不带485口必须外挂FX3U-485-BD扩展板这就引出两个实际问题一是MOXA多串口卡与BD板的引脚定义如何对应二是PLC无协议通信的格式寄存器怎么设才能让数据真正走起来。这篇文章沿着项目调试的真实路径把硬件接线、RS指令参数、D8120设置和两轮排错过程完整拆开适合正在做三菱PLC与PC串口通信的工程师参考尤其是第一次接触FX3U-485-BD的人。文中所有结论都来自实际跑通的实验不是手册抄录。2. 硬件接线MOXA多串口卡与FX3U-485-BD的引脚对照和线序陷阱2.1 两端引脚定义A/B标签的歧义根源主站PC端用的是MOXA 4通道PCI-RS485多串口卡DB9公头引出5个有效引脚PLC端是FX3U-485-BD扩展板5位端子排。两者的引脚定义如下引脚MOXA多串口卡定义FX3U-485-BD定义1TXD-(A)RDA2TXD(B)RDB3RXD(B)SDB4RXD-(A)SDA5GNDSGMOXA卡的数据手册用TXD/TXD-、RXD/RXD-四个信号标识同时括号里标注了A/B。FX3U-485-BD这边则是RDA/RDB对应接收SDA/SDB对应发送。RS485两线制半双工通信中标准做法是A接Data-、B接Data但MOXA括号里的A/B标注与常规习惯并不一致这正是第一次接线失败的原因。2.2 通信电缆焊接第一版线序为什么全灭按直觉把同名信号对接——MOXA的TXD-(A)接PLC的RDATXD(B)接RDBRXD(B)接SDBRXD-(A)接SDAGND接SG线色定义如下主站PC端引脚颜色PLC端TXD-(A)1黄RDATXD(B)2红RDBRXD(B)3橙SDBRXD-(A)4黑SDAGND5紫SG焊接完成后烧录测试程序结果PC发数据PLC收不到PLC发数据PC也收不到双向全灭。这时第一反应是检查拨码开关、串口调试助手的参数设置但波特率、数据位这些都对得上。问题出在A/B标签的语义错位。RS485标准定义A为负信号、B为正信号可MOXA手册的括号标注把A和B的极性写反了。实际工程中经常遇到厂商把A标成Data的坑不能盲信括号里的字符必须用示波器或万用表确认电平极性。2.3 调换线序解决了一半问题把PLC端的RDA与RDB互换、SDA与SDB互换同时发送和接收交叉对接主站PC端引脚颜色PLC端TXD-(A)1黄RDBTXD(B)2红RDARXD(B)3橙SDARXD-(A)4黑SDBGND5紫SG重新通电测试PLC发送、PC能正常接收但PC发送、PLC依然收不到。这个现象很典型发送方向通了接收方向不通说明物理层已经基本正确问题转移到PLC端的收发切换或通信格式配置上。2.4 接地和屏蔽的实务处理RS485虽然是差分传输但不代表可以忽略参考地。MOXA的GND和FX3U-485-BD的SG必须互联否则共模电压超出收发器承受范围时轻则通信误码重则烧毁接口芯片。项目现场电缆长度超过15米我习惯采用屏蔽双绞线屏蔽层单端接地——两端接地会产生地环路电流反而引入噪声。如果通信距离超过100米还应该在总线末端并联120欧终端电阻。挑残机项目线长约30米MOXA卡内部自带跳线可以启用终端电阻但PLC端BD板没有所以只在PC端启用即可。3. RS指令与D8120寄存器无协议通信的参数配置3.1 RS指令的格式与操作数含义三菱FX系列无协议通信的核心是RS指令功能是将数据通过基本单元上的串行通信口发送出去同时接收外来数据。指令格式如下RS D0 K10 D100 K20D0发送数据寄存器的起始地址从D0开始的10个字节会被发送K10发送数据长度字节数范围0~4096D100接收数据寄存器的起始地址收到的数据会存到这里K20接收数据最大长度字节数实际接收长度由系统写入D8122RS指令是主动型的每次都要手动触发。程序里通常这样组织// 伪代码逻辑对应梯形图的动作顺序 LD M8002 // 初始化脉冲 MOV H00C81 D8120 // 设置通信格式 MOV K0 D8121 // 无协议通信时保持默认 RS D0 K10 D100 K20 // 启用接收功能发送时把要发的数据先移入D0开始的寄存器区然后置位M8122发送请求PLC会自动把数据从串口发出去。接收时不需要额外指令数据到达后自动存入D100同时M8123接收完成标志置位程序读走数据后必须复位M8123否则后续数据无法再接收。3.2 D8120的位定义每一位都不能拍脑袋D8120是通信格式寄存器16位二进制每一位控制一种通信参数。项目最终设定为0C81H对应的二进制是0000 1100 1000 0001拆开来看位值含义b01数据位8位b10无奇偶校验b201位停止位b30无停止位延长b4~b70000波特率9600bpsb8~b900无帧头帧尾b101使用FX3U-485-BD时必须为1b111使用FX3U-485-BD时必须为1b12~b150000协议模式默认这里最容易跳坑的是b10和b11。查阅《三菱FX3U用户手册》当基本单元连接FX3U-485-BD或FX3U-232-BD时D8120的b10、b11必须同时设为1否则通信口不会按BD板的方式工作。最初设0081H时b10、b11都是0对应的是基本单元内置RS422口的工作模式BD板物理上接了线但PLC内部根本没把通信口切换到BD板上。3.3 特殊辅助继电器的配合RS指令的运行依赖一组特殊辅助继电器常用几个如下软元件功能使用要点M8122发送请求置位后发送RS指令指定的数据发送完成自动复位M8123接收完成标志接收完成后置位程序处理完数据后必须手动复位M8120通信格式修改标志修改D8120之前先置位改完复位后才能生效M8121接收超时等待可选项配合D8129设置超时时间初始化流程里一定要先置位M8120、写入D8120、再复位M8120顺序不能反。有些工程师直接在程序开头用MOV指令写D8120结果通信参数不生效就是这个原因。3.4 梯形图实现完整的发送接收框架// 梯形图逻辑的STL描述映射到GX Works2的梯形图 LD M8002 SET M8120 // 进入通信格式设置模式 MOV H0C81 D8120 // 9600,8,1,无校验,RS485,BD板模式 RST M8120 // 退出设置模式 RS D0 K10 D100 K20 // 初始化接收,发送长度10字节 // 发送数据准备 LD X001 MOV U0 D0 // 把要发送的数据写入D0 MOV U1 D1 SET M8122 // 启动发送 // 接收数据处理 LD M8123 // 接收完成 MOV D100 D200 // 把收到的数据转存到业务寄存器区 RST M8123 // 必须复位,否则下一条数据进不来这段代码展示了无协议通信的最小完整框架。RS指令在初始化时就被执行之后持续等待接收。发送数据时先向发送缓冲区写入内容再触发发送请求。接收完成标志M8123是边沿敏感的如果处理程序里忘了复位第二次接收永远不会完成。4. 实验排错全过程从0081H到C81H的一次典型调试4.1 第一步硬件连接和初测按照第二章第二版的交叉线序焊接好电缆把FX3U-485-BD插到FX3U-128MT基本单元的通信扩展槽上MOXA卡安装到PC的PCI插槽并装好驱动。设备管理器里确认MOXA卡的串口号比如COM3。PLC端程序先写最简版本LD M8002 MOV H0081 D8120 // 最初错误配置,后续发现BD板要求b10,b111 RS D0 K10 D100 K20PC端打开串口调试助手选择COM3波特率96008位数据位1位停止位无校验无流控。点击打开串口发送区填“1234567890”ASCII点击发送。观察PLC端监视D100的值如果能在软元件监视窗口看到D100~D109有数据变化说明接收正常。但实际结果是什么都没有。4.2 第二步分析总线状态和线序用示波器探头夹在MOXA卡TXD/TXD-两端PC发送时能看到差分信号脉冲说明PC侧发送电路在工作。再测PLC端RDB/RDA之间的电压完全没有响应。这种情况下先怀疑线序。调用MOXA卡自带的诊断工具查看串口状态寄存器确认MOXA卡实际发出的电平极性。同时用万用表二极管档测量MXOA卡引脚和PLC BD板引脚之间的导通性逐一核对。这里发现了一个容易被忽略的点DB9头的引脚编号和端子排的引脚编号都是从1开始但MOXA卡的TXD-实际对应DB9的第1脚TXD对应第2脚而FX3U-485-BD的端子排第1脚是RDA第2脚是RDB。如果依赖括号里的A/B标签做同类对接就会像第一次焊接那样把RDA接到TXD-(A)上等于把Data-接到Data-、Data接到Data这本身没错但MOXA的括号标注里A和B的极性与RS485标准相反导致实际是把负信号接到了正信号上。调换线序后PLC发送、PC接收成功验证了发送方向的物理连接正确。但反向不通说明还有逻辑层问题。4.3 第三步深挖D8120的BD板设置打开GX Works2的软元件监视强制D8120当前值发现是0081H。对照三菱官方手册FX3U-485-BD的使用章节中有一项重要说明在D8120的b11、b10必须设定为1,1即选择FX3U-485-BD或FX3U-232-BD专用模式。当时手上《三菱编程手册》里写得很清楚但初版实验时只看了D8120常用设置表没看BD板的附加条件漏掉了这两位。把D8120改成0C81H热修改PLC程序在线写入D8120再次测试PC发送“1234567890”PLC端D100接收到对应ASCII码PLC程序里把接收到的数据加上偏移再发送回去PC串口助手也能看到回传数据。4.4 不同D8120取值下的表现对照设定值b10b11通信效果0081H00使用基本单元内置RS422口模式BD板无效双向不通0481H01模式不匹配发送可能通接收不稳定0C81H11使用FX3U-485-BD模式双向正常这个表就是这次调试最值的记录。很多现场问题最后都落在这种“多读了一页手册”的差异上。b10、b11组合代表通信口硬件选择不能按通用格式寄存器理解。4.5 常见误用把D8120当普通寄存器直接改有人为了省事在PLC运行时通过上位机写D8120不经过M8120设置流程。这样改完参数不会立即生效必须先将M8120置位写入D8120后再复位M8120或者直接断电重启。正确做法是把D8120的写入放在M8002初始化脉冲之后这样PLC上电即完成配置。另一个常见误用是忘记设置接收最大长度。RS指令的第二个长度参数如果设得太小超过长度的数据会被丢弃而且不会有任何报错。比如PC一次发20字节但接收长度只设了10那么后10字节直接丢掉而且M8123根本不会置位程序看起来就像“没收到数据”。调试时先用短数据帧长度为1~4个字节容易定位。5. 无协议通信的验证方法和稳定化技巧5.1 用串口调试助手做双向回环测试验证步骤分三级PC自发自收串口调试助手的发送区发一串数据如果接收到相同数据说明MOXA卡的环回模式打开或接线短路需要关闭环回模式PLC发送、PC接收PLC程序定时向D0写入计数递增值触发M8122PC端每秒应收到一次数据数据内容按发送缓冲区计算PC发送、PLC接收PC发一帧已知数据PLC端D100区域的数值与发送内容一致并且M8123能正常置位复位。最容易卡住的是第3步。在PLC程序里把接收到的数据原样回传PC端同时收到自己的回显这就证明RS485全双工通路两对差分线实际上可以工作。注意RS485是半双工发送和接收共用物理通道时由方向切换控制这里MOXA卡和FX3U-485-BD之间用了四线制可以实现类似全双工的效果但官方定位仍是“无协议半双工”所以在PLC程序里不能一边发送一边等待接收。5.2 数据帧格式约定给报警信息加帧头帧尾项目里要记录的是错误报警信息实际报警码可能是16位整数或字符串。无协议通信没有协议号接收方必须靠帧格式自己切分数据。我通常在发送缓冲区里定义一个固定格式帧头(1字节:0x02) 报警码(2字节) 时间戳(4字节) 帧尾(1字节:0x03)发送程序按这个格式填充D0~D7PC端按同样的规则解析。如果数据源是纯数字寄存器注意高低字节顺序。三菱PLC的MOV指令把数据传到大端序但RS指令是按字节发送D0的高8位先发还是低8位先发取决于D8120的b14位。b140时低字节在前b141时高字节在前。我在项目中固定b141保证与PC端解析一致。如果在GX Works2里查看D0的值是0x1234发送后又变成0x3412就是b14设置反了。5.3 用M8121做接收超时避免死等RS485无协议通信中没有流控如果PC端发了半帧数据就断线PLC的M8123可能一直不置位接收缓冲区卡住。可以给接收加超时控制LD M8121 // 超时标志 RST M8123 RS D0 K10 D100 K20 // 重新启用接收M8121配合D8129超时时间单位10ms当接收数据间隔超过设定值时M8121置位。在梯形图里把它作为一个复位信号把接收缓冲区清空重新接收。超时时间我一般设20~50ms太快会切碎正常帧太慢则失去保护意义。5.4 校验方式累加和与CRC16纯无协议通信没有CRC保障PC端和PLC端需要自己约定校验。简单项目用累加和就够校验字节 (帧头 数据字节1 数据字节2 ... 帧尾) 取低8位PLC端用求和指令实现PC端同样求和比较。如果环境电磁干扰强报警数据容不得错可以用CRC16-Modbus。三菱FX3U没有现成CRC指令需要写一个子程序逐位计算大约40步梯形图。不过通用做法还是把CRC计算放在PC端PLC端只做累加和减少PLC扫描周期占用。5.5 最后的完整性检查清单现场交付前按下面顺序过一遍用万用表确认通信电缆线序与第二章第三版表格一致尤其确认TXD/TXD-与RDA/RDB的交叉关系检查PLC的D8120值是不是0C81H并在程序里用M8120流程设置检查RS指令的接收长度是否大于最大报警帧长度检查M8123是否在读取后复位用示波器测量总线空闲电平静态时A-B电压应在-0.2V~-6V范围如果A-B电压为正线序又反了检查MOXA卡驱动设置里的“流控”是否为无RS485的自动方向切换由驱动处理不要开启软件流控把这六项逐条确认后挑残机项目的报警记录功能在连续运行72小时内没有出现丢帧或乱码整个调式过程确实就是靠线序和D8120那两位解决了问题。本文还有配套的精品资源点击获取
返回列表