Я читаю данные Modubus TCP с контроллера в Excel. Код выглядит следующим образом:
Option Explicit
Dim bytesTotal As Long
Dim objTCP As TCPIP_Library.Class1
Dim SetObject
Dim setObj As Boolean
Dim RetrieveData
Dim Test_data As String
Dim MbusQuery As String
Private Sub CommandButton1_Click() ' Stop the Connection
RetrieveData = 0
setObj = False
' objTCP.KillStream
CommandButton2.BackColor = "&H8000000F" ' Set the default colour
End Sub
Private Sub CommandButton2_Click() ' Start Connection
server = Sheets("Sheet1").Range("B4")
port = Sheets("Sheet1").Range("B8")
CommandButton2.BackColor = "&H0000FF00" ' Set colour to Green
' Check for Object Creation
If setObj = False Then
Set objTCP = CreateObject("TCPIP_Library.Class1")
setObj = True
objTCP.GetClient server, port
End If
DoEvents
'objTCP.port = 502
' Checking Connection to Remote Host and Sending Data
MbusQuery = Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(6) + Chr(0) + Chr(3) + Chr(0) + Chr(0) + Chr(0) + Chr(10)
objTCP.WriteData (MbusQuery)
' Sanity Check for Status of Connection
If objTCP.Connect = False Then
MsgBox "Host not Connected. Please Connect/try Again"
objTCP.KillStream
setObj = False
End If
DoEvents
objTCP.GetData
RetrieveData = 1
test = objTCP.Data1
' For j = 0 To 50
' temp = objTCP.Data
' MbusByteArray(j) = objTCP.Data(j)
' Next
DoEvents
For j = 1 To 50
MbusByteArray(j - 1) = Asc(Mid(test, j, 1))
Next
Dim start_index As Byte
start_index = MsgParseCounter(MbusByteArray)
DoEvents
MSB = MbusByteArray(start_index + 2)
MID1 = MbusByteArray(start_index + 3)
MID2 = MbusByteArray(start_index)
LSB = MbusByteArray(start_index + 1)
MSB_Raw = MbusByteArray(start_index + 2)
MID1_Raw = MbusByteArray(start_index + 3)
MID2_Raw = MbusByteArray(start_index)
LSB_Raw = MbusByteArray(start_index + 1)
Parse MSB, MID1, MID2, LSB, signBit
Application.EnableEvents = False
Sheets("Sheet1").Range("B24") = Val(MID1)
Sheets("Sheet1").Range("B23") = MSB
Sheets("Sheet1").Range("B25") = Val(MID2)
Sheets("Sheet1").Range("B26") = Val(LSB)
Sheets("Sheet1").Range("B11") = Val(MSB_Raw)
Sheets("Sheet1").Range("B12") = Val(MID1_Raw)
Sheets("Sheet1").Range("B13") = Val(MID2_Raw)
Sheets("Sheet1").Range("B14") = Val(LSB_Raw)
If signBit = False Then
Value = CDbl((((MID1 / 128) + (MID2 / 32768) + (LSB / 8388608)) + 1) * 2 ^ MSB)
Else
Value = CDbl((((MID1 / 128) + (MID2 / 32768) + (LSB / 8388608)) + 1) * -2 ^ MSB)
End If
Sheets("Sheet1").Range("C23") = Val(Value)
Application.EnableEvents = True
DoEvents
If RetrieveData = 1 Then
Call CommandButton2_Click
End If
End Sub
После нескольких секунд успешного запуска кода выскакивает мозаичная ошибка. Я погуглил, но не смог понять, почему он работает в течение нескольких секунд, а затем появляется сообщение об ошибке.
Я удалил локальные переменные, используемые для метода CommandButton2
, чтобы уменьшить размер кода. Пожалуйста, помогите.