1. 简介
CS的29999端口控制机器人上下电、释放抱闸、查询基本信息等功能。本文借助代码介绍对应脚本的使用方法。
2. 相关指令
2.1 上电
robotControl -on功能:
该指令用于控制机器人进行上电操作。
示例:
TIMEOUT = 5.0
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(TIMEOUT)
cmd = "robotControl -on"
resp = send_cmd(sock, cmd)响应:
Powering on2.2 释放抱闸
brakeRelease功能:
该指令用于控制机器人进行释放抱闸。
示例:
TIMEOUT = 5.0
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(TIMEOUT)
cmd = "brakeRelease"
resp = send_cmd(sock, cmd)响应:
Brake Releasing...2.3 检验当前连接状态
echo功能:
该指令用于简单测试当前连接状态,得到响应即可。
示例:
TIMEOUT = 5.0
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(TIMEOUT)
cmd = "echo"
resp = send_cmd(sock, cmd)响应:
Hello ELITE ROBOTS.2.4 弹出消息框
popup -s CS系列功能:
该指令用于在示教器上弹出消息框,消息框的内容在 -s 后面定义。
示例:
TIMEOUT = 5.0
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(TIMEOUT)
cmd = "popup -s CS系列"
resp = send_cmd(sock, cmd)响应:
Showing popup with text: CS系列2.5 关闭弹出框
popup -c功能:
该指令用于在关闭在示教器上弹出消息框。
示例:
TIMEOUT = 5.0
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(TIMEOUT)
cmd = "popup -c"
resp = send_cmd(sock, cmd)响应:
Closing popup3. 代码示例
"""
Elite CS 系列机器人 29999 Dashboard 端口控制脚本
按顺序执行:上电 → 释放抱闸 → 检验连接 → 弹出消息 → 关闭弹出 → 获取模式 → 获取类型 → 获取版本 → 获取速度 → 设置速度50% → 下电 → 关机
"""
import socket
import sys
import time
# ============================================================
# 配置区
# ============================================================
ROBOT_IP = "192.168.254.138" # 机器人 IP,按实际情况修改
PORT = 29999 # Dashboard 端口
TIMEOUT = 5.0 # 单次收发超时(秒)
# 命令序列
COMMANDS = [
("上电", "robotControl -on"),
("释放抱闸", "brakeRelease"),
("检验当前连接状态", "echo"),
("弹出消息框", "popup -s CS系列"),
("关闭弹出框", "popup -c"),
("获取机器人模式", "robotMode"),
("获取机器人类型", "robot -t"),
("获取版本", "version"),
("获取速度", "speed"),
("设置速度 50%", "speed -v 50"),
("下电", "robotControl -off"),
("关机", "shutdown"),
]
TIME_WAIT = 5.0
# ============================================================
# 核心函数
# ============================================================
def send_cmd(sock: socket.socket, cmd: str) -> str:
"""向 29999 端口发送一条命令,返回响应文本"""
sock.sendall((cmd + "\n").encode("utf-8"))
try:
resp = sock.recv(4096).decode("utf-8", errors="replace").strip()
except socket.timeout:
resp = "[TIMEOUT] 未收到响应"
return resp
def main():
# 确保 stdout 输出 UTF-8(Windows PowerShell 兼容)
if sys.platform == "win32":
sys.stdout.reconfigure(encoding="utf-8")
print(f"=" * 60)
print(f"Elite CS 机器人 Dashboard 控制脚本")
print(f"目标: {ROBOT_IP}:{PORT}")
print(f"=" * 60)
# 建立 TCP 连接
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(TIMEOUT)
try:
sock.connect((ROBOT_IP, PORT))
except ConnectionRefusedError:
print(f"[ERROR] 连接被拒绝,请检查机器人 IP 和端口 ({ROBOT_IP}:{PORT})")
return
except socket.timeout:
print(f"[ERROR] 连接超时,请检查网络连通性")
return
except OSError as e:
print(f"[ERROR] 连接失败: {e}")
return
# 接收欢迎信息
try:
welcome = sock.recv(4096).decode("utf-8", errors="replace").strip()
print(f"\n[欢迎信息] {welcome}\n")
except socket.timeout:
print("[WARN] 未收到欢迎信息,继续执行\n")
# 按顺序执行命令
for i, (desc, cmd) in enumerate(COMMANDS, 1):
print(f"[{i:02d}/{len(COMMANDS)}] {desc}")
print(f" 命令: {cmd}")
resp = send_cmd(sock, cmd)
print(f" 响应: {resp}")
print()
time.sleep(TIME_WAIT)
# 断开连接
try:
sock.sendall(b"quit\n")
sock.recv(4096)
except Exception:
pass
finally:
sock.close()
print("=" * 60)
print("所有命令执行完毕,连接已断开")
print("=" * 60)
if __name__ == "__main__":
main()