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

📄 trans.cpp

📁 VC环境下电力系统故障录波数据管理系统
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		{ AfxMessageBox("对方出错退出!",MB_OK);  goto end_rece; }
                    //  3. 接收文件头
                      
 lstrcpy(StatusStr, "接收文件头");   
 InvalidateRect(&m_StatusRect);       UpdateWindow();
 RepeatTimes=0;
RepeHead:
 ReceCount = 0;
 TimeOut=0;      OldTime = GetCurrentTime();
 while( ReceCount < HEADSIZE )
  {
	while( (MyTTY.npTTYInfo->HeadPtr == MyTTY.npTTYInfo->TailPtr) && TimeOut<60 )
		{
		 if(MissConnected())
             { AfxMessageBox("调制解调器没有连通!");  goto end_rece; }
		 TimeOut = (GetCurrentTime()-OldTime)/1000;
		}
	if( TimeOut>=60)         // 超时, 送 NAK 并退出
		{  AfxMessageBox("接收文件头超时!", MB_OK);  goto end_rece; }
	FileHead.HeadBuffer[(int)ReceCount] = MyTTY.npTTYInfo->Queue[MyTTY.npTTYInfo->TailPtr];
	if(MyTTY.npTTYInfo->TailPtr==4999)MyTTY.npTTYInfo->TailPtr=0;
	else  MyTTY.npTTYInfo->TailPtr++;
	ReceCount++;
 }                   // 4. 接收到HEADSIZE个字符的文件头
                     // 5. 校验收到的 HEADSIZE个字符的文件头
  if( FileHead.Head.StartChar != SOH )
	{ 
		if(RepeatTimes<5)
			{
				RepeatTimes++;
				MyTTY.npTTYInfo->TailPtr = MyTTY.npTTYInfo->HeadPtr;
				SendCh = NAK;
				WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);
				goto RepeHead;
			}
		AfxMessageBox("文件头 [SOH] 接收错",MB_OK);	 goto end_rece;	
	}
 for(kb=0;kb < HEADSIZE-2; kb++)
	 LJH += FileHead.HeadBuffer[kb];
 if( FileHead.Head.LJH != LJH )
	{ 
		if(RepeatTimes<5)
			{
				RepeatTimes++;
				MyTTY.npTTYInfo->TailPtr = MyTTY.npTTYInfo->HeadPtr;
				SendCh = NAK;
				WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);
				goto RepeHead;
			}
		AfxMessageBox("文件头 [CRC] 接收错", MB_OK);	 goto end_rece;	
	}
 if( FileHead.Head.EndChar != ETX )
	{ 
		if(RepeatTimes<5)
			{
				RepeatTimes++;
				MyTTY.npTTYInfo->TailPtr = MyTTY.npTTYInfo->HeadPtr;
				SendCh = NAK;
				WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);
				goto RepeHead;
			}
		AfxMessageBox("文件头 [ETX] 接收错", MB_OK);	 goto end_rece;	
	}
 nameptr = strrchr((char *)FileHead.Head.Name,'\\');
 if (nameptr)
  strcpy(FileName,nameptr+1);// ptr-string);
 else strcpy(FileName,FileHead.Head.Name);
 
 remove("send.arj");
 if((wfp=fopen("send.arj","wb"))==NULL) //FileName
	{AfxMessageBox("不能创建文件!",MB_OK); goto end_rece; }

 FileLength = atol ( FileHead.Head.FileLength);

 InvalidateRect(&m_StatusRect);
 UpdateWindow();
 lstrcpy(FileName, "send.arj"); //wyy add
 if( FileLength < BLOCKSIZE )
	{ BlockCount=1; LastBlockLength = FileLength%BLOCKSIZE;}
 else if( (FileLength%BLOCKSIZE) == 0)
	 { BlockCount = FileLength/BLOCKSIZE;LastBlockLength=BLOCKSIZE;}
 else
	{  BlockCount = FileLength/BLOCKSIZE+1;
	   LastBlockLength=FileLength%BLOCKSIZE;
	 }
      //  6.  清缓冲区 
 MyTTY.npTTYInfo->HeadPtr = 0;
 MyTTY.npTTYInfo->TailPtr = 0;
 memset(MyTTY.npTTYInfo->Queue,0x00, sizeof(MyTTY.npTTYInfo->Queue));
      // 7. 送文件头正确的  ACK
 WriteCommBlock(MyTTY.npTTYInfo, SendWyyCh, 2);
 fclose(wfp);
 //================== rece Block data ================
 for( ib=1; ib<=BlockCount; ib++ )
	 {
	  reprece:

	  if(ib < BlockCount) BlockDataLength = BLOCKSIZE+4;
	  if(ib == BlockCount) BlockDataLength = LastBlockLength+4;
 	  
	  if(MissConnected())
        { AfxMessageBox("调制解调器没有连通!"); goto end_rece; }
	  sprintf(StatusStr,"接收第%d块",ib);
      InvalidateRect(&m_StatusRect);      UpdateWindow();
	    
	  TimeOut=0;        OldTime = GetCurrentTime();
	                  // 接收到一块
    while( (MyTTY.npTTYInfo->HeadPtr - MyTTY.npTTYInfo->TailPtr < BlockDataLength) && (TimeOut<180) )
		{
		  if(MissConnected())
			  { AfxMessageBox("调制解调器没有连通!"); goto end_rece; }
		  TimeOut = (unsigned long )((GetCurrentTime()-OldTime)/1000.);
		}
	if( TimeOut>=180)
	 {  AfxMessageBox("等待数据超时!",MB_OK);	  goto end_rece; }
	memcpy(ReceBuffer, MyTTY.npTTYInfo->Queue, BlockDataLength);
	ibb = (ReceBuffer[0]&0x00ff)+ (0x00ff&ReceBuffer[1])*256L;
	if( ibb != ib)
	  {
		if(ibb == 0x1515)
		{	AfxMessageBox("线路故障,通信中断!",MB_OK);	goto end_rece;  }
		::MessageBeep(-1);
		lstrcpy(StatusStr, "本文件块传送出错: ib错");
        InvalidateRect(&m_StatusRect);       UpdateWindow();
		
		MyTTY.npTTYInfo->HeadPtr = 0;
		MyTTY.npTTYInfo->TailPtr = 0;
		memset(MyTTY.npTTYInfo->Queue,0x00, sizeof(MyTTY.npTTYInfo->Queue));
        SendCh = NAK;
        WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);
		
		SendCh = (unsigned char )(ib%256);
		WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);					
		SendCh = (unsigned char )(ib/256);
		WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);					
		
		RepeatTimes++;
		if(RepeatTimes>=10)
		  {	AfxMessageBox("线路故障,重传10次不成功1,通信中断!",MB_OK);	goto end_rece;  }
		goto reprece;
	  }
	LJH = '\0';
	for(kb=0;kb<BlockDataLength-2;kb++)
	 LJH += ReceBuffer[kb];
	if( ReceBuffer[BlockDataLength-2] != LJH)
	  {
		 ::MessageBeep(-1); ::MessageBeep(-1);
		lstrcpy(StatusStr, "LJH:本文件块传送出错");
        InvalidateRect(&m_StatusRect);       UpdateWindow();
        MyTTY.npTTYInfo->HeadPtr = 0;
		MyTTY.npTTYInfo->TailPtr = 0;
		memset(MyTTY.npTTYInfo->Queue,0x00, sizeof(MyTTY.npTTYInfo->Queue));
		SendCh = NAK;
        WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);					
		
		SendCh = (unsigned char )(ib%256);
		WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);					
		SendCh = (unsigned char )(ib/256);
		WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);					
		
		RepeatTimes++;
		if(RepeatTimes>=10)
			{ AfxMessageBox("线路故障,重传10次不成功2,通信中断!",MB_OK);	goto end_rece;  }
	    goto reprece;
	  }
	if( ReceBuffer[BlockDataLength-1] != ETX)
	  {
		::MessageBeep(-1); ::MessageBeep(-1); ::MessageBeep(-1);
		lstrcpy( StatusStr, "ETX:本文件块传送出错");
        InvalidateRect(&m_StatusRect);       UpdateWindow();
       	MyTTY.npTTYInfo->HeadPtr = 0;
		MyTTY.npTTYInfo->TailPtr = 0;
		memset(MyTTY.npTTYInfo->Queue,0x00, sizeof(MyTTY.npTTYInfo->Queue));
		SendCh = NAK;
        WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);					
		
		SendCh = (unsigned char )(ib%256);
		WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);					
		SendCh = (unsigned char )(ib/256);
		WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);					
		
		RepeatTimes++;
		if(RepeatTimes>=10)
			{AfxMessageBox("线路故障,重传10次不成功3,通信中断!",MB_OK);	goto end_rece;  }
		goto reprece;
	  }
		//	将本块写入文件
	if((wfp=fopen(FileName,"ab"))==NULL)
	  {	AfxMessageBox("打不开文件", MB_OK); 	goto end_rece;	  }
	fseek(wfp,0L,SEEK_END);
	if((fwrite(ReceBuffer+2,BlockDataLength-4,1,wfp))!=1)
	  {	AfxMessageBox("写文件出错", MB_OK); 	fclose(wfp);	goto end_rece;  }
	fclose(wfp);
	
	Percent = ((double)ib)/((float)(BlockCount))*100 ;
	sprintf(m_PerStr,"%d%%", (int)Percent);
	MyProgCtrl->SetPos((int)(Percent));
	InvalidateRect(&m_StatusRect);
	UpdateWindow();    RepeatTimes=0;
	   //  本文件接收正确
	   //  清缓冲区 
    MyTTY.npTTYInfo->HeadPtr = 0;  MyTTY.npTTYInfo->TailPtr = 0;
    memset(MyTTY.npTTYInfo->Queue,0x00, sizeof(MyTTY.npTTYInfo->Queue));
	WriteCommBlock(MyTTY.npTTYInfo, SendWyyCh, 2);
	//char tttt[55];
	//sprintf(tttt, "ib=%ld", ib);
   //AfxMessageBox(tttt);
}
 ClearMessage();
 return(1);
 end_rece:
 //SendCh = NAK;
 //WriteCommBlock(MyTTY.npTTYInfo, &SendCh, 1);
 ClearMessage(); 
 return(-1);
}
*/
void CTrans::ClearMessage(void)
 {
	memset(szName, 0x00, sizeof(szName));
	memset(&FileHead, 0x00, sizeof(FileHead));
	memset(m_PerStr, 0x00, sizeof(m_PerStr));
	lstrcpy(StatusStr,"");
	Percent = 0;
	CProgressCtrl * MyProgCtrl =  ((CProgressCtrl *)GetDlgItem(IDC_PROGRESS));
	MyProgCtrl->SetPos((int)(Percent));
	InvalidateRect(&m_StatusRect);
	UpdateWindow();
 }
	

void CTrans::OnReceive() 
{
	CListCtrl *temp;
	temp = (CListCtrl *)GetDlgItem(IDC_LIST2);
    
	((CButton *)GetDlgItem(IDC_SEND))->EnableWindow(FALSE);
	((CButton *)GetDlgItem(IDC_RECEIVE))->EnableWindow(TRUE);
    
	UINT Count = temp->GetItemCount();
	LV_ITEM lvItem;
    char FileName[13];

	for(UINT i=0; i<Count; i++)
	   {
	     memset(&lvItem, 0x00, sizeof(LV_ITEM));

         lvItem.mask = LVIF_TEXT|LVIF_STATE;
		 lvItem.iItem = i;
		 lvItem.iSubItem = 0;
         lvItem.pszText = FileName;
         lvItem.cchTextMax = 12;
         lvItem.stateMask = LVIS_SELECTED;
                  
		 BOOL WWW = ((CListCtrl *)GetDlgItem(IDC_LIST2))->GetItem(&lvItem);

		 if(lvItem.mask & LVIF_STATE)
		   {
		    if(lvItem.state & LVIS_SELECTED)break;
		   }
	   }
    if(i==Count)return;
	char tempstr[13];
	temp->GetItemText(i, 0, tempstr, 13);
	lstrcpy(szName, m_strDataPath);
	if(szName[lstrlen(szName)-1] == '\\')
       lstrcat(szName, tempstr);
    else
	   {
			lstrcat(szName, "\\");
			lstrcat(szName, tempstr);
		}
	lstrcpy(ReceFileName, tempstr);
	int kkk = WyyReceFile();
    if(kkk > 0)
		{
			if(AfxMessageBox("文件已正确接收, 是否将其加入故障文件数据库!", MB_OKCANCEL) == IDOK)
				{
					struct FAULT_RECORD Rece ={"0","1998-09-28 12:20:20","77",
		"99999.99","武汉市邮电局","武汉市邮电局","广宁线","wyy100","A","1",
		"wgu34.wgl","zhx","3","1998.092812","1","1"};
					char drive[_MAX_DRIVE];
					char dir[_MAX_DIR];
					char fname[_MAX_FNAME];
					char ext[_MAX_EXT];

					CAnalysis Analysis;
					
					Analysis.m_ConfigFileName1 = m_strRecordPath + _T("sys1.dat");
					Analysis.m_ConfigFileName2 = m_strRecordPath + _T("sys2.dat");
					Analysis.m_StrglconfigFile = m_strRecordPath + _T("glconfig.dat");
					Analysis.m_FaultFileName   = WyyFileName;
					_splitpath(WyyFileName, drive, dir, fname, ext);
					Analysis.m_strReportFile.Empty();
					Analysis.m_strReportFile += _T(drive);
					Analysis.m_strReportFile += _T(dir);
					Analysis.m_strReportFile += _T(fname);
					Analysis.m_strReportFile += _T(".rpt");
					
					if(Analysis.InitSys() == -1)return;
					if(Analysis.ReadFile() == -1)return;
					if(Analysis.tab1(1) == -1)return;
					if(Analysis.fFaultJL == -1)
					{
						AfxMessageBox("本次数据无故障,将不加入故障数据库!");
						return;
					}
					
					lstrcpy(Rece.StartDateTime, Analysis.m_DateTime);
					char *ptemp, tempstr[10];
					ptemp = Rece.StartDateTime;
					ptemp[lstrlen(ptemp)-3]=0x00;
					struct tm tt;
					
					ptemp = strrchr(Analysis.m_DateTime, '.');
					lstrcpy(tempstr, ptemp+1);
					tempstr[3] =0x00;
					lstrcpy(Rece.StartMTime, tempstr);
					*ptemp = 0x00;
				
					ptemp = strrchr(Analysis.m_DateTime, ':');
					tt.tm_sec = atoi(ptemp+1);  
					*ptemp =0x00;
				
					ptemp = strrchr(Analysis.m_DateTime, ':');
					tt.tm_min = atoi(ptemp+1);  
					*ptemp =0x00;

					ptemp = strrchr(Analysis.m_DateTime, ',');
					tt.tm_hour = atoi(ptemp+1);  
					*ptemp =0x00;

					ptemp = strrchr(Analysis.m_DateTime, '//');
					tt.tm_year = atoi(ptemp+1);  
					if(tt.tm_year > 60)tt.tm_year += 1900;
					else tt.tm_year += 2000;
					*ptemp =0x00;

					ptemp = strrchr(Analysis.m_DateTime, '//');
					tt.tm_mday = atoi(ptemp+1);  
					*ptemp =0x00;

					tt.tm_mon = atoi(Analysis.m_DateTime);
					double datestr = tt.tm_year + tt.tm_mon/100. + tt.tm_mday/10000. + tt.tm_hour/1000000.;
					sprintf(Rece.Reserve1,  "%lf", datestr);

				//	lstrcpy(Rece.DelayTime,Analysis.FaultDelayTime);   //char DelayTime[3];
					lstrcpy(Rece.LineName, Analysis.m_strFaultLineName);

					ptemp = strrchr(dir,'\\');
					*ptemp = 0x00;
					ptemp = strrchr(dir,'\\');
					lstrcpy(Rece.RecordID, ptemp+1);
					*ptemp = 0x00;

					ptemp = strrchr(dir,'\\');
					lstrcpy(Rece.StationName, ptemp+1);
					*ptemp = 0x00;

					ptemp = strrchr(dir,'\\');
					lstrcpy(Rece.CityName, ptemp+1);
					
										////JumpPhase
					lstrcpy(Rece.FileName, fname);
					lstrcat(Rece.FileName, ext);

					char wyyTemp[256];
					BYTE ch1 = 0xce;
					char ch2 = '(';
					lstrcpy(wyyTemp,Analysis.m_strFaultPhase);
				    if(wyyTemp[3] == ch1)
						lstrcpy(Rece.FaultType,"1");
					else if(wyyTemp[4] == ch2)
						lstrcpy(Rece.FaultType,"2");
					else if(strstr(wyyTemp,"ABC")!=NULL || strstr(wyyTemp,"ABCN") != NULL)
                        lstrcpy(Rece.FaultType,"3");
					else if(wyyTemp[5] == ch1)
                        lstrcpy(Rece.FaultType,"4");
					else 						
                        lstrcpy(Rece.FaultType,"5");

				    char *pTempWyy;
					pTempWyy = strchr(Analysis.m_strFaultPhase, '(');
					if(pTempWyy != NULL)*pTempWyy=0x00;
					lstrcpy(Rece.PhaseName, Analysis.m_strFaultPhase);
		/*			
					char CityName[20];
					char StationName[20];
					char LineName[20];
					char RecordID[20];
					char PhaseName[20];
					char JumpPhase[10];
					char FileName[254];
					char AnalyFile[254];
					char FaultType[5];
					char Reserve1[48];
					char Reserve2[48];
					char Reserve3[3];*/
					AddARecord(Rece);
				}
		}
}
/*
void CTrans::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	((CButton *)GetDlgItem(IDC_SEND))->EnableWindow(TRUE);
	((CButton *)GetDlgItem(IDC_RECEIVE))->EnableWindow(FALSE);
	*pResult = 0;
}

void CTrans::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	CListCtrl *temp;
	temp = (CListCtrl *)GetDlgItem(IDC_LIST1);

	((CButton *)GetDlgItem(IDC_SEND))->EnableWindow(TRUE);
	((CButton *)GetDlgItem(IDC_RECEIVE))->EnableWindow(FALSE);

    UINT Count = temp->GetItemCount();
	LV_ITEM lvItem;
    char FileName[13];

	for(UINT i=0; i<Count; i++)
	   {
	     memset(&lvItem, 0x00, sizeof(LV_ITEM));

         lvItem.mask = LVIF_TEXT|LVIF_STATE;
		 lvItem.iItem = i;
		 lvItem.iSubItem = 0;
         lvItem.pszText = FileName;
         lvItem.cchTextMax = 12;
         lvItem.stateMask = LVIS_SELECTED;
                  
		 BOOL WWW = temp->GetItem(&lvItem);

		 if(lvItem.mask & LVIF_STATE)
		   {
		    if(lvItem.state & LVIS_SELECTED)break;
		   }
	   }
    if(i==Count)return;

	char tempstr[13];
	temp->GetItemText(i, 0, tempstr, 13);
	lstrcpy(szName, m_strRecordPath.GetBuffer(_MAX_DIR));
	m_strRecordPath.ReleaseBuffer();
	lstrcat(szName, tempstr);
    WyySendFile();
	*pResult = 0;
}
*/

void CTrans::OnClickList2(NMHDR* pNMHDR, LRESULT* pResult) 
{
	((CButton *)GetDlgItem(IDC_SEND))->EnableWindow(FALSE);
	((CButton *)GetDlgItem(IDC_RECEIVE))->EnableWindow(TRUE);
	*pResult = 0;
}

void CTrans::OnDblclkList2(NMHDR* pNMHDR, LRESULT* pResult) 

⌨️ 快捷键说明

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