跳到主要内容

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(())
}

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