安川机器人TCPIP通信程序 YASKAWA安川机器人以太网TCPIP通讯,MotoPlus源代码
安川机器人TCPIP通信程序 YASKAWA安川机器人以太网TCPIP通讯,MotoPlus源代码,socket通信文件,.OUT文件。 安川机器人与相机通信,可用于各种相机触发相机照,获取相机坐标数据,字符串发送与接收。
搞工业自动化的兄弟肯定都遇到过这种情况——要让机器人跟相机搞对象(通信),结果两边协议对不上。今天就拿安川机器人举个栗子,说说怎么用MotoPlus玩转TCP/IP通信,让机械臂和视觉系统谈上恋爱。
先说个实战场景:机器人要给相机发触发信号,等相机拍完照再把坐标数据传回来。这活儿听着简单,实操起来没几个不踩坑的。先看核心代码长啥样:
// Socket初始化
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8500);
inet_pton(AF_INET, "192.168.1.100", &server_addr.sin_addr);
// 连接相机
if(connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
mpLog("相机闹脾气了,连不上!");
return -1;
}
这段代码有几个魔鬼细节要注意:端口号必须用htons转换字节序,IP地址转换不能用老的inet_addr(在MotoPlus环境里会崩)。连接超时记得配成5秒以内,否则机器人会卡成木头人。

触发拍照的指令别整复杂了,相机就吃固定字符串这套:
char trigger_cmd[] = "TRIGGER!\n";
int ret = send(sock, trigger_cmd, strlen(trigger_cmd), 0);
if(ret <= 0){
mpLog("快门按了个寂寞");
}
这里有个坑:字符串必须带\n结尾,很多国产相机不认没换行符的命令。发完指令别急着收数据,等个200ms再收,不然大概率收空包。
安川机器人TCPIP通信程序 YASKAWA安川机器人以太网TCPIP通讯,MotoPlus源代码,socket通信文件,.OUT文件。 安川机器人与相机通信,可用于各种相机触发相机照,获取相机坐标数据,字符串发送与接收。
重点来了——坐标数据解析。相机一般吐回来类似"X123.45,Y67.89,Z12.34"的字符串,得在机器人端拆包:
char buffer[128];
recv(sock, buffer, sizeof(buffer), 0);
float x=0,y=0,z=0;
if(sscanf(buffer, "X%f,Y%f,Z%f", &x, &y, &z) == 3){
mpLog("坐标到手:X%.2f Y%.2f", x, y);
// 直接赋值给机器人坐标系
set_robot_position(x, y, z);
}
else{
mpLog("相机喝高了?数据格式不对:%s", buffer);
}
sscanf这函数在MotoPlus里是个祖宗,格式化字符串必须严格对齐,多一个空格都不认。建议先用mpLog把原始数据打出来验证格式,别直接上解析。

最后说下程序部署的骚操作:编译好的.out文件别用U盘倒腾,直接走FTP传到机器人控制器里。记得在系统参数里把KCL选项打开,不然socket功能会被锁。每次改完代码最好重启下控制器,安川的运行时环境有时候会抽风。
实测这套方案在500ms内能完成触发-拍照-数据回传的全流程,精度能到±0.1mm。遇到通信中断的情况建议做个心跳包机制,每10秒发个"ALIVE"字符串保活。要是相机突然掉线,机器人自动切到示教模式,别硬刚——安全永远是第一位。
下次有机会再说说怎么用同一个socket同时接多个相机,那才是真·修罗场模式。

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


所有评论(0)