• 大小: 13KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-02-02
  • 语言: 其他
  • 标签: ModBus  

资源简介

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


评论

共有 条评论