串口编程问题,知道的请进!

inlinefunction 2004-01-12 10:17:08
近日在一工程中用到串口通讯,主要是用PLC提供的自己的串口命令来取得PLC中的数据,在用控件进行编写时没什么问题,但用API时CreateFile时却在第一次读写时什么也读不到,如果用控件对此端口进行过一次读写后,API就可进行读写了,相当于先激活才能用!
代码如下:
用API读写:
m_hComm = CreateFile(buf,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED|FILE_FLAG_NO_BUFFERING, NULL );

CString strOut= "@00RD0300001652*\r";
WriteFile(m_hComm,strOut,strOut.GetLength),&dwBytesWrite,&myOVLP);
strOut为读写命令
strIn.GetBufferSetLength(1024);
Sleep(500);
ReadFile(m_hComm,strIn.GetBuffer(0),1024,&dwBytesRead,&myOVLP);
GetOverlappedResult(m_hComm,&myOVLP,&dwBytesRead,FALSE);
if(dwBytesRead<(11+4*length))
return "";
}
strIn为读到的数据
上面的代码第一次运行时不能读到任何东西,但如果先运行下面的代码
后,上面的代码就可正常运行
使用控件
m_comm.SetCommPort(1);
m_comm.SetSettings("9600,e,7,2");
m_comm.SetInputLen(0);
if(!m_comm.GetPortOpen())
m_comm.SetPortOpen(TRUE);
CString strOrder = "@00RD0300001652*\r";
m_comm.SetOutput(_variant_t(strOrder));
Sleep(1000);
CString strIn;
strIn = (char*)_bstr_t(m_comm.GetInput());
...全文
22 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
chihan 2004-01-12
  • 打赏
  • 举报
回复
你上面的代码没有对串口进行设置吗,比如波特率、奇偶校验等,如果缺省值和PLC的串口的设置不一样的话当然会有问题了

18,355

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