我做了一个控制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会没反映呢?
解决方案 »
- 关于VC基础的一个问题
- 帮忙
- ListCtrl怎么没有了滚动条?
- 如果我用SuspendThread将一个线程挂起,那么这时我要中止这个线程应该怎样做啊?
- 求助:怎样隐藏在CScrollView中的ScrollBar,就像ACDSee一样?
- 变量问题
- 请问如果以很高的速度settimer()和killtimer(),系统性能会不会大受影响
- CTreeView 包含CTreeCtrl,那他自身包含什么CTreeCtrl没有的功能
- 做图的一个小技巧,还可以加分!
- dll c语言编写
- 各位老大,关于一个Edit Box问题,我定义的是一个int类型,但发现Box中内容不能为空?
- VC6如何更改一个做好的工程名字
unsigned char DoData[30];&DoData[n]中的n,是不是笔误?
可能这种方法不大好,能不能用空件做?我用VC加了一个空件到Project里,但是
不知道应该怎么做?请教!
你应该这样写WriteFile(hCommDev,&DoData[n],21*sizeof(int),&nWrite,NULL);
你用的是API来实现串口通信(就是控制PLC),你也可以用MSCOMM控件,直接发字符就可以了,就是你与PLC的通信协议,比如:m_Com.SetOutput(COleVariant("你要发送的数据"))用控件操作起来比较方便和简单!