(设备管理)用于与串口设备通讯的NET基类CB

上传人:管****问 文档编号:119759939 上传时间:2020-01-25 格式:DOC 页数:9 大小:291.04KB
返回 下载 相关 举报
(设备管理)用于与串口设备通讯的NET基类CB_第1页
第1页 / 共9页
(设备管理)用于与串口设备通讯的NET基类CB_第2页
第2页 / 共9页
(设备管理)用于与串口设备通讯的NET基类CB_第3页
第3页 / 共9页
(设备管理)用于与串口设备通讯的NET基类CB_第4页
第4页 / 共9页
(设备管理)用于与串口设备通讯的NET基类CB_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《(设备管理)用于与串口设备通讯的NET基类CB》由会员分享,可在线阅读,更多相关《(设备管理)用于与串口设备通讯的NET基类CB(9页珍藏版)》请在金锄头文库上搜索。

1、转:使用P/Invoke来开发用于与串行设备通讯的.NET基类http:/ (89KB) 导引:在.NET环境下编写与RS252串口通信的应用程序的唯一方法,就是引用过时了的并且有点限制的MSComm ActiveX控件。这篇文章介绍了用C#安全代码编写一个多线程的,且时尚的与RS232通讯的基础类库。这个类库使用平台调用服务(即Platform Invocation Services)来与Win32 API直接交互。程序员可以通过继承在任何.NET语言下使用这个类库;这个文章还探讨了一些用C#和Visual Basic .NET写的示例程序。 微软.NET框架类库(FCL)提供了相当全面广泛

2、的功能来替代在Win32API编程下原有的功能,特别是C#与Visual Basic.NET语言的可互访性。尽管如此,RS232串口通讯是.NET框架类库是明显未被涉及的方面之一。从而很正常的,很多人就把这些接口当成了遗弃物。目前,你还是通过软件层与串行调制解调器进行通讯,比如TAPI与PPP。其它从前使用这些接口的设备现在正在向USB接口移植。不过,一些专业的RS232设备的驱动程序仍然有通讯的需要,比如GPS接收器,barcode and swipe card readers,可编程控制器和一些可预见的程序员将来继续使用的设备。(关于RS232接口的规格信息,可以参看Hardware Sp

3、ecs.) 平台调用服务 (P/Invoke)是能够使用托管的CLR代码调用非托管DLLs的.NET技术,包括那些实现Win32 API的DLLs。在这篇文章里,我将用C#把与RS232通信的API封装到CLR托管的代码中去。生成的基类库将使用.NET语言开发特定设备的驱动变得相对容易。完整的代码和示例可以从这篇文章顶部的链接中下载到。 设计原理在把Win32串口通讯功能封装到托管类的时候,这里至少有四种实现方式让你选择:1.使用P/Invoke把API函数、常数、结构作为静态成员封装到托管类中。虽然我在里面使用了这种方法,但没有这个类暴露给程序员。2.写一个流的处理角色。这是.NET框架对文

4、件、控制台、网络通讯的一般地、可扩充的提取。咋一看,这个很有吸引力,但近距离审视的时候,这个更适用于传统的调制解调器,而不适合于现在基于命令响应语法的设备。3.做一个直接替换MSComm OLE Control Extension(OCX)控件的替代品。换句话说,新建一个封装了API文件处理并提供许多基本的方法和事件(比如,Open,Close,Read,Write等等)。你可以在应用程序类里初始化这个类库里的一个对象来达到重用的目的那就是说,通过COM-style的集合。4.写一个应用程序需要继承的基类。这是一个充分体现.NET优点运行时对不同语言继承的无关性的面向对象的方法。这些基础的方法

5、被继承进应用程序对象中,虚方法将被使用,而不是使用事件。这个应用程序对象将巧妙地提供一个适用于真实RS232设备公共接口(比如,一个GPS接收器驱动可能拥有一些关于经度和纬度的公共属性)。 我将采用第四种方法。这个类库将会包含两个被生明为抽象类的基类(它们不能被示例化),但我将使用继承来把它们作为实现某些特定应用的基类。图1表明了这种继承的层次关系。 图1继承层次第一个库类,CommBase,对数据格式化、更容易开启与关闭通讯接口、发送与接收字节数据、输入与输出交互的控制等都不提供任何实现。 第二个库类,CommLine,继承自CommBase,并且做了两个实现:接收与发送的字节是ASCII编

6、码并使用一个保留的ASCII控制编码来标记数据行数的可变长度,能够接收与传输字符串。当然,这个模型是可扩展的;比如,你可以编写可选的Unicode版的CommLine。 使用基类 两个应用程序的例子,BaseTerm和LineTerm,可以下载的到。他们可以用于与任何串口设备进行一般用途的交流,包括调制解调器。我先从一个用户的观点来简单的看一下BaseTerm,然后再更细致地分析一个LineTerm的源代码。 图2 BaseTerm BaseTerm(参看图2)是一个完全基于WindowsForm的应用程序,它继承自CommBase并提供一个基于字节的可调节终端。点击Settings按纽可以打

7、开了一个对话框来对通讯设置的全部参数进行设置(参看图3)。这个窗口上菜单可以帮助用户以结构化的XML文件来保存或加载这些设置参数,也保存大量用于普通流控制模式的设置。提示解释了各个设置项的用法。一旦保存为XML,当你再次启动这个程序的时候,你可以在命令行格式下设定这个文件。一旦连上线,打出的字符就可以立即被传送到远端设备中支。键盘上的按键发送合适的ASCII字节,如果你想发送键盘上没有的编码,你可以使用“escape facility”. 图3 Comm设置 可以通过输入符号来结束这个“escape”,它可以把一个合适的ASCII码立即发送过去。当需要传输符号时可以通过把它输入两次的方式进行。

8、你可以在设置对话框中标记为”Xon Code”的下拉框中查看所有有效的ASCII控制符的名称,站点http:/ 你可以在接收到一个规定ASCII字符或一定数量的字符后使用显示设置对话框来中止接收行。点击状态按纽将提供所传输以及接收队列的情况。 LineTerm使用CommLine作为它的基类,并在源码中声明了如何使用这个库。因为没有创建用户界面用于设置,你需要在Visual Studio .NET环境下来运行它。在Visual Studio .NET中,建立一个新的Visual Basic控制台应用程序。从项目中移除默认的模块。拷贝LineTerm.vb,CommBase.dll和CommBa

9、se.xml三个文件到项目文件夹(其中的XML文件这个库文件提供了智能提示信息)。使用项目浏览器中的添加现有项把LineTerm.vb添加到项目中,并通过添加引用把CommBase.dll添加到引用中。现在你可以编译并运行这个项目了。Imports JH.CommBase Public Class LineTerm Inherits CommLine Public Sub SendCommand(ByVal s As String) Send(s) End Sub Public Sub TransactCommand(ByVal s As String) Dim r As String r =

10、 Transact(s) Console.WriteLine(RESPONSE: + r) Prompt() End Sub Public Sub Prompt() Console.WriteLine(Type string to send and press ENTER.Empty string to close comm port.) End Sub Protected Overrides Function CommSettings() As CommBaseSettings Dim cs As New CommLineSettings() cs.SetStandard(COM1:, 19

11、200, Handshake.none) cs.rxFilter = New ASCII() ASCII.LF, ASCII.SOH cs.rxTerminator = ASCII.CR cs.txTerminator = New ASCII() ASCII.CR Setup(cs) Return cs End Function Protected Overrides Sub OnRxLine(ByVal s As String) Console.WriteLine(RECEIVED: + s) Prompt() End Sub Protected Overrides Sub OnTxDone

12、() Console.WriteLine(TRANSMISSION COMPLETE) Prompt() End Sub End ClassModule Module1 Sub Main() Dim t As New LineTerm() Dim c As String Console.WriteLine(Press ENTER to open com port) Console.ReadLine() If t.Open() Then Console.WriteLine(COM PORT OPEN) t.Prompt() While True c = Console.ReadLine().Trim If c = Then Exit While t.SendCommand(c) t.Tr

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 经营企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号