跳到主要内容

C++ 特有语法糖

本页只介绍 PnSService C++ SDK 独有的便捷写法。它们 不是新功能,只是把已有入口包装成更顺手的 C++ 写法(ScopedStartProcessData().In()[i].AsInt16() 这类索引)。

可选,不用不影响标准入口 —— Connected() / Status() / ErrorCode()ReadInt16 / WriteInt16ProcessData().Read / ProcessData().Write 照常用。语法糖只是另一种写法。

头文件 —— #include "pns.hpp"ScopedStart 另加 #include "pns_sugar.hpp"。类型在 darra::pns


一、ScopedStart

进入调 Start(),离开调 Stop()。不 Close。析构不抛。不可拷贝、不可移动。

构造不抛:Start() 失败时 ok()falseactive()false,析构不会 Stop()。判断起没起来先查 ok(),失败码看 errorCode()

写法调用
标准 APIdevice.Start();device.Stop();
语法糖ScopedStart guard(device);
#include "pns.hpp"
#include "pns_sugar.hpp"
using namespace darra::pns;

int main()
{
PnSService device;
{
ScopedStart guard(device);
if (!guard.ok())
return 1;
device.WriteBool("Q0.0", true);
} // 离开时 Stop
return 0;
}

离开时不要 Stop,调 guard.release()

临时开一段 IO 用 ScopedStart,免漏 Stop()。一直跑就直接 Start()


二、过程数据索引自动转换

ProcessData().In()[i] / ProcessData().Out()[i] 从当前偏移按类型读写。读 I 用 In,写 Q 用 Out。完整属性表见 过程数据 · 自动转换

写法调用
标准 APIint16_t v = device.ReadInt16("IW2");
语法糖int16_t v = device.ProcessData().In()[2].AsInt16();
标准 APIdevice.WriteInt16("QW2", 123);
语法糖device.ProcessData().Out()[2].AsInt16(123);
uint8_t i0 = device.ProcessData().In()[0].Content();
int16_t iw = device.ProcessData().In()[2].AsInt16();
float f = device.ProcessData().In()[8].AsFloat();

device.ProcessData().Out()[0].Content(0x11);
device.ProcessData().Out()[2].AsInt16(123);
device.ProcessData().Out()[8].AsFloat(1.5f);

In()[i]PnSException(I 只读)。

何时用

  • 就几个字段:不想为几个字去建结构体。
  • 字段多:还是 ProcessData().Read / ProcessData().Write

能力清单

分组内容
作用域启停ScopedStart:进入 Start(),离开 Stop()release() / active()
过程数据自动转换Content / AsInt8 / AsUInt8 / AsInt16 / AsUInt16 / AsInt32 / AsUInt32 / AsInt64 / AsUInt64 / AsFloat / AsDouble / AsBool / GetBit / SetBit