RoboDK插件接口
RoboDK插件接口介绍

介绍

本帮助文档介绍了如何为RoboDK开发插件。RoboDK插件允许通过使用RoboDK接口和RoboDK API扩展RoboDK。与默认的RoboDK API(在Python, c#, c++, Matlab等中提供)相反,这个RoboDK插件接口本地链接到RoboDK的核心。因此,当在插件接口(Plugin Interface)内部使用RoboDK API时(使用IItemIRoboDK),速度比使用默认API快时间测试。但是,所有RoboDK插件应用程序必须存在于RoboDK的环境中。

以下是一些RoboDK示例插件:

每个示例包括robodk_interface文件夹中。每个插件都需要这个文件夹,它定义了到RoboDK的接口。

这些示例包括应用机器人正逆运动学的定制机器人面板、实时示例、模拟重力的插件和基于OPC-UA的OPC-UA接口Open62541(服务器和客户端示例)。

双击PluginExample。请确保遵循安装需求部分(安装要求)来安装Qt作为c++开发环境。

RoboDK插件结构

插件接口(IAppRoboDK)

每个插件必须实现IAppRoboDK类。的IAppRoboDK定义到RoboDK应用程序的接口。

与标准API相反,插件接口允许您与RoboDK的主窗口进行交互,并通过自定义RoboDK的外观IAppRoboDK类。工具栏、菜单栏和窗口都可以使用IAppRoboDK类。

您可以通过选择以下选项来加载其中一个示例插件:

  • 工具-插件

插件内的RoboDK API

IRoboDK (RoboDK)

IRoboDK类(或RoboDK)定义了到RoboDK API的接口。默认情况下,这个RoboDK API是相同的(//www.sinclairbody.com/doc/en/RoboDK-API.html#RoboDKAPI).然而,当你在RoboDK插件中使用它时,RoboDK API会更快:时间测试。当插件使用class加载时:IAppRoboDK: PluginLoad它传递一个指针IRoboDK它是RoboDK API的接口。

RoboDK和IRoboDK是完全相同类型的类。在默认示例中使用RoboDK是为了使其与标准的c++ RoboDK API兼容。

关于RoboDK API的更多信息可以在这里找到:

IItem(项)

IItem类(或Item)可用于操作RoboDK树中可用的任何项。使用类这样的函数:IRoboDK: getItem或类:IRoboDK: getItemList从RoboDK工作站树中取回物品。对象的指针IItem。应该使用class来删除项:IItem:删除(不使用类析构函数)。

关于RoboDK Item类(基于Python API)的更多信息可以在这里获得:

RoboDK类型文件

robodktypes.h文件定义了RoboDK API使用的一组类型。包括:

  • 类用于姿态操作。
  • tJoints类来表示机器人关节变量
  • tMatrix2D表示可变大小的二维矩阵的数据结构(主要用于内部用途)

插件接口vs. RoboDK API

RoboDK API是一个通用的命令集,允许您与RoboDK交互并自动执行任务。在RoboDK中使用宏时,默认使用RoboDK API。RoboDK Plug-In接口包含一个RoboDK API接口。

通过插件接口使用RoboDK API的主要优点如下:

  • RoboDK API要快得多,因为它是作为库加载的(RoboDK插件实际上是由RoboDK加载的库)。
  • 您可以自定义RoboDK主窗口的外观(包括菜单、工具栏和添加停靠窗口)。

在插件内部使用RoboDK API时,需要注意以下事项:

  • Item (Item/IItem)是指针,不是对象。您可以通过检查一个项是否为空指针(nullptr)来检查它是否有效。更多信息在这里:ItemValid。
  • 你必须调用class:IRoboDK:渲染每次你想要更新屏幕时(例如,如果你使用class来改变机器人的位置:IItem:关节).更新屏幕不会自动完成。
  • 插件只能使用Qt库部署为c++代码。

时间测试

PluginExample应用程序展示了如何实现一个基本的插件。在其他事情中,它执行一些时间测试来计算RoboDK在特定计算机上的速度。通过选择“插件速度信息”按钮,您将获得时间统计信息。

这些统计数据是由类生成的:PluginExample: callback_information。例如,正运动学和逆运动学通常分别在2微秒和10微秒以下(1微秒= 1e-6秒)。

需求

每个RoboDK插件必须使用Qt Creator开发,并遵循Qt的项目指导方针。建议使用PluginExample项目开始使用新的RoboDK插件(双击PluginExample)。pro用Qt Creator打开它)。

开发插件必须安装RoboDK。RoboDK的免费版本足以开发一个插件作为概念的证明。

安装要求

使RoboDK插件工作的要求:

  • 将您的插件文件(DLL文件)放在:C:/RoboDK/bin/plugins/文件夹中。这是在PluginExample中默认设置的。Pro文件(如下图所示)
  • 启动RoboDK (C: / RoboDK / bin / RoboDK.exe)并传递命令行参数:-PLUGINSLOAD如下图所示。
    • 或者,如果DLL没有放在默认路径中,你可以传递参数"-PLUGINLOAD=path-to-your-plugin. DLL "。该值可以是库的路径,plugins文件夹中的文件名或插件的名称(PluginName)。
    • 您也可以使用BAT文件启动RoboDK: C:/RoboDK/RoboDK- allow - plugins . BAT。将显示示例插件。
    • 选择Tools-Plug-Ins获得更多选项。未来的RoboDK版本将自动加载位于C:/RoboDK/bin/plugins中的插件
  • 出于开发目的,请确保使用RoboDK启动插件并传递-PLUGINSLOAD参数,如下图所示。
    您可以通过选择以下选项来加载其中一个示例插件:
  • 工具-插件

RoboDK插件的默认位置为:C:/RoboDK/bin/plugins

在调试模式下运行

您的插件发布和调试二进制文件不应该与RoboDK的发布和调试二进制文件混在一起。默认情况下不提供RoboDK调试二进制文件。

要在调试模式下正确运行插件,你应该使用RoboDK调试二进制文件:

  • 联系我们获取RoboDK的调试版本(绑定文件夹)。
  • 解压缩bind文件夹C: / RoboDK /绑定/
  • 选择Projects-Run-Run Settings并将Executable设置为C: / RoboDK /绑定/ RoboDK.exe(如下图所示,不要忘记d).

重要:将调试DLL与发布DLL混合将不起作用(将提供一条消息作为控制台输出)。确保在每次切换调试和发布模式时更新此设置。

重要提示:如果您遇到奇怪的插件加载问题,请尝试删除所有插件并重新构建它们(C:/RoboDK/bin/plugins和C:/RoboDK/bind/plugins中的所有文件)。

  • 选择Debug构建,您可以像往常一样开始调试。

Qt的技巧

RoboDK插件必须使用Qt插件框架创建。Qt是基于c++的,所以RoboDK插件需要用c++编程。

Qt是一组有用的c++库,Qt Creator是Qt的默认开发环境(IDE),我们推荐使用Qt Creator作为RoboDK插件编程的开发环境。

下面的列表提供了一些有用的Qt编程链接和技巧:

  • 双击PluginExample。使用Qt Creator打开示例项目。
  • 使用Qt信号/插槽机制进行动作/按钮回调(http://doc.qt.io/qt-5/signalsandslots.html).信号和槽是线程安全的。
  • 使用tr(“你的字符串”)或QObject::tr(“你的字符串”)包装你的字符串,以允许使用Qt Linguist进行翻译。更多信息:http://doc.qt.io/qt-5/qtlinguist-index.html
  • 如果遇到奇怪的构建问题,删除自动创建的构建文件夹以强制进行新构建可能很有用。
  • 如果您在RoboDK中遇到奇怪的插件加载问题,建议删除这些库并在新构建时创建插件库。
  • 关于Qt的更多信息:https://www.qt.io/

有用的链接

涉及RoboDK API的有用链接: