📄 modbususer.h
字号:
/****************************************Copyright (c)****************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------------------------------------------------------------------------------------------------
** File name: ModbusUser.h
** Last modified Date: 2006-05-11
** Last Version: 2.0
** Descriptions: ZY/Modbus软件驱动用户使用的宏定义及部分函数声明。
**
**--------------------------------------------------------------------------------------------------------
** Created by: Zhoulishan
** Created date: 2006-05-11
** Version: 2.0
** Descriptions:
**
**--------------------------------------------------------------------------------------------------------
** Modified by: Zhoulishan
** Modified date: 2006-05-11
** Version: 2.0
** Descriptions:
**
*********************************************************************************************************/
#ifndef __MODBUSUSER_H
#define __MODBUSUSER_H
#ifdef __cplusplus
extern "C" {
#endif
/*********************************************************************************************************
Modbus协议定义的出错代码
*********************************************************************************************************/
#define EXCEPTION_CODE_1 1
#define EXCEPTION_CODE_2 2
#define EXCEPTION_CODE_3 3
#define EXCEPTION_CODE_4 4
#define EXCEPTION_CODE_5 5
#define EXCEPTION_CODE_6 6
/*********************************************************************************************************
函数返回出错代码
*********************************************************************************************************/
#define MB_NO_ERR 0x00 /* 无错误 */
#define ILLEGAL_FUNCTION 0x01 /* 无效功能代码 */
#define ILLEGAL_DATA_ADDR 0x02 /* 无效地址 */
#define ILLEGAL_DATA_VALUE 0x03 /* 无效数据值 */
#define SLAVE_DEVICE_FAILURE 0x04 /* 从设备出错 */
#define ACKNOWLEDGE 0x05
#define SLAVE_DEVICE_BUSY 0x06
#define MEMORY_PARITY_ERR 0x08
#define GATEWAY_PATH_UNABLE 0x0A
#define GATEWAY_TARGET_DEV_FAIL 0x0B
/*********************************************************************************************************
ZY/Modbus协议栈自定义出错代码
*********************************************************************************************************/
#define MB_FUN_NOT_DEF 0x80 /* 未定义功能代码 */
#define MB_THE_CH_BUSY 0x81 /* 管道忙,正被使用 */
#define MB_RESPONSE_TIME_OUT 0x82 /* 应答超时 */
#define MB_PARAMETER_ERR 0x83 /* 参数出错 */
#define MB_INVALID_CH 0x84 /* 无效的管道 */
#define MB_INVALID_MOD 0x85 /* 无效的模式 */
#define MB_INVALID_BAUD 0x85 /* 无效的波特率 */
#define MB_MALLOC_ERR 0x86 /* 分配内存出错 */
#define MB_OS_EVENT 0x87 /* 申请OS资源出错 */
/*********************************************************************************************************
以上为出错返回代码
以下为ZY/Modbus2.0协议栈状态码
*********************************************************************************************************/
#define MB_SENT_REQUEST 0x90 /* 发送请求 */
#define MB_WAITE_RESPONSIONING 0x91 /* 正在处理 */
#define MB_POLL_DELAY 0x92
#define MB_WAITING_POLL_DELAY 0x93
#define MB_WAITING_FOR_REPLY 0x94
#define MB_WAITING_SENDING 0x95
#define MB_PROCESSING_REPLY 0x96 /* 应答处理 */
#define MB_WAITE_HANDLE 0x97 /* 等待处理 */
#define MB_RESPONSIONING_HANDLE 0x98
#define MB_DELETE_EVENT_LIST 0x99 /* 删除事件列表项 */
#define MB_RECEIVE_EVENT 0xA0 /* 接收事件 */
#define MB_RECEIVE_DATA 0xA1 /* 接收数据 */
#define MB_RECEIVE_FRAME 0xA2 /* 从机接收到请求时,与
MB_RESPONSIONING_HANDLE
是一样的值 */
#define MB_WAITE_RECEIVE 0xA3 /* 等待接收数据状态 */
#define MB_SEND_EVENT 0xA4 /* 发送事件状态 */
#define MB_SEND_DATA 0xA5 /* 发送数据状态 */
#define MB_TIME_OUT_HANDLE 0xA6 /* 超时处理 */
/*********************************************************************************************************
定义广播地址
*********************************************************************************************************/
#define BROADCAST_ADDRESS 0
/*********************************************************************************************************
PDU帧处理参数结构
*********************************************************************************************************/
typedef struct __PDU_RESPONSE{
uint8* PDUDataPtr; /* 请求数据指针,功能代码处理函
数必需将处理的数据包存在该
指针的开始位始 */
uint8 PDUByteLength; /* 请求数据数长度 */
uint8 ExceptionCode; /* 仅为输出错异常代码,
正常操作设为0 */
}PDU_RESPONSE;
/*********************************************************************************************************
MODBUS设备配置参数数据结构
应用程序初始化串口时使用该数据结构
*********************************************************************************************************/
typedef struct __MB_CFG{
INT8U ch; // 配置管道号(0~MB_MAX_CH-1)
INT8U node_addr; // 节点地址(1~255),值为0表示为主设备
INT8U modbus_mode; // 链路层协议,MB_RTU_MODE('R'),MB_ASCII_MODE('A'),MB_TCP_MODE('T')
INT32U BaudRate; // 波特率(1200、2400、4800、9600、19200、38400、57600和115200)
INT8U bits; // 字符长度:00(5位字符)01(6位)10(7位)11(8位)
INT8U parity; // 奇偶校验:0,无校验;1,奇校验;2,偶校验
INT8U stops; // 停止位:0为1位,1为2位。
INT8U wr_en; // 写使能(保留)
/*
* 新增数据结构
*/
INT16U usADUBufSize; /* ADU缓冲区大小 */
INT8U *pucADUPtr; /* ADU缓冲区指针 */
INT16U usQSendSize; /* 低层UART驱动发送缓冲区大小 */
INT8U *puqSendBuf; /* 低层UART驱动发送缓冲区指针 */
struct __MBDSTR *mbdPtr; /* 驱动信息内存指针 */
/*
* 底层驱动信息数据结构
*/
void *pvDriver;
INT8U (*PortCfg) (struct __MB_CFG *mb_ch); /* 如UART的驱动数据结构 */
void (*SendData) (INT8U ucCh,INT8U *ucBuf,INT16U usLen); /* 发送数据函数指针 */
void (*ExitPort) (void *pDriver); /* 退出Modbus配置时使用该函数 */
}MB_CFG;
/*********************************************************************************************************
Modbus管道信息相关数据结构
*********************************************************************************************************/
typedef struct __MBDSTR {
INT32U ucData[20];
}MBDSTR;
/*********************************************************************************************************
定义函数指针类型
*********************************************************************************************************/
typedef void (*fptr) (uint8 ch,PDU_RESPONSE *Response);
typedef uint8 (*f2pduptr) (void *ParameterPtr);
typedef void (*f2parseptr) (uint8 *PDUPtr,void *ParameterPtr);
/*********************************************************************************************************
Modsub从机自定义的功能码结构
Modbus Slaver Protocol Stack use.
*********************************************************************************************************/
typedef struct _SUD_FUN_CODE{
uint8 Code; /* 请求代码编号 */
void *NextPtr; /* 指向下一个用户定义功能代码
指针 */
void (*Function)(uint8 ch,PDU_RESPONSE *Response); /* 主机请求帧PCU数据处理函数 */
}SUD_FUN_CODE;
/*********************************************************************************************************
Modsub主机自定义的功能码结构
Modbus Master Protocol Stack use.
*********************************************************************************************************/
typedef struct _MUD_FUN_CODE{
uint8 Code; /* 功能请求代码 */
void *NextPtr; /* 指向下个用户定义功能代码指针*/
uint8 (*f2pdu)( void *ParameterPtr ); /* 封装请求帧的PDU数据函数指针 */
void (*f2parse)(uint8 *PDUPtr,void *ParameterPtr); /* 解析应答帧的PDU数据函数指针 */
}MUD_FUN_CODE;
/*********************************************************************************************************
Modbus从机数据处理函数的函数指针数据结构
*********************************************************************************************************/
typedef struct __DATA_HANDLE_FUN {
uint8 (*GetDiscrete) (uint8 ch,uint8 *DisInputsV,uint16 Address);
uint8 (*GetCoils) (uint8 ch,uint8 *DisInputsV,uint16 Address);
uint8 (*SetCoil) (uint8 ch,uint16 Address, uint8 CoilValue);
uint8 (*GetInputRegValue)(uint8 ch,uint16 *ValuePtr, uint16 Address);
uint8 (*GetRegValue) (uint8 ch,uint16 *ValuePtr, uint16 Address);
uint8 (*SetRegValue) (uint8 ch,uint16 Address, uint16 Value);
} DATA_HANDLE_FUN;
/*********************************************************************************************************
Modbus 配置相关宏定义
*********************************************************************************************************/
#define MB_UART0_CH 0 /* Modbus UART0管道 */
#define MB_UART1_CH 1 /* Modbus UART1管道 */
#define MB_UART2_CH 2 /* Modbus UART2管道 */
#define MB_UART3_CH 3 /* Modbus UART3管道 */
#define MB_UART_8BIT 8 /* 数据位为8位 */
#define MB_UART_1STOP 1 /* 1位停止位 */
#define MB_NONE_PARITY 0 /* 无奇偶校验位 */
#define MB_RTU_MODE 'R' /* Modbus RTU模式 */
#define MB_TCP_MODE 'T' /* Modbus TCP模式 */
#define MB_ASCII_MODE 'A' /* Modbus ASCII模式 */
#define COIL_ON 0xff00 /* 写入线圈值为1的宏定义 */
#define COIL_OFF 0x0000 /* 写入线圈值为0的宏定义 */
/*********************************************************************************************************
** Function name: MB_Ini
**
** Descriptions: ZY/Modbus协议栈驱动初始化
**
** input parameters: None
** Returned value: None
**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -