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

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

?? mb_mfunction.c

?? 基于飛利浦ARM的modbus工業(yè)總線開發(fā)
?? C
字號(hào):
/****************************************Copyright (c)**************************************************
**                               廣州周立功單片機(jī)發(fā)展有限公司
**                                     研    究    所
**                                        產(chǎn)品一部 
**
**                                 http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: MB_MFunction.c
**創(chuàng)   建   人: 周立山
**最后修改日期: 2005年7月29日
**描        述: MODBUS RTU 協(xié)議棧
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創(chuàng)建人: 周立山
** 版  本: 1.0a
** 日 期: 2005年7月29日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人: 
** 版  本: 
** 日 期: 
** 描 述: 
**
**--------------當(dāng)前版本修訂------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"

 void Test(void *ParameterPtr)
 {
 
 }


 void Test2(uint8 *PDUPtr,void *ParameterPtr)
 {
 
 }
 //***************************************************************
// 函數(shù)名稱:ReadOper2PDU
// 輸入?yún)?shù):ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:封裝讀操作幀。0x01
//***************************************************************
void ReadOper2PDU( uint8 FunCode,void *ParameterPtr )
{
 	 READ_PARAMET *PPtr;
 	 uint8 Request[5];
 	 PPtr = (READ_PARAMET *)ParameterPtr;

 	 Request[0] = FunCode;

 	 Request[1] = (uint8)(PPtr->RStartAddr>>8);
 	 Request[2] = (uint8)(PPtr->RStartAddr);
 	 
 	 Request[3] = (uint8)(PPtr->RQuantity>>8);
 	 Request[4] = (uint8)(PPtr->RQuantity);
 	 
 	 PutDataInPUD(Request,5);
 
}
//***************************************************************
// 函數(shù)名稱:ReadRegPRASD
// 輸入?yún)?shù):PDUPtr,保存收到的數(shù)據(jù)的起始指針
//			 ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:處理收到的寄存器(保存寄存器/輸入寄存器)數(shù)據(jù)。
//***************************************************************
 void ReadRegPRASD(uint8 *PDUPtr,void *ParameterPtr)
 {
 	uint8 ByteCount;
 	uint8 i;
 	uint8 *DataPtr;
 	READ_PARAMET *PPtr;
 	
 	PPtr = (READ_PARAMET *)ParameterPtr;	// 指令參數(shù)結(jié)構(gòu)指針
 	DataPtr = &PDUPtr[2];					// 數(shù)據(jù)或起始指針
 	ByteCount = PDUPtr[1];					// 寄存器個(gè)數(shù)
	for(i=0;i<(ByteCount/2);i++)
	{
		*(PPtr->DataPtr+i) = (DataPtr[i*2]<<8)|DataPtr[i*2+1];
	}
 }
 
 //***************************************************************
// 函數(shù)名稱:ReadDiscretePRASD
// 輸入?yún)?shù):PDUPtr,保存收到的數(shù)據(jù)的起始指針
//			 ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:處理收到的離散或線圈數(shù)據(jù)。
//***************************************************************
 void ReadDiscretePRASD(uint8 *PDUPtr,void *ParameterPtr)
 {
 	uint8 ByteCount;
 	uint8 i;
 	uint8 *DataPtr;
 	READ_PARAMET *PPtr;
 	
 	PPtr = (READ_PARAMET *)ParameterPtr;	// 指令參數(shù)結(jié)構(gòu)指針
 	ByteCount = PDUPtr[1];					// 寄存器個(gè)數(shù)
	DataPtr = (uint8 *)PPtr->DataPtr;
	for(i=0;i<ByteCount;i++)
	{
		DataPtr[i] = PDUPtr[2+i];
	}
 }
 
 
 // 數(shù)據(jù)處理函數(shù)
 void NoDataPRASD(uint8 *PDUPtr,void *ParameterPtr) 
 {
	PDUPtr = PDUPtr;
 	ParameterPtr = ParameterPtr;
 }
 
 /****************************************************************/
 void ReadCoils2PDU(void *ParameterPtr);			// 讀線圈寄存器
 void ReadDiscreteInputs2PDU(void *ParameterPtr);	// 讀離散輸入寄存器
 void ReadHoldReg2PDU(void *ParameterPtr);			// 讀保持寄存器
 void ReadInputReg2PDU(void *ParameterPtr);			// 讀輸入寄存器

 void WriteSingleCoil2PDU(void *ParameterPtr);		// 寫單個(gè)線圈
 void WriteSingleRegPDU(void *ParameterPtr);		// 寫單寄存器
 void WriteMultipleCoils2PDU(void *ParameterPtr);	// 寫多線圈
 void WriteMultipleReg2PDU(void *ParameterPtr);		// 寫多寄存器

 void MaskWriteReg2PDU(void *ParameterPtr);			// 處理屏蔽寄存器指令
 void ReadWriteMultipleReg2PDU(void *ParameterPtr);	// 讀寫多個(gè)寄存器

