目录
目录README.md

🚀 工业泛在场景下基于国产RISC-V的EtherNet/IP协议栈实现

Platform Protocol Language OS License

基于国产RISC-V硬件的工业级EtherNet/IP协议栈完整实现

本项目是为”操作系统开源创新大赛”设计的参赛作品,在国产RISC-V硬件平台(CH32V307VCT6)上,基于XiuOS嵌入式操作系统,实现了稳定可靠的EtherNet/IP工业以太网协议栈,支持Scanner-Adapter网络拓扑,可持续稳定运行超过24小时。


📚 项目概述

EtherNet/IP是一种基于标准以太网的工业通信协议,属于**CIP(Common Industrial Protocol)**协议家族,广泛应用于工业自动化中,用于PLC、机器人、传感器等现场设备之间的数据交互。

本项目的核心亮点

  • 完整的协议栈实现:实现了EtherNet/IP协议的核心功能
  • 双通信模式:支持基于UDP的隐式通信和基于TCP的显式通信
  • 多设备拓扑:支持1个Scanner + 2个Adapter的网络架构
  • 长期稳定运行:经过24小时+连续稳定性测试验证
  • 国产化方案:基于国产CH32V307 RISC-V芯片和XiuOS操作系统

🏗️ 项目结构

├── 📁 pro-os-ethernet-ip/         # 🎯 项目核心源代码
│   ├── APP_Framework/              # 应用框架层
│   │   ├── Applications/           # 应用程序
│   │   ├── Framework/              # 框架核心(含EtherNet/IP实现)
│   │   └── lib/                   # 第三方库
│   └── Ubiquitous/                 # XiuOS操作系统适配层
│       ├── XiZi_IIoT/             # 工业物联网版本
│       ├── RT-Thread_Fusion_XiUOS/ # RT-Thread融合版本
│       └── Nuttx_Fusion_XiUOS/    # NuttX融合版本
├── 📁 images/                     # README图片资源
├── 📁 video/                      # 🎬 功能演示视频
├── 📄 工业泛在场景下基于国产RISC-V的EtherNetIP支持.pptx  # 📊 项目介绍PPT
├── 📄 操作系统开源创新大赛项目功能说明书.pdf            # 📖 赛题设计思想总文档
├── 📄 演示视频.mp4                                      # 🎥 项目主演示视频
├── 📄 README.md                                         # 📋 本文档
└── 📄 赛题说明.md                                       # 📝 赛题要求说明

⭐ 核心特性

🔧 系统层面

  • 操作系统移植:XiuOS在CH32V307VCT6上成功启动运行
  • 串口调试:实时输出进程、线程、内存和存储设备状态信息
  • 网络稳定性:支持标准MTU的UDP/TCP通信,24小时+稳定收发

🌐 EtherNet/IP协议实现

  • 完整协议栈:实现EtherNet/IP工业应用层协议
  • 隐式通信:基于UDP实现高效的I/O数据交换
  • 显式通信:基于TCP实现可靠的消息传输和对象访问
  • 网络拓扑:支持1个Scanner + 多个Adapter的分布式架构
  • 设备发现:支持ListIdentity、ListServices、ListInterfaces等发现服务

🎛️ 工业应用支持

  • PLC通信演示:支持三菱、松下、永宏等主流PLC厂商
  • Web配置界面:提供直观的设备配置和监控界面
  • 多网络接口:支持以太网、4G、LoRa等多种通信方式

📋 项目实现成果

✅ 赛题要求达成情况

  1. ✅ 操作系统移植完成:XiuOS在CH32V307VCT6上成功启动,串口稳定输出系统状态信息
  2. ✅ 网络通信稳定:支持标准MTU的UDP/TCP通信,24小时+连续稳定收发验证
  3. ✅ EtherNet/IP协议实现
    • 完整实现工业应用层协议
    • 基于UDP的隐式(Implicit)通信
    • 基于TCP的显式(Explicit)通信
    • 支持1个Scanner + 2个Adapter网络拓扑
    • 系统持续稳定运行超过24小时

🔄 通信模式设计

隐式通信 (Implicit Communication)

  • 传输协议:UDP
  • 端口:2222 (默认)
  • 特点:高效、实时的I/O数据传输
  • 用途:周期性状态监控、传感器数据采集

显式通信 (Explicit Communication)

  • 传输协议:TCP
  • 端口:44818 (默认)
  • 特点:可靠的消息传输和对象访问
  • 用途:设备配置、参数设定、命令执行

🎥 功能演示视频

