⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modbus.h

📁 基于Hitech和C166的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 + -