多串口通信技术设计管理论文_第1页
多串口通信技术设计管理论文_第2页
多串口通信技术设计管理论文_第3页
多串口通信技术设计管理论文_第4页
多串口通信技术设计管理论文_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、编号:时间:2021年X月X日书山有路勤为径,学海无涯苦作舟 页码:第5页共1。页多串口通信技术设计管理论文摘要:通过多用口通信技术在金刚石合成控制系统中的应用,讨论了 32位Windows操作系统下,VC多串口通信技术的设计与实现方法,并运用面向 对象方法和多线程技术设计了一个比较完善的串口通信类。阐述了用VC开发上 位机与PLC之间的串口通信程序设计方法和实现技术。关键词:串口通信;面向对象方法;多线程;PLC1引言传统的金刚石合成机控制系统是由一个P L C和一个可显示终端构成。 这种传统的控制系统一般具有如下缺点:(1 )系统所有的工作都由P L C完成,其控制精度较差,致使合成的金

2、刚石质量较差;(2 )显示终端的平面尺寸过小,这一方面使得操作人员观察系统的状态 很不方便,另一方面 也常常会引起误操作;(3)金刚石合成工艺复杂,需控制的参数很多,但原控制系统不能对参 数进行保存,这样在根据不同产品和工艺要求对部分参数进行调整时,每次都必 须重新设置所有的参数,操作非常麻烦;(4 )界面不友好;(5)不能通过控制系统自动考核操作人员的工作质量。为了提高控制精度、方便操作,开发新的控制系统迫在眉睫。笔者针 对以上问题,将I PC与PLC有机结合在一起,开发了一套新的控制系统。通 过该系统可在上位机(I PC)和PLC之间通过RS 2 32与RS 4 85 进行大量串口通信。2

3、 VC串口通信分析在3 2位W i n d o w s系统下使用VC开发串口通信程序通常有如 下4种方法:(1 )使用M i c r o s o f t公司提供的名为MS C OMM的通信 控件;(2 )直接使用W i n d o w s应用程序接口(API);(3)自行设计一个串口通信类;(4 )通过开发一个A c t i v e X控件来实现串口通信功能。在上述几种方法中,实际上还是使用W i nd ows AP I函数,然 后把用口通信的细节给封装起来,同时提供给用户几个简单的接口函数。上述儿 种方法各有优缺点,但在实际情况下,大多数编程人员喜欢使用A P I函数自行 设计串口通信类。用

4、W i n d。w s A P I函数进行串口通信的编程流程如图1所示。 其中打开串口是确定用口号与串口的打开方式;初始化串口用于配置通讯的波特 率、每字节位数、校验位、停止位和读写超时等;读写用口用于向串口进行发送 数据和从串口接收数据;关闭串口用于将串口关闭并释放串口资源(W indo w s系统下串口是系统资源)。由于绝大多数控制系统中串口通信是比较费时的,而且监控系统还要 进行数据处理和显示等,所以一般采用多线程技术,并用A f x B e g i n T h read ()函数创建辅助线程来管理串口通信,这样,主进程就能在进行串口 读写的同时,处理数据并完成用户指令的响应,但是设计时

5、一定要处理好数据的 共享问题。串口读写既可以选择同步、异步方式,也可以选择查询、定时读写和 事件驱动方式。由于同步方式容易造成线程阻塞,所以一般采用异步方式;而查 询方式要占用大量的CPU时间,所以一般采用定时读写或者事件驱动方式,事 件驱动方式相关文献较多,故此重点讨论定时读写方式。定时读写方式就是上位 机向下位机发送固定格式的数据,在下位机收到后向上位机返回状态信息数据。 由于数据的传输需要时间,所有上位机发送数据后就调用_ s 1 e e p ()函数 进行休眠,休眠的时间可根据需要进行不同的设置。这样,可以节省C PU时间, 以使系统能够很好地进行监控工作和处理其它事务。3 V C串口

6、通信的设计与实现笔者在W i n d o w s系统下,采用面向对象的方法和多线程技术, 并使用V i s u a 1 C 6. 0作为编程工具开发了一个通用串口通信类CS e r ialPort,该CSerialPort类封装了串口通信的基本数据和方 法,下面给出C S e r i a 1 P o r t类的简单介绍。CSerialPort类头文件中的主要成员变量和成员函数如下: ClassCSerialPort(private:FI A N D E L m h P o r t ;D C B m Deb;第3页共10页编号:时间:2021年X月X日书山有路勤为径,学海无涯苦作舟 页码:第5页

7、共1。页COMMT I MEOUTSm T i m e 0 u t s :DWORDm Error:I P o r t ();/构造函数1 CSerialPort。;/析构函数BOOLcharr t ()函数实现初始化串口0,0,8,e r = 0z=0,0,0);D C BG eDCB();/获得DC B参数/SetD C B()函数实现设置D C B参数BOOLSe t D C B(第7页共10页audRate = 96007 a r i t y = 0,UNITByteSize = 8,UINTStopBi t s = 1 );/GetTimeOuts ()函数获得超时参数COMMT I

8、 MEOUTSG e t T i m e 0 u t s ();/SetTimeOuts ()函数设置超时参数BOOLS e t T i m e 0 u t s(UINTRe a dMu 1 t i p 1 i e r = 0,UINTReadCons t ant = O,U I N T W r iteM u I t i p I i e r = I0,U I N T W r iteConstant = l 0 00);/ / W r i t ePor t ()函数实现写串口操作v o i d W r iteP o r t(HANDLEpor t,CSt r i ng);C S t r i n

9、g R e a d P o r t(HANDLEpo r t);/ /读申 口操作BOOLClosePort(); / / 关闭串 口);下面对该类的重要函数作以说明:(1 )在构造函数C S e r i a 1 P o r t ()中已对该类的数据成员 进行了初始化操作。(2 )初始化串口函数Ini t P o r t ()函数用于完成串口的初 始化工作,包括打开串口、设置DC B参数、设置通信的超时时间等。打开串口使用C r e a t e F i 1 e ()函数,其中I n i t P o r t ()函数中的第一个参数为要打开的串口,通常将该参数赋给C r e a t e F i 1

10、 e ()函数中的第一个参数:设置DC B参数应调用该类中的S e t DCB O函数,并将I n i t P o r t ()函数中的第2至第5参数赋给S e t DC B ()函数;设置通信的超时时间应调用该类中的S etTimeOuts () 函数,并将I n i t P o r t ()函数中的第6至第9参数赋给S e t T i me 0 u t s ()函数。另外,该串口是系统资源,应该根据不同要求对其安全属性 进行设置。(3 ) S e t D C B ()函数用于设置DCB参数,包括传输的波特 率、是否进行奇偶校验、每字节长度以及停止位等。(4)SetTimeOuts ()函数

11、用于设定访问的超时值,根 据设置的值可以计算出总的超时间隔。前面两个参数用来设置读操作总的超时值, 后面两个参数用来设置写操作总的超时值。(5)Wri tePort ()函数用来完成向串口写数据。由于该 系统需要对多个串口进行通信,所以首先应把用口号作为参数传递给该函数:接 着该函数把按参数传递过来的、要发送的数据进行编码(也就是加入校验,这样 能减少误码率),然后再调用W i n d o w s A P I函数W r i t e F i 1 e O 并把数据发送到串口。(6 ) R e a d P o r t ()函数用来完成从串口读数据,由于有多 个串口,所以应把串口作为参数传递进来,然后

12、调用A P I函数R e a d F i 1 编号:时间:2021年X月X日书山有路勤为径,学海无涯苦作舟 页码:第9页共10页e (),并把下位机发送到串口,数据读出来放到缓存里面,接着对数据进行处 理以将其变换成字符串(C S t r i n g)类型并返回。(7) Ge t DCB ()函数主要用于获得串口的当前配置,可通过 调用A P I函数G etCommState()来实现,然后再进行相应的处理。(8)GetTimeOuts ()函数用于获得访问超时值。(9)ClosePort ()函数可用来关闭串口。因为在W i n d。w s系统中串口是系统资源,因而在不用时,应将其释放掉,以

13、便于其它进 程对该资源的使用。4基于申口通信的金刚石合成控制金刚石合成控制系统采用主从式控制方式,上位机为微机、下位机为 P L C。上位机的主要功能是对系统进行实时监控,下位机的主要功能是对系统 进行实时控制。上位机采用W i n d o w s 9 8操作系统,其监控程序可用VC 开发,上、下位机之间通过RS 2 3 2与RS 4 8 5串口进行通信,它们之 间采用的通信波特率为9 6 0 0 bps,无奇偶校验,每字节8位,并有I位停 止位。上、下位机之间传送的数据格式可自己定义。由于传输数据时可能会引起 错误,所以加入了校验算法。该系统通过上位机向下位机发送数据,下位机收到 后就把当前

14、系统的状态参数返回给上位机。由于该系统中所控制的参数具有迟滞 性,所以应采用定时发送数据的方法来采集现场状态信息。上位机编程时,可用VC6. 0生成一个对话框类型的程序框架,然 后将自己编写的CS e r i a 1 P。r t类加入到该工程中,并在主界面类 C Crystal 中添加一个C S e r i a 1 P o r t类的成员变量s e r ia 1 o当监控系统开始工作时,可用AfxBeginThread 函数创建辅助线程来管理串口通信,当调用C S e r i a 1 P o r t类中的W rite Port 函数向串口发送数据后,可调用_s I e e p 函数使辅助线程

15、休眠一段时间,以便使PLC有充分的时间返回数据;接着再调用CS e r i a1 P o r t类中的R e a d P o r t ()函数并从串口读数据,然后再调用_ s1 e e p ()函数使辅助线程再休眠一定的时间。这样设计后,当进行串口通信 时,主线程就能继续完成监控功能和处理其他事务。辅助线程函数的主要代码如 下:UINTSerialPro (vo i d*pa ram)(Ccrystal*mdlg=(Ccrystal*) paramCSt ringstr;i n t f 1 a g = 1 ;/如果初始化串口失败返回i f ( ! Ini t P o r t ("co

16、m2")AfxMessageBox ("打开半口 2 失败");r e t u r n 0 ;)/ /循环读写串口,直到结束w h i 1 e (flag)/ /这里把要发送的数据传送给变量s t r/向串口写数据md 1 g>se r i a 1. Wr i t ePort(hport, s t r );/让辅助线程休眠100ms_ s 1 e e p ( 1 0 0);/ /从串口读数据并赋给变量s t rs t r=md 1 g>se r i a 1. ReadPo r t(hpo r t);/这里把从串口得到的数据进行处理5结束语运用面向对象方法和多线程技术设计的通用串口通信类CS e r i a1 P o r t类,通过对W i n d o w s A P I函数的封装使

温馨提示

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

评论

0/150

提交评论