先区分两类电磁阀,程序写法完全不同,现场 90% 故障来自双线圈逻辑错误。
硬件前提回顾
单线圈电磁阀(弹簧复位):DO=1 夹紧;DO=0 松开。断电自动松爪。只需 1 路 DO。
双线圈电磁阀
DO_Grip:夹紧脉冲
DO_Open:松开脉冲
⚠️ 禁止两路同时得电!会烧毁线圈
脉冲触发即可,不需要长期通电;阀内部机械自锁保持状态。
推荐标配磁性感应开关(DI):diClosed 夹紧到位信号diOpened 松开到位信号
信号命名规范(示教器提前创建 Signal)
plaintext
DO: doGripClose 夹紧输出 DO: doGripOpen 松开输出 DI: diGripClosed 夹紧到位 DI: diGripOpened 松开到位
一、方案 1:双线圈保持电磁阀
封装子程序,全局任意调用,自带超时报警,防止卡爪、漏气掉料。
1. 夹爪松开子程序
rapid
PROC GripperOpen() !先复位夹紧线圈,杜绝双线圈同时导通 ResetDO doGripClose; !输出松开脉冲 SetDO doGripOpen, 1; WaitTime 0.2; !脉冲宽度0.2s,足够换向 ResetDO doGripOpen; !等待机械松开到位,超时1.5s报错停机 WaitDI diGripOpened, 1 \Timeout:=1.5; !超时失败会触发系统错误,机器人停止 ENDPROC
2. 夹爪夹紧子程序
rapid
PROC GripperClose() ResetDO doGripOpen; SetDO doGripClose, 1; WaitTime 0.2; ResetDO doGripClose; WaitDI diGripClosed, 1 \Timeout:=1.5; ENDPROC
3. 典型抓取主流程示例
rapid
PROC PickWorkpiece() MoveJ pSafeAbove, v600, z50, tool0; MoveL Offs(pPickPos,0,0,40), v300, fine, tool0; MoveL pPickPos, v120, fine, tool0; GripperClose(); !执行夹紧 MoveL Offs(pPickPos,0,0,50), v300, z30, tool0; !搬运 ... MoveJ pSafePlace, v600, z50, tool0; MoveL Offs(pPlacePos,0,0,40), v300, fine, tool0; MoveL pPlacePos, v120, fine, tool0; GripperOpen(); !执行松爪 MoveL Offs(pPlacePos,0,0,50), v300, z30, tool0; ENDPROC
二、方案 2:单线圈弹簧复位电磁阀
仅 1 路 DO:doGrip
rapid
PROC GripperClose() SetDO doGrip,1; WaitDI diGripClosed,1 \Timeout:=1.5; ENDPROC PROC GripperOpen() ResetDO doGrip; WaitDI diGripOpened,1 \Timeout:=1.5; ENDPROC
缺点:机器人急停、断电,DO 失电 → 夹爪立刻松开,工件掉落。上下料高危场景不建议。
三、进阶优化:增加错误处理
原生WaitDI \Timeout报错直接停机;如果你想要捕捉故障、自定义报警、回安全点,使用WaitDIReady手动判断:
rapid
PROC GripperClose() VAR bool bWaitOk; ResetDO doGripOpen; SetDO doGripClose,1; WaitTime 0.2; ResetDO doGripClose; !等待信号,1.5s计时 bWaitOk := WaitDIReady(diGripClosed,1,1.5); IF NOT bWaitOk THEN TPWrite "夹爪夹紧失败!未检测到夹紧信号"; MoveJ pSafeHome, v800, fine, tool0; !退回安全位置 Stop; !程序暂停 ENDIF ENDPROC
四、关键编程禁忌(现场高频踩坑)
❌ 双线圈程序不要持续置位 DO
plaintext
SetDO doGripClose,1; 永久保持输出 → 线圈长期发热烧毁 ✅ 正确:脉冲输出0.2s立刻复位
❌ 只用 WaitTime 延时,不使用 DI 到位信号气缸漏气、压力不足会导致抓空、掉料;必须依靠磁性开关确认位置
❌ 程序逻辑同时打开两路输出
SetDO doGripClose,1; SetDO doGripOpen,1;直接烧毁电磁阀!代码里先 Reset 另一路,做互锁。❌ 信号名称使用中文,部分旧系统存在兼容性报错。
五、调试步骤
示教器 → I/O 信号手动强制 DO,测试夹爪开合,确认 DI 磁性开关正常反馈;
单步运行子程序,观察 DO 输出时序;
缩短 / 延长脉冲时间(一般 0.15~0.3s),根据气缸响应速度微调;
模拟漏气、卡爪,测试超时报警功能是否生效。
六、拓展需求可选增加
抓取前预判断夹爪状态:
IF DInput(diGripClosed) THEN ...增加抓取工件检测(压力传感器 / 光电);
自动模式启动前初始化夹爪至打开位置。


