.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文件。(本文通过一个远程水表抄表系统的实例梗概,介绍了如何设计串口通讯程序。)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
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、付费专栏及课程。

余额充值