8 个版本

0.1.0 2024 年 7 月 28 日
0.0.7 2024 年 7 月 17 日
0.0.4 2024 年 6 月 28 日

#609嵌入式开发

Download history 163/week @ 2024-06-17 229/week @ 2024-06-24 177/week @ 2024-07-01 31/week @ 2024-07-08 258/week @ 2024-07-15 50/week @ 2024-07-22 136/week @ 2024-07-29 31/week @ 2024-08-05 24/week @ 2024-08-12

244 每月下载次数
3 个软件包中使用了 (2 直接)

Apache-2.0

29KB
623

RFlow crates.io 页面 docs.rs 页面

为嵌入式 Rust 应用程序和 PLC 提供类似聊天的 HMI

RFlow 是 RoboPLC 项目的组成部分。

想法

许多嵌入式应用程序和 PLC 程序没有,也不应该有人机界面。

然而,有时有一个简单的方式来与应用程序交互是非常有用的,例如用于调试目的或在生产中有一个基本的紧急接口。

RFlow 以最轻量级的方式在应用程序(服务器)及其客户端之间提供类似聊天的接口,不会影响应用程序的实时运行流程,并消耗最少的系统资源。

RFlow 协议 完全基于文本,可以与任何特殊的客户端一起使用。

MSRV: 1.68.0

客户端

  • RFlow Chat - 一个专门的 RFlow 聊天客户端(终端)。

  • 使用 Client API 构建的定制客户端。

  • 任何终端 TCP 客户端,例如 telnetnc

一个非常基本的例子

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