# modbus **Repository Path**: zhu-gong/modbus ## Basic Information - **Project Name**: modbus - **Description**: 基于FreeModbus 2018.9.14版本 由于该版本与硬件绑定太深,所以根据自己应用做适当改造: 同时支持多路 RS485 同时支持 RTU 、ASCII 和 TCP 其它 BUG 更改 更适合模块化 更易移植 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2023-02-10 - **Last Updated**: 2025-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 简介 - 基于 FreeModbus 2018.9.14 版本 - 更改原版本的已知的 BUG - 同时支持多路 RS485 - 同时支持 RTU 、ASCII 和 TCP ## 使用方法 1. 将目录 `ascii` 、`functions`、`rtu`、`tcp` 内的文件加入工程; 将 `mb.c` 文件加入工程。这些文件应为**只读**的,即用户不能也不需要修改它们。 2. 修改 `demo` 中的代码以适应特定的硬件。 demo 代码的平台为 `lpc177x/8x`系列处理器,需要你根据实际使用的硬件平台进行修改。 其中 `app_mbconfig.h` 、`main.c` 、`port.c` 文件是必须的;如果使用 `Modbus RTU` ,则还需要 `portuart.c` 和 `porttimer.c` 文件;如果使用 `Modbus TCP` ,则还需要 `porttcp.c` 文件。 3. 关联 Modbus 数据模型、确定数据起始地址。 Modbus 数据模型有四种:输入离散量、线圈、输入寄存器、保持寄存器,协议栈通过 `功能码` 区分不同的数据模型。 每一种数据模型,都需要用户定义数据模型的起始地址、大小、数据缓存区、数据处理回调函数,在 `port.c` 文件中,给出了适用绝大多数情况的例子。 注意:根据实际应用关联数据模型,不使用的数据模型可以不定义,比如可以只有输入寄存器这一种数据模型,只需定义输入寄存器相关的即可。 | | 数据起始地址 | 大小(数目) | 数据缓冲区 | 数据处理回调函数 | | ---------- | -------------------- | -------------------- | ---------------------------------- | ---------------- | | 离散量 | -(`port.c` 未实现) | -(`port.c` 未实现) | -(`port.c` 未实现) | eMBRegDiscreteCB | | 线圈 | REG_COILS_START | REG_COILS_SIZE | ucRegCoilsBuf[REG_COILS_SIZE / 8] | eMBRegCoilsCB | | 输入寄存器 | REG_INPUT_START | REG_INPUT_NREGS | usRegInputBuf[REG_INPUT_NREGS] | eMBRegInputCB | | 保持寄存器 | REG_HOLDING_START | REG_HOLDING_NREGS | usRegHoldingBuf[REG_HOLDING_NREGS] | eMBRegHoldingCB | 4. 更新数据 将应用数据定期的更新到数据缓冲区。比如输入寄存器更新到 `usRegInputBuf` 数组内。