跳到主要内容

初始化

推荐方式

无参构造 PnSService,调一次 Start(),循环里写 Q、读 I。
先装好 Darra Profinet Slave。站名和网卡在配置工具里设好,构造不用传。不要每个周期构造 / Close()

构造函数

PnSService()

PnSService();

新建从站实例。服务没起来也能构造,不抛;这只是拿到对象,还没启用 IO,主站也还没连上。

示例:

PnSService device;
if (!device.Start())
return 1;

while (running)
{
// 写 Q、读 I 写在这里
}

device.Stop();

对象活着的时候写循环。Start 一次就够。每个周期 Close() 会把 Q 清掉,下一圈再写等于输出被扔掉。析构会自动 Close()

启停

Start()

bool Start();

启用 IO。成功返回 true。成功不等于主站已经在换数据,那要看 Connected()。已经 Start 且还没 Stop,再调一次直接返回 true

失败写 LastError(),返回 false,不抛。另一个实例已经在跑同样返回 false,原因也写在 LastError() 里(契约见 SDK 连接契约)。

示例:

if (!device.Start())
{
printf("%s\n", LastError().c_str());
return 1;
}

Stop()

void Stop();

停用 IO。实例还在,可以再 Start()。没 Start 过或已经 Stop,再调一次没事。失败写 LastError(),不抛。

彻底放开用 Close(),不是 Stop()

示例:

device.Stop();

资源释放

Close()

void Close();

还在跑就先 Stop,再放开实例。Q 会被清掉(清的是 Q 的净荷窗:PPM 输出区前 3 字节 IOPS 前缀不动);I 留着,等下一个程序。幂等。析构会自动调用,通常不用手调。放开之后这个实例不能再用。

停 IO 用 Stop()Stop 之后实例还在,可以再 Start

示例:

device.Close();