资讯动态

三菱FX5U多轴伺服控制如何用ST语言封装成FB块

发布时间:2026/10/19 13:05:37 来源:尧图企业网站定制
简介针对三菱FX5U PLC的ST语言轴控制模板程序面向工业自动化工程师与PLC编程人员解决多轴运动控制中重复编写功能块的问题。压缩包内含原点复归、点动、定位运动三类核心FB块采用结构化文本清晰封装多轴场景下只需重复实例化即可复用。资源共8个文件以6张图片直观展示程序结构与应用示意配合txt源码说明和html教程文档从原理到调用均有讲解压缩包约990KB便于快速下载查阅。已有1071人学习适合需要快速搭建多轴运动控制程序的开发者。通过该模板可掌握ST语言编写轴控制FB块的完整思路理解原点复归的安全机制、点动操控逻辑与定位运动的加减速处理从而直接迁移到流水线、机械手等设备控制中显著缩短开发周期并降低调试成本。1. 一根轴写一遍、六根轴写六遍用ST语言把FX5U轴控制包成FB块某台设备上有六个伺服轴每个轴都需要原点复归、点动和定位。最早用梯形图做一个轴一段逻辑复制粘贴六份每个轴的限位、速度、目标位置参数互相穿插改一个轴要同时翻六个程序块调试时还经常找错地方。后来改成用ST语言把整套轴控制逻辑封装成FB块程序主体变成一份状态机代码加六行实例化调用每个轴只喂自己的参数复杂度和改动成本一下子降下来。这个FX5U轴FB块模板就是干这件事的用ST语言实现原点复归、点动、定位运动三个核心功能FB块支持多轴重复实例化。适合正在做三菱FX5U多轴设备程序、想把重复定位逻辑从梯形图里解放出来的自动化程序员。2. 技术选型与FB接口设计编程语言选ST接口按轴参数分层2.1 梯形图写定位的瓶颈以及ST语言为什么适合运动控制三菱FX5U在GX Works3里支持梯形图、ST、FBD等编程语言。梯形图是多数电气工程师最熟的图形化语言它强在离散逻辑的直观表达按钮、继电器、伺服状态一眼能看懂。但一旦遇到大量数值计算、数组、循环、状态迁移的运动控制逻辑梯形图就变得冗长。六轴设备程序复制六份之后每一份都要手动改输出点、方向点、限位软元件漏改一个就是设备一跑就撞限位的现场事故。ST语言是IEC 61131-3标准的文本型编程语言本质是类似Pascal的高级编程语言有变量声明、IF/CASE/WHILE、数组、结构体、功能块实例化这些手段。运动控制恰好是程序里「线性流程分支状态」最多的部分原点复归要先找限位、再爬行、到位清坐标点动要随时响应正反转和停止定位要算目标位置、速度和加减速还要等待完成信号。用CASE写一个状态机每个状态对应一个流程阶段比梯形图的一堆自锁互锁线圈好维护得多。选ST还有一个现实原因FB块封装和多轴实例化。同一个轴控制逻辑写成FB块后程序里每个轴调用一次每个实例独立保存内部变量调用方只给速度、目标位置、指令号不用关心内部怎么实现。后期加一个轴主程序里多写一行实例化调用不需要再复制一段梯形图。这就是FX5U项目里用编程语言的思路转变从「画逻辑」变成「写逻辑调接口」程序的可维护性完全是两个档次。2.2 FX5U定位指令基础DRVZ、DRVI/DRVA与JOG点动FX5U属于三菱MELSEC iQ-F系列基本单元自带晶体管脉冲输出直接接伺服驱动器或步进驱动器脉冲数量决定位置脉冲频率决定速度这是轴控制最底层的物理通道。在GX Works3里定位相关的指令常见有DRVZ原点复归、DRVI相对定位、DRVA绝对定位、点动运行以及各类限位、减速点信号。这套轴FB块模板不直接把指令写在状态机里而是在指令之上再包一层逻辑层。逻辑层统一做这些事接收目标位置和速度并缓存、判断运动方向、等待完成信号、做超时保护指令层只负责把逻辑层的请求翻译成FX5U的定位指令。这样分层的原因很实际轴指令在不同固件版本和设备型号下细节有差异逻辑层把它们隔离掉之后换机型只改最薄的一层驱动代码状态机这部分不需要动。从使用者的角度看只需要记住三件事每个轴实例绑定一路脉冲输出原点复归需要限位开关或减速点信号接到输入软元件上定位指令完成后底层会抬一个完成信号FB块内部把它转成o_Done输出。模板程序把这三种运动方式收敛成统一的接口调用方不需要关心底层指令细节。2.3 FB块接口分层输入输出与轴参数传递接口设计直接决定了这个FB块好不好用我把接口分成三层指令输入、状态输出、内部私有变量。指令输入这一层只暴露使能、指令号、目标位置、速度和加减速时间状态输出暴露忙碌、完成、错误和故障码内部私有变量是状态机当前状态、边沿检测变量、超时计数器。接口名称类型说明输入i_EnableBOOL总使能FALSE时强制回空闲状态输入i_CommandINT0停止1原点复归2正转点动3反转点动4定位输入i_TargetPosDINT定位目标位置单位脉冲输入i_SpeedDINT运行速度单位脉冲/秒输入i_AccelTimeINT加速时间单位毫秒输入i_DecelTimeINT减速时间单位毫秒输出o_BusyBOOL轴运动中为TRUE输出o_DoneBOOL本次指令正常完成输出o_ErrorBOOL故障标志输出o_ErrorIDWORD故障代码设计上把「轴号」从接口里拿掉了。多轴场景每个FB实例天然对应一个物理轴不需要在接口里动态传轴号如果非要在运行时动态切换轴号实例内部的脉冲输出绑定就得跟着变反而破坏实例独立性。主程序里建六个实例每个实例内部通过p_前缀的底层信号绑定各自的输出点和限位输入。内部变量state、edgePrevCmd、timeOutCnt都是VAR私有变量多实例之间不共享这是FB块能「一份代码多轴复用」的核心前提。3. 核心代码拆解原点复归、点动、定位三套状态机怎么落地3.1 FB块骨架接口声明与状态机主循环FB块的接口声明按IEC 61131-3标准写三菱GX Works3的ST语法直接支持这种写法。关键点在于所有内部变量都放在VAR区不上全局软元件表这样才能保证多个实例化副本彼此独立。(* 轴控制FB块接口声明 *) FUNCTION_BLOCK Fb_Axis VAR_INPUT i_Enable : BOOL : FALSE; (* 总使能 *) i_Command : INT : 0; (* 0停止/1回原点/2正转点动/3反转点动/4定位 *) i_TargetPos : DINT : 0; (* 目标位置单位脉冲 *) i_Speed : DINT : 100000; (* 运行速度单位脉冲/秒 *) i_AccelTime : INT : 100; (* 加速时间单位毫秒 *) i_DecelTime : INT : 100; (* 减速时间单位毫秒 *) END_VAR VAR_OUTPUT o_Busy : BOOL : FALSE; (* 轴运动中 *) o_Done : BOOL : FALSE; (* 本次指令完成 *) o_Error : BOOL : FALSE; (* 故障标志 *) o_ErrorID : WORD : 0; (* 故障代码 *) END_VAR VAR state : INT : 0; (* 状态机当前状态 *) edgePrevCmd : INT : 0; (* 上次指令号用于上升沿检测 *) timeOutCnt : DINT : 0; (* 超时计数器 *) END_VAR接口声明里有几个值得注意的细节。所有输入输出都给了初始值这点在PLC程序里容易被忽略PLC上电或RUN切换瞬间如果输出没有初值触摸屏上可能闪一帧错误信号。o_Error、o_Done初始化成FALSEstate初始化成0上电就进入空闲状态不会乱发指令。FB体主循环用CASE语句驱动状态号分三段0是空闲10~19是原点复归20~29是点动30~39是定位。这样扩展新功能时比如加一个回中位功能直接分配状态号40~49改动范围完全隔离。(* 主状态机0空闲10回原点20点动30定位 *) IF i_Command edgePrevCmd THEN o_Done : FALSE; edgePrevCmd : i_Command; END_IF; IF NOT i_Enable THEN state : 0; o_Busy : FALSE; o_Done : FALSE; END_IF; CASE state OF 0: o_Busy : FALSE; IF i_Command 1 THEN state : 10; ELSIF i_Command 2 OR i_Command 3 THEN state : 20; ELSIF i_Command 4 THEN state : 30; END_IF; 10: (* 原点复归逻辑见3.2 *) 20: (* 点动逻辑见3.3 *) 30: (* 定位逻辑见3.4 *) END_CASE;主循环里最核心的一段是前面的指令沿检测i_Command edgePrevCmd才认为是新指令。很多人第一次用ST写定位程序会掉进这个坑——直接把IF i_Command 4写在状态机里结果定位指令每个扫描周期都被重新触发轴走一段停一下。沿检测保证了一次指令只产生一次启动动作后面的状态机等待完成信号后自动回空闲。3.2 原点复归从发送指令到清除当前位置原点复归的状态机逻辑是把「发请求」和「等完成」拆成两个阶段。进入状态10后先把p_HomeReq置TRUE底层驱动器收到这个上升沿后执行DRVZ原点复归动作随后状态机等着底层返回p_HomeDone。这个拆分很重要避免在等待期间重复置位请求信号。10: (* 原点复归执行 *) o_Busy : TRUE; p_HomeReq : TRUE; (* 上升沿触发底层原点复归指令 *) p_HomeMode : 0; (* 限位爬行回原点方式 *) timeOutCnt : 0; state : 11; 11: (* 等待原点回归完成 *) timeOutCnt : timeOutCnt 1; IF p_HomeDone THEN (* 底层指令层返回完成 *) p_HomeReq : FALSE; o_Busy : FALSE; o_Done : TRUE; o_CurrentPos : 0; (* 原点复归完成当前位置清0 *) state : 0; ELSIF timeOutCnt 5000 THEN (* 约25秒超时按扫描周期换算 *) p_HomeReq : FALSE; o_Error : TRUE; o_ErrorID : 16#1001; state : 0; END_IF;超时计数器的写法需要结合扫描周期来换算。比如程序扫描周期是5mstimeOutCnt超过5000就是25秒原点复归25秒还没完成基本可以判断是限位开关没到位或接线有问题。实际项目里我习惯把这个超时时间和故障码做成可配置参数因为不同设备的原点行程长度差异很大有的滚珠丝杠几秒就到位有的长行程需要几十秒。p_HomeReq、p_HomeDone这些p_前缀的信号在模板程序里是FB块内部引用的底层软元件。p_HomeReq对应底层定位程序里DRVZ的触发条件p_HomeDone对应回原点完成标志。做二次开发时换一个轴型或者改限位接线只需要在底层驱动块里重新映射这几个软元件状态机代码完全不用动。3.3 点动速度连续输出与停止逻辑点动和定位有一个本质区别定位是「发一次命令等一个结果」点动是「保持信号就动撤掉信号就停」。所以点动状态里p_JogReq必须持续输出TRUE不能只发一个上升沿就复位否则轴会走一个脉冲就停下。20: (* 点动运行 *) o_Busy : TRUE; p_JogReq : TRUE; (* 点动保持信号 *) IF i_Command 2 THEN p_JogDir : 0; (* 正转点动 *) ELSIF i_Command 3 THEN p_JogDir : 1; (* 反转点动 *) END_IF; IF i_Command 2 AND i_Command 3 THEN p_JogReq : FALSE; (* 命令撤销停止点动 *) o_Busy : FALSE; state : 0; END_IF;这个状态的关键点在于退出条件外部指令一旦不是2或3立即撤销p_JogReq。实际接线时触摸屏上的点动按钮如果直接映射到i_Command按钮松开扫描周期就会把i_Command置0状态机自动退出20状态轴停住。这个逻辑也天然支持急停急停回路断掉i_Enable主循环顶部的使能判断会强制state回0所有运动请求全部撤销。需要提醒的是点动速度通常和定位速度不同我一般会在实际项目里给点动单独配一个速度参数比如点动速度20000脉冲/秒定位速度100000脉冲/秒。这个模板里可以复用i_Speed也可以在接口里加一个i_JogSpeed属于看现场习惯的差异。3.4 定位运动目标位置、速度与完成判断定位运动是三个功能里参数最多、最容易出问题的分支。模板程序把它分成两个状态状态30负责缓存参数并发请求状态31负责等待完成。在发请求之前先做一次软限位检查目标位置超出限位范围就直接报错不让指令到达底层。30: (* 定位执行 *) IF i_TargetPos 100000000 OR i_TargetPos -100000000 THEN (* 软限位检查实际项目改成结构体数组里的限位值 *) o_Error : TRUE; o_ErrorID : 16#1102; state : 0; ELSE o_Busy : TRUE; p_PosCmd : i_TargetPos; (* 缓存目标位置 *) p_VelCmd : i_Speed; (* 缓存运行速度 *) p_AccCmd : i_AccelTime; (* 缓存加速时间 *) p_DecCmd : i_DecelTime; (* 缓存减速时间 *) p_PosReq : TRUE; (* 上升沿触发定位指令 *) timeOutCnt : 0; state : 31; END_IF; 31: (* 等待定位完成 *) timeOutCnt : timeOutCnt 1; IF p_PosDone THEN (* 底层返回定位完成 *) p_PosReq : FALSE; o_Busy : FALSE; o_Done : TRUE; state : 0; ELSIF timeOutCnt 30000 THEN (* 超时报警 *) p_PosReq : FALSE; o_Error : TRUE; o_ErrorID : 16#1103; state : 0; END_IF;定位运动这里有一个容易被忽略的点绝对定位的目标位置单位是脉冲而不是毫米或度。如果触摸屏上操作员输入的是毫米数上位机程序或FB块内部必须乘上电子齿轮比换算成脉冲。模板程序在接口注释里明确写了「单位脉冲」这是故意的——把单位换算放在FB块外面FB块内部只做脉冲级的定位逻辑换算关系改动时不用动状态机。定位状态里的超时时间我给了30秒的扫描计数偏长实际项目里要根据行程和速度计算。一个更稳妥的做法是让上位机在下发定位指令时同时给出一个期望完成时间FB块拿这个时间做超时阈值这样同一个FB块可以适应快速小行程和慢速大行程两种工位。3.5 多轴实例化主程序里六个轴的调用方式轴FB块写完之后主程序里的使用非常简单。建六个FB实例每个实例对应一个物理轴调用时把各自的全局标签接到接口上。这里用三菱ST的FB调用语法输入参数用「:」赋值输出参数用「」带回。(* 主程序中实例化六个轴 *) fb_XAxis : Fb_Axis; (* X轴实例 *) fb_YAxis : Fb_Axis; (* Y轴实例 *) fb_ZAxis : Fb_Axis; (* Z轴实例 *) fb_U_Axis : Fb_Axis; (* U轴实例 *) fb_V_Axis : Fb_Axis; (* V轴实例 *) fb_W_Axis : Fb_Axis; (* W轴实例 *) (* 每个扫描周期调用一个轴实例 *) fb_XAxis(i_Enable : b_PowerOn, i_Command : n_XCmd, i_TargetPos : wn_XPos, i_Speed : wn_XSpeed, i_AccelTime : wn_XAccTime, i_DecelTime : wn_XDecTime, o_Busy b_XBusy, o_Done b_XDone, o_Error b_XError, o_ErrorID w_XErrID); fb_YAxis(i_Enable : b_PowerOn, i_Command : n_YCmd, i_TargetPos : wn_YPos, i_Speed : wn_YSpeed, i_AccelTime : wn_YAccTime, i_DecelTime : wn_YDecTime, o_Busy b_YBusy, o_Done b_YDone, o_Error b_YError, o_ErrorID w_YErrID);这段调用代码本身没有复杂逻辑但它体现了FB块复用的价值六个轴的内部状态机代码完全一样每个实例只通过接口上的标签和外部交互。n_XCmd、wn_XPos这些全局标签可以从触摸屏或上位机直接写入PLC侧的梯形图程序也可以通过M软元件赋值给这些标签。以后新增一个轴复制这一段调用改个实例名和标签名就行。这里有一个工程习惯值得养成六个轴的实例名、标签名严格按轴号命名X、Y、Z、U、V、W对应设备坐标系触摸屏画面上的轴名称和PLC标签保持一致。设备调试时程序里看到fb_XAxis就知道是X轴w_XErrID能直接在监视窗口里查故障省去翻图纸对照软元件表的功夫。4. 工程落地GX Works3里把ST轴FB块跑起来的完整步骤4.1 新建工程与ST程序语言设置GX Works3里新建工程时系列选MELSEC iQ-F机型选对应的FX5U CPU型号程序语言这一栏选结构化文本ST。如果主程序之前已经用梯形图写好了也不用重建工程直接在工程树里右键「程序」新建一个ST程序块把轴FB块的调用代码放进去。FB本体放在工程树的「功能块」下右键新建FB语言也选结构化文本。把3.1的接口声明和状态机代码粘贴到FB编辑器里后先单独编译FB确认没有语法错误再编译整个工程。FB块编译通过后会出现在功能块列表里主程序实例化时能直接选择。这里有一个容易踩的步骤如果先编译整个工程再回头改FBGX Works3有时候不会自动刷新FB的接口变化会报「FB调用与接口不一致」。我一般习惯先编译FB再编译全部程序两次编译都过了再写入PLC。4.2 FB块的编译错误排查与程序写入ST代码的编译错误大多集中在三处变量名拼写不一致、指令对操作数类型有要求、标签名重复定义。GX Works3的错误窗口会定位到具体行号比如「标签未定义」会直接指向代码里出错的那一行。还有一种常见错误是FB实例化后接口参数类型不匹配比如i_TargetPos是DINT标签用了INT编译报「数据类型不一致」。注意RUN状态下写入程序会让CPU瞬时停机伺服轴会丢掉使能设备在自动运行中容易出事故。批量调试时先切STOP再写入程序写完后切RUN这是基本操作顺序。写入前建议把PLC的RUN开关切到STOP程序写入完成后再切回RUN。第一次写入后务必做一次断电重启确认FB块的初始值逻辑正常。如果上电后轴自己动了一下多半是内部变量没有初始化或者输出没有初值回到3.1把VAR区变量的初始值检查一遍。4.3 轴参数与软元件分配参考表模板程序里轴参数分成两类一类是FB块接口上的输入参数可以在触摸屏上随时改另一类是底层驱动信号需要按实际接线分配到软元件。下面是参考分配表实际项目按设备的电气图纸调整。参数标签或软元件典型值说明指令号n_XCmd0~4触摸屏/上位机写入目标位置wn_XPos0单位脉冲需换算运行速度wn_XSpeed100000脉冲/秒加速时间wn_XAccTime100毫秒减速时间wn_XDecTime100毫秒原点复归请求p_HomeReq无FB内部转到底层DRVZ触发原点复归完成p_HomeDone无限位信号映射正转点动p_JogDir0无驱动层的方向软元件定位完成p_PosDone无底层指令完成标志分配软元件时有一个原则输入输出信号用全局软元件或全局标签FB内部状态变量用局部VAR不要混用。p_开头的底层信号在模板里是FB内部标签但它们最终要映射到物理输入点或中间继电器这部分映射放在底层驱动程序里单独维护不在FB块内部写死。4.4 在线监视与调试程序写入后打开在线监视把state变量拖进监视窗口。如果轴点了定位没反应看state卡在哪个值卡在30说明定位参数缓存阶段就卡住了优先查i_Command有没有正确写入卡在31说明指令已经发出但底层p_PosDone一直没返回这时候查伺服驱动器有没有报警、脉冲线是不是松了、方向的软元件映射对不对。调试原点复归时我最常干的一件事是把p_HomeReq和p_HomeDone同时拉进监视窗口。按下原点复归按钮p_HomeReq变TRUE如果几秒后p_HomeDone还是FALSE基本可以判断是限位开关信号没到用万用表量输入点之前先看监视窗口能省不少跑上跑下的功夫。state变量加一个D区镜像值让触摸屏把当前状态码显示出来设备交到现场之后操作工报「走不了」时直接看屏幕状态码比拿电脑连PLC快得多。5. 避坑FX5U轴FB块开发中四个典型的翻车现场5.1 定位指令被重复触发轴走一段停一段现象i_Command保持4不变定位指令发出后轴确实在走但走一段停一下停一会儿又继续走最终位置不对伺服偶尔还会报警。原因DRVZ和定位指令本质上是上升沿触发。梯形图里指令由条件接点触发一次扫描只执行一次在ST的状态机里如果直接用IF i_Command 4这种写法写在主循环里每个扫描周期条件都成立底层指令就被反复触发。轴走一段停一下实际是上一次定位被新的触发打断重新再走。解决FB块入口处做指令沿检测就是3.1里那段IF i_Command edgePrevCmd。只有指令号发生变化的那一个扫描周期才允许进入新的状态机分支进入后只发一次请求剩下的时间都停在等待完成状态。5.2 多实例共用M线圈六个轴一动全动现象第一个轴调试正常复制出第二个轴实例后点动第一个轴时第二个轴也跟着动两个轴的限位信号互相干扰原点复归完全乱套。原因FB块内部用了M100、M101这类全局软元件做中间信号。FB块代码只写一份实例化六份后六个实例操作的是同一个M线圈互相踩踏。我拆过不少项目这种问题最容易出现在从梯形图程序改成FB块的过程中——梯形图习惯用M软元件做中间继电器写ST时顺手就用了。解决FB块内部所有中间变量全部改成VAR局部变量FB块本体代码里不允许出现任何M开头或D开头的全局软元件。确实需要和外部交互的信号走接口参数和p_底层映射每个实例通过不同的接口标签区分。检查办法很简单编译前搜一遍FB源码M和D开头的基本可以判死刑。5.3 原点复归一启动就往反方向跑现象按下原点复归按钮轴直接向远离原点开关的方向加速直到撞上硬限位触发报警。原因DRVZ回原点的搜索方向和机械结构有关模板默认了一个搜索方向实际设备的原点开关装在丝杠另一侧时方向就是反的。另外如果轴在原点开关的同侧回原点的动作会先离开原点再反向搜索逻辑上是对的但现场看着就像「往反方向乱跑」。这个问题属于机械与程序配置不匹配不是代码错误。解决把原点搜索方向做成一个配置参数我在实际项目里把p_HomeMode扩展成两个值0表示正向搜索原点1表示反向搜索原点。首次调试时先手动点动把轴移动到原点开关附近再执行原点复归确认动作方向正确后把这个参数固定下来。改方向时只需要改一个配置点不要去动状态机代码。5.4 ST里复制过来的定位指令编译报错现象从手册或旧工程里复制一段定位指令到ST编辑器编译报错错误信息指向指令名称或操作数类型不兼容。原因三菱ST对定位指令的调用格式有限制部分指令不能在ST的CASE分支里直接写成指令形式有的需要先通过MOV把参数搬到指定的软元件区再通过专用的触发条件启动。不同固件版本对指令的支持程度也不一样直接复制很容易踩坑。解决统一走模板里分层的做法定位指令只出现在底层驱动块里上层状态机不直接接触指令。底层驱动块把p_PosCmd、p_VelCmd这些参数先缓存到对应轴专用的D区软元件再给触发信号一个上升沿。这样做除了避开编译限制还带来一个额外好处如果以后换了CPU型号只需要重写底层驱动块状态机部分可以整体迁移。6. 二次开发一台设备挂八个轴怎么把FB块的复用价值榨干6.1 用结构体数组管理轴参数当设备从六轴变成八轴每个轴还要配原点方向、软限位、点动速度、单独的超时时间接口参数会越来越多。与其每个轴写一行冗长的FB调用不如定义结构体数组把轴参数集中到一个数据块里管理。TYPE AXIS_PARAM : STRUCT Speed : DINT; (* 定位速度 *) JogSpeed : DINT; (* 点动速度 *) AccelTime : INT; (* 加速时间 *) DecelTime : INT; (* 减速时间 *) HomeDir : BOOL; (* 原点搜索方向 *) SoftLimitMin : DINT; (* 软限位下限 *) SoftLimitMax : DINT; (* 软限位上限 *) END_STRUCT; END_TYPE VAR AxisParam : ARRAY[0..7] OF AXIS_PARAM; AxisFB : ARRAY[0..7] OF Fb_Axis; END_VAR初始化时给每个数组元素赋不同的速度、软限位值调用时用FOR循环统一执行FB实例代码量比八个轴的梯形图少一个数量级。数据块里的参数可以直接映射触摸屏操作工在画面上改速度PLC程序下次扫描自动生效。这是把模板程序改成真正多轴设备程序的必经一步。6.2 加软限位与寸动速度分档模板程序里的软限位检查已经留了接口位置二次开发时把3.4里那个写死的100000000换成结构体数组里的SoftLimitMin和SoftLimitMax。每次进入定位状态前判断目标位置是否在限位区间内超出直接报错不给底层指令。在自动运行模式里软件限位比硬限位开关反应更快能少撞几次设备。寸动速度分档的做法是给i_Command复用更多指令号5表示低速点动正转6表示低速点动反转。在状态机入口判断指令号点动状态里按指令号选择低速或者高速路径速度值从结构体数组里取。分档点动主要用在手动装配对位场景低速档能帮操作工精确对准位置。6.3 触摸屏标签映射与完成信号锁存FB块的接口要做成全局标签触摸屏才能直接读写。三菱触摸屏软件里可以直接关联GX Works3的全局标签但现场有时候会遇到只有D区软元件可用的旧触摸屏这就需要把FB块的输入输出和D区软元件做一个映射层。我习惯在程序里单独写一小段ST专门做标签到D区的搬运每个轴固定一段D区地址轴号、位置、速度、状态码一目了然。o_Done完成信号还有一个细节它是一个扫描周期的脉冲触摸屏上如果用它去翻页或弹窗经常因为太短抓不到。在实际项目里我会在FB块外部把o_Done锁存到一个全局标签里由触摸屏的「确认」按钮复位。从那以后我每次加新轴都强制走一遍完整流程确认FB实例名命名规范、检查内部变量没有全局软元件、核对软限位和超时参数、锁存完成信号——这套模板才算是真正吃透了希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