接口说明
接口访问方式:
- 数据与机器人:xplugin::xPluginInterface() → InterfaceManager
- 事件:xplugin::xPluginEvent() → XPluginEventSystem
- RL 指令:栈上或成员 xplugin::RLManager
1. 基础库
1.1 注册与生命周期
| 符号 | 说明 |
|---|---|
| XPLUGIN_REGISTER(KEY, CLASS_NAME) | 插件注册功能;KEY 须与 PLUGIN_NAME、部署目录名一致 |
| xPluginFactory() | 全局 PluginRegister 单例 |
| PluginBase | 用户自定义插件基类,通过重写 init / afterInit / render / idle / detach 实现具体功能 |
| setDefaultGlobalSheet(bool) | 构造函数内设置是否使用全局样式表 |
| setPluginLabel(const QString &) | 构造函数内设置插件显示标签 |
1.2 枚举
| 枚举 | 值 | 用途 |
|---|---|---|
| enLanguage | English=0, Chinese=1, OtherLanguage=0xFF | 语言类型(翻译由 Qt .qm 完成,无 RegistLanguage 导出 API) |
| enThrowLogLevel | Info, Warning, Error, NoneLogType | ThrowLog 弹窗级别 |
2. 全局使用函数
| 函数 | 返回值 | 说明 |
|---|---|---|
| GetPluginVersion() | QString | 四段版本,当前 1.0.2.6 |
| CreateCenterWidget(pluginName, widget) | int | 注册中心主界面;0 成功,-1 插件名,-2 未初始化 |
| CreateStatusBar(pluginName, widget, index=1) | int | 底部状态栏槽位 |
| CreateRightExpandWidgte(pluginName, widget, name="") | int | 右侧常驻扩展窗 |
| SwitchRightExpandWidgte(pluginName="", name="") | int | 切换扩展窗;name 为空时关闭 |
| CreatePhyButtonList(pluginName, type, left, right, center_texts) | int | 物理键布局 |
| ChangePhyButtonStatus(pluginName, type, enable) | int | 启用/禁用物理键 |
| ChangeModelWindowStatus(pluginName, status) | int | 模态状态,控制物理键是否响应 |
| ChangeFullScreen(pluginName, isFull) | int | 全屏 |
| GetRightExpandSideBar(QWidget **out) | int | 获取右侧扩展侧栏指针 |
| ThrowLog(pluginName, level, msg) | int | 右下角提示 |
| GetPluginDataPath(dataPath, pluginName) | int | 获取插件存储的数据路径 |
物理按键状态(PhysicalButton)
| 字段 | 类型 | 说明 |
|---|---|---|
| text | QString | 显示文本 |
| touched_icon / untouched_icon | QString | 按下/松开图标路径 |
| exec_function | std::function<void(bool)> | 按下回调,true 为按下 |
3. 接口函数
- 通过 xPluginInterface() 获取。除注明外,均在 UI 线程 调用;
3.1 信号
| 信号 | 说明 |
|---|---|
| sigNetworkConnect() | 控制器网络已连接 |
| sigNetworkDisConnect(bool status) | 控制器网络已断开;status : true 为主动断开 |
3.2 与控制器插件通信 commandCustomData
/*
* 描述:与控制器插件数据通信接口(获取自定义的数据key值)
* 参数1 obj:执行控制的主体QObject
* 参数2 pluginName:控制器插件名称
* 参数3 key:控制器插件数据
* 返回值 QJsonArray:控制器插件的数据结体
*/
QJsonArray commandCustomData(QObject *obj, const QString &pluginName, const QString &key, const QString &val);
/*
* 描述:与控制器插件数据通信接口(设置自定义的数据key值)
* 参数1 obj:执行控制的主体QObject
* 参数2 pluginName:控制器插件名称
* 参数3 key:控制器插件数据key
* 参数4 val:控制器插件数据key的目标值
* 返回值 QJsonArray:控制器插件的数据结体
*/
QJsonArray commandCustomData(QObject *obj, const QString &pluginName, const QString &key, const QString &val);
/*
* 描述:与控制器插件数据通信接口(自定义数据结构)
* 参数1 obj:执行控制的主体QObject
* 参数2 pluginName:插件名
* 参数3 json:自定义数据结构
* 返回值 QJsonArray:控制器插件的数据结体
*/
QJsonArray commandCustomData(QObject *obj, const QString &pluginName, const QJsonObject& json);
/*
* 描述:与控制器插件数据通信接口(自定义数据结构)
* 参数1 obj:执行控制的主体QObject
* 参数2 json:自定义数据结构(带插件名)
* 返回值 QJsonArray:控制器插件的数据结体
*/
QJsonArray commandCustomData(QObject *obj, const QJsonObject& json);
/*
* 描述:与控制器插件数据通信接口(自定义数据结构)
* 参数1 obj:执行控制的主体QObject
* 参数2 arr:由自定义数据结构组成的Json数组
* 返回值 QJsonArray:控制器插件的数据结体
*/
QJsonArray commandCustomData(QObject *obj, const QJsonArray& arr);
3.3 xservice 通讯
| 方法 | 返回值 | 说明 |
|---|---|---|
| getNodeData(key) | QJsonValue | 获取节点数据 |
| getXServiceData(key) | QJsonValue | 读取节点数据 |
| getXServiceData(key, subKey) | QJsonValue | 读取节点数据 |
| setXServiceData(key, var) | bool | 同步方法设置数据 |
| setXServiceData(key, subKey, var) | bool | 同步方法设置数据 |
| commandXServiceData(key, var) | bool | 异步 command 设置数据 |
| execCommandXServiceData(key, var) | QJsonValue | 同步 command 设置数据 |
| connectXServiceData(pluginName, serviceKey, callback, key="") | bool | 订阅消息回调 |
| disconnectXServiceData(pluginName, serviceKey, key="") | bool | 取消订阅消息 |
3.4 RC 通讯
| 方法 | 说明 |
|---|---|
| rcRequest(module, command, data, timeout=4800) | 异步请求数据,默认超时 4800 ms |
| rcRequestFullCommand(full_command, request_val, timeout=4800) | 异步请求数据,使用完整节点路径 |
| rcExecRequest(module, command, true, timeout=1600) | 同步请求数据,默认超时 1600 ms |
| rcExecRequestFullCommand(full_command, request_val, true, timeout=4800) | 同步完整命令 |
3.5 网络状态
| 方法 | 说明 |
|---|---|
| connectNetworkStatus(isConnect, pluginName, obj, callback, id="") | 注册连接/断开回调,返回 id 存储 |
| disconnectNetworkStatus(isConnect, pluginName, id="") | 按 id 取消注册 |
3.6 机器人与 HMI 状态
| 方法 | 返回值 | 说明 |
|---|---|---|
| getRobotConnected() | bool | 是否已连接机器人 |
| getRobotID() | QString | 机器人 ID |
| getRobotEleStatus() | bool | 上电状态 |
| getRobotOperateIsHand() | bool | 是否为手动模式 |
| getRobotPhyStatus() | QString | 当前运行状态描述 |
| getUserOperateLevel() | int | 权限级别 1~5 |
| getRobotIP() | QString | 当前控制器的 IP 地址 |
| getRobotType() | QString | 当前机型 |
| getRobotModelType() | int | 构型/设备枚举 |
| changeRobotPowerStatue(status, isRsync=true) | bool | 修改上电状态 isRsync 默认同步调用 |
| changeRobotModelStatue(isHand, isRsync=true) | bool | 修改手/自动状态 isRsync 默认同步调用 |
3.7 程序运行过滤与启停
| 方法 | 说明 |
|---|---|
| startRunningFilter(doOpen) | 安装启动过滤器,设置后需手动启动 startRunning() |
| stopRunningFilter(doOpen) | 安装停止过滤器, 设置后需手动停止 stopRunning() |
| startRunning() / stopRunning() | 当前程序运行启停 |
3.8 工具 工件 速度 区域
| 方法 | 说明 |
|---|---|
| getCurTool() / getCurWobj() | 当前工具、工件 |
| getToolList() / getWobjList() | 列表 |
| getSpeedList() / getZoneList() | 速度、转弯区列表 |
3.9 变量
| 方法 | 说明 |
|---|---|
| getVarDataList(type="") | 按类型列变量名 |
| addVarData(name, value, isPers=false) | 新建变量 |
| delVarData(name) / delVarData(names) | 删除变量 |
| updateVarData(name, value) | 更新变量 |
| getVarObjDataByName(name) | 结构 JSON |
| getValuesOfPERSVars(names) | 读 PERS 变量 |
| setValuesOfPERSVars(names, values) | 设置 PERS 变量 |
| registPERSVars(names) | 针对PERS 变量注册持续刷新 |
| getRegistedPERSVars() | 读已注册的 PERS 当前值 |
3.10 点位
| 方法 | 说明 |
|---|---|
| getPointNameList() | 获取点位名称列表 |
| getPointObjDataByName(pointName) | 获取点位结构 |
| getPointDataByName(pointName) | 获取点的轴空间坐标值 |
| getCurrentPointData(toolName="", wobjName="") | 获取当前位置点 |
| addCurrentPoint(pointName, isJoint, toolName, wobjName) | 由当前点新建点位变量;isJoint 为关节点 |
| changeCartPoint(pointName, xyz_abc) | 修改笛卡尔点 |
| checkPointMoveTo(from, to) | 点位可达性校验;0 成功,1 同点,-2 奇异等 |
| checkPointSame(from, to) | 点位一致性校验 |
| moveToStart(errCode, pointTo, speed, isMoveJ) | 运动至点,speed 1~100 |
| moveToStart(errCode, pointTo, speed, confCheck, isMoveJ) | 运动至点,进行配置检查 |
| moveToStop() | 停止运动 |
3.11 工程
| 方法 | 说明 |
|---|---|
| getProjectList() | 获取工程列表 |
| createProject(name, desc="", isUsed=false) | 新建工程;0 成功 |
| changeProject(name) | 切换工程 |
| removeProject(name) | 删除工程 |
3.12 IO 与寄存器
| 方法 | 说明 |
|---|---|
| getIOHash() | 获取 IO 值 |
| getIOByType(sigType) | sigType 为 "DI/DO/GI/GO/AI/AO" 或整型 |
| setIOValue(name, sigType, value) | 设置 IO 值 |
| getIOValue(name) | 获取 IO 值 |
| getRegisterHash() | 获取寄存器名与枚举值列表 |
| getRegisterValue() | 获取全部寄存器 JSON 值 |
4. 辅助编程
| 方法 | 说明 |
|---|---|
| createGroups(lab, groupName) | 创建指令组(界面标签 , 内部名) |
| createTypeKey(type) | 创建指令 type |
| createTypeToGroup(groupName, type) / (groupName, typeList) | 将指令加入指令组 |
| createSkeleton(type, str) | 设置解析器匹配串 |
| createInsDescribe(type, str) | 设置说明文本 |
| createInsDefault(type, strDef) | 设置默认输出文本 |
| createPattern(type, str) | 设置正则反解 |
| createInsertWidget(type, func) | 设置编辑窗,返回 RLContentBase* 子类 |
| createPropertyWidget(type, func) | 设置属性窗,返回 RLContentBase* 子类 |
| createData(groupName, type, desc, func1, func2) | 快速创建普通指令(插入窗 + 属性窗工厂) |
- RLContentBase:FillWith / ToString / CheckInsert / CheckReplace。 附属方法
5. 事件(event/)
5.1 事件枚举范围
| 区间 | 含义 |
|---|---|
| 0x0000–0x0FFF | 系统事件 |
| 0x1000–0x1FFF | 硬件事件 |
| 0x2000–0x2FFF | 网络事件 |
| 0x3000–0x3FFF | XService事件 |
| 0x4000–0x4FFF | RC事件 |
| 0x5000–0x5FFF | UI事件 |
| 0x8000–0xFFFF | 用户自定义事件 |
5.2 事件方法
| API | 说明 |
|---|---|
| subscribe(type, handler, pluginName, context=nullptr) | 订阅一个事件,返回订阅 ID |
| subscribeFiltered | 订阅一个带有特定过滤器的事件,返回订阅ID |
| subscribeOnce | 订阅一个一次性事件(执行一次后自动取消),返回订阅 ID |
| unsubscribe(id) | 取消指定ID的订阅 |
| unsubscribeByPlugin | 取消指定插件的所有订阅 |
| unsubscribeByType | 取消指定事件类型的所有订阅 |
| unsubscribeByTypeAndPlugin | 取消指定插件的事件类型的所有订阅 |
| publish(event) / publish(type, data, source) | 同步发布事件 |
| publish(type, data, source) | 同步快速发布事件 |
| publishAsync(type, data, source) | 异步发布事件 |
| registerCustomEventType(name) | 注册用户自定义事件类型 |
| registerAllEvents() | 注册全部内置监听(宿主侧) |
详见 事件系统。
6. 日志系统
在 .pro 中定义 PLUGIN_NAME 后可用:
| 宏 | 级别 |
|---|---|
| DLOG / ILOG / WLOG / ELOG / SLOG | Debug / Info / Warning / Error / Sudo |
| DSLOG / ISLOG / WSLOG / ESLOG / SSLOG | 在输出字符之间插入空格 |
- 日志目录的默认:./log/xplugin/<PLUGIN_NAME>/。
7. 同步工具
| 方法 | 说明 |
|---|---|
| SyncTool::instance() | 同步工具的调用实例 |
| pushFile(from, to_module="hmi") | 推送目录数据到控制器模块 |
| pushOneFile(from, to_module="hmi") | 推送单个文件到控制器模块 |
| pullFile(from_module="hmi", to_path="", has_dialog=true) | 从控制器模块拉取指定路径数据 |