FUNCTION_PACK_PDU FunPDUPackHanlde[MAX_FUNCTION]={
	{0x01,ReadCoils2PDU},			// 讀線圈
	{0x02,ReadDiscreteInputs2PDU},	// 讀離散量輸入
	{0x03,ReadHoldReg2PDU},			// 讀保持寄存器
	{0x04,ReadInputReg2PDU},		// 讀輸入寄存器
	
	{0x05,WriteSingleCoil2PDU},		// 寫單個(gè)線圈
	{0x06,WriteSingleRegPDU},		// 寫單個(gè)寄存器
	{0x0f,WriteMultipleCoils2PDU},
	{0x10,WriteMultipleReg2PDU},
	
	{0x16,MaskWriteReg2PDU},		// 處理屏蔽寄存器指令
	{0x17,ReadWriteMultipleReg2PDU}	// 讀寫多個(gè)寄存器
		
};


 void ReadOper2PDU( uint8 FunCode,void *ParameterPtr );
// Function of Parse Reponse And StoreData


FUNCTION_DATA_HANDLE FunParRepAndStData[MAX_FUNCTION]={
	{0x01,ReadDiscretePRASD},// 讀線圈
	{0x02,ReadDiscretePRASD},// 讀離散量輸入,與讀線圈處理方式一樣
	{0x03,ReadRegPRASD},	 // 讀保持寄存器
	{0x04,ReadRegPRASD},	 // 讀輸入寄存器處理函數(shù)
	
	{0x05,NoDataPRASD},
	{0x06,NoDataPRASD},
	{0x0f,NoDataPRASD},
	{0x10,NoDataPRASD},
	
	{0x16,NoDataPRASD},		// 處理屏蔽寄存器指令
	{0x17,ReadRegPRASD}		// 讀寫多個(gè)寄存器

};



//***************************************************************
// 函數(shù)名稱:ReadCoils2PDU
// 輸入?yún)?shù):ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:封裝讀線圈幀。0x01
//***************************************************************
void ReadCoils2PDU(void *ParameterPtr)
{
 	ReadOper2PDU( 0x01,ParameterPtr );
}

//***************************************************************
// 函數(shù)名稱:ReadDiscreteInputs2PDU
// 輸入?yún)?shù):ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:封裝讀離散輸入幀。0x02
//***************************************************************
void ReadDiscreteInputs2PDU(void *ParameterPtr)
{
 	ReadOper2PDU( 0x02,ParameterPtr );
}

//***************************************************************
// 函數(shù)名稱:ReadHoldReg2PDU
// 輸入?yún)?shù):ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:封裝讀保持寄存器幀。0x03
//***************************************************************
 void ReadHoldReg2PDU(void *ParameterPtr)
 {
 	ReadOper2PDU( 0x03,ParameterPtr );
 }
 
//***************************************************************
// 函數(shù)名稱:ReadInputReg2PDU
// 輸入?yún)?shù):ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:封裝讀輸入寄存器幀。0x04
//***************************************************************
 void ReadInputReg2PDU(void *ParameterPtr)
 {
 	ReadOper2PDU( 0x04,ParameterPtr );
 }
 
 
//***************************************************************
// 函數(shù)名稱:WriteSingleCoil2PDU
// 輸入?yún)?shù):ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:封裝寫單個(gè)線圈幀。0x05
//***************************************************************
 void WriteSingleCoil2PDU(void *ParameterPtr)
{
	 RW_PARAMET *PPtr;
 	 uint8 Request[5];
 	 PPtr = (READ_PARAMET *)ParameterPtr;

 	 Request[0] = 0x05;

 	 Request[1] = (uint8)(PPtr->WStartAddr>>8);
 	 Request[2] = (uint8)(PPtr->WStartAddr);
 	 
 	 Request[3] = (uint8)((*PPtr->DataPtr)>>8);
 	 Request[4] = (uint8)(*PPtr->DataPtr);
 	 
 	 PutDataInPUD(Request,5);	
}

