扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:戚高 来源:VCHELP 2007年10月16日
关键字:
LONG CMy11View::OnCommunication(WPARAM ch, LPARAM port) { if(port == 1) { m_RecBuff[nColts] += (BYTE)(char *)(ch); nColts++; if(nColts == 24)//这里根据通讯协议规定的发送定制要数据命令就会上传24个字节的数据报文内容。这里可以根据不同外部设备进行不同的设置 { DataProcessTemp(m_RecBuff);//处理解包 nColts = 0;//缓冲区指针清0,准备接收下一台设备数据 ResetBuffVal();//清空缓冲区内容 SetCommVal(); //发送下一台设备内容 } } return 0; } |
void CMy11View::DataProcessTemp(BYTE m_Inbuff[]) { int nTempAddr = nColtAddr - 1; if(nTempAddr < 0) nTempAddr = 19; int nHAdd,nLAdd; nHAdd = ExchangeAscII((nTempAddr>>4)&0x0f); nLAdd = ExchangeAscII(nTempAddr&0x0f); if(m_Inbuff[0] == 0x40) { if(m_Inbuff[1] == nHAdd && m_Inbuff[2] == nLAdd) { if(m_Inbuff[3] == 0x52 && m_Inbuff[4] == 0x44) { int nzTemp[5]; float fTemp; nzTemp[0] = m_Inbuff[7]; nzTemp[1] = m_Inbuff[8]; nzTemp[2] = m_Inbuff[9]; nzTemp[3] = m_Inbuff[10]; for(int i = 0 ; i < 4; i ++) { if(nzTemp[i] > 0x39) nzTemp[i] -= 0x37; else nzTemp[i] -= 0x30; } fTemp=float(nzTemp[1]+(nzTemp[0]<<4)+(nzTemp[3]<<8)+(nzTemp[2]<<12))/10; fVal[nTempAddr] = fTemp; RedrawWindow(); } } } } void CMy11View::ResetBuffVal() { for(int i=0;i<1000;i++) m_RecBuff[i] = 0; } |
CSerialPort m_Ports[20]; BYTE m_RecBuff[20][1000]; BYTE m_SendBuff[5][1000]; int nColts[20]; int nZBKType[24]; int nWrongCount[20][20]; int nColtAddr[20]; HANDLE m_pThread; //Protect Device if(this->m_Ports[0].InitPort(this,2,9600,'N',8,1,EV_RXCHAR|EV_RXFLAG,1024)) { this->m_Ports[0].StartMonitoring(); SetComBufferVal(0); } //Diandu Device if(this->m_Ports[1].InitPort(this,4,1200,'E',8,1,EV_RXCHAR|EV_RXFLAG,1024)) { this->m_Ports[1].StartMonitoring(); SetComBufferVal(1); } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者