1. 从一根编程线说起:三菱PLC连接到底在连什么
很多人第一次接触三菱PLC,卡住的地方不是梯形图逻辑,也不是指令系统,而是"线插上去了,软件却提示找不到设备"。这个场景太常见了:手里拿着一台FX系列或者Q系列PLC,USB转串口线、网线、编程电缆摆了一桌子,GX Works2或者GX Works3打开之后,通信设置里那一排选项看得人发懵,点了"通信测试"就是连不上。于是开始怀疑线坏了、PLC坏了、电脑驱动有问题,折腾一下午,最后发现只是站号填错了,或者波特率跟PLC实际设置对不上。
三菱PLC的连接和通信,本质上要解决三个层面的问题:物理层怎么接、协议层怎么通、参数层怎么对。物理层是线和接口的事,比如RS-422、RS-232、USB、以太网,接口形状和引脚定义决定了你能不能把信号送进去;协议层是双方用什么"语言"对话,三菱有自己的MC协议、CC-Link、MELSEC通信协议,还有通用的Modbus;参数层则是站号、波特率、校验方式、IP地址、端口号这些具体数值,任何一个对不上,通信就断在那一层。
我见过太多人把这三个层面混在一起排查,结果越查越乱。正确的思路是分层定位:先确认物理连接有没有问题,再确认协议类型选对了没有,最后逐项核对参数。这篇文章就按这个逻辑展开,把三菱PLC连接和通信这件事从头到尾讲清楚,包括不同系列PLC的接口差异、编程软件里的通信配置、常见通信方式的实操步骤,以及我自己踩过的那些坑。不管你是刚入行的电气新人,还是做了几年但一直用别人配好的环境、自己没从头搭过的老手,应该都能从里面找到有用的东西。
2. 三菱PLC的物理接口家族:你手里的口到底是哪一种
2.1 FX系列上的圆形DIN接口与它的引脚定义
FX系列PLC,尤其是FX1N、FX2N、FX3U这些经典机型,本体上最常见的是一个8针的圆形DIN接口,标注为RS-422。这个口是三菱编程通信的主力接口,形状像老式键盘接口的缩小版。它的8个引脚里,真正用于通信的是4根:发送正、发送负、接收正、接收负,也就是RS-422的全双工差分信号。剩下的是电源和接地。
为什么三菱在编程口上用RS-422而不是RS-232?因为RS-422是差分传输,抗干扰能力强,传输距离也更远,在工厂车间这种电磁环境复杂的地方更可靠。但问题来了,现在的电脑基本没有RS-422接口,所以必须用转换线。市面上常见的SC-09电缆,本质就是一根USB转RS-422的转换线,内部有一颗协议转换芯片,把USB信号转成RS-422差分信号送给PLC。
这里有个坑要特别注意:SC-09有原厂和仿制之分,仿制线用的芯片五花八门,有些在Windows 10、Windows 11上驱动装不上,或者装上了但通信不稳定,表现为能连上但下载程序到一半就断。我的经验是,如果预算允许,尽量用原厂或者口碑好的第三方线,省下来的调试时间远比线本身值钱。另外,FX3U之后的部分机型开始配备USB接口(方口),直接用普通USB打印线就能连,这就省事多了,但要注意USB口和圆形口不能同时使用。
2.2 Q系列、L系列与iQ-R系列的接口布局差异
到了Q系列和L系列,三菱的接口策略变了。Q系列CPU本体上通常有一个USB接口(Mini-B型)和一个RS-232接口,以太网口则要看具体型号,有的内置,有的需要加通信模块。iQ-R系列作为较新的平台,USB和以太网基本是标配,部分型号还带SD卡槽用于数据交换。
这里要强调一个容易忽略的点:Q系列和L系列的USB接口,和FX系列的USB接口,在软件里的通信设置是不一样的。FX系列的USB连接,在GX Works2里通常选"USB"然后自动识别;而Q系列的USB,有时候需要在通信设置里明确指定"USB"并选择正确的CPU型号,否则软件会去尝试串口,一直转圈找不到设备。
以太网接口方面,Q系列和iQ-R系列内置以太网的型号,默认IP地址通常是192.168.1.1或者192.168.0.1这类,子网掩码255.255.255.0。但不同批次、不同固件版本可能不同,最稳妥的办法是通过USB先连上去,在PLC参数里查看和修改IP设置,而不是盲目猜测。我遇到过一台Q03UDVCPU,默认IP是192.168.1.1,但客户网络是192.168.0.x网段,电脑IP设成同网段后死活连不上,最后发现是PLC的IP被前一个工程师改过,用USB连上去一看是192.168.10.1,改回来就好了。
2.3 通信模块与扩展板的接口类型速查
除了CPU本体的接口,三菱PLC还可以通过扩展模块增加通信能力。常见的通信模块包括:
| 模块类型 | 典型型号 | 接口形式 | 主要用途 |
|---|---|---|---|
| RS-232通信板 | FX3U-232-BD | D-sub 9针 | 连接上位机、条码枪、仪表 |
| RS-485通信板 | FX3U-485-BD | 端子台 | 多台PLC组网、Modbus RTU |
| 以太网模块 | QJ71E71-100 | RJ45 | 上位机通信、跨设备数据交换 |
| CC-Link模块 | QJ61BT11N | 专用端子 | 远程IO、多站网络 |
| 模拟量模块 | FX3U-4AD | 端子台 | 传感器信号采集(非通信但常一起用) |
选模块的时候,核心原则是先确定通信对象和协议,再选接口形式。比如你要把PLC连到触摸屏,触摸屏支持RS-422就选422,支持以太网就用以太网,不要为了省一个模块的钱去绕弯路。另外,扩展板是插在PLC本体上的,扩展模块是挂在总线上的,两者在编程软件里的配置方式不同,扩展板通常不需要额外配置,扩展模块需要在PLC参数里登记。
3. 编程软件里的通信配置:GX Works2与GX Works3的实操路径
3.1 连接目标设置界面的每一项到底在填什么
打开GX Works2,新建或者打开一个工程后,第一步是配置连接目标。菜单路径是"在线"→"传输设置",或者直接点工具栏上的"连接目标"图标。弹出的窗口里,左边是"连接目标"树形结构,右边是具体参数。
以FX系列用USB连接为例,操作路径是:双击"连接目标"下的"Serial USB",在弹出的对话框里,"PC侧接口"选"USB","PLC侧接口"选"CPU模块",然后点"通信测试"。如果线没问题、驱动正常,会弹出"已成功与FX3UCPU连接"的提示。如果失败,先检查设备管理器里有没有识别到USB转串口设备,再看COM口号是否被其他软件占用。
对于以太网连接,配置项更多:需要填PLC的IP地址、端口号(默认通常是5007或者5006,取决于协议)、网络号、站号。这里最容易错的是端口号。三菱MC协议在以太网上的默认端口,Q系列和iQ-R系列常用5007,但有些配置下是5006,还有些是用户自定义的。如果端口号填错,通信测试会超时,而不是立刻报错,所以很多人会误以为是网络不通。
提示:通信测试超时和通信测试报错是两回事。超时通常意味着IP能通但端口不对,或者防火墙拦了;报错则可能是协议类型选错、站号不对。先ping一下PLC的IP,能ping通再查端口和协议。
3.2 站号、波特率、校验位:串口通信的三要素
串口通信(RS-232或RS-485)的配置,核心就是三个参数:站号、波特率、校验位。这三个必须和PLC侧的设置完全一致,否则通信不上。
站号是PLC在网络中的编号,单机连接时通常是0或者1,多机网络时每台PLC站号不能重复。波特率是通信速率,常见的有9600、19200、38400、57600、115200,单位是bps。校验位有None、Even、Odd三种,数据位通常是7或8,停止位1或2。
三菱PLC的串口默认设置,FX系列通常是9600、7位数据、偶校验、1位停止位,站号0。但这个默认值可以在PLC参数里改,如果前一个工程师改过,你按默认值去连就连不上。我的做法是:先用USB或者编程口连上去,在PLC参数里把串口设置读出来,记下来,再用串口去连。不要凭记忆或者猜。
GX Works3里配置串口连接,路径是"在线"→"连接目标设置",选择"串行",然后填COM口、波特率、数据位、校验、停止位、站号。GX Works3的界面比GX Works2更直观,但参数项是一样的。有个细节:GX Works3在连接iQ-R系列时,如果用的是USB,需要在"连接目标设置"里选"USB",然后选"CPU模块",不需要填站号;如果用以太网,则要填IP和端口。
3.3 通信测试失败时的分层排查顺序
通信测试失败,不要慌,按这个顺序排查:
- 物理层:线插好了吗?USB设备在设备管理器里认到了吗?网口灯亮吗?串口线的引脚定义对吗(有些第三方线是交叉的,有些是直连的)?
- 驱动层:USB转串口芯片的驱动装了吗?COM口号是多少?有没有被其他软件占用?
- 协议层:软件里选的协议类型和PLC实际支持的协议一致吗?比如PLC是以太网MC协议,你选的是串口协议,那肯定连不上。
- 参数层:站号、波特率、IP、端口号,逐项核对。
- PLC侧:PLC的RUN/STOP开关位置对吗?有些通信只在STOP状态下允许?PLC的通信参数有没有被改过?
这个顺序是从底层到上层,从硬件到软件。很多人一上来就改软件参数,改了半天发现是线没插紧,浪费时间。我自己的习惯是,先看设备管理器,再看软件设置,最后才怀疑PLC本身。
4. 以太网通信:从IP规划到MC协议数据读写
4.1 给PLC分配IP时容易犯的三个错误
以太网通信的第一步是IP规划。三菱PLC的以太网模块或者内置以太网口,需要设置IP地址、子网掩码、默认网关。这里常见的错误有三个:
第一个错误:IP地址和电脑不在同一网段。比如PLC是192.168.1.10,电脑是192.168.0.100,子网掩码都是255.255.255.0,那两者不在同一网段,ping都ping不通。解决办法是把电脑IP改成192.168.1.x,或者把PLC改成192.168.0.x。
第二个错误:IP地址冲突。车间里可能有多台设备用了同一个IP,或者有人把PLC的IP设成了路由器的IP。表现是ping时通时不通,或者通信极不稳定。解决办法是先用ping扫一遍网段,看有没有重复响应,或者用网络扫描工具查一下。
第三个错误:默认网关乱填。如果PLC只和本地电脑通信,不跨网段,默认网关可以留空或者填0.0.0.0。如果填了一个不存在的网关,有些PLC会尝试把数据发到网关,导致通信异常。我的习惯是,本地通信不填网关,跨网段通信才填正确的网关地址。
4.2 MC协议与SLMP:三菱以太网通信的两种主要方式
三菱PLC的以太网通信,主要有两种协议:MC协议和SLMP(SeamLess Message Protocol)。MC协议是三菱传统的通信协议,支持二进制和ASCII两种格式,可以通过固定缓冲区或者随机访问方式读写PLC的软元件。SLMP是较新的协议,基于MC协议但更标准化,支持Q系列、L系列、iQ-R系列,也支持通过以太网、USB、串口传输。
对于上位机开发(比如用C#、Python、Java写程序读写PLC数据),MC协议是最常用的。它的通信格式是:发送一个请求帧,包含目标站号、软元件类型、起始地址、数据长度,PLC返回一个响应帧,包含数据或者错误码。二进制格式比ASCII格式效率高,但调试时ASCII格式更直观,因为可以看到具体的指令字符。
用Python通过MC协议读写三菱PLC数据,常用的库有pymcprotocol、mcprotocol等。基本流程是:建立TCP连接,构造请求帧,发送,接收响应,解析数据。这里要注意的是网络号、PC号、站号这三个参数,在MC协议帧里都要填对。网络号通常0(本地网络),PC号通常是255(广播)或者具体值,站号是PLC的站号。填错了PLC会返回错误码,但错误码的含义需要查手册。
4.3 用Python读写三菱PLC寄存器的完整示例
下面是一个用Python通过MC协议读取三菱PLC D寄存器的示例。假设PLC的IP是192.168.1.10,端口5007,站号0,要读取D100开始的10个寄存器。
import socket import struct def read_d_registers(ip, port, station, start_addr, count): # 构造MC协议二进制请求帧(Qna 3E帧) # 副头部:5000 (二进制) # 网络号:00 # PC号:FF # 请求目标模块IO号:03FF # 请求目标模块站号:00 # 请求数据长度:000C # 监视定时器:0010 # 指令:0401 (批量读取) # 子指令:0000 (按字读取) # 起始地址:D100 -> 0x0064 # 软元件代码:D -> 0xA8 # 数据长度:10 -> 0x000A frame = b'\x50\x00' # 副头部 frame += b'\x00' # 网络号 frame += b'\xFF' # PC号 frame += b'\x03\xFF' # 请求目标模块IO号 frame += b'\x00' # 请求目标模块站号 frame += b'\x0C\x00' # 请求数据长度 frame += b'\x10\x00' # 监视定时器 frame += b'\x04\x01' # 指令:批量读取 frame += b'\x00\x00' # 子指令:按字读取 frame += struct.pack('<H', start_addr) # 起始地址 frame += b'\xA8' # 软元件代码 D frame += struct.pack('<H', count) # 数据长度 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(5) sock.connect((ip, port)) sock.send(frame) response = sock.recv(1024) sock.close() # 解析响应 # 响应格式:副头部(2) + 网络号(1) + PC号(1) + IO号(2) + 站号(1) + 数据长度(2) + 结束代码(2) + 数据 if len(response) < 11: raise Exception("响应数据过短") end_code = struct.unpack('<H', response[9:11])[0] if end_code != 0: raise Exception(f"PLC返回错误码: {end_code}") data = [] for i in range(count): val = struct.unpack('<H', response[11+i*2:13+i*2])[0] data.append(val) return data # 使用示例 result = read_d_registers('192.168.1.10', 5007, 0, 100, 10) print(result)这段代码的关键点:副头部5000表示二进制格式,0401是批量读取指令,A8是D寄存器的软元件代码。如果要读其他软元件,比如M继电器,代码是90;读X输入,代码是9C;读Y输出,代码是9D。这些代码在三菱的MC协议手册里都有,但手册是日文或英文的,查起来费劲,我的建议是先把常用的几个记下来,用多了就熟了。
写寄存器用指令1401,子指令0000,帧结构和读类似,只是数据部分要带上要写入的值。写的时候要注意数据长度和实际数据字节数要匹配,否则PLC会返回错误。
5. 串口与现场总线:RS-485组网和CC-Link的实操要点
5.1 RS-485多台PLC组网时的站号分配与终端电阻
RS-485是三菱PLC现场组网最常用的方式,因为它便宜、抗干扰、支持多站。FX系列加一块FX3U-485-BD或者FX3U-485ADP,就能组一个RS-485网络。组网时要注意几个点:
站号分配:每台PLC的站号必须唯一,范围通常是0到15或者0到31,取决于协议。站号在PLC参数里设置,设置完要断电重启才生效。我见过有人改了站号没重启,然后怎么都通信不上,以为模块坏了。
终端电阻:RS-485网络的两端需要接终端电阻,通常是110欧姆或者120欧姆。不接终端电阻,短距离可能没事,但距离一长或者波特率一高,通信就出错。终端电阻接在网络的物理两端,中间站点不接。
接线方式:RS-485是两线制,A接A,B接B,地接地。但不同厂家的A、B定义可能相反,三菱的A对应其他品牌的B,这种情况要先确认再接线,接反了通信不上但不会烧模块,调换一下就行。
波特率和校验:网络上所有PLC的波特率、数据位、校验位、停止位必须完全一致,否则通信混乱。站号可以不同,但通信参数必须相同。
5.2 CC-Link网络的硬件配置与站类型选择
CC-Link是三菱主推的现场总线,速度比RS-485快,支持更多站点,但硬件成本也更高。CC-Link网络需要一个主站模块(比如QJ61BT11N)和若干从站模块(远程IO、模拟量、变频器等)。配置CC-Link网络,核心是确定站类型和占用站数。
站类型有:远程IO站、远程设备站、本地站、智能设备站等。远程IO站只传开关量,占用1个站;远程设备站传模拟量或者数据,占用1到4个站;智能设备站可以传程序和数据,占用更多站。主站模块能管理的最大站数有限,比如QJ61BT11N最多管理64个站,但实际能带多少要看站类型和通信速率。
配置步骤:先在GX Works里设置主站模块的参数,包括站数、波特率、站类型分配,然后下载到PLC,断电重启。从站模块上通常有拨码开关或者旋转开关设置站号,设置完也要重启。CC-Link的通信电缆是专用的三芯屏蔽线,不能用普通电线代替,否则通信不稳定。
5.3 串口通信调试中"能发不能收"的典型原因
串口调试时,"能发不能收"或者"能收不能发"是很典型的问题。原因通常有这几个:
接线问题:RS-232的TX和RX要交叉,即电脑的TX接PLC的RX,电脑的RX接PLC的TX。如果接成了直连,就是能发不能收或者能收不能发。RS-422则是四线制,TX+、TX-、RX+、RX-要对应接好。
流控问题:有些通信需要硬件流控(RTS/CTS)或者软件流控(XON/XOFF),如果PLC要求流控而电脑没开,或者反过来,就会通信异常。三菱PLC的串口通信通常不需要流控,但有些第三方设备需要,这时候要在软件里把流控打开。
参数不匹配:数据位、停止位、校验位有一个不对,就可能出现能发不能收。因为发送的时候PLC可能不校验,但接收的时候校验失败就丢弃数据。所以通信参数必须逐项核对。
缓冲区问题:如果发送的数据量很大,接收方处理不过来,缓冲区溢出,也会丢数据。这时候要降低发送速率,或者增加接收缓冲。
6. 那些年我踩过的连接坑:从驱动冲突到协议选错
6.1 USB转串口线驱动装不上的三种解决办法
USB转串口线驱动装不上,是新手最常遇到的问题。表现是设备管理器里出现一个带黄色感叹号的未知设备,或者COM口列表里没有新增的端口。解决办法分三种情况:
第一种:芯片型号不匹配。常见的USB转串口芯片有FTDI、CH340、CP2102、PL2303等,不同芯片需要不同驱动。先看线缆用的什么芯片,可以用芯片检测工具查,或者看设备管理器里硬件ID的VID和PID。然后去芯片厂商官网下载对应驱动。注意PL2303有个坑,老版本芯片和新版驱动不兼容,需要装旧版驱动。
第二种:驱动签名问题。Windows 10和Windows 11对驱动签名要求严格,有些老驱动没有签名,装不上。解决办法是临时禁用驱动签名强制,或者找有签名的驱动版本。禁用驱动签名的方法是在开机时按F8或者Shift+重启,进入高级启动选项,选择"禁用驱动程序强制签名"。
第三种:驱动冲突。电脑上装了多个版本的串口驱动,或者之前装过其他USB转串口设备,导致冲突。解决办法是在设备管理器里卸载所有相关设备,勾选"删除驱动程序软件",然后重新插拔,让系统重新识别。
我的经验是,备几根不同芯片的线,FTDI的最稳定但贵,CH340便宜但驱动偶尔出问题,CP2102居中。现场调试时,如果一根线连不上,换一根试试,能快速判断是线的问题还是设置的问题。
6.2 以太网连接时"ping得通但连不上"的排查链路
"ping得通但连不上"是以太网通信的经典问题。ping通说明物理层和网络层没问题,IP可达;连不上说明传输层或者应用层有问题。排查链路如下:
- 端口是否正确:三菱MC协议的默认端口是5007,但有些配置下是5006,还有些是用户自定义的。用telnet或者端口扫描工具测一下PLC的端口开没开。
- 防火墙是否拦截:电脑的防火墙可能拦了出站或者入站的连接。临时关闭防火墙测试,如果连上了,就是防火墙的问题,需要加例外规则。
- 协议类型是否匹配:PLC的以太网模块可能配置为MC协议、SLMP、或者Socket通信,软件里选的协议要和PLC一致。
- 站号、网络号、PC号是否正确:MC协议帧里这些参数填错,PLC会返回错误码,但有些软件不显示错误码,只显示连接失败。
- PLC的以太网参数是否使能:有些PLC的以太网通信需要在参数里显式使能,默认可能是关闭的。
我遇到过一次,ping得通,端口也开着,但就是连不上,最后发现是PLC的以太网模块参数里,"允许来自远程的访问"没勾选,只允许本地访问。勾上之后就好了。这种细节在手册里往往一笔带过,但实际调试时能卡很久。
6.3 多台PLC组网时站号冲突引发的间歇性通信故障
多台PLC组网时,站号冲突是个隐蔽的坑。表现是通信时好时坏,有时候能读到数据,有时候读不到,或者读到的数据是另一台PLC的。原因是两台PLC用了同一个站号,主站轮询的时候,两台同时响应,信号冲突,导致数据错乱。
排查方法:一台一台断开,单独测试,确认每台的站号。或者用网络扫描工具,看网络上有哪些站号在响应。三菱的CC-Link和RS-485网络,站号冲突不会报错,只会表现为通信不稳定,所以容易被忽略。
预防措施:组网前先规划好站号分配表,每台PLC的站号写在标签上贴在设备上,改站号后记录在案。调试完成后,用通信测试工具逐站测试,确认每台都能正常响应。
7. 连接稳定之后:通信参数备份与日常维护建议
7.1 把PLC通信参数导出成文档的实操方法
通信调通之后,一定要把参数备份下来。我见过太多项目,调试的时候通信正常,过了半年设备故障,换了一台PLC,结果没人记得原来的通信参数,重新调试花了好几天。备份的内容包括:PLC的IP地址、子网掩码、网关、站号、波特率、校验位、协议类型、端口号,以及网络里其他设备的对应参数。
备份方法:在GX Works里,连接上PLC后,打开"PLC参数"或者"模块参数",把通信相关的页面截图或者导出为文件。GX Works2和GX Works3都支持把参数导出为CSV或者文本文件。另外,把参数写在设备档案里,纸质和电子各一份,放在设备柜里和项目文件夹里。
对于以太网通信,还可以用ping和端口扫描的结果作为记录,标注哪些端口是开放的,哪些协议是使能的。这些信息在排查故障时非常有用。
7.2 通信电缆和接口的日常检查清单
通信故障中,相当一部分是电缆和接口的物理问题。日常检查清单如下:
- 电缆有没有被压伤、磨损、老鼠咬?特别是车间里移动设备上的电缆。
- 接头有没有松动、氧化、进水?RS-485端子台容易松动,以太网RJ45卡扣容易断。
- 终端电阻还在不在?有没有被误拆?
- 屏蔽线接地是否良好?屏蔽层单端接地还是双端接地,要按规范来。
- 电缆长度是否超过规范?RS-485建议不超过1200米,以太网不超过100米,超过要加中继器。
- 电源是否稳定?通信模块的电源波动也会导致通信异常。
我自己的习惯是,每次设备定期保养的时候,顺便检查通信电缆和接头,紧固端子,清理灰尘。这个习惯帮我提前发现过好几次隐患,比如RS-485端子台螺丝松动,导致通信间歇性中断,紧固之后就稳定了。
7.3 从一次通信中断事故看参数记录的重要性
最后分享一个我亲身经历的事故。某项目现场,一台Q系列PLC通过以太网和上位机通信,运行了两年一直正常。某天突然通信中断,上位机读不到数据。现场人员检查了网线、交换机、电脑,都没问题。最后用USB连上PLC,发现以太网参数被恢复了默认值,IP地址变成了192.168.1.1,而原来设置的是192.168.10.100。
为什么会恢复默认?后来查出来是PLC的电池没电了,导致参数丢失。Q系列的PLC参数通常保存在CPU内置的闪存里,但有些参数依赖电池保持,电池没电后参数就丢了。如果当初有参数备份文档,直接照着重新设置就行,但现场没人记得原来的IP,只能重新规划,耽误了大半天生产。
这件事之后,我养成了两个习惯:一是定期检查PLC电池电压,该换就换;二是所有通信参数必须存档,而且要在设备上贴标签,写明IP和站号。这两个习惯看起来简单,但关键时刻能省下大量排查时间。
通信连接这件事,说到底就是"线对、协议对、参数对"三个对。线对是物理层,协议对是通信层,参数对是配置层。三层都对了,通信自然就通了。调试的时候按这个顺序排查,不要跳步,不要凭感觉猜。把每次调试的参数记录下来,形成自己的知识库,下次遇到类似问题就能快速定位。三菱PLC的通信方式虽然多,但核心逻辑是相通的,掌握了一种,其他的触类旁通。