📄 modbus.h
字号:
//****************************************************************************
// 文件名: MODBUS.H
// 功 能: MODBUS 协议的头文件
//****************************************************************************
#ifndef _MODBUS_H_
#define _MODBUS_H_
//****************************************************************************
// @ 宏定义地址码、功能码
//****************************************************************************
#define Modbus_Node 1 //ASC0之Modbus节点地址码
#define ASC1_Baud_Select 1 /* 1 表示选择115.117Kbpd,0 表示选择19.2Kbps*/
#if(ASC1_Baud_Select ==1 )
#define Mod_RTU_deay 0x0D6D /* RTU格式的3.5字符包间隔0.6876ms,采用向下计数56Kbps*/
#else
#define Mod_RTU_deay 0x2847 /* RTU格式的3.5字符包间隔0.6876*3ms,采用向下计数19.2Kbps*/
#endif
//-----------功能码---------
#define READ_Coils_State 01
#define READ_Inputs_State 02
#define READ_Hold_Registers 03
#define READ_Input_Registers 04
#define WRITE_One_Coil 05
#define WRITE_One_Register 06
#define WRITE_Some_Coil 15
#define WRITE_Some_Register 16
extern ubyte Asc1_Rx_lengh;
extern ubyte Asc1_Tx_lengh;
#define Asc1_Rx_lengh_max 50
#define Asc1_Tx_lengh_max 50
extern bit Asc1_receive_ok;
extern bit Asc1_transfer_ok;
extern bit Asc1_lastFrame_indeal;
extern ubyte Asc1_Rx_BUF[Asc1_Rx_lengh_max];
extern ubyte Asc1_Tx_BUF[Asc1_Tx_lengh_max];
extern ubyte *Asc1_Rx_BUF_point;
extern ubyte *Asc1_Tx_BUF_point;
//****************************************************************************
// @ 函数原型
//****************************************************************************
//****************************************************************************
// @Function void Modbus_deal()
// @Description 在main()中循环执行
//****************************************************************************
void Modbus_deal();
//****************************************************************************
// @Function void cal_crc( ubyte* ptr, ubyte len )
// @Description 计算待发送的数据之CRC 值 并插入发送缓冲
// @Parameters * ptr : 待发送的数组的首地址
// len : 待发送的数组之字节数,不包括CRC码
//****************************************************************************
__inline void crc_cal(ubyte *ptr, ubyte len);
//****************************************************************************
// @Function uword check_crc( ubyte* ptr, ubyte len )
// @Description 计算待接收的数据之CRC 值 ,正确则返回0
// @Rerurn 正确的编码返回 0x00
// @Parameters * ptr : 待接收的数组的首地址
// len : 待接收的数组之字节数,包括CRC码
//****************************************************************************
__inline uword crc_check(ubyte *ptr, ubyte len);
//****************************************************************************
// @Function void Frame_deal()
// @Description 处理接收到的数据帧,在main中查询执行
// 在地址也符合的情况下才进入帧处理
//****************************************************************************
__inline void Frame_deal();
//****************************************************************************
// @Function void Frame_Data_Analyse()
// @Description 在正确的CRC 校验之后进行对数据分析处理
//****************************************************************************
__inline void Frame_Data_Analyse();
//****************************************************************************
// @Function void Send_Asc0_Tx_buf()
// @Description 处理发送缓冲区
//****************************************************************************
__inline void Send_Asc0_Tx_buf();
//****************************************************************************
// @Function void Send_Asc0_Rx_buf_Back()
// @Description 正确处理完写,直接回复接收缓冲区
//****************************************************************************
__inline void Send_Asc0_Rx_buf_Back();
//****************************************************************************
// @Function void Deal_READ_Coils_State()
// @Description 读一组逻辑线圈当前状态
//****************************************************************************
__inline void Deal_READ_Coils_State();
//****************************************************************************
// @Function void Deal_WRITE_One_Coilr()
// @Description 写单个线圈
//****************************************************************************
__inline void Deal_WRITE_One_Coilr();
//****************************************************************************
// @Function void Deal_WRITE_One_Register()
// @Description 写一个保持寄存器
//****************************************************************************
__inline void Deal_WRITE_One_Register();
//****************************************************************************
// @Function void Deal_READ_Hold_Registers()
// @Description 读保持寄存器
//****************************************************************************
__inline void Deal_READ_Hold_Registers();
//****************************************************************************
// @Function void Deal_WRITE_Some_Coil()
// @Description 强制多个线圈
//
//
//****************************************************************************
__inline void Deal_WRITE_Some_Coil();
//****************************************************************************
// @Function void Deal_WRITE_Some_Register()
// @Description 预置多寄存器
//
//
//****************************************************************************
__inline void Deal_WRITE_Some_Register();
//====================================================================
#endif // _MODBUS_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -