我做了一个控制PLC的程序,为什么用writeFile(....)输出的值无法控制PLC,
程序的代码如下:
DCB dcb;
hCommDev=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,0,NULL);//打开串口
if(hCommDev==(HANDLE)-1)
{
AfxMessageBox("串口初始化错误!",MB_OK,NULL);
return ;
}
dcb.DCBlength=sizeof(DCB);
GetCommState(hCommDev,&dcb);
dcb.BaudRate=19200;
dcb.ByteSize=8;//数据位8位
dcb.fParity=0;//无检验
dcb.StopBits=0;//停止位1位
int DoData[30];
DoData[0]=0x05;
DoData[1]=0x30;
DoData[2]=0x30;
DoData[3]=0x46;
DoData[4]=0x46;
DoData[5]=0x57;
DoData[6]=0x57;
DoData[7]=0x30;
DoData[8]=0x44;
DoData[9]=0x30;
DoData[10]=0x31;
DoData[11]=0x30;
DoData[12]=0x30;
DoData[13]=0x30;
DoData[14]=0x31;
DoData[15]=0x30;
DoData[16]=0x30;
DoData[17]=0x30;
DoData[18]=0x46;
DoData[19]=0x30;
DoData[20]=0x36; WriteFile(hCommDev,&DoData[n],21,&nWrite,NULL);
CloseHandle(hCommDev);
经过检验:校验和每错,为什么PLC会没反映呢?
程序的代码如下:
DCB dcb;
hCommDev=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,0,NULL);//打开串口
if(hCommDev==(HANDLE)-1)
{
AfxMessageBox("串口初始化错误!",MB_OK,NULL);
return ;
}
dcb.DCBlength=sizeof(DCB);
GetCommState(hCommDev,&dcb);
dcb.BaudRate=19200;
dcb.ByteSize=8;//数据位8位
dcb.fParity=0;//无检验
dcb.StopBits=0;//停止位1位
int DoData[30];
DoData[0]=0x05;
DoData[1]=0x30;
DoData[2]=0x30;
DoData[3]=0x46;
DoData[4]=0x46;
DoData[5]=0x57;
DoData[6]=0x57;
DoData[7]=0x30;
DoData[8]=0x44;
DoData[9]=0x30;
DoData[10]=0x31;
DoData[11]=0x30;
DoData[12]=0x30;
DoData[13]=0x30;
DoData[14]=0x31;
DoData[15]=0x30;
DoData[16]=0x30;
DoData[17]=0x30;
DoData[18]=0x46;
DoData[19]=0x30;
DoData[20]=0x36; WriteFile(hCommDev,&DoData[n],21,&nWrite,NULL);
CloseHandle(hCommDev);
经过检验:校验和每错,为什么PLC会没反映呢?
^^^^^^^^^^
不太明白这里的意思。
是不是有问题。
应该这样吧:
WriteFile(hCommDev,DoData,21,&nWrite,NULL);
不知道应该怎么做?请教!