(3) 打开与关闭串口
在创建一个SerialPort 对象,设置串口属性后,可以通过 Open()方法打开串口。数据读写完成后,可以通过Close()方法关闭串口。根据经验,对于有些系统,在打开
串口后,还需要将RtsEnable设置为True,这样才能读写数据,否则不能正常读写数据。
本程序中,打开串口的相关程序在SearchPort函数中,当搜索本机可用串口时,便会打开串口。打开串口的程序语句为:
If SerialPortStatus = False Then
Try
SerialPort1.Open()
Threading.Thread.Sleep(500)
Dim Version As String = ""
Version = SerialPort1.ReadExisting()
If InStr(Version, "JB5000") > 0 Then
SerialPortStatus = True
Return True
Else
SerialPort1.Close()
Return False
End If
Catch ex As Exception
ToolStripButton1.Enabled = False
ToolStripButton3.Enabled = True
Return False
End Try
Else
Try
SerialPort1.PortName = ComName
SerialPort1.Open()
Return False
Catch ex As Exception
Return False
End Try
End If
同样,关闭串口的程序如下:
Private Sub ClosePort()
SerialPort1.Close()
End Sub
(4) 利用DataReceived事件进行数据接收
SerialPort提供了DataReceived事件。当有数据进入时,该事件被触发。该事件的触发由操作系统决定,当有数据到达时,该事件在辅助线程中被触发。辅助线程的优先级比较低,因此并不能确保每个字节的数据到达时,该事件都被触发。在使用该事件接收数据时,最好对定义通讯协议格式,添加桢头和桢尾。在DataReceived事件中接收数据时,把数据放在数组中或字符串中缓冲起来,当接收的包含桢头和桢尾的完整数据时,再进行处理。
本程序在DataReceived事件的通用过程中用到了If...Then...End If语句。如果软件正在运行且布尔型变量SerialPortStatus的值是True,即本机存在可用串口,那么就会用Try...Catch语句,Try语句里面用到了ReadTo方法,串口会一直读取数据,直到输入缓冲区中的"F"为止。F为数据包或指令包的包尾。然后赋值给字符型数组ReceiveBuff。在异步调用的函数的参数里面,会调用CallbackShow通用过程。这个CallbackShow通用过程里面用到了两个If...Then...End If语句。第一个If...Then...End If语句,如果软件正在运行,那么调用通用过程WriteToFile。通用过程WriteToFile主要实现了将数据写入文件的功能,后面将会具体提到。第二个If...Then...End If语句,如果字符型数组ReceiveBuff的长度大于0,那么调用JudgeTaskMode函数。JudgeTaskMode函数里面有关于数据接收的具体形式,是根据协议里面的指令包和数据包对接收到的数据做出具体的反应。
- 上一篇:双谱图像配准技术研究+powell算法
- 下一篇:基于DSP的雷达恒虚警检测技术研究
-
-
-
-
-
-
-
现代简约美式风格在室内家装中的运用
浅析中国古代宗法制度
中国传统元素在游戏角色...
江苏省某高中学生体质现状的调查研究
高警觉工作人群的元情绪...
上市公司股权结构对经营绩效的影响研究
g-C3N4光催化剂的制备和光催化性能研究
C++最短路径算法研究和程序设计
NFC协议物理层的软件实现+文献综述
巴金《激流三部曲》高觉新的悲剧命运