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

📄 seriesportdlg.cpp

📁 通过COM1与单片机通讯的界面程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//	rOverLaped.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); //创建一个事件对象??会影响句柄的增加!!
if(ReadFile(hCom,DataBuffer,rst.cbInQue,&factbyte,&rOverLaped)) //读取数据到缓冲区中
	{
		DataBuffer[rst.cbInQue]= 0;
		//IsStop = FALSE;
	}
	else
	{	
		res = WaitForSingleObject(rOverLaped.hEvent,1);
	}
	//IsStop = FALSE;
	//MessageBox(DataBuffer);
//	Sleep(1);
   // m_rx+=DataBuffer;
	//UpdateData(FALSE);


    for(int ii=0;DataBuffer[ii]!='\0';ii++)
	{	BYTE ReceiveChar;
    ReceiveChar=DataBuffer[ii];

	switch(ReceiveChar)
			{case 0x5: ReceiveChar=0x3c;
                       QueueX=0;
				       Queue[Y_Tail][0]=ReceiveChar;
					   QueueX=QueueX+1;
					   break;
			 case 0x6: QueueX=0;
                       Queue[Y_Tail][0]=ReceiveChar;
                       QueueX=QueueX+1;
					   break;
			 case 0x2: ReceiveChar=0x3c;
				       QueueX=0;
				       Queue[Y_Tail][0]=ReceiveChar;
                       QueueX=QueueX+1;
					   break;
			 case 0xd: ReceiveChar=0x3e;
				       Queue[Y_Tail][QueueX]=ReceiveChar;
                       QueueX=QueueX+1;
					   oldY_Tail=Y_Tail;
                       Y_Tail=Y_Tail+1;
					   if(Y_Tail>=60)Y_Tail=0;
					   if(Y_Tail==Y_Head)Y_Head=Y_Head+1;
					   if(Y_Head>=60)Y_Head=0;
				       ProcessWord();
				    	break;
			 default : Queue[Y_Tail][QueueX]=ReceiveChar;
				       QueueX=QueueX+1;
					   break;}   
	}

}




void CSeriesPortDlg::ProcessWord()
{
	int Xp;
 Xp=Pop_string(stack);
 xp_new=Xp;
 StoreAR(Xp);

}

int CSeriesPortDlg::Pop_string(char stack[])
{
	int i,Xp=XpMax-1;
	if(Y_Head!=Y_Tail)
					   {  for(i=0;i<20;i++)
						  stack[i]=Queue[Y_Head][i];
				           Y_Head=Y_Head+1;
						   if(Y_Head>60)Y_Head=0;
						   ItemCode=stack[1];
						   DUTdataStringPointer=stack+1;
                             stack[9]=0;stack[10]=0;stack[11]=0;
                        	switch(shift)
							{	case 0:	m_edt2.SetWindowText(stack);
							                
							               break;
                            case 1:	m_edt3.SetWindowText(stack);break;
							case 2:	m_edt4.SetWindowText(stack);break;
							case 3:	m_edt5.SetWindowText(stack);break;
							case 4:	m_edt6.SetWindowText(stack);break;
							case 5:	m_edt7.SetWindowText(stack);break;
							case 6:	m_edt8.SetWindowText(stack);break;
					       	case 7:	m_edt9.SetWindowText(stack);break;
							default :break;
							}
                           	shift=shift+1;
							if(shift==8)
							shift=0;
					        //UpdateData(FALSE);//此句具有全局的作用,所以在时刻保持RS232通讯不能使用这个语句
					        stack[6]=0;stack[7]=0;stack[8]=0;
					        if (ItemCode>='A' && ItemCode <='{' && stack[0]=='<' )
	                        Xp=(ItemCode-'A');
	                        else if ( !( (ItemCode>='1' && ItemCode<='8' && stack[0]=='<') || stack[0]==ACK ) )
                         	Xp=ErrorXp; }
                           	return(Xp);


}

void CSeriesPortDlg::StoreAR(int Xp)
{
	long RxD;
	if ( Xp==1|| Xp==15 || Xp==70 || Xp==71 ||  (Xp>='V' && Xp<='|') || (Xp>='[' && Xp<='^') )//理解错误!
    RxD=atol(DUTdataStringPointer+1);//a
	else
	RxD=ASC4toI(DUTdataStringPointer+1);
	if ( Xp==TJbbpc && DUTdataStringPointer[0]=='F') { DUTdataStringPointer[0]='0'; RxD=0-atol(DUTdataStringPointer); }
	if (Xp=='R' && (int)RxD < 0 )
    RxD=RxD+0xffff0000;
	ARDnow[Xp]=RxD;

}

long CSeriesPortDlg::ASC4toI(char String[])
{
	long Data;
   int j;
   Data=0;
   for(j=0;j<4/*strlen( String)*/ && String[j]!=DUTidPrefix   ;j++)
   Data=Data*16+ASC1toI( String[j] );
   return(Data);

}

char CSeriesPortDlg::ASC1toI(char ch)
{
   if( ch>='A')
   return(ch-'A'+10);
   else
   return(ch-'0');

}

void CSeriesPortDlg::KeyforSend1(char send)
{
	DWORD res;
	DWORD factdata = 0;
	DWORD res2;
	DWORD factdata2 = 0;
	int  i;
	
	char KeyinData[20];
 	char SendLength=6;
	long ChkSumS=0;
	KeyinData[0]=STX;
 	KeyinData[1]=send;
	if(send=='G')
  {
    sprintf(KeyinData+2,"%s",LNwr);//!TBD CH %s->%08s
    for (i=0; i<=3; i++)   KeyinData[i+10]=KeyinData[i+6];//Shift Sn LSB to [10~13]
    
  }
   else	sprintf(KeyinData+2,"%04lX",ddata);//Visual C++同样支持c 的函数!
    ChkSumS=ASC2toI(KeyinData+2)+ASC2toI(KeyinData+4)+(KeyinData[1]-'A'+0x0041);
    ChkSumS=ChkSumS%0x0100;
    sprintf(KeyinData+SendLength,"%02lX",ChkSumS);//Visual C++同样支持c 的函数!
	KeyinData[SendLength+2]=CR;
	KeyinData[SendLength+3]='\0';
   	str=KeyinData;  

   // wOverLaped.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);//创建一个事件对象
	if (WriteFile(hCom,str,str.GetLength(),&factdata,&wOverLaped))//开始发送数据
	{
		//IsStop = TRUE;
		MessageBox("发送成功");
	}
	else
	{
		res = WaitForSingleObject(wOverLaped.hEvent,50); //延时5秒,等待数据发送
		if (WAIT_OBJECT_0 == res)//如果事件处于有信号状态,表示发送完成
		{
			//IsStop = TRUE;
		}
		else
		Sleep(5); //延时0.1秒钟		
	}	

     Sleep(100);
	if(send=='G')
  {
	      //Now, send Sn_LSB
    for (i=0; i<=3; i++)   KeyinData[i+2]=KeyinData[i+10];//Reload Sn LSB to [2~5]
    KeyinData[1]='I';
    ChkSumS=ASC2toI(KeyinData+2)+ASC2toI(KeyinData+4)+(KeyinData[1]-'A'+0x0041);
    ChkSumS=ChkSumS%0x0100;
    sprintf(KeyinData+6,"%02lX",ChkSumS);
    KeyinData[SendLength+2]=CR;//ex:{STX,"e123456",CR,0x00}
    KeyinData[SendLength+3]=0;//NULL
//    SendStringACK( &COM[1],KeyinData,9 );
		str=KeyinData;

//	wOverLaped2.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);//创建一个事件对象
	if (WriteFile(hCom,str,str.GetLength(),&factdata2,&wOverLaped2))//开始发送数据
	{
		//IsStop = TRUE;
		MessageBox("发送成功");
	}
	else
	{
		res2 = WaitForSingleObject(wOverLaped.hEvent,50); //延时5秒,等待数据发送
		if (WAIT_OBJECT_0 == res2)//如果事件处于有信号状态,表示发送完成
		{
			//IsStop = TRUE;
		}
		else
		Sleep(5); //延时0.1秒钟		
	}	
    Sleep(100);
  }

	
}

long CSeriesPortDlg::ASC2toI(char String[])
{
long Data;
  int j;
  Data=0;
  for(j=0;j<2/*strlen( String)*/ && String[j]!=DUTidPrefix   ;j++)
  Data=Data*16+ASC1toI( String[j] );
  return(Data);

}

//void CSeriesPortDlg::OnShoot() 
//{
	// TODO: Add your control notification handler code here
//	ddata=0x0000;
//	KeyforSend1('e');
//	SetTimer(2,3000,NULL);
//	GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
	
//}

void CSeriesPortDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nIDEvent)
	{
	
		case 4:  
			{	CTime time=CTime::GetCurrentTime();
	 CString ddtime= time.Format("%m/%d %H:%M %S");
	  //::SetDlgItemText(m_hWnd,IDC_EDIT1,ddtime);
	 // m_myedt1.SetWindowText(ddtime);
	  m_statusbar.SetPaneText(3,ddtime);
	  int pptemp;
	  CString dd2time=time.Format("%S");
	  pptemp=atoi(dd2time);
	  ((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetPos(pptemp*200/60);

		    }break;
	
	
	
	case 1:  
			switch(xp_new)
  {
   case 1:   {
         char Buff1[5];
         ltoa(ARDnow[1],Buff1,10);
         m_lis.SetItemText(ii,6,Buff1);    
       	 ii=ii+1;

		 ((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->SetPos(ARDnow[1]/10-200);

		 
	     if(ii==10)	
		 {ii=0;
		  // char Ntime3[7]="abcdef";
		 CString buff1;
		 buff1.Format("%s  ",Buff1);
		 file2.Write(buff1,buff1.GetLength());
		 

		 CTime time=CTime::GetCurrentTime();
	 CString ddtime= time.Format("%H:%M:%S");
     file2.Write(ddtime,ddtime.GetLength());

   char   buf[2]   ;   
  sprintf(buf,"%c%c",0x0d,0x0a);   
  file2.Write(buf,sizeof(buf));
       
		 }
		 break;
			  }
    case 2:   {
          char Buff2[5];
          ltoa(ARDnow[2],Buff2,10);
	      m_lis.SetItemText(ii1,7,Buff2);
	      ii1=ii1+1;
	      if(ii1==10)ii1=0;break;
			   }
     case 4:  {
		  char Buff3[5];
	      ltoa(ARDnow[4],Buff3,10);
	      m_lis.SetItemText(ii2,1,Buff3);
	      ii2=ii2+1;if(ii2==10)	ii2=0;break;
			   }
     case 5 : {
		 char Buff4[5];
	     ltoa(ARDnow[5],Buff4,10);
	     m_lis.SetItemText(ii3,8,Buff4);
	     ii3=ii3+1;	if(ii3==10)	ii3=0;break;
			  }
     case 7: {
		 char Buff5[5];
	     ltoa(ARDnow[7],Buff5,10);
	     m_lis.SetItemText(ii4,0,Buff5);
	     ii4=ii4+1;	if(ii4==10)	ii4=0;break;
			 }
	 case 9: {
		char Buff6[5];
	    ltoa(ARDnow[9],Buff6,10);
       	m_lis.SetItemText(ii5,5,Buff6);
       	ii5=ii5+1;
       	if(ii5==10)	ii5=0;break;
			 }
	 case 15:{char Buff8[5];ltoa(ARDnow[15],Buff8,10);
		 m_lis.SetItemText(ii8,2,Buff8) ;
			 ii8=ii8+1;
       	if(ii8==10)	ii8=0;break;}
	 case 16:{
		char Buff7[5];
       	ltoa(ARDnow[16],Buff7,10);
        m_lis.SetItemText(ii6,4,Buff7);
     	ii6=ii6+1;	if(ii6==10)	 ii6=0;	break;
			 }
	 case 17:{ char Buff9[5];ltoa(ARDnow[17],Buff9,10);
		 m_lis.SetItemText(ii7,3,Buff9);
			 ii7=ii7+1;if(ii7==10) ii7=0;break;}

     case 13:{char Buff4[5];
	     ltoa(ARDnow[13],Buff4,16);
	     m_lis.SetItemText(ii9,9,Buff4);
		 ii9=ii9+1;	if(ii9==10)	ii9=0;break;}

    default :break;
  }break;

	case 2:   ddata=0x0000;KeyforSend1('e');
		break;
	case 3:	//if(ItemCode>='A'&&ItemCode<='Z'||ItemCode>='a'&&ItemCode<='z')

	{   
	      
		 if(ItemCode=='Z')

		 {
			 for(int ip=0;ip<21;ip++)
              for(int jp=0;jp<2;jp++)
			   ((CListCtrl*)GetDlgItem(IDC_LIST2))->SetItemText(ip,3*jp+2,"");  
			
			 if((ARDnow[VER]>0x0150)&&(ARDnow[VER]<0x0199))///TH机型
			 {
				 char THmin[42][12]={"Ath2","Bth","Cth","QambBs","TIbbTs","TIambT",
                 "GNI","Rvtco","SdPER","BatMed","BatLow","fTH8E2R","Mcount","CAQAfg",
                 "SN_MSB","","","","","","","SN_LSB","TIoral","MeaTHigh","FevTemp","MeaTLow","TIrvtco","AOffset",
                 "Kamb1","Kamb2","PDStatus","DUTver","DUTpara5","DUTpara6","SKinHi","SKinLo",
				 "","","","","","",};
                 char THitem[42][2]={"D","b","c","d","L","f","g","h","i","j","k","p","n","o","G","","","","","","",
                 "I","T","M","N","O","m","l","q","U","s","Z","r","y","V","W"
				 "","","","","",""};
   for(int i=0;i<=41;i++)
    {  if(i>=0&&i<=20)
    ((CListCtrl*)GetDlgItem(IDC_LIST2))->SetItemText(20-i,0,THmin[20-i]);
       else if(i>=21)
	((CListCtrl*)GetDlgItem(IDC_LIST2))->SetItemText(i-21,3,THmin[i]);//3表示列
	   else;
    }//4
  for( i=0;i<=20;i++)
  {((CListCtrl*)GetDlgItem(IDC_LIST2))->SetItemText(i,1,THitem[i]);//1表示列
  ((CListCtrl*)GetDlgItem(IDC_LIST2))->SetItemText(i,4,THitem[i+21]);}//1表示列
			 }

			 else if((ARDnow[VER]>0x1500)&&(ARDnow[VER]<0x1599))/////TN4机型
			 {
                 char TN4min[42][12]={"Ath2","Bth","Cth","QambBs","TIbbTs","TIambT",
"GNI","Rvtco","SdPER","BatMed","BatLow","GNJ","SpMode","MeaTHigh","SN_MSB","SN_LSB",
"","","","","","CtrlFg","ExtPCtrl","Emiss","MeaTLow","LCDCon","AOffset","GNRatio0",
"GNRatio1","GNRatio2","GNSwLv1","GNSwLv2","QdnRTB","DUTver","WIenIdx","WIenData"};

char TN4item[42][2]={"D","b","c","d","L","f","g","h","i","j","k","A","~","M","G","I",
"","","","","","r","K","S","O","}","l","T","U","V","W","n","o","Z","p","q","","","",
"","",""};

for(int i=0;i<=41;i++)
    {  if(i>=0&&i<=20)
    ((CListCtrl*)GetDlgItem(IDC_LIST2))->SetItemText(20-i,0,TN4min[20-i]);
       else if(i>=21)
	((CListCtrl*)GetDlgItem(IDC_LIST2))->SetItemText(i-21,3,TN4min[i]);//3表示列
	   else;
    }//4
  for( i=0;i<=20;i++)
  {((CListCtrl*)GetDlgItem(IDC_LIST2))->SetItemText(i,1,TN4item[i]);//1表示列
  ((CListCtrl*)GetDlgItem(IDC_LIST2))->SetItemText(i,4,TN4item[i+21]);}//1表示列

			 }

			 else if((ARDnow[VER]>0x1200)&&(ARDnow[VER]<0x1299))/////TN2机型
			 {
				 char TN205min[42][12]={"Ath2","Bth","Cth","QambBs","TIbbTs","TIambT",
"GNI","Rvtco","SdPER","BatMed","BatLow","SpMode","MeaTHigh","SN_MSB","SN_LSB","","","",
"","","","CtrlFg","ExtPCtrl","Emiss","MeaTLow","ModeCtl","AOffset","Wbb0","Wbb1","Wbb2",
"Wbb3","DUTver","Wamb0GR1","Wamb0GR2","Wamb0GL1","Wamb0GL2","","","","","",""};

char TN205item[42][2]={"D","b","c","d","L","f","g","h","i","j","k","~","M","G","I",
"","","","","","","r","K","S","O","}","l","T","U","V","W","Z","n","o","p","q",
"","","","","",""};

    for(int i=0;i<42;i++)
    {  if(i>=0&&i<=20)

⌨️ 快捷键说明

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