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

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

?? modbus.c

?? 基于TMS320F2812的電動(dòng)機(jī)控制源碼(使用C語言)
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/*=====================================================================================
 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
 	: 修改了漢字傳輸?shù)捻樞?參數(shù)表可以直接輸入漢字
-------------------------------------------------------------------------------------*/
#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	//等待報(bào)頭
#define READ_DATA		1	//接受數(shù)據(jù)
#define PROCESSING_DATA 2   //處理數(shù)據(jù)
#define SEND_DATA		3	//發(fā)送響應(yīng)報(bào)文

#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)	
	{
	//接受報(bào)頭
	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;		//跳出本循環(huán)
				v->CommCount=0;
				}
			}
		}	
		break;
	//接受數(shù)據(jù)		
	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)
				{		//數(shù)據(jù)必須正確
				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;
	//處理報(bào)文,產(chǎn)生響應(yīng)報(bào)文
	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]);		//參數(shù)起始地址
					switch(TempA)
						{	//switch3
						//菜單頁參數(shù)讀命令
						case 919:			
							{
							//固定長度響應(yīng)報(bào)文
							v->CommData[2]=32;
							DataPoint=&ParaTblA[v->ParaNum][0] ;
							//讀取PARA_TAB中的數(shù)據(jù)
							TempA=3;
			  				while(TempA<(16*2+3))
			  					{
		  						v->CommData[TempA++]= ((*DataPoint)>>8)&0x00ff;
			  					v->CommData[TempA++]= (*DataPoint)&0x00ff;
			  					DataPoint++;
			  					}
			  				//寫入實(shí)際數(shù)據(jù)
			  				TablePoint=MenuInfo;
			  				DataPoint=(int *)TablePoint[v->ParaNum];		
							v->CommData[29]=(*DataPoint>>8)&0xff;    //寫入報(bào)文地址 
							v->CommData[30]=(*DataPoint)&0x0ff;    //寫入報(bào)文地址 
							TempA=CRC_cal(v->CommData,35);   //固定長度
							v->CommData[35]=(TempA>>8)&0x00ff;		//寫入CRC校驗(yàn)位
							v->CommData[36]=TempA&0x00ff;

							v->Index = 36;			//共計(jì)發(fā)送36個(gè)數(shù)據(jù)
							v->CommCount = 0;
							v->CommFlag = SEND_DATA;  //轉(zhuǎn)入發(fā)送
							}
						break;
						//故障頁讀取
						case 900:			
							{
							v->CommData[2]=9*2;			//固定報(bào)文格式
							TempA=faultlog.log[v->FaultNum][0];
							DataPoint=&FaultTabA[TempA][0]; 			
							//讀取PARA_TAB中的數(shù)據(jù)
							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++;
			  					}
			  				//寫入實(shí)際數(shù)據(jù)
							TempA=CRC_cal(v->CommData,27);   		//固定長度
							v->CommData[27]=(TempA>>8)&0x00ff;		//寫入CRC校驗(yàn)位
							v->CommData[28]=TempA&0x00ff;

							v->Index = 28;			//共計(jì)發(fā)送29個(gè)數(shù)據(jù)
							v->CommCount = 0;
							v->CommFlag = SEND_DATA;  //轉(zhuǎn)入發(fā)送
							}
						break;
						//其他,狀態(tài)頁讀取
						default:			
							{
							if(TempA<100)//  操作盤數(shù)據(jù)讀取
								{
								v->CommFlag = WAIT_DATA_HEAD;
								}
							else if(TempA<899)	//參數(shù)讀取
								{
								TablePoint=MenuInfo1;	
								TempA=TempA-100;		//相對(duì)參數(shù)頁首的偏移
								if(TempA<PARA_MAX_TBL_A)
									{
									TempB=(v->CommData[4]<<8)|(v->CommData[5])-1;	//數(shù)據(jù)個(gè)數(shù)
									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);   //個(gè)數(shù)=標(biāo)號(hào)+1;
							
									v->CommData[v->Index]=(TempB>>8)&0xff;
									v->Index++;
									v->CommData[v->Index]=TempB&0xff;
									v->CommCount = 0;
									v->CommFlag = SEND_DATA;  //轉(zhuǎn)入發(fā)送
									}
								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;	//數(shù)據(jù)個(gè)數(shù)
								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);   //個(gè)數(shù)=標(biāo)號(hào)+1;
							
								v->CommData[v->Index]=(TempB>>8)&0xff;
								v->Index++;
								v->CommData[v->Index]=TempB&0xff;
								v->CommCount = 0;
								v->CommFlag = SEND_DATA;  //轉(zhuǎn)入發(fā)送
								}
							else	//異常數(shù)據(jù)處理	 
								{
								v->CommFlag = WAIT_DATA_HEAD;
								}	
							}
							 	
						} //end switch3	
					}	//end switch2 case3
				break;
				//MODBUS功能16  寫數(shù)據(jù)
				case 16:			
					{
					TempA=(v->CommData[2]<<8)|(v->CommData[3]);		//參數(shù)起始地址
					switch(TempA)
						{	//switch16
						case 932:
							{
							TablePoint=MenuInfo;
							DataPoint=(int *)TablePoint[v->ParaNum];	//數(shù)據(jù)地址

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

							TempB=CRC_cal(v->CommData,6);   //個(gè)數(shù)=標(biāo)號(hào)+1;
							
							v->CommData[6]=(TempB>>8)&0xff;
							v->CommData[7]=TempB&0xff;
							v->Index = 7;
							v->CommCount = 0;
							v->CommFlag = SEND_DATA;  //轉(zhuǎn)入發(fā)送
							}
							break;
						case 918:	//參數(shù)翻頁信息處理
							{
							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);   //個(gè)數(shù)=標(biāo)號(hào)+1;
						
								v->CommData[6]=(TempB>>8)&0xff;
								v->CommData[7]=TempB&0xff;
								v->Index = 7;
								v->CommCount = 0;
								v->CommFlag = SEND_DATA;  //轉(zhuǎn)入發(fā)送
							}
						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);   //個(gè)數(shù)=標(biāo)號(hào)+1;
						
								v->CommData[6]=(TempB>>8)&0xff;
								v->CommData[7]=TempB&0xff;
								v->Index = 7;
								v->CommCount = 0;
								v->CommFlag = SEND_DATA;  //轉(zhuǎn)入發(fā)送
							}
						break;
						default:
							{

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

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

								TempB=CRC_cal(v->CommData,6);   //個(gè)數(shù)=標(biāo)號(hào)+1;
								v->CommData[6]=(TempB>>8)&0xff;
								v->CommData[7]=TempB&0xff;
								v->Index = 7;
								v->CommCount = 0;
								v->CommFlag = SEND_DATA;  //轉(zhuǎn)入發(fā)送
								}
							else

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费观看高清完整版在线观看 | 一区二区久久久久久| 欧美调教femdomvk| 国产精品一级二级三级| 亚洲男人天堂av网| 欧美一级免费观看| 色综合色狠狠综合色| 久久99精品久久久久久动态图| 亚洲色图制服丝袜| 久久久激情视频| 777午夜精品免费视频| 91女厕偷拍女厕偷拍高清| 国内精品免费**视频| 亚洲电影第三页| 国产精品美女久久久久久久久| 欧美一区二区三区人| 色综合咪咪久久| 高清不卡在线观看| 蜜臀91精品一区二区三区| 一区二区欧美在线观看| 中文欧美字幕免费| 亚洲午夜视频在线观看| 中文字幕在线观看不卡| 国产亚洲欧美激情| 日韩欧美第一区| 欧美剧在线免费观看网站| 一本色道久久综合亚洲91| 国产成人无遮挡在线视频| 蜜桃视频一区二区| 丝袜国产日韩另类美女| 亚洲一区二区三区在线播放| 中文字幕制服丝袜一区二区三区| 久久久精品中文字幕麻豆发布| 制服丝袜一区二区三区| 欧美久久久久中文字幕| 欧美午夜精品一区二区三区| 91丝袜美腿高跟国产极品老师 | 免费在线看成人av| 丝袜亚洲另类欧美| 香蕉成人啪国产精品视频综合网 | 午夜亚洲福利老司机| 一区二区三区国产精品| 亚洲视频一区二区免费在线观看| 久久精品夜夜夜夜久久| 久久精品综合网| 久久久午夜精品理论片中文字幕| 337p日本欧洲亚洲大胆色噜噜| 日韩精品一区二区三区四区视频| 日韩视频在线一区二区| 91精品国产一区二区三区香蕉| 欧美久久一二区| 日韩一区二区免费在线电影 | 宅男在线国产精品| 欧美一区二区美女| 欧美第一区第二区| 久久久精品欧美丰满| 久久日韩粉嫩一区二区三区| 久久久久久久综合色一本| 国产午夜精品在线观看| 国产精品传媒在线| 亚洲男人的天堂一区二区| 一区二区不卡在线播放 | 18涩涩午夜精品.www| 亚洲欧美日韩一区二区| 一区二区三区高清在线| 亚洲成人免费看| 久热成人在线视频| 国产99一区视频免费| 99精品热视频| 欧美男男青年gay1069videost | 国产精品网曝门| 亚洲免费资源在线播放| 亚洲成人资源在线| 久久91精品久久久久久秒播| 精品卡一卡二卡三卡四在线| 久久久不卡网国产精品一区| 日韩毛片精品高清免费| 午夜私人影院久久久久| 国产精品一区久久久久| 99精品久久只有精品| 欧美日韩国产综合久久| 精品91自产拍在线观看一区| 综合久久综合久久| 日本欧美一区二区三区| 国产不卡一区视频| 欧美日韩在线播| 久久精品夜夜夜夜久久| 依依成人精品视频| 国精产品一区一区三区mba桃花| 成人久久久精品乱码一区二区三区| 欧美中文字幕一二三区视频| 26uuu另类欧美| 亚洲国产日日夜夜| 国产成人免费视频一区| 欧美日韩在线观看一区二区| 国产亚洲午夜高清国产拍精品| 亚洲精品免费在线观看| 国产资源精品在线观看| 在线观看视频一区二区欧美日韩| 精品国产乱码久久久久久1区2区 | av电影天堂一区二区在线| 欧美乱妇15p| 国产精品成人免费在线| 久久精品国产网站| 欧洲在线/亚洲| 中文字幕av一区二区三区高| 亚洲va在线va天堂| av中文字幕在线不卡| 精品国产免费久久| 日韩电影一二三区| 日本高清成人免费播放| 国产免费成人在线视频| 蜜桃久久av一区| 欧美日韩美少妇| 亚洲人123区| 国产不卡视频一区二区三区| 精品日韩一区二区三区| 亚洲国产成人tv| 色噜噜狠狠色综合中国| 国产精品欧美久久久久一区二区| 久久99蜜桃精品| 在线播放中文字幕一区| 夜夜精品视频一区二区| 91丝袜美女网| 国产欧美精品一区二区三区四区| 另类小说一区二区三区| 6080日韩午夜伦伦午夜伦| 亚洲一区二区视频| 91搞黄在线观看| 亚洲三级久久久| 91色.com| 亚洲欧美精品午睡沙发| 成人丝袜18视频在线观看| 视频一区国产视频| 欧美日韩国产一二三| 一区二区三区免费网站| 欧美亚洲综合在线| 一区二区三区精品视频在线| 91丨porny丨最新| 亚洲男人的天堂一区二区| 色久综合一二码| 一区二区三区在线观看欧美| 色哟哟一区二区| 一区二区三区在线免费视频| 日本精品裸体写真集在线观看 | 4hu四虎永久在线影院成人| 午夜精品一区二区三区免费视频| 欧美日韩一区高清| 日韩在线a电影| 欧美成va人片在线观看| 国产一区二区中文字幕| 欧美激情一区二区三区蜜桃视频| 国产精品亚洲视频| 国产精品美女久久久久久久久久久 | 免费成人美女在线观看| 精品国产一区二区三区av性色| 麻豆精品一区二区av白丝在线| 欧美不卡在线视频| 国产成人午夜精品影院观看视频| 欧美激情综合五月色丁香| 99精品热视频| 性欧美疯狂xxxxbbbb| 精品国产伦一区二区三区观看体验| 国产精品一品视频| 亚洲人成在线播放网站岛国| 精品视频在线免费看| 久久99精品一区二区三区三区| 国产亚洲污的网站| 在线视频欧美区| 蜜桃av一区二区三区电影| 国产欧美日韩在线视频| 色综合中文字幕| 青青草视频一区| 国产欧美日韩亚州综合| 在线精品视频免费观看| 免播放器亚洲一区| 中文字幕va一区二区三区| 欧美色综合久久| 国内精品国产三级国产a久久 | 99精品欧美一区二区三区小说 | 亚洲自拍偷拍麻豆| 欧美精品一区二区三区高清aⅴ| www.亚洲免费av| 天天亚洲美女在线视频| 国产片一区二区三区| 欧美色图12p| 国产精品综合网| 一区二区三区精品视频在线| 日韩欧美久久一区| 99久久国产综合色|国产精品| 天堂va蜜桃一区二区三区漫画版| 国产日韩三级在线| 欧美精品久久99久久在免费线 | 亚洲精品videosex极品| 日韩免费看网站| 在线一区二区三区四区五区| 久久国内精品自在自线400部| 亚洲欧美日韩电影| 久久久精品天堂| 在线观看91av|