跳到主要内容

接口说明

本文汇总客户端插件二次开发时可调用的接口,按二次开发包 include/ 中的头文件分节说明。


plugincommon.h​

头文件:#include "plugincommon.h"

宏​

XPLUGIN_REGISTER(KEY, CLASS_NAME)

XPLUGIN_REGISTER 用于将用户插件类登记到 Rokae+ 客户端,以便动态库加载后可由客户端创建该插件实例。

KEY 为插件标识,一般为 Qt 工程文件(.pro)中定义的字符串宏 PLUGIN_NAME。

CLASS_NAME 为插件类名,须为 PluginBase 的派生类。

注意
  • 宏在动态库加载时生效,将 CLASS_NAME 登记到进程内插件工厂,供客户端随后创建该插件实例。
  • KEY 须与打包部署时的插件名一致,详见 插件包制作。
  • CLASS_NAME 须定义在 xplugin 命名空间中。

另请参阅 PluginBase。

枚举类型​

enum xplugin::enLanguage

该枚举类型描述界面语言。界面翻译由 Qt .qm 完成,无单独的语言注册导出函数。

常量值描述
xplugin::English0英语
xplugin::Chinese1中文
xplugin::OtherLanguage0xFF其它语言

enum xplugin::enThrowLogLevel

该枚举类型描述 ThrowLog() 右下角弹窗的级别。

常量值描述
xplugin::Info0信息
xplugin::Warning1警告
xplugin::Error2错误
xplugin::NoneLogType0xFF无级别

另请参阅 ThrowLog()。

PluginBase 类​

PluginBase 类是所有用户插件的抽象基类。

头文件:#include "plugincommon.h"
继承自:QObject

公有函数​

PluginBase(QObject *parent = nullptr)
virtual~PluginBase()
virtual voidinit()
virtual voidafterInit()
virtual voidrender()
virtual voididle()
virtual voiddetach()
voidsetDefaultGlobalSheet(bool useful = true)
boolgetDefaultGlobalSheet() const
voidsetPluginLabel(const QString &lbl)
QStringgetPluginLabel() const

详细描述​

PluginBase 类是所有二次开发插件的基类。派生类须位于 xplugin 命名空间,且不可拷贝(拷贝构造函数与拷贝赋值函数已删除)。

客户端按下列顺序调用可重写函数:init()、afterInit()、render()、idle()、detach()。默认实现为空。各阶段职责见下文对应的各自成员函数说明。

界面挂载,以及与其它 HMI 模块的关联(例如向辅助编程注册指令),推荐写法见 示例。

须使用 XPLUGIN_REGISTER() 登记派生类。参数含义与约束见该宏说明。

另请参阅 XPLUGIN_REGISTER()、setPluginLabel()、CreateCenterWidget()、示例。

成员函数说明​

[virtual] void PluginBase::init()

插件初始化钩子。

宜完成本插件自身初始化(创建界面与数据,并按需挂载到中心区、状态栏、侧栏、物理键等)。与其它 HMI 模块的关联宜放在 afterInit(),勿在本阶段假定其它模块已初始化完成。默认实现为空。

另请参阅 afterInit()、CreateCenterWidget()。

[virtual] void PluginBase::afterInit()

在 init() 之后调用。

宜在此处理与其它 HMI 模块的关联(例如构造 RLManager 并向辅助编程注册指令)。默认实现为空。

另请参阅 init()、RL 辅助编程。

[virtual] void PluginBase::render()

启动过程进入渲染阶段时调用。可按需做界面或样式相关处理。本函数随生命周期推进调用,并非在数据变化时反复调用的刷新接口。默认实现为空。

[virtual] void PluginBase::idle()

启动流程的最后阶段,表示本模块已进入可运行状态。无强制业务逻辑,可按需实现或留空。非周期定时回调。默认实现为空。

[virtual] void PluginBase::detach()

在插件卸载时调用。重新实现此函数,释放本插件占用的资源(例如断开自行建立的信号连接,销毁需显式释放的对象)。默认实现为空。

已通过 CreateCenterWidget()、CreateStatusBar() 等函数挂载到 HMI 的界面,由框架在插件销毁时清理,一般不必在此函数中处理。

void PluginBase::setDefaultGlobalSheet(bool useful = true)

设置本插件是否使用 HMI 全局样式表。客户端在 render() 阶段读取该标志:为 true 时由客户端应用全局样式。须在进入 render() 之前设置,通常于构造函数中调用。传入 false 时,插件须自行加载样式。

另请参阅 getDefaultGlobalSheet()。

bool PluginBase::getDefaultGlobalSheet() const

返回本插件是否使用 HMI 全局样式表。

另请参阅 setDefaultGlobalSheet()。

void PluginBase::setPluginLabel(const QString &lbl)

设置工艺包菜单中的显示标签。客户端在调用插件 init() 之前读取该标签,须在用户插件派生类的构造函数中设置。界面字符串可用 tr(),以便语言包翻译。

另请参阅 getPluginLabel()、CreateCenterWidget()。

QString PluginBase::getPluginLabel() const

返回工艺包菜单中的显示标签。

另请参阅 setPluginLabel()。


接口管理​

头文件:#include "interface/interfacemanager.h"

PhysicalButton 结构体​

PhysicalButton 结构体描述一组物理键。

成员类型描述
textQString按键文本
touched_iconQString按下时的图标路径,可为空
untouched_iconQString未按下时的图标路径,可为空
exec_functionstd::function<void(bool is_pressed)>按下或松开时调用的函数;
参数 true 表示按下,参数 false 表示松开

另请参阅 CreatePhyButtonList()。

InterfaceManager 类​

InterfaceManager 类提供 HMI 挂载之外的数据、状态与运动接口。

头文件:#include "interface/interfacemanager.h"
继承自:QObject

公有函数​

