Method 方法 (C)
OPC UA Method 节点是服务端暴露的 RPC 接口. 通过 DarraUa_Session_Call(...) 调用.
一分钟示例
#include <darra_opcua/darra_opcua.h>
DarraUa_NodeId obj, mtd;
/* 解析 "ns=2;s=Calculator" / "ns=2;s=Calculator.Add" 到 NodeId 结构 (DarraUa_NodeId_ParseString) */
DarraUa_Variant* args[2];
args[0] = DarraUa_Variant_New(); DarraUa_Variant_SetInt32(args[0], 3);
args[1] = DarraUa_Variant_New(); DarraUa_Variant_SetInt32(args[1], 4);
DarraUa_Variant* outs = NULL;
uint32_t out_n = 0;
DarraUa_Status method_status = 0;
DarraUa_Status st = DarraUa_Session_Call(
h, &obj, &mtd,
(const DarraUa_Variant* const*)args, 2,
&outs, &out_n, &method_status);
/* 释放入参 */
DarraUa_Variant_Delete(args[0]);
DarraUa_Variant_Delete(args[1]);
/* 用出参 */
if (DARRA_UA_STATUS_IS_GOOD(st) && DARRA_UA_STATUS_IS_GOOD(method_status)) {
for (uint32_t i = 0; i < out_n; ++i) {
int32_t r = 0;
DarraUa_Variant_GetInt32(&outs[i], &r);
printf("out[%u] = %d\n", i, (int)r);
}
}
/* 释放出参 (一次性) */
DarraUa_VariantArray_Delete(&outs, out_n);