
简介面向工业自动化开发者与PLC编程人员这套源码围绕三菱PLC绕线机程序设计提供了从自动运行、手动操作、回原点到HMI通信的完整可运行方案重点解决多段位置与圈数可调、正反转互锁、动态参数切换等实际工程问题。包体内共8个文件以5个HTML仿真/说明页面和1个Markdown开发文档为主另有1个配置文件和1个忽略规则文件压缩包整体约21KB轻量便于快速查阅和仿真验证。当前已有33人学习适合需要借鉴绕线机控制逻辑、寄存器分配及触摸屏绑定技巧的中级PLC开发者。内容覆盖D100-D105圈数存储、D200-D205位置存储、FOR循环变址遍历、P10子程序运动控制、ZRN回原点滤波处理等关键细节并附有梯形图程序框架与调试排错思路可直接在仿真页面中观察运行效果为实际设备调试提供可靠参考。 做三菱PLC绕线机程序开发这个方向我从入行第四年就开始接触前前后后写过几十台不同规格的绕线机程序也给自己接过不少私活。绕组线机这个设备在自动化圈子里属于典型的“低频高价值”项目平时不怎么起眼但电机厂、变压器厂、电感厂永远离不开它能写好绕线机程序的工程师去这些行业里几乎不会失业。这篇文章我拿一个实际交付过的三菱FX3U平台绕线机项目做底子从工艺需求的拆解、机械参数的计算、程序架构的设计到核心同步逻辑、状态机和现场调试的坑完整走一遍。文中的参数计算、梯形图思路、状态机代码都是可以迁移复用的你拿到自己的项目里改一改机械参数和I/O分配就能跑起来。1. 绕线机的工艺需求先把这个想透再动笔很多人拿到绕线机需求第一反应就是“主轴转圈、排线横移很简单”。真到现场调试才发现问题全出在“简单”两个字背后的细节里。1.1 绕线机到底在绕什么绕线机应用面非常广电机定子/转子线圈、变压器、电感、继电器线圈、电磁阀线圈甚至无刷电机转子绕线本质上都是同一个工艺——把一根线均匀地缠到骨架上每层排列整齐层与层之间压实圈数和层数严格准确。这类设备需要控制的对象可以归纳成三块主轴带动工件旋转决定绕线速度和总圈数通常用三相异步电机加变频器或者伺服电机。排线机构带动线嘴或导针横向移动决定线材在骨架上的排列密度一般用步进电机或伺服电机加丝杠/同步带驱动。张力与断线检测保证线材在绕制过程中绷紧但不拉断断线时能立即停机。产品规格变了比如从绕0.3mm漆包线换成绕0.8mm线径不需要改机械结构只需要改PLC里的线径、宽度、层数、速度这些参数。这就是为什么绕线机的控制核心在程序而不在机械。1.2 主轴和排线的同步关系是绕线机程序的灵魂绕线机的核心工艺要求就一句话主轴每转一圈排线刚好移动一个线径的距离。如果主轴转了几圈排线才移动一个线径线就会叠在一起如果主轴还没转完一圈排线就多走了线材之间就会出现缝隙露骨架。这两种情况在绕线行业里分别叫“叠线”和“漏线”都是废品。想明白同步关系后就能理解为什么不能用“主轴固定转速、排线按时间走固定距离”这种傻瓜逻辑去控排线。因为主轴实际转速会受负载、电压波动、变频器加减速影响真实转速和设定转速之间永远有偏差。你按时间推算排线位置开头还能对得上绕到几十圈之后偏差累积起来排线就彻底扭曲了。正确做法是让排线跟随主轴的实际转角走这就是编码器反馈的用处。主轴一转编码器把实际转角告诉PLCPLC算出排线该走多少立刻给步进电机发脉冲。这套逻辑在工业上叫“电子齿轮”在绕线机里就是最核心的同步控制。1.3 为什么绕线机项目里三菱FX3U这么常见我做过不少平台但绕线机项目里用得最多的还是三菱FX3U原因很现实成本低小型绕线机用不到大型PLCFX3U 16/32点主机就能覆盖大部分I/O需求整机BOM成本压得住。内置高速脉冲输出FX3U晶体管输出型自带3路100kHz的高速脉冲输出驱动步进/伺服排线轴完全够用。内置高速计数器编码器接上就能用不需要另加高速计数模块对于绕线机这种“主轴转圈计数排线同步”的应用再合适不过。需要特别提醒的是选型时必须选晶体管输出型型号后缀一般是MT不能选继电器输出型MR。继电器输出只能应付低速开关信号给步进电机发脉冲根本不行频率一高脉冲就丢了。我常用的平台配置如下表部件选型建议说明PLC三菱FX3U-32MT/ES晶体管输出内置128K步进程序存储主轴变频器普通三相电机低速绕线够用成本低排线步进电机驱动器57/86步进按负载选主轴反馈增量式编码器600线或1000线装在主轴侧测实际转角人机界面昆仑通泰/威纶通触摸屏设参数、显示圈数和报警2. 机械参数换算用一张纸算出程序里要用的数写绕线机程序前先别碰电脑第一步是拿机械图纸和现场量出来的参数做计算。这一步错了后面程序写得再漂亮也是白搭。2.1 先搞清楚四个关键机械参数丝杠导程排线丝杠转一圈排线机构移动多少毫米。常见的有2mm、5mm、10mm。步进电机分辨率步进电机一般200步/转如果驱动器细分数设为8那电机转一圈需要1600个脉冲。编码器分辨率增量式编码器一般标称500线、600线、1000线等。如果采用A/B相双通道4倍频方式脉冲数就是线数的4倍。主轴到编码器的传动关系如果编码器和主轴同轴编码器转一圈就是主轴一圈如果编码器装在电机侧就要乘以减速比换算回主轴圈数。以上四个参数里最容易出问题的是第四个。编码器最好装在实际工件旋转的主轴侧否则电机和主轴之间有皮带打滑或减速齿轮间隙编码器反馈的角度就和真实主轴角度对不上程序里怎么补偿都救不回来。2.2 实际案例算一遍排线步进脉冲数拿我最近做的一台变压器骨架绕线机举例机械参数如下排线丝杠导程5mm步进电机步距角1.8°即200步/转驱动器细分数8所以步进电机转一圈需要 200×81600 个脉冲线材直径0.35mm编码器600线接A/B相4倍频主轴每圈 600×42400 个脉冲计算过程排线移动1mm需要的脉冲数1600 ÷ 5 320 脉冲/mm主轴每转一圈排线应移动0.35mm对应脉冲数320 × 0.35 112 脉冲/圈主轴每圈编码器反馈2400个脉冲也就是说主轴每反馈2400个编码器脉冲排线需要输出112个步进脉冲。这个比例 2400:112 就是程序的同步核心绕线过程中必须严格按这个比例去分配脉冲输出。我习惯写一个小Python脚本把这类计算自动化免得手工按计算器容易按错def calc_ratio(line_dia, lead_mm, driver_steps_per_rev, enc_ppr, multiplier4): # 排线每毫米脉冲数 step_per_mm driver_steps_per_rev / lead_mm # 主轴每圈排线应走的脉冲数 step_per_turn step_per_mm * line_dia # 编码器每圈脉冲数 enc_per_turn enc_ppr * multiplier # 每步排线对应的主轴编码器脉冲数 enc_per_step enc_per_turn / step_per_turn return enc_per_turn, step_per_turn, enc_per_step enc_per_turn, step_per_turn, enc_per_step calc_ratio( line_dia0.35, lead_mm5, driver_steps_per_rev1600, enc_ppr600 ) print(enc_per_turn, step_per_turn, enc_per_step)输出结果里最关键的是enc_per_step它表示排线每走一步主轴编码器大概要反馈多少个脉冲。2.3 遇到非整数比怎么办上面算出来 2400 ÷ 112 ≈ 21.428这个数不是整数意味着主轴每走21个编码器脉冲排线要走接近一步但不完全等于一步。如果只简单地“数到21就发一个排线脉冲”绕久了误差会累积最后排线偏移量肉眼可见。正确做法是用一个累加器来处理余数每收到1个主轴编码器脉冲就往累加器里加 1/21.428 ≈ 0.0467累加器数值超过1就给排线发一个脉冲同时累加器减1。这样长期平均下来比例严格等于 2400:112不会漂移。这个逻辑放在PLC里执行时要注意用浮点数或者至少32位整数来存累加值不能只用16位否则很容易溢出或者精度不足。3. 程序核心逻辑可运行源码思路与关键实现绕线机程序我习惯分成四大块手动模式、自动模式、参数初始化、报警处理。下面把每一块的关键思路和核心实现讲清楚。3.1 I/O分配和程序骨架刚起步的项目先把I/O分配定死后面写程序才不乱。我常用的引脚分配如下地址信号说明X0编码器A相接主轴编码器A相输出X1编码器B相接主轴编码器B相输出4倍频计数X2启动按钮自动启动X3停止按钮自动停止/复位X4暂停按钮暂停保持当前状态X5原点开关排线机构原点Y0排线步进脉冲发脉冲给步进驱动器Y1排线方向控制排线正反方向Y2主轴启动控制主轴变频器/接触器Y3报警灯断线/故障报警程序骨架就是一段主程序加若干子程序主程序里用梯形图或ST调用手动处理、自动处理、报警处理逻辑清晰现场调试时也方便单块屏蔽测试。3.2 用高速计数器实现主轴圈数精确计数主轴计数如果不准绕出来的产品圈数就不对。普通扫描周期的计数器完全不行因为PLC扫描周期在几毫秒到几十毫秒之间波动主轴一转高速转起来一毫秒就能跑好几个脉冲普通计数器一定会漏。正确做法是用三菱FX3U的高速计数器。我的接线是把编码器A相接X0、B相接X1对应高速计数器是C251双相4倍频计数。然后使用高速计数器比较指令DHSCSFNC53当计数器到达设定值比如2400即主轴转一圈时立即触发置位一个内部继电器这个动作由硬件中断完成不依赖扫描周期。梯形图核心逻辑的文字表述大致如下// 高速计数器C251接X0/X1自动4倍频 // 主轴每转一圈C251计数到2400立即置位M100 DHSCS K2400 C251 M100 // 主程序段 LD M100 RST M100 // 复位比较标志 INC D10 // 当前圈数1 CALL P0 // 调用排线步进处理子程序这里有几个细节需要注意DHSCS比较指令是立即执行的即使PLC正在执行其他程序段只要计数器到达设定值也会立刻置位M100这就是绕线机不会漏圈的原因。M100置位后要在程序中及时复位否则会重复触发。D10用来记录圈数如果绕线机工作在断电续绕模式D10要换成掉电保持区例如D512之后。3.3 排线步进和主轴的同步实现严格地说如果要求“主轴每走一定角度排线立刻跟上”FX3U纯靠PLC中断频率做不了高速精密同步尤其是主轴转速超过300rpm时。我在实际项目里的处理方案是低增速分段同步主轴每转一圈编码器反馈满2400脉冲在中断置位M100后调用排线子程序按2.2节计算的112个脉冲用定位指令或脉冲输出指令让排线走一步。由于绕线机的主轴转速通常不会太高这个方案在中低速绕线里非常稳定程序逻辑也直白。如果主轴高速运转最靠谱的升级方案是让排线伺服驱动器的电子齿轮直接吃编码器反馈信号由伺服驱动器硬件完成快速跟随PLC只负责逻辑判断和层数切换。这个方案我会在后面扩展部分再讲。排线子程序的核心逻辑如下// 排线子程序P0 LD M100 // 主轴每圈触发 MOV K112 D0 // D0保存排线步数来自参数区 DPLSY K2000 D0 Y0 // 以2kHz频率向Y0输出D0个脉冲 // 实际项目里这里也要输出方向信号Y1DPLSY指令是FX3U内置的高速脉冲输出指令能持续输出指定数量的脉冲。频率和脉冲数都可以用数据寄存器动态指定这就意味着线径参数改了我只要在触摸屏里改D0的值排线步进就跟着变了。3.4 自动绕线状态机自动绕线整个流程从按下启动按钮开始到产品绕制完成结束中间会经历正向绕行、换向、反向绕行、层数判断、暂停、急停等状态。用状态机管理这些状态程序可读性和可维护性会好很多。我习惯用ST语言写状态机因为GX Works3里ST对状态切换的表达比梯形图清晰。下面是一个简化版的状态机示例// 自动绕线状态机ST示意 CASE stStep OF 0: // 待机 IF bStart THEN iLayer : 0; iTurn : 0; stStep : 10; END_IF; 10: // 正向绕线 bDir : TRUE; // 排线正方向 IF bPause THEN stStep : 90; END_IF; IF iTurn iTotalTurn THEN stStep : 20; // 当前层绕完 END_IF; 20: // 换向处理 iLayer : iLayer 1; bDir : NOT bDir; // 排线反向 IF iLayer iTotalLayer THEN stStep : 99; // 所有层完成 ELSE stStep : 10; END_IF; 90: // 暂停 IF NOT bPause THEN stStep : 10; // 继续绕线 END_IF; 99: // 全部完成 bFinish : TRUE; stStep : 0; END_CASE;实际做项目时状态机里还要加入回原点和断线检测的判断。比如换向完成后排线机构要准确回到当前层的起始位置如果原点丢失必须报警让操作员手动处理。3.5 断电续绕与掉电保持绕线机最怕绕到一半突然断电。一个3000圈的变压器线圈断了电之后如果数据全丢整个工件报废损失不小。三菱FX3U的数据寄存器默认有一部分是掉电保持的比如D128之后的很多区。我习惯把所有关键工艺数据都存到掉电保持区当前圈数D512当前层数D514排线当前位置D516当前方向M500掉电保持型中间继电器上电后程序先读取这些保持区数据判断断点位置然后在触摸屏上弹窗提示“检测到未完成工件是否继续绕制”。只有操作员确认后才恢复运行。这个逻辑虽然简单但确实能帮客户省下不少废品成本。3.6 断线与张力检测绕线机正常工作时线材有张力张力杆或张力传感器保持在一个稳定位置。一旦断线张力瞬间消失张力杆掉下来这时需要快速停机否则主轴还在转线头会被甩乱甚至缠到机械结构里。比较简单的方案是用张力杆加接近开关张力正常时张力杆压在开关上输入信号为ON断线后张力杆落下信号变成OFF。程序里只要检测到这个OFF信号就立即断开主轴启动输出Y2并置位报警标志。如果设备要求更细腻的张力控制可以加模拟量张力传感器配合FX3U-4AD模拟量模块做PID恒张力控制。这个方案成本高但确实能提升高精度绕线比如细线径高速绕制的产品质量我这里就不展开讲PID参数整定了后面有机会单独写一篇。4. 现场调试最容易踩的坑与排查方法绕线机程序的坑绝大多数不是逻辑难而是现场工况带来的软硬件问题。我把自己踩过的坑整理成几条经验和一张排查表希望能帮你少走弯路。4.1 高频脉冲干扰导致计数丢失第一次做绕线机时我把编码器线和步进脉冲线放在同一个线槽里走结果一启动主轴圈数就开始乱跳甚至偶尔会多计几十圈。查了半天问题出在编码器信号被步进脉冲的高频边沿干扰。后来的解决办法是编码器线改用屏蔽双绞线屏蔽层单端接地。编码器线和脉冲输出线分开走线槽保持至少20cm距离。步进驱动器的脉冲信号线也尽量用双绞屏蔽线。PLC的电源单独接不要和变频器共用一个空开。这三条做完干扰问题基本绝迹。绕线机现场的动力线、变频器、电机到处都是干扰源线缆走线看起来是小事实际上决定了设备能不能稳定跑。4.2 排线不齐不一定是程序问题有一次客户反馈说绕出来的线层有缝隙我一开始怀疑同步计算有误反复核对公式没问题。到现场才发现是排线丝杠的螺母间隙太大换向时排线机构有回程误差导致每层边缘都偏了一点点。所以遇到排线不齐先排查机械间隙再调程序。如果是丝杠间隙问题程序里可以在每次换向时先让排线往反方向多走一点补偿量再进行正常排线。这个补偿量叫“反向间隙补偿”需要在触摸屏里留一个参数给现场调试用不同机械跑出来的数值不一样一般调0.5~2.0mm。另外线材绕到接近层边缘时主轴速度不要保持最高最好做阶梯降速。否则线材在换向瞬间被快速拉扯切线处容易塌线。实际项目里我在最后5圈会做一个“慢速匀绕”的处理效果很明显。4.3 主轴加减速时打滑和丢步用变频器驱动主轴时加减速太快会导致皮带打滑或电机丢步而编码器装在主轴侧时这种打滑不会表现为圈数错误但会表现为排线间距忽大忽小。解决思路是编码器装在主轴侧的前提下把变频器的加减速时间调得平滑一些让主轴转速尽量稳定。排线步进电机那边也要设置合理的加减速不能让排线一步猛地冲出去或刹住尤其绕细线径时步进电机惯性太大直接丢步。4.4 常见问题速查表现象可能原因排查方法解决方案圈数偶尔多计或漏计编码器信号干扰检查编码器线走线和屏蔽换屏蔽双绞线分槽走线单端接地绕线层有缝隙排线间距偏大测量实际排线距离调小线径参数或加过盈系数0.95~0.99绕线叠线排线间距偏小测量实际排线距离调大线径参数或检查反向间隙补偿排线到边缘塌线换向时速度过快观察换向瞬间线材状态加慢速匀绕最后5圈降速断电重启数据丢失数据存在非保持区检查D区属性改用掉电保持区D512之后主轴不转但圈数在增加编码器接线松动或干扰看高速计数器当前值紧固接线重新屏蔽排线定位越来越偏丝杠间隙或同步误差累积量取实际位移对比理论值加反向间隙补偿检查同步比例4.5 触摸屏通信和下载线的小提醒绕线机项目基本都要配触摸屏我常用昆仑通泰和威纶通。三菱FX3U和触摸屏之间用RS422/RS485通信连接时注意PLC侧编程口的针脚定义不同品牌触摸屏对应的通信参数也要仔细核对一般波特率设9600、数据位8、停止位1、偶校验。现场调试期间如果编程线不在手边也可以自己做一根三菱FX系列下载线网上能查到针脚定义。三菱FX3U的编程口不是标准RS232针脚排列和普通串口不一样接错轻则通信不上重则烧通信芯片动手前一定先确认好定义。写在后面绕线机这个项目我前前后后做了这么多年最大的体会是看起来机械结构简单实际非常磨人但技术门槛一旦跨过去项目的可复制性极强。同一套程序逻辑换不同的产品规格就是改参数、改配方接到电机、变压器、电感等不同行业客户的单子都能很快落地。最后分享一个我自己的习惯所有绕线机程序都会在触摸屏里做一个“配方页面”把每款产品的线径、圈数、层数、绕线速度、排线补偿量存成一个配方号。客户换产品型号时一键调用配方不需要重新一个个输入参数。这个功能做起来不难但对客户来说体验提升非常明显很多老客户愿意把后续订单也交给你做就是冲着这些使用细节。本文还有配套的精品资源点击获取