QJsonArraycommandCustomData(QObject *obj, const QString &pluginName, const QString &key, const QString &val)
QJsonArraycommandCustomData(QObject *obj, const QString &pluginName, const QJsonObject &json)
QJsonArraycommandCustomData(QObject *obj, const QJsonObject &json)
QJsonArraycommandCustomData(QObject *obj, const QJsonArray &arr)
QJsonValuegetNodeData(const QString &key)
QJsonValuegetXServiceData(const QString &key)
QJsonValuegetXServiceData(const QString &key, const QString &subKey)
boolsetXServiceData(const QString &key, const QVariant &var)
boolsetXServiceData(const QString &key, const QString &subKey, const QVariant &var)
boolcommandXServiceData(const QString &key, const QVariant &var)
QJsonValueexecCommandXServiceData(const QString &key, const QVariant &var)
boolconnectXServiceData(const QString &pluginName, const QString &serviceKey, std::function<void(const QVariant &data)> callBack, const QString &key = "")
booldisconnectXServiceData(const QString &pluginName, const QString &serviceKey, const QString &key = "")
boolrcRequest(const QString &module, const QString &command, const QJsonValue &data = QJsonValue(), int timeout = 4800)
boolrcRequestFullCommand(const QString &full_command, const QJsonValue &request_val = QJsonValue(), int timeout = 4800)
QJsonValuercExecRequest(const QString &module, const QString &command, const QJsonValue &data = QJsonValue(), bool has_log = true, int timeout = 1600)
QJsonValuercExecRequestFullCommand(const QString &full_command, const QJsonValue &request_val = QJsonValue(), bool has_log = true, int timeout = 1600)
QStringconnectNetworkStatus(bool isConnect, const QString &pluginName, QObject *obj, std::function<void()> callBack, const QString &id = "")
voiddisconnectNetworkStatus(bool isConnect, const QString &pluginName, const QString &id = "")
boolgetRobotConnected()
QStringgetRobotID()
boolgetRobotEleStatus()
boolgetRobotOperateIsHand()
QStringgetRobotPhyStatus()
intgetUserOperateLevel()
QStringgetRobotIP()
QStringgetRobotType()
intgetRobotModelType()
boolchangeRobotPowerStatue(bool status, bool isRsync = true)
boolchangeRobotModelStatue(bool isHand, bool isRsync = true)
boolstartRunningFilter(bool doOpen)
boolstopRunningFilter(bool doOpen)
boolstartRunning()
boolstopRunning()
QStringgetCurTool()
QStringgetCurWobj()
QStringListgetToolList()
QStringListgetWobjList()
QStringListgetSpeedList()
QStringListgetZoneList()
QStringListgetVarDataList(const QString &type = "")
booladdVarData(const QString &name, QVariant value, bool isPers = false)
booldelVarData(const QString &name)
booldelVarData(const QList<QString> &names)
boolupdateVarData(const QString &name, QVariant value)
QJsonObjectgetVarObjDataByName(const QString &name)
QVector<QString>getValuesOfPERSVars(const QVector<QString> &names)
intsetValuesOfPERSVars(const QVector<QString> &names, const QVector<QVariant> &values)
intregistPERSVars(const QVector<QString> &names)
QVector<QVariant>getRegistedPERSVars()
QStringListgetPointNameList()
QJsonObjectgetPointObjDataByName(const QString &pointName)
QVector<double>getPointDataByName(const QString &pointName, const QString &valueIndex = "[0][0][0]")
QJsonValuegetCurrentPointData(const QString &toolName = "", const QString &wobjName = "")
booladdCurrentPoint(const QString &pointName, bool isJoint, const QString &toolName, const QString &wobjName, const QString &valueIndex = "[0][0][0]")
QStringListgetProjectList()
intcreateProject(const QString &projectName, const QString &desc = "", bool isUsed = false)
intchangeProject(const QString &projectName)
intremoveProject(const QString &projectName)
intcheckPointMoveTo(const QString &pointFrom, const QString &pointTo)
intcheckPointSame(const QString &pointFrom, const QString &pointTo)
voidmoveToStart(int &errCode, const QString &pointNameTo, int speed, bool isMoveJ)
voidmoveToStart(int &errCode, const QString &pointNameTo, int speed, bool confCheck, bool isMoveJ)
voidmoveToStop()
boolsetPointCartData(const QString &pointName, const QVector<double> &xyz_abc, const QString &valueIndex = "[0][0][0]")
QHash<QString, QVariant>getIOHash()
QStringListgetIOByType(const QString &sigType)
QStringListgetIOByType(int sigType)
boolsetIOValue(const QString &name, int sigType, bool value)
boolsetIOValue(const QString &name, const QString &sigType, bool value)
boolgetIOValue(const QString &name)
QHash<QString, QStringList>getRegisterHash()
QJsonValuegetRegisterValue()

信号​

详细描述​

通过 xPluginInterface() 取得全局接口对象。除信号外,下列 InterfaceManager 成员函数均通过该引用调用。

除另行说明外,InterfaceManager 成员函数须在 UI 线程 调用。未连接控制器时,get 类 XService 接口返回空 QJsonValue,set / command 类返回 false。execCommandXServiceData() 未连接时返回 JSON 布尔值 false,而非空 QJsonValue。

commandCustomData() 的 pluginName 为目标 控制器插件 名。订阅类接口(如 connectXServiceData()、connectNetworkStatus())的 pluginName 为调用方插件自身标识,须与 Qt 工程文件(.pro)中的 PLUGIN_NAME 及 XPLUGIN_REGISTER() 的键一致。

另请参阅 数据通信。

成员函数说明​

QJsonArray InterfaceManager::commandCustomData(QObject *obj, const QString &pluginName, const QString &key, const QString &val)

向指定控制器插件发送单个字符串键值。返回应答 QJsonArray(失败或空应答时可能为空)。obj 为请求上下文,即发起本次调用的 QObject(如当前插件或界面对象);可不关联具体对象时传 nullptr。pluginName 为目标控制器插件名。key 为字段名。val 为字段值(字符串)。

最终发给控制器的 JSON 形如:

[
{
"<pluginName>": {
"<key>": "<val>"
}
}
]

其中外层对象的键为 pluginName 的取值,内层字段名为 key、值为 val。

另请参阅 数据通信。

QJsonArray InterfaceManager::commandCustomData(QObject *obj, const QString &pluginName, const QJsonObject &json)

向指定控制器插件发送一组字段。返回应答 QJsonArray(失败或空应答时可能为空)。obj 为请求上下文,即发起本次调用的 QObject(如当前插件或界面对象);可不关联具体对象时传 nullptr。pluginName 为目标控制器插件名。json 为该插件的字段对象。

最终发给控制器的 JSON 形如:

[
{
"<pluginName>": <json>
}
]

其中外层对象的键为 pluginName 的取值,值为 json。

另请参阅 数据通信。

QJsonArray InterfaceManager::commandCustomData(QObject *obj, const QJsonObject &json)

向控制器插件发送自定义数据。调用方须自行将 json 组织为「插件名 → 字段对象」。返回应答 QJsonArray(失败或空应答时可能为空)。obj 为请求上下文,即发起本次调用的 QObject(如当前插件或界面对象);可不关联具体对象时传 nullptr。json 为待发送对象;顶层键须为插件名,值为该插件的字段对象。

json 须组织为:

{
"<pluginName>": {
"<key>": "<val>"
}
}

最终发给控制器的 JSON 形如:

[
{
"<pluginName>": {
"<key>": "<val>"
}
}
]

另请参阅 数据通信。

QJsonArray InterfaceManager::commandCustomData(QObject *obj, const QJsonArray &arr)

向控制器插件一次发送多条自定义数据。调用方须自行将 arr 组织为若干「插件名 → 字段对象」记录。返回应答 QJsonArray(失败或空应答时可能为空)。obj 为请求上下文,即发起本次调用的 QObject(如当前插件或界面对象);可不关联具体对象时传 nullptr。arr 为待发送数组;每个元素须为「插件名 → 字段对象」。

arr 须组织为:

[
{
"<pluginName1>": { ... }
},
{
"<pluginName2>": { ... }
}
]

最终发给控制器的 JSON 与所传 arr 相同。

另请参阅 数据通信。

QJsonValue InterfaceManager::getNodeData(const QString &key)

按 key 读取 HMI 本地数据,返回 QJsonValue。

QJsonValue InterfaceManager::getXServiceData(const QString &key)

从控制器读取指定 key 的 XService 节点数据。未连接控制器时返回空 QJsonValue。

另请参阅 setXServiceData()。

QJsonValue InterfaceManager::getXServiceData(const QString &key, const QString &subKey)

从控制器读取 key 下 subKey 的 XService 节点数据。未连接控制器时返回空 QJsonValue。

另请参阅 setXServiceData()。

bool InterfaceManager::setXServiceData(const QString &key, const QVariant &var)

