201 lines
6.5 KiB
VB.net
201 lines
6.5 KiB
VB.net
|
|
Imports System.IO.Ports
|
|||
|
|
|
|||
|
|
Public Class SharedFunction
|
|||
|
|
#Region "串口操作"
|
|||
|
|
'打开串口
|
|||
|
|
''' <summary>
|
|||
|
|
''' 打开串口
|
|||
|
|
''' </summary>
|
|||
|
|
''' <param name="m_Serial">串口</param>
|
|||
|
|
''' <param name="portName">串口号</param>
|
|||
|
|
''' <param name="baudRate">波特率</param>
|
|||
|
|
''' <returns></returns>
|
|||
|
|
Public Shared Function OpenSerial(m_Serial As SerialPort, portName As String, baudRate As Integer) As Boolean
|
|||
|
|
If IsNothing(m_Serial) OrElse m_Serial.IsOpen Then Return False
|
|||
|
|
Try
|
|||
|
|
m_Serial.PortName = portName
|
|||
|
|
m_Serial.BaudRate = baudRate
|
|||
|
|
m_Serial.Parity = Parity.Even
|
|||
|
|
m_Serial.Open()
|
|||
|
|
Return True
|
|||
|
|
Catch ex As Exception
|
|||
|
|
Return False
|
|||
|
|
End Try
|
|||
|
|
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
'设置串口波特率
|
|||
|
|
''' <summary>
|
|||
|
|
''' 设置串口波特率
|
|||
|
|
''' </summary>
|
|||
|
|
''' <param name="m_Serial"> 串口 </param>
|
|||
|
|
''' <param name="baudRate">波特率</param>
|
|||
|
|
''' <returns></returns>
|
|||
|
|
Public Shared Function SetSerialBaudRate(m_Serial As SerialPort, baudRate As Integer) As Boolean
|
|||
|
|
If IsNothing(m_Serial) OrElse Not m_Serial.IsOpen Then Return False
|
|||
|
|
m_Serial.BaudRate = baudRate
|
|||
|
|
Return True
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
''' <summary>
|
|||
|
|
''' 关闭串口
|
|||
|
|
''' </summary>
|
|||
|
|
''' <param name="m_Serial">串口</param>
|
|||
|
|
''' <param name="isread">串口关闭标志</param>
|
|||
|
|
''' <param name="isListen">串口等待关闭标志</param>
|
|||
|
|
Public Shared Sub CloseSerial(m_Serial As SerialPort, ByRef isread As Boolean, ByRef isListen As Boolean)
|
|||
|
|
If IsNothing(m_Serial) OrElse Not m_Serial.IsOpen Then Return
|
|||
|
|
isread = True
|
|||
|
|
While isListen
|
|||
|
|
Application.DoEvents()
|
|||
|
|
Threading.Thread.Sleep(10)
|
|||
|
|
End While
|
|||
|
|
|
|||
|
|
Threading.Thread.Sleep(10)
|
|||
|
|
m_Serial.Close()
|
|||
|
|
isread = False
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
|
|||
|
|
#End Region
|
|||
|
|
|
|||
|
|
|
|||
|
|
#Region "数据转换"
|
|||
|
|
Public Shared Function ByteToHexString(databuff() As Byte) As String
|
|||
|
|
Dim strData As String = String.Empty
|
|||
|
|
For i = 0 To databuff.Length - 1
|
|||
|
|
strData &= $" {Hex(databuff(i)).PadLeft(2, "0"c)}"
|
|||
|
|
Next
|
|||
|
|
Return strData
|
|||
|
|
End Function
|
|||
|
|
Public Shared Function StringToHexString(hexstr As String) As String
|
|||
|
|
'判断字符串是否为空或 者为空字符串
|
|||
|
|
If String.IsNullOrEmpty(hexstr) Then Return Nothing
|
|||
|
|
'替换字符中的分隔符号
|
|||
|
|
hexstr = hexstr.Trim().Replace(" ", "").Replace("-", "").Replace(",", "").Replace(":", "").Replace(";", "").Replace(".", "")
|
|||
|
|
'判断字符串的长度是否为偶数
|
|||
|
|
If hexstr.Length Mod 2 <> 0 Then
|
|||
|
|
'不为偶数往最后一个字节前面补0
|
|||
|
|
hexstr = hexstr.Insert(hexstr.Length - 1, "0")
|
|||
|
|
End If
|
|||
|
|
'以2为步长,将字符串转换为字节数组 不足2位前面补0
|
|||
|
|
Dim databuff() As Byte = Enumerable.Range(0, hexstr.Length).Where(Function(x) x Mod 2 = 0).Select(Function(x) Convert.ToByte(hexstr.Substring(x, 2), 16)).ToArray()
|
|||
|
|
Return ByteToHexString(databuff)
|
|||
|
|
End Function
|
|||
|
|
Public Shared Function HexStringToByte(hexstr As String) As Byte()
|
|||
|
|
'判断字符串是否为空或 者为空字符串
|
|||
|
|
If String.IsNullOrEmpty(hexstr) Then Return Nothing
|
|||
|
|
'替换字符中的分隔符号
|
|||
|
|
hexstr = hexstr.Trim().Replace(" ", "").Replace("-", "").Replace(",", "").Replace(":", "").Replace(";", "").Replace(".", "")
|
|||
|
|
'判断字符串的长度是否为偶数
|
|||
|
|
If hexstr.Length Mod 2 <> 0 Then
|
|||
|
|
'不为偶数往最后一个字节前面补0
|
|||
|
|
hexstr = hexstr.Insert(hexstr.Length - 1, "0")
|
|||
|
|
End If
|
|||
|
|
'以2为步长,将字符串转换为字节数组 不足2位前面补0
|
|||
|
|
Return Enumerable.Range(0, hexstr.Length).Where(Function(x) x Mod 2 = 0).Select(Function(x) Convert.ToByte(hexstr.Substring(x, 2), 16)).ToArray()
|
|||
|
|
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
''' <summary>
|
|||
|
|
''' Int转2个字节Byte
|
|||
|
|
''' 高字节在前,低字节在后
|
|||
|
|
''' </summary>
|
|||
|
|
''' <param name="i"></param>
|
|||
|
|
''' <returns></returns>
|
|||
|
|
Public Shared Function IntToByteHB(ByVal i As Integer) As Byte()
|
|||
|
|
Dim btemp() As Byte = {0, 0}
|
|||
|
|
Dim b() As Byte = BitConverter.GetBytes(i)
|
|||
|
|
btemp(0) = b(0)
|
|||
|
|
btemp(1) = b(1)
|
|||
|
|
Return btemp
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
''' <summary>
|
|||
|
|
''' Int转2个字节Byte
|
|||
|
|
''' 高字节在前,低字节在后
|
|||
|
|
''' </summary>
|
|||
|
|
''' <param name="i"></param>
|
|||
|
|
''' <returns></returns>
|
|||
|
|
Public Shared Function IntToByteLB(ByVal i As Integer) As Byte()
|
|||
|
|
Dim btemp() As Byte = {0, 0}
|
|||
|
|
Dim b() As Byte = BitConverter.GetBytes(i)
|
|||
|
|
btemp(0) = b(1)
|
|||
|
|
btemp(1) = b(0)
|
|||
|
|
Return btemp
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
#End Region
|
|||
|
|
#Region "数据校验"
|
|||
|
|
'计算数据和 校验
|
|||
|
|
Public Shared Function GetCheckSum(ByVal data As Byte()) As Byte
|
|||
|
|
|
|||
|
|
Dim sum As Integer = 0
|
|||
|
|
For i As Integer = 0 To data.Length - 1
|
|||
|
|
sum += data(i)
|
|||
|
|
Next
|
|||
|
|
Return sum
|
|||
|
|
|
|||
|
|
End Function
|
|||
|
|
Public Shared Function GetCheckSumMod(ByVal data As Byte()) As Byte
|
|||
|
|
|
|||
|
|
Dim sum As Integer = 0
|
|||
|
|
For i As Integer = 0 To data.Length - 2
|
|||
|
|
sum += data(i)
|
|||
|
|
Next
|
|||
|
|
sum = sum And &HFF
|
|||
|
|
Return sum
|
|||
|
|
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
Public Shared Function GetCheckSumMod2(ByVal data As Byte()) As Byte
|
|||
|
|
|
|||
|
|
Dim sum As Integer = 0
|
|||
|
|
For i As Integer = 0 To data.Length - 1
|
|||
|
|
sum += data(i)
|
|||
|
|
Next
|
|||
|
|
sum = sum And &HFF
|
|||
|
|
Return sum
|
|||
|
|
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
''' <summary>
|
|||
|
|
''' 和校验取余数
|
|||
|
|
''' 求Byte数组的和校验取余数
|
|||
|
|
''' </summary>
|
|||
|
|
''' <param name="dataPacket">Byte数组</param>
|
|||
|
|
''' <returns></returns>
|
|||
|
|
Public Function GetSumCheckMod(dataPacket As Byte()) As Byte
|
|||
|
|
Dim sum As Integer
|
|||
|
|
For idx = 0 To dataPacket.Length - 1
|
|||
|
|
sum += dataPacket(idx)
|
|||
|
|
sum = sum And &HFF
|
|||
|
|
Next
|
|||
|
|
Dim sumMod As Byte = &HFF - sum
|
|||
|
|
Return sumMod
|
|||
|
|
End Function
|
|||
|
|
#End Region
|
|||
|
|
|
|||
|
|
#Region "跨线程调用UI"
|
|||
|
|
Delegate Sub delSetFromUI(control As Control, mText As String, textcolor As Color, cbolor As Color)
|
|||
|
|
Public Shared Sub SetFromUI(ByVal control As Control, mText As String, textcolor As Color, cbolor As Color)
|
|||
|
|
If IsNothing(control) Then Return
|
|||
|
|
If control.InvokeRequired Then
|
|||
|
|
control.Invoke(New delSetFromUI(AddressOf SetFromUI), control, mText, textcolor, cbolor)
|
|||
|
|
Else
|
|||
|
|
control.Text = mText
|
|||
|
|
control.ForeColor = textcolor
|
|||
|
|
control.BackColor = cbolor
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
#End Region
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
End Class
|