C++ SDK 概述
开发 PROFINET IO Device 应用的 header-only C++17 类库。入口类型 PnSService。头文件在下载页或安装目录 SDK\SDK_Cpp\。代码里 #include "pns.hpp",using namespace darra::pns;。
环境
- Windows 10 / 11 x64
- C++17
- 已装 Darra Profinet Slave
快速开始
Start 之后把 I / Q 映射一次成结构体,然后一直用这个变量读写字段。映射一次,结构体映射在过程映像上,源头变字段自己变(I 侧返回 const T& 只读 —— 控制器每周期整段覆盖,写 I 静默无效;Q 侧返回 T& 可写)。Read / Write 是快照,拷出来的实例不会自己变。写 In()[i] 抛 PnSException。
总线周期由内核完成,不必自写周期循环,任意线程可同时用。
#include "pns.hpp"
using namespace darra::pns;
#pragma pack(push, 1)
struct FromPlc // I:控制器 → 设备
{
uint8_t Present;
uint8_t Trigger;
int16_t Recipe;
};
struct ToPlc // Q:设备 → 控制器
{
uint8_t Ready;
uint8_t Busy;
uint8_t Ok;
uint8_t Ng;
};
#pragma pack(pop)
int main()
{
PnSService device;
if (!device.Start())
return 1;
// 映射一次
const FromPlc& inp = device.ProcessData().InputsMapping<FromPlc>();
ToPlc& outp = device.ProcessData().OutputsMapping<ToPlc>();
while (running)
{
if (!device.Connected())
continue;
uint8_t present = inp.Present; // 读 I:总线刷新后自己变
outp.Ready = 1; // 写 Q:直接落过程映像
(void)present;
}
device.Stop();
return 0;
}
Start() 失败返回 false 并写 LastError(),不抛。读写 IO 失败抛 PnSException。Start() 成功不等于主站已经在换数据,看 device.Connected()。
配置工具可导出同口径示例:
