📄 readcarddlg.cpp
字号:
serial.Setup(CSerial::EBaud19200,CSerial::EData8,CSerial::EParEven,CSerial::EStop1);
SetDlgItemText(IDC_SNDDATA,OutBuffer);
length=strlen(tmp);
Ret=serial.Write(tmp,length,0,0,10);
if (Ret!=ERROR_SUCCESS)
{
serial.Close();
CString errcode;
errcode.Format("写数据到串口失败.errcode=%d",Ret);
MessageBox(errcode);
return;
}
whil=serial.WaitEvent (0,180);
if (whil==0)
{
memset(tmp,0x00,sizeof(tmp));
Sleep(50);
Ret=serial.Read(tmp,length+10,0,0,10); //取返回信息
Sleep(50);
length=strlen(tmp);
if (Ret!=ERROR_SUCCESS)
{
CString errcode;
errcode.Format("读取串口数据失败.errcode=%d",Ret);
MessageBox(errcode);
return;
}
if (length > 7 )
{
char card[18];
memset(card,0,sizeof(card));
memcpy(card,&tmp[4],8);
SetDlgItemText(IDC_EDIT1,card);//取要设置的读卡器ID号
(CButton *)GetDlgItem(IDC_BTN)->EnableWindow();
readcard=FALSE;
}
}
else
{
CString errcode;
errcode.Format("等待串口数据失败.errcode=%d",whil);
MessageBox(errcode);
}
}
else
{
CString errcode;
errcode.Format("打开串口失败.errcode=%d",Ret);
MessageBox(errcode);
}
serial.Close();
}
void CReadcardDlg::OnRRead()
{
//读卡
CString port,OutBuffer;
LONG Ret=0,whil=0,length=0,datalength=0;
char bcc=0,tmp[50],*point;
BOOL readcard=TRUE,mmt=((CButton *)GetDlgItem(IDC_MMT))->GetCheck();
CSerial serial;
memset(tmp,0x00,sizeof(tmp));
GetDlgItemText(IDC_COM,port);
Ret=serial.Open(_T(port));
if (Ret ==ERROR_SUCCESS)
{
bcc=tmp[0]=9;
if (!mmt)//普通头
tmp[1]='A';
else //密码头
tmp[1]='H';
GetDlgItemText(IDC_COMBO1,OutBuffer); //读卡器编号ID
tmp[2]=OutBuffer[0];
tmp[3]='G';
for(int i=1;i<=3;i++)
bcc^=tmp[i];
if ((tmp[4] = (bcc&0xf0)>>4|0x30) > '9')
tmp[4]+=7;
if ((tmp[5] = (bcc&0x0f)|0x30) > '9')
tmp[5]+=7;
tmp[6]=0x0d;
tmp[7]=0;
OutBuffer.Format("09 %02x %02x %02x %02x %02x 0D",tmp[1],tmp[2],tmp[3],tmp[4],tmp[5]);
serial.Setup(CSerial::EBaud19200,CSerial::EData8,CSerial::EParEven,CSerial::EStop1);
SetDlgItemText(IDC_SNDDATA,OutBuffer);
datalength=strlen(tmp);
Ret=serial.Write(tmp,datalength,0,0,10);
if (Ret!=ERROR_SUCCESS)
{
serial.Close();
CString errcode;
errcode.Format("写数据到串口失败.errcode=%d",Ret);
MessageBox(errcode);
return;
}
whil=serial.WaitEvent (0,180);
if (whil==0)
{
char lencard[2];
GetDlgItemText(IDC_CARDLEN,OutBuffer);
strcpy(lencard,OutBuffer);
memset(tmp,0x00,sizeof(tmp));
Sleep(50);
Ret=serial.Read(tmp,30,0,0,10); //取返回信息
Sleep(50);
length=0;
while (tmp[length]!=0)
{
if(tmp[length]==13)
break;
else
{
if(tmp[length]>9)
length++;
else
tmp[length]=0x00;
}
}
if (Ret!=ERROR_SUCCESS)
{
CString errcode;
errcode.Format("读取串口数据失败.errcode=%d",Ret);
MessageBox(errcode);
return;
}
if (length > 8 && tmp[4]!='c')
{
char card[18];
memset(card,0,sizeof(card));
memcpy(card,&tmp[5],length-4-3);
////////////////////////////////////////////////////////////////////////// 去前面为0的部份
int sit=0;
while (card[sit]=='0')
sit++;
memset(tmp,0x00,sizeof(tmp));
strcpy(tmp,&card[sit]);
strcpy(card,tmp);
////////////////////////////////////////////////////////////////////////// 去前面为0的部份
if(((CButton *)GetDlgItem(IDC_DCHK))->GetCheck()==true)
{
memset(tmp,0x00,sizeof(tmp));
sprintf(tmp,"%lf",hextodec(card));
point=strchr(tmp,'.');
sit=point-tmp;
tmp[sit]=0x00;
memcpy(card,tmp,sit+1);
memcpy(card,tmp,sit);
}
SetDlgItemText(IDC_CARDINFO,card);//取要设置的读卡器ID号
}
}
else
{
CString errcode;
errcode.Format("等待串口数据失败.errcode=%d",whil);
MessageBox(errcode);
}
serial.Close();
}
else
{
CString errcode;
errcode.Format("打开串口失败.errcode=%d",Ret);
MessageBox(errcode);
return;
}
}
void CReadcardDlg::OnBtnID()
{
//取读卡器的ID号
CString port,OutBuffer;
LONG Ret=0,whil=0,length=0,datalength=0;
BOOL mmt=((CButton *)GetDlgItem(IDC_MMT))->GetCheck();
char bcc=0,tmp[50];
CSerial serial;
GetDlgItemText(IDC_EDIT1,OutBuffer);
if (OutBuffer.GetLength()>=8)
{
memset(tmp,0x00,sizeof(tmp));
GetDlgItemText(IDC_COM,port);
Ret=serial.Open(_T(port));
if (Ret == ERROR_SUCCESS)
{
bcc=tmp[0]=9;
if (!mmt)//普通头
tmp[1]='A';
else //密码头
tmp[1]='H';
tmp[2]='0';
tmp[3]='D';
for(int i=1;i<=3;i++)
bcc^=tmp[i];
GetDlgItemText(IDC_EDIT1,OutBuffer);
memcpy(&tmp[4],OutBuffer,8);
for(;i<8+4;i++)
bcc^=OutBuffer[i-4];
if ((tmp[12] = (bcc&0xf0)>>4|0x30) > '9')
tmp[12]+=7;
if ((tmp[13] = (bcc&0x0f)|0x30) > '9')
tmp[13]+=7;
tmp[14]=0x0d;
tmp[15]=0x00;
OutBuffer.Format("09 %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x 0D",tmp[1],tmp[2],tmp[3],
tmp[4],tmp[5],tmp[6],tmp[7],tmp[8],tmp[9],tmp[10],tmp[11],tmp[12],tmp[13]);
SetDlgItemText(IDC_SNDDATA,OutBuffer);
datalength=strlen(tmp);
serial.Setup(CSerial::EBaud19200,CSerial::EData8,CSerial::EParEven,CSerial::EStop1);
Sleep(50);
Ret=serial.Write(tmp,datalength,0,0,10);
Sleep(50);
if (Ret!=ERROR_SUCCESS)
{
serial.Close();
CString errcode;
errcode.Format("写数据到串口失败.errcode=%d",Ret);
MessageBox(errcode);
return;
}
whil=serial.WaitEvent (0,180);
if (whil==0)
{
int len=4+1+3;
memset(tmp,0x00,sizeof(tmp));
Sleep(50);
Ret=serial.Read(tmp,len,0,0,10); //取返回信息
Sleep(50);
length=strlen(tmp);
if (Ret!=ERROR_SUCCESS)
{
CString errcode;
errcode.Format("读取串口数据失败.errcode=%d",Ret);
MessageBox(errcode);
return;
}
if (length > 4 )
{
char card[18];
memset(card,0,sizeof(card));
memcpy(card,&tmp[4],1);
SetDlgItemText(IDC_COMBO1,card);//取要设置的读卡器ID号
}
}
else
{
CString errcode;
errcode.Format("等待串口数据失败.errcode=%d",whil);
MessageBox(errcode);
}
serial.Close();
}
else
{
CString errcode;
errcode.Format("打开串口失败.errcode=%d",Ret);
MessageBox(errcode);
return;
}
}
else
{
MessageBox("请先读取读卡器模块编号!");
}
}
void CReadcardDlg::OnButton4()
{
CString port,OutBuffer;
LONG Ret=0,whil=0,length=0,datalength=0;
BOOL mmt=((CButton *)GetDlgItem(IDC_MMT))->GetCheck();
char bcc=0,tmp[50];
CSerial serial;
GetDlgItemText(IDC_EDIT1,OutBuffer);
if (OutBuffer.GetLength()>=8)
{
memset(tmp,0x00,sizeof(tmp));
GetDlgItemText(IDC_COM,port);
Ret = serial.Open(_T(port));
if (Ret == ERROR_SUCCESS)
{
bcc=tmp[0]=9;
if (!mmt)//普通头
tmp[1]='A';
else //密码头
tmp[1]='H';
tmp[2]='0';
tmp[3]='C';
GetDlgItemText(IDC_EDIT1,OutBuffer);
memcpy(&tmp[4],OutBuffer,8);
GetDlgItemText(IDC_COMBO1,port);
tmp[12]=port[0];
for(int i=1;i<=3;i++)
bcc^=tmp[i];
for(;i<(OutBuffer.GetLength()+4);i++)
bcc^=OutBuffer[i-4];
bcc^=tmp[i];
if ((tmp[13] = (bcc&0xf0)>>4|0x30) > '9')
tmp[13]+=7;
if ((tmp[14] = (bcc&0x0f)|0x30) > '9')
tmp[14]+=7;
tmp[15]=0x0d;
tmp[16]=0x00;
OutBuffer.Format("09 %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x 0D",tmp[1],tmp[2],tmp[3],
tmp[4],tmp[5],tmp[6],tmp[7],tmp[8],tmp[9],tmp[10],tmp[11],tmp[12],tmp[13],tmp[14]);
SetDlgItemText(IDC_SNDDATA,OutBuffer);
serial.Setup(CSerial::EBaud19200,CSerial::EData8,CSerial::EParEven,CSerial::EStop1);
datalength=strlen(tmp);
Sleep(50);
Ret=serial.Write(tmp,datalength,0,0,10);
Sleep(50);
if (Ret!=ERROR_SUCCESS)
{
serial.Close();
CString errcode;
errcode.Format("写数据到串口失败.errcode=%d",Ret);
MessageBox(errcode);
return;
}
whil=serial.WaitEvent (0,180);
if (whil!=0)
{
CString errcode;
errcode.Format("等待串口数据失败.errcode=%d",whil);
MessageBox(errcode);
}
serial.Close();
}
else
{
CString errcode;
errcode.Format("打开串口失败.errcode=%d",Ret);
MessageBox(errcode);
return;
}
}
else
{
MessageBox("请输入读卡器模块编号!");
}
}
/////////////////////////////////////////////
/////////////////////////////////////////////
void CReadcardDlg::OnButton5()
{
CString card,decstr;
GetDlgItemText(IDC_CARDINFO,card);
decstr.Format("%lf",hextodec(card.GetBuffer(0)));
SetDlgItemText(IDC_CARDINFO,decstr);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -