跳到主要内容

Java SDK 概述

开发 PROFINET IO Device 应用的 Java 类库。代码里 import com.darra.pns.service.PnSService;

安装

从 Maven Central 安装:

<dependency>
<groupId>xyz.darra</groupId>
<artifactId>darra-profinet-slave</artifactId>
<version>1.1.0</version>
</dependency>

也可从下载页下载 jar,或用安装目录 SDK\SDK_Java\ 里的副本。

环境

  • Windows 10 / 11 x64
  • JDK 11+
  • 已装 Darra Profinet Slave

快速开始

Start 之后把 I / Q 映射一次成结构体,然后一直用这个变量读写字段。结构体映射在过程映像上,源头变字段自己变;readStruct / writeStruct 是快照,拷出来的实例不会自己变。写 I 抛 PnSServiceException

总线周期由内核完成,不必自写周期循环,任意线程可同时用。Java 的 Structure 字段是托管缓存:改 outp 后要 write() 才进映像,读最新 inp 要 read()

import com.darra.pns.service.PnSService;
import com.darra.pns.service.PnSServiceException;
import com.sun.jna.Structure;
import com.sun.jna.Structure.FieldOrder;

@FieldOrder({"present", "recipe"})
class FromPlc extends Structure { // I:控制器 → 设备
public byte present;
public short recipe;
public FromPlc() { super(ALIGN_NONE); }
}

@FieldOrder({"ready", "busy"})
class ToPlc extends Structure { // Q:设备 → 控制器
public byte ready;
public byte busy;
public ToPlc() { super(ALIGN_NONE); }
}

try (PnSService device = new PnSService()) {
device.start();

// 映射一次
FromPlc inp = device.processData().inputsMapping(FromPlc.class);
ToPlc outp = device.processData().outputsMapping(ToPlc.class);

while (running) {
if (!device.connected())
continue;
inp.read(); // 过程映像 → 托管缓存
byte present = inp.present; // 读 I:总线刷新后自己变
outp.ready = 1;
outp.write(); // 写 Q:托管缓存 → 过程映像
}

device.stop();
} catch (PnSServiceException e) {
System.err.println(e.getMessage());
}

快照走 readStruct / writeStruct(实现 ProcessData.Packed)—— 拷出来的实例不会自己变。

安装包见 下载页。上手循环见 从 SDK 继续