⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recievecomm.cpp

📁 使用C开发的嵌入式平台软件源程序.有串行通讯、数据库入库等功能。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	           }
	       RecieveData22[22] = int(Accum/256) & 255; RecieveData22[23] = Accum & 255;
		   if ((RecieveData22[20] == RecieveData22[22]) & (RecieveData22[21] == RecieveData22[23])) {  //二十二字节的CRC校验正确.
		   if ((RecieveData22[1] == 0x01) && (RecieveData22[5] == 0x02)) { //中继站转发遥测站的数据.
	                  //AfxMessageBox(_T("二十二字节的CRC校验正确"));///显示当前记录条数

	                  CRecordStation record; CRecordData recordData; CRecordSend recordSend;
 	                  bool bResult = g_DB.SeekStationDB(CEDB_SEEK_BEGINNING, 0);
    	              bResult = g_DB.ReadStationRecord(record);
	                  while(bResult){//依次查询Station.cdb中的各条记录。
	                          //AfxMessageBox(_T("依次查询Station.cdb中的各条记录"));///显示当前记录条数
                              int Station_Num;
                              sprintf(str, "%s ", record.m_strAddress);//以字符串的方式读取字符串.
                              sscanf(str, "%d", &Station_Num);//将字符串送给整数变量.
							  int RainStation,WaterStation,KaiduStation;char str[20];
                              sprintf(str, "%s ", record.m_strRainStation);//以字符串的方式读取字符串.
                              sscanf(str, "%d", &RainStation);//将字符串送给整数变量.
                              sprintf(str, "%s ", record.m_strWaterStation);//以字符串的方式读取字符串.
                              sscanf(str, "%d", &WaterStation);//将字符串送给整数变量.
                              sprintf(str, "%s ", record.m_strKaiduStation);//以字符串的方式读取字符串.
                              sscanf(str, "%d", &KaiduStation);//将字符串送给整数变量.
							  if (Station_Num == RecieveData22[3]){//在站名表中找到了与自报数据串相同的站号,则进行数据存盘处理.
									   if ((RecieveData22[6] == 0x53) && (RainStation == 1)) { //存贮雨量特征字.
	                                              //AfxMessageBox(_T("存贮雨量特征字"));///显示当前记录条数
                                                  recordData.m_strAddress = record.m_strAddress; //站号.
		                                          WideCharToMultiByte(CP_ACP,0,record.m_strName,-1,str,20,NULL,NULL);//实现UNICODE字符到ANSI字符的转换.
	                                              recordData.m_strName =  str; //站名.必须用宽字符传送字符串.
                                                  sprintf(str, "%d-%d-%d %d:%d:%d",RecieveData22[15]+1900,RecieveData22[16],RecieveData22[17],RecieveData22[18],RecieveData22[19],0);//timeNow.GetSecond() 以字符串的方式读取字符串.
	                                              recordData.m_DateTime = str; //存贮来数时间.
	                                              record.m_DateTime = str; //存贮来数时间.
												  float Jindu1;
		                                          WideCharToMultiByte(CP_ACP,0,record.m_strRainTotal,-1,str,10,NULL,NULL);//实现UNICODE字符到ANSI字符的转换.
                                                  sscanf(str, "%d", &OldRain1);//将字符串送给整数变量.
                                                  WideCharToMultiByte(CP_ACP,0,record.m_strRainFenbian,-1,str,10,NULL,NULL);//实现UNICODE字符到ANSI字符的转换.
                                                  sscanf(str, "%f", &Jindu1);//将字符串送给整数变量.
	                                              if (RecieveData22[11] == 0x00) recordData.m_strType = _T("雨量");//
                                                  else recordData.m_strType = _T("测试雨量");
									              int NewRain1,NewRain2; NewRain1 = RecieveData22[13]*256+RecieveData22[14];
                                                  NewRain2 = NewRain1 - OldRain1; if (NewRain2 <= 0) NewRain2 = 0;
                                                  //sprintf(str, "%#.1f(%d)", NewRain2*Jindu1, NewRain1);
												  sprintf(str, "%#.1f", NewRain2*Jindu1);
                                                  recordData.m_strData = str; //存贮数据.
                                                  sprintf(str, "%d", NewRain1);
	                                              record.m_strRainTotal = str;
	                                              CEPROPVAL *prgPropVal = record.NewPropVal();
	                                   	          bResult = g_DB.UpdateStationRecord(record);//永久存贮数据.		
	                                   	          bResult = g_DB.AddDataRecord(recordData);//永久存贮数据.		
                                                  recordSend.m_strAddress =  recordData.m_strAddress;
                                                  recordSend.m_strName =  recordData.m_strName;
                                                  recordSend.m_DateTime =  recordData.m_DateTime;
                                                  recordSend.m_strType =  recordData.m_strType;
                                                  recordSend.m_strData =  recordData.m_strData;
	                                   	          bResult = g_DB.AddSendRecord(recordSend);//永久存贮数据.		
									   }//存贮雨量特征字.
                                       if ((RecieveData22[6] == 0x56) && (RecieveData22[12] == 0x11) && (WaterStation == 1)){ //存贮水位特征字.
                                                   recordData.m_strAddress = record.m_strAddress; //站号.
		                                           WideCharToMultiByte(CP_ACP,0,record.m_strName,-1,str,20,NULL,NULL);//实现UNICODE字符到ANSI字符的转换.
	                                               recordData.m_strName =  str; //站名.必须用宽字符传送字符串.
                                                   sprintf(str, "%d-%d-%d %d:%d:%d",RecieveData22[15]+1900,RecieveData22[16],RecieveData22[17],RecieveData22[18],RecieveData22[19],0);//timeNow.GetSecond() 以字符串的方式读取字符串.
	                                               recordData.m_DateTime = str; //存贮来数时间.
	                                               record.m_DateTime = str; //存贮来数时间.
												   float WaterHeight;
		                                           WideCharToMultiByte(CP_ACP,0,record.m_strWaterHeight,-1,str,10,NULL,NULL);//实现UNICODE字符到ANSI字符的转换.
                                                   sscanf(str, "%f", &WaterHeight);//将字符串送给整数变量.
										           if (RecieveData22[11] == 0x00) recordData.m_strType = _T("水位");
												   else recordData.m_strType = _T("测试水位");
                                                   sprintf(str, "%5.2lf", WaterHeight+(RecieveData22[13]*256+RecieveData22[14])*0.01f);
	                                               recordData.m_strData = str; //存贮数据.
	                                               CEPROPVAL *prgPropVal = record.NewPropVal();
	                                   	           bResult = g_DB.UpdateStationRecord(record);//永久存贮数据.		
	                                   	           bResult = g_DB.AddDataRecord(recordData);//永久存贮数据.		
                                                   recordSend.m_strAddress =  recordData.m_strAddress;
                                                   recordSend.m_strName =  recordData.m_strName;
                                                   recordSend.m_DateTime =  recordData.m_DateTime;
                                                   recordSend.m_strType =  recordData.m_strType;
                                                   recordSend.m_strData =  recordData.m_strData;
	                                   	           bResult = g_DB.AddSendRecord(recordSend);//永久存贮数据.		
									   } //存贮水位特征字.
                                       if ((RecieveData22[6] == 0x56) && (RecieveData22[12] == 0x12) && (KaiduStation == 1)){ //存贮闸位特征字.
                                                   recordData.m_strAddress = record.m_strAddress; //站号.
		                                           WideCharToMultiByte(CP_ACP,0,record.m_strName,-1,str,20,NULL,NULL);//实现UNICODE字符到ANSI字符的转换.
	                                               recordData.m_strName =  str; //站名.必须用宽字符传送字符串.
                                                   sprintf(str, "%d-%d-%d %d:%d:%d",RecieveData22[15]+1900,RecieveData22[16],RecieveData22[17],RecieveData22[18],RecieveData22[19],0);//timeNow.GetSecond() 以字符串的方式读取字符串.
	                                               recordData.m_DateTime = str; //存贮来数时间.
	                                               record.m_DateTime = str; //存贮来数时间.
												   float WaterHeight = -0.78f;//调准闸门开度的初始值.
		                                           //WideCharToMultiByte(CP_ACP,0,record.m_strWaterHeight,-1,str,10,NULL,NULL);//实现UNICODE字符到ANSI字符的转换.
                                                   //sscanf(str, "%f", &WaterHeight);//将字符串送给整数变量.
										           if (RecieveData22[11] == 0x00) recordData.m_strType = _T("闸位");
												   else recordData.m_strType = _T("测试闸位");
                                                   sprintf(str, "%5.2lf", WaterHeight+(RecieveData22[13]*256+RecieveData22[14])*0.01f);
	                                               recordData.m_strData = str; //存贮数据.
	                                               CEPROPVAL *prgPropVal = record.NewPropVal();
	                                   	           bResult = g_DB.UpdateStationRecord(record);//永久存贮数据.		
	                                   	           bResult = g_DB.AddDataRecord(recordData);//永久存贮数据.		
                                                   recordSend.m_strAddress =  recordData.m_strAddress;
                                                   recordSend.m_strName =  recordData.m_strName;
                                                   recordSend.m_DateTime =  recordData.m_DateTime;
                                                   recordSend.m_strType =  recordData.m_strType;
                                                   recordSend.m_strData =  recordData.m_strData;
	                                   	           bResult = g_DB.AddSendRecord(recordSend);//永久存贮数据.		
									   }//存贮闸位特征字.

                                       //发送应答.
					                   RecieveData22[1] = 0x02; RecieveData22[5] = 0x01;
                                       COleDateTime timeNow = COleDateTime::GetCurrentTime();//获取计算机时钟.
                                       RecieveData22[10] = 12; 
                                       RecieveData22[13] = timeNow.GetYear() - 1900; 
                                       RecieveData22[14] = timeNow.GetMonth(); 
                                       RecieveData22[15] = timeNow.GetDay(); 
                                       RecieveData22[16] = timeNow.GetHour(); 
                                       RecieveData22[17] = timeNow.GetMinute(); 
                                       RecieveData22[18] = timeNow.GetSecond(); 
                                       sprintf(str, "%s ", record.m_strSetup1);//以字符串的方式读取字符串.
                                       sscanf(str, "%d", &KaiduStation);//将字符串送给整数变量.
                                       RecieveData22[19] = KaiduStation;//雨量阀值. 
                                       sprintf(str, "%s ", record.m_strSetup2);//以字符串的方式读取字符串.
                                       sscanf(str, "%d", &KaiduStation);//将字符串送给整数变量.
                                       RecieveData22[20] = KaiduStation;//水位阀值. 
                                       sprintf(str, "%s ", record.m_strSetup3);//以字符串的方式读取字符串.
                                       sscanf(str, "%d", &KaiduStation);//将字符串送给整数变量.
                                       RecieveData22[21] = KaiduStation;//水位采集间隔. 
                                       sprintf(str, "%s ", record.m_strSetup4);//以字符串的方式读取字符串.
                                       sscanf(str, "%d", &KaiduStation);//将字符串送给整数变量.
                                       RecieveData22[22] = KaiduStation;//数据自报间隔. 
	  			                       int Accum = 65535;int TT; //计算CRC校验值accum.
                                       for (i1=0; i1 < 23; i1++){
	                                        Accum ^= RecieveData22[i1];
	                                        for (int j=1; j <= 8; j++){
                                                 TT = Accum & 1; Accum = int(Accum/2) & 32767; 
					                             if (TT == 1) Accum ^= 40961;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -