跳到主要内容

初始化

推荐方式

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

构造函数​

DarraPnS()​

public DarraPnS()

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

示例:

using (var device = new DarraPnS())
{
PnSErrorCode rc = device.Start();
if (rc != PnSErrorCode.Success)
return;

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

device.Stop();
}

using 包住整个程序寿命,循环写在 using 里面。Start 一次就够。每个周期 Dispose 会把 Q 清掉,下一圈再写等于输出被扔掉。

Connect()​

public static DarraPnS Connect()

无参 Connect() 是 new DarraPnS() 的旧代码别名 —— 同一个构造,同一个实例,不占连接门,也不代表主站已连上。老代码里见到它不用改;新代码写 new DarraPnS() 就好。

注意它是静态方法:写成 DarraPnS.Connect(),不是 device.Connect()。

示例:

using (var device = DarraPnS.Connect())   // 等价 new DarraPnS()
{
device.Start();
}

别和 Connect(host, port) 混:那个重载是 WebAPI(控制面)入口,会去探测 GET /api/info,不占实时连接门,也不做实时过程数据。要实时读写就 new DarraPnS()。

启停​

Start()​

public PnSErrorCode Start()

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

失败写 LastError,一般不抛。已释放返回 InvalidHandle;服务没起来返回 ServiceUnreachable;启动失败返回 NativeError。另一个实例已经在跑,抛 InvalidOperationException,并把 PnSErrorCode.Busy 记成最近错误码(契约见 SDK 连接契约)。

示例:

PnSErrorCode rc = device.Start();
if (rc != PnSErrorCode.Success)
{
Console.WriteLine(DarraPnS.LastError);
return;
}

Stop()​

public void Stop()

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

彻底放开用 Dispose(),不是 Stop()。

示例:

device.Stop();

资源释放​

Dispose()​

public void Dispose()

还在跑就先 Stop,再放开实例。Q 会被清掉(清的是 Q 的净荷窗:PPM 输出区前 3 字节 IOPS 前缀不动);I 留着,等下一个程序。幂等,实现 IDisposable。放开之后这个实例不能再用,要重新 new DarraPnS()。

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

示例:

device.Dispose();