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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mbmaster.c

?? S3C2410ARM處理器的uCos2移植實驗代碼
?? C
字號:
/****************************************Copyright (c)**************************************************
**                                  廣州致遠電子有限公司
**
**                                 http://www.21cm.com.cn
**
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			MBMaster.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"

#define ERR_ADRRESS 	0xff		// 設備地址無效
#define ERR_PARAMETER	0xfe		// 輸入參數無效出錯

#define ERR_TIMEOUT		0xfd		// 沒應答超時出錯
#define ERR_FRAME		0xfc		// 接收到的幀出錯(CRC出錯)
#define ERR_NON			0x00		// 正常返回


#define MB_POLL_TIMEOUT		100
#define MB_POLL_DELAY		5


extern FUNCTION_PACK_PDU FunPDUPackHanlde[MAX_FUNCTION];
extern FUNCTION_DATA_HANDLE FunParRepAndStData[MAX_FUNCTION];

uint16 Modbus_CRC16(uint8 *Buff_addr,uint16 len);
void SendResponse(uint8 *buff,uint16 len);

//*****************************************************************************
// 函數名稱:
// 輸入參數:
// 輸出參數:
// 功能描述:
//*****************************************************************************


uint8 ADUBuffer[256];

extern g_WaitN10mS;

#ifdef UCOSII
	OS_EVENT *mb_handle_event_ptr;
	OS_EVENT *mb_reply_event_ptr;
	OS_EVENT *mb_idle_event_ptr;
#endif

MASTER_INFORMATION MB_Master;
//********************************************************************************************************
// 函數名稱:MBSlaveIni
// 輸入參數:無
// 輸出參數:無
// 功能描述:MODBUS從機初始化
//********************************************************************************************************
void MBMasterIni(void)
{

	MB_Master.Status = MB_MASTER_IDLE;	// 主機空閑
	ADUData.Address = 0;
	ADUData.ADUBuffPtr = ADUBuffer;
	ADUData.ADULength = 0;

//	ADUData.RedundancyCheck = 0;
	ADUData.EndT15 = FALSE;
	ADUData.FrameOK = FALSE;
//	ADUData.OverTime = FALSE;
	PDUData.PDUBuffPtr = NULL;
//	PDUData.Response.ExceptionCode = 0;
#ifdef UCOSII
	mb_idle_event_ptr   = OSSemCreate(1);			// MODBUS主機空閑信號量
	mb_handle_event_ptr = OSSemCreate(0);			// MODBUS處理信號量
	mb_reply_event_ptr  = OSMboxCreate((void *)0);	// MODBUS處理應答消息
#endif
}


//******************************************************************************************
// 函數名稱:ModbusPoll
// 輸入參數:NodeID,節點ID(設備地址)
// 			 FunctionCode,功能代碼
//			 ParameterPtr,參數入口
// 輸出參數:err,指令執行狀態
// 功能描述:
//******************************************************************************************

uint8 ModbusPoll(uint8 NodeID,uint8 FunctionCode,void *ParameterPtr)
{
	uint8 i,err;
	ADUData.Address = NodeID;
	

	for(i=0;i<MAX_FUNCTION;i++)							// 查打有效的功能代碼			
	{	if(FunPDUPackHanlde[i].Code==FunctionCode)		// 查找功能代碼處理函數
		{
		#ifdef UCOSII
			OSSemPend(mb_idle_event_ptr,0,&err);		// 等待可以操作MODBUS主機的一個信號量	
		#else
			if(MB_Master.Status!=(uint8)MB_MASTER_IDLE)
				return (uint8)MB_MASTER_BUSY;			// 無效指令返回
		#endif	
			PDUData.PDUBuffPtr = ADUData.ADUBuffPtr+1;	// 設置PDU起始指針
			FunPDUPackHanlde[i].Function(ParameterPtr);	// 調用功能代碼處理函數
			PDUData.FrameOK = TRUE;						// 請求幀準備就緒
			MB_Master.ParPtr = ParameterPtr;			// 請求參數結構指針
			
		#ifdef UCOSII
			OSSemPost(mb_handle_event_ptr);				// 發報信號量,使MODBUS服務任務處理傳輸
			err = *(uint8 *)OSMboxPend(mb_reply_event_ptr,0,&err);	// 等待執行完成	
		#else
			do
			{
				err = IdleModbus();
			}while(MB_Master.Status==(uint8)MB_MASTER_BUSY);
		#endif		
			return err;	// 無效指令返回

		}
	}
	return (uint8)MB_FUN_NOT_DEF;
}


//******************************************************************************************
// 函數名稱:ParseReponseAndStoreData
// 輸入參數:無
// 輸出參數:無
// 功能描述:解析應答幀,并保存數據
//******************************************************************************************
uint8 ParseReponseAndStoreData(void)
{
	uint8 i,err;
	err = MB_FUN_NOT_DEF;
	for(i=0;i<MAX_FUNCTION;i++)							
		if(FunParRepAndStData[i].Code==PDUData.FunctionCode)		// 查找功能代碼處理函數
		{
			if(PDUData.PDUBuffPtr[0]&0x80)	// 異常產生
			{	err = PDUData.PDUBuffPtr[1];}
			else	
			{	err = MB_NO_ERR;
				FunParRepAndStData[i].Function(PDUData.PDUBuffPtr,MB_Master.ParPtr);	// 調用功能代碼處理函數
			}
			break;
		}
	return err;// 未定義功能碼
}

//******************************************************************************************
// 函數名稱:CheckModbusMessage
// 輸入參數:無
// 輸出參數:ADU描述符
// 功能描述:檢查是否有需要發送的的幀
//******************************************************************************************
ADU_CONTROL *CheckModbusMessage(void)
{
	uint16 CRC16;
	uint8 *ADUPtr;
	if(PDUData.FrameOK == TRUE)			// 請求幀的PDU是否準備就緒
	{
		PDUData.FrameOK = FALSE;		// 清PDU是否準備就緒標志,當接收到有效的PDU后將被再次置1
		ADUPtr = ADUData.ADUBuffPtr;
		ADUPtr[0] = ADUData.Address;	// 設置ADU地址(節點)
		
		CRC16 = Modbus_CRC16(ADUPtr,PDUData.PDULength+1);	// 求CRC16值
		ADUPtr[PDUData.PDULength+1] = CRC16;				// 設置CRC16值
		ADUPtr[PDUData.PDULength+2] = CRC16>>8;
		ADUData.ADULength=PDUData.PDULength+3;		// ADU長度等于PDU長度加1個地址和2個CRC字符
		ADUData.FrameOK = TRUE;						// 標記ADU請求幀準備就緒
		
		return (ADU_CONTROL *) &ADUData;			
	}
	else
		return NULL;
}








//******************************************************************************************
// 函數名稱:IdleModbus
// 輸入參數:無
// 輸出參數:MODBUS主機狀態
// 功能描述:
//******************************************************************************************
uint8 IdleModbus(void)
{
	static uint8 err;
	static uint8  modbus_state=0;
	
#ifdef	UCOSII
	OSSemPend(mb_handle_event_ptr,0,&err);
#endif	
	
	err = MB_MASTER_BUSY;
	switch ( modbus_state )
	{
      	case 0:
         	/******************************************************************/
         	/*       CHECK FOR THE NEXT MESSAGE TO SEND                       */
         	/*       檢查需要發送的消息,并發送請求幀						  */
         	/******************************************************************/
        	if ( CheckModbusMessage() )
			{     
				/******************************************************************/
	         	/*       SEND THE POLL                                            */
	         	/*		發送請求幀												  */
	         	/******************************************************************/
	         	SendResponse(ADUData.ADUBuffPtr,ADUData.ADULength);// 發送幀
	        	ADUData.FrameOK = FALSE;
	        	ADUData.ADULength = 0;
   				MB_Master.Status = (uint8)MB_MASTER_BUSY;				// 設置主機忙狀態
	        	Waite10mS(MB_POLL_TIMEOUT);			// 命令應答計時 
	            modbus_state++;
 				
            }
            else
            	err = MB_MASTER_IDLE;	// 沒有功能代碼需傳輸
         	break;
      	case 1:
         	/******************************************************************/
         	/*       GET THE PACKET AND MAKE SURE IT IS COMPLETE              */
         	/******************************************************************/
         	if ( PDUData.FrameOK )	// 成功接收PDU幀
            {
                /******************************************************************/
         		/*       PARSE THE RESPONSE AND STORE THE DATA                    */
         		/*       解析應等幀,并儲存數據									  */
         		/******************************************************************/
         		err = ParseReponseAndStoreData();
         		PDUData.FrameOK = FALSE;
         		Waite10mS(MB_POLL_DELAY);	
    		#ifdef	UCOSII
				OSMboxPost(mb_reply_event_ptr,&err);  		   
			#endif		 
            	modbus_state++;
            	break;
            }

         	/******************************************************************/
         	/*       IF NO RESPONSE RECEIVED TIME OUT AND SEND NEXT POLL      */
         	/******************************************************************/
         	if (g_TimeEnd)
            {
            	modbus_state = 0;
            	MB_Master.Status = MB_MASTER_IDLE;	// 主機空閑
            	err = MB_RESPONSE_TIME_OUT;
 			#ifdef	UCOSII
				OSMboxPost(mb_reply_event_ptr,&err);  		   
			#endif	
            }
         	break;
      	case 2:
         	/******************************************************************/
         	/*       POLL DELAY                                               */
         	/*		輪循延時												  */
         	/******************************************************************/

         	if (g_TimeEnd)
            {
               	modbus_state=0;
          		MB_Master.Status = MB_MASTER_IDLE;	// 主機空閑
            }
      	default:
         	break;
      }
      
#ifdef	UCOSII
	if(MB_Master.Status == MB_MASTER_IDLE)
		OSSemPost(mb_idle_event_ptr);     
#endif
    return err;
}







?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re这里只有精品视频首页| 成人一区二区三区| 欧美色综合天天久久综合精品| 亚洲欧美视频在线观看视频| 欧美性猛交xxxx黑人交| 亚洲国产精品综合小说图片区| 在线不卡欧美精品一区二区三区| 日韩电影网1区2区| 亚洲精品在线电影| 成人看片黄a免费看在线| 一区二区三区四区国产精品| 欧美疯狂做受xxxx富婆| 国产一区二区影院| 国产精品第一页第二页第三页| 在线观看三级视频欧美| 日本亚洲视频在线| 国产拍揄自揄精品视频麻豆| 91色乱码一区二区三区| 美女在线观看视频一区二区| 国产精品麻豆欧美日韩ww| 欧美日韩精品一二三区| 国产盗摄视频一区二区三区| 亚洲一级二级三级| 久久综合九色综合97婷婷| 91丨九色porny丨蝌蚪| 免费一级片91| 亚洲人成人一区二区在线观看| 69av一区二区三区| 色综合天天综合狠狠| 老司机一区二区| 亚洲欧美日韩在线| 久久综合中文字幕| 欧美日韩免费电影| 成人黄色av网站在线| 毛片不卡一区二区| 亚洲午夜一区二区三区| 久久久久国产成人精品亚洲午夜| 欧美三级日韩三级国产三级| 国产iv一区二区三区| 日本亚洲一区二区| 一区二区三区在线免费播放| 亚洲精品在线免费观看视频| 欧美日韩在线免费视频| 成人午夜视频免费看| 久久99国产精品麻豆| 性做久久久久久久免费看| 一色屋精品亚洲香蕉网站| 精品国产自在久精品国产| 欧美日韩国产首页在线观看| 一本一本大道香蕉久在线精品 | 欧美美女视频在线观看| 高清不卡一二三区| 精品亚洲porn| 日本女优在线视频一区二区| 亚洲综合一区二区三区| 亚洲日本va午夜在线电影| 国产日韩高清在线| 精品女同一区二区| 欧美一区二区福利在线| 欧美日高清视频| 欧美又粗又大又爽| 精品国产一区二区三区久久久蜜月 | 亚洲一区精品在线| 亚洲人妖av一区二区| 国产精品青草综合久久久久99| 久久亚洲免费视频| 精品国产一区二区三区久久久蜜月| 欧美一区二区三区视频免费播放| 欧美日韩精品一区二区三区蜜桃 | 六月丁香综合在线视频| 日本不卡在线视频| 欧美a一区二区| 日韩精品久久久久久| 日韩精品亚洲专区| 免费成人在线网站| 精品制服美女久久| 国产一区 二区 三区一级| 国内外成人在线| 国产馆精品极品| 99精品久久久久久| 在线亚洲人成电影网站色www| 91国产丝袜在线播放| 在线观看国产日韩| 欧美日韩国产美| 欧美一区二区黄| 久久综合九色综合97_久久久| 久久久久久一二三区| 国产精品福利电影一区二区三区四区| 国产精品美女久久久久久2018| 国产精品不卡视频| 一二三四区精品视频| 男女男精品视频| 国产剧情av麻豆香蕉精品| 成人av电影在线网| 欧美日韩在线一区二区| 91精品国产一区二区人妖| 精品国产一区二区三区久久久蜜月| 久久亚洲一区二区三区明星换脸| 中文字幕av一区二区三区| 樱桃视频在线观看一区| 日本欧美一区二区三区乱码| 国产精品影视在线| 一本久久a久久免费精品不卡| 777奇米四色成人影色区| 久久免费的精品国产v∧| 亚洲亚洲人成综合网络| 国产成人8x视频一区二区| 成人深夜在线观看| 成人精品亚洲人成在线| 91国偷自产一区二区使用方法| 在线成人av影院| 国产精品色噜噜| 日韩专区一卡二卡| 成人黄页在线观看| 欧美一区二区三区影视| 国产精品午夜免费| 日本不卡一区二区| 91丝袜国产在线播放| 精品国产伦理网| 亚洲乱码国产乱码精品精小说| 久久精品国产精品亚洲红杏| 99久久99久久久精品齐齐| 日韩免费一区二区三区在线播放| 国产精品国产自产拍高清av| 美女视频网站黄色亚洲| 色老汉一区二区三区| 久久久夜色精品亚洲| 污片在线观看一区二区| 91网上在线视频| 久久综合999| 天天操天天干天天综合网| 91在线观看免费视频| 精品美女在线观看| 日韩有码一区二区三区| 日本高清不卡一区| 久久久久国产成人精品亚洲午夜| 视频在线观看91| 在线免费观看日本一区| 中文天堂在线一区| 久久99国内精品| 欧美久久久久中文字幕| 中文字幕一区二区三区不卡| 国产乱码精品1区2区3区| 欧美日韩亚洲高清一区二区| 亚洲男女一区二区三区| 国产99精品在线观看| 欧美精品一区二区三区蜜臀 | 日本一区二区电影| 狠狠狠色丁香婷婷综合激情| 欧美一区二区三区婷婷月色| 亚洲最大色网站| 色婷婷国产精品| 亚洲人精品午夜| 日韩欧美视频一区| 天天操天天综合网| 欧美美女一区二区| 首页国产欧美日韩丝袜| 91麻豆精品国产91久久久更新时间| 亚洲精品亚洲人成人网| 91美女片黄在线观看91美女| 亚洲欧洲日产国码二区| 91色porny蝌蚪| 亚洲精品国产视频| 91福利在线看| 亚洲线精品一区二区三区| 欧美视频三区在线播放| 亚洲综合激情网| 欧美日韩成人综合天天影院| 午夜精品福利在线| 7777女厕盗摄久久久| 日本不卡一二三区黄网| 欧美tk丨vk视频| 国产精品一卡二卡在线观看| 国产视频911| 成人avav影音| 亚洲国产精品综合小说图片区| 欧美日韩不卡一区| 久久精品国产秦先生| 久久久久久久综合色一本| 大白屁股一区二区视频| 亚洲欧洲精品一区二区三区不卡| 99久久精品国产导航| 亚洲观看高清完整版在线观看| 欧美精品一二三| 国内精品国产三级国产a久久| 国产日本欧美一区二区| 色呦呦日韩精品| 午夜精品福利在线| 久久影音资源网| 93久久精品日日躁夜夜躁欧美| 亚洲国产另类精品专区| 精品国产一区二区三区不卡| 成人h动漫精品| 日韩电影一区二区三区| 久久久久亚洲综合| 在线观看日韩电影| 九色综合狠狠综合久久| 亚洲丝袜美腿综合| 欧美成人官网二区| 91色综合久久久久婷婷|