这个月刚做完一套FX5u控制的四轴伺服+工业机器人集成项目,现场调试终于跑通了。分享点干货,真实项目里的结构化编程套路和那些手册里不会写的实战技巧
三菱PLC FX5u结构化4轴伺服1个机器人程序 宝贝包括FX5u程序,维纶通触摸屏程序,IO表,元件BOM,eplan和PDF电气图,整机机构图,真实项目程序

先看整体架构:FX5u-32MT做主站,四个MR-JE-C伺服带1kg级水平关节机械手,HMI用维纶通MT8071iE。重点在于多轴同步和机器人路径规划的逻辑配合。

轴参数结构化封装是个好东西,把每个轴的配置打包成FB块。比如这个回原点的处理:
FUNCTION_BLOCK AxisHome_FB
VAR_INPUT
bExecute: BOOL;
END_VAR
VAR_OUTPUT
bDone: BOOL;
bBusy: BOOL;
END_VAR
VAR
stAxis: ST_AxisControl;
iStep: INT := 0;
END_VAR
CASE iStep OF
0:
IF bExecute THEN
MC_Home(stAxis); //调用运动控制指令
iStep := 10;
END_IF
10:
IF stAxis.dStatus THEN
bDone := TRUE;
iStep := 0;
END_IF
END_CASE
这种封装方式比梯形图清爽多了,特别是在需要重复调用四轴的时候,直接实例化四个FB块互不干扰。调试时发现个坑——伺服参数里的电子齿轮比必须和机械减速比匹配,否则会出现位置累计误差。建议在伺服初始化时强制写入参数:
//MR-JE-C参数写入
sCmd := "PARAM W 2A01H " + REAL_TO_STRING(rGearRatio);
MC_SendCommand(axisNo, sCmd, 1000);
触摸屏交互方面,维纶通的元件地址直接绑定到PLC的全局标签。比如速度调节的滑动条元件,地址填直接填%D100,在PLC里用结构化变量映射:
VAR_GLOBAL
g_stAxis1: AxisData := (rSpeed:=D100, rPos:=D110);
END_VAR
机器人轨迹规划部分,采用空间直线插补算法。用位置结构体数组存储路径点:
TYPE POSITION_3D :
STRUCT
x: LREAL;
y: LREAL;
z: LREAL;
END_STRUCT
END_TYPE
VAR
arrPath: ARRAY[1..50] OF POSITION_3D;
iPathIndex: INT;
END_VAR
实际测试中发现,必须加入速度前瞻控制。在运动到当前点的同时,提前计算下三个点的速度变化率,避免急停抖动。算法核心部分:
IF iCurrentPoint > 3 THEN
rDecelDistance := (arrPath[iCurrentPoint].rVel^2 - arrPath[iCurrentPoint+1].rVel^2)/(2*rMaxAccel);
IF rRemainDistance < rDecelDistance THEN
arrPath[iCurrentPoint].rVel := SQRT(arrPath[iCurrentPoint+1].rVel^2 + 2*rMaxAccel*rRemainDistance);
END_IF
END_IF
电气图设计有个关键点:伺服动力线必须与编码器线分槽走线,实测当两者平行布置时,干扰会导致位置反馈跳变。Eplan图纸里专门用不同颜色的线槽区分,这个在二维图纸上看不出来,实际接线时吃过亏。

整套方案最大的挑战是四轴与机械手的协同动作。通过事件触发的方式实现动作衔接:
//当四轴到达抓取位置时触发机械手动作
IF stAxis1.bInPosition AND NOT bGripperActivated THEN
Robot_SendCmd("#PICK");
bGripperActivated := TRUE;
END_IF
项目包里带的IO表其实暗藏玄机——输入点分配时留了20%的余量,方便后期增加光电传感器。比如X20-X27原本是预留位,调试时发现需要增加物料检测,直接启用X24而不必改硬件配置。

这套架构经过三个月连续运行测试,平均单次循环时间从2.3秒优化到1.8秒。核心经验就两条:结构化的数据管理比逻辑更重要;所有运动控制必须留足安全余量。下次准备尝试把视觉引导整合进去,到时候再分享新坑...


DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)