控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

使用C++如何实现串口通信

作者:不详 出处:不详 2010年08月24日 阅读:

上位机和下位机通信的问题,使用的协议rs485协议.

  接在电脑上的rs232口,使用了232和485的转换器,发送相应的数据格式,然后上位机接受相应的格式。

  原代码如下:


 // TODO: Add your control notification handler code here
  char buff[200];
  CString str;
  GetDlgItem(IDC_EDI_BUF) -> GetWindowText(str);
  sprintf(buff,"%s",(LPCSTR)str);
  //MessageBox(buff);
  //然后打开串口,开始通信
  HANDLE hCom; //createFile函数返回的句柄
  //打开的是端口一
  hCom = CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,
  0, NULL,OPEN_EXISTING, 0, NULL);
  if(hCom == NULL)
  {
  MessageBox("打开端口一时出现了错误");
  }
  //设置读写缓冲区的缓冲大小
  //改变端口的设备控制块
  /*DCB dcb;
  GetCommState(hCom,&dcb);
  dcb.BaudRate = CBR_9600;
  dcb.ByteSize=8;//数据位8位
  dcb.Parity = NOPARITY; //有校验
  dcb.StopBits=ONESTOPBIT; //一个停止位
  if(false==SetCommState(hCom,&dcb))
  {
  MessageBox("配置端口时出现了错误");
  }*/
  DCB dcb;
  GetCommState(hCom,&dcb);
  dcb.BaudRate = CBR_9600;
  dcb.ByteSize = 8;
  dcb.Parity = NOPARITY;
  dcb.StopBits = ONESTOPBIT;
  dcb.fBinary = TRUE;
  dcb.fParity = TRUE;
  dcb.fOutxDsrFlow = false;
  dcb.fDtrControl = DTR_CONTROL_DISABLE;
  dcb.fOutxCtsFlow = false;
  //#ifdef LPR_DOHERELARGE
  // dcb.fRtsControl = RTS_CONTROL_ENABLE;
  //#else
  dcb.fRtsControl = RTS_CONTROL_DISABLE;
  //#endif
  /* dcb.fInX = false;
  dcb.fOutX = false;
  dcb.XonChar = ASCII_XON;
  dcb.XoffChar = ASCII_XOFF;
  dcb.XonLim = 100;
  dcb.XoffLim = 100;*/
  if(false==SetCommState(hCom,&dcb))
  {
  MessageBox("配置端口时出现了错误");
  }
  //设置读写操作,将缓冲里面的数据写入到串口里面
  BOOL isWrite = false;
  DWORD length = 100;
  COMSTAT ComStat;
  DWORD dwErrorFlags;
  ClearCommError(hCom,&dwErrorFlags,&ComStat);
  isWrite = WriteFile(hCom,buff,length,&length,NULL);
  if(isWrite == false)
  {
  MessageBox("写入数据时出现了错误");
  }
  //写完数据然后从缓冲里面读取数据
  //过一段时间才读取缓冲里面的数据
  ::Sleep(100);
  //读取缓冲里面的数据
  BOOL isRead = false;
  char readbuf[100];
  DWORD bReadStatus;
  memset(readbuf,0,sizeof(readbuf));
  isRead = ::ReadFile(hCom,readbuf,100,&bReadStatus,NULL);
  //MessageBox(readbuf);
  GetDlgItem(IDC_RECV_BUFF) -> SetWindowText(readbuf);
  CloseHandle(hCom);

  这样就完成了一次通信。还有从下位机发送来的报文解析部分没有给出。那部分是纯的软件部分。和机器无关。

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统