samrat
20.11.2008, 13:53
Установка: непосредственно на компорт подключен МВУ-8 в режиме DCON скорость 9600, без паритета, 8 бит данных и т.д. работаю через MSComm. Всё работает, но замечена странность, прибор отвечает той же строкой, что и послана в него. То есть посылаю:#1021.000A5, наблюдаю включение, но отклик прибора в точности такой-же, то есть та-же строка, хотя по документации он должен быть >[Chk](cr). Для облегчения раздумий привожу участки кода на VB:
Public Function DCONCRC8(Dannie As String) As String '
Dim data1, i As Long
data1 = 0
For i = 1 To Len(Dannie)
data1 = data1 + Asc(Mid(Dannie, i, 1))
Next i
DCONCRC8 = Hex(data1 Mod 256)
End Function
Public Sub DCONOut(Modul As Long, Kanal As Long, DataSet As String)
MSComm1.Output = "#" + Hex(Modul) + Hex(Kanal) + DataSet + DCONCRC8("#" + Hex(Modul) + Hex(Kanal) + DataSet) + Chr(&HD)
lstO44ed.AddItem ("#" + Hex(Modul) + Hex(Kanal) + DataSet + DCONCRC8("#" + Hex(Modul) + Hex(Kanal) + DataSet) + Chr(&HD))
'MSComm1.Output = "#" + Hex(Modul) + Hex(Kanal) + DataSet + Chr(&HD)
'lstO44ed.AddItem ("#" + Hex(Modul) + Hex(Kanal) + DataSet + Chr(&HD))
End Sub
Public Function DCONIn() As String
Dim BufferPort, ChST As String
Dim dummie As Long
BufferPort = ""
tmrErrorFlag = False
tmrError.Enabled = True
While MSComm1.InBufferCount < 3
dummie = DoEvents
If tmrErrorFlag = True Then
tmrError.Enabled = False
lstO44ed.AddItem (BufferPort)
DCONIn = "Error Time Out Or Sintax Error Or CheckSum Error"
Exit Function
End If
Wend
tmrError.Enabled = False
BufferPort = MSComm1.Input
If Mid(BufferPort, 1, 1) = ">" Then
DCONIn = "Done"
ElseIf Mid(BufferPort, 1, 1) = "?" Then
DCONIn = "Error Value Out Of Bounds"
ElseIf Mid(BufferPort, 1, 1) = "!" Then
DCONIn = "Error Of Connect"
End If
lstO44ed.AddItem ("Exit with: " + BufferPort)
End Function
Public Function DCONCRC8(Dannie As String) As String '
Dim data1, i As Long
data1 = 0
For i = 1 To Len(Dannie)
data1 = data1 + Asc(Mid(Dannie, i, 1))
Next i
DCONCRC8 = Hex(data1 Mod 256)
End Function
Public Sub DCONOut(Modul As Long, Kanal As Long, DataSet As String)
MSComm1.Output = "#" + Hex(Modul) + Hex(Kanal) + DataSet + DCONCRC8("#" + Hex(Modul) + Hex(Kanal) + DataSet) + Chr(&HD)
lstO44ed.AddItem ("#" + Hex(Modul) + Hex(Kanal) + DataSet + DCONCRC8("#" + Hex(Modul) + Hex(Kanal) + DataSet) + Chr(&HD))
'MSComm1.Output = "#" + Hex(Modul) + Hex(Kanal) + DataSet + Chr(&HD)
'lstO44ed.AddItem ("#" + Hex(Modul) + Hex(Kanal) + DataSet + Chr(&HD))
End Sub
Public Function DCONIn() As String
Dim BufferPort, ChST As String
Dim dummie As Long
BufferPort = ""
tmrErrorFlag = False
tmrError.Enabled = True
While MSComm1.InBufferCount < 3
dummie = DoEvents
If tmrErrorFlag = True Then
tmrError.Enabled = False
lstO44ed.AddItem (BufferPort)
DCONIn = "Error Time Out Or Sintax Error Or CheckSum Error"
Exit Function
End If
Wend
tmrError.Enabled = False
BufferPort = MSComm1.Input
If Mid(BufferPort, 1, 1) = ">" Then
DCONIn = "Done"
ElseIf Mid(BufferPort, 1, 1) = "?" Then
DCONIn = "Error Value Out Of Bounds"
ElseIf Mid(BufferPort, 1, 1) = "!" Then
DCONIn = "Error Of Connect"
End If
lstO44ed.AddItem ("Exit with: " + BufferPort)
End Function