C# SDK 概述
开发 PROFINET IO Device 应用的 .NET 类库。代码里 using Darra.PnS;。
安装
从 NuGet 安装:
dotnet add package Darra.Profinet.Slave
也可从下载页下载 nupkg,或用安装目录 SDK\SDK_CSharp\ 里的副本。
环境
- Windows 10 / 11 x64
- .NET Standard 2.0(.NET Framework 4.6.1+ / .NET 6+)
- 已装 Darra Profinet Slave
快速开始
Start 之后把 I / Q 映射一次成结构体,然后一直用这个变量读写字段。结构体映射在过程映像上,源头变字段自己变(I 侧返回 ref readonly T 只读 —— 控制器每周期整段覆盖,写 I 静默无效;Q 侧返回 ref T 可写)。Read / Write 是快照,拷出来的实例不会自己变。写 In[i] 不支持。
总线周期由内核完成,不必自写周期循环,任意线程可同时用。
using System.Runtime.InteropServices;
using Darra.PnS;
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct FromPlc // I:控制器 → 设备
{
public byte Present;
public short Recipe; // 线上大端:布局对上即可,取值走 Read(ref rx)
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct ToPlc // Q:设备 → 控制器
{
public byte Ready;
public byte Busy;
}
using (var device = new DarraPnS())
{
PnSErrorCode rc = device.Start();
if (rc != PnSErrorCode.Success)
return;
// 映射一次
ref readonly FromPlc inp = ref device.ProcessData.InputsMapping<FromPlc>();
ref ToPlc outp = ref device.ProcessData.OutputsMapping<ToPlc>();
while (running)
{
if (!device.Connected)
continue;
byte present = inp.Present; // 读 I:总线刷新后自己变
outp.Ready = 1; // 写 Q:直接落过程映像
}
device.Stop();
}
多字节字段是 PROFINET 网络大端(线上字节序):直接当宿主 short / int 读会字节颠倒,要宿主序数值走 Read / Write(大端编解码)。
安装包见 下载页。上手循环见 从 SDK 继续。类结构(ProcessData / Events / Diagnostics)见 DarraPnS。