CS机器人运行中socket通讯断开自动重连

晓畅 30 2025-06-09 11:42:42 编辑

1.简介

本篇文章介绍CS机器人作客户端在使用脚本与服务器做socket通讯时怎么样循环判断连接,通讯断开后怎么样自动连接,以下内容要求机器人应用2.12及以上

2.操作流程

  1. 建立 TCP/IP 网络通信

1.当我们单纯使用 socket_open()建立 TCP/IP 网络通信指令时,如果服务器还未打开时,机器人端户端未连接到服务器,程序依然往下运行,运行到发送/接收时机器人就会报错如图1-1所示,这样机器人就必须初始化重新运行。

图1-1

2.为了避免图1-1的情况发生我们可以利用socket_open()建立 TCP/IP 网络通信时的返回值做条件判断循环连接直到连接成功后程序才继续往下运行。如图1-2所示如果服务器未打开时机器人会一直与服务器建立连接并打印“连接失败”到EliRobot 的日志栏中。

图1-2

3 当服务器打开时机器人客户端连接成功后会打印到“连接成功“EliRobot 的日志栏中如图1-3所示,可以用下面代码1-1配合图1-4的图形化编程直接调用df脚本实现此操作。

图1-3

 

图1-4

 

代码1-1

2.向服务器发送数据

1.我们单纯的使用发送指令例如:socket_send_string(str, socket_name="socket_0")未判断发送是否成功时,如果当机器人客户端当时已经与服务器断开连接了或发送失败后程序依然往下继续运行,如图2-1所示。

图2-1

2.为了避免图2-1的情况发生,我们可以利用发送指令的返回时作为判断是否发送成功,发送失败时一直发送直到发送成功为止,发送失败的情况一般都是机器人客户端与服务器断开连接时出现的,所以我们可以在发送前和发送失败后通过“socket_is_connected()”判断与服务器连接的状态如果断开重新连接再次发送,如图2-2所示,可以用下面代码2-1配合图2-3的图形化编程直接调用df脚本实现此操作。

图2-2

 

 

代码2-1

3.从服务器接收数据

1.当我们单纯的使用接收指令例如“socket_read_string(timeout=2)”接收服务器的数据时:

a:如果当机器人与服务器未连接时就接收数据就会如图3-1所示报错,此时程序已经停止需要重新初始化程序。

b:如果我们机器人客户端未接收到数据程序依然会往下继续运行,这样就会影响我们的程序流程,如图3-2所示(未接收到数据,程序依然往下运行,当运行到索引字符串转换时没有数据程序就会报错,这时程序已经停止需要重新初始化程序)。

图3-1

 

图3-2

2.为了避免以上a.b两种情况发生,我们可以在接收数据之前通过“socket_is_connected()”判断与服务器连接的状态如果断开重新连接,并通过再次接收接收指令例如“socket_read_string(timeout=2)”的返回值判断是否接收到数据,返回值为0时,再次接收数据,如图3-3所示,以用下面代码3-1配合图3-3的图形化编程直接调用df脚本实现此操作。

图3-2

 

图3-3

代码3-1

 

3.常见问题解答

  1. 机器人应用版本必须是2.12及以上
  2. 以上代码是以发送字符串和读取字符串为例,如果想发送/读取其他数据类型,只需要更换代码中的socket_send_string/socket_read_string即可,具体指令参考CS机器人脚本手册下载中心_机器人技术-艾利特机器人

脚本文件:socket.script

上一篇: CS机器人急停无法消除问题快速排查方案
下一篇: CS机器人做modbus从站,配置外部启动
相关文章