//***************************************************************
// 函數(shù)名稱:WriteSingleRegPDU
// 輸入?yún)?shù):ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:封裝寫單個(gè)寄存器幀。0x06
//***************************************************************
 void WriteSingleRegPDU(void *ParameterPtr)
{
	
	 RW_PARAMET *PPtr;
 	 uint8 Request[5];
 	 PPtr = (READ_PARAMET *)ParameterPtr;

 	 Request[0] = 0x06;

 	 Request[1] = (uint8)(PPtr->WStartAddr>>8);
 	 Request[2] = (uint8)(PPtr->WStartAddr);
 	 
 	 Request[3] = (uint8)((*PPtr->DataPtr)>>8);
 	 Request[4] = (uint8)(*PPtr->DataPtr);
 	 
 	 PutDataInPUD(Request,5);	
}
 
//***************************************************************
// 函數(shù)名稱:WriteMultipleCoils2PDU
// 輸入?yún)?shù):ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:封裝寫多個(gè)線圈幀。0x0f
//***************************************************************
 void WriteMultipleCoils2PDU(void *ParameterPtr)	// 寫多線圈
 {
 	 WRITE_PARAMET *PPtr;
 	 uint8 *DataPtr;
 	 uint8 Request[256],i;
 	 uint8 Bytes;
 	 
 	 PPtr = (WRITE_PARAMET *)ParameterPtr;
	 Bytes = (PPtr->WQuantity/8)+(PPtr->WQuantity%8)?1:0;
 	
 	 Request[0] = 0x0f;
 	 Request[1] = (uint8)(PPtr->WStartAddr>>8);
 	 Request[2] = (uint8)(PPtr->WStartAddr);
 	 Request[3] = (uint8)(PPtr->WQuantity>>8);
 	 Request[4] = (uint8)(PPtr->WQuantity);
 	 Request[5] = Bytes;	// 字符個(gè)數(shù)
 	 
 	 DataPtr = (uint8*)PPtr->DataPtr;

 	 
 	 for(i=0;i<Bytes;i++)
 	 {
 	 	Request[6+i] = *(DataPtr+i) ;
 	 }
 	 
 	 PutDataInPUD(Request,6+Bytes);
 }
 
//***************************************************************
// 函數(shù)名稱:WriteSingleCoil2PDU
// 輸入?yún)?shù):ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:封裝寫多個(gè)寄存器幀。0x10
//***************************************************************
 void WriteMultipleReg2PDU(void *ParameterPtr)
 {
  	 WRITE_PARAMET *PPtr;
 	 uint8 Request[256],i;
 	 
 	 PPtr = (WRITE_PARAMET *)ParameterPtr;
	
 	 Request[0] = 0x10;
 	 Request[1] = (uint8)(PPtr->WStartAddr>>8);
 	 Request[2] = (uint8)(PPtr->WStartAddr);
 	 Request[3] = (uint8)(PPtr->WQuantity>>8);
 	 Request[4] = (uint8)(PPtr->WQuantity);
 	 Request[5] = (uint8)(PPtr->WQuantity*2);	// 字符個(gè)數(shù)
 	 
 	 for(i=0;i<PPtr->WQuantity;i++)
 	 {
 	 	Request[6+i*2] = *(PPtr->DataPtr+i)>>8;
 	 	Request[7+i*2] = *(PPtr->DataPtr+i);
 	 }
 	 
 	 PutDataInPUD(Request,6+(PPtr->WQuantity)*2);
 } 

 //***************************************************************
// 函數(shù)名稱:MaskWriteReg2PDU
// 輸入?yún)?shù):ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:封裝屏蔽寫寄存器幀。0x16
//***************************************************************
 void MaskWriteReg2PDU(void *ParameterPtr)			// 處理屏蔽寄存器指令
{
	MASK_WRITE_REG *PPtr;
	uint8 Request[7];
	
	PPtr = (MASK_WRITE_REG *) ParameterPtr;
	Request[0] = 0x16;
	Request[1] =  (uint8)(PPtr->RefAddress>>8);
	Request[2] =  (uint8)(PPtr->RefAddress);
	Request[3] =  (uint8)(PPtr->And_Mask>>8);
	Request[4] =  (uint8)(PPtr->And_Mask);
	Request[5] =  (uint8)(PPtr->OR_Mask>>8);
	Request[6] =  (uint8)(PPtr->OR_Mask);

 	 PutDataInPUD(Request,7);						// 封裝PDU包
}


