Freemodbus

简介

Freemodbus 是一款开源的 Modbus 协议栈,由armink大神移植。同时支持主机和从机的功能。

FreeModbus 主机源码是开源的,这使得在嵌入式产品中实现Modbus主机功能变得简单。

特性

  • 新增加的主机源码与原有从机的风格及接口保持一致
  • 支持主机与从机在同一协议栈运行
  • 支持实时操作系统及裸机移植
  • 为应用提供多种请求模式,可以选择阻塞还是非阻塞模式
  • 支持所有常用的Modbus方法

文件结构

源文件 描述
FreeModbus/modbus/mb.c Modbus从机设置及轮询接口
FreeModbus/modbus/mb_m.c Modbus主机设置及轮询接口
FreeModbus/modbus/rtu/mbrtu.c 从机RTU模式设置
FreeModbus/modbus/rtu/mbrtu_m.c 主机RTU模式设置
FreeModbus/port/portserial.c 从机串口移植
FreeModbus/port/portserial_m.c 主机串口移植
FreeModbus/port/user_mb_app.c 从机数据缓冲区
FreeModbus/port/user_mb_app_m.c 主机数据缓冲区

数据缓冲区

数据缓冲区定义在 user_mb_app_m.c 文件中,共4种数据类型:

  • 线圈(Coils)
  • 离散输入(Discrete Inputs)
  • 保持寄存器(Holding Registers)
  • 输入寄存器(Input Registers)

API详解

写单个保持寄存器

eMBMasterReqWriteHoldingRegister(
    UCHAR ucSndAddr,
    USHORT usRegAddr,
    USHORT usRegData,
    LONG lTimeOut
);

读多个保持寄存器

eMBMasterReqReadHoldingRegister(
    UCHAR ucSndAddr,
    USHORT usRegAddr,
    USHORT usNRegs,
    LONG lTimeOut
);

读输入寄存器

eMBMasterReqReadInputRegister(
    UCHAR ucSndAddr,
    USHORT usRegAddr,
    USHORT usNRegs,
    LONG lTimeOut
);

返回值说明

返回值 描述
MB_MRE_NO_ERR 正常
MB_MRE_NO_REG 寄存器地址出错
MB_MRE_TIMEDOUT 响应超时
MB_MASTER_BUSY 主机忙

获取方式

GitHub: https://github.com/RT-Thread-packages/freemodbus