向控制器同步写入指定 key 的 XService 节点。已连接控制器时返回 true,未连接时返回 false。

另请参阅 getXServiceData()。

bool InterfaceManager::setXServiceData(const QString &key, const QString &subKey, const QVariant &var)

向控制器同步写入 key 下 subKey 的 XService 节点。已连接控制器时返回 true,未连接时返回 false。

另请参阅 getXServiceData()。

bool InterfaceManager::commandXServiceData(const QString &key, const QVariant &var)

向控制器异步下发 XService command。已连接控制器时返回 true,未连接时返回 false;该返回值仅表示是否已连接,不表示 command 执行成败,且不等待执行结果。key 为 command 路径。var 为 command 参数。

另请参阅 execCommandXServiceData()。

QJsonValue InterfaceManager::execCommandXServiceData(const QString &key, const QVariant &var)

向控制器同步执行 XService command,并返回结果 JSON。未连接控制器时返回 JSON 布尔值 false。key 为 command 路径。var 为 command 参数。

另请参阅 commandXServiceData()。

bool InterfaceManager::connectXServiceData(const QString &pluginName, const QString &serviceKey, std::function<void(const QVariant &data)> callBack, const QString &key = "")

订阅指定 XService 节点。节点数据变化时,由客户端调用 callBack(data),其中 data 为该节点的最新值。同一 serviceKey 可多次调用本接口。订阅成功返回 true,失败返回 false。取消订阅时请调用 disconnectXServiceData()。

pluginName 为调用本接口的插件自身的标识,须与该插件 Qt 工程文件(.pro)中的宏 PLUGIN_NAME 及 XPLUGIN_REGISTER() 的键一致。

serviceKey 为该节点的路径。

callBack 为节点数据变化时的回调。

key 已废弃,请勿使用。

注意

callBack 为 std::function,由客户端在插件动态库外调用。插件须与客户端使用相同的编译器、工具集和调用约定构建。

另请参阅 disconnectXServiceData()。

bool InterfaceManager::disconnectXServiceData(const QString &pluginName, const QString &serviceKey, const QString &key = "")

取消对指定 XService 节点的订阅。本接口返回 true。

pluginName 为保留参数,暂不参与本接口逻辑。

serviceKey 须为注册时的节点路径。

key 已废弃,请勿使用。

另请参阅 connectXServiceData()。

bool InterfaceManager::rcRequest(const QString &module, const QString &command, const QJsonValue &data = QJsonValue(), int timeout = 4800)

按模块名与命令名异步发送 RC 请求。本接口发出请求后立即返回,不包含命令执行结果。若需取得结果,请使用 rcExecRequest()。

请求已成功发出时返回 true,未连接或未能发出时返回 false;该返回值不表示命令执行成败。

本接口返回后,客户端仍可在后台接收应答,但不向调用方回传结果。应答失败时,记录错误或警告日志。超过 timeout 仍未收到应答时,记录超时日志,其后到达的应答将被忽略。

module 为模块名。command 为命令名。二者共同指定本次请求的目标。

data 为请求体,默认为空 QJsonValue。

timeout 为客户端后台等待应答的超时时间,默认 4800 毫秒。

另请参阅 rcRequestFullCommand()、rcExecRequest()。

bool InterfaceManager::rcRequestFullCommand(const QString &full_command, const QJsonValue &request_val = QJsonValue(), int timeout = 4800)

按完整命令路径异步发送 RC 请求。本接口发出请求后立即返回,不包含命令执行结果。若需取得结果,请使用 rcExecRequestFullCommand()。

请求已成功发出时返回 true,未连接或未能发出时返回 false;该返回值不表示命令执行成败。

本接口返回后,客户端仍可在后台接收应答,但不向调用方回传结果。应答失败时,记录错误或警告日志。超过 timeout 仍未收到应答时,记录超时日志,其后到达的应答将被忽略。

full_command 为完整命令路径,须同时包含模块名与命令名。

request_val 为请求体,默认为空 QJsonValue。

timeout 为客户端后台等待应答的超时时间,默认 4800 毫秒。

另请参阅 rcRequest()、rcExecRequestFullCommand()。

QJsonValue InterfaceManager::rcExecRequest(const QString &module, const QString &command, const QJsonValue &data = QJsonValue(), bool has_log = true, int timeout = 1600)

按模块名与命令名同步发送 RC 请求,并返回结果。本接口等待应答或超时后返回。未连接控制器时返回空 QJsonValue。

module 为模块名。command 为命令名。二者共同指定本次请求的目标。

data 为请求体,默认为空 QJsonValue。

has_log 为是否记录相关日志,默认 true。

timeout 为等待应答的超时时间,默认 1600 毫秒。

另请参阅 rcExecRequestFullCommand()、rcRequest()。

QJsonValue InterfaceManager::rcExecRequestFullCommand(const QString &full_command, const QJsonValue &request_val = QJsonValue(), bool has_log = true, int timeout = 1600)

按完整命令路径同步发送 RC 请求,并返回结果。本接口等待应答或超时后返回。未连接控制器时返回空 QJsonValue。

full_command 为完整命令路径,须同时包含模块名与命令名。

request_val 为请求体,默认为空 QJsonValue。

has_log 为是否记录相关日志,默认 true。

timeout 为等待应答的超时时间,默认 1600 毫秒。

另请参阅 rcExecRequest()、rcRequestFullCommand()。

QString InterfaceManager::connectNetworkStatus(bool isConnect, const QString &pluginName, QObject *obj, std::function<void()> callBack, const QString &id = "")

注册网络 连接 或 断开 事件的回调。返回订阅 id,供 disconnectNetworkStatus() 取消订阅时使用。

isConnect 为 true 时订阅 连接 事件,为 false 时订阅 断开 事件。

pluginName 为调用本接口的插件自身的标识,须与该插件 Qt 工程文件(.pro)中的宏 PLUGIN_NAME 及 XPLUGIN_REGISTER() 的键一致。

obj 为上下文对象,须传入有效的 QObject(例如插件内的界面对象);销毁时自动取消本订阅。若传入 nullptr,回调不会被调用。

callBack 为事件触发时调用的回调。

id 为保留参数,暂不参与本接口逻辑。取消订阅时须使用本接口的 返回值。

注意

callBack 为 std::function,由客户端在插件动态库外调用。插件须与客户端使用相同的编译器、工具集和调用约定构建。

另请参阅 disconnectNetworkStatus()、sigNetworkConnect()。

void InterfaceManager::disconnectNetworkStatus(bool isConnect, const QString &pluginName, const QString &id = "")

按订阅 id 取消网络状态回调。

id 须为 connectNetworkStatus() 的 返回值;为空时本接口不执行操作。

isConnect、pluginName 为保留参数,暂不参与本接口逻辑。

另请参阅 connectNetworkStatus()。

bool InterfaceManager::getRobotConnected()

返回是否已连接控制器。

另请参阅 getRobotIP()、sigNetworkConnect()。

QString InterfaceManager::getRobotID()

返回机器人 ID。

bool InterfaceManager::getRobotEleStatus()

返回是否上电。

另请参阅 changeRobotPowerStatue()。

bool InterfaceManager::getRobotOperateIsHand()

返回是否为手动模式。true 为手动,false 为自动。

另请参阅 changeRobotModelStatue()。

QString InterfaceManager::getRobotPhyStatus()

