📄 module1.vb
字号:
Imports System
Imports System.Object
Imports System.IO.Ports
Imports System.Threading
Imports System.Configuration
Module Module1
Public Class ReadPort
Shared _serialPort As IO.Ports.SerialPort
Shared _buffer() As Byte
Shared _wbuffer0() As Byte
Shared _wbuffer1() As Byte
Shared _wbuffer2() As Byte
Shared _wbuffer3() As Byte
Shared _wbuffer4() As Byte
Shared _wbuffer5() As Byte
Shared _wbuffer6() As Byte
Shared _wbuffer7() As Byte
Shared _wbuffer8() As Byte
Shared i As Integer
Shared connstring As String
Public Shared Sub Main()
_serialPort = New SerialPort("COM1", 1200, Parity.Even, 8, StopBits.One)
_serialPort.PortName = SetPortName(_serialPort.PortName)
_serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate)
_wbuffer0 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (16), (80), (52), (22)}
_wbuffer1 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (16), (82), (54), (22)}
_wbuffer2 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (17), (82), (55), (22)}
_wbuffer3 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (16), (96), (68), (22)}
_wbuffer4 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (17), (96), (69), (22)}
_wbuffer5 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (16), (97), (69), (22)}
_wbuffer6 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (17), (97), (70), (22)}
_wbuffer7 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (16), (98), (70), (22)}
_wbuffer8 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (17), (98), (71), (22)}
Dim bgtime As DateTime
bgtime = DateAdd(DateInterval.Hour, 12, Now().Date)
begin:
Dim start, finish As Double
start = Microsoft.VisualBasic.DateAndTime.Timer
finish = start + 20.0
Do While Microsoft.VisualBasic.DateAndTime.Timer < finish
Loop
Console.WriteLine("Begin to read current datas!")
readport()
If DateDiff(DateInterval.Hour, bgtime, Now()) Mod 2 = 0 And DateDiff(DateInterval.Hour, bgtime, Now()) <> 0 Then
bgtime = DateAdd(DateInterval.Hour, Now().Hour, Now().Date)
'Console.WriteLine(bgtime)
Console.WriteLine("Begin to update the history datas!")
readhistorydata()
End If
GoTo begin
End Sub
#Region "readhistory"
Public Shared Sub readhistorydata()
Dim SQL As String
Dim conn As New Data.SqlClient.SqlConnection
Dim cmd As Data.SqlClient.SqlCommand
Dim rd As Data.SqlClient.SqlDataReader
Dim ds As New Data.DataSet
conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("connectionString").ConnectionString
SQL = "select * from device"
Try
conn.Open()
Catch ex As SqlClient.SqlException
Console.WriteLine(ex.Message)
End Try
'获取设备序列号数组
cmd = New Data.SqlClient.SqlCommand(SQL, conn)
rd = cmd.ExecuteReader()
Dim rcount As Integer
rcount = 0
Dim lmit() As Double
Dim did() As Integer
Dim dad() As Integer
did = New Integer(20) {}
dad = New Integer(20) {}
lmit = New Double(20) {}
While rd.Read()
did(rcount) = rd.Item(0)
dad(rcount) = rd.Item(3)
rcount = rcount + 1
End While
rd.Close()
'根据设备的ID号更新实时数据表中对应ID号的行的数据
Dim k As Integer
For k = 0 To rcount - 1
_wbuffer0(1) = _wbuffer0(1) + Convert.ToInt32(dad(k)) - 1
_wbuffer0(12) = _wbuffer0(12) + Convert.ToInt32(dad(k)) - 1
_wbuffer1(1) = _wbuffer1(1) + Convert.ToInt32(dad(k)) - 1
_wbuffer1(12) = _wbuffer1(12) + Convert.ToInt32(dad(k)) - 1
_wbuffer2(1) = _wbuffer2(1) + Convert.ToInt32(dad(k)) - 1
_wbuffer2(12) = _wbuffer2(12) + Convert.ToInt32(dad(k)) - 1
_wbuffer3(1) = _wbuffer3(1) + Convert.ToInt32(dad(k)) - 1
_wbuffer3(12) = _wbuffer3(12) + Convert.ToInt32(dad(k)) - 1
_wbuffer4(1) = _wbuffer4(1) + Convert.ToInt32(dad(k)) - 1
_wbuffer4(12) = _wbuffer4(12) + Convert.ToInt32(dad(k)) - 1
_wbuffer5(1) = _wbuffer5(1) + Convert.ToInt32(dad(k)) - 1
_wbuffer5(12) = _wbuffer5(12) + Convert.ToInt32(dad(k)) - 1
_wbuffer6(1) = _wbuffer6(1) + Convert.ToInt32(dad(k)) - 1
_wbuffer6(12) = _wbuffer6(12) + Convert.ToInt32(dad(k)) - 1
_wbuffer7(1) = _wbuffer7(1) + Convert.ToInt32(dad(k)) - 1
_wbuffer7(12) = _wbuffer7(12) + Convert.ToInt32(dad(k)) - 1
_wbuffer8(1) = _wbuffer8(1) + Convert.ToInt32(dad(k)) - 1
_wbuffer8(12) = _wbuffer8(12) + Convert.ToInt32(dad(k)) - 1
SQL = "select d_Ptdl from limits where d_Id='" & Convert.ToInt32(did(k)) & "' "
cmd = New Data.SqlClient.SqlCommand(SQL, conn)
rd = cmd.ExecuteReader()
If rd.Read() Then
lmit(k) = rd.Item(0)
'Console.WriteLine(lmit(k))
'Console.Read()
End If
rd.Close()
Dim _date As DateTime
Dim _dat As String
Dim tname As String
tname = "secPT" + did(k).ToString
Dim da As New Data.SqlClient.SqlDataAdapter("select * from [" & Trim$(tname) & "]", conn)
Dim dab As New Data.SqlClient.SqlCommandBuilder(da)
da.Fill(ds, "TempSecPTS")
Dim drow As DataRow
drow = ds.Tables("TempSecPTS").NewRow()
_serialPort.Open()
SendBytesData(_wbuffer0)
'开启接收数据线程
_buffer = New Byte(21) {}
ReceiveData()
_serialPort.Close()
_dat = Hex(_buffer(17)) + "-" + ((_buffer(16) >> 4) And 1).ToString + (_buffer(16) And 15).ToString + "-" + Hex(_buffer(15)) + " " + Hex(_buffer(14)) + ":" + Hex(_buffer(13)) + ":" + Hex(_buffer(12))
Try
_date = DateTime.Parse(_dat)
Catch
Console.WriteLine("Read datetime error!")
End Try
'drow = ds.Tables("TempSecPTS").Rows(0)
drow.Item(0) = _date
_serialPort.Open()
SendBytesData(_wbuffer1)
'开启接收数据线程
_buffer = New Byte(51) {}
ReceiveData()
_serialPort.Close()
For i = 0 To 8
drow.Item(i + 1) = CInt(_buffer(12 + i * 4) And 15) / 100000 + CInt(_buffer(12 + i * 4) >> 4) / 10000 _
+ CInt(_buffer(13 + i * 4) And 15) / 1000 + CInt(_buffer(13 + i * 4) >> 4) / 100 _
+ CInt(_buffer(14 + i * 4) And 15) / 10 + CInt(_buffer(14 + i * 4) >> 4) _
+ CInt(_buffer(15 + i * 4) And 15) * 10 + CInt(_buffer(15 + i * 4) >> 4) * 100
Next
_serialPort.Open()
SendBytesData(_wbuffer2)
'开启接收数据线程
_buffer = New Byte(39) {}
ReceiveData()
_serialPort.Close()
For i = 0 To 5
drow.Item(i + 10) = CInt(_buffer(12 + i * 4) And 15) / 100 + CInt(_buffer(12 + i * 4) >> 4) / 10 _
+ CInt(_buffer(13 + i * 4) And 15) + CInt(_buffer(13 + i * 4) >> 4) * 10 _
+ CInt(_buffer(14 + i * 4) And 15) * 100 + CInt(_buffer(14 + i * 4) >> 4) * 1000 _
+ CInt(_buffer(15 + i * 4) And 15) * 10000 + CInt(_buffer(15 + i * 4) >> 4) * 100000
Next
_serialPort.Open()
SendBytesData(_wbuffer3)
'开启接收数据线程
_buffer = New Byte(63) {}
ReceiveData()
_serialPort.Close()
For i = 0 To 11
drow.Item(i + 16) = (CInt(_buffer(12 + i * 4)) _
+ CInt(_buffer(13 + i * 4)) * 256 _
+ CInt(_buffer(14 + i * 4)) * 256 * 256 _
+ CInt(_buffer(15 + i * 4)) * 256 * 256 * 256) / 100000
Next
_serialPort.Open()
SendBytesData(_wbuffer4)
'开启接收数据线程
_buffer = New Byte(39) {}
ReceiveData()
_serialPort.Close()
For i = 0 To 5
drow.Item(i + 28) = (CInt(_buffer(12 + i * 4)) _
+ CInt(_buffer(13 + i * 4)) * 256 _
+ CInt(_buffer(14 + i * 4)) * 256 * 256 _
+ CInt(_buffer(15 + i * 4)) * 256 * 256 * 256) / 100
Next
_serialPort.Open()
SendBytesData(_wbuffer5)
'开启接收数据线程
_buffer = New Byte(33) {}
ReceiveData()
_serialPort.Close()
For i = 0 To 8
drow.Item(i + 34) = (CInt(_buffer(12 + i * 2)) _
+ CInt(_buffer(13 + i * 2)) * 256)
Next
_serialPort.Open()
SendBytesData(_wbuffer6)
'开启接收数据线程
_buffer = New Byte(27) {}
ReceiveData()
_serialPort.Close()
For i = 0 To 5
drow.Item(i + 43) = (CInt(_buffer(12 + i * 2)) _
+ CInt(_buffer(13 + i * 2)) * 256)
Next
_serialPort.Open()
SendBytesData(_wbuffer7)
'开启接收数据线程
_buffer = New Byte(51) {}
ReceiveData()
_serialPort.Close()
For i = 0 To 8
drow.Item(i + 49) = CInt(_buffer(12 + i * 4)) _
+ CInt(_buffer(13 + i * 4)) * 256 _
+ CInt(_buffer(14 + i * 4)) * 256 * 256 _
+ CInt(_buffer(15 + i * 4)) * 256 * 256 * 256
Next
_serialPort.Open()
SendBytesData(_wbuffer8)
'开启接收数据线程
_buffer = New Byte(39) {}
ReceiveData()
_serialPort.Close()
For i = 0 To 5
drow.Item(i + 58) = CInt(_buffer(12 + i * 4)) _
+ CInt(_buffer(13 + i * 4)) * 256 _
+ CInt(_buffer(14 + i * 4)) * 256 * 256 _
+ CInt(_buffer(15 + i * 4)) * 256 * 256 * 256
Next
drow.Item(64) = lmit(k)
ds.Tables("TempSecPTS").Rows.Add(drow)
Try
da.Update(ds, "TempSecPTS")
Catch
Console.WriteLine("Update history data error!")
End Try
ds.Clear()
_wbuffer0 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (16), (80), (52), (22)}
_wbuffer1 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (16), (82), (54), (22)}
_wbuffer2 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (17), (82), (55), (22)}
_wbuffer3 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (16), (96), (68), (22)}
_wbuffer4 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (17), (96), (69), (22)}
_wbuffer5 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (16), (97), (69), (22)}
_wbuffer6 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (17), (97), (70), (22)}
_wbuffer7 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (16), (98), (70), (22)}
_wbuffer8 = New Byte() {(104), (1), (0), (0), (0), (0), (0), (104), (1), (2), (17), (98), (71), (22)}
Next
conn.Close()
conn.Dispose()
End Sub
#End Region
Public Shared Sub SendBytesData(ByVal buffer() As Byte)
_serialPort.WriteTimeout = 1000
Try
_serialPort.Write(buffer, 0, buffer.Length)
Catch ex As TimeoutException
Console.WriteLine("send" + ex.Message)
End Try
End Sub
Public Shared Sub ReceiveData()
'同步阻塞接收数据线程
Dim threadReceive As Thread = New Thread(AddressOf SynReceiveData)
'New ParameterizedThreadStart()
'New ParameterizedThreadStart(AddressOf SynReceiveData)
threadReceive.Start()
threadReceive.Join()
'也可用异步接收数据线程
'Thread threadReceiveSub = new Thread(new ParameterizedThreadStart(AsyReceiveData));
'threadReceiveSub.Start(serialPort);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -