全站搜索

ABB RobotStudio仿真软件与PLC信号交互的虚实结合实训

新闻和资讯 270


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中实现信号交互的模块。

  1. 在“建模”选项卡中创建“SMART组件”,命名为“SignalInterface”。
  2. 添加“Digital Input”子组件,命名为“PLC_Start”,设置初始值0。
  3. 添加“Digital Output”子组件,命名为“Robot_Done”,设置初始值0。
  4. 将SMART组件的数字输入/输出与机器人I/O系统关联:
    • 在“I/O Connections”中,将“PLC_Start”连接到机器人的“di0”。
    • 将机器人的“do0”连接到“Robot_Done”。
  5. 编写机器人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)

学生任务

  1. 在RobotStudio中搭建简单工作站和SMART组件。
  2. 编写C#中间程序,实现信号转发。
  3. 编写PLC的Socket通讯程序。
  4. 联调:PLC控制真实LED灯模拟传送带,虚拟机器人搬运虚拟工件。
  5. 改为控制真实直流电机传送带(可选)。

常见问题

  • 连接失败:检查防火墙,RobotStudio的虚拟控制器需运行在“自动”模式。
  • 信号不更新:PC SDK需在独立线程中持续读写。

九、结语

通过本实训,学生无需昂贵机器人硬件即可学习PLC与机器人的协同控制。该方法可扩展至多台虚拟机器人、视觉系统仿真等,是自动化教学数字化的有效手段。未来可集成到Factory IO中实现全虚拟工厂。

上一篇: 下一篇: