1. ROBOGUIDE 虚拟控制器搭建与基础通信验证
任务拆解:虚拟控制器不是“仿真动画”,而是一台可寻址的控制器
ROBOGUIDE 新建工作站时,虚拟控制器(Virtual Controller, VC)会随机器人系统一起生成。要让外部仿真环境(如 PLC 仿真、上位机脚本、Socket 客户端)与它通信,必须先把三件事对齐:网络可达、端口开放、I/O 映射正确。本案例用 ping 验证网络层,用 I/O 读写验证应用层,形成一条最小可复现的通信链路。
ROBOGUIDE 的虚拟控制器默认运行在 Windows 主机上,其 IP 通常与主机网卡同网段。若使用“虚拟以太网”或“Host-Only”模式,需确认主机防火墙未拦截 ICMP 与 TCP 端口。
工作站与通信对象
新建工作站时选择机器人型号(示例用 R-2000iC/165F)、系统版本(示例用 V9.30)和语言。生成后,虚拟控制器会获得一个可配置的 IP。外部仿真环境通过该 IP 与端口访问 VC 的 I/O 服务。
关键配置与操作
在 ROBOGUIDE 中新建工作站后,进入虚拟控制器的网络配置界面,将 VC 的 IP 设为与主机同网段(示例:主机 192.168.1.100,VC 192.168.1.200)。随后在 I/O 配置中启用 Ethernet/IP 或 Socket Messaging 服务,并确认端口号(示例用 6000)。
外部仿真环境侧,用一条最小 Socket 客户端脚本连接 VC,先发送读请求确认链路,再发送写请求改变 DO[1] 状态,最后回读 DI[1] 验证映射是否闭环。
# 示例:Python Socket 客户端验证虚拟控制器 I/O 通信
import socket
VC_IP = "192.168.1.200"
VC_PORT = 6000
def read_io(sock, signal):
cmd = f"READ {signal}\n".encode()
sock.sendall(cmd)
return sock.recv(1024).decode().strip()
def write_io(sock, signal, value):
cmd = f"WRITE {signal} {value}\n".encode()
sock.sendall(cmd)
return sock.recv(1024).decode().strip()
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(3.0)
s.connect((VC_IP, VC_PORT))
print("连接成功")
# 读初始状态
print("DO[1] 初始:", read_io(s, "DO[1]"))
# 写 DO[1] = ON
print("写 DO[1]:", write_io(s, "DO[1]", "ON"))
# 回读 DI[1] 验证映射
print("DI[1] 回读:", read_io(s, "DI[1]"))
上述命令格式为教学示例,实际 ROBOGUIDE 虚拟控制器的 Socket 协议取决于所启用的通信选项(如 Ethernet/IP、Socket Messaging 或 PC Interface)。若使用 Ethernet/IP,应改用 CIP 报文或专用库,而非纯文本命令。
结果判读与常见失败点
| 验证层 | 通过判据 | 常见失败原因 |
|---|---|---|
| ping | 4 包发送、4 包接收、0 丢失 | IP 不同网段、防火墙拦截 ICMP、虚拟网卡未启用 |
| 端口连接 | TCP 三次握手成功,无超时 | I/O 服务未启动、端口被占用、VC 未运行 |
| I/O 读写 | 写 DO[1]=ON 后回读 DI[1]=ON | I/O 映射未配置、信号名不匹配、Rack/Slot 错误 |
若 ping 通但端口连不上,优先检查虚拟控制器的 I/O 服务是否在“已启动”状态;若端口通但 I/O 读写无响应,检查信号映射表中 DO[1] 与 DI[1] 是否指向同一物理/逻辑通道。三步全部通过后,虚拟控制器与外部仿真环境的通信链路即视为可用。