< 返回版块

hanHHHyU 发表于 2025-08-02 16:28

Tags:工业控制

🦀 Rust 实现三菱 PLC MC 协议(二进制 3E 帧)通信

最近我写了一个用 Rust 实现三菱 PLC MC 协议 3E 帧(二进制格式)通信的库,支持 bit/word 的读写。

📦 项目地址:tokio-mc GitHub 仓库


✅ 支持特性

  • ✅ 支持三菱 3E 协议(二进制格式)
  • ✅ 支持读写位(bit)/字(word)数据等数据
  • ✅ 支持异步(基于 tokio)
  • ✅ 支持 Keyence 和 Mitsubishi PLC(仿三菱通信)
  • ✅ 提供模拟服务器,方便测试
  • ✅ 架构参考 tokio-modbus,面向通用 PLC 通信而设计

🔧 架构设计与扩展性

该库使用模块化结构设计,底层通信解耦,后续可以轻松支持其他品牌 PLC(如松下):

  • 通信帧编码器/解码器可插拔
  • 寄存器地址支持抽象封装

👉 计划支持目标:

  • 松下 PLC 通信适配
  • 扩展支持 ASCII 格式帧
  • 提供 Python / C# / C++ FFI 调用封装

🚀 快速上手

use tokio_mc::{
    client::tcp::*,
    frame::Model,
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut context = connect("127.0.0.1:5000".parse()?).await?;
    context.set_plc_model(Model::Mitsubishi); // or Model::Keyence

    // 写入 word 数据
    context.write_u8s("D100", &[0x12, 0x34]).await?;

    // 读取 bit 状态
    let bits = context.read_bits("M0", 8).await?;
    println!("Bits: {:?}", bits);

    Ok(())
}

Rust 在工业控制方向几乎没看到有三菱通信协议的实现(Modbus 倒是很多)

想做成一个 跨平台 + 跨语言 的通用 PLC 通信库,提供 FFI(Python/C#/C++)接口。

🎯 项目初衷 -为工业自动化通信打造一个高性能、高可扩展性的通用库

-填补 Rust 在 PLC 通信协议方面的空白

💬 欢迎交流 如果你从事工业控制、PLC 通信、异步架构或希望参与开源协议栈的开发,欢迎:

🔧 issue / PR

🌟 Star 支持

🧵 参与讨论

评论区

写评论

还没有评论

1 共 0 条评论, 1 页