跳到主要内容

DLL 版本信息

EtherCATMaster 提供 DLL 库的版本信息和元数据查询,用于诊断、日志记录和兼容性检查。

通过 EtherCATMaster::dll_version()darra_ethercat::statics::version_info 访问。

版本信息属性

dll_version()

pub fn dll_version() -> Option<(u16, u16, u16, u16)>

获取 DLL 版本信息,返回 (major, minor, patch, build) 元组。DLL 未加载时返回 None

返回值:

  • Option<(u16, u16, u16, u16)> — 版本号元组 (主版本, 次版本, 修订号, 构建号)

示例:

use darra_ethercat::EtherCATMaster;

if let Some((major, minor, patch, build)) = EtherCATMaster::dll_version() {
println!("DLL 版本: {}.{}.{}.{}", major, minor, patch, build);
}

version_info::dll_version()

pub fn dll_version() -> Option<DllVersion>

通过模块级函数获取完整的 DLL 版本信息结构体,包含构建日期。

返回值:

  • Option<DllVersion> — 完整版本信息结构

相关结构:

pub struct DllVersion {
pub major: u16, // 主版本号
pub minor: u16, // 次版本号
pub patch: u16, // 修订号
pub build: u16, // 构建号
pub build_date: String, // 构建日期
}

示例:

use darra_ethercat::statics::version_info;

if let Some(ver) = version_info::dll_version() {
println!("DLL: {}.{}.{}.{}", ver.major, ver.minor, ver.patch, ver.build);
println!("构建日期: {}", ver.build_date);
}

dll_checksum()

pub fn dll_checksum() -> Option<String>

获取 DLL 的唯一识别码。

返回值:

  • Option<String> — 5 字符识别码,DLL 未加载时返回 None

示例:

if let Some(checksum) = EtherCATMaster::dll_checksum() {
println!("DLL 校验和: {}", checksum);
}

// 用于唯一标识 DLL 版本
if let Some((major, minor, patch, build)) = EtherCATMaster::dll_version() {
if let Some(checksum) = EtherCATMaster::dll_checksum() {
let unique_id = format!("{}.{}.{}.{}-{}", major, minor, patch, build, checksum);
println!("唯一标识: {}", unique_id);
}
}

version_info::version()

pub fn version() -> String

获取 SDK 版本字符串。

返回值:

  • String — SDK 版本号

示例:

use darra_ethercat::statics::version_info;

let sdk_ver = version_info::version();
println!("SDK 版本: {}", sdk_ver);

完整示例

应用程序日志

在日志中记录 DLL 版本信息:

use darra_ethercat::EtherCATMaster;
use darra_ethercat::statics::version_info;

fn main() {
// 启动时记录版本信息
println!("=== Darra EtherCAT Master ===");
if let Some((major, minor, patch, build)) = EtherCATMaster::dll_version() {
println!("DLL 版本: {}.{}.{}.{}", major, minor, patch, build);
}
if let Some(ver) = version_info::dll_version() {
println!("构建日期: {}", ver.build_date);
}
if let Some(checksum) = EtherCATMaster::dll_checksum() {
println!("校验和: {}", checksum);
}
println!("SDK 版本: {}", version_info::version());
println!("============================");
}

版本兼容性检查

确保应用程序与 DLL 版本兼容:

use darra_ethercat::EtherCATMaster;

fn check_compatibility() -> bool {
let (major, minor, _, _) = match EtherCATMaster::dll_version() {
Some(v) => v,
None => {
println!("错误: DLL 未加载");
return false;
}
};

// 要求 v1.0 或更高版本
if major < 1 {
println!("错误: DLL 版本过低 (v{}.{}), 需要 v1.0+", major, minor);
return false;
}

println!("DLL 版本兼容: v{}.{}", major, minor);
true
}

诊断信息收集

生成诊断报告:

use darra_ethercat::EtherCATMaster;
use darra_ethercat::statics::version_info;

fn generate_report() -> String {
let mut report = String::new();
report.push_str("=== 系统诊断报告 ===\n\n");
report.push_str("DLL 信息:\n");

if let Some((major, minor, patch, build)) = EtherCATMaster::dll_version() {
report.push_str(&format!(" 版本: {}.{}.{}.{}\n", major, minor, patch, build));
}
if let Some(ver) = version_info::dll_version() {
report.push_str(&format!(" 构建: {}\n", ver.build_date));
}
if let Some(checksum) = EtherCATMaster::dll_checksum() {
report.push_str(&format!(" 校验和: {}\n", checksum));
}
report.push_str(&format!(" SDK: {}\n", version_info::version()));

report
}

唯一标识符生成

为日志文件或会话生成唯一标识符:

use darra_ethercat::EtherCATMaster;
use std::time::SystemTime;

fn create_session_id() -> String {
let checksum = EtherCATMaster::dll_checksum().unwrap_or_else(|| "UNKNOWN".to_string());
let timestamp = SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.map(|d| d.as_secs())
.unwrap_or(0);
format!("SESSION_{}_{}", checksum, timestamp)
}

注意事项

版本管理

在生产环境中,建议记录 DLL 版本信息到应用程序日志,便于问题追溯和版本管理。

校验和用途

dll_checksum() 是版本唯一标识码,主要用于快速区分不同构建版本,不应用于安全验证。

相关功能

版本信息常用于主站初始化时的兼容性检查,以及错误处理中的日志记录。