我需要帮助读取带有modbus协议的串口 告诉我从芯片组读取HEX值,需要在阅读之前发送:
1E 03 00 0C 00 01 46 66 ..
回复示例是:
1E 03 02 xx yy ch cl
Imports System 'To Access Console.WriteLine()
Imports System.IO.Ports 'To Access the SerialPort Object
Module Module1
Sub Main()
Console.WriteLine(ReceiveSerialData())
Console.Read()
End Sub
Function ReceiveSerialData() As String
'modbas
' Receive strings from a serial port.
Dim returnStr As String = ""
Dim com9 As IO.Ports.SerialPort = Nothing
Try
com9 = My.Computer.Ports.OpenSerialPort("COM9")
com9.ReadTimeout = 5000
com9.BaudRate = 19200
com9.Parity = Parity.None
com9.DataBits = 8
com9.StopBits = StopBits.One
' com9.Write("1E 03 00 0C 00 01 46 66") ' stringa che serve per farsi rispondere dal chip, obbligo di inviarla
' com9.Read("1E 03 00 0C 00 01 46 66",0,8)
Do
Dim Incoming As String = com9.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
returnStr &= Incoming & vbCrLf
End If
Loop
Catch ex As TimeoutException
returnStr = "Error: Serial Port read timed out."
Finally
If com9 IsNot Nothing Then com9.Close()
End Try
Return returnStr
End Function
End Module
答案 0 :(得分:0)
如果您使用的是Modbus RTU串行协议。如果你是,你不想写一个字符串,你想写原始字节,如:
byte[] request = new byte[]{1E,03,00,0C,00,01,46,66};
com9.Write(request, 0, request.Length);
您还需要读取原始字节。类似的东西:
byte [] response = new byte [256]; com9.Read(回复,0,7); //< - count(7)实际上取决于响应包
这不是最佳阅读方式,您可能会收到异常响应等,但它应该可以用于快速测试。
您确定您的COM设置是否正确?按照标准,你应该每个字节发送11位,所以:
1) Even/Odd/Mark parity bit
9600/19200 BAUD
8 data bits
1 Stop Bit
OR
2) No parity bit
9600/19200 BAUD
8 data bits
2 Stop Bits <- an extra stop bit
当然,有些设备支持其他组合。