074用vc实现多串口多线程工业控制_第1页
074用vc实现多串口多线程工业控制_第2页
074用vc实现多串口多线程工业控制_第3页
074用vc实现多串口多线程工业控制_第4页
074用vc实现多串口多线程工业控制_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/ Write a string to the port/voierialPort:WriteToPort(BYTE bWriteBuffer, nWriteBufferSize)assert(m != 0);nSize = sizeof(bWriteBuffer)/sizeof(BYTE); m_nWriteBufferSize = nWriteBufferSize;for(i = 0 ; i m_Ports.StartMonitoring();启动监视线程 mVal();发送第一台设备数据命令CSerialPort m_Ports;nColtAddr,/这个用来存放当前设备地址。nColt

2、s;/这个用来存放当前缓冲区收到的字节数目 HANDLE m_pThread;/外部控制线程BYTE m_RecBuff1000;/接收缓冲区float fVal20;/处理解包内容,这里可以根据实际情况进行定义。void CmVal()HAddr,LAddr,m_Xnh; nHAdd,nLAdd;nHAdd = ExchangeAscII(nColtAddr4)&0 x0f); nLAdd = ExchangeAscII(nColtAddr&0 x0f); m_Xnh = nHAddnLAdd0 x520 x44;HAddr = ExchangeAscII(m_Xnh4)&0 x0f); L

3、Addr = ExchangeAscII(m_Xnh&0 x0f);BYTE OutBuff8 =0 x40,nHAdd,nLAdd,0 x52,0 x44,HAddr,LAddr,0 x0d; m_Ports.WriteToPort(OutBuff,8); cLastColtTime = CTime:GetCurrentTime(); nColtAddr+;if(nColtAddr 19)/19 define max addr numbers nColtAddr = 0;ASCII 码的一些简单变换,进行一下简单的封装,方便调用:UCmThread(LPVOID pParam)CView *

4、pView = (CView *)pParam;while(1)CTime cNowTime = CTime:GetCurrentTime(); tNow = cNowTime.GetTime();struct _timeb timebuffer;_ftime(&timebuffer);nNowMillSecond = litm;/tLast = cLastColtTime0.GetTime();if(tNow - tLast)*1000 + (nNowMillSecond - nMillSecond0) 800)pView-mVal();发送下一台设备要数据命令或

5、者进行其他的相关处理Sleep(100);发送串口数据命令,这里要根据外部设备的制定的通讯协议来进行。这次温度表采用的是 ASCII 的形式通讯。RAM,LPARAM 类型是多态性数据(polymorphic daype),在WIN32 中为 32 位,支持多种数据类型,根据需要自动适应,这样程序就有很强的适应性。再次这里理解成为BYTE 类型(与设备通讯协议保持一致,方便解包)。每当串口接收缓冲区内有一个字符的时候,就会产生一个M_RXCHAR 消息,触发munication 函数,下面可以根据的需要进行解包处理了;LONGmunication(RAM ch, LPARort)if(port

6、 = 1)m_RecBuffnColts += (BYTE)(char *)(ch); nColts+;if(nColts = 24)/这里根据通讯协议规定的发送定制要数据命令就会上传 24个字节的数据报文内容。这里可以根据不同外部设备进行不同的设置DataProsTemp(m_RecBuff);/处理解包nColts = 0;/缓冲区指针清 0,准备接收下一台设备数据 ResetBuffVal();/清空缓冲区内容mVal(); /发送下一台设备内容LONG Cmunication(RAM ch, LPARort)进行数据处理,BYTE CView:ExchangeAscII(BYTE bI

7、nput)BYTE bRef = 0;if(bInput 9)bRef = bInput+0 x37; elsebRef = bInput+0 x30; return bRef;BYTE CView:ExchangeAscIItoNormal(BYTE bInput)BYTE bRef = 0;if(bInput 0 x39) bRef = bInput-0 x37;elsebRef = bInput-0 x30; return bRef;数据解包处理,这里就必须根据外部设备定义的通讯协议来处理了。void CMy11View:DataProsTemp(BYTE m_Inbuff)nTempA

8、ddr = nColtAddr - 1; if(nTempAddr 4)&0 x0f); nLAdd = ExchangeAscIempAddr&0 x0f);if(m_Inbuff0 = 0 x40)if(m_Inbuff1 = nHAdd & m_Inbuff2 = nLAdd)if(m_Inbuff3 = 0 x52 & m_Inbuff4 = 0 x44)nzTemp5; float fTemp;nzTemp0 = m_Inbuff7; nzTemp1 = m_Inbuff8; nzTemp2 = m_Inbuff9; nzTemp3 = m_Inbuff10; for(i = 0 ; i 0 x39) nzTempi -= 0 x37;elsenzTempi -= 0 x30;fTemp=float(nzTemp1+(nzTemp04)+(nzTemp38)+(nzTemp2m_Ports0.InitPort(this,2,9600,N,8,1,EV_RXCHAR|EV_RXFLAG,1024)this-m_Ports0.StartMonitoring(); BufferVal(0);/Diandu Deviceif(this-m_Ports1.InitPort(this,4,1200,E,8,1,EV_RXCHAR|EV_RXFLAG,1024

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论