ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PLC与触摸屏低成本三轴示教器方案:从脉冲当量到脚本通信

PLC与触摸屏低成本三轴示教器方案:从脉冲当量到脚本通信 做机器人示教器这事儿说难不难说简单也不简单。最近我把一套“三菱FX3U 昆仑通态触摸屏”的方案跑通了实现了三轴联动的示教与自动运行。整个项目做完我最大的感受是用触摸屏脚本配合小型PLC做示教器非常适合预算有限、结构简单、控制逻辑不复杂的场景。这篇文章把我从硬件选型到PLC程序、触摸屏脚本、调试踩坑的全过程记录下来希望能给正在捣鼓类似项目的朋友省点时间。1. 项目整体设计与方案选型1.1 为什么用“PLC 触摸屏”而不是专用示教器发那科、安川这些专用机器人示教器体验确实好但价格摆在那。一套原装示教器加上控制柜预算经常顶得上好几台小型设备。很多工厂的自动化改造项目里设备只需要走几个固定轨迹重复精度要求不高用专用工业机器人属于杀鸡用牛刀。我这次做的项目是给一台小型三轴搬运设备做示教功能。设备行程不大X轴500mm、Y轴400mm、Z轴200mm驱动用的是三菱MR-JE伺服PLC是三菱FX3U-32MT触摸屏是昆仑通态TPC7062Ti。这套组合的核心思路是PLC负责实时运动控制和IO逻辑触摸屏负责示教、点表管理和自动运行控制。用PLC做运动控制很多人第一反应是“能行吗”。FX3U本身不带运动控制总线只能通过脉冲输出控制伺服。但FX3U有三个100kHz的高速脉冲输出口Y0、Y1、Y2正好可以带三个轴。对于点位运动、直线插补这种精度要求不高的场景脉冲方式完全够用。1.2 系统架构与工作流程整个系统分成三个层次操作层昆仑通态触摸屏负责坐标显示、手动点动、示教记录、点表编辑、自动运行监控。控制层三菱FX3U PLC负责接收触摸屏指令执行脉冲输出、回零、限位检测、报警处理。执行层三个伺服驱动器与电机按照PLC发出的脉冲数量和频率精确定位。示教器的工作流程是这样的先在触摸屏上切到“手动模式”用点动按钮把设备移动到目标位置点“记录”保存当前坐标重复操作记录多个点后把这些点保存到点表里然后切到“自动模式”PLC按点表顺序执行设备自动走一遍轨迹。如果中途需要修改某个示教点直接在触摸屏上编辑坐标数值就行不用重新走一遍。这里有个非常关键的认知要提前说清楚昆仑通态的脚本运行在触摸屏的CPU上不是运行在PLC里。触摸屏脚本读取的是PLC寄存器的数值通过Modbus协议或者三菱专用协议通信。所以触摸屏脚本适合做数据管理、界面逻辑、状态判断这类“慢速”工作不适合做实时的脉冲控制。实时的运动控制必须放在PLC里用梯形图或ST语言实现。这个边界如果搞混了项目大概率会翻车。1.3 方案优势和潜在问题这套方案的优势很明显成本低不增加额外的硬件模块。操作直观不需要工人学习专业示教器的复杂菜单。维护简单触摸屏和PLC都是成熟产品备件好找。问题也有主要集中在几个方面FX3U的脉冲输出频率限制在100kHz伺服电子齿轮比不能设太高否则速度跟不上。三轴联动不是真正的插补。FX3U的三路脉冲是独立输出的虽然可以同时启动但不会根据轨迹自动计算各轴速度。也就是说直线斜线运动时不是标准的线性插补轨迹而是一段一段的“折线”。对于大多数点位搬运场景这完全够用但如果要做圆弧或精密轨迹追踪就得考虑FX3U加配运动控制模块或者换成FX5U。触摸屏脚本的扫描周期不稳定不能用于高速逻辑判断只能做低优先级的数据处理。2. 关键参数计算与核心细节解析2.1 伺服电子齿轮比与脉冲当量计算这是做整套系统最先要敲定的事。脉冲当量决定了PLC发多少个脉冲对应伺服走多远直接关系到示教精度的标定。以我用的三菱MR-JE伺服为例编码器分辨率是131072脉冲/转17位。如果我设定丝杠导程为10mm那么电机每转一圈工作台移动10mm。这时候PLC每发一个脉冲伺服走多少距离取决于电子齿轮比CMX/CDV。脉冲当量计算公式伺服电机每转一圈需要的指令脉冲数 131072 × CDV / CMX工作台每移动1mm需要的脉冲数 伺服电机每转一圈需要的指令脉冲数 / 丝杠导程我实际设电子齿轮比CMX131072CDV10000这样每转一圈需要的指令脉冲数就是131072 × 10000 / 131072 10000个脉冲。丝杠导程10mm那么每个脉冲对应0.001mm。也就是说脉冲当量是1μmPLC发10000个脉冲工作台走10mm。在触摸屏上做示教时所有坐标值我都以毫米为单位显示PLC内部寄存器存的是实际脉冲数昆仑通态的脚本里做一次数值换算。这个换算逻辑不要放在PLC里因为触摸屏修改坐标后要立即显示对应关系放PLC还得来回读容易出逻辑混乱。2.2 PLC寄存器规划三菱FX3U的D寄存器是16位的但脉冲计数可能要超过32767所以坐标值我用32位存储每个轴占用两个D寄存器低字和高字。我规划的寄存器地址如下项目寄存器说明X轴当前位置D100低、D101高32位脉冲数Y轴当前位置D102低、D103高32位脉冲数Z轴当前位置D104低、D105高32位脉冲数当前示教点序号D1101~100点表总数D111实际示教点数运行状态字D1200停止1运行2暂停指令字D130触摸屏写入控制命令示教缓冲XD140、D141当前要存入的X坐标示教缓冲YD142、D143当前要存入的Y坐标示教缓冲ZD144、D145当前要存入的Z坐标点表存储在PLC的D200开始的区域每个点的X、Y、Z坐标占6个寄存器连续存100个点就是600个寄存器。FX3U的D寄存器有8000多个完全够用。这里不建议把点表放在触摸屏的组态里虽然昆仑通态的配方功能可以做但配方数据是存在触摸屏里的一旦触摸屏故障或者换屏所有数据都没了。把点表放PLC里断电用电池保持更换触摸屏不影响工艺数据。2.3 昆仑通态脚本的分类与使用边界昆仑通态的脚本分几类启动脚本、循环脚本、窗口打开脚本、按钮脚本、事件脚本。我这次项目中核心用到了循环脚本和按钮脚本。循环脚本在触摸屏运行时周期执行有点类似PLC的扫描程序。我把它用来做状态监控和点表显示刷新每500ms执行一次。这地方有个经验循环脚本的执行间隔不要设置太短否则触摸屏的CPU占用率会飙升界面操作卡顿。尤其是TPC7062Ti这种老型号CPU性能有限500ms是安全值。按钮脚本是点击按钮时触发我用来处理“记录示教点”“删除示教点”“插入点”“启动运行”这类一次性操作。按钮脚本的执行时机是用户点下按钮的瞬间不占用循环资源逻辑写起来也更清晰。事件脚本是在某个条件满足时触发一次。我在项目里用它来处理PLC返回的报警信息比如“伺服报警”“限位触发”“回零未完成”一旦条件成立就弹窗提示并停止运行。注意事件脚本的触发电平是“边沿”还是“状态”在组态的时候要区分清楚。我用的是状态触发条件成立就弹窗但设置了弹窗去重标记防止每次循环都弹。3. PLC梯形图实现与三轴联动控制逻辑3.1 回零与限位逻辑设备每次上电后必须回零否则位置坐标无法确定。三个轴的正负限位开关分别接在PLC的X0~X5上回零传感器接X6、X7、X10。回零逻辑我采用“快找慢找”两段式先以50kHz频率朝负方向快速移动碰到回零传感器后停止再以5kHz频率反向慢速离开传感器等传感器信号消失后锁存零点。这样回零精度比单纯碰传感器再停止要高得多重复精度大概能到±3个脉冲左右换算下来就是±3μm。梯形图的核心逻辑是步1启动回零先检测Z轴限位是否触发未触发则以脉冲输出指令DRVI正向移动Z轴向上为安全方向 步2Z轴到上限位后停止回零完成标志位M10置ON 步3依次对X轴、Y轴执行相同的“快找慢找”操作 步4三个轴全部回零后M20置ON通知触摸屏可以做示教了这里有一个很关键的细节回零顺序必须先Z后X/Y。因为Z轴在最低位时X/Y运动可能撞到下方的工件或者夹具先把Z抬起来才安全。这个顺序在项目文档里一定要写清楚我在调试时就因为顺序搞反差点把夹具顶坏。3.2 手动点动与示教记录手动模式时触摸屏上显示X/Y/Z三个轴的“正/负”点动按钮按下移动、松开停止。PLC这边用PLSY指令或者DRVI指令做定长运动。我的实现方式是触摸屏按下点动按钮时把对应轴的点动速度设定值写到D寄存器并把点动使能位M30置ON松开按钮时M30置OFF。PLC扫描到M30为ON后用DRVI按设定频率连续发脉冲直到收到停止信号或者限位信号。示教记录的逻辑相对独立。操作流程是操作员用点动按钮把设备移动到目标位置。在触摸屏上点击“记录当前点”按钮。触摸屏脚本读取当前X/Y/Z坐标D100~D105写入示教缓冲D140~D145。触摸屏脚本根据当前点序号D110把缓冲数据写入点表对应位置。点序号自动加1点表总数同步更新。这里有个容易忽略的问题坐标值是32位的触摸屏读写时要注意高低字节的排列。昆仑通态和FX3U通信时默认是低字在前、高字在后。我在脚本里读32位数据时用的是“读D100再读D101然后按低字高字合并”写回去的时候同样要拆开。很多新手在这里会栽跟头显示出来的坐标值忽大忽小其实就是高低字顺序搞错了。3.3 自动运行与三轴联动自动运行是整套系统最核心的部分。PLC收到触摸屏的“启动”命令后按点表顺序逐个执行。每个点的执行流程是读取当前点坐标。计算当前坐标与目标坐标在各轴上的差值。根据设备的运行速度要求计算出各轴脉冲输出频率和输出时间。三轴同时启动脉冲输出等待所有轴到位后再执行下一点。我采用的梯形图方式是先用ZRN指令回零确认原点然后循环从点表中取出坐标数据用DRVI指令对三个轴分别发脉冲。DRVI是相对定位指令指令格式是DRVI(S1)(S2)(D1)(D2)其中S1是输出脉冲数S2是脉冲频率D1是输出口地址。我用X轴做示例LD M50 // 自动运行启动标志 ANI M8029 // 上一次定位完成标志 DRVI D200 D300 Y0 Y004 // X轴移动到示教点脉冲数在D200频率在D300但三轴联动时有个问题DRVI指令是单轴指令三个轴同时发指令只能靠“同一扫描周期内连续执行三条DRVI”。FX3U的高速脉冲输出是硬件实现的三条DRVI同时激活后三路脉冲在硬件层面被同步发出。实际上由于PLC扫描周期的影响三路脉冲的启动时间会有零点几毫秒到几毫秒的差异。对于点位搬运这个时间差无关紧要但如果你要做轨迹要求很高的应用一定要认识到这个局限。为了控制三轴运动的协调性我设计了一个“主从联动”逻辑主轴X轴运动到目标位置需要的时间T X轴脉冲数 / X轴频率。Y轴和Z轴按照相同的T时间来计算各自频率公式是从轴频率 从轴脉冲数 / T。每条DRVI指令的脉冲频率都动态计算好写入D寄存器。这样处理的好处是虽然三条轴不是真正的直线插补但最终三个轴几乎同时到达目标点设备在视觉上看起来是“联动”的不像逐轴运动那样一顿一顿。实际运行效果对于简单的搬运码垛视觉上完全没有问题。核心梯形图的顺序是从点表中读取第N点的X/Y/Z坐标到D200/D202/D204。用减法指令SUB计算出与当前坐标的差值结果存到D210/D212/D214。用除法指令DIV计算各轴频率分别写入D300/D302/D304。连续执行三条DRVI指令启动三轴。用M8029定位完成标志或者三轴各自的完成位做“全部到位”判断。全部到位后N加1继续下一个点。所有点执行完毕后自动运行完成标志置ON通知触摸屏。3.4 速度倍率与加减速控制示教器上必须要有速度倍率功能。我做了两种手动点动倍率和自动运行倍率。触摸屏上放一个滑动滑块范围10%~100%滑块值写入D160。PLC在计算脉冲频率时统一乘以倍率系数。加减速控制方面我使用的是三菱DRVI指令自带的加减速时间设定。通过D8340X轴、D8341Y轴、D8342Z轴设定加减速时间。我实际设定加减速时间都是100ms。这个值不能太大否则设备会显得很“肉”也不能太小否则机械冲击大、特别是Z轴容易抖动。三轴负载不太重的话100~150ms是比较舒服的范围。4. 昆仑通态组态与脚本实现细节4.1 画面布局设计我做了4个画面主画面、手动示教画面、点表管理画面、参数设置画面。主画面显示设备当前工作模式、运行状态、三轴坐标、报警信息以及模式切换按钮。手动示教画面是核心操作界面包含三轴的点动按钮矩阵、当前位置显示、示教点序号选择、记录按钮、坐标微调输入框。点表管理画面用表格形式显示所有示教点的坐标支持点击选择、修改、删除、插入。参数设置画面配置运行速度、回零速度、加减速时间等参数。这里要注意昆仑通态的表格控件操作起来不算顺手数据量大时刷新会有延迟。如果点表超过50个点不建议用表格控件做全量刷新而是按“当前选中行”局部刷新或者只显示当前编辑点的坐标。4.2 脚本通信机制与寄存器读写昆仑通态与FX3U通信使用的是内置的“三菱FX系列编程口协议”。通信参数默认是9600波特率、8位数据、偶校验、1位停止位。触摸屏组态时选择好PLC型号和通信协议即可。脚本里读PLC数据用的是函数!ReadFromPLC(站号, 寄存器类型, 起始地址, 数据个数, 数据缓冲区名称)写PLC数据用的是!WriteToPLC(站号, 寄存器类型, 起始地址, 数据个数, 数据缓冲区名称)注意寄存器类型要对应D寄存器用“D”M寄存器用“M”X输入用“X”。地址从0开始编号所以在脚本里读写D100时地址写“99”。我写了一个读取三轴坐标并刷新显示的循环脚本每500ms执行一次。脚本里先定义局部变量然后读PLC数据到变量中再把变量值赋给界面上的标签控件。这里分享一个经验昆仑通态的脚本变量分全局变量和局部变量。在循环脚本里尽量用局部变量用完就释放避免全局变量堆积导致内存碎片。TPC7062Ti的内存不大脚本写多了、变量攒多了长时间运行会越跑越慢甚至黑屏重启。4.3 手动点动与示教记录脚本手动点动按钮的逻辑我拆成了按下和弹起两个状态。昆仑通态的按钮支持“按下脚本”和“弹起脚本”正好对应点动的启动和停止。按下脚本的逻辑是!WriteToPLC(0, M, 30, 1, 1) // 写M30为ON启动X轴正向点动 !WriteToPLC(0, D, 159, 1, 0) // 点动速度设定为当前手动速度值弹起脚本就是把M30写成OFF。这里有个操作小技巧点动速度不要和自动运行速度混用同一个寄存器。手动点动速度一般设低一些20mm/s左右方便精确对位自动运行速度设高一些根据工艺需求可到200mm/s以上。如果只用一个速度值做手动示教时经常会出现“点动太快冲过头”的问题最后示教出来的点全偏了。示教记录按钮的脚本逻辑是从PLC读取当前X/Y/Z坐标到缓冲变量。读取当前点序号D110。根据点序号计算点表起始地址起始地址 199 (点序号-1) * 6。把三个坐标值分别写入点表对应的6个连续寄存器。点序号加1写回PLC。刷新点表总数。脚本里坐标写PLC时要拆成低16位和高16位。三菱FX3U的32位寄存器中低字在前。脚本里要手工做位运算拆分// 假设coord是32位整数变量value_low是低16位value_high是高16位 value_low coord % 65536 value_high (coord - value_low) / 65536写入时先写低字再写高字读的时候先读低字再读高字再组合。这个看似啰嗦的步骤是保证坐标数据不出错的关键。我见过有的工程师图省事用16位读写结果坐标值一到±32767就跳变现象就是设备走到一半自己开始乱跑。4.4 自动运行控制脚本自动运行按钮的脚本不负责运动执行只做两件事写指令字、监控状态。点击“启动”按钮时!WriteToPLC(0, D, 130, 1, 1) // 指令字1请求启动点击“暂停”按钮!WriteToPLC(0, D, 130, 1, 2) // 指令字2请求暂停点击“停止”按钮!WriteToPLC(0, D, 130, 1, 3) // 指令字3请求停止PLC梯形图对D130做解码分别触发M50启动、M51暂停、M52停止三个标志。这样脚本和PLC的逻辑彻底解耦脚本只管发命令、PLC只管执行命令不会出现两边逻辑绞在一起的情况。循环脚本里我监控D120运行状态字。等于1时界面显示“运行中”状态灯变绿等于2时显示“已暂停”等于0时显示“停止”。同时把当前正在执行的示教点序号和总点数显示出来方便操作员了解进度。4.5 速度倍率滑块与数据校验速度倍率滑块用的是昆仑通态“滑动输入器”控件绑定D160寄存器。范围设定为10~100。PLC侧读取D160的值作为倍率百分比在计算脉冲频率时参与运算。关于滑块的绑定方式我建议不要直接绑定PLC寄存器而是先绑定到触摸屏的全局变量然后在循环脚本里把全局变量值写入PLC。原因很实在滑动输入器拖动过程中的中间值变化非常频繁直接绑PLC会导致通信总线拥堵影响PLC实时响应。经过触摸屏变量中转后可以加上“防抖”逻辑比如数值变化超过2%才写一次PLC这样通信负载低很多。4.6 配方与点表保存方案点表数据存在PLC的D200~D799这些是电池保持区域。三菱FX3U的D寄存器默认大部分是锁存的断电后数据不会丢失。但要注意一点如果你在PLC程序里用了“初始化脉冲”M8002千万不要把它用来清零D200~D799。M8002只在PLC首次上电时ON一个扫描周期如果程序里写了MOV 0 TO D200那以后每次断电重启点表就全丢了。我的做法是点表清零操作只在触摸屏上通过“清除所有示教点”按钮触发PLC程序里根本不做任何点表数据的初始化。这样即使PLC程序被重新下载只要不清除保持区点表数据还在。5. 调试过程与常见问题5.1 触摸屏与PLC通信异常我调试时第一次碰到的问题是触摸屏上显示“通信超时”所有数据都读不到。排查思路先看接线。FX3U的编程口是圆头8针昆仑通态TPC7062Ti的COM口是9针串口。接线要按“2对2、3对3、5对5”的标准直连方式。但很多二手线缆是按照“2对3、3对2”的交叉方式做的这就导致通信不上。另外要注意波特率设置。FX3U编程口默认波特率是9600但有些PLC的程序被改过通信参数。我在调试时就用三菱GX Works2连接PLC把PLC通信格式改成“96008E1”触摸屏端也保持一致问题解决。5.2 坐标显示跳动坐标显示出来之后数字一直在跳轻轻晃动都有几次脉冲的波动。这个现象是正常的。伺服电机在静止状态下由于机械振动、负载扰动编码器会检测到微小的位置波动反馈到PLC的当前位置计数器里。处理办法有两种在PLC侧做滤波位置值在小范围内波动时不更新显示。在触摸屏侧做显示滤波监视值的变化量小于设定阈值就保持原显示。我选了第二种在昆仑通态的循环脚本里加了个比较逻辑非常有效if abs(当前位置 - 上次显示值) 5 then 显示值 上次显示值 else 显示值 当前位置 上次显示值 当前位置 endif这个阈值5就是0.005mm肉眼完全感受不到但画面稳定多了。5.3 三轴联动时某轴“偷跑”自动运行过程中发现Y轴偶尔会提前启动或者X轴还没到位Z轴就开始动作了。这个问题的根因在PLC程序的扫描周期和DRVI指令的启动时刻不完全同步。排查之后发现问题出在我用了“同一扫描周期内执行三条DRVI指令”但在某些情况下某条DRVI的启动条件没有被同时满足导致它推迟到下个扫描周期才执行。例如某个轴的当前位置计数器有轻微的“回差”导致差值计算不为零但绝对值小于脉冲输出许可值。解决办法是在三轴启动前增加一个“就绪判断”分别计算三个轴的目标脉冲数与当前位置差值的绝对值如果三个差值都大于设定的最小脉冲数比如10个脉冲即0.01mm才允许启动。这样从逻辑上保证了三条DRVI指令在同一周期内可以被同时触发。5.4 点表数据丢失用户反馈有时候点表数据保存后断电重启就没了。我查了一下不是PLC电池的问题而是操作员在使用触摸屏时误触了“系统设置”里的“恢复出厂设置”触摸屏恢复默认后虽然配方数据不在了但PLC里的点表还在。后来我在触摸屏脚本里加了一个“数据备份”功能点表修改后自动上传一份到触摸屏的存储目录里。触碰屏内部存储的数据在掉电后不会丢失这块可以做一个备份机制。PLC里的点表是“主存储”触摸屏目录里的CSV文件是“备份存储”。一旦检测到PLC点表数据异常比如总数不对就提示操作员从备份恢复。这个功能做起来很简单但对用户来说却是救命级别的保护。5.5 Z轴抖动Z轴垂直安装断电或者运动停止后有下垂现象运动过程中有明显抖动。这其实是机械问题伺服增益没调好的典型表现。MR-JE伺服可以通过面板或者软件调整位置环增益和速度环增益。我调整后试下来的经验是Z轴因为有重力的影响增益要比水平轴低一些否则容易振荡。位置环增益降到原来的70%左右速度环积分时间常数拉大一点抖动基本消除。另外机械上Z轴有配重或者氮气平衡的话伺服能轻松很多。这个项目里没有平衡装置调试时就得靠伺服参数来补偿。6. 一些值得说的体会这个项目从设计到调试完成大概花了两周时间。和专门的机器人示教器相比这套方案在功能上有各种局限但在“点位示教、顺序搬运、简单轨迹”这类场景中性价比确实很高。最后分享一个心得做这种项目别急着写程序先把“数据流”理清楚。触摸屏上按一个按钮数据经过什么路径、最终落在哪个寄存器、PLC怎么响应这一条链路在动工前画出来后面能省一大半时间。我就是因为前期没画清楚中途改了两次寄存器地址差点把点表数据搞乱。还有一点示教功能做完后一定要让操作工实际用几天再交付。他们用起来觉得顺手的才是真正好用的示教器。我就根据他们反馈增加了“点动短行程”模式按下按钮移动0.1mm松开就停这样精确微调特别方便。这个需求如果不上现场靠坐在办公室里是想不出来的。
返回列表