ABB RobotStudio仿真软件与PLC信号交互的虚实结合实训
ABB RobotStudio是机器人离线编程与仿真的强大工具,但其本身不支持直接与外部PLC进行信号交互。本文提出一种使用Socket通讯或OPC DA的方式,将RobotStudio中的虚拟机器人信号与真实PLC(西门子S7-1200)进行连接,实现虚实结合的实训方案。详细介绍了RobotStudio的SMART组件信号配置、C#脚本编写(作为中间服务器)、以及PLC端Socket通讯程序。通过一个“虚拟机器人搬运工件,真实PLC控制传送带”的案例,展示了如何让学生在无真实机器人硬件的情况下,体验完整的自动化控制流程。该方法降低了实训成本,且可模拟复杂工艺。
一、引言
工业机器人实训设备价格昂贵,且数量有限。RobotStudio仿真软件虽然功能强大,但通常只能独立运行,无法与PLC联动,导致学生无法理解机器人与外围设备的协同逻辑。本文开发了一种低成本虚实结合方案:在RobotStudio中运行虚拟机器人模型,通过以太网与真实PLC交换I/O信号,实现“软机器人+硬PLC”的半实物仿真。该方案已在教学中取得良好效果。
二、系统总体架构
方案选择对比:
- 方案A:使用RobotStudio的OPC DA Server(需购买授权),连接PC的OPC客户端,再转PLC。成本高。
- 方案B:使用RobotStudio的PC SDK,通过C#程序读取SMART组件信号,再通过Socket转发给PLC。免费且灵活。
本文采用方案B。
硬件:
- 一台PC(运行RobotStudio和C#中间程序)
- 西门子S7-1200 PLC(真实硬件)
- 交换机
软件:
- RobotStudio 2022
- Visual Studio 2019(C#)
- TIA Portal V17
通讯流程:
RobotStudio SM组件 → C#程序(PC SDK) → Socket → PLC(TCP客户端/服务器)
三、RobotStudio端配置
3.1 创建虚拟工作站
- 导入ABB IRB120模型,创建简单工作站。
- 添加一个传送带模型(用基本体素拉伸)。
- 添加一个工件(立方体)。
3.2 配置SMART组件(信号接口)
SMART组件是RobotStudio中实现信号交互的模块。
- 在“建模”选项卡中创建“SMART组件”,命名为“SignalInterface”。
- 添加“Digital Input”子组件,命名为“PLC_Start”,设置初始值0。
- 添加“Digital Output”子组件,命名为“Robot_Done”,设置初始值0。
- 将SMART组件的数字输入/输出与机器人I/O系统关联:
- 在“I/O Connections”中,将“PLC_Start”连接到机器人的“di0”。
- 将机器人的“do0”连接到“Robot_Done”。
- 编写机器人RAPID程序,读取di0,当为1时执行搬运动作,完成后置位do0。
3.3 测试SMART组件
在RobotStudio的“信号分析器”中手动设置PLC_Start为1,观察机器人是否运动,以及Robot_Done是否变化。
四、C#中间程序开发(PC SDK)
4.1 环境准备
- 安装RobotStudio SDK(随软件自动安装)。
- 在VS中新建控制台应用,添加引用:
ABB.Robotics.Controllers.PC.dll。
4.2 连接RobotStudio仿真控制器
csharp复制下载
using ABB.Robotics.Controllers;
using ABB.Robotics.Controllers.RapidDomain;
Controller controller = ControllerFactory.Scan().FirstOrDefault(c => c.Name == "VC" && c.IsVirtual);
if (controller != null)
{
controller.Logon(UserInfo.DefaultUser);
controller.Rapid.Restart(RapidRestartType.Cold);
// 获取SMART组件的信号
Signal plcStart = controller.IOSystem.GetSignal("PLC_Start");
Signal robotDone = controller.IOSystem.GetSignal("Robot_Done");
}
4.3 Socket服务器(等待PLC连接)
csharp复制下载
TcpListener listener = new TcpListener(IPAddress.Any, 8888);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
NetworkStream stream = client.GetStream();
// 循环:读取PLC发送的指令,设置PLC_Start信号;同时读取Robot_Done信号发送给PLC
while (true)
{
// 读PLC数据(假设PLC发送1字节:0停止,1启动)
byte[] buffer = new byte[1];
stream.Read(buffer, 0, 1);
plcStart.SetValue(buffer[0] == 1);
// 读机器人完成信号
bool done = robotDone.GetValue() as bool? ?? false;
byte[] sendData = new byte[] { (byte)(done ? 1 : 0) };
stream.Write(sendData, 0, 1);
Thread.Sleep(50);
}
五、PLC端Socket客户端编程(S7-1200)
S7-1200从固件V4.0开始支持开放式用户通讯(OUC),可以作为TCP客户端。
配置:
- 调用“TCON”指令建立连接:服务器IP为PC的IP(如192.168.1.100),端口8888。
- 调用“TSEND”发送启动命令(字节1)。
- 调用“TRCV”接收机器人完成信号。
程序示例(梯形图+SCL):
scl复制下载
// 发送启动信号
IF start_condition THEN
send_data[0] := 1;
"TSEND" (REQ := send_req, DATA := send_data, LEN := 1, DONE => send_done);
ELSE
send_data[0] := 0;
END_IF;
// 接收完成信号
"TRCV" (EN_R := TRUE, DATA := recv_data, LEN := 1, RCVD_LEN => recv_len);
IF recv_data[0] = 1 THEN
robot_done := TRUE;
ELSE
robot_done := FALSE;
END_IF;
六、实训案例:虚拟机器人搬运+真实PLC传送带
工艺:
- 真实传送带(由PLC控制电机)将工件送到取料点(由真实光电传感器检测)。
- PLC通过Socket通知虚拟机器人工件已就绪。
- 虚拟机器人执行抓取、搬运到放置点。
- 机器人完成后通知PLC,PLC启动传送带送入下一个工件。
优点:学生既编写了PLC程序(控制真实电机和传感器),又编写了机器人RAPID程序,还实现了通讯,综合性强。
七、性能与限制
| 项目 | 实测数据 |
|---|---|
| 通讯延迟(PLC→PC→RobotStudio) | 约20-50ms |
| 虚拟机器人运动同步性 | 肉眼无明显滞后 |
| 最大通讯频率 | 20Hz(稳定) |
限制:
- RobotStudio虚拟时间与真实时间存在漂移,长时间运行需定期同步。
- 复杂场景下PC负载较高,建议使用性能较好的电脑(i7+16GB)。
八、实训教学实施
课时:6学时(配置2,C#编程2,PLC编程2)
学生任务:
- 在RobotStudio中搭建简单工作站和SMART组件。
- 编写C#中间程序,实现信号转发。
- 编写PLC的Socket通讯程序。
- 联调:PLC控制真实LED灯模拟传送带,虚拟机器人搬运虚拟工件。
- 改为控制真实直流电机传送带(可选)。
常见问题:
- 连接失败:检查防火墙,RobotStudio的虚拟控制器需运行在“自动”模式。
- 信号不更新:PC SDK需在独立线程中持续读写。
九、结语
通过本实训,学生无需昂贵机器人硬件即可学习PLC与机器人的协同控制。该方法可扩展至多台虚拟机器人、视觉系统仿真等,是自动化教学数字化的有效手段。未来可集成到Factory IO中实现全虚拟工厂。
山东设计院