返回当前运行状态描述字符串。

int InterfaceManager::getUserOperateLevel()

返回当前用户权限级别。

QString InterfaceManager::getRobotIP()

返回当前连接的控制器 IP。

另请参阅 getRobotConnected()。

QString InterfaceManager::getRobotType()

返回当前机型名称。

int InterfaceManager::getRobotModelType()

返回控制器中的机器人模板编号。

bool InterfaceManager::changeRobotPowerStatue(bool status, bool isRsync = true)

设置上电状态。status 为 true 表示上电,false 表示下电。isRsync 为 true 时同步下发;为 false 时异步下发,其返回值表示请求是否发出。

警告

会改变控制器电源状态。

另请参阅 getRobotEleStatus()。

bool InterfaceManager::changeRobotModelStatue(bool isHand, bool isRsync = true)

设置手 / 自动模式。isHand 为 true 切入手动,false 切入自动。isRsync 为 true 时同步下发;为 false 时异步下发,其返回值表示请求是否发出。

警告

会改变控制器运行模式。

另请参阅 getRobotOperateIsHand()。

bool InterfaceManager::startRunningFilter(bool doOpen)

打开或关闭 启动过滤器。doOpen 为 true 表示打开,false 表示关闭。打开后须再调用 startRunning() 才能启动当前程序。

另请参阅 startRunning()、stopRunningFilter()、XPluginEventType。

bool InterfaceManager::stopRunningFilter(bool doOpen)

打开或关闭 停止过滤器。doOpen 为 true 表示打开,false 表示关闭。打开后须再调用 stopRunning() 才能停止当前程序。

另请参阅 stopRunning()、startRunningFilter()、XPluginEventType。

bool InterfaceManager::startRunning()

启动当前程序。本接口将启动请求放入事件队列进行排队,随后立即返回,不等待程序实际启动。未连接控制器或请求无法排队时返回 false;排队成功返回 true。

另请参阅 stopRunning()、startRunningFilter()。

bool InterfaceManager::stopRunning()

停止当前程序。本接口将停止请求放入事件队列进行排队,随后立即返回,不等待程序实际停止。未连接控制器或请求无法排队时返回 false;排队成功返回 true。

另请参阅 startRunning()、stopRunningFilter()。

QString InterfaceManager::getCurTool()

返回当前工具名。

另请参阅 getToolList()、getCurWobj()。

QString InterfaceManager::getCurWobj()

返回当前工件名。

另请参阅 getWobjList()、getCurTool()。

QStringList InterfaceManager::getToolList()

返回工具列表。

另请参阅 getCurTool()。

QStringList InterfaceManager::getWobjList()

返回工件列表。

另请参阅 getCurWobj()。

QStringList InterfaceManager::getSpeedList()

返回速度列表。

另请参阅 getZoneList()。

QStringList InterfaceManager::getZoneList()

返回转弯区列表。

另请参阅 getSpeedList()。

QStringList InterfaceManager::getVarDataList(const QString &type = "")

返回当前 HMI 工程中自定义变量的名称列表。type 为空时返回全部名称;非空时仅返回类型与 type 相同的名称。

另请参阅 addVarData()。

bool InterfaceManager::addVarData(const QString &name, QVariant value, bool isPers = false)

新建基本变量。名称为空、未连接控制器或同名已存在时返回 false。热更新失败时回滚并返回 false。name 为变量名。value 为初始值。isPers 为 true 时创建持久型变量,默认 false。

另请参阅 delVarData()、updateVarData()。

bool InterfaceManager::delVarData(const QString &name)

按名称删除变量。不支持 socketserver、socketconn、serials 类型。name 为变量名。

另请参阅 addVarData()。

bool InterfaceManager::delVarData(const QList<QString> &names)

按名称列表批量删除变量。不支持 socketserver、socketconn、serials 类型。names 为变量名列表。

另请参阅 addVarData()。

bool InterfaceManager::updateVarData(const QString &name, QVariant value)

按名称更新基本变量的值。name 为变量名。value 为新值。

另请参阅 getVarObjDataByName()。

QJsonObject InterfaceManager::getVarObjDataByName(const QString &name)

返回指定变量的 JSON 对象。未找到时为空对象。name 为变量名。

QVector<QString> InterfaceManager::getValuesOfPERSVars(const QVector<QString> &names)

读取一组持久型变量的当前值(字符串形式)。names 为变量名列表。

另请参阅 setValuesOfPERSVars()。

int InterfaceManager::setValuesOfPERSVars(const QVector<QString> &names, const QVector<QVariant> &values)

设置一组持久型变量。names 为变量名列表;values 为与 names 一一对应的新值列表。成功返回 0;names 与 values 长度不相等时返回 -1;当前控制器的 xCore 版本不支持本接口时返回 -0xF0。

另请参阅 getValuesOfPERSVars()、registPERSVars()。

int InterfaceManager::registPERSVars(const QVector<QString> &names)

将一组持久型变量加入监视列表,供后续读取。names 为待注册的变量名列表。成功返回 0;当前控制器的 xCore 版本不支持本接口时返回 -0xF0。

另请参阅 getRegistedPERSVars()。

QVector<QVariant> InterfaceManager::getRegistedPERSVars()

返回已通过 registPERSVars() 加入监视列表的持久型变量的当前值。须由调用方自行按需再次调用本接口以获取最新值。无数据时,或当前控制器的 xCore 版本不支持本接口时,返回空容器。

另请参阅 registPERSVars()。

QStringList InterfaceManager::getPointNameList()

返回当前 HMI 工程中的点位名称列表。

另请参阅 getPointObjDataByName()。

QJsonObject InterfaceManager::getPointObjDataByName(const QString &pointName)

根据点位名返回完整 JSON 对象。未找到时为空对象。pointName 为点位名称。

另请参阅 getPointDataByName()。

QVector<double> InterfaceManager::getPointDataByName(const QString &pointName, const QString &valueIndex = "[0][0][0]")

根据点位名及指定下标返回相应笛卡尔位姿分量,顺序为 x、y、z、a、b、c。无该点、无该下标或无 pose 时返回空向量。pointName 为点位名称。valueIndex 为数组下标,默认 "[0][0][0]"。

QJsonValue InterfaceManager::getCurrentPointData(const QString &toolName = "", const QString &wobjName = "")

同步读取机器人当前位姿,返回对应 JSON。toolName 为空时,使用 HMI 当前选中的工具;若尚未选中,则使用 tool0。wobjName 为空时,使用 HMI 当前选中的工件;若尚未选中,则使用 wobj0。

另请参阅 addCurrentPoint()。

bool InterfaceManager::addCurrentPoint(const QString &pointName, bool isJoint, const QString &toolName, const QString &wobjName, const QString &valueIndex = "[0][0][0]")

将机器人当前位姿写入指定点位。未连接控制器时返回 false。若目标为多维点位,仅更新 valueIndex 对应元素,其它下标保持不变;若为单元素点位且同名已存在,则先移除该点再整点写入;若同名点不存在,则新建点位。pointName 为点位名称。isJoint 为 true 时按关节型写入,为 false 时按笛卡尔型写入。toolName、wobjName 为取当前位姿时使用的工具、工件坐标系名称。valueIndex 为数组下标,默认 "[0][0][0]"。

另请参阅 getCurrentPointData()、setPointCartData()。

