我做了一个控制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会没反映呢?

解决方案 »

  1.   

    WriteFile(hCommDev,&DoData[n],21,&nWrite,NULL);
                       ^^^^^^^^^^
    不太明白这里的意思。
    是不是有问题。
    应该这样吧:
    WriteFile(hCommDev,DoData,21,&nWrite,NULL);
      

  2.   

    SetCommState( hCommDev,&dcb)  ???
      

  3.   

    int 类型占4个字节,你好象应该用单字节的数据类型
      

  4.   

    可能这种方法不大好,能不能用空件做?我用VC加了一个空件到Project里,但是
    不知道应该怎么做?请教!