前几天与埃斯顿机器人建立通讯,通讯控制机器人的启动、停止、复位,但发现埃斯顿机器人的通讯控制启动的逻辑与其他机器启动的方式不同,花了一点时间琢磨,分享一下本人写的启动程序。
下图是埃斯顿机器人远程启动逻辑,首先需要把要把读写标志寄存器40100写0,然后再给40100写0x11(转换成十进制为17),然后再往启动的寄存器内写入0x4,而且不能同时写,得先读取40019反馈的系统状态,确定机器人开启了远程写入,再往40052内写入0x4,咋一看逻辑,一脸懵,竟然还有这种操作。
具体操作流程及寄存器定义如下:
因为机器人是触摸屏触发,触摸屏给到一个启动信号,PLC使用置位,保持启动信号:
vb_1机器人启动 S= hb_1机器人启动;
再做一个2秒循环定时器,用于做判断,如果在前一秒内启动了机器人,流程步直接进入下一环节,如果在后一秒没有反馈启动信号,再接回到前面启动流程,重新出发。
FB_1循环定时器(IN:=( NOT FB_1循环定时器.Q), PT:= T#2S, Q=> , ET=> );
具体的启动流程程序如下:
CASE vd_1启动步序 OF //注:地址采用的是10进制地址,不要用16进制,通讯地址得在基础地址上减一,要不然读出来的数据相差一个“字”
00:
IF (vb_1机器人启动 AND (%IW304 = 17)) OR (vb_1机器人启动 AND (%IW304 = 0)) THEN //17等于16进制的0x11
%QW142 := 0; //如果按下启动,%IW304等于17时,直接赋值为0
%QW143 := 0;
vd_1启动步序 := 10;
END_IF
10:
IF vb_1机器人启动 AND (%IW304 = 0) THEN // %IW302 是状态读取,启动,停止,复位等状态 启动为4,暂停为8,复位为16
%QW142 := 17; // %IW304 是写入权限读取
END_IF
IF (%IW302 = 2049) AND (FB_1循环定时器.ET >T#1S) THEN //循环定时器,给一秒,停一秒,持续写,好像写不进去
%QW143 := 4; // %QW142 机器人读写权限写
vd_1启动步序 := 20;
ELSIF (%IW302 <> 2049) AND (FB_1循环定时器.ET<T#1S) THEN
vd_1启动步序 := 00;
END_IF
20:
IF (%IX604.2 =TRUE) AND (%IW304 = 17) THEN // %QW143 机器人状态写入 (%IX604.2 =TRUE)是反馈的启动状态
vb_1机器人启动 := FALSE;
vd_1启动步序 := 00;
END_IF
END_CASE
程序截图如下(启动停止复位动作都是一样的,可以考虑用函数,直接调用):
另外,埃斯顿机器人通讯地址也有点坑,说明书给的寄存器地址是40019,但你读40019数据,结果是错的,应该读的地址是(40019-1=40018),不知道 是不是寄存器地址没有从40000开始往后排的原因,所以做通讯,一定要先读一个寄存器或写一个寄存器试试,要不然都不知道读的地址是不是正确的。