PLC论坛-全力打造可编程控制器专业技术论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

微信扫码登录

查看: 12744|回复: 0

ABB机器人socket做server示例程序

[复制链接]
发表于 2024-8-18 09:53:17 | 显示全部楼层 |阅读模式
更多内容请点击上方 ABB机器人实战技巧 关注也可点击公众号下方 往期经典 浏览更多内容转载请先后台留言,大家一起支持原创,推动机器人使用和发展本公众号对各类ABB机器人应用,仿真,毕业设计提供技术支持,详细后台留言本公众号诚挚希望与各机器人培训机构,机器人使用单元合作,提供技术支持,详细后台留言


1.ABB机器人进行socket通讯,支持机器人做socket的client连接其他设备,也支持机器人作为socket的server,被其他设备进行连接。

2.作为server时,需要考虑其他客户端连接机器人时断开后的机器人异常处理。同时,机器人作为socket 的server,通常编写测试完成后,对应的task会被设为semi static(即开机自启动,且前台无法停止程序,除非程序出错或者再次进入controller的task设定,将task类型设为normal)

3.此处推荐Ros编写的机器人作为socket server的代码,以供参考。相关代码可以从https://github.com/ros-industrial/abb_driver/tree/kinetic-devel/rapid 下载

主程序如下:
MODULE ROS_stateServer   !程序运行模式设定为循环  LOCAL CONST num server_port := 11002;  LOCAL CONST num update_rate := 0.10;  ! broadcast rate (sec)
  LOCAL VAR socketdev server_socket;  LOCAL VAR socketdev client_socket;
PROC main()    TPWrite "StateServer: Waiting for connection.";    ROS_init_socket server_socket, server_port;    ROS_wait_for_client server_socket, client_socket;
    WHILE (TRUE) DO        send_joints;        send_status;        WaitTime update_rate;    ENDWHILE
ERROR (ERR_SOCK_TIMEOUT, ERR_SOCK_CLOSED)    IF (ERRNO=ERR_SOCK_TIMEOUT) OR (ERRNO=ERR_SOCK_CLOSED) THEN        SkipWarn;  ! TBD: include this error data in the message logged below?        ErrWrite \W, "ROS StateServer disconnect", "Connection lost.  Waiting for new connection.";        ExitCycle;  ! restart program         !程序运行模式设定为循环,这样ExitCycle可以重新从main第一行开始运行    ELSE        TRYNEXT;    ENDIFUNDOENDPROCENDMODULE

MODULEROS_socket(SYSMODULE)PROC ROS_init_socket(VAR socketdev server_socket, num port)IF(SocketGetStatus(server_socket) = SOCKET_CLOSED) SocketCreate server_socket;IF(SocketGetStatus(server_socket) = SOCKET_CREATED) SocketBind server_socket, GetSysInfo(\LanIp), port;IF(SocketGetStatus(server_socket) = SOCKET_BOUND) SocketListen server_socket;
ERRORRAISE;! raise errors to calling codeENDPROC
PROCROS_wait_for_client(VAR socketdev server_socket, VAR socketdev client_socket, \num wait_time)VARstring client_ip;VARnum time_val := WAIT_MAX;  ! default to wait-forever
IFPresent(wait_time) time_val := wait_time;
IF(SocketGetStatus(client_socket) <> SOCKET_CLOSED) SocketClose client_socket;WaitUntil(SocketGetStatus(client_socket) = SOCKET_CLOSED);
SocketAcceptserver_socket, client_socket, \ClientAddress:=client_ip, \Time:=time_val;TPWrite"Client at "+client_ip+" connected.";
ERRORRAISE;! raise errors to calling code    ! 所有的错误处理使用Raise,即调用上层统一进行错误处理ENDPROCENDMODULE
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

QQ|小黑屋|手机版|Archiver|PLC技术网-PLC论坛 ( 粤ICP备17165530号 )|网站地图

GMT+8, 2024-9-21 08:47 , Processed in 0.048060 second(s), 25 queries .

快速回复 返回顶部 返回列表