Rust SDK 概述
开发 PROFINET IO Device 应用的 crate。代码里 use darra_pns::PnSService;。
安装
从 crates.io 安装:
cargo add darra-profinet-slave
也可从下载页下载 crate,或用安装目录 SDK\SDK_Rust\ 里的副本。
环境
- Windows 10 / 11 x64
- Rust 1.70+(edition 2021)
- 已装 Darra Profinet Slave
快速开始
Start 之后 inputs_mapping / outputs_mapping 映射一次,然后一直用这个引用读写字段。映射一次,结构体映射在过程映像上,源头变字段自己变;read_struct / write_struct 是快照,拷出来的实例不会自己变。写 I 返回 ServiceError::OutputReadOnly。
总线周期由内核完成,不必自写周期循环,任意线程可同时用。
use darra_pns::{PnSService, ServiceResult};
#[repr(C, packed)]
struct FromPlc { present: u8, recipe: i16 } // I:控制器 → 设备
#[repr(C, packed)]
struct ToPlc { ready: u8, busy: u8 } // Q:设备 → 控制器
fn main() -> ServiceResult<()> {
let device = PnSService::new();
device.start()?;
// 映射一次
let inp = unsafe { device.process_data().inputs_mapping::<FromPlc>()? };
let outp = unsafe { device.process_data().outputs_mapping::<ToPlc>()? };
while running {
if !device.connected() {
continue;
}
let present = inp.present; // 读 I:总线刷新后自己变
outp.ready = 1; // 写 Q:直接落过程映像
let _ = present;
}
device.stop()?;
Ok(())
}