描述:
            三菱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:
我晕到,你这种程序写法,会死人的

