描述:
三菱PLC—2N,想让Y0001灯亮下,现在PLC有反应,BUFFER返回值为 06H,15H,15H,15H,15H
下面是我的程序,帮忙看看怎么不对
void CPLC_Read_String_ProcessDlg::OnOK()
{
char readbuf[256] = {""};
memset(readbuf, 0, sizeof(readbuf));
char szCmd[100];
memset(szCmd, 0, 100);
char szTailer[10];
memset(szTailer, 0, sizeof(szTailer));
unsigned char result = 0;
int len, i;
//WRITE FORMAT:ENQ(1), STATIONNO.(2), PCNO.(2), COMMAND(2), WAIT TIME(1), HEAD DEVICE(5),
//NUMBERS OF DEVIC(2), DATA
//ENQ 05H
szCmd[0] = 0x05;
//STATIONNO. 00
szCmd[1] = 0x30;
szCmd[2] = 0x30;
//PCNO. FF
szCmd[3] = 0x46;
szCmd[4] = 0x46;
//BW BW
szCmd[5] = 0x42;
szCmd[6] = 0x57;
//WAIT TIME 0
szCmd[7] = 0x30;
//HEAD DEVICE y0001
szCmd[8] = 0x59;
szCmd[9] = 0x30;
szCmd[10] = 0x30;
szCmd[11] = 0x30;
szCmd[12] = 0x31;
//NUMBERS OF DEVICE 1
szCmd[13] = 0x30;
szCmd[14] = 0x31;
//data on:1 off:0
szCmd[15] = 0x31;
//CHECK
result = 0;
len = 0;
len = strlen(szCmd);
for(i=1; i<=len; i++)
{
result+=szCmd[i];
}
sprintf(szTailer, "%02X", result);
strcat(szCmd, szTailer);
//STRING END
szCmd[len + 2] = 0x0;
DCB m_dcb;
memset(&m_dcb, 0, sizeof(DCB));
m_dcb.DCBlength = sizeof(DCB);
m_dcb.fBinary = 1;
m_dcb.fParity = 1;
m_dcb.BaudRate = CBR_9600;
m_dcb.Parity = EVENPARITY;
m_dcb.ByteSize = 7;
m_dcb.StopBits = ONESTOPBIT;
HANDLE m_hComm;
m_hComm = CreateFile(_T("COM1"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0); //创建 m_hcomm:文件的句柄
if(m_hComm == INVALID_HANDLE_VALUE)
{
return ;
}
BOOL bRe = SetupComm(m_hComm,1024,1024);
if(!bRe)
{
CloseHandle(m_hComm);
return ;
}
bRe = SetCommState(m_hComm,&m_dcb);
if(!bRe)
{
CloseHandle(m_hComm);
return ;
}
SetCommMask( m_hComm, EV_RXCHAR|EV_BREAK );
COMMTIMEOUTS timeout;
if(m_dcb.BaudRate>=9600)
{
timeout.ReadIntervalTimeout = 10;
timeout.ReadTotalTimeoutConstant = 50;
timeout.ReadTotalTimeoutMultiplier = 2;
timeout.WriteTotalTimeoutConstant = 50;
timeout.WriteTotalTimeoutMultiplier = 2;
}
else
{
timeout.ReadIntervalTimeout = 30;
timeout.ReadTotalTimeoutConstant = 200;
timeout.ReadTotalTimeoutMultiplier = 20;
timeout.WriteTotalTimeoutConstant = 200;
timeout.WriteTotalTimeoutMultiplier = 20;
}
bRe = SetCommTimeouts(m_hComm, &timeout);
if(!bRe)
{
CloseHandle(m_hComm);
return ;
}
PurgeComm( m_hComm, PURGE_TXABORT | PURGE_TXCLEAR);
PurgeComm(m_hComm, PURGE_TXCLEAR | PURGE_RXCLEAR);
DWORD dwWriten;
//write
bRe = WriteFile(m_hComm, szCmd, strlen(szCmd), &dwWriten, NULL);
ASSERT(bRe);
TRACE(_T("have writened %d,cmd:%s\n"), dwWriten, szCmd);
Sleep(10);
DWORD dwRead;
char buffer[1024];
memset(buffer, 0, 1024);
bRe=ReadFile(m_hComm,buffer,1024,&dwRead,NULL);
// m_str=buffer;
UpdateData(FALSE);
ASSERT(bRe);
TRACE(_T("buffer=%s,dwRead=%d\n"), buffer, dwRead);
CloseHandle(m_hComm);
}
解决方案1:
我晕到,你这种程序写法,会死人的