1 个不稳定版本
0.1.3 | 2024年4月16日 |
---|
#15 in #catalog
91KB
2K SLoC
IODD 引擎
此仓库包含 IoDD 引擎的实现,具有解析命令行界面 (CLI) 和目录系统。IODD 引擎旨在简化互联网络中数字设备之间的交互和管理。
它还包括 IFM IoTCore 的客户端实现。
解析 CLI 提供用户友好的界面来执行命令和查询,使得与 IoDD 引擎的通信更加高效。此引擎仅针对 IODD 的 1.1 版本。
目录:- 存储关于 VendorId、DeviceId、Productname 和相应的 IODD Zip 文件的信息。
引擎:- 允许解析 PDIn 和变量的设置。实现了 ObserverMenu 和 ParameterMenu。
Cli
- 允许基于 CLI 与 IoDD 传感器交互
IoTCoreConnect:- 与 IFM IotCore 交互的客户端
此代码采用 Apache 2.0 许可证。
其他必需的文件 标准定义 手动放入 /data/specs 中。
请参阅 CLI 获取有关如何使用库的更多信息。此库已与多个 io-link 设备进行了测试。
示例输出
供应商:310,产品名称:SD1540,设备:872 HexData:0000000000000000FE00079EFE0000000300
名称:总计数器,描述:流量。该值等于自上次重置以来的当前消耗量,值:0.0,单位:m³
名称:流量,描述:当前流量,值:0.0,单位:m³/h
名称:温度,描述:当前温度,值:19.5,单位:°C
名称:压力,描述:当前压力,值:0.0,单位:bar
名称:设备状态,描述:当前设备状态,过程数据通道中 [设备状态,索引 36] 的参数的一个副本,值:0.0
名称:OUT2,描述:数字信号 [OUT2] 的当前状态,值:"关闭"
名称:OUT1,描述:数字信号 [OUT1] 的当前状态,值:"关闭"
CLI 示例
从设备读取当前值
ioddcli eval --ip 192.168.56.89 --port 1
按索引读取设备变量
ioddcli read-parameter 192.168.56.89 2 551 0
列出所有变量
ioddcli list-variable --vendorid 310 --deviceid 706 --productname TN2405 --accessrights rw
按名称(id)显示变量
ioddcli variable --vendorid 310 --deviceid 706 --productname TN2405 --id V_diS
从I/O设备读取参数
cli read-parameter --ip 192.168.56.89 --port 2 --index 551 --subindex 0
编码变量
ioddcli encode-variable --vendorid 310 --deviceid 706 --productname TN2405 --id V_diS --param false, true, 4
设置参数
cargo run set-parameter --ip 192.168.56.89 --port 2 --index 552 --subindex 0 --hexdata 4400
将原始值转换为十六进制
ioddcli encode-variable --vendorid 310 --deviceid 706 --productname TN2405 --id V_uni --param "0" 或 ioddcli encode-variable --vendorid 310 --deviceid 706 --productname TN2405 --id V_diS --param "true, false, 4"
读取菜单
cargo run get-menu --vendorid 310 --deviceid 706 --productname TN2405 --role observer --menu parameter
示例
let catalog = Catalog::new_with_db(None);
let (drivername,files) = catalog.queryfordriver(*deviceid, productname.to_owned(), *vendorid).await;
let p = Parser::new(drivername, files);
let e = Engine::new(&p.iodevice, super::super::LANGLOCALE);
println!("HexData: {}", hex_data);
let datapoints = match e.parse(hex_data){
Ok(x) => x,
Err(err) => {panic!("Error: {:?}", err)}
};
for h in entries {
println!(
"Name: {}, Desc: {}, Value: {}{}",
h.name,
h.description,
h.value,
if !h.unit.is_empty() {
format!(", Unit: {}", h.unit)
} else {
String::new() // Empty string if unit is empty
}
);
}
待办事项
- 在打印PDIN之前从设备读取变量。例如,设备可能被设置为华氏度而不是摄氏度
- 进行CRC32检查 - 如果可能的话
- 更新Github Actions
- 更多文档
- 添加更多编码数据类型
请注意:在发生任何潜在的版权侵权事件时,我们恳请您在采取任何进一步行动之前,请联系相关内容的所有者或管理员。通过尊重和建设性的沟通解决此类问题至关重要,以确保任何担忧都能得到妥善处理和解决,符合适用的法律和法规。我们首先联系内容所有者,旨在培养一种合作的方法来解决问题,同时维护知识产权的完整性。感谢您对此事的谅解与合作。
依赖关系
~33–47MB
~551K SLoC