MELSEC-Q_L系列PLC串行通信实战:从RS-485配置到变频器报文解析
简介MITSUBISHI三菱官方发布的MELSEC-Q/L系列串行通信模块用户手册应用篇面向PLC系统设计、安装与维护工程师重点解决QJ71C24N、QJ71C24、LJ71C24等常见串行通信模块的选型接线、缓冲存储器设置及系统联调问题。压缩包内为1个PDF文件大小约10.79MB内容按安全、设计、安装、配线等章节展开并对Q系列与L系列的使用场景分别说明。当前已有229人浏览学习适合需要对照官方资料进行故障排查、项目规划或施工验收的工控人员。通过阅读可掌握通信异常时各站动作状态的确认方法、通知功能呼叫电路设置、控制线与动力线保持100mm以上间距、端子盖板安装、连接器压装规范等实操细节有助于避免因误操作导致模块损坏或系统误动作是一份权威且实用的官方技术参考。1. 为什么MELSEC-Q_L的串行通信模块值得单独看应用篇现场接一台三菱D700变频器走485通讯给频率第一反应是翻硬件手册找端子号但真正卡住人的从来不是接线而是参数不知道往哪儿写。MELSEC-Q_L系列的串行通信模块在GX Works2里同时牵扯三处配置模块侧面的开关设置、智能功能模块参数里的通信协议设置、以及运行时靠缓冲存储器地址读写数据。新手往往把开关拨对了却不知道协议要单独选或者程序里写好了发送指令但打开通信口那一步漏了数据一直发不出去。这篇博文面向的是做Q系列/L系列项目、需要把PLC和变频器、仪表、上位机串起来的工程师不讲模块型号选型和安装走线只讲把串口真正跑起来的配置顺序、报文构造和排错路径。2. 串行通信模块的接口选型与协议选择先定物理层再定数据链路层2.1 RS-232、RS-422、RS-485三种接口的适用边界Q系列串行通信模块按物理接口分成几类L系列对应的是LJ71C24N等型号参数体系和编程方式与Q系列一致。选接口之前先回答三个问题通信距离有多远、对方设备是点对点还是多站、对方接口是哪种。接口信号线典型距离拓扑常见对接设备RS-232TXD/RXD/GND15米以内点对点电脑、触摸屏、老式仪表RS-422TX/TX-/RX/RX-可达1200米点对点为主远程仪表、部分变频器RS-485A/B两线可达1200米多站挂接D700变频器链路、扫码枪、智能电表现场最常见的坑是把RS-485当成RS-232来接只接A/B两根线却忘了把双方的地线策略处理好。RS-485是半双工同一时刻只能收或发程序里的收发时序必须串行化RS-422是四线全双工适合需要同时应答的设备。对于D700变频器这类从站标准做法是走RS-485把站号依次设为1、2、3一条总线上挂多台。2.2 协议不是选出来的是对方设备的参数表逼出来的串行通信模块支持MC协议、无顺序协议和双向协议。选型逻辑很简单如果对方也是三菱PLC、GOT触摸屏或支持MC协议的第三方设备直接走MC协议帧格式固定、校验规则现成如果对方是变频器、温控器、扫码枪这类只有私有协议的设备就用无顺序协议模块只负责把字节原样发出去帧由自己拼。双向协议是早期链路层占用型通信现在的项目里基本不会再主动选它除非是改造老系统、对方上位机只认这种格式。我一般会把协议选择放在项目启动时定下来因为它直接影响后面程序结构。MC协议下PLC侧负责组帧、解析响应、处理超时重发无顺序协议下PLC侧更像一个UART透传口难点从协议转移到帧解析上。D700变频器走485通讯给频率用的就是无顺序协议。2.3 模块型号差异与起始XY地址的关系Q系列串行通信模块有RS-232型和RS-422/485型接口不同的型号后缀不同L系列对应LJ71C24N系列。选型时要重点看两处模块上标明的接口类型以及它在基板上被分配的起始XY地址。起始XY地址不是随便给的它决定了两件事——程序里访问缓冲存储器时用的单元号Un\G以及MC协议报文里请求目标模块IO号。举例来说模块分配到的起始地址是X/Y 0x00IO号就是00分配到0x03FFIO号就是03FF。MC协议帧里的IO号字段填的就是这个十六进制值不是模块的开关站号。这个细节至少能让一半的“连不上”问题消失。3. 用GX Works2做开关设置与通信参数配置从拨码到智能功能模块参数3.1 Q系列的参数体系三处配置必须串起来看串行通信模块的参数分散在三个层面模块侧面的物理开关、GX Works2的智能功能模块参数、以及运行时读写缓冲存储器。三者不是可选项而是各管一段。物理开关决定通信速率和校验这类物理层参数智能功能模块参数里的“通信协议设置”决定用MC协议还是无顺序协议缓冲存储器则是程序读写数据的入口。这三层的关系可以这样记开关负责“线能不能通”协议设置负责“数据按什么规则走”缓冲存储器负责“数据从哪儿拿、往哪儿放”。只改开关不改协议设置或者只写程序不配置参数都会出现设备在线但数据不动的情况。3.2 开关设置的典型参数对照与十六进制换算以QJ71C24N为例模块侧面或GX Works2的开关设置界面里需要确认的参数包括通信速率、数据位、停止位、校验位和站号。不同型号的拨码定义不一样但编码思路一致波特率与帧格式通常由一个开关组合编码站号由另一个开关设定。参数项常见取值说明通信速率9600 / 19200 / 38400与对方设备必须一致数据位8庄家设备几乎都用8位停止位1 或 2D700等三菱变频器默认多为2位停止校验位无 / 偶校验三菱设备常用偶校验站号0~31MC协议站号范围多站时不能重复开关值通常不是直接写“9600”这个数字而是按模块说明书里的编码表换算成十六进制拨码。以9600bps、8数据位、偶校验、无协议这个组合为例波特率编码和校验编码会合成一个拨码值模块外壳或GX Works2开关设置界面旁边有速查表。改完开关后必须断电重启模块只复位PLC是不够的这点最容易漏。3.3 通信协议设置与打开设置的具体操作路径在GX Works2里左侧工程导航找到智能功能模块双击串行通信模块进入参数设置界面。通信协议设置里选择MC协议、无顺序协议或双向协议选定后下方会出现对应协议的子参数。MC协议需要设置帧格式ASCII格式或二进制格式无顺序协议需要设置起始字节、结束字节、数据长度上限等。打开设置这个标签页经常被忽略但它是串口能否被程序启用的关键。打开设置里要指定线路的打开方式是持续打开还是按需打开。我一般选择持续打开这样程序只做发送和接收不用每次通信前都执行打开请求。提示通信协议设置和打开设置改完后同样需要断电重启模块。GX Works2里会有提示但现场施工时操作顺序经常被跳过。3.4 用缓冲存储器监视器验证参数是否生效参数配置完成后在GX Works2里打开智能功能模块监视器监视缓冲存储器的初始状态。模块正常运行后状态区的Ready位会置ON通信协议和站号等设置值会回显到缓冲存储器中。此时可以手动往发送缓冲区写一个测试字节触发发送请求观察模块的发送LED是否闪烁。这一步的价值是在写正式通信程序之前先用模块自身的功能确认物理链路和参数配置没问题把“程序问题”和“配置问题”分开。后面所有排错都建立在这个前提上。4. MC协议报文构造从帧格式到PLC侧收发程序4.1 ASCII三帧的结构拆解MC协议里最常用的是QnA兼容3C帧ASCII格式上位机或PLC之间读写软元件时都用它。一个完整的请求帧由控制代码、网络号、PC号、IO号、站号、子头、帧长度、监视时间、指令、子指令、数据区和校验码组成。字段长度示例值含义控制代码1字节ENQ(05H)请求帧起始网络号2字符00通常为0PC号2字符FF通常为255IO号4字符03FF模块起始XY地址站号2字符00模块站号子头2字符00固定值帧长度4字符按实际计算从子头到数据区末尾的字节数监视时间4字符000A250ms指令4字符0101批量读取软元件子指令2字符0000按字访问数据区可变见下软元件地址与点数校验码2字符按计算累加和取补码结束代码2字符CRLF帧结束数据区的格式是“软元件类型软元件号十六进制点数”。读D100一个点软元件类型是DD100的十六进制是0064点数写成0001拼起来就是“D00640001”。4.2 用Python生成MC协议报文与校验码MC协议的ASCII三帧校验码算法是从子头开始到数据区末尾把所有ASCII字符的二进制值累加取低8位再对这个值取补码转换成2位十六进制ASCII字符串。下面这个脚本可以生成读D100一个点的完整请求帧。def build_mc_3c_frame(command, subcommand, data_area, monitor_time000A): # 请求源信息网络号00 PC号FF 模块IO号03FF 站号00 header 00FF03FF00 # 子头固定为00帧长度后续按实际计算 subheader 00 # 监视时间固定为000A表示250ms payload subheader monitor_time command subcommand data_area # 帧长度 payload字符数的一半每个字节两位ASCII转4位HEX frame_len f{len(payload) // 2:04X} target header payload frame_len # 校验payload部分ASCII累加取低8位补码转2位HEX checksum 0 for ch in payload: checksum ord(ch) checksum (checksum 0xFF) checksum ((~checksum) 1) 0xFF bcc f{checksum:02X} # 拼完整帧ENQ 请求源 payload 帧长 校验 CRLF frame \x05 header subheader monitor_time command subcommand data_area frame_len bcc \r\n return frame, bcc # 读D100一个点指令0101批量读取子指令0000按字读取 command 0101 subcommand 0000 data_area D00640001 # D 0064(100的16进制) 0001(点数) frame, bcc build_mc_3c_frame(command, subcommand, data_area) print(BCC:, bcc) print(Frame:, repr(frame))脚本里两个细节值得说明。帧长度的计算范围是从子头到数据区末尾不包含请求源信息和校验码本身这一点容易数错导致对端拒绝整帧。校验码的计算范围是payload部分即子头、监视时间、指令、子指令和数据区不含控制代码和请求源信息。实际使用中把脚本生成的帧字节打印出来和模块监视器收到的字节对比能快速定位是哪一段拼错了。4.3 用ST语言写通信状态机PLC侧的程序结构一般分四步打开通信口、发送请求帧、等待并接收响应、解析数据。发送和接收不能同时进行所以用一个状态机来串行化整个流程。VAR comm_state : INT : 0; // 0空闲 1打开 2发送 3等待 4接收 send_data : ARRAY[0..31] OF BYTE; recv_data : ARRAY[0..31] OF BYTE; recv_len : INT; open_flag : BOOL : FALSE; END_VAR CASE comm_state OF 0: // 空闲状态收到触发信号后发起打开请求 IF trigger THEN // Z.OPEN由模块的专用指令提供参数1为起始单元号 Z.OPEN(U0\G14); // 打开通信口具体单元号见手册缓冲存储器表 comm_state : 1; END_IF; 1: // 等待打开完成 IF U0\G0.0 THEN // Ready位根据模块型号确认位号 comm_state : 2; END_IF; 2: // 写入发送数据并触发发送请求 // 将组好的帧写入发送缓冲区起始地址见缓冲存储器一览表 U0\G20 : send_data; U0\G0.1 : TRUE; // 发送请求位置ON comm_state : 3; 3: // 等待发送完成然后切换为接收等待 IF U0\G0.2 THEN // 发送完成标志 U0\G0.1 : FALSE; // 发送请求位复位 comm_state : 4; END_IF; 4: // 接收响应并复制到数组 recv_len : U0\G30; // 接收长度地址以手册为准 recv_data : U0\G31; comm_state : 0; END_CASE;这段ST代码里的缓冲区地址是示意性的不同型号模块的缓冲存储器偏移不同投运前必须对照本模块手册附录的“缓冲存储器一览表”逐个确认位号和偏移。状态机的核心价值是显式保证了“发送→等待→接收”的时序避免在半双工链路上出现收发重叠。4.4 MC协议排错的三个高发点监视时间设置过短对端响应稍慢就会触发超时表现为偶发性通信失败。站号重复在总线上一旦出现所有帧都会乱排查时要把每个从站的站号单独核对。IO号必须和模块起始XY地址一致这个值和通信速率、校验位完全无关程序移植到别的项目时最容易漏改。5. 无顺序协议对接三菱D700变频器485通讯给频率加端子启停5.1 什么时候必须用无顺序协议D700变频器的通信协议是三菱变频器私有协议不走MC协议所以串行通信模块必须设为无顺序协议。这个模式下模块就像一个透明串口PLC组好什么字节就发什么字节收到什么字节就原样交给你解析。协议解析、超时处理、重发逻辑都要自己在程序里实现。无顺序协议最需要注意的一点是帧边界。发送时模块按你写入发送缓冲区的字节数发送从起始位置连续发完接收时模块根据设置好的结束条件来判定一帧是否完成。D700这类变频器返回帧以CRLF结束所以在打开设置里要指定结束代码为CRLF。5.2 D700变频器侧通信参数设置变频器侧的参数集中在Pr.117到Pr.124之间按下面这张表设置然后断电重启变频器让参数生效。参数号设定值含义Pr.1171变频器站号Pr.11896波特率9600bpsPr.1190数据位8位、停止位2位Pr.1202偶校验Pr.1219999应答延迟无Pr.1229999校验次数无限Pr.1239999无CR/LF校验Pr.1240有CR/LFPr.793外部端子启停频率由通信给定5.3 D700的报文格式与异或校验D700的请求帧格式为ENQ 从站号 指令代码 数据 校验码 CRLF。写频率的指令代码是ED数据为频率设定值乘以100后的十六进制单位是0.01Hz。50.00Hz对应十进制5000转十六进制是1388数据区就填“1388”。校验码的计算方式是从站号开始到数据区末尾的所有ASCII字符逐字节做异或得到的结果转换成2位HEX大写字符。def d700_bcc(station, command, data): # 拼接待校验部分站号指令代码数据 raw f{station}{command}{data} checksum 0 for ch in raw: checksum ^ ord(ch) # 逐字节异或 return f{checksum:02X} # 站号1指令ED写频率数据1388为50.00Hz station 01 command ED data 1388 bcc d700_bcc(station, command, data) frame \x05 station command data bcc \r\n print(D700 频率写入帧:, repr(frame)) print(校验码:, bcc)运行脚本会输出校验码和完整帧把这个帧字符串复制到串口调试助手里直接发给变频器如果频率变化说明物理链路和参数配置都没问题剩下的只是PLC程序里怎么把这个帧组出来。5.4 端子启停加485给频率的程序逻辑D700走485通讯给频率、端子启停的组合在Pr.793的设定下被拆成两条独立路径启动信号走STF/STR端子频率值走485总线。程序里不需要每次启停都发一次运行指令只需要在按下启动按钮时让PLC输出STF端子信号频率则通过无顺序协议周期性地写入。[注释] 将组好的D700帧写入发送缓冲区然后触发发送请求 MOVP H05 D100 ; 控制代码ENQ MOVP H3031 D101 ; 站号01 MOVP H4544 D102 ; 指令ED MOVP H3133 D103 ; 数据13 MOVP H3838 D104 ; 数据88 MOVP H4243 D105 ; 校验码BC MOVP H0D0A D106 ; CRLF结束符上面这段示意代码把一个50.00Hz的频率写入帧按字符拆开每个16位寄存器放两个ASCII字符。实际项目中频率不是固定的数据区要由频率设定值实时计算后再填入校验码也要按计算后的数据重新生成。这样每次发频率前都要走一遍“数据区转换异或校验”的逻辑。提示端子启停和485给频率组合时启动按钮直接接PLC输入由PLC输出点驱动STF如果变频器在手动模式下要能点动还需要在Pr.790的切换模式下做互锁防止两路启停冲突。6. 通信排错的三个实用技巧缓冲存储器监视、LED速查与MX Component验证6.1 直接从缓冲存储器读模块自诊断状态GX Works2的智能功能模块监视器可以逐项查看缓冲存储器内容。模块内部有自诊断区域记录了通信错误代码、接收帧数、发送帧数。排查“时通时断”类问题时先看收发的帧计数是否在持续增长再看错误代码区里最近一次报错是什么。帧计数不增长问题大概率在物理链路或开关设置计数增长但对方没动作问题大概率在报文内容或对方参数。6.2 LED状态故障速查串行通信模块面板上的LED直接反映链路状态现场不用开电脑就能判断方向。LED状态可能原因处理方向发送LED不亮程序没触发发送请求查状态机和发送缓冲区地址发送LED亮接收LED不亮对方没应答查对方设备参数和接线A/B是否接反接收LED常亮A/B线接反或总线冲突交换A/B检查终端电阻通信ERR灯亮校验错误或帧格式不匹配核对停止位、校验位和协议类型站号重复导致总线混乱多个从站设成同一站号逐站断电确认站号6.3 用MX Component从PC侧验证链路现场调完PLC程序还不放心时可以用MX Component从PC端走MC协议直接访问PLC的软元件验证整条串行链路是否打通。MX Component的测试工具里配置好通信端口、站号和协议能直接读写D区。如果MX Component能读到数据说明串行通信模块和PLC之间的链路是通的问题只会在模块与变频器之间的私有协议侧。using Mitsubishi.MCX.Component; // 声明通信对象连接类型设为串口 ActUtlType plc new ActUtlType(); plc.ActLogicalStationNumber 0; // 逻辑站号在MX Component设置里定义 plc.Open(); // 读PLC的D100验证链路 int value 0; plc.GetDevice(D100, out value); Console.WriteLine(value); plc.Close();这个方法的价值在于把通信链路的验证下沉到PC层MX Component读得通说明模块配置、PLC程序和物理链路都正常后面排查的焦点可以完全放在变频器侧。最后留一个排查技巧先用回送测试确认硬件链路把模块的发送和接收端子用短线短接发一个字节看是否原样返回。能回来链路和配置全通回不来问题一定在参数或硬件不用再猜对方设备。本文还有配套的精品资源点击获取