本项目提供了完整的功能演示视频,展示了:

  • AdapterList相关功能演示video/功能Adapter_*.mp4
  • ScannerList相关功能演示video/功能Scanner_*.mp4
  • 两板通信演示video/*通信验证成功.mp4
  • Hilsher验证功能演示video/Hilscher工具验证*.mp4
  • 主演示视频演示视频.mp4

🛠️ 开发环境与编译

📦 环境要求

  • 操作系统:Ubuntu 18.04+ (推荐)
  • 编译工具链riscv-none-embed-gcc (xPack GNU RISC-V Embedded GCC)
  • 目标硬件:CH32V307VCT6开发板
  • 调试工具:串口调试工具 (115200 8N1)

⚙️ 工具链安装

推荐使用xpm工具安装RISC-V工具链:

# 安装xpm (需要Node.js环境)
npm install -g xpm

# 安装RISC-V GCC工具链
xpm install --global @xpack-dev-tools/riscv-none-embed-gcc@8.2.0-3.1.1

🔧 编译步骤

1. 配置交叉编译工具链

编辑 pro-os-ethernet-ip/board/ch32v307vct6/config.mk,添加工具链路径:

export CROSS_COMPILE ?= /path/to/riscv-none-embed-gcc/bin/riscv-none-embed-

2. 配置系统功能

cd ./pro-os-ethernet-ip
make BOARD=ch32v307vct6 distclean
make BOARD=ch32v307vct6 menuconfig

在menuconfig中配置EtherNet/IP相关选项:

  • 选择设备角色 (Scanner 或 Adapter)
  • 配置网络参数
  • 使能相关功能模块

3. 编译固件

make BOARD=ch32v307vct6

编译成功后会生成:

  • XiZi-ch32v307vct6.elf - ELF格式固件
  • XiZi-ch32v307vct6.bin - 二进制固件

4. 清理编译文件(可选)

make BOARD=ch32v307vct6 distclean

🔥 固件烧写

支持多种烧写方式:

方式1:WCH-ISP工具 (推荐)

  1. 将BOOT0跳线到VCC
  2. 按下Reset键进入下载模式
  3. 使用WCHISPTool烧写.bin文件
  4. 烧写完成后恢复BOOT0跳线

方式2:Mounriver Studio IDE

直接在沁恒官方IDE中下载烧写

方式3:OpenOCD

🚀 快速上手指南

🔌 硬件准备

  1. CH32V307VCT6开发板 × 2-3块 (用于组建Scanner-Adapter网络)
  2. 以太网交换机 × 1台
  3. 网线 × 若干条
  4. USB数据线 × 若干条 (用于串口调试和固件下载)
  5. 串口调试工具 (推荐波特率: 115200 8N1)

⚙️ 系统配置

设备角色配置

通过menuconfig配置设备角色:

Scanner配置 (扫描器):

make BOARD=ch32v307vct6 menuconfig
# 选择: Application Framework → Connection → EtherNet/IP → Scanner Mode

Adapter配置 (适配器):

make BOARD=ch32v307vct6 menuconfig
# 选择: Application Framework → Connection → EtherNet/IP → Adapter Mode

配置界面

网络配置示例

  • Scanner设备: 192.168.1.100
  • Adapter设备1: 192.168.1.101
  • Adapter设备2: 192.168.1.102
  • 子网掩码: 255.255.255.0

📱 使用指南

🔧 Adapter (适配器) 操作

基础命令

在Adapter设备的串口终端(Lettershell)中执行:

命令 功能说明
test_adapter 启动设备发现服务,响应ListIdentity等发现命令
eipadapter 启动EIP服务,处理会话和连接请求

详细功能

  • 设备发现响应:自动响应网络中的设备发现请求
  • 会话建立:处理RegisterSession请求
  • 隐式I/O连接:支持周期性数据交换
  • 显式消息通信:支持CIP对象访问
  • 对象支持:Identity、Connection Manager、Assembly等

🛰️ Scanner (扫描器) 操作

设备发现命令

命令 功能说明 示例
scscan 广播发现所有EIP设备 scscan
scservices <IP> <超时ms> 查询设备支持的服务 scservices 192.168.1.101 5000
scinterfaces <IP> <超时ms> 查询设备网络接口信息 scinterfaces 192.168.1.101 5000

连接管理命令

命令 功能说明 示例
scconnect <IP> 建立TCP会话连接 scconnect 192.168.1.101
scdisconnect <IP> 断开TCP会话连接 scdisconnect 192.168.1.101
scopen_io <类型> 建立I/O连接
0=隐式, 1=显式
scopen_io 0
scclose_io <类型> 关闭I/O连接
0=隐式, 1=显式
scclose_io 0

数据交换命令

命令 功能说明 示例
scnewrtask 创建数据接收监听任务 scnewrtask
scdelrtask 删除数据接收任务 scdelrtask
scsend <数据> 发送16进制隐式I/O数据 scsend 01020304
scconfig_io <参数> 配置隐式I/O参数 scconfig_io 101 100 0 20 24 500000 500000
scget_attr <类>.<实例>.<属性> 获取对象属性 scget_attr 1 1 1

scconfig_io 参数说明

scconfig_io <o->t_inst> <t->o_inst> <cfg_inst> <o->t_size> <t->o_size> <o->t_rpi> <t->o_rpi_us>
  • o->t_inst: O→T实例号 (输出到目标)
  • t->o_inst: T→O实例号 (目标到输出)
  • cfg_inst: 配置实例号
  • o->t_size: O→T数据大小
  • t->o_size: T→O数据大小
  • o->t_rpi: O→T请求包间隔(μs)
  • t->o_rpi_us: T→O请求包间隔(μs)

🎯 典型使用场景

场景1: 设备发现与监控

  1. 启动Adapter服务

    test_adapter    # 启动设备发现
    eipadapter      # 启动EIP服务
  2. Scanner扫描设备

    scscan          # 发现网络中的EIP设备

场景2: 建立通信连接

  1. 建立会话

    scconnect 192.168.1.101
  2. 建立隐式连接

    scconfig_io 101 100 0 20 24 500000 500000
    scopen_io 0
  3. 启动数据监听

    scnewrtask

场景3: 数据交换测试

  1. 发送测试数据

    scsend 0102030405060708
  2. 读取设备属性

    scget_attr 1 1 1    # 读取Identity对象的厂商ID

📸 演示截图

Adapter功能演示

Adapter通信演示 Adapter设备响应Scanner的各种请求,包括设备发现、连接建立和数据交换

Scanner功能演示

Scanner通信演示 Scanner设备主动发现和连接Adapter,执行数据读写操作

🧪 测试验证

🔒 稳定性测试

  • 24小时连续运行测试:✅ 通过
  • 网络断线重连测试:✅ 自动恢复
  • 高频数据交换测试:✅ 无数据丢失
  • 多设备并发测试:✅ 支持多Adapter同时连接

⚡ 性能指标

  • 响应时间:< 10ms (LAN环境)
  • 数据吞吐量:支持1500字节MTU
  • 并发连接:支持多个Scanner-Adapter连接对
  • 内存占用:< 512KB (包含协议栈和应用)

🎛️ 兼容性验证

本项目已验证与以下工业设备的通信兼容性:

  • 三菱PLC系列:Q06H、Q03UDV (MC-3E协议)
  • 松下PLC系列:FPXHC40ET
  • 永宏PLC系列:FBs-24MCT2-AC

🎓 技术特色

💡 创新点

  1. 国产化全栈方案:从芯片到操作系统再到协议栈的完整国产化实现
  2. 轻量级设计:针对嵌入式环境优化的高效协议栈实现
  3. 模块化架构:支持多种操作系统适配(XiuOS、RT-Thread、NuttX)
  4. 工业级可靠性:24小时+连续稳定运行验证

🏆 技术优势

  • 📡 完整协议支持:全面支持EtherNet/IP规范要求的通信模式
  • 🚀 高性能实现:优化的网络栈和内存管理
  • 🔧 易于部署:提供完整的编译、烧写和配置工具链
  • 📱 直观操作:基于命令行的友好操作接口
  • 🎯 实用性强:提供了丰富的PLC通信演示应用

📚 参考资料

🤝 贡献指南

我们欢迎社区贡献!请遵循以下步骤:

  1. Fork本项目并创建您的功能分支
  2. 编写代码并确保通过所有测试
  3. 提交Pull Request并详细描述您的更改
  4. 等待Code Review并根据反馈进行修改

🔧 开发环境搭建

# 克隆仓库
git clone https://github.com/your-repo/ethernet-ip-riscv.git
cd ethernet-ip-riscv

# 安装依赖
./scripts/install-deps.sh

# 编译测试
make BOARD=ch32v307vct6 menuconfig
make BOARD=ch32v307vct6

📄 许可证

本项目基于MIT License开源协议,详情请参见LICENSE文件。

📞 联系我们

  • 项目维护者:西安电子科技大学 西天行者团队
  • 技术支持:通过Issue提问或发送邮件
  • 社区讨论:欢迎参与项目讨论
  • 邮箱hengG@stu.xidian.edu.cn

⭐ 如果这个项目对您有帮助,请给我们一个Star!⭐

Built with ❤️ for Industrial IoT Community

关于
604.5 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号