bool InterfaceManager::setPointCartData(const QString &pointName, const QVector<double> &xyz_abc, const QString &valueIndex = "[0][0][0]")

写入 valueIndex 指定下标的笛卡尔坐标。xyz_abc 依次为 x、y、z、a、b、c,长度须不少于 6,仅使用前 6 个元素;不足 6 个时返回 false。无该点或无该下标时亦返回 false。pointName 为点位名称。valueIndex 为数组下标,默认 "[0][0][0]"。

另请参阅 addCurrentPoint()。

int InterfaceManager::checkPointMoveTo(const QString &pointFrom, const QString &pointTo)

校验从 pointFrom 运动到 pointTo 是否可达。返回 0 表示校验通过;返回 1 表示两点为同一点;返回 -2 表示路径校验失败。pointFrom 为起点点位名称。pointTo 为终点点位名称。

另请参阅 checkPointSame()、moveToStart()。

int InterfaceManager::checkPointSame(const QString &pointFrom, const QString &pointTo)

比较两个点位名称字符串。名称相同返回 1,否则返回 0。此接口不做位姿对比。pointFrom 为第一个点位名称。pointTo 为第二个点位名称。

另请参阅 checkPointMoveTo()。

void InterfaceManager::moveToStart(int &errCode, const QString &pointNameTo, int speed, bool isMoveJ)

运动至指定点位。本接口仅使用该点位下标 [0][0][0] 处的数据。找不到该点位或该下标不存在时,errCode 置为 -1。本重载将 confCheck 固定为 true,故该下标处须具备机器人构型(conf);缺失时 errCode 置为 -2。成功下发运动指令时 errCode 置为 0。pointNameTo 为目标点位名称。speed 按 speed / 1000.0 写入轨迹速度。isMoveJ 为 true 时采用轴空间运动,为 false 时采用笛卡尔空间直线运动。

警告

该接口会下发机器人运动指令,执行前须确认现场条件。

另请参阅 moveToStop()、checkPointMoveTo()。

void InterfaceManager::moveToStart(int &errCode, const QString &pointNameTo, int speed, bool confCheck, bool isMoveJ)

运动至指定点位。本接口仅使用该点位下标 [0][0][0] 处的数据。找不到该点位或该下标不存在时,errCode 置为 -1。当 confCheck 为 true 或 isMoveJ 为 true 时,该下标处须具备机器人构型(conf),否则 errCode 置为 -2。成功下发运动指令时 errCode 置为 0。pointNameTo 为目标点位名称。speed 按 speed / 1000.0 写入轨迹速度。confCheck 指定是否要求使用点位中的构型数据;构型用于确定到达目标点所用的解。isMoveJ 为 true 时采用轴空间运动,为 false 时采用笛卡尔空间直线运动。

警告

该接口会下发机器人运动指令,执行前须确认现场条件。

另请参阅 moveToStop()、checkPointMoveTo()。

void InterfaceManager::moveToStop()

停止由 moveToStart() 发起的运动。

另请参阅 moveToStart()。

QStringList InterfaceManager::getProjectList()

返回工程名称列表。

另请参阅 createProject()、changeProject()。

int InterfaceManager::createProject(const QString &projectName, const QString &desc = "", bool isUsed = false)

创建工程。名称不能为空,且不能为 _temp 或 xstack_default。返回 0 表示成功;名称无效返回 -1;工程目录已存在返回 -2;无法创建目录返回 -3。projectName 为工程名称。desc 为工程描述,默认为空。isUsed 为 true 时创建后切换为当前 HMI 工程,默认 false。

另请参阅 changeProject()、removeProject()。

int InterfaceManager::changeProject(const QString &projectName)

切换当前 HMI 工程。名称无效(空或 _temp)返回 -1;工程目录不存在返回 -2;成功返回 0。projectName 为目标工程名称。

另请参阅 createProject()。

int InterfaceManager::removeProject(const QString &projectName)

删除工程及其目录。名称无效返回 -1;工程不存在返回 -2;删除目录失败返回 -3;成功返回 0。projectName 为待删除的工程名称。

警告

该接口将删除工程目录并清理控制器侧关联任务,操作不可恢复,执行前须确认现场条件。

另请参阅 createProject()。

QHash<QString, QVariant> InterfaceManager::getIOHash()

返回全部 IO 名称及其当前值。未连接控制器时返回空表。

另请参阅 getIOByType()、getIOValue()。

QStringList InterfaceManager::getIOByType(const QString &sigType)

按信号类型返回 IO 名称列表。sigType 仅识别 "DI"、"DO"、"GI"、"GO"、"AI"、"AO",且区分大小写;无法识别时返回空列表。

另请参阅 getIOHash()、setIOValue()。

QStringList InterfaceManager::getIOByType(int sigType)

按信号类型返回 IO 名称列表。sigType 取值与类型对应关系为:1 对应 "DI",2 对应 "DO",3 对应 "GI",4 对应 "GO",5 对应 "AI",6 对应 "AO"。sigType 不在 1–6 范围内时返回空列表。

另请参阅 getIOHash()、setIOValue()。

bool InterfaceManager::setIOValue(const QString &name, int sigType, bool value)

设置指定 IO 的布尔值。name 为 IO 名称。sigType 为信号类型整型,取值含义与 getIOByType(int) 一致。value 为目标值。

对 DI(sigType 为 1)与 DO(sigType 为 2):不得写入系统预置 IO;DI 仅允许在输入仿真模式下写入。不满足上述条件时返回 false,且不会下发写入。

满足条件后异步发起写入。本接口返回值恒为 false,调用方不得以返回值判断写入是否成功。

警告

该接口会下发 IO 写入请求,可能影响现场设备状态,执行前须确认条件。

另请参阅 getIOValue()。

bool InterfaceManager::setIOValue(const QString &name, const QString &sigType, bool value)

以字符串指定信号类型并设置 IO 值。sigType 仅识别 "DI"、"DO"、"GI"、"GO"、"AI"、"AO",且区分大小写,分别对应整型 1–6;其后行为与 setIOValue(const QString &, int, bool) 一致。无法识别时按 -1 处理:不进行 DI/DO 相关校验,仍异步下发写入,返回值仍恒为 false,调用方不得以返回值判断写入是否成功。

警告

该接口会下发 IO 写入请求,可能影响现场设备状态,执行前须确认条件。

另请参阅 getIOValue()。

bool InterfaceManager::getIOValue(const QString &name)

返回指定 IO 的布尔值。未与控制器连接、读取失败或不含该名称时返回 false。返回 false 时,可能表示 IO 实际为假,也可能表示上述失败,调用方不得仅据此判断失败原因。name 为 IO 名称。

另请参阅 setIOValue()。

QHash<QString, QStringList> InterfaceManager::getRegisterHash()

返回全部寄存器的名称及其当前值。键为寄存器名,值为该寄存器的字符串列表。

另请参阅 getRegisterValue()。

QJsonValue InterfaceManager::getRegisterValue()

返回全部寄存器列表的 JSON。

另请参阅 getRegisterHash()。

信号说明​

[signal] void InterfaceManager::sigNetworkConnect()

控制器 RC 通道与 XService 均已连接时发出。

另请参阅 sigNetworkDisConnect()、connectNetworkStatus()。

[signal] void InterfaceManager::sigNetworkDisConnect(bool status)

控制器 RC 通道断开时发出。status 为 true 表示主动断开,为 false 表示其他断开原因。

另请参阅 sigNetworkConnect()、connectNetworkStatus()。


相关非成员函数​

下列函数与 xPluginInterface() 声明于同一头文件,位于 xplugin 命名空间。中心页、状态栏等界面挂载示例见 UI 接口。

相关非成员函数​

相关非成员函数说明​

InterfaceManager &xplugin::xPluginInterface()

返回全局唯一的 InterfaceManager 单例。获取该单例引用本身是线程安全的;通过该对象调用业务接口时,除另行说明外须在 UI 线程 进行,勿在多线程中并发调用。

QString xplugin::GetPluginVersion()

返回客户端插件库的版本号字符串。

int xplugin::CreateCenterWidget(const QString &pluginName, QWidget *widget)

将 widget 注册为该插件的中心主界面。通常于 init() 中调用。pluginName 为空时返回 -1;未找到对应插件模块时返回 -2;调用完成后返回 0。widget 为空指针时本次注册被忽略,仍返回 0。pluginName 为插件标识,须与 PLUGIN_NAME 一致。widget 为中心主界面控件。

另请参阅 CreateStatusBar()、CreateRightExpandWidgte()。

int xplugin::CreateStatusBar(const QString &pluginName, QWidget *widget, int index = 1)

将 widget 加入底部状态栏的指定槽位。同一插件可按不同 index 多次调用,以加入多个控件。pluginName 为空时返回 -1;未找到对应插件模块时返回 -2;widget 为空指针或加入失败时返回 0;加入成功时返回 1。pluginName 为插件标识,须与 PLUGIN_NAME 一致。widget 为状态栏控件。index 为槽位索引,默认 1。

另请参阅 CreateCenterWidget()。

int xplugin::CreateRightExpandWidgte(const QString &pluginName, QWidget *widget, const QString &name = "")

将 widget 注册为右侧扩展窗页。pluginName 为空时返回 -1;未找到对应插件模块时返回 -2;注册失败(含扩展侧栏不可用、widget 为空等)时返回 -1;成功返回 0。pluginName 为插件标识,须与 PLUGIN_NAME 一致。widget 为扩展窗控件。name 为该扩展窗页的名称,供后续 SwitchRightExpandWidgte() 切换时使用,为空时使用插件名。

另请参阅 SwitchRightExpandWidgte()、GetRightExpandSideBar()。

int xplugin::SwitchRightExpandWidgte(const QString &pluginName = "", const QString &name = "")

切换右侧扩展窗显示页,或关闭扩展侧栏。pluginName 为空时隐藏扩展侧栏,并返回 0。未找到对应插件模块时也隐藏扩展侧栏,并返回 -2。成功切换至目标页后返回 0。pluginName 为插件标识。name 为扩展窗页的名称:为空时使用插件名,并切换至该插件的默认扩展页;非空时须与 CreateRightExpandWidgte() 注册时传入的 name 一致。

另请参阅 CreateRightExpandWidgte()。

int xplugin::CreatePhyButtonList(const QString &pluginName, const QString &type, const QList<PhysicalButton> &left_buttons, const QList<PhysicalButton> &right_buttons, QStringList center_texts = QStringList(""))

向 HMI 注册一组物理按键。pluginName 为空时返回 -1;未找到对应插件模块时返回 -2;成功返回 0。pluginName 为插件标识,须与 PLUGIN_NAME 一致。type 为按键组类型,供后续 ChangePhyButtonStatus() 使用。left_buttons、right_buttons 分别为左、右侧按键列表。center_texts 为中间区域文本列表。省略该参数时,默认值为仅含一个空字符串的列表。

另请参阅 ChangePhyButtonStatus()、ChangeModelWindowStatus()、PhysicalButton。

int xplugin::ChangePhyButtonStatus(const QString &pluginName, const QString &type, bool enable)

启用或禁用指定类型的物理按键组。pluginName 为空时返回 -1;未找到对应插件模块时返回 -2;成功返回 0。pluginName 为插件标识。type 须与 CreatePhyButtonList() 注册时一致。enable 为 true 时启用,为 false 时禁用。

另请参阅 CreatePhyButtonList()。

int xplugin::ChangeModelWindowStatus(const QString &pluginName, bool status)

设置插件模态状态。pluginName 为空时返回 -1;未找到对应插件模块时返回 -2;成功返回 0。pluginName 为插件标识。status 为 true 时进入模态(物理按键不响应),为 false 时退出模态。

另请参阅 ChangePhyButtonStatus()。

int xplugin::ChangeFullScreen(const QString &pluginName, bool isFull)

进入或退出插件中心页全屏。pluginName 为空时返回 -1;未找到对应插件模块时返回 -2;成功返回 0。pluginName 为插件标识。isFull 为 true 时进入全屏,为 false 时退出全屏。

int xplugin::GetRightExpandSideBar(QWidget **out_right_expand_side_widget)

获取 HMI 右侧扩展侧栏控件指针,写入 out_right_expand_side_widget。该侧栏为扩展窗页的容器。调用方须传入有效的 QWidget **;侧栏不可用时,写入的指针可能为空。返回 0。

另请参阅 CreateRightExpandWidgte()、SwitchRightExpandWidgte()。

int xplugin::ThrowLog(const QString &pluginName, enThrowLogLevel level, const QString &msg)

在 HMI 右下角弹出提示。pluginName 为空时返回 -1;未找到对应插件模块时返回 -2;成功弹出提示后返回 0。pluginName 为插件标识。level 为提示级别,见 enThrowLogLevel。msg 为提示文本。

另请参阅 enThrowLogLevel。

int xplugin::GetPluginDataPath(QString &dataPath, const QString &pluginName)

根据 pluginName 获取插件数据路径,写入 dataPath。路径格式为 xplugins/client/<pluginName>/。pluginName 为空时返回 -1;未找到对应插件模块时返回 -2;成功返回 0。dataPath 为输出参数,用于接收插件数据路径。pluginName 为插件标识,须与 PLUGIN_NAME 一致。


RL 辅助编程​

本节说明向 HMI 辅助编程(RL 编辑器)注册自定义指令的接口。

RLManager 类​

RLManager 类用于向辅助编程注册自定义指令。

头文件:#include "rl/rlmanager.h"
继承自:QObject

公有函数​

详细描述​

RLManager 为插件侧向辅助编程注册指令的入口。宜在 afterInit() 中构造本对象并完成注册。

指令注册可采用下列两种方式之一。

方式一:分步注册

必须调用:

可按需调用:

方式二:createData()

一次创建普通指令。内部已完成指令名登记与挂组等步骤,无需再分步调用方式一中的必须接口。

说明: 若需提供插入窗体或属性窗体,对应界面类须派生自 RLContentBase。

成员函数说明​

void RLManager::createGroups(const QString &lab, const QString &groupName)

创建指令组。分步注册时必须调用本接口。 lab 为指令组标签。groupName 为指令组名称,供 createTypeToGroup() 使用。

另请参阅 createTypeToGroup()。

void RLManager::createTypeKey(const QString &type)

创建指令名。分步注册时必须调用本接口。 type 为指令名。

另请参阅 createTypeToGroup()。

void RLManager::createTypeToGroup(const QString &groupName, const QString &type)

将指令添加到指令组中。分步注册时必须调用本接口。 groupName 为指令组名称。type 为指令名。

另请参阅 createGroups()、createTypeKey()。

void RLManager::createTypeToGroup(const QString &groupName, const QStringList &typeList)

将多条指令添加到指令组中。分步注册时必须调用本接口(与单条重载二选一即可)。groupName 为指令组名称。typeList 为指令名列表。

另请参阅 createGroups()、createTypeKey()。

void RLManager::createSkeleton(const QString &type, const QString &str)

创建解释器文本。type 为指令名。str 为解释器文本。

void RLManager::createInsDescribe(const QString &type, const QString &str)

创建指令文本描述。type 为指令名。str 为描述文本。

void RLManager::createInsDefault(const QString &type, const QString &strDef)

创建默认输出文本。type 为指令名。strDef 为默认输出文本。

void RLManager::createPattern(const QString &type, const QString &str)

创建正则匹配工具。type 为指令名。str 为正则匹配表达式。

void RLManager::createInsertWidget(const QString &type, std::function<RLContentBase *()> func = [] { return nullptr; })

创建插入窗体。func 须返回 RLContentBase 派生对象。type 为指令名。func 为插入窗体创建函数,默认返回空指针。

另请参阅 createPropertyWidget()、RLContentBase。

void RLManager::createPropertyWidget(const QString &type, std::function<RLContentBase *()> func = [] { return nullptr; })

创建属性窗体。type 为指令名。func 为属性窗体创建函数,默认返回空指针。

另请参阅 createInsertWidget()。

void RLManager::createData(const QString &groupName, const QString &type, const QString &desc, std::function<RLContentBase *()> func1 = [] { return nullptr; }, std::function<RLContentBase *()> func2 = [] { return nullptr; })

快速创建一条普通指令。groupName 为指令组名称。type 为指令名。desc 为描述文本。func1 为插入窗体创建函数,默认返回空指针。func2 为属性窗体创建函数,默认返回空指针。

另请参阅 createGroups()、createTypeKey()。

RLContentBase 类​

RLContentBase 类是插件侧插入窗体与属性窗体的基类。

头文件:#include "rl/rlcontentbase.h"
继承自:QWidget

公有函数​

RLContentBase(QWidget *parent = nullptr)
voidsetType(const QString &type)
const QString &getType()
virtual voidFillWith(const QString &str)
virtual QStringToString()
virtual boolCheckInsert()
virtual boolCheckReplace()

详细描述​

通过 createInsertWidget()、createPropertyWidget() 或 createData() 注册的界面类须派生自本类。HMI 在插入或编辑指令时调用下列虚函数:FillWith() 将已有指令文本填入窗体,CheckInsert() / CheckReplace() 校验是否允许提交,ToString() 取得写入程序的指令文本。基类默认实现不产生有效输出,且校验不通过;派生类须按业务需要重写相应虚函数。

成员函数说明​

void RLContentBase::setType(const QString &type)

设置 RL 指令类型。type 为指令类型。

const QString &RLContentBase::getType()

返回已设置的 RL 指令类型。

[virtual] void RLContentBase::FillWith(const QString &str)

用给定指令文本填充当前窗体,多用于属性编辑。默认实现为空。str 为待填入的指令文本。

另请参阅 ToString()。

[virtual] QString RLContentBase::ToString()

根据当前窗体内容生成写入程序的指令文本。默认实现返回空字符串。

另请参阅 FillWith()。

[virtual] bool RLContentBase::CheckInsert()

用户通过插入窗体新插入指令时,校验是否允许将当前窗体内容写入程序。返回 true 表示允许,返回 false 表示拒绝。默认实现返回 false。

另请参阅 CheckReplace()。

[virtual] bool RLContentBase::CheckReplace()

用户通过属性窗体编辑已有指令时,校验是否允许提交当前窗体内容。返回 true 表示允许,返回 false 表示拒绝。默认实现返回 false。

另请参阅 CheckInsert()。


事件系统​

本节说明插件事件的发布与订阅接口。用法示例与内置事件类型见功能模块 事件系统。

XPluginEventSystem 类​

XPluginEventSystem 类提供发布—订阅事件接口。

头文件:#include "event/xplugineventsystem.h"、#include "event/xpluginevent.h"
继承自:QObject

公有类型​

公有函数​

相关非成员函数​

XPluginEventSystem &xPluginEvent()

详细描述​

通过 xPluginEvent() 获取进程内唯一的 XPluginEventSystem 实例,并据此调用订阅、发布等接口。本类构造函数为 protected,插件侧须通过该入口访问,不得自行构造。

成员类型说明​

enum xplugin::XPluginEventType

该枚举描述事件类型。数值按区间划分:

区间含义
0x0000–0x0FFF系统事件(核心框架事件)
0x1000–0x1FFF硬件事件(物理按钮、IO 等)
0x2000–0x2FFF网络事件(连接状态、数据接收等)
0x3000–0x3FFFXService 事件(数据变化等)
0x4000–0x4FFFRC 事件(数据变化等)
0x5000–0x5FFFUI 事件(数据变化等)
0x8000–0xFFFF用户自定义事件(插件可动态注册)
常量值描述
xplugin::SystemEventStart0x0000系统事件区间起始符
xplugin::None0x0000空事件
xplugin::HardEventStart0x1000硬件事件区间起始符
xplugin::NetworkEventStart0x2000网络事件区间起始符
xplugin::NetworkConnected0x2001网络已连接
xplugin::NetworkDisconnected0x2002网络已断开
xplugin::NetworkError0x2003网络错误
xplugin::XServiceEventStart0x3000XService 事件区间起始符
xplugin::XServiceDataChange0x3001XService 节点数据变化
xplugin::RCEventStart0x4000RC 事件区间起始符
xplugin::RCPowerStatusChange0x4001上电状态变化
xplugin::RCRunModelChange0x4011手自动模式切换
xplugin::RCRunStart0x4021程序启动运行
xplugin::RCRunStop0x4022程序停止运行
xplugin::RCBeforeRunStart0x4023程序启动运行前
xplugin::RCBeforeRunStop0x4024程序停止运行前
xplugin::RCNotifyDataChange0x4031RC notify 数据变化
xplugin::UIEventStart0x5000UI 事件区间起始符
xplugin::UserEventStart0x8000用户自定义事件区间起始符
xplugin::MaxEventType0xFFFF事件类型终止符

另请参阅 registerCustomEventType()、subscribe()。

成员函数说明​

XPluginEventSystem &xplugin::xPluginEvent()

返回进程内唯一的 XPluginEventSystem 实例。通过该引用调用订阅、发布等接口。

另请参阅 subscribe()、publish()。

QString XPluginEventSystem::subscribe(XPluginEventType type, std::function<void(const XPluginEvent &)> handler, const QString &pluginName, QObject *context = nullptr)

订阅指定类型的事件,返回订阅 ID。type 为事件类型。handler 为事件处理回调。pluginName 为订阅方插件标识,用于按插件批量取消订阅。pluginName 宜与该插件 Qt 工程文件(.pro)中的宏 PLUGIN_NAME 一致。

context 须传入有效 QObject(例如插件内的界面对象);若对象销毁,则自动取消本订阅。若传入 nullptr,回调不会被调用。

另请参阅 subscribeFiltered()、subscribeOnce()、unsubscribe()。

QString XPluginEventSystem::subscribeFiltered(XPluginEventType type, std::function<bool(const XPluginEvent &)> filter, std::function<void(const XPluginEvent &)> handler, const QString &pluginName, QObject *context = nullptr)

订阅指定类型的事件,仅当 filter 返回 true 时调用 handler。返回订阅 ID。type 为事件类型。filter 为过滤函数。handler 为事件处理回调。pluginName 为订阅方插件标识,用于按插件批量取消订阅。pluginName 宜与该插件 Qt 工程文件(.pro)中的宏 PLUGIN_NAME 一致。

context 为可选上下文对象。若传入有效 QObject,则在对象销毁时自动取消本订阅;若传入 nullptr,仍会在 filter 返回 true 时调用 handler,须自行取消订阅。

另请参阅 subscribe()、unsubscribe()。

QString XPluginEventSystem::subscribeOnce(XPluginEventType type, std::function<void(const XPluginEvent &)> handler, const QString &pluginName, QObject *context = nullptr)

一次性订阅:首次处理完成后自动取消。返回订阅 ID。type 为事件类型。handler 为事件处理回调。pluginName 为订阅方插件标识,用于按插件批量取消订阅。pluginName 宜与该插件 Qt 工程文件(.pro)中的宏 PLUGIN_NAME 一致。

context 为可选上下文对象。若传入有效 QObject,则在对象销毁时自动取消本订阅;若传入 nullptr,事件到达时仍会调用 handler,且首次处理后仍自动取消订阅。

另请参阅 subscribe()、unsubscribe()。

bool XPluginEventSystem::unsubscribe(const QString &subscriptionId)

按订阅 ID 取消订阅。成功返回 true,未找到对应订阅时返回 false。subscriptionId 为 subscribe()、subscribeFiltered() 或 subscribeOnce() 的返回值。

另请参阅 unsubscribeByPlugin()、unsubscribeByType()。

int XPluginEventSystem::unsubscribeByPlugin(const QString &pluginName)

取消指定插件的全部订阅,返回实际取消的条数。pluginName 为订阅时传入的插件标识。

另请参阅 unsubscribe()、unsubscribeByTypeAndPlugin()。

int XPluginEventSystem::unsubscribeByType(XPluginEventType eventType)

取消指定事件类型的全部订阅,返回实际取消的条数。eventType 为事件类型。

另请参阅 unsubscribe()、unsubscribeByTypeAndPlugin()。

int XPluginEventSystem::unsubscribeByTypeAndPlugin(const QString &pluginName, XPluginEventType eventType)

取消指定插件下某一事件类型的全部订阅,返回实际取消的条数。pluginName 为订阅时传入的插件标识。eventType 为事件类型。

另请参阅 unsubscribeByPlugin()、unsubscribeByType()。

void XPluginEventSystem::publish(const XPluginEvent &event)

同步发布事件,在当前调用线程中分发给匹配的订阅者。event 为待发布的事件对象。

另请参阅 publishAsync()。

void XPluginEventSystem::publish(XPluginEventType type, const QVariant &data = QVariant(), const QString &source = QString())

按 type、data 与 source 构造 XPluginEvent,并在当前调用线程中同步分发给匹配的订阅者。type 为事件类型。data 为事件数据,默认为空。source 为事件来源标识,默认为空。

另请参阅 publishAsync()。

void XPluginEventSystem::publishAsync(const XPluginEvent &event)

异步发布事件。本接口立即返回,可在非 UI 线程中安全调用。event 为待发布的事件对象。

另请参阅 publish()。

void XPluginEventSystem::publishAsync(XPluginEventType type, const QVariant &data = QVariant(), const QString &source = QString())

按 type、data 与 source 构造 XPluginEvent 后异步发布。本接口立即返回,可在非 UI 线程中安全调用。type 为事件类型。data 为事件数据,默认为空。source 为事件来源标识,默认为空。

另请参阅 publish()。

XPluginEventType XPluginEventSystem::registerCustomEventType(const QString &name)

注册一个用户自定义事件类型,并返回该类型值。可用自定义类型已用尽时返回 None。name 为该类型的名称;订阅与发布按返回的类型值匹配,不按 name 匹配。

另请参阅 XPluginEventType。

void XPluginEventSystem::registerAllEvents()

注册客户端内置事件监听。由客户端在初始化时调用;插件二次开发一般无须调用。


日志输出​

本节说明插件日志宏。插件可据此向控制台与日志文件输出调试及运行信息。

头文件:#include "log/logmanager.h"
前置条件:须在 Qt 工程文件(.pro)中定义 PLUGIN_NAME
日志目录:./log/xplugin/<PLUGIN_NAME>/

可在 Qt 工程文件(.pro)中通过 LOG_MIN_FILE_LEVEL、LOG_MIN_Q_LEVEL 限制输出级别;定义 LOG_ENABLE_DETAILS 时,日志条目将附加函数名与行号。

宏​

宏级别
DLOG / ILOG / WLOG / ELOG / SLOGDebug / Info / Warning / Error / Sudo
DSLOG / ISLOG / WSLOG / ESLOG / SSLOG同上,并在输出项之间插入空格

宏说明​

用法与 QDebug 类似:

ILOG << "message" << value;

文件同步​

本节说明 HMI 与控制器模块之间的文件推送与拉取接口。

SyncTool 类​

SyncTool 类用于在本地路径与控制器模块之间同步文件或目录。

头文件:#include "utils/synctool.h"
继承自:QObject

公有函数​

详细描述​

通过 instance() 获取进程内唯一的 SyncTool 实例,再调用推送或拉取接口。本类构造函数为私有,插件侧须通过该入口访问,不得自行构造。未连接控制器时,推送与拉取接口均返回 false。调用推送或拉取后,须待本次同步完成,接口才会返回。

成员函数说明​

[static] SyncTool *SyncTool::instance()

返回 SyncTool 单例。

另请参阅 pushFile()、pullFile()。

bool SyncTool::pushFile(const QString &from_path, const QString &to_module = "hmi", bool has_err = true)

将本地目录推送到控制器模块,并显示进度弹窗。成功返回 true,失败返回 false。

from_path 为本地源目录路径。目录不存在时尝试创建;创建失败则弹出错误并返回 false。

to_module 为目标控制器模块名,默认 "hmi"。

has_err 为 true 且同步失败时弹出错误提示,默认 true。

另请参阅 pushOneFile()、pullFile()。

bool SyncTool::pushOneFile(const QString &from_path, const QString &to_module = "hmi", bool has_err = true)

将单个本地文件推送到控制器模块。成功返回 true,失败返回 false。本接口不显示进度弹窗。

from_path 为本地源文件路径;对应文件不存在时,同步失败并返回 false。

to_module 为目标控制器模块名,默认 "hmi"。

has_err 为 true 且同步失败时弹出错误提示,默认 true。

另请参阅 pushFile()。

bool SyncTool::pullFile(const QString &from_module = "hmi", const QString &to_path = "", bool has_dialog = true, bool has_err = true)

从控制器模块拉取目录数据到本地。成功返回 true,失败返回 false。

from_module 为源控制器模块名,默认 "hmi"。

to_path 为本地目标路径,默认为空。目录不存在时尝试创建;创建失败则弹出错误并返回 false。

has_dialog 为 true 时显示进度弹窗,默认 true。

has_err 为 true 且同步失败时弹出错误提示,默认 true。

另请参阅 pushFile()。