亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mb_pfunction.c

?? 周立功Magic2410開發(fā)板uCOS-II基礎(chǔ)實(shí)驗(yàn)的ModBus主從通信源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/****************************************Copyright (c)**************************************************
**                                  廣州致遠(yuǎn)電子有限公司
**
**                                 http://www.21cm.com.cn
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			MB_PFunction.c
** Last modified Date:  2005-01-11
** Last Version:		1.0
** Descriptions:		
**
**------------------------------------------------------------------------------------------------------
** Created by:			ZhouLishan
** Created date:		2005-01-11
** Version:				1.0
** Descriptions:		
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include	"config.h"

#include	"modbus.h"



//**************************************************
// 函數(shù)名稱:MB_GetDiscrete
// 輸入?yún)?shù):Address,線圈地址
// 輸出參數(shù):返回線圈值(0\1)
// 功能描述:獲取離散值函數(shù),訪函數(shù)由用戶編寫
//**************************************************
uint8 MB_GetDiscrete(uint16 Address);

//**************************************************
// 函數(shù)名稱:MB_GetCoils
// 輸入?yún)?shù):Address,線圈地址
// 輸出參數(shù):返回線圈值(0\1)
// 功能描述:獲取線圈值函數(shù),訪函數(shù)由用戶編寫
//**************************************************
uint8 MB_GetCoils(uint16 Address);

//**************************************************
// 函數(shù)名稱:MB_SetCoil
// 輸入?yún)?shù):Address,線圈地址
//			 CoilValue,線圈值(0\1)
// 輸出參數(shù):返回寄存器值
// 功能描述:設(shè)置線圈值函數(shù),訪函數(shù)由用戶編寫
//**************************************************
uint8 MB_SetCoil(uint16 Address,uint8 CoilValue);


//**************************************************
// 函數(shù)名稱:MB_GetInputRegValue
// 輸入?yún)?shù):Address,寄存器地址
// 輸出參數(shù):返回寄存器值
// 功能描述:讀輸入寄存器值函數(shù),訪函數(shù)由用戶編寫
//**************************************************
uint16 MB_GetInputRegValue(uint16 Address);

//**************************************************
// 函數(shù)名稱:MB_GetRegValue
// 輸入?yún)?shù):Address,寄存器地址
// 輸出參數(shù):返回寄存器值
// 功能描述:讀保持寄存器值函數(shù),訪函數(shù)由用戶編寫
//**************************************************
uint16 MB_GetRegValue(uint16 Address);

//**************************************************
// 函數(shù)名稱:MB_SetRegValue
// 輸入?yún)?shù):Address,寄存器地址
//			 Value,寫入的值
// 輸出參數(shù):無
// 功能描述:寫保持寄存器值函數(shù),訪函數(shù)由用戶編寫
//**************************************************
void MB_SetRegValue(uint16 Address,uint16 Value);

/****************************************************************************************/
// 函數(shù)名稱:FReadCoils
// 輸入?yún)?shù):Response
// 輸出參數(shù):無
// 功能描述:處理讀單線圈指令01
/***************************************************************************************/
void FReadCoils(PDU_RESPONSE *Response);
/****************************************************************************************/
// 函數(shù)名稱:FReadDiscreteInputs
// 輸入?yún)?shù):Response
// 輸出參數(shù):無
// 功能描述:處理讀離散輸入指令02
/***************************************************************************************/
void FReadDiscreteInputs(PDU_RESPONSE *Response);
/****************************************************************************************/
// 函數(shù)名稱:FReadHoldingReg
// 輸入?yún)?shù):Response
// 輸出參數(shù):無
// 功能描述:處理讀保持寄存器指令03
/****************************************************************************************/
void FReadHoldingReg(PDU_RESPONSE *Response);
/****************************************************************************************/
// 函數(shù)名稱:FReadInputReg
// 輸入?yún)?shù):Response
// 輸出參數(shù):無
// 功能描述:處理讀輸入寄存器指令04
/****************************************************************************************/
void FReadInputReg(PDU_RESPONSE *Response);
/****************************************************************************************/
// 函數(shù)名稱:FWriteSingleCoil
// 輸入?yún)?shù):Response
// 輸出參數(shù):無
// 功能描述:處理寫單線圈指令05
/****************************************************************************************/
void FWriteSingleCoil(PDU_RESPONSE *Response);
/****************************************************************************************/
// 函數(shù)名稱:FWriteSingleReg
// 輸入?yún)?shù):Response
// 輸出參數(shù):無
// 功能描述:處理寫單線圈指令06
/****************************************************************************************/
void FWriteSingleReg(PDU_RESPONSE *Response);
/****************************************************************************************/
// 函數(shù)名稱:FWriteMultipleCoils
// 輸入?yún)?shù):Response
// 輸出參數(shù):無
// 功能描述:處理寫多線圈指令15
/****************************************************************************************/
void FWriteMultipleCoils(PDU_RESPONSE *Response);
/****************************************************************************************/
// 函數(shù)名稱:FWriteMultipleReg
// 輸入?yún)?shù):Response
// 輸出參數(shù):無
// 功能描述:處理寫多寄存器指令16
/****************************************************************************************/
void FWriteMultipleReg(PDU_RESPONSE *Response);
/****************************************************************************************/
// 函數(shù)名稱:FMaskWriteReg
// 輸入?yún)?shù):Response
// 輸出參數(shù):無
// 功能描述:處理屏蔽寄存器指令22
/****************************************************************************************/
void FMaskWriteReg(PDU_RESPONSE *Response);
/****************************************************************************************/
// 函數(shù)名稱:FRWMultipleReg
// 輸入?yún)?shù):Response
// 輸出參數(shù):無
// 功能描述:處理讀寫多寄存器指令23
/****************************************************************************************/
void FRWMultipleReg(PDU_RESPONSE *Response);

void FTest(PDU_RESPONSE *Response){}

AT_CODE FUNCTION_ARRAY	FCodeHandleArray[MAX_FUNCTION]={
#if READ_COILS_EN > 0 
	{0x01,FReadCoils},			// 讀線圈
#endif
#if READ_DIS_INPUT_EN > 0
	{0x02,FReadDiscreteInputs},	// 讀離散量輸入
#endif
#if READ_HOLD_REG_EN > 0
	{0x03,FReadHoldingReg},		// 讀保持寄存器
#endif
#if READ_INPUT_REG_EN > 0
	{0x04,FReadInputReg},		// 讀輸入寄存器
#endif
#if WRITE_SING_COIL_EN > 0
	{0x05,FWriteSingleCoil},	// 寫單個(gè)線圈
#endif
#if WRITE_SING_REG_EN > 0
	{0x06,FWriteSingleReg},		// 寫單個(gè)寄存器
#endif
#if WRITE_MULT_COIL_EN > 0
	{0x0f,FWriteMultipleCoils},	// 寫多個(gè)線圈
#endif
#if WRITE_MULT_REG_EN > 0
	{0x10,FWriteMultipleReg},	// 寫多個(gè)寄存器
#endif
#if MASK_WRITE_REG_EN > 0
	{0x16,FMaskWriteReg},		// 處理屏蔽寄存器指令
#endif
#if READ_WRITE_REG_EN > 0
	{0x17,FRWMultipleReg},		// 讀寫多個(gè)寄存器
#endif
	{0x00,FTest}				// 測試功能代碼
};

#if READ_DIS_INPUT_EN 
//************************************************************************************
// 函數(shù)名稱:ReadDiscreteInputs
// 輸入?yún)?shù):CoilsDataPtr,存放離散輸入數(shù)據(jù)指針
//			 StAddr,離散的起始地址
//			 Quantity,離散的數(shù)量
// 輸出參數(shù):正常返回TRUE,出錯(cuò)返回FALSE。
// 功能描述:讀離散輸入操作函數(shù)
//************************************************************************************	
uint8 ReadDiscreteInputs(uint8 *CoilsDataPtr,uint16 StAddr ,uint16 Quantity)
{
	uint8 *CoilsInByte;
	uint8 offset;
	uint16 i=0 ;
	CoilsInByte = CoilsDataPtr;
	while(i<Quantity)
	{	
		*CoilsInByte = 0;
		for(offset=0;offset<8;offset++,i++)		// 將線圈值寫入一個(gè)字節(jié)
		{
			if(i<Quantity)
			{
				*CoilsInByte |= MB_GetDiscrete(StAddr+i)<<offset;
			}
		}
		CoilsInByte++;
	}
	return TRUE;
}
#endif


#if READ_COILS_EN
//************************************************************************************
// 函數(shù)名稱:ReadCoils
// 輸入?yún)?shù):CoilsDataPtr,存放線圈數(shù)據(jù)指針
//			 StAddr,線圈的起始地址
//			 Quantity,線圈的數(shù)量
// 輸出參數(shù):正常返回TRUE,出錯(cuò)返回FALSE。
// 功能描述:讀多線圈操作函數(shù)
//************************************************************************************	
uint8 ReadCoils(uint8 *CoilsDataPtr,uint16 StAddr ,uint16 Quantity)
{
	uint8 *CoilsInByte;
	uint8 offset;
	uint16 i=0 ;
	CoilsInByte = CoilsDataPtr;
	while(i<Quantity)
	{	
		*CoilsInByte = 0;
		for(offset=0;offset<8;offset++,i++)		// 將線圈值寫入一個(gè)字節(jié)
		{
			if(i<Quantity)
			{
				*CoilsInByte |= MB_GetCoils(StAddr+i)<<offset;
			}
		}
		CoilsInByte++;
	}
	return TRUE;
}
#endif

#if WRITE_SING_COIL_EN
//************************************************************************************
// 函數(shù)名稱:WriteSingleCoil
// 輸入?yún)?shù):DataPtr,數(shù)據(jù)指針,
//			 StAddr,寄存器起始地址
//			 Quantity,寄存器數(shù)量。
// 輸出參數(shù):正常返回TRUE,出錯(cuò)返回FALSE。
// 功能描述:寫單線圈處理函數(shù)
//************************************************************************************	
uint8 WriteSingleCoil(uint16 OutputAddr,uint16 OutputValue)
{
	return MB_SetCoil(OutputAddr,(OutputValue==0xff00)?1:0);
}
#endif

#if WRITE_MULT_COIL_EN
//************************************************************************************
// 函數(shù)名稱:WriteMultipleCoils
// 輸入?yún)?shù):DataPtr,數(shù)據(jù)指針,
//			 StAddr,寄存器起始地址
//			 Quantity,寄存器數(shù)量。
// 輸出參數(shù):正常返回TRUE,出錯(cuò)返回FALSE。
// 功能描述:寫多線圈處理函數(shù)
//************************************************************************************	
uint8 WriteMultipleCoils(uint8 *DataPtr,uint16 StAddr ,uint16 Quantity)
{
	uint16 i;
	uint8 	CoilInByte;
	for(i=0;i<Quantity;i++)
	{
		if((i%8)==0)	
			CoilInByte = *(DataPtr+(i/8));
		if( FALSE == MB_SetCoil(StAddr+i,(CoilInByte>>(i%8))&0x01))
			return FALSE;	
	}
	return TRUE;
}
#endif

#if READ_INPUT_REG_EN
//************************************************************************************
// 函數(shù)名稱:ReadInputReg
// 輸入?yún)?shù):DataPtr,數(shù)據(jù)指針,
//			 StAddr,寄存器起始地址
//			 Quantity,寄存器數(shù)量。
// 輸出參數(shù):正常返回TRUE,出錯(cuò)返回FALSE。
// 功能描述:讀輸入寄存器
//************************************************************************************	
uint8 ReadInputReg(uint8 *DataPtr,uint16 StAddr ,uint16 Quantity)
{
	uint8 i;
	uint16	Value;
	for(i=0;i<Quantity;i++)
	{
		Value = MB_GetInputRegValue(StAddr+i);
		*(DataPtr+i*2)   = (uint8)(Value>>8); 		// 先傳高位
		*(DataPtr+i*2+1) = (uint8)Value;  			// 后傳低位
	}
	return TRUE;
}
#endif


#if READ_HOLD_REG_EN+READ_WRITE_REG_EN+MASK_WRITE_REG_EN
//************************************************************************************
// 函數(shù)名稱:ReadHoldingReg
// 輸入?yún)?shù):DataPtr,數(shù)據(jù)指針,16位數(shù)據(jù)高8位在低字節(jié),低8位在高字節(jié)
//			 StAddr,寄存器起始地址
//			 Quantity,寄存器數(shù)量。
// 輸出參數(shù):正常返回TRUE,出錯(cuò)返回FALSE。
// 功能描述:讀寄存器處理函數(shù)
//************************************************************************************	
uint8 ReadHoldingReg(uint8 *DataPtr,uint16 StAddr ,uint16 Quantity)
{
	uint8 i;
	uint16	Value;
	for(i=0;i<Quantity;i++)
	{
		Value = MB_GetRegValue(StAddr+i);
		*(DataPtr+i*2)   = (uint8)(Value>>8); 	// 先傳高位
		*(DataPtr+i*2+1) = (uint8)Value;  		// 后傳低位
	}
	return TRUE;
}
#endif

#if WRITE_MULT_REG_EN+READ_WRITE_REG_EN+MASK_WRITE_REG_EN+WRITE_SING_REG_EN
//************************************************************************************
// 函數(shù)名稱:WriteHoldingReg
// 輸入?yún)?shù):DataPtr,數(shù)據(jù)指針,16位數(shù)據(jù)高8位在低字節(jié),低8位在高字節(jié)
//			 StAddr,寄存器起始地址
//			 Quantity,寄存器數(shù)量。
// 輸出參數(shù):正常返回TRUE,出錯(cuò)返回FALSE。
// 功能描述:寫寄存器處理函數(shù)
//************************************************************************************	
uint8 WriteHoldingReg(uint8 *KeepDataPtr,uint16 StAddr ,uint16 Quantity)
{
	uint8 i;
	uint16	Value;
	for(i=0;i<Quantity;i++)
	{
		Value = (*(KeepDataPtr+i*2)<<8)|(*(KeepDataPtr+i*2+1));
		MB_SetRegValue(StAddr+i,Value);
	}
	return TRUE;
}
#endif










#if READ_COILS_EN > 0 
/****************************************************************************************/
// 函數(shù)名稱:FReadCoils
// 輸入?yún)?shù):Response,為PDU_RESPONSE類型的指針,PDU_RESPONSE:
//			 typedef struct __PDU_RESPONSE{
//				uint8*	PDUDataPtr;   請(qǐng)求數(shù)據(jù)指針,功能代碼處理函數(shù)必需將處理的數(shù)據(jù)包存在該指針的開始位始
//			  	uint8	PDUByteLength;請(qǐng)求數(shù)據(jù)數(shù)長度
//				uint8	ExceptionCode;僅為輸出錯(cuò)異常代碼,正常操作設(shè)為0
//			 }PDU_RESPONSE
// 輸出參數(shù):無
// 功能描述:處理讀多線圈指令01
/***************************************************************************************/
void FReadCoils(PDU_RESPONSE *Response)
{
	uint8 * PDUPtr;
	uint16 StAddr ,Quantity;
	// 從請(qǐng)求PDU中提取相關(guān)參數(shù)
	PDUPtr = Response->PDUDataPtr;
	StAddr = PDUPtr[1]<<8|PDUPtr[2];
	Quantity =  PDUPtr[3]<<8|PDUPtr[4];
	
	Response->PDUByteLength = 2 + Quantity/8+((Quantity%8)?1:0) ;	// 正常返回的數(shù)據(jù)長度
	
	if((Quantity>=0x001)&&(Quantity<=0x07d0))
	{
		if((StAddr<END_COILS_ADDR)&&((StAddr+Quantity)<=END_COILS_ADDR))
		{			
			if(ReadCoils(PDUPtr+2,StAddr,Quantity))
			{
				*(PDUPtr+1) = Quantity/8+(Quantity%8)?1:0;	// 字節(jié)數(shù)
				Response->ExceptionCode = 0x00;
			}
			else
				Response->ExceptionCode = 0x04;
		}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久人人爽爽爽人久久久| 日本一区二区成人| 福利91精品一区二区三区| 亚洲女爱视频在线| 久久在线免费观看| 制服丝袜成人动漫| 91免费看视频| 国产91对白在线观看九色| 日韩有码一区二区三区| 亚洲人精品一区| 国产色产综合产在线视频| 欧美日韩高清影院| 99国产精品一区| 国产黄色91视频| 久久国产精品99久久久久久老狼| 亚洲视频网在线直播| 国产亚洲自拍一区| 91精品国产高清一区二区三区蜜臀 | 91国偷自产一区二区开放时间 | 尤物视频一区二区| 欧美激情在线一区二区| 精品日韩欧美一区二区| 欧美肥妇free| 欧美日韩一区二区三区四区五区| 成人黄色大片在线观看| 国产精品一卡二| 激情小说欧美图片| 蜜臀久久99精品久久久久久9| 亚洲电影激情视频网站| 亚洲免费av高清| 亚洲欧洲日韩一区二区三区| 国产婷婷色一区二区三区四区| 欧美va亚洲va国产综合| 在线成人av网站| 欧美放荡的少妇| 欧美久久久影院| 欧美日韩在线播放| 欧美亚洲国产一区二区三区 | 一区二区三区在线视频观看58| 国产精品美女久久久久高潮| 国产欧美日本一区视频| 久久久精品tv| 久久久久99精品一区| 久久久精品综合| 中文在线一区二区| 国产精品伦理一区二区| 亚洲色图.com| 亚洲自拍都市欧美小说| 一区二区三区美女视频| 亚洲国产精品久久人人爱蜜臀| 亚洲一区欧美一区| 日韩国产精品久久久| 青青草成人在线观看| 看电影不卡的网站| 国产精品一区二区男女羞羞无遮挡 | 欧洲视频一区二区| 欧美日韩视频专区在线播放| 欧美肥大bbwbbw高潮| 日韩三级.com| 久久综合色8888| 亚洲国产经典视频| 亚洲精品国产高清久久伦理二区| 亚洲一区二区影院| 琪琪一区二区三区| 国产成人精品影视| 在线一区二区视频| 日韩视频在线你懂得| 国产日韩综合av| 一区二区三区电影在线播| 午夜不卡av在线| 国产激情视频一区二区三区欧美| 99re这里只有精品首页| 欧美日韩国产123区| 精品久久久久久久久久久院品网 | 午夜视频一区二区| 久久机这里只有精品| www.欧美色图| 欧美精品第一页| 国产精品三级av| 日日夜夜精品免费视频| 国产大陆精品国产| 欧美三级在线看| 久久精品视频一区二区三区| 亚洲精品日韩专区silk| 久久99精品一区二区三区三区| av在线不卡网| 91精品国产综合久久久久| 国产免费观看久久| 五月婷婷色综合| 成人av网站在线观看免费| 欧美精品xxxxbbbb| 中文字幕第一区| 免费精品视频在线| 日本精品视频一区二区| 欧美mv日韩mv国产网站| 亚洲一区影音先锋| 成人动漫中文字幕| 日韩欧美激情四射| 亚洲综合在线电影| 国产精品资源站在线| 欧美日韩国产大片| 最新热久久免费视频| 国产综合久久久久影院| 欧洲人成人精品| 国产精品人人做人人爽人人添| 美女视频免费一区| 欧美日韩一二区| 日韩美女视频一区二区| 国产一区不卡视频| 日韩三级视频在线看| 亚洲国产成人高清精品| 99久久精品国产一区| 久久久五月婷婷| 久久99精品久久久久久动态图 | 色综合久久中文字幕| 久久久一区二区三区| 秋霞午夜av一区二区三区| 色哟哟欧美精品| 国产精品午夜在线观看| 国产一区二区影院| 日韩欧美一区二区三区在线| 亚洲国产精品一区二区www在线| 97成人超碰视| 中文字幕一区免费在线观看| 国产一区久久久| 久久精品视频在线免费观看| 精品一区二区免费在线观看| 91精品国产一区二区三区蜜臀| 亚洲国产综合人成综合网站| 97久久精品人人做人人爽50路| 亚洲国产激情av| 国产成人免费网站| 国产亚洲一区二区在线观看| 另类小说一区二区三区| 日韩欧美的一区| 精品一区免费av| 欧美成人三级电影在线| 麻豆精品国产91久久久久久| 制服丝袜中文字幕一区| 奇米精品一区二区三区在线观看| 欧美日韩精品一区二区三区四区| 亚洲国产精品麻豆| 7777精品伊人久久久大香线蕉最新版| 亚洲成人免费影院| 欧美精品九九99久久| 日韩成人av影视| 欧美草草影院在线视频| 国产精品资源站在线| 亚洲国产岛国毛片在线| 99精品视频免费在线观看| 亚洲人亚洲人成电影网站色| 在线一区二区三区四区五区| 亚洲成人在线免费| 欧美一级片免费看| 国产精品18久久久久久久久久久久 | 精品剧情v国产在线观看在线| 九九精品视频在线看| 久久久久久久网| 97久久精品人人澡人人爽| 亚洲精品高清视频在线观看| 欧美日韩国产片| 久久99精品国产麻豆婷婷洗澡| 国产香蕉久久精品综合网| 成人aa视频在线观看| 亚洲综合视频在线| 欧美成人在线直播| 成人午夜av电影| 夜夜精品视频一区二区| 91精品国产色综合久久久蜜香臀| 日本免费新一区视频| 久久精品亚洲麻豆av一区二区| 99热99精品| 人人超碰91尤物精品国产| 国产午夜精品一区二区| 在线影院国内精品| 九九国产精品视频| 亚洲欧美日韩在线播放| 91精品一区二区三区在线观看| 国产一区高清在线| 亚洲一线二线三线视频| 精品理论电影在线观看| 色综合中文综合网| 中文字幕不卡一区| 精品视频色一区| 国产裸体歌舞团一区二区| 一区二区三区日韩欧美精品| 精品入口麻豆88视频| 色94色欧美sute亚洲13| 狠狠狠色丁香婷婷综合激情| 一区二区三区加勒比av| 久久久久久久久久看片| 欧美色电影在线| 成+人+亚洲+综合天堂| 日本网站在线观看一区二区三区| 欧美激情一区二区三区全黄 | 国产精品国产a| 日韩一区二区三区观看| 91香蕉视频黄| 黄色精品一二区| 亚洲成a人v欧美综合天堂下载 |