跳到主要内容

快速开始

5 步跑通从站:装驱动 → 启服务 → GUI 生成 GSDML → TIA 导入 → IO 读写

第 1 步:安装

在目标机(Windows 10/11 x64,管理员权限)运行安装包:

安装包/安装包.exe

安装内容:

  • 驱动 → 系统驱动目录,NDIS 协议绑定(安装包自动执行;手动重装:netcfg -l <inf> -c p -i <协议名>
  • 服务 Darra.Pnet.Service → Windows 服务,加载 DarraPnet.dll(P-Net 核心)
  • GUI Darra.Pnet.GUI、6 语言 SDK、示例与文档 → C:\DARRA\Profinet_Slave

第 2 步:启动服务

# 安装服务(SCM)
sc.exe create DarraPnetService binPath= "C:\DARRA\Profinet_Slave\Service\Darra.Pnet.Service.exe"

# 启动
sc.exe start DarraPnetService

服务加载 appsettings.json(网卡 / 站点名 / 周期 / XML 路径),并把运行状态写入 C:\ProgramData\Darra\Pnet\status.json。确认状态:

# 服务内置 HTTP API(端口 18840 固定)查询运行态
Invoke-RestMethod http://127.0.0.1:18840/api/status

第 3 步:GUI 生成 GSDML

启动 GUI,完成 4 项配置后输出两个文件:

  1. 设备配置:站点名 / IP / 设备名(DeviceView
  2. 槽位配置:槽位 / 子模块 / 模块标识(SlotView
  3. 过程数据映射:输入输出区字节布局(IoView
  4. 报警配置:报警定义(AlarmView

点击「导出」,生成:

文件用途
device.gsdml设备描述,给 TIA Portal 导入(GsdmlWriter.cs 输出)
device.xml运行配置,给 Service 加载(ConfigWriter.cs 输出)

第 4 步:TIA Portal 导入

  1. 打开 TIA Portal(V15 及以上)→ 新建项目
  2. 「选项」→「管理 GSD 文件」→ 添加 device.gsdml(或放入 GSD 目录)
  3. 设备视图 → 从硬件目录找到 Darra PNET Slave 拖入网络
  4. 分配设备名(需与 GUI 中站点名一致)、IP、IO 控制器
  5. 编译 → 下载到 PLC 控制器

第 5 步:IO 读写(C# 示例,SDK 单一入口)

SDK 为 ETH 式单一入口 DarraPnet:连接服务模式(推荐)经服务 HTTP API(端口 18840 固定)转发,由服务承载从站运行;IO 为地址化读写(西门子风格 I/Q/M/DB 地址)。

using DarraPnet.Pnet;

// 1. 连接服务模式(经服务 HTTP 18840 转发,由服务承载从站运行)
using (DarraPnet.Pnet.DarraPnet pnet = DarraPnet.Pnet.DarraPnet.Connect("127.0.0.1"))
{
// 2. 启动从站(POST /api/start,由服务启动从站)
if (pnet.Start() != PnetErrorCode.Success)
{
Console.WriteLine("启动失败: " + pnet.LastServiceError);
return;
}

// 3. 地址化读写:
// I 区(输入面,设备→控制器):应用生产数据,Write* 发送
pnet.WriteBool("I0.0", true); // 写输入位(如状态字/诊断值)
pnet.WriteInt16("IW2", counter); // 写输入字(大端序)

// Q 区(输出面,控制器→设备):应用消费数据,Read* 读取
pnet.ReadInt16("QW0", out short cmd); // 读输出字(如启动/停止命令字)
pnet.ReadBool("Q0.0", out bool startCmd); // 读输出位

// 4. 读取当前从站状态(GET /api/status 映射)
var state = pnet.State; // PnetState 枚举
}
// 5. Dispose 自动 Stop(POST /api/stop,幂等)

正式部署用 DarraPnet.LoadConfig(@"C:\Darra\Profinet\device.xml")(native 直连)加载 GUI 导出的运行配置 XML,或 DarraPnet.Connect(host, 18840) 走服务模式(见 C# API 参考)。

其他语言

  • C / C++PnetDevice(native 直连)/ PnetService(服务模式,WinHTTP 转发 18840)
  • JavaPnetDevice 创建 / start() / 槽位 IO
  • PythonPnetDevice() 创建 / configure() / start() / slave.io 槽位读写
  • RustDevice::open() / load_config() / start() / io() 槽位读写

验证清单

判据
驱动绑定netcfg -q <协议名> 有输出,Get-NetAdapterBinding 显示已启用
服务运行sc.exe query DarraPnetService 为 RUNNING,18840 API 返回 "state": "..."
GSDMLXML well-formed,含 ProfileBody / DeviceIdentity / ModuleList 节点
TIA 识别硬件目录出现 Darra PNET Slave,可分配设备名与 IP
IO 读写控制器写输出区 → SDK ReadInt16("QW0") 读到;SDK WriteInt16("IW2") 写输入区 → 控制器过程映像收到
报警PnetAlarm.SendProcessAlarm() 后控制器诊断缓冲出现对应报警条目

常见问题

现象处理
服务启动失败(配置加载错误)检查 device.xml 是否与 GUI 输出一致,重跑「第 3 步」导出
TIA 找不到 GSDML 设备确认 GSD 文件已添加(管理 GSD 文件),或把文件放入 C:\Program Files (x86)\Siemens\Automation\...\GSD\ 后重启 TIA
通信建立但 IO 无数据确认设备名与 IP 与 TIA 中分配一致;检查槽位子模块是否与 GSDML 声明一致
周期抖动偏大RT Class 1 常规周期为软实时;若需更小抖动,缩短周期配置或核对网卡驱动(不支持 IRT)

相关