盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

用VC完成多串口多线程工业控制

时间:2025/3/4作者:未知来源:盾怪网教程人气:

[摘要]EV_RXFLAG,1024))      this->m_Ports.StartMonitoring();启动监视线程   SetCommVal();发送第一台设备数据命令      下面是...
EV_RXFLAG,1024))
  {
  this->m_Ports.StartMonitoring();启动监视线程
  SetCommVal();发送第一台设备数据命令
  }

  下面是启动外部控制线程

  unsigned int nDummy;
  m_pThread=(HANDLE) _beginthreadex(NULL,0,CommThread,this,CREATE_SUSPENDED,&nDummy);//开辟外部控制线程
  ResumeThread(m_pThread); 运行线程

  外部控制线程控制当前设备发送要数据命令和收到数据报文是否超时

  UINT C××××View::CommThread(LPVOID pParam)
  {
  C××××View *pView = (C××××View *)pParam;
  while(1)
  {
  CTime cNowTime = CTime::GetCurrentTime();
  tNow = cNowTime.GetTime();
  struct _timeb timebuffer;
  _ftime(&timebuffer);
  int nNowMillSecond = timebuffer.millitm;
  ///
  tLast = cLastColtTime[0].GetTime();
  if((tNow - tLast)*1000 + (nNowMillSecond - nMillSecond[0]) > 800)
    pView->SetCommVal();发送下一台设备要数据命令或者进行其他的相关处理
  Sleep(100);
  }
  }

  发送串口数据命令,这里要根据外部设备的制定的通讯协议来进行。这次温度表采用的是ASCII的形式通讯。

  void C××××View::SetCommVal()
  {
  int HAddr,LAddr,m_Xnh;
  int nHAdd,nLAdd;
  nHAdd = ExchangeAscII((nColtAddr>>4)&0x0f);
  nLAdd = ExchangeAscII(nColtAddr&0x0f);
  m_Xnh = nHAdd^nLAdd^0x52^0x44;
  HAddr = ExchangeAscII((m_Xnh>>4)&0x0f);
  LAddr = ExchangeAscII(m_Xnh&0x0f);
  BYTE OutBuff[8] = {0x40,nHAdd,nLAdd,0x52,0x44,HAddr,LAddr,0x0d};
  m_Ports.WriteToPort(OutBuff,8);
  cLastColtTime = CTime::GetCurrentTime();
  nColtAddr++;
  if(nColtAddr > 19)//19 define max addr numbers
  nColtAddr = 0;
  }

[1] [2]  下一页



关键词:用VC完成多串口多线程工业控制




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版