//***************************************************************
// 函數(shù)名稱:ReadWriteMultipleReg2PDU
// 輸入?yún)?shù):ParameterPtr,數(shù)據(jù)結(jié)構(gòu)指針
// 輸出參數(shù):無
// 功能描述:封裝讀和寫多個(gè)寄存器幀。0x17
//***************************************************************
 void ReadWriteMultipleReg2PDU(void *ParameterPtr)	// 讀寫多個(gè)寄存器
{
	RW_PARAMET *PPtr;
	uint8 Request[256];
	uint8 i;
	
	PPtr = (RW_PARAMET *) ParameterPtr;
	Request[0] = 0x17;
	Request[1] =  (uint8)(PPtr->RStartAddr>>8);		// 讀出的起始指針
	Request[2] =  (uint8)(PPtr->RStartAddr);
	Request[3] =  (uint8)(PPtr->RQuantity>>8);		// 讀出的數(shù)量
	Request[4] =  (uint8)(PPtr->RQuantity);
	Request[5] =  (uint8)(PPtr->WStartAddr>>8);		// 寫入的起始地址
	Request[6] =  (uint8)(PPtr->WStartAddr);
	Request[7] =  (uint8)(PPtr->WQuantity>>8);		// 寫入的數(shù)量
	Request[8] =  (uint8)(PPtr->WQuantity);
	
	Request[9] =  (uint8)(PPtr->WQuantity*2);		// 寫入的字節(jié)數(shù)
	
	for(i=0;i<PPtr->WQuantity;i++)					// 寫入的數(shù)據(jù)
 	{
 	 	Request[10+i*2] = *(PPtr->DataPtr+i)>>8;
 	 	Request[11+i*2] = *(PPtr->DataPtr+i);
 	}
 	PutDataInPUD(Request,10+(PPtr->WQuantity)*2);	// 封裝PDU包
}
 

 
//***************************************************************

//***************************************************************

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚瑟在线精品视频| 日韩一区二区免费电影| 欧洲av一区二区嗯嗯嗯啊| 欧美亚洲国产一区二区三区 | 中文字幕国产一区| 一区二区三区在线免费视频 | 久久综合狠狠综合久久综合88 | 成人精品视频一区二区三区尤物| 91免费视频网| 91精品国产综合久久久久久漫画| 亚洲精品一区二区三区福利| 国产精品国产三级国产普通话三级 | 亚洲一区二区欧美| 紧缚捆绑精品一区二区| 91色在线porny| 欧美一卡二卡三卡| 国产精品毛片久久久久久久| 天堂av在线一区| 岛国精品在线播放| 91精品午夜视频| 中文字幕不卡在线| 日本va欧美va精品| 91美女福利视频| 日韩精品一区二区三区在线| 亚洲免费在线观看视频| 久久国产三级精品| 99国产一区二区三精品乱码| 日韩视频免费直播| 亚洲欧美激情在线| 国产原创一区二区| 欧美性猛交xxxxxxxx| 中文字幕免费不卡| 日韩高清欧美激情| 99久久综合精品| 久久综合中文字幕| 丝袜美腿高跟呻吟高潮一区| 99视频超级精品| 亚洲精品一区二区三区99| 午夜视频一区二区| 91片黄在线观看| 久久久久久久综合日本| 日韩精品一二三| 色婷婷久久99综合精品jk白丝| 精品sm在线观看| 五月婷婷综合在线| 色综合天天综合网国产成人综合天| 精品免费国产一区二区三区四区| 亚洲妇女屁股眼交7| 99精品欧美一区二区三区综合在线| 日韩久久免费av| 午夜精品福利在线| 91福利精品第一导航| 国产精品进线69影院| 国产精品资源在线看| 欧美大片一区二区三区| 视频一区二区中文字幕| 精品视频一区二区不卡| 亚洲靠逼com| 91在线小视频| 亚洲视频中文字幕| 国产91精品露脸国语对白| 亚洲精品一区二区三区四区高清 | 日韩欧美国产一区二区在线播放| 亚洲一区二区三区自拍| 95精品视频在线| 1区2区3区国产精品| 成人三级在线视频| 国产网站一区二区三区| 国产一区二区三区不卡在线观看 | 蜜臀av性久久久久av蜜臀妖精| 欧美日韩国产影片| 亚洲不卡在线观看| 色素色在线综合| 一区二区三区四区国产精品| 色综合视频一区二区三区高清| 国产精品乱码人人做人人爱| 懂色av一区二区夜夜嗨| 国产欧美一区二区精品久导航 | 国产精品乱人伦| 99这里都是精品| 中文字幕一区二区三区色视频| 成人深夜福利app| 亚洲视频免费看| 一本色道久久综合亚洲aⅴ蜜桃 | 91电影在线观看| 亚洲一线二线三线视频| 欧美日韩在线播放一区| 亚洲va欧美va天堂v国产综合| 欧美日韩电影在线播放| 水野朝阳av一区二区三区| 制服丝袜亚洲网站| 国产中文字幕精品| 久久久一区二区| 成人小视频免费观看| 136国产福利精品导航| 欧美手机在线视频| 午夜精品久久久| www国产亚洲精品久久麻豆| 国产·精品毛片| 亚洲男女毛片无遮挡| 欧美另类高清zo欧美| 337p亚洲精品色噜噜噜| 理论电影国产精品| 国产欧美一区二区精品秋霞影院| 91香蕉视频污在线| 日韩中文字幕1| 久久亚洲私人国产精品va媚药| 99久久夜色精品国产网站| 怡红院av一区二区三区| 欧美一区二区大片| 国产成人av电影在线播放| 亚洲精品乱码久久久久久| 日韩亚洲欧美高清| 成人国产精品视频| 午夜久久久久久久久| 久久在线免费观看| 91老师片黄在线观看| 无吗不卡中文字幕| 欧美国产精品中文字幕| 欧美视频一区二区三区四区 | 久久久噜噜噜久久人人看| 一本大道综合伊人精品热热 | 久久久一区二区三区| 91激情五月电影| 精品亚洲porn| 一区二区三区在线视频免费| 欧美大片国产精品| 91国偷自产一区二区三区观看| 精品伊人久久久久7777人| 亚洲日本va在线观看| 日韩欧美一区二区在线视频| av在线不卡观看免费观看| 日韩福利电影在线观看| 国产精品日产欧美久久久久| 欧美日韩三级一区二区| 成人性生交大片免费看中文| 日本免费新一区视频| 国产精品盗摄一区二区三区| 欧美一区二区三区在| 91视频国产观看| 国产精品亚洲视频| 日韩精品一级二级| 亚洲精品国产视频| 国产午夜亚洲精品午夜鲁丝片| 欧美性生活大片视频| a级高清视频欧美日韩| 久久99精品久久久久久国产越南 | 欧美最新大片在线看| 国产成人在线影院| 久久精品国产免费| 亚洲va在线va天堂| 亚洲乱码国产乱码精品精小说 | 麻豆专区一区二区三区四区五区| 久久综合狠狠综合久久综合88 | aaa亚洲精品| 国产自产2019最新不卡| 一区二区三区美女| 久久久久久亚洲综合| 欧美另类z0zxhd电影| 在线观看区一区二| 国产成人精品免费网站| 首页亚洲欧美制服丝腿| 国产成人自拍高清视频在线免费播放| 日韩精品高清不卡| 亚洲人一二三区| 久久久99免费| 色偷偷88欧美精品久久久| 春色校园综合激情亚洲| 日本sm残虐另类| 亚洲一级不卡视频| 久久久www成人免费无遮挡大片| 欧美不卡在线视频| 欧美私模裸体表演在线观看| 成人午夜电影久久影院| 亚洲自拍偷拍图区| 亚洲精品日韩一| 中文字幕成人在线观看| 精品99999| 91精品国产91综合久久蜜臀| 欧美图片一区二区三区| 99精品欧美一区二区蜜桃免费| 国产精品一二一区| 奇米四色…亚洲| 免费一级欧美片在线观看| 亚洲一区在线视频观看| 亚洲婷婷综合色高清在线| 精品国产百合女同互慰| 精品噜噜噜噜久久久久久久久试看| 在线观看亚洲专区| 99久久精品免费看国产免费软件| 国产自产v一区二区三区c| 国产成人亚洲综合色影视| 精品一区二区在线看| 免费高清成人在线| 午夜日韩在线观看| 亚洲国产精品久久艾草纯爱| 亚洲精品国产a久久久久久| 亚洲三级久久久| 综合久久国产九一剧情麻豆| 国产精品剧情在线亚洲|