正 文

用VC实现多串口多线程工业控制


www.7dspace.com  更新日期:2005-12-10 2:45:38  七度空间


  定义SERIALPORT类对象,创建线程进行通讯。

  
CSerialPort m_Ports;
int nColtAddr,//这个用来存放当前采集设备地址。
nColts;//这个用来存放当前缓冲区收到的字节数目
HANDLE m_pThread;//外部控制线程
BYTE m_RecBuff[1000];//接收缓冲区
float fVal[20];//处理解包内容,这里可以根据实际情况进行定义。

  启动串口监视线程和外部控制线程

nColtAddr = 0 ;
nColts = 0;
if(m_Ports.InitPort(this,1,4800,'N',8,1,EV_RXCHAR|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;
}

  ASCII码的一些简单变换,我们进行一下简单的封装,方便调用:

BYTE C××××View::ExchangeAscII(BYTE bInput)
{
 BYTE bRef = 0;
 if(bInput > 9)
  bRef = bInput+0x37;
 else
  bRef = bInput+0x30;
 return bRef;
}
BYTE C××××View::ExchangeAscIItoNormal(BYTE bInput)
{
 BYTE bRef = 0;
 if(bInput > 0x39)
  bRef = bInput-0x37;
 else
  bRef = bInput-0x30;
 return bRef;
}

3页,页码:[1] [2] [3] 

上一篇:C++箴言:如何访问模板化基类中的名字
下一篇:险恶网络环境下如何保护密码
作者:戚高  来源:VCHELP ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