资源简介
ModBus-RTU协议C封装 使用C封装的,可以移植到任何平台。
代码片段和文件信息
/*************************************************************************************************************
* 文件名: MODBUS_RTU.c
* 功能: MODBUS_RTU通信协议层
* 作者: cp1300@139.com
* 创建时间: 2014-03-24
* 最后修改时间:2015-07-02
* 详细: MODBUS RTU通信协议层
2015-04-27:添加发送延时,防止通信帧结束时产生干扰
2015-05-20:修复当接收字节小于2的时候进行CRC校验出现异常
2016-04-11:增加初始化标记,当没有初始化时,直接退出modbus,增加内存检测,如果内存指针为空,则退出
2017-03-06:增加底层接口支持,并且去掉了溢出检测
2017-03-23:修改名称错误,应为为modbus增加所有接口回调模式,完全与底层通信解耦,移植性能更强
2018-01-27:增加延时接口
*************************************************************************************************************/
#include “system.h“
#include “usart.h“
#include “MODBUS_RTU.h“
//调试开关
#define MODBUS_RTU_DBUG 0
#if MODBUS_RTU_DBUG
#include “system.h“
#define modbus_debug(format...) uart_printf(format##__VA_ARGS__)
#else
#define modbus_debug(format...) /\
/
#endif //MODBUS_RTU_DBUG
/*************************************************************************************************************************
* 函数 : bool MODBUS_Init(MODBUS_HANDLE *pHandleu8 *pTxBuff u16 TxBuffSize u16 TxByteTimeUs u16 RxTimeOutMs
bool (* pSendData)(u8 *pDataBuff u16 DataLen)
int (* pReadData)(u8 **pDataBuff u8 ByteTimeOut u16 TimeOut u16 *pReceiveDelay)
void (*pClearRxData)(void)
void (*pDelayMS)(u8 ms))
* 功能 : MODBUS 初始化
* 参数 : pHandle:当前初始化的MODBUS句柄pTxBuff:发送缓冲区指针;TxBuffSize:发送缓冲区大小;
TxByteTimeUs:发送1个字节的时间(用于RS485收发切换,特别是发送后的切换延时)延时大小为0-65535(us);RxTimeOutMs:接收超时单位mspReceiveDelay:返回接收延时,单位ms
pSendCallBack:发送回调函数(pDataBuff:发送数据缓冲区,DataLen:发送数据长度)
pReadCallBack:接收数据回调函数,会等待直到数据被写入到接收缓冲区(pDataBuff:接收数据缓冲区,ByteTimeOut:等待的字节超时时间,单位msTimeOut:数据包超时时间,单位ms)
pClearRxData:清除接收数据缓冲区回调函数
pDelayMS:系统ms延时接口
* 返回 : FALSE:初始化失败;TRUE:初始化成功
* 依赖 : 底层回调接口
* 作者 : cp1300@139.com
* 时间 : 2014-09-25
* 最后修改时间 : 2017-03-23
* 说明 : 发送缓冲区必须大于最大数据包大小否则会出现内存溢出
2017-03-23:增加回调,抛离底层依赖
2018-01-27:增加延时回调
*************************************************************************************************************************/
bool MODBUS_Init(MODBUS_HANDLE *pHandleu8 *pTxBuff u16 TxBuffSize u16 TxByteTimeUs u16 RxTimeOutMs
bool (* pSendData)(u8 *pDataBuff u16 DataLen)
int (* pReadData)(u8 **pDataBuff u8 ByteTimeOut u16 TimeOut u16 *pReceiveDelay)
void (*pClearRxData)(void)
void (*pDelayMS)(u8 ms))
{
pHandle->ID = 0;
if(pHandle == NULL) return FALSE;
pHandle->WriteRegCnt = 0; //写入寄存器次数
pHandle->ReadRegCnt = 0; //读取寄存器次数
pHandle->ReturnTimeMs = 0; //数据返回时间
pHandle->pTxBuff = pTxBuff; //发送缓冲区
pHandle->TxBuffSize = TxBuffSize; //发送缓冲区大小
pHandle->RxTimeOutMs = RxTimeOutMs; //接收超时时间
if(pHandle->RxTimeOutMs < 20) pHandle->RxTimeOutMs = 20; //限制最小为20ms
pHandle->SlaveAddr = 0; //从机地址无效
pHandle->TxByteTimeUs = TxByteTimeU
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
I.A.... 49949 2018-03-23 22:27 ModBus\MODBUS_RTU.c
I.A.... 8686 2018-03-23 22:27 ModBus\MODBUS_RTU.h
I.A.... 7525 2018-03-23 22:27 ModBus\MODBUS_SLAVE.c
I.A.... 1202 2018-03-23 22:27 ModBus\MODBUS_SLAVE.h
目录 0 2018-03-23 22:27 ModBus
----------- --------- ---------- ----- ----
67362 5
- 上一篇:基于单片机的GPS定位及显示系统设计
- 下一篇:电梯模拟问题课程设计报告
相关资源
- 51单片机编写的标准modbus协议通信模版
- STM32F103移植FreeModbus实现modbus主机.zi
- 台达PLC44个程序
- Modbus—TCP协议
- 单片机modbus例程解析
- RS485串口调试工具
- MODBUS--ASCii实现的主要代码
- QJ71MT91.pdf
- modbus模拟器.rar
- stm32 modbus 协议程序
- 完整的STM32F407_MODBUS通信工程代码。
- MSP430F5529移植modbus
- 台达A2伺服MODBUS通讯调试工具
- stm32实现modbus主机从机功能通信
- 安卓组态软件MODBUS.rar
- 总结——调试STM32F103ZET6外围传感器
- modscan32 破解版解压即可用
- STM32 MODBUS_RTU从站程序,KEIL编写
- ModbusTools_破解版
- FreeModbus_For_STM32_USART1_RS485移植分享
- MODBUS电压电流表程序+上位机
- S71500 modbustcp设置说明及TIA15程序
- STM32 ModBus RTU 从机程序
- Modbus测试工具和Modbus数据模拟器
- labview ModbusTCP与三菱PLC通讯
- qt下的modbus Tcp通讯程序
- Modbus完整资料(Modbus详解电子书 lib
- labview modbus tcp通讯llb文件
- Modbus TCP Server Tester
- modbus_poll和modbus_slave_64bit.rar
评论
共有 条评论