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

📄 modem3dlg.cpp

📁 一个通讯的主站程序 献给vc 串口通信的网友 看看吧
💻 CPP
📖 第 1 页 / 共 5 页
字号:
{
	// TODO: Add your command handler code here
	UINT i;
	CBehaoDialog dlg;
    i=dlg.DoModal();
    if(i==IDOK)
	{ 
	   if(m_str=="挂断")
		  {
		   
           CDC * pDCC=this->GetDC();
		   CFont* newFont;
		   newFont=new CFont();
		   newFont->CreatePointFont(180,"宋体",pDCC);
           GetDlgItem(IDC_TIT)->SetWindowText("BCT16——制冷");
		   GetDlgItem(IDC_TIT)->SetFont(newFont);
		   ReleaseDC(pDCC);
           SetTimer(1,400,NULL);
            CMenu* m_Menu=this->GetMenu();
            m_Menu->ModifyMenu(ID_ZJTS,MF_UNCHECKED,ID_ZJTS,"整机调试");
            m_Menu->ModifyMenu(ID_BJTS,MF_UNCHECKED,ID_BJTS,"部件调试");
            m_Menu->ModifyMenu(ID_AUTO,MF_CHECKED,ID_AUTO,"自动运行");
			m_Menu->ModifyMenu(ID_SHIWAIJI1,MF_CHECKED,ID_SHIWAIJI1,"1#室外机");

		 }
	   else if(m_str=="拨号")
	   {
		   KillTimer(1);
		 
	   }
     
	}
	
}

