跳到主要内容

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。