📄 fbycommudlg.cpp
字号:
bAddrOrCmd=1;
break;
case 2:
COMMAND[0]=m_DevIDVal;
ChckSum+=COMMAND[0];
COMMAND[1]=0xa0;
ChckSum+=COMMAND[1];
COMMAND[2]=0x01;
ChckSum+=COMMAND[2];
COMMAND[3]=ChckSum;
CMDLENGTH=4;
SendCommand(COMMAND,1,3);
bSending=1;
bAddrOrCmd=0;
break;
default:
break;
}
}
void CFbycommuDlg::OnBtninit()
{
// TODO: Add your control notification handler code here
char string1[10]="初始化";
char string2[10]="";
UpdateData();
m_BtnInit.GetWindowText(string2,10);
if(!strcmp(string1,string2))
{
m_BtnInit.SetWindowText("关 闭");
if(InitPort()<0)return;
int temp=m_Func.GetCurSel();
switch(temp)
{
case 0:
m_BtnTest.EnableWindow(TRUE);
m_BtnClean.EnableWindow(TRUE);
m_BtnFeed.EnableWindow(TRUE);
m_BtnGetStatus.EnableWindow(TRUE);
m_BtnGetData.EnableWindow(TRUE);
m_BtnAutoTest.EnableWindow(TRUE);
m_BtnReset.EnableWindow(TRUE);
break;
case 1:
case 2:
m_BtnTest.EnableWindow(TRUE);
m_BtnClean.EnableWindow(TRUE);
m_BtnFeed.EnableWindow(TRUE);
m_BtnGetStatus.EnableWindow(TRUE);
m_BtnGetData.EnableWindow(TRUE);
m_BtnAutoTest.EnableWindow(FALSE);
m_BtnReset.EnableWindow(TRUE);
break;
default:
break;
}
}
else
{
m_BtnInit.SetWindowText("初始化");
m_BtnTest.EnableWindow(FALSE);
m_BtnClean.EnableWindow(FALSE);
m_BtnFeed.EnableWindow(FALSE);
m_BtnGetStatus.EnableWindow(FALSE);
m_BtnGetData.EnableWindow(FALSE);
m_BtnAutoTest.EnableWindow(FALSE);
m_BtnReset.EnableWindow(FALSE);
CloseHandle(postRecvEvent);
CloseHandle(read_os.hEvent);
CloseHandle(postRecvEvent);
CloseHandle(read_os.hEvent);
if(hCommDev!=0)
{
CloseHandle(hCommDev);
hCommDev=0;
}
TerminateThread(comThreadHwnd,1);
}
}
void CFbycommuDlg::OnBtnreset()
{
// TODO: Add your control notification handler code here
BYTE ChckSum=0;
m_RecvDataVal+="复位:";
int temp=m_Func.GetCurSel();
switch(temp)
{
case 0:
COMMAND[0]=0x9a;
CMDLENGTH=1;
SendCommand(COMMAND,1,0);
bSending=0;
bAddrOrCmd=0;
break;
case 1:
COMMAND[0]=m_DevIDVal;
COMMAND[1]=0xc0;
CMDLENGTH=2;
SendCommand(COMMAND,1,3);
bSending=0;
bAddrOrCmd=1;
break;
case 2:
COMMAND[0]=m_DevIDVal;
ChckSum+=COMMAND[0];
COMMAND[1]=0xc0;
ChckSum+=COMMAND[1];
COMMAND[2]=0x01;
ChckSum+=COMMAND[2];
COMMAND[3]=ChckSum;
CMDLENGTH=4;
SendCommand(COMMAND,1,3);
bSending=1;
bAddrOrCmd=0;
break;
default:
break;
}
}
void CFbycommuDlg::OnBtntest()
{
// TODO: Add your control notification handler code here
BYTE ChckSum=0;
m_RecvDataVal+="测量:";
int temp=m_Func.GetCurSel();
switch(temp)
{
case 0:
COMMAND[0]=0x88;
CMDLENGTH=1;
SendCommand(COMMAND,1,0);
bSending=0;
bAddrOrCmd=0;
break;
case 1:
COMMAND[0]=m_DevIDVal;
COMMAND[1]=0x88;
CMDLENGTH=2;
SendCommand(COMMAND,1,3);
bSending=0;
bAddrOrCmd=1;
break;
case 2:
COMMAND[0]=m_DevIDVal;
ChckSum+=COMMAND[0];
COMMAND[1]=0x88;
ChckSum+=COMMAND[1];
COMMAND[2]=0x01;
ChckSum+=COMMAND[2];
COMMAND[3]=ChckSum;
CMDLENGTH=4;
SendCommand(COMMAND,1,3);
bSending=1;
bAddrOrCmd=0;
break;
default:
break;
}
}
void CFbycommuDlg::OnSelchangeCombofunc()
{
// TODO: Add your control notification handler code here
char string1[10]="初始化";
char string2[10]="";
m_BtnInit.GetWindowText(string2,10);
if(strcmp(string1,string2))
{
int temp=m_Func.GetCurSel();
switch(temp)
{
case 0:
m_BtnTest.EnableWindow(TRUE);
m_BtnClean.EnableWindow(TRUE);
m_BtnFeed.EnableWindow(TRUE);
m_BtnGetStatus.EnableWindow(TRUE);
m_BtnGetData.EnableWindow(TRUE);
m_BtnAutoTest.EnableWindow(TRUE);
m_BtnReset.EnableWindow(TRUE);
break;
case 1:
case 2:
m_BtnTest.EnableWindow(TRUE);
m_BtnClean.EnableWindow(TRUE);
m_BtnFeed.EnableWindow(TRUE);
m_BtnGetStatus.EnableWindow(TRUE);
m_BtnGetData.EnableWindow(TRUE);
m_BtnAutoTest.EnableWindow(FALSE);
m_BtnReset.EnableWindow(TRUE);
break;
default:
break;
}
}
else
{
m_BtnTest.EnableWindow(FALSE);
m_BtnClean.EnableWindow(FALSE);
m_BtnFeed.EnableWindow(FALSE);
m_BtnGetStatus.EnableWindow(FALSE);
m_BtnGetData.EnableWindow(FALSE);
m_BtnAutoTest.EnableWindow(FALSE);
m_BtnReset.EnableWindow(FALSE);
}
}
int CFbycommuDlg::InitPort()
{
char string[100];
DCB dcb;
PortInfo.Port=m_PortVal;
if(hCommDev!=0)
{
sprintf(string,"The COM%d have been opened!",PortInfo.Port);
MessageBox(string,"COM OPEN",MB_ICONEXCLAMATION);
return -1;
}
// open serial port
sprintf(string,"COM%d",PortInfo.Port);
hCommDev=CreateFile(string,GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL);
if(hCommDev==(HANDLE)-1)
{
sprintf(string,"OpenComPort COM%d failed!",PortInfo.Port);
MessageBox(string,"COM OPEN",MB_ICONEXCLAMATION);
GetLastError();
CloseHandle(hCommDev);
return -1; //INVALID_HANDLE_VALUE;
}
comMask=SetCommMask(hCommDev,EV_RXCHAR|EV_TXEMPTY);
comBuf=SetupComm(hCommDev,1024,1024);
dcb.DCBlength=sizeof(DCB);
comState=GetCommState(hCommDev,&dcb);
int SelectID=m_BaudRate.GetCurSel();
switch(SelectID)
{
case 0:
PortInfo.BaudRate=300;
break;
case 1:
PortInfo.BaudRate=600;
break;
case 2:
PortInfo.BaudRate=1200;
break;
case 3:
PortInfo.BaudRate=2400;
break;
case 4:
PortInfo.BaudRate=4800;
break;
case 5:
PortInfo.BaudRate=9600;
break;
case 6:
PortInfo.BaudRate=19200;
break;
default:
break;
}
dcb.BaudRate=PortInfo.BaudRate;
dcb.fBinary=true;
SelectID=m_Func.GetCurSel();
switch(SelectID)
{
case 1:
case 2:
dcb.fParity=true;
dcb.Parity=3;
break;
default:
dcb.fParity=false;
dcb.Parity=0;
break;
}
dcb.fOutxCtsFlow=false;
dcb.fOutxDsrFlow=false;
dcb.fDtrControl=DTR_CONTROL_ENABLE;
dcb.fDsrSensitivity=false;
dcb.fOutX=false;
dcb.fInX=false;
dcb.fErrorChar=false;
dcb.fRtsControl=RTS_CONTROL_ENABLE;
dcb.ByteSize=8;
dcb.StopBits=0;
if(!SetCommState(hCommDev,&dcb))
{
CloseHandle(hCommDev);
GetLastError();
MessageBox("SetCommState failed!!!","SetCommState",MB_ICONEXCLAMATION);
return -1;
}
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout=MAXDWORD;
CommTimeOuts.ReadTotalTimeoutMultiplier=0;
CommTimeOuts.ReadTotalTimeoutConstant=0;
CommTimeOuts.WriteTotalTimeoutMultiplier=0;
CommTimeOuts.WriteTotalTimeoutConstant=2000;
SetCommTimeouts(hCommDev,&CommTimeOuts);
memset(&read_os,0,sizeof(OVERLAPPED));
postRecvEvent=CreateEvent(NULL,TRUE,TRUE,NULL);
ASSERT(postRecvEvent);
read_os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
ASSERT(read_os.hEvent);
postRecvHwnd=m_hWnd;
memset(&write_os,0,sizeof(OVERLAPPED));
postSendEvent=CreateEvent(NULL,TRUE,TRUE,NULL);
ASSERT(postSendEvent);
write_os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
ASSERT(write_os.hEvent);
postSendHwnd=m_hWnd;
comThreadHwnd=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,
(LPTHREAD_START_ROUTINE)CommWatchThread,
(LPVOID)NULL,0 ,&dwThreadID);
PurgeComm(hCommDev,PURGE_TXCLEAR);
PurgeComm(hCommDev,PURGE_RXCLEAR);
return 1;
}
void CFbycommuDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
CloseHandle(postRecvEvent);
CloseHandle(read_os.hEvent);
CloseHandle(postRecvEvent);
CloseHandle(read_os.hEvent);
if(hCommDev!=0) CloseHandle(hCommDev);
TerminateThread(comThreadHwnd,1);
CDialog::OnClose();
}
LRESULT CFbycommuDlg::OnCommRecvNotify(WPARAM wParam,LPARAM lParam)
{
BYTE strRecvBuf[4096];
DWORD iRecvStrLen;
char tempchar[10];
DWORD i;
ClearCommError(hCommDev,&dwErrorFlag,&comStat);
iRecvStrLen=comStat.cbInQue;
if(iRecvStrLen>0)
{
BOOL bReturn=ReadFile(hCommDev,strRecvBuf,
iRecvStrLen,&iRecvStrLen,&read_os);
if(!bReturn)
{
if(ERROR_IO_PENDING==GetLastError())
if(WaitForSingleObject(read_os.hEvent,100))
iRecvStrLen=0;
MessageBox("Error on ReadFile!");
}
if(strRecvBuf[0]==m_DevIDVal&&bAddrOrCmd)
{
CMDLENGTH-=1;
if(CMDLENGTH>0) SendCommand(&COMMAND[1],CMDLENGTH,4);
bAddrOrCmd=0;
bSending=0;
}
for(i=0;i<iRecvStrLen;i++)
{
if( m_RadioDecHexVal==0)sprintf(tempchar,"%d,",strRecvBuf[i]);
else sprintf(tempchar,"%XH,",strRecvBuf[i]);
m_RecvDataVal+=tempchar;
}
}
SetEvent(postRecvEvent);
UpdateData(FALSE);
return TRUE;
}
LRESULT CFbycommuDlg::OnCommSendNotify(WPARAM wParam,LPARAM lParam)
{
ClearCommError(hCommDev,&dwErrorFlag,&comStat);
DWORD iSendStrLen=comStat.cbInQue;
if(iSendStrLen==0)
{
if(bSending)
{
CMDLENGTH-=1;
if(CMDLENGTH>0) SendCommand(&COMMAND[1],CMDLENGTH,4);
bAddrOrCmd=0;
bSending=0;
}
}
SetEvent(postSendEvent);
return TRUE;
}
//改变奇偶校验位
BYTE CFbycommuDlg::ChangeParity(BYTE ParityMark)
{
GetCommState(hCommDev,&dcb);
if(!ParityMark) dcb.fParity=false;
else dcb.fParity=true;
dcb.Parity=ParityMark;
SetCommState(hCommDev,&dcb);
GetCommState(hCommDev,&dcb);
return dcb.Parity ;
}
BOOL CFbycommuDlg::SendCommand(BYTE *CommandArray, DWORD CommandLength, BYTE ParityMark)
{
DWORD dwBytesWritten;
EscapeCommFunction(hCommDev,SETRTS);
ChangeParity(ParityMark);
if(!WriteFile(hCommDev,CommandArray,CommandLength,&dwBytesWritten,&write_os))
{
ClearCommError(hCommDev,&dwErrorFlag,&comStat);
return FALSE;
}
ClearCommError(hCommDev,&dwErrorFlag,&comStat);
EscapeCommFunction(hCommDev,CLRRTS);
return TRUE;
}
void CFbycommuDlg::OnRadiodec()
{
// TODO: Add your control notification handler code here
m_RadioDecHexVal=0;
UpdateData(FALSE);
}
void CFbycommuDlg::OnRadiohex()
{
// TODO: Add your control notification handler code here
m_RadioDecHexVal=1;
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -