.NET 串口通讯编程

 

不久前,作了一个远程水表抄表系统,现在拿出来给大家共享。

 

设备通讯如同人们之间的交流一样:有时候我们围坐在一起自由的聊天,有的滔滔不绝讲述、有的静静的聆听、有的2三个人在窃窃私语;而辩论场上的交流,则必须遵循一定的规则,比如,每个人每次讲话不能超过3分钟, 这样才能保证所有的人都有公平的机会阐述自己的观点。

远程抄表系统中,多个水表终端通过总线连接在一个计算机设备上,所有的水表都在等候中心计算机的指令;当一个水表收到属于自己的指令时,做出相应的动作,并在下一个总线周期报告响应后的状态。我们可以把这种通讯模式,隐喻成课堂上老师和学生的交流方式:老师提出问题,然后被老师点到名的学生站起来回答问题(如果没被点到的学生也都站起来回答问题,情况立即就复杂了)。这种通讯方式,被称为“半双工”,它可以很好的应用在远程抄表系统中。

通过使用半双工通讯机制,我们避免了通讯混乱的情况,所以以后的分析中我们只考虑一个水表的情况。

下面,我们来编写代码,实现水表与中心计算机通过串行通讯端口进行通讯。

来看一下我们的系统图:

根据系统分析,我画出了如下类图:

 

 

首先CCom类,封装计算机读写COM端口的类, 我把每个指令都封装成了对应的方法,您可以根据自己的需求来决定是否把指令封装成方法。这里特别要注意,COM端口的关闭。必须要确保使用完毕后,关闭端口。否则下次我们可能无法打开端口。它主要封装了下面的功能

l  串行端口的开关

l  从串行端口读指令包(ValveCommandPacket PacketTypes = MasterEnd

l  向串行端口写指令包(ValveCommandPacket PacketTypes = SlaveEnd

l  重置端口

l  本项目中定义的 8个指令

详细的代码参见ccom.cs文件。

其次,ValveCommandPacket封装了COM通讯数据包。用它来完成,文字指令到2进制代码的相互转换。本次开发中主要定义了以下数据位:

l  阀门地址

l  指令类型(控制指令或响应指令)

l  指令字

l  指令内容

l  CRC校验码

详细的代码保存在ValveCommandPacket.cs文件中。

最后,CRCGenerator类,提供了一个可以生成8位和16位校验码的类。详细的代码请参照CRCGenerator.cs文件。(本文通过一个远程水表抄表系统的实例梗概,介绍了如何设计串口通讯程序。)

 

 

书名:《Visual C#.NET串口通信及测控应用典型实例》(电子工业出版社.李江全.邓红涛.刘巧.李伟) PDF格式扫描版,全书分为8章,共369页。2012年5月出版。 全书压缩打包成3部分,这是第1部分 内容简介 本书从工程应用的角度出发,通过8个典型应用实例,包括PC与PC、PC与单片机、PC与PLC、PC与远程I/O模块、PC与智能仪器、PC与无线数传模块、Pc与USB数据采集模块等组成的测控系统,利用SerialPort控件和MSComm控件编写C#.NET串口通信程序,并对计算机测控系统中的4类典型应用((模拟量输入(AI)、模拟量输出(AO)、数字量输入(DI)和数字量输出(DO)的程序设计方法进行了详细的讲解。 目 录 第1章 PC与PC串口通信 1.1 串口通信概述 1.1.1 串口通信的基本概念 1.1.2 RS-232C接口标准 1.1.3 RS-422/485接口标准 1.1.4 串口通信线路连接 1.1.5 PC中的串行端口 1.1.6 虚拟串口的使用 1.2 VC++.NET串行通信控件与API函数 1.2.1 MSComm控件的使用 1.2.2 SerialPort控件的使用 1.2.3 串行通信API函数 1.3 PC与PC串口通信实例 1.3.1 两台PC串口通信 1.3.2 一台PC双串口互通信 第2章 PC与单片机串口通信 2.1 典型单片机开发板简介 2.1.1 单片机测控系统的组成 2.1.2 单片机开发板B的功能 2.1.3 单片机开发板B的主要电路 2.2 PC与单片机串口通信实例 2.2.1 PC与单个单片机串口通信 2.2.2 PC与多个单片机串口通信 2.3 PC与单片机串口通信测控应用实例 2.3.1 模拟量输入 2.3.2 模拟量输出 2.3.3 开关量输入 2.3.4 开关量输出 第3章 PC与西门子PLC串口通信 3.1 西门子PLC模拟量扩展模块与通信协议 3.1.1 西门子PLC模拟量输入模块 3.1.2 西门子PLC PPI通信协议 3.2 PC与西门子PLC串口通信测控应用实例 3.2.1 模拟量输入 3.2.2 模拟量输出 3.2.3 开关量输入 3.2.4 开关量输出 第4章 PC与三菱PLC串口通信 4.1 三菱PLC特殊功能模块与通信协议 4.1.1 FX2N系列PLC的特殊功能模块 4.1.2 三菱PLC编程口通信协议 4.2 PC与三菱PLC串口通信测控应用实例 4.2.1 模拟量输入 4.2.2 模拟量输出 4.2.3 开关量输入 4.2.4 开关量输出 第5章 PC与分布式I/O模块串口通信 5.1 典型分布式I/O模块简介 5.1.1 集散控制系统的结构与特点 5.1.2 ADAM4000远程数据采集控制系统 5.1.3 ADAM4000系列模块简介 5.1.4 ADAM4000系列模块的软件安装 5.2 PC与分布式I/O模块串口通信测控应用实例 5.2.1 模拟量输入 5.2.2 模拟量输出 5.2.3 数字量输入 5.2.4 数字量输出 第6章 PC与智能仪器串口通信 6.1 典型智能仪器简介 6.1.1 智能仪器的结构与特点 6.1.2 XMT-3000A型智能仪器的通信协议 6.2 PC与智能仪器串口通信测控应用实例 6.2.1 PC与单台智能仪器温度测控 6.2.2 PC与多台智能仪器温度测控 第7章 PC与无线数据传输模块串口通信 7.1 典型无线数传模块简介 7.1.1 无线数传技术概述 7.1.2 DTD46X系列无线数传模块 7.2 PC与无线数传模块串口通信测控应用实例 7.2.1 设计任务 7.2.2 线路连接 7.2.3 利用C51语言实现基于DS18B20的单片机温度测控 7.2.4 利用汇编语言实现基于DS18B20的单片机温度测控 7.2.5 利用VC++.NET实现PC与无线数传模块温度测控 第8章 USB串行总线模块测控应用 8.1 USB总线在数据采集系统中的应用 8.1.1 USB总线及其数据采集系统的特点 8.1.2 采用USB传输的数据采集系统 8.1.3 典型USB数据采集模块及应用 8.1.4 VC++.NET数据采集与控制的方式 8.2 PC与USB数据采集模块测控应用实例 8.2.1 模拟量输入 8.2.2 模拟量输出 8.2.3 数字量输入 8.2.4 数字量输出 参考文献
VB.Net是一种面向对象的编程语言,可以用于开发各种应用程序,包括串口通讯。在VB.Net中,可以使用SerialPort类来实现串口通讯。 首先,我们需要引入System.IO.Ports命名空间,以便能够使用SerialPort类。然后,我们需要声明一个SerialPort对象,并设置相应的属性,如串口号、波特率等。接下来,我们可以使用Open方法打开串口。 当串口打开后,我们可以使用Write方法发送数据到串口,使用Read方法从串口接收数据。通过事件处理程序,我们可以实时监测串口的数据接收情况,并对接收到的数据进行处理。 例如,我们可以编写一个按钮的点击事件处理程序,当按钮被点击时,通过串口发送一条指令给外部设备,并等待接收设备的返回数据。代码示例如下: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '设置串口属性 SerialPort1.PortName = "COM1" '设置串口号 SerialPort1.BaudRate = 9600 '设置波特率 '打开串口 SerialPort1.Open() '发送指令 SerialPort1.Write("指令内容") '等待接收数据 Dim receivedData As String = SerialPort1.ReadLine() '处理接收到的数据 MessageBox.Show(receivedData) '关闭串口 SerialPort1.Close() End Sub 在处理串口通讯时,我们还需要考虑异常情况的处理,例如串口打开失败、接收数据超时等。可以使用Try-Catch语句来捕捉并处理这些异常。 总之,通过VB.Net,我们可以轻松实现串口通讯,发送和接收数据。同时,我们还可以根据具体需求对串口通讯进行更加复杂的处理和控制。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值