各位高手帮忙看一下我这个WindowAPI串口程序那里不对,写数据不进去,我是VC新手,不胜感激
侠帮忙看一下我这个程序怎么写数据到PLC怎么没反应啊 不胜感激
HANDLE hCommTest = INVALID_HANDLE_VALUE;
//Call CreateFile to open up the comms port
void CShiyan1023Dlg::OnOpenserialportBtn()
{
if(INVALID_HANDLE_VALUE==hCommTest)
{
hCommTest = CreateFile(_T("\\\\.\\COM5"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
COMMTIMEOUTS couttime;
couttime.ReadIntervalTimeout = 0xFFFFFFFF;
couttime.ReadTotalTimeoutConstant = 50;
couttime.ReadTotalTimeoutMultiplier = 5000;
couttime.WriteTotalTimeoutConstant = 500;
couttime.WriteTotalTimeoutMultiplier = 5000;
SetCommTimeouts(hCommTest,&couttime);
SetupComm(hCommTest,1024,1024);
DCB dcb;
GetCommState(hCommTest,&dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.fBinary = 0;
dcb.Parity = EVENPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fParity = TRUE;
/*
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fDsrSensitivity = FALSE;*/
SetCommState(hCommTest,&dcb);
PurgeComm(hCommTest,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
/* COMSTAT sstat;
COMMCONFIG config;
COMMPROP commprop;
OVERLAPPED overlapped;*/
}else{
AfxMessageBox(_T("comms port already openned"));
}
}
//close comms handle
void CShiyan1023Dlg::OnCloseserislportBtn()
{
if (IsOpen()){
CloseHandle(hCommTest);
hCommTest = INVALID_HANDLE_VALUE;}
else{
hCommTest = INVALID_HANDLE_VALUE;
AfxMessageBox(_T("comms port already closed"));
}
}
//run plc 运行永宏PLC
void CShiyan1023Dlg::OnRunplcTestBtn()
{
if(IsOpen()){
char lBuf[100] = {0};
lBuf[0] = 0x02;
lBuf[1] = 0x30;
lBuf[2] = 0x31;
lBuf[3] = 0x34;
lBuf[4] = 0x31;
lBuf[5] = 0x31;
lBuf[6] = 0x46;
lBuf[7] = 0x39;
lBuf[8] = 0x03;
lBuf[9] = '\0';
DWORD RBytes = 0;
WriteFile(hCommTest,lBuf,9,&RBytes,NULL);
FlushFileBuffers(hCommTest);
}else{
AfxMessageBox(_T("Pls Open SerialPort!!!"));
}
}
//terminate plc 终止运行永宏PLC
void CShiyan1023Dlg::OnStopplcTestBtn()
{
if(IsOpen()){
char lBuf[100] = {0};
lBuf[0] = 0x02;
lBuf[1] = 0x30;
lBuf[2] = 0x31;
lBuf[3] = 0x34;
lBuf[4] = 0x31;
lBuf[5] = 0x30;
lBuf[6] = 0x46;
lBuf[7] = 0x38;
lBuf[8] = 0x03;
lBuf[9] = '\0'; DWORD RBytes = 0;
//for(int i=0;i<9;i++)
//TransmitCommChar(hCommTest,lBuf[i]);
WriteFile(hCommTest,lBuf,10,&RBytes,NULL);
FlushFileBuffers(hCommTest);
CString test;
test.Format("Written %d chars to comms port",RBytes);
AfxMessageBox(test);
}else{
AfxMessageBox(_T("Pls Open comms port!!!"));
}
}
//get the state of comms port
BOOL CShiyan1023Dlg::IsOpen()
{
return INVALID_HANDLE_VALUE!=hCommTest;
}
//get the handle
HANDLE CShiyan1023Dlg::GetCommHandle(){
return hCommTest;
} void CShiyan1023Dlg::Attach(HANDLE hComm)
{
OnCloseserislportBtn();
hCommTest = hComm;
} HANDLE CShiyan1023Dlg::Detach()
{
HANDLE hRval = hCommTest;
hCommTest = INVALID_HANDLE_VALUE;
return hRval;
}