FX3U-48MRT PLC拆解:从原理图到源码,看懂小型PLC内部设计
拿到这套 FX3U-48MRT 的资料包时我其实挺感慨的。做自动化这些年FX3U 系列大概是小型 PLC 里出场率最高的机型之一产线上、非标设备上、甚至不少教学台架上都能看到它的影子。但大多数人只是把它当成一个“黑盒”来用——梯形图写完、下载、跑起来就完事很少有人真正翻开它的原理图、PCB去理解这个盒子里面到底做了什么。这个资料包里包括了源码、原理图、PCB 文件、外形尺寸和主控芯片相关说明对想从“会用 PLC”进阶到“懂 PLC”的人来说价值很大。我花了一周时间把整套资料捋了一遍又照着做了几块板子做测试踩了一些坑也搞清楚了不少之前一知半解的东西。这篇博客就把我的拆解过程、关键细节和实操经验一次性写清楚内容偏向原理和落地适合正在做设备维护、电气设计或者打算自己动手做小型控制器原型的朋友参考。1. FX3U-48MRT先把这个型号看明白1.1 型号命名里的信息量很多新手拿到一台 PLC第一件事就是看铭牌但铭牌上那一串字母数字到底代表什么未必每个人都能完全说清楚。就拿“FX3U-48MRT”来说这段型号其实可以拆成好几层含义。FX3U系列名三菱 FX3U 系列属于小型高性能 PLC运算速度大概是 FX2N 的几倍指令集也更丰富。48I/O 总点数这里指 48 点典型配置是 24 点输入 24 点输出。M主机 unit区别于扩展模块。如果是“E”则代表扩展单元。R输出类型是继电器输出Relay。如果看到“T”则是晶体管输出Transistor。T这里出现得比较特殊。正规产品序列里FX3U-48MR 和 FX3U-48MT 是两种不同的输出规格很少把“R”和“T”写在一起。但在一些非标定制机型和兼容型资料里“MRT”常被用来表示混合输出也就是一部分点是继电器、一部分点是晶体管或者某个特定批次固件版本的代号。我建议拿到资料的第一步就是确认输出类型。继电器输出和晶体管输出的差异很大继电器便宜、能带交流负载、过载能力强但响应慢、寿命有限晶体管输出响应快、适合高速脉冲和步进控制但只能带直流负载。如果你把 48MRT 当成纯晶体管机来做脉冲控制结果某几个点实际是继电器那脉冲频率稍微上去就丢步排查半天都找不到原因。1.2 整机硬件架构速览从原理图上看FX3U-48MRT 这类机型可以分成几个大板块主控板、IO 板、电源板、通信接口和扩展总线。主控板是所有逻辑的中枢包含主控芯片、程序存储芯片、数据存储器、时钟电路、看门狗电路和电源管理电路。IO 板则负责把外部传感器信号隔离进来、把内部运算结果通过继电器或晶体管输出出去。电源板为整机提供多路稳定电压通常会有 5V 数字电源和 24V 传感器电源两组关键输出。通信接口是 PLC 与外部对话的窗口包括编程口、485 口以及部分型号扩展出来的以太网口。这三块板在物理上通常通过排针或排线连接电气上通过光耦、电源隔离芯片等手段完成不共地的信号交换。理解这些板块的作用之后你再看原理图就不会一团乱麻而是会带着“这路信号从哪来、到哪去”的思路去追踪节点这是读图很关键的习惯。2. 主控芯片PLC 的“心脏”到底靠什么跳2.1 原厂主控为什么玩“神秘”打开原厂原理图的时候你会发现主控芯片的位置往往是一颗印着品牌标志的定制芯片型号不太容易查到公开资料。FX3U 系列的主控不是普通货架上的 ARM 或单片机而是基于特定架构设计的专用处理芯片把 CPU 核心、IO 管理、高速计数、中断控制和通信协议等整合在一起。原厂之所以用定制芯片考虑的是几个方面第一是稳定性PLC 运行环境往往伴随强电干扰、温度变化、振动工业级的专用芯片在抗干扰和失效模式上经过长时间验证第二是安全性不公开底层细节程序和数据不容易被随意读取或篡改第三是性能FX3U 的指令执行速度在小型机里属于第一梯队梯形图扫描周期能做到几百微秒级通用芯片外加软件解释层很难天然达到这个表现。2.2 复刻与学习方案的主控选型市面上很多“FX3U 学习型”或者“兼容型”控制器用的主控反而是大家非常熟悉的通用 MCU最常见的是 STM32 系列比如 STM32F103、STM32F407。这套资料包里的源码主控方案也是基于这类通用 MCU 做的意图很明显让人能看懂、能修改、能跑起来。为什么用 STM32 而不是直接复刻原厂芯片道理很简单原厂芯片的资料和烧录工具都不是公开开放的也没有人能用常规手段把它复制出来。而 STM32 生态成熟开发工具免费库函数资料多性能也足够跑一套小型 PLC 的内核逻辑。用通用 MCU 做 PLC主控选型要看几个硬指标主频和指令吞吐能力决定扫描周期能不能压下去至少需要几十 MIPS 级别的算力。Flash 和 RAM 容量要装得下固件和用户程序。定时器和输入捕获单元数量高速计数器就是靠这些外设实现的。通信外设丰富度UART、SPI、CAN、以太网接口决定你能接什么样的上位机和扩展模块。从我自己测试的体验来说STM32F407 跑基础固件毫无压力即使把输入扫描、用户程序解释、通信处理都放在一个循环里实际扫描周期还是能控制在几百微秒到 1 毫秒的水平对于大部分工厂应用都够用。如果你只是学习原理STM32F103 也完全能起步成本更低上手资料更多。2.3 主控芯片的外围配套电路芯片本身再强没有外围电路也跑不起来。主控周围必须围绕以下几类电路晶振电路提供工作时钟晶振频率和负载电容要匹配否则启动异常或通信时序抖动。复位电路上电复位和低电压检测避免电源掉电时程序跑飞。程序存储用户梯形图编译后的字节码要存在 Flash 或者外部 EEPROM 里断电后不能丢。SRAM 或备份 RAM用来存放掉电保持的软元件状态、数据寄存器。看门狗程序跑飞或者卡死在死循环时自动复位这是 PLC 在工业现场不死机的保底机制。原厂机型在这套外围电路上做得非常讲究尤其是看门狗和电源监控。我自己复刻测试的时候偷懒省掉过低电压检测电路结果现场电源一波动整机出现随机复位排查了很久。后来老老实实把电源监控加上故障立刻消失。这个经验值得所有想做控制器原型的人谨记主控的外围电路省一分现场的稳定性就差十分。3. 源码、原理图、PCB三份资料的正确打开方式3.1 原理图阅读路径拿到原理图不要从第一页看到最后一页那样效率太低。我的习惯是从电源开始一层一层往外看。第一步看电源输入。FX3U-48MRT 通常支持 AC220V 供电原理图上会看到整流桥、滤波电容、开关电源控制芯片和变压器。把交流到直流的路径理清楚哪些绕组产生 5V、哪些产生 24V是后面所有问题的起点。第二步看主控最小系统。找到主控芯片把晶振、复位、电源引脚、Boot 引脚、调试接口这几个节点的电路勾出来确认芯片能否独立跑起来。这就像看人先看心跳电源对了、时钟对了、复位对了系统就“活”了一大半。第三步看 IO 输入电路。FX3U 的输入端子通常经过光耦隔离之后才进主控。你要重点关注光耦输入端限流电阻的取值它决定了输入信号的驱动电流要求然后看光耦输出端的上拉或者下拉方式是在主控那边拉还是光耦内部处理这会影响输入信号的极性判断。第四步看输出驱动。继电器输出型主控 IO 先经驱动三极管或者 ULNxxx 达林顿阵列再去驱动继电器线圈线圈两端要并联续流二极管。晶体管输出型则是主控 IO 直接或者经过高速光耦驱动功率 MOS 管。搞清楚这条链路你才能明白为什么输出点的响应速度差别这么大。3.2 PCB 设计的几个关键看点看 PCB 文件比看原理图更考验功力因为同样一张原理图布局布线不同实际抗干扰能力可以差出好几倍。对于 FX3U 这类工业控制器PCB 上有几个位置值得你重点看。第一是电源区域的地平面处理。开关电源的初级地和次级地之间通常开槽隔离并且用 Y 电容连接目的是让高频噪声走最短路径回流而不是串到数字逻辑区干扰主控。第二是强电与弱电的爬电距离。继电器输出触点、AC 输入端子和主控区域在 PCB 上必须有足够的间距或者开槽防止污物和湿气形成漏电通道。你看原厂板子继电器区和主控区之间往往有明显开槽这就是为了满足安规要求。第三是光耦输入区域的走线。输入信号线从端子到光耦这一段要短尽量远离继电器输出线和电源线否则在低频时看不出问题一到高频脉冲输入或者附近有大功率设备启停时误动作就来了。第四是主控芯片的电源去耦。每个电源引脚旁边都应该有 0.1uF 的陶瓷电容而且电容要尽量靠近引脚。如果看到某个位置没有去耦电容或者电容放得很远那这块板子的抗干扰设计基本不合格。保持对这几个细节的敏感你评估一块板子行不行一眼就能有个大概判断。3.3 源码的定位与代码骨架很多人拿到源码第一反应是想拿编译器打开直接编译下载。但在这类项目里“源码”要分情况看。如果你拿到的是梯形图工程文件那它是用户程序的“源码”需要导入到编程软件如 GX Works里才能查看和修改。如果你拿到的是固件源码比如用 C 写的 MCU 工程那它才是让主控芯片转起来的基础软件。这套资料包里的源码更偏向后者也就是兼容主控的固件工程。它的核心价值在于你能看到一套最简单的 PLC 内核是怎么用 C 语言组织起来的。固件源码大致会包含这样几个模块初始化模块配置时钟、GPIO、定时器、通信外设。输入采集模块周期性读取输入口电平更新输入映像区。用户程序解释模块读取存储在 Flash 里的梯形图字节码逐条解释执行更新输出映像区和软元件状态。输出刷新模块把输出映像区写入输出口完成物理动作。通信处理模块响应上位机的读写请求支持在线监控和程序上下载。看门狗喂狗模块在每个扫描周期末尾刷新看门狗防止死机。主循环的结构核心大概是这样while (1) { read_inputs(); // 采集输入刷新输入映像区 execute_user_logic(); // 解析并执行用户程序 write_outputs(); // 刷新输出映像区到物理输出 handle_comm(); // 处理通信请求 kick_watchdog(); // 喂狗 }这段逻辑看似简单却是一台 PLC 最底层的运行机制。你用编程软件写的梯形图最终会编译成主控内部的字节码然后由 execute_user_logic 一条一条解释执行。理解这个循环之后你再看“扫描周期”这个概念就不会只停留在理论层面了。4. 实操过程从资料到一块能跑的板子4.1 制作前的物料准备照着资料做板子不要一上来就焊主控。先把物料清单理清楚对照原理图位号和 BOM 清单逐一核对。常规物料包括主控芯片、晶振、电阻电容、光耦、继电器、端子排、电源芯片、保险丝、Y电容、变压器等等。其中继电器和光耦这两类器件最好买正规渠道的工业级型号。继电器触点质量直接决定你能带多大的负载光耦的电流传输比则影响输入信号的灵敏度。PCB 打样的时候我多说一句一定要确认板厚和铜厚。电源部分电流大的线路建议加宽走线否则长时间运行发热会很明显。我自己第一次打样贪便宜选了最薄的铜箔板子跑到半小时后电源区域摸起来烫手后来换成加厚铜箔才好转。4.2 焊接、烧录与首次上电焊接顺序建议从电源模块开始。先把电源部分的元件焊完不上主控先给板子通电测量各路输出电压是否正常。这一步可以把最常见的问题——电源焊错、短路、压差不对——在最早期暴露出来。电压正常之后再焊主控和存储器然后烧录固件。烧录方式取决于主控方案。STM32 这类芯片可以在板上预留 SWD 调试接口用一条几块钱的下载器就能烧录。烧录前确认 Boot 引脚和复位电路没有焊错否则下载器无法识别芯片。首次上电要带保护意识。建议用带限流功能的可调电源先把电流限制在几百毫安如果上电瞬间电流过大说明板子有短路点。判断短路优先级依次是电源电路、主控电源去耦、IO 驱动电路。如果是给板子外加 24V 传感器电源也要注意电源极性接反了轻则保险丝断重则光耦烧穿。4.3 与电脑通信的配置细节板子跑起来之后接下来的卡点往往不是逻辑而是通信。FX3U 的编程口本质是 RS422需要 USB 转 RS422 的线缆。配置通信时要注意几个参数端口号、波特率、数据位、停止位、校验位以及 PLC 端自身的站号设置。我最常遇到的问题是电脑端识别到了串口但编程软件始终报“无法与 PLC 通信”。排查下来基本都是三类原因驱动安装异常USB 转串口芯片的驱动版本不对导致端口号不稳定。波特率不匹配软件默认设置和固件实际设置不一致。RS422 的 TX/RX 接线反了A/B 两根线极性调换。RS422 接线极性这个问题特别容易让人崩溃因为很多 USB 转 422 线缆上的标签并不统一。你把板子端子的 A 接到线缆的 A理论上没问题但实际因为不同方案的接线定义差异可能要 A-A、B-B 或者 A-B、B-A 交叉。解决思路很简单一旦通信失败先把收发两根线对调再试一次往往就好了。4.4 用最小梯形图验证整机状态通信正常之后不要急着写复杂逻辑。我习惯写一个最小验证程序一个常开输入点 X0控制一个输出点 Y0。这样只需要一根短接线和一个万用表就能验证输入采集、逻辑运算、输出刷新整个链条是否正常。再把 X1 并联到 X0或者把 Y0 串一个常闭触点做自锁这些简单的逻辑组合能快速验证软元件之间的关联状态。很多板子的问题往往就藏在最基本的一个点到点链路里不先用最小逻辑排除底层故障后面写再多程序都是白搭。5. 常见问题与排查实录5.1 上电后整机无反应这是最打击人的情况。整机无反应大概率是电源部分没有工作。先量保险丝是否开路再量整流桥输出是否有直流电压接着看开关电源芯片的启动电阻、启动电容是否正常最后确认主控电源引脚有没有电压。如果电源 IC 启动不了一个常见原因是变压器绕组短路这个不好测但可以从芯片的供电电流异常来判断。还有一种隐蔽故障是启动电容容量衰减电压升不上去导致芯片反复重启用示波器看电源输出波形会呈现周期性的锯齿状。换掉电容后问题通常立刻消失。5.2 输入信号灯不亮或误动作输入信号不亮先从外部接线查起。FX3U 类型 PLC 的输入为漏型/源型可选取决于公共端 S/S 如何接线。如果 S/S 接 24V 正极那么传感器需要输出低电平才能导通反之接负极则需要传感器输出高电平。接反了指示灯可能常亮或者干脆不亮。如果接线没问题再量光耦输入端有没有足够电流。FX3U 输入典型驱动电流在 5mA 到 10mA 之间如果前面串了太大的限流电阻或者传感器驱动能力不足光耦无法饱和导通指示灯就会若明若暗。误动作则多数是外部干扰导致把输入信号线从动力线束里分开单独走线或者给输入端子并联小电容吸收噪声可以明显改善。5.3 输出点带不动负载或频繁烧毁继电器输出型带不动负载先看触点额定电流够不够。FX3U 继电器输出额定电流一般按 2A/250VAC 设计驱动电磁阀、接触器这种感性负载时还要考虑启动冲击电流。频繁烧触点多半是没有做灭弧处理。感性负载在断开瞬间会产生反电动势触点间拉弧长期下来触点表面氧化碳化接触电阻变大最后彻底失效。解决办法是在负载两端并联阻容吸收或者压敏电阻续流方向要正确否则反而加剧问题。晶体管输出型带不动负载则要检查负载电源极性、输出端压降和外部负载短路情况。晶体管输出内部有短路保护和过流保护但如果外部接线错误导致过压照样可能击穿功率管。输出点损坏之后不要只换管先查外部负载回路是否正常。5.4 程序下载成功但运行逻辑不对板子能通信、能下载但一运行就逻辑错乱这种情况最让人头疼。先看是不是字节码解析模块的问题确认源码里对用户程序区的编码格式处理是否正确。如果用的是自制固件编译器生成的指令码要在解释器里一一对应任何一个操作码偏移都会导致整段逻辑乱掉。再有一种情况是输入映像区和输出映像区的刷新时序乱掉了。如果循环里先写输出再读输入又或者通信中断和主循环同时操作同一个软元件就可能在临界区产生脏数据。解决方法是检查代码里是否有关闭中断保护的操作或者对共享数据区加标志位互斥。最后有一种经验性提醒别忽略电压跌落。现场大负载启动瞬间电源电压被拉低主控复位程序重新开始扫描和上位机的通信也会断开。但因为你看到的是“正在运行”很容易忽略掉这瞬间复位。用示波器监测 5V 电源波形可以看到明显的跌落尖峰。这种情况不是逻辑问题而是电源余量不足换更大功率的电源模块就解决了。6. 从资料包到产品化还需要补哪些功课如果你只是做技术研究前面这些内容已经相对完整。但如果想把这套资料做成真正能稳定出货的控制器还需要面对几个现实问题。第一固件合规性。不要直接把原厂固件拷到兼容硬件上跑这涉及知识产权问题。做技术学习是一回事做产品是另一回事边界要分清。改成自己的底层内核、自己的通信协议再从指令层面去兼容常用编程软件是相对稳妥的方向。第二EMC 测试。工业现场不跟你讲道理静电放电、快速脉冲群、浪涌、射频场辐射每一样都可能让控制器死机。资料包里的原理图和 PCB 可以解决一部分布局层面的问题但最终能不能通过测试还是要靠整改。我自己测试时发现输入口加 TVS、输出口加续流这两样对抗干扰提升非常明显。第三环境适应性。宽温设计、三防漆涂覆、连接器防振动松动这些量产细节虽然不起眼却往往是产品能否在客户现场长期稳定运行的分水岭。很多人在实验室跑得好好的板子一到现场三天两头出问题差的就是这一层。写在最后的一些体会说实话把整套源码和图纸从头到尾过一遍之后我对 PLC 的“敬畏感”反而更强了。很多人觉得 PLC 不过是一块单片机加几个光耦真自己动手做一台能稳定跑的控制器才知道细节有多磨人。我个人在实际操作中的体会是这类资料包最适合的学习路径是先拿原理图对照实物板卡逐块看再看 PCB 的布局去理解设计者的思路最后才是碰源码。反过来直接硬啃代码没有硬件概念打底很快就会迷失在结构体和函数调用里。另一个实用建议是准备一块“牺牲板”专门用来做破坏性实验——比如故意短接输出、给输入口加高压看看板子是怎么失效的。这种测试虽然伤板子但对理解保护电路和失效机制特别有帮助。如果你手头也有一套类似的 FX3U 资料别急着吃灰照着这个思路逐步拆解一遍收获一定会比单纯拿它当参考图纸大得多。后续我还会继续整理通信协议分析和扩展模块对接这块的内容到时候再和大家细聊。