泥浆池液位检测系统中串口通信类的设计.docVIP

  • 2
  • 0
  • 约3.07千字
  • 约 7页
  • 2018-10-28 发布于福建
  • 举报

泥浆池液位检测系统中串口通信类的设计.doc

泥浆池液位检测系统中串口通信类的设计

泥浆池液位检测系统中串口通信类的设计   摘 要:本文描述了泥浆池液位监控系统在WinCE嵌入式操作系统下用VB.net语言实现RS-232串口类模块的设计,具体包括创建串口属性、调用API函数、类的共有成员和函数的声明及实现等。   关键词:VB.NET API 控件 类   中图分类号:TP277 文献标识码:A 文章编号:1672-3791(2011)06(a)-0016-02   泥浆池液位监测系统是在石油、天然气、地质矿产和盐业等钻井作业过程中必备的安全装置系统。该系统包含上位机、钻台显示子系统和现场数据采集子系统三个功能模块,子系统之间采用串口通讯的方式来传输数据。现场数据采集子系统采用Windows CE操作系统,不支持Windows下常用的串行通信重叠I/O方式,需要自主开发Windows CE下的串口通讯类来实现各个模块间通信。      1 串口通信类的设计   串口通信类的具体设计过程如下:(1)类变量的创建。创建类变量包括创建指针变量和属性变量。指针变量用于指向系统初始地址;属性变量用于设置串口对象的具体属性值,具体包括超时时间、波特率、数据校验方式、停止位、数据位、缓冲区宽度、工作方式等。本设计中,串口的读和写操作方式都为异步模式。创建类变量同时创建事件句柄,包括读、写串口事务句柄、读事件句柄、写事件句柄。(2)Win CE API函数声明。所有用到的API函数都预先声明,本设计用到的API函数有23个,主要包括打开/关闭通信端口、取得通信端口参数、设置通信端口参数、输出数据至通信端口、输出数据至通信端口、清除通信端口错误状况和清除通信端口等。(3)属性接口声明和实现。属性的创建是为了让用户可以通过属性而取得或设置类的内部数据,但又必须保护内部私有数据不被外界取得,因此在内部数据的操作上,创建一些私有变量供类的内部程序使用。本设计创建的属性有:通信端口号属性设置、清除缓冲区事件、超时属性设置、校验属性设置、通信速度设置、数据位设置、缓冲区宽度设置、输入字节流属性设置、输入字符流属性设置、RTS属性设置、Modem状态属性设置等。下面通过对端口号属性设置来说明其设置方法.其他类属性的设置方法类似。   Public Property Port() As Integer   Get   Return miPort   End Get   Set(ByVal Value As Integer)   miPort = Value   End Set   End Property   As Integer表示这个属性是整数类型;Get…..End Get区域段提供给外界读取,以Return语句返回通信端口号;Set…End Set区域段用于接受外界输入的设置数据;ByVal Value As Integer指明输入的类型是整数,Value就代表外界输入具体数值,存入私有变量miPort。   (4)类的共有成员和函数的声明及实现。   ①打开串口操作open( )。   打开串口函数open( )需要初始化串口和打开串口句柄,获取DCB当前数据值,用户按设计需求通过改变DCB结构体参数进行设置,如波特率,数据位,停止位等,然后写入系统。该函数在设计时使用VB.NET中的Try…..End Try句法,使系统在运行该函数的过程中不至于进入死循环而导致脱离系统控制,该句法中,在Try…..End Try之间任意语句只要出现错误就立即跳出Try…..End Try而执行End Try后一程序语句,程序流程图如图1所示。   ②关闭串口操作close( )。   当不使用串口时,可以执行关闭串口函数close( )来关闭串口通道。程序中mbEnableEvents的值表示是否存在事件处理进程,如果mbEnableEvents的值为True,则表示有事件在处理。通过close( )执行关闭端口必须停止所有进程,通过调用函数Me.DisableEvents来实现。关闭串口必须把指针复位到初始位置,即执行m_hcom=New IntPtr(0)。程序流程图如图2所示。   ③写串口操作write( )。   把数据以字节形式写到串口缓冲区。在本设计中使用RS_232串口半双工模式。成功打开端口句柄后,通过调用WriteFile函数由串口将数据送出,如果发送数据失败,通过返回值检测发生错误的原因,并反馈给用户。数据发送完毕后关闭调用API函数端口并释放内存。具体程序流程图如图3所示。   ④写字符串函数。   通过调用GetBytes函数将字符串转换为字节形式,然后调用Write函数执行写数据操作完成字符串传送。   ⑤读串口操作read( )。   从串口缓冲区以字节形

文档评论(0)

1亿VIP精品文档

相关文档