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

📄 recievecomm.cpp

📁 使用C开发的嵌入式平台软件源程序.有串行通讯、数据库入库等功能。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                                                 Accum &= 65535;
											}
									   }
	                                   RecieveData22[23] = int(Accum/256) & 255;RecieveData22[24] = Accum & 255;
	                                   DWORD dwBytesWritten;
                                       EscapeCommFunction(m_hIDComDev,SETRTS);//开发射机.
					                   Sleep(50); //发送前延时五十毫秒.
                                       for (i1=0; i1 <= 24; i1++) {
					  	                        WriteFile(m_hIDComDev, (LPSTR)&RecieveData22[i1], 1, &dwBytesWritten, NULL); //一个字符一个字符地发送出去. 
                                                RecieveData22[i1] = i1;
									   }
 					                   Sleep(250); //发送后延时二百五十毫秒.
                                       EscapeCommFunction(m_hIDComDev,CLRRTS);//关发射机.

									   }//结束:在站名表中找到了与自报数据串相同的站号,则进行数据存盘处理.
		                       bResult = g_DB.SeekStationDB(CEDB_SEEK_CURRENT, 1);
		                       if(bResult) bResult = g_DB.ReadStationRecord(record);
					  }//结束:依次查询Station.cdb中的各条记录。

		   }//中继站转发遥测站的数据.
		   }//二十二字节的CRC校验正确.

           for (i1=0; i1 <= 23; i1++) RecieveData24[i1] = RecieveData24[i1+1];////每次只取一个数,放入循环缓冲区中.
		   RecieveData24[23] = buff[i]; //每次只取一个数,放入循环缓冲区中.
		   Accum = 65535; //计算CRC校验值accum.
           for (i1=0; i1 < 22; i1++){
	           Accum ^= RecieveData24[i1];
	           for (int j=1; j <= 8; j++){
                        TT = Accum & 1; Accum = int(Accum/2) & 32767; 
						if (TT == 1) Accum ^= 40961;
                        Accum &= 65535;
			            }
	           }
	       RecieveData24[24] = int(Accum/256) & 255; RecieveData24[25] = Accum & 255;
		   if ((RecieveData24[22] == RecieveData24[24]) && (RecieveData24[23] == RecieveData24[25])) {//二十四字节的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中的各条记录。
                              int Station_Num;
                              sprintf(str, "%s ", record.m_strAddress);//以字符串的方式读取字符串.
                              sscanf(str, "%d", &Station_Num);//将字符串送给整数变量.
                              if (Station_Num == RecieveData24[3]){//在站名表中找到了与自报数据串相同的站号,则进行数据存盘处理.
                                       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",RecieveData24[17]+1900,RecieveData24[18],RecieveData24[19],RecieveData24[20],RecieveData24[21],0);//timeNow.GetSecond() 以字符串的方式读取字符串.
	                                   recordData.m_DateTime = str; //存贮来数时间.
	                                   record.m_DateTime = str; //存贮来数时间.
									   if (RecieveData24[11] == 0x00) recordData.m_strType = _T("电压");
									   else recordData.m_strType = _T("测试电压");
                                       union{float data;int dataI;char buffer[4];}convert;
	                                   convert.buffer[3] = (char)RecieveData24[13]; convert.buffer[2] = (char)RecieveData24[14]; convert.buffer[1] = (char)RecieveData24[15]; convert.buffer[0] = (char)RecieveData24[16];
									   char strData[10]; sprintf(strData, "%5.2lf", convert.data);
	                                   CEPROPVAL *prgPropVal = record.NewPropVal();
	                                   bResult = g_DB.UpdateStationRecord(record);//永久存贮数据.		
	                                   recordData.m_strData = strData; //存贮数据.
	                                   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);//永久存贮数据.		
									   }//结束:在站名表中找到了与自报数据串相同的站号,则进行数据存盘处理.
		                       bResult = g_DB.SeekStationDB(CEDB_SEEK_CURRENT, 1);
		                       if(bResult) bResult = g_DB.ReadStationRecord(record);
					  }//结束:依次查询Station.cdb中的各条记录。

                      if (RecieveData24[3] == 0x02){//如果是中继站发来的电压.
                                       recordData.m_strAddress = "2"; //站号.
	                                   recordData.m_strName = "中继站";
                                       sprintf(str, "%d-%d-%d %d:%d:%d",RecieveData24[17]+1900,RecieveData24[18],RecieveData24[19],RecieveData24[20],RecieveData24[21],0);//timeNow.GetSecond() 以字符串的方式读取字符串.
	                                   recordData.m_DateTime = str; //存贮来数时间.                                       										           
									   if (RecieveData24[11] == 0x00) recordData.m_strType = _T("电压"); //存贮电压特征字.
									   else recordData.m_strType = _T("测试电压"); //存贮电压特征字.
                                       union{float data;int dataI;char buffer[4];}convert;
	                                   convert.buffer[3] = (char)RecieveData24[13]; convert.buffer[2] = (char)RecieveData24[14]; convert.buffer[1] = (char)RecieveData24[15]; convert.buffer[0] = (char)RecieveData24[16];
									   sprintf(str, "%5.2lf", convert.data);
	                                   recordData.m_strData = str; //存贮数据.
	                                   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);//永久存贮数据.		
									   }//结束:在站名表中找到了与自报数据串相同的站号,则进行数据存盘处理.

                      //发送应答.
                      RecieveData24[1] = 0x02; RecieveData24[4] = 0x01; RecieveData24[5] = 0x01;
				      COleDateTime timeNow = COleDateTime::GetCurrentTime();//获取计算机时钟.
                      RecieveData24[10] = 12; 
                      RecieveData24[13] = timeNow.GetYear() - 1900; 
                      RecieveData24[14] = timeNow.GetMonth(); 
                      RecieveData24[15] = timeNow.GetDay(); 
                      RecieveData24[16] = timeNow.GetHour(); 
                      RecieveData24[17] = timeNow.GetMinute(); 
                      RecieveData24[18] = timeNow.GetSecond(); 
                      RecieveData24[19] = 0;//雨量阀值. 
                      RecieveData24[20] = 0;//水位阀值. 
                      RecieveData24[21] = 0;//水位采集间隔. 
                      RecieveData24[22] = 0;//数据自报间隔. 
				      int Accum = 65535;int TT; //计算CRC校验值accum.
                      for (i1=0; i1 < 23; i1++){
	                       Accum ^= RecieveData24[i1];
	                       for (int j=1; j <= 8; j++){
                                    TT = Accum & 1; Accum = int(Accum/2) & 32767; 
						            if (TT == 1) Accum ^= 40961;
                                    Accum &= 65535;
									}
							}
	                  RecieveData24[23] = int(Accum/256) & 255;RecieveData24[24] = Accum & 255;
	                  DWORD dwBytesWritten;
                      EscapeCommFunction(m_hIDComDev,SETRTS);//开发射机.
					  Sleep(50); //发送前延时五十毫秒.
                      for (i1=0; i1 <= 24; i1++) {
						  WriteFile(m_hIDComDev, (LPSTR)&RecieveData24[i1], 1, &dwBytesWritten, NULL); //一个字符一个字符地发送出去. 
                          RecieveData24[i1] = i1;
					  }
 					  Sleep(250); //发送后延时二百五十毫秒.
                      EscapeCommFunction(m_hIDComDev,CLRRTS);//关发射机.

		   }//二十四字节的CRC校验正确.
	  }//一个字节一个字节地分析数据.
	  delete buff; //释放变量buff的内存空间.
	  delete str; //释放变量str的内存空间.
}

⌨️ 快捷键说明

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