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

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

?? modbus.c

?? 基于TMS320F2812的電動機控制源碼(使用C語言)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*=====================================================================================
 File name:        Modbus.C  (28x version)                  
                    
 Originator:	   R&D Group
	           		NIE

 Dsscription:     communication  base on Modbus                 
 
=====================================================================================
 History:
-------------------------------------------------------------------------------------
 03-17-2005	Release	Rev 1.0
 
 08-13-2005 Release Rev 1.02
 	: 修改了漢字傳輸的順序,參數表可以直接輸入漢字
-------------------------------------------------------------------------------------*/
#include "DSP281x_Device.h"
#include "DSP281x_Sci.h"
#include "Modbus.h"         // Include header for Mudbus library
#include "fault_log.h"
extern FAULTLOG faultlog;
//#define FAULT_LOG_MAX  1

#define	WAIT_DATA_HEAD  0	//等待報頭
#define READ_DATA		1	//接受數據
#define PROCESSING_DATA 2   //處理數據
#define SEND_DATA		3	//發送響應報文

#define PARA_MAX_NUM    50
#define PARA_MAX_TBL_A	180
extern int Parameter0;

////////////rs485端口///////////////////////
void CommA(MODBUS *v)
{
	int	TempA,TempB,TempC;
	long * TablePoint;
	int * DataPoint;	

	//通訊幀故障清除
	if(SciaRegs.SCIRXST.bit.RXERROR)
	{
	SciaRegs.SCICTL1.bit.SWRESET=0;
	SciaRegs.SCICTL1.bit.SWRESET=1;
	}

	switch(v->CommFlag)	
	{
	//接受報頭
	case WAIT_DATA_HEAD:	
		{
		while((SciaRegs.SCIFFRX.bit.RXFIFST!=0)&&(v->CommFlag==0))
			{
			TempA=(SciaRegs.SCIRXBUF.all&0x00ff);
			if((TempA==0x00ff)||(TempA==v->Slave_Address))
				{
				v->CommData[0]=TempA;
		
		{		v->Index=1;
				v->CommFlag=READ_DATA;		//跳出本循環
				v->CommCount=0;
				}
			}
		}	
		break;
	//接受數據		
	case READ_DATA:
		v->CommCount++;
		while(SciaRegs.SCIFFRX.bit.RXFIFST!=0)
			{
			v->CommData[v->Index]=(SciaRegs.SCIRXBUF.all&0x00ff);	//
			//if((v->CommData[v->Index]&0x0ff00)==0)
				{		//數據必須正確
				v->Index++;
				if(v->Index>=PARANUMMAX)
					{
					v->Index=0;
					v->CommFlag = WAIT_DATA_HEAD;
					}
				v->CommCount=0;	
				}
			}	
		if(v->CommCount>=DELAYCOUNT)
			{
			v->CommFlag = PROCESSING_DATA;	
			}
		}	
		break;
	//處理報文,產生響應報文
	case PROCESSING_DATA:
		{
		if(CRC_cal(v->CommData,v->Index)==0)   //if1
			{
			switch(v->CommData[1])
				{	//switch2
				//MODBUS功能3
				case 3:				
					{
					TempA=(v->CommData[2]<<8)|(v->CommData[3]);		//參數起始地址
					switch(TempA)
						{	//switch3
						//菜單頁參數讀命令
						case 919:			
							{
							//固定長度響應報文
							v->CommData[2]=32;
							DataPoint=&ParaTblA[v->ParaNum][0] ;
							//讀取PARA_TAB中的數據
							TempA=3;
			  				while(TempA<(16*2+3))
			  					{
		  						v->CommData[TempA++]= ((*DataPoint)>>8)&0x00ff;
			  					v->CommData[TempA++]= (*DataPoint)&0x00ff;
			  					DataPoint++;
			  					}
			  				//寫入實際數據
			  				TablePoint=MenuInfo;
			  				DataPoint=(int *)TablePoint[v->ParaNum];		
							v->CommData[29]=(*DataPoint>>8)&0xff;    //寫入報文地址 
							v->CommData[30]=(*DataPoint)&0x0ff;    //寫入報文地址 
							TempA=CRC_cal(v->CommData,35);   //固定長度
							v->CommData[35]=(TempA>>8)&0x00ff;		//寫入CRC校驗位
							v->CommData[36]=TempA&0x00ff;

							v->Index = 36;			//共計發送36個數據
							v->CommCount = 0;
							v->CommFlag = SEND_DATA;  //轉入發送
							}
						break;
						//故障頁讀取
						case 900:			
							{
							v->CommData[2]=9*2;			//固定報文格式
							TempA=faultlog.log[v->FaultNum][0];
							DataPoint=&FaultTabA[TempA][0]; 			
							//讀取PARA_TAB中的數據
							v->CommData[3]=(faultlog.log[v->FaultNum][1])>>8;	//hour hi8
							v->CommData[4]=faultlog.log[v->FaultNum][1];	//hour low8
							v->CommData[5]=(faultlog.log[v->FaultNum][2])>>8;	//minute
							v->CommData[6]=faultlog.log[v->FaultNum][2];	//secend
							v->CommData[7]=(faultlog.log[v->FaultNum][3])>>8;	//ms	hi8
							v->CommData[8]=(faultlog.log[v->FaultNum][3]);	//ms	low8
							TempA=9;
			  				while(TempA<(9*2+9))
			  					{
			  					v->CommData[TempA++]= ((*DataPoint)>>8)&0x00ff;
			  					v->CommData[TempA++]= (*DataPoint)&0x00ff;
			  					DataPoint++;
			  					}
			  				//寫入實際數據
							TempA=CRC_cal(v->CommData,27);   		//固定長度
							v->CommData[27]=(TempA>>8)&0x00ff;		//寫入CRC校驗位
							v->CommData[28]=TempA&0x00ff;

							v->Index = 28;			//共計發送29個數據
							v->CommCount = 0;
							v->CommFlag = SEND_DATA;  //轉入發送
							}
						break;
						//其他,狀態頁讀取
						default:			
							{
							if(TempA<100)//  操作盤數據讀取
								{
								v->CommFlag = WAIT_DATA_HEAD;
								}
							else if(TempA<899)	//參數讀取
								{
								TablePoint=MenuInfo1;	
								TempA=TempA-100;		//相對參數頁首的偏移
								if(TempA<PARA_MAX_TBL_A)
									{
									TempB=(v->CommData[4]<<8)|(v->CommData[5])-1;	//數據個數
									TempC=TempB+TempA;	//
									v->CommData[2]=TempB*2+2;
									v->Index=TempB*2+4+1;
									for(;TempB>=0;TempB--,TempC--)
										{
										DataPoint=(int *)TablePoint[TempC];
										TempA = TempB*2+4;
										v->CommData[TempA]=(*DataPoint)&0x0ff;
										TempA--;
										v->CommData[TempA]=(*DataPoint>>8)&0x0ff;
										}
									TempB=CRC_cal(v->CommData,v->Index);   //個數=標號+1;
							
									v->CommData[v->Index]=(TempB>>8)&0xff;
									v->Index++;
									v->CommData[v->Index]=TempB&0xff;
									v->CommCount = 0;
									v->CommFlag = SEND_DATA;  //轉入發送
									}
								else
									{
									v->CommFlag = WAIT_DATA_HEAD;
									}	
								}
							else if(TempA<2000) //事件讀取
								{
								v->CommFlag = WAIT_DATA_HEAD; 
								}	
							else if(TempA<8031) //波形記錄讀取
								{
								DataPoint=(int*)(0x10bbcc);
								//DataPoint[21]=1;
								//DataPoint[22]=0;

								TempA-=2001;
								TempB=(v->CommData[4]<<8)|(v->CommData[5])-1;	//數據個數
								TempC=TempB+TempA;	//
								v->CommData[2]=TempB*2+2;
								v->Index=TempB*2+4+1;
								for(;TempB>=0;TempB--,TempC--)
									{
									TempA = TempB*2+4;
									v->CommData[TempA]=DataPoint[TempC]&0x0ff;
									TempA--;
									v->CommData[TempA]=(DataPoint[TempC]>>8)&0x0ff;
									}
								TempB=CRC_cal(v->CommData,v->Index);   //個數=標號+1;
							
								v->CommData[v->Index]=(TempB>>8)&0xff;
								v->Index++;
								v->CommData[v->Index]=TempB&0xff;
								v->CommCount = 0;
								v->CommFlag = SEND_DATA;  //轉入發送
								}
							else	//異常數據處理	 
								{
								v->CommFlag = WAIT_DATA_HEAD;
								}	
							}
							 	
						} //end switch3	
					}	//end switch2 case3
				break;
				//MODBUS功能16  寫數據
				case 16:			
					{
					TempA=(v->CommData[2]<<8)|(v->CommData[3]);		//參數起始地址
					switch(TempA)
						{	//switch16
						case 932:
							{
							TablePoint=MenuInfo;
							DataPoint=(int *)TablePoint[v->ParaNum];	//數據地址

							*DataPoint=(v->CommData[7]<<8)+(v->CommData[8]); 

							TempB=CRC_cal(v->CommData,6);   //個數=標號+1;
							
							v->CommData[6]=(TempB>>8)&0xff;
							v->CommData[7]=TempB&0xff;
							v->Index = 7;
							v->CommCount = 0;
							v->CommFlag = SEND_DATA;  //轉入發送
							}
							break;
						case 918:	//參數翻頁信息處理
							{
							TempB=(v->CommData[7]<<8)+(v->CommData[8]);  
							if(TempB==2)
								{
								v->ParaNum--; 
								if(v->ParaNum < 0 )
									v->ParaNum = MENU_MAX_NUMBER_TBLA -1;
								}
							else if(TempB==1)
								{
								v->ParaNum++;
								if(v->ParaNum >= MENU_MAX_NUMBER_TBLA)
									v->ParaNum = 0;
								}
							
								TempB=CRC_cal(v->CommData,6);   //個數=標號+1;
						
								v->CommData[6]=(TempB>>8)&0xff;
								v->CommData[7]=TempB&0xff;
								v->Index = 7;
								v->CommCount = 0;
								v->CommFlag = SEND_DATA;  //轉入發送
							}
						break;
						case 912:		//故障翻頁信息
							{
							TempB=(v->CommData[7]<<8)+(v->CommData[8]);  
							if(TempB==2)
								{
								v->FaultNum--; 
								if(v->FaultNum < 0 )
									v->FaultNum = FAULT_LOG_MAX -1;
								}
							else if(TempB==1)
								{
								v->FaultNum++;
								if(v->FaultNum >= FAULT_LOG_MAX)
									v->FaultNum = 0;
								}
							
								TempB=CRC_cal(v->CommData,6);   //個數=標號+1;
						
								v->CommData[6]=(TempB>>8)&0xff;
								v->CommData[7]=TempB&0xff;
								v->Index = 7;
								v->CommCount = 0;
								v->CommFlag = SEND_DATA;  //轉入發送
							}
						break;
						default:
							{

							if(TempA < 100)		//操作盤參數更新
								{
								v->Index = 0;
								}
							else if(TempA<900)  //參數列表內參數數據更新
								{
								TablePoint=MenuInfo1;	
//								TablePoint=MenuInfo91;
								
								TempA=TempA-100;		//相對參數頁首的偏移

								TempB=(v->CommData[4]<<8)|(v->CommData[5])-1;	//數據個數
								TempC=TempB+TempA;	//數據地址
								v->Index=TempB*2+4+1;
								for(;TempB>=0;TempB--,TempC--)
									{
									DataPoint=(int *)TablePoint[TempC];
									TempA = TempB*2+7;
									//增加權限控制
									*DataPoint=(v->CommData[TempA]<<8)+v->CommData[TempA+1] ;
									}
								TempB=CRC_cal(v->CommData,6);   //個數=標號+1;
						
								v->CommData[6]=(TempB>>8)&0xff;
								v->CommData[7]=TempB&0xff;
								v->Index = 7;
								v->CommCount = 0;
								v->CommFlag = SEND_DATA;  //轉入發送
							  }
							else if(TempA<=2000)
								{
								v->Index = 0;			//對事件記錄部分修改無效
								}
							else if(TempA<=2021)			//
								{
								TempA=TempA-2001;		//相對頁首的偏移
								TempB=(v->CommData[4]<<8)|(v->CommData[5])-1;	//數據個數
								DataPoint=(int *)(0x10bbcc+TempA);
								TempC=TempB+TempA;	//數據地址
								DataPoint=(int *)(0x10bbcc+TempC);
								v->Index=TempB*2+4+1;
								for(;TempB>=0;TempB--)
									{
									TempA = TempB*2+7;
									//增加權限控制
									*(DataPoint--)=(v->CommData[TempA]<<8)+v->CommData[TempA+1] ;
									}

								TempB=CRC_cal(v->CommData,6);   //個數=標號+1;
								v->CommData[6]=(TempB>>8)&0xff;
								v->CommData[7]=TempB&0xff;
								v->Index = 7;
								v->CommCount = 0;
								v->CommFlag = SEND_DATA;  //轉入發送
								}
							else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区精品在线| 亚洲三级免费电影| 欧美亚洲一区二区在线| 99热99精品| 9l国产精品久久久久麻豆| 成人av小说网| 色哟哟一区二区在线观看| 93久久精品日日躁夜夜躁欧美| 成人美女视频在线看| thepron国产精品| 色视频欧美一区二区三区| 91国产精品成人| 欧美精品高清视频| 日韩三级精品电影久久久| 日韩视频一区二区| 国产午夜亚洲精品理论片色戒| 中文字幕国产一区二区| 亚洲婷婷综合色高清在线| 亚洲综合激情另类小说区| 日韩精品免费专区| 老司机免费视频一区二区三区| 国产精品一区三区| 色哟哟日韩精品| 欧美一区二区久久久| 国产日韩欧美一区二区三区综合| 中文一区在线播放| 天天操天天干天天综合网| 狠狠色综合日日| 99精品欧美一区二区三区小说| 色婷婷av一区二区三区大白胸| 在线播放欧美女士性生活| 精品久久人人做人人爱| 亚洲三级在线免费| 美国十次综合导航| 色综合色狠狠综合色| 日韩视频在线永久播放| 亚洲美女偷拍久久| 国内一区二区在线| 在线一区二区三区四区| 久久女同精品一区二区| 一区二区日韩av| 韩国精品免费视频| 欧美日韩中文一区| 国产精品久久久久久久岛一牛影视| 亚洲一区二区三区在线| 国产·精品毛片| 欧美一级xxx| 亚洲无线码一区二区三区| 高潮精品一区videoshd| 日韩一卡二卡三卡四卡| 亚洲综合一区二区精品导航| 成人免费电影视频| 国产视频一区二区在线观看| 日日夜夜精品视频天天综合网| 99在线精品观看| 久久久不卡网国产精品二区| 午夜在线电影亚洲一区| 99精品在线观看视频| 欧美韩日一区二区三区四区| 国产主播一区二区| 日韩欧美在线综合网| 午夜精品影院在线观看| 欧美性猛交xxxx黑人交| 亚洲精品视频在线看| 成人激情黄色小说| 国产女人18毛片水真多成人如厕| 蜜桃av一区二区三区| 欧美高清视频一二三区| 午夜精品成人在线视频| 欧美影视一区在线| 亚洲电影你懂得| 欧美精品九九99久久| 午夜不卡av免费| 欧美一区二区三区色| 日韩国产精品大片| 日韩网站在线看片你懂的| 久久国产欧美日韩精品| 精品美女在线观看| 粉嫩欧美一区二区三区高清影视 | 最新国产精品久久精品| 成人妖精视频yjsp地址| 国产精品福利一区| 一本大道久久a久久精二百| 亚洲一区二区在线播放相泽 | 日本欧美一区二区| 3atv在线一区二区三区| 91网站在线播放| 国产精品久久久久久久第一福利| 91蜜桃在线观看| 亚洲高清免费在线| 日韩视频在线你懂得| 国产精品一级黄| 亚洲欧美日韩一区二区| 欧美亚洲高清一区| 精品一区二区三区蜜桃| 中文字幕不卡在线播放| 色偷偷久久一区二区三区| 偷拍一区二区三区四区| 欧美xxxxx牲另类人与| 成人精品在线视频观看| 亚洲成人精品一区二区| 精品国产亚洲在线| 色婷婷精品大视频在线蜜桃视频| 日欧美一区二区| 久久精品夜色噜噜亚洲aⅴ| 91在线播放网址| 六月丁香综合在线视频| 亚洲欧洲韩国日本视频| 日韩亚洲欧美在线观看| 成人高清在线视频| 喷水一区二区三区| 亚洲日本欧美天堂| 日韩久久久久久| 色噜噜狠狠成人网p站| 蜜臂av日日欢夜夜爽一区| 亚洲视频一区二区在线| 亚洲色图欧美在线| 久久人人97超碰com| 欧美性三三影院| 成人国产精品视频| 日韩高清在线观看| 亚洲日本va午夜在线电影| 精品理论电影在线观看| 欧美日韩一区久久| 成人av电影在线| 激情小说欧美图片| 偷拍日韩校园综合在线| ㊣最新国产の精品bt伙计久久| 日韩精品一区二区三区中文不卡| 色久综合一二码| 成人免费毛片高清视频| 日本不卡一区二区| 夜夜操天天操亚洲| 国产精品人成在线观看免费| 精品人伦一区二区色婷婷| 欧美图片一区二区三区| 97aⅴ精品视频一二三区| 国产福利一区二区三区| 国精产品一区一区三区mba视频 | 色8久久精品久久久久久蜜| 国产99久久久国产精品| 黑人精品欧美一区二区蜜桃| 日韩精品电影一区亚洲| 亚洲香蕉伊在人在线观| 一区二区高清在线| 夜夜嗨av一区二区三区网页| 一区二区在线观看免费视频播放| 国产亚洲欧美激情| 国产亚洲女人久久久久毛片| 久久免费看少妇高潮| 久久精品人人做人人爽人人| 国产校园另类小说区| 久久久久99精品国产片| 久久久久久综合| 久久综合久久久久88| 久久精品在线免费观看| 国产亚洲欧美中文| 欧美国产精品久久| 综合激情网...| 亚洲综合999| 五月天激情综合| 免费一级片91| 岛国精品一区二区| ww亚洲ww在线观看国产| 久久青草国产手机看片福利盒子| 久久奇米777| 亚洲色图第一区| 午夜欧美一区二区三区在线播放| 天天色天天爱天天射综合| 久99久精品视频免费观看| 国产成人精品亚洲777人妖| 高清av一区二区| 欧美午夜免费电影| 欧美成人一区二区| 国产精品久久久久久久蜜臀| 亚洲综合成人在线视频| 久久精品国产亚洲高清剧情介绍 | 青青草精品视频| 国产成人自拍高清视频在线免费播放| 国产乱子伦一区二区三区国色天香 | 欧美激情一区二区三区| 亚洲伦理在线精品| 热久久久久久久| 国产高清不卡一区二区| 91日韩精品一区| 日韩欧美区一区二| 国产精品国产精品国产专区不片 | 国产清纯美女被跳蛋高潮一区二区久久w | 国产精品视频免费| 婷婷开心激情综合| 国产91精品精华液一区二区三区| 欧美日韩情趣电影| 亚洲国产经典视频| 日韩高清不卡一区| 一本色道久久综合亚洲aⅴ蜜桃 | 国内外成人在线视频| 色猫猫国产区一区二在线视频| 精品国产一区二区三区av性色| 亚洲综合一区二区三区| 成人自拍视频在线|