void CModem3Dlg:: addRecordset()
{  
	_variant_t  m_Tim,m_Ktr,m_Ktc,m_Gfwd,m_Gfyw,m_Ktsb,m_Lqb,m_Lqfj,m_Ryb,m_Zkb,m_Ktrsj;
    int i;
	m_Time=COleDateTime::GetCurrentTime();
	i=m_Time.GetMinute();
	if(i!=m_Minute)
	{
	m_Minute=i;
    m_Tim=m_Time;
	m_Ktr=(float)30;
	m_Ktc=(float)60;
	m_Gfwd=(float)45;
	m_Gfyw="2#";
	m_Ktsb="开";
	m_Lqb="低速";
	m_Lqfj="中速";
	m_Ryb="开";
	m_Zkb="开";
	m_Ktrsj="小火";
    m_pRecord->AddNew();
    m_pRecord->PutCollect("历史时间",m_Tim);
     m_pRecord->PutCollect("空调水入口",m_Ktr);
     m_pRecord->PutCollect("空调水出口",m_Ktc);
     m_pRecord->PutCollect("高发温度",m_Gfwd);
    m_pRecord->PutCollect("高发液位",m_Gfyw);
     m_pRecord->PutCollect("空调水泵",m_Ktsb);
    m_pRecord->PutCollect("冷却泵",m_Lqb);
     m_pRecord->PutCollect("冷却风机",m_Lqfj);
    m_pRecord->PutCollect("溶液泵",m_Ryb);
     m_pRecord->PutCollect("真空泵",m_Zkb);
    m_pRecord->PutCollect("空调燃烧机",m_Ktrsj);
     
	}
  
	  
}
//通讯处理
void CModem3Dlg::communcation()
{   
	
	
	 if(send_flag==1)
	      immediate_communcation();          //及时查寻
	  else
          gongkuang_communcation();          //工况查寻
	 receive();                              //数据接受
	 data_dealwith();

}
void CModem3Dlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
     time_over++;
	 if(time_over>1000)
		 time_over=0;
	 AfxBeginThread(ThreadFunc,(LPVOID)this);      //启动工作者线程                    //工况数据处理
	 CDialog::OnTimer(nIDEvent);
}
void CModem3Dlg::immediate_communcation(void)
{       
	     int i;
        if(send_over==1)                           //上一命令已发送完
		{   
			send_over=0;
			send_timer++;
			if(send_timer>3)  
			{
		      send_flag=0;
			  send_timer=0;
			}
		    switch(send_data[3])
			{
		      case  0x01: //室外机发送次数
				  if(shiwaiji_send_timer[send_data[4]-1]>1000)
					  shiwaiji_send_timer[send_data[4]-1]=0;
				   else
				      shiwaiji_send_timer[send_data[4]-1]++;      
				  break;
			  case  0x02: //室内机发送次数
				    if(shineiji_send_timer[send_data[4]-1]>1000)
						shineiji_send_timer[send_data[4]-1]=0;
					else
					    shineiji_send_timer[send_data[4]-1]++;
					break;
			  case  0x04: //热水罐发送次数
				    if(reshueiguan_send_timer[send_data[4]-1]>1000)
						reshueiguan_send_timer[send_data[4]-1]=0;
					else
						reshueiguan_send_timer[send_data[4]-1]++;
					break;
			}
				   
			
	      
	       CByteArray array;
	       array.RemoveAll();
            array.SetSize(50);
	       for(i = 0; i < 50; i++)
           array.SetAt(i, send_data[i]);
		   m_Com.SetOutput(COleVariant(array));
		   
		}
		
}
void CModem3Dlg::gongkuang_communcation()
{   
	int i;
    unsigned char  Tx_data[100];          //        
    if(send_over==1)
	{
        send_over=0;
	    switch(send_owner)
		{    
         
	       case 1:   /*   室外机查寻 ( 工况和故实时故障) */
			  switch(shiwaiji_command_no)
			  {
			     case 1:                      //工况查寻
			          Tx_data[0]=0xf7;
	                  Tx_data[1]=0xf8;
	                  Tx_data[2]=0x04;
	                  Tx_data[3]=0x01;
	                  Tx_data[4]=shiwaiji_owner_no;
	                  Tx_data[5]=0x10;
	                  Tx_data[6]=0x00;
	                  for( i=2;i<6;i++)
	                  Tx_data[6]+=Tx_data[i];
	                  Tx_data[7]=0xfd;
                      shiwaiji_send_timer[shiwaiji_owner_no-1]++;
	                  shiwaiji_command_no++;
				      break;
				 case 2:               //实时故障
					  Tx_data[0]=0xf7;
					  Tx_data[1]=0xf8;
					  Tx_data[2]=0x04;
					  Tx_data[3]=0x01;
					  Tx_data[4]=shiwaiji_owner_no;
					  Tx_data[5]=0x11;
					  Tx_data[6]=0x00;
					  for(i=2;i<6;i++)
						  Tx_data[6]+=Tx_data[i];
					  Tx_data[7]=0xfd;
                       shiwaiji_send_timer[shiwaiji_owner_no-1]++;
	                  shiwaiji_command_no++;
				 case 3:
					  Tx_data[0]=0xf7;
					  Tx_data[1]=0xf8;
					  Tx_data[2]=0x04;
					  Tx_data[3]=0x01;
					  Tx_data[4]=shiwaiji_owner_no;
					  Tx_data[5]=0x0A;
					  Tx_data[6]=0x00;
					  for(i=2;i<6;i++)
						  Tx_data[6]+=Tx_data[i];
					  Tx_data[7]=0xfd;
                      shiwaiji_send_timer[shiwaiji_owner_no-1]++;
					  shiwaiji_command_no=1;
                      shiwaiji_owner_no++;    //室外机发送所有权增加
					  break;
			  }
			                   //
			    if(shiwaiji_owner_no>=3)
				{   
				send_owner=2;
				shiwaiji_owner_no=1;
				}
			break;
			
	  case  2:                           //室内机工况查寻
	         Tx_data[0]=0xf7;
             Tx_data[1]=0xf8;
             Tx_data[2]=0x04;
             Tx_data[3]=0x02;
             Tx_data[4]=shineiji_owner_no;
             Tx_data[5]=0x27;
             Tx_data[6]=0x00;
              for(i=2;i<6;i++)
	         Tx_data[6]+=Tx_data[i];
             Tx_data[7]=0xfd;
             shineiji_send_timer[shineiji_owner_no-1]++;
             shineiji_owner_no++;
             if(shineiji_owner_no>=80)
			 {
			  shineiji_owner_no=1;
	         send_owner=3;
			 }
	         break;
     case 3:                    //热水罐工况查寻

          Tx_data[0]=0xf7;
          Tx_data[1]=0xf8;
          Tx_data[2]=0x04;
          Tx_data[3]=0x04;
          Tx_data[4]=reshueiguan_owner_no;
          Tx_data[5]=0x29;
          Tx_data[6]=0x00;
          for(i=2;i<6;i++)
	        Tx_data[6]+=Tx_data[i];
          Tx_data[7]=0xfd;
          reshueiguan_send_timer[reshueiguan_owner_no-1]++;
          reshueiguan_owner_no++;
          if(reshueiguan_owner_no>=17)
		  {
	       send_owner=1;
           reshueiguan_owner_no=1;
		  }
		  break;
		}

  	CByteArray array;
	array.RemoveAll();
	array.SetSize(8);
    for(i = 0; i < 8; i++)
    array.SetAt(i, Tx_data[i]);
	m_Com.SetOutput(COleVariant(array));
	}
}
void CModem3Dlg::OnOnCommMscomm2() 
{
     // TODO: Add your control notification handler code here
	VARIANT vResponse;
	int nEvent;
    nEvent=m_Com.GetCommEvent();
	switch(nEvent)
	{
      case 1:
		    send_over=1;
		    break;
 	  case 2:
		   vResponse=m_Com.GetInput();
		   receive_data[m_count]=vResponse.bVal;
		   switch(m_count)
		   {
		   case 0:
			     if(receive_data[0]==0xf7)   m_count++;
				 else   m_count=0;
			     break;
		   case 1:
			     if(receive_data[1]==0xf8)    m_count++;
				 else  m_count=0;
			     break;
		   case 2:
			     m_long=receive_data[2]+4;
				 if(m_long>60)     m_count=0;
				 else                m_count++;
				 break;
		   default:
			     m_count++;
				 break;
		   }
		   if(m_count>=m_long&&m_long>0)
		   {   receive_flag=1;
			   m_long=0;
			   m_count=0;
		   }
	}

}	

void CModem3Dlg::receive(void)
{    
   	int i,sum;
    if(receive_flag==1)                              //数据收完
	 {   
	   receive_flag=0;
	   for(i=2;i<receive_data[2]+2;i++)
	      sum+=receive_data[i];
	   if(sum!=receive_data[receive_data[2]+2])      //校验和   
	      return;
	    
		switch(receive_data[5])
			  {
			    case 0x10:                              //室外机工况
					 for(i=0;i<receive_data[2]+4;i++)
                      shiwaiji_gongkuang[receive_data[4]-1][i]=receive_data[i];
					  shiwaiji_send_timer[receive_data[4]-1]=0;
					  break;
				case 0x11:
					  for(i=0;i<receive_data[2]+4;i++)  //室外机故障
                      shiwaiji_guzhang[receive_data[4]-1][i]=receive_data[i];
					  shiwaiji_send_timer[receive_data[4]-1]=0;
					  break;
				case 0x0A:
					   m_gzzt=receive_data[7]&&0x03;
                       shiwaiji_send_timer[receive_data[4]-1]=0;
					   break;
				case 0x27:                              //室内机工况
					   for(i=0;i<receive_data[2]+4;i++)
                       shineiji_gongkuang[receive_data[4]-1][i]=receive_data[i];
					   shineiji_send_timer[receive_data[4]-1]=0;
					   break;
				case 0x29:
					  for(i=0;i<receive_data[2]+4;i++)
                      reshueiguan_gongkuang[receive_data[4]-1][i]=receive_data[i];
					  reshueiguan_send_timer[receive_data[4]-1]=0;
					  break;
				default:
					  for(i=0;i<receive_data[2]+4;i++)
                      //immediate_data[receive_data[4]-1][i]=receive_data[i]; 
					  send_timer=0;         //清除立即查寻的发送次数
					  send_flag=0;          //清除立即查寻的发送标志
					  break;
				
		} 
	   
		
				receive_flag=0;
	 }
}
void CModem3Dlg::data_dealwith()
{ 
	 unsigned char j;
	 CString str;
/*	 for(i=2;i<rx_data[2]+4-2;i++)
		 sum+=rx_data[i];
	 if(sum==rx_data[rx_data[2]+2])
	 {
		 switch(rx_data[5])
		 {
		 case 0x10:                                       //室外机工况
			   if(rx_data[4]==shiwaiji_xuanze)
			   {
			   */                                
				 parameter_dealwith();      //工况参数
                 auto_dealwith();           //自动运行       
				 zb_dealwith();             //数据显示之部件       
                 guzhang_dealwith();        //数据显示之故障       
	                          
	                 
            
			 
			 //液位更新
    CWnd* pWnd=	GetDlgItem(IDC_STATICGAOFAYEWEI);  
	CDC * pDCC=pWnd->GetDC();
    CBrush newbrush(RGB (140, 255, 120));
	j=shiwaiji_gongkuang[shiwaiji_xuanze][31]&0x1e;
	 
	 
	 
     	switch(j)
		{
	    case 0x02:
		      m_high=25;
		      break;
	    case 0x04:
		      m_high=50;
		      break;
    	case 0x08:
		    m_high=75;
		    break;
	    case 0x10:
		    m_high=100;
		    break;
	    default:
	    	m_high=0;
	    	break;
		}
    
    if(ye1!=j)
	{
    ye1=j;
    pWnd->Invalidate();
    pWnd->UpdateWindow();
    CBrush * oldbrush=pDCC->SelectObject(&newbrush);
    pDCC->Rectangle(0,100-m_high,50,100);
    pDCC->SelectObject(oldbrush);
    pWnd->ReleaseDC(pDCC);
	}
    

    j=shiwaiji_gongkuang[shiwaiji_xuanze][32]&0x07;
	
	 
	switch(j)
	{
	case 0x01:
		 m_high=40;
		 break;
	case 0x02:
		 m_high=80;
		 break;
	case 0x04:
		 m_high=125;
		 break;
	default:
		m_high=0;
		break;
	}
	if(ye2!=j)
	{ye2=j;
    pWnd=GetDlgItem(IDC_STATICLJYW);
    pDCC=pWnd->GetDC();
    pWnd->Invalidate();
    pWnd->UpdateWindow();
	CBrush newbrush2(RGB(123,222,125));
    CBrush* oldbrush2=pDCC->SelectObject(&newbrush2);
    pDCC->Rectangle(0,125-m_high,68,125);
    pDCC->SelectObject(oldbrush2);
    pWnd->ReleaseDC(pDCC);
	}
	
		j=shiwaiji_gongkuang[shiwaiji_xuanze][31]&&0x20;
		if(j==0x20)
			GetDlgItem(IDC_DFYW)->SetWindowText("满");
		else
			GetDlgItem(IDC_DFYW)->SetWindowText("未满");
		j=shiwaiji_gongkuang[shiwaiji_xuanze][31]&&0x40;
          if(j==0x40)
			GetDlgItem(IDC_CQYW)->SetWindowText("满");
		else
			GetDlgItem(IDC_CQYW)->SetWindowText("未满"); 
       	j=shiwaiji_gongkuang[shiwaiji_xuanze][31]&&0x80;
          if(j==0x80)

⌨️ 快捷键说明

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