⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module1.vb

📁 实现485串口通信的一个小例子!能读取我们公司的二次压降检测仪的数据。
💻 VB
📖 第 1 页 / 共 2 页
字号:
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 + -