8 个版本
0.1.0 | 2024 年 7 月 28 日 |
---|---|
0.0.7 | 2024 年 7 月 17 日 |
0.0.4 | 2024 年 6 月 28 日 |
#609 在 嵌入式开发
244 每月下载次数
在 3 个软件包中使用了 (2 直接)
29KB
623 行
RFlow
为嵌入式 Rust 应用程序和 PLC 提供类似聊天的 HMI
RFlow 是 RoboPLC 项目的组成部分。
想法
许多嵌入式应用程序和 PLC 程序没有,也不应该有人机界面。
然而,有时有一个简单的方式来与应用程序交互是非常有用的,例如用于调试目的或在生产中有一个基本的紧急接口。
RFlow 以最轻量级的方式在应用程序(服务器)及其客户端之间提供类似聊天的接口,不会影响应用程序的实时运行流程,并消耗最少的系统资源。
RFlow 协议 完全基于文本,可以与任何特殊的客户端一起使用。
MSRV: 1.68.0
客户端
-
RFlow Chat - 一个专门的 RFlow 聊天客户端(终端)。
-
使用
Client
API 构建的定制客户端。 -
任何终端 TCP 客户端,例如
telnet
,nc
。
一个非常基本的例子
use std::{thread, time::Duration};
use rtsc::time::interval;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let data_channel = rflow::take_data_channel()?;
thread::spawn(move || {
rflow::serve("127.0.0.1:4001").expect("failed to start server");
});
thread::spawn(move || {
for _ in interval(Duration::from_secs(5)) {
rflow::send("ping".to_string());
}
});
for data in data_channel {
println!("Received data: {}", data);
rflow::send(format!("command accepted: {}", data));
let command = data.trim();
if command == "quit" {
break;
}
}
Ok(())
}
锁定安全性
注意:异步客户端仅使用 parking_lot_rt
锁定。
默认情况下,软件包(服务器和客户端模块)使用 parking_lot 进行锁定。对于实时应用程序,以下功能可用
-
locking-rt
- 使用 parking_lot_rt 软件包,它是 parking_lot 的无自旋分支。 -
locking-rt-safe
- 使用 rtsc 优先级继承锁定,不受优先级反转的影响(仅限 Linux)。
注意:要切换锁定策略,请禁用软件包默认功能。
关于
RFlow是RoboPLC项目的组成部分。
依赖关系
~3-12MB
~139K SLoC