快速开始
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 项配置后输出两个文件:
- 设备配置:站点名 / IP / 设备名(
DeviceView) - 槽位配置:槽位 / 子模块 / 模块标识(
SlotView) - 过程数据映射:输入输出区字节布局(
IoView) - 报警配置:报警定义(
AlarmView)
点击「导出」,生成:
| 文件 | 用途 |
|---|---|
device.gsdml | 设备描述,给 TIA Portal 导入(GsdmlWriter.cs 输出) |
device.xml | 运行配置,给 Service 加载(ConfigWriter.cs 输出) |
第 4 步:TIA Portal 导入
- 打开 TIA Portal(V15 及以上)→ 新建项目
- 「选项」→「管理 GSD 文件」→ 添加
device.gsdml(或放入 GSD 目录) - 设备视图 → 从硬件目录找到 Darra PNET Slave 拖入网络
- 分配设备名(需与 GUI 中站点名一致)、IP、IO 控制器
- 编译 → 下载到 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) - Java:
PnetDevice创建 /start()/ 槽位 IO - Python:
PnetDevice()创建 /configure()/start()/slave.io槽位读写 - Rust:
Device::open()/load_config()/start()/io()槽位读写
验证清单
| 项 | 判据 |
|---|---|
| 驱动绑定 | netcfg -q <协议名> 有输出,Get-NetAdapterBinding 显示已启用 |
| 服务运行 | sc.exe query DarraPnetService 为 RUNNING,18840 API 返回 "state": "..." |
| GSDML | XML 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) |