通信网络-基于多线程技术的多串口通信.pdf
《通信网络-基于多线程技术的多串口通信.pdf》由会员分享,可在线阅读,更多相关《通信网络-基于多线程技术的多串口通信.pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于多线程技术的多串口通信基于多线程技术的多串口通信 王苓1,苏维均2(1北京工商大学信息工程学院,北京 100037;2北京工商大学信息工程学院,北京 100037)摘要摘要:介绍了一个多串口通信模块,该模块采用 VC+6.0 并结合多线程技术编写,用来处理从远程终端站上传来数据。同时良好的线程同步解决方法也保证了模块程序能够运行更可靠,数据的实时性能更好。关键词关键词:串行通信;多线程;线程同步;API 接口 Multiport Communication Based on Multithread Technology WANG Ling,SU Wei-jun(Beijing Techno
2、logy&Business University,Beijing,100037,China)Abstract:Presents a multiport communication module,which can deal with data from RTU by Multiport Serial Boards,combine with multithread technology.The module developed with VC+6.0.In order to resolve the real-time problem in data acquisition and reliabi
3、lity in program,the synchronization of these threads among the serial port communication have been described in detail.Keywords:serial communication;Multithread;synchronization of threads;API interface 1 引言引言 在目前的工控系统中,工控仪器如何把可靠数据成功传送给计算机终端已经是一个至关重要的环节,而串行通信以其方便易行,信道成本比较低廉的优势,常常作为计算机与外部串行设备之间的首选数据传输
4、通道,又因为许多设备和计算机都可以通过串口对外设进行控制、检测,串口通讯日益成为计算机和外设进行通讯、获取由外设采集到的监测数据的一个非常重要的手段。本文是在搭建多段长输石油管道泄漏监测系统时总结的有关多串口通信技术方面的讨论。这是 作者简介:作者简介:王苓(1979-10),女,天津人,在校硕士研究生,主要研究方向控制理论与控制工程;苏维均(1962),男,北京人,副教授,主要从事检测技术与智能控制方向的研究 一套实时数据采集监控系统,其中的实时数据与各个站点的现场情况以及管道石油的运行状况密切相关。该系统把远程终端站(RTU)采集到的数据按照自定义的串口通讯协议通过 RS-232 串口线传
5、到中心控制站(MTU)。当管线的压力数据产生变化时,中心控制站的监测系统就会根据这些原始数据作出分析和判断。由于本程序要对串行端口进行实时监控,这就要求它是一个后台程序,在监控的同时可以在前台进行其他一些与之无关的操作。所以在这里创建几个辅助线程就可以完成此任务。它是一个没有消息循环,执行后台任务的好方式。当然,使用 ActiveX 控件也能完成此通信任务,而且程序实现也非常简单,结构十分清晰。但是此法有一个很大的缺点就是欠灵活。比如,ActiveX 控件对二进制数据的支持不是很好,遇到 0X00 时会停止发送数据。而使用 API 通信函数时这个问题得到较好的解决,该函数用起来非常灵活,但是处
6、理过程也相对较繁琐。综合以上特点本文采用了多线程技术来完成这一功能。Windows 是抢先式多任务的操作系统,启动了一个应用程序就等于启动了一个进程。一个进程通常拥有一个线程,在系统资源管理中,每一个线程被分配一定的时间片3。采用多线程的设计方法可以使程序拥有多个线程,这样程序就能同时处理更多的任务。当使用多个串行口进行通讯时,每个线程处理一个串行口的通信任务,实时监视串行口的事件并做数据的预处理。然后利用 Windows 的消息分发机制,将串行口事件发送到主窗口,由主窗口的消息响应函数进行数据的综合处理。下面介绍的程序主要完成了含多串口的上位机监控程序所涉及到的无阻塞通信后台运行、数据的实时
7、接收、处理和显示等功能。2 设置站点属性设置站点属性 2.1 设定各站点处理数据的参数设定各站点处理数据的参数 虽然之前准备了很多串口,但未必都是作为数据通信之用,所以要求对每个站点占用的串口,采用的通信方式,以及下位机采集数据需要用到的参数进行设置。如图 1。2.2 配置串口并确定其可用配置串口并确定其可用 CommConfigDialog 是弹出系统内置串口设置对话框的 API,我们利用其在设备管理器中设置串口参数对话框。使用此 API 时不用先打开端口,它并不针对一个已打开的端口,而仅仅是把 DCB 的内容填写到对话框中,当按确定后把输入的结果存回到 DCB 数据结构中。本文用到该函数,
8、除了要完成以上的功能外,还增加了检验该串口是图 1 站点通信属性设置否存在,是否被占用的功能。如图 2。具体实现代码如下:void CSerialComm:CommConfig(CString strPort)HANDLE h_CommDev;/2005-5-18 h_CommDev=CreateFile(sCommName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);if(h_CommDev!=(HANDLE)-1)DWORD dwSize;COMMCONFIG sCommConfig;dwSize=sizeof(COMMC
9、ONFIG);GetCommConfig(h_CommDev,&sCommConfig,&dwSize);sCommConfig.dcb.BaudRate=lpApp-GetProfileInt(sCommName,BaudRate,9600);if(CommConfigDialog(sCommName,m_hWnd,&sCommConfig)=1)SetCommConfig(h_CommDev,&sCommConfig,dwSize);lpApp-WriteProfileInt(sCommName,BaudRate,sCommConfig.dcb.BaudRate);CloseHandle(
10、h_CommDev);else MessageBox(串口被占用或不存在!,提示信息,MB_OK);3 通信连接通信连接 在程序启动之初,虽然作了六个备用的辅助线程,每个线程监测一个站点(串口),但是为了节省系统资源,并没有把所有线程全部打开,而是由现场操作人员选择要监测的站点。下面仔细介绍从建立通信链路到对各种数据拆包、处理的全过程。3.1 握手握手(1)在系统运行之初开启通信类的定时器,这样方便在线程建立之前监测下位机回复的握手信号是否正确。以创建文件的形式打开文件,采用异步通信的方式,串口可读写,填充 DCB 数据控制块结构,设置 COMMTIMEOUTS 超时。(2)向下位机发送握手信
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 网络 基于 多线程 技术 串口
限制150内