📄 seriesportdlg.cpp
字号:
// 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 + -