接口说明
本文汇总客户端插件二次开发时可调用的接口,按二次开发包 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::English | 0 | 英语 |
xplugin::Chinese | 1 | 中文 |
xplugin::OtherLanguage | 0xFF | 其它语言 |
enum xplugin::enThrowLogLevel
该枚举类型描述 ThrowLog() 右下角弹窗的级别。
| 常量 | 值 | 描述 |
|---|---|---|
xplugin::Info | 0 | 信息 |
xplugin::Warning | 1 | 警告 |
xplugin::Error | 2 | 错误 |
xplugin::NoneLogType | 0xFF | 无级别 |
另请参阅 ThrowLog()。
PluginBase 类
PluginBase 类是所有用户插件的抽象基类。
| 头文件: | #include "plugincommon.h" |
| 继承自: | QObject |
公有函数
PluginBase(QObject *parent = nullptr) | |
virtual | ~PluginBase() |
virtual void | init() |
virtual void | afterInit() |
virtual void | render() |
virtual void | idle() |
virtual void | detach() |
void | setDefaultGlobalSheet(bool useful = true) |
bool | getDefaultGlobalSheet() const |
void | setPluginLabel(const QString &lbl) |
QString | getPluginLabel() 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 并向辅助编程注册指令)。默认实现为空。
[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 结构体描述一组物理键。
| 成员 | 类型 | 描述 |
|---|---|---|
text | QString | 按键文本 |
touched_icon | QString | 按下时的图标路径,可为空 |
untouched_icon | QString | 未按下时的图标路径,可为空 |
exec_function | std::function<void(bool is_pressed)> | 按下或松开时调用的函数; 参数 true 表示按下,参数 false 表示松开 |
另请参阅 CreatePhyButtonList()。
InterfaceManager 类
InterfaceManager 类提供 HMI 挂载之外的数据、状态与运动接口。
| 头文件: | #include "interface/interfacemanager.h" |
| 继承自: | QObject |
公有函数
信号
[signal] void | sigNetworkConnect() |
[signal] void | sigNetworkDisConnect(bool status) |
详细描述
通过 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() 中构造本对象并完成注册。
指令注册可采用下列两种方式之一。
方式一:分步注册
必须调用:
createGroups():创建指令组createTypeKey():登记指令名createTypeToGroup():将指令挂入分组
可按需调用:
createSkeleton():创建解释器文本createInsDescribe():创建指令文本描述createInsDefault():创建默认输出文本createPattern():创建正则匹配工具createInsertWidget():创建插入窗体createPropertyWidget():创建属性窗体
方式二: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) | |
void | setType(const QString &type) |
const QString & | getType() |
virtual void | FillWith(const QString &str) |
virtual QString | ToString() |
virtual bool | CheckInsert() |
virtual bool | CheckReplace() |
详细描述
通过 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 |
公有类型
| enum | XPluginEventType |
公有函数
相关非成员函数
XPluginEventSystem & | xPluginEvent() |
详细描述
通过 xPluginEvent() 获取进程内唯一的 XPluginEventSystem 实例,并据此调用订阅、发布等接口。本类构造函数为 protected,插件侧须通过该入口访问,不得自行构造。
成员类型说明
enum xplugin::XPluginEventType
该枚举描述事件类型。数值按区间划分:
| 区间 | 含义 |
|---|---|
0x0000–0x0FFF | 系统事件(核心框架事件) |
0x1000–0x1FFF | 硬件事件(物理按钮、IO 等) |
0x2000–0x2FFF | 网络事件(连接状态、数据接收等) |
0x3000–0x3FFF | XService 事件(数据变化等) |
0x4000–0x4FFF | RC 事件(数据变化等) |
0x5000–0x5FFF | UI 事件(数据变化等) |
0x8000–0xFFFF | 用户自定义事件(插件可动态注册) |
| 常量 | 值 | 描述 |
|---|---|---|
xplugin::SystemEventStart | 0x0000 | 系统事件区间起始符 |
xplugin::None | 0x0000 | 空事件 |
xplugin::HardEventStart | 0x1000 | 硬件事件区间起始符 |
xplugin::NetworkEventStart | 0x2000 | 网络事件区间起始符 |
xplugin::NetworkConnected | 0x2001 | 网络已连接 |
xplugin::NetworkDisconnected | 0x2002 | 网络已断开 |
xplugin::NetworkError | 0x2003 | 网络错误 |
xplugin::XServiceEventStart | 0x3000 | XService 事件区间起始符 |
xplugin::XServiceDataChange | 0x3001 | XService 节点数据变化 |
xplugin::RCEventStart | 0x4000 | RC 事件区间起始符 |
xplugin::RCPowerStatusChange | 0x4001 | 上电状态变化 |
xplugin::RCRunModelChange | 0x4011 | 手自动模式切换 |
xplugin::RCRunStart | 0x4021 | 程序启动运行 |
xplugin::RCRunStop | 0x4022 | 程序停止运行 |
xplugin::RCBeforeRunStart | 0x4023 | 程序启动运行前 |
xplugin::RCBeforeRunStop | 0x4024 | 程序停止运行前 |
xplugin::RCNotifyDataChange | 0x4031 | RC notify 数据变化 |
xplugin::UIEventStart | 0x5000 | UI 事件区间起始符 |
xplugin::UserEventStart | 0x8000 | 用户自定义事件区间起始符 |
xplugin::MaxEventType | 0xFFFF | 事件类型终止符 |
另请参阅 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 / SLOG | Debug / 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()。