champasit Ответов: 2

Vb.net интерфейс RS232 получите шестнадцатеричных данных


Я посылаю команду rs232 Hex к датчику температуры и влажности follow up manual. но результат не сработал

Дим данных как Byte() = {&амп;Н1 &амп;Н4 &амп;х0, &ампер;Н1 &амп;х0, &ампер;Н1 &амп;Н60, &ампер;га}
SerialPort1.Write(data, 0, 8)

Результат в ручном режиме = 0x131

моя программа = 01 04 02 01 2B F8 BF

Что я уже пробовал:

Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) обрабатывает SerialPort1.DataReceived
'ReceivedText(SerialPort1.ReadExisting())
Dim Count As Integer = SerialPort1.BytesToRead
Тусклый Буфер(От 0 До Count - 1) В Виде Байта
Dim Text2Display As String = ""

SerialPort1.Read(Буфер, 0, Счетчик)

For I As Integer = 0 To Buffer.GetUpperBound(0)
Text2Display += Буфер(I).ToString("X2") & " "
Следующий

ReceivedText(Text2Display)

Конец Подводной Лодки

Private Sub ReceivedText(ByVal [text] As String)

Если я.rtbReceived.Свойство Invokerequired Тогда
Dim x As New SetTextCallback(AddressOf ReceivedText)
Me.Invoke(x, New Object() {(text)})
Еще
Я.rtbReceived.Text &= [text] & vbNewLine
Конец, Если

Конец Подводной Лодки


End Класса

OriginalGriff

И это все, что вам нужно знать.
Он точно говорит вам, что вы посылаете сверху, и что он дает в качестве ответа.
Он говорит, что использует протокол MODBUS, и объясняет, что это за данные.
01 04 02 01 2B F8 BF правильно: посмотрите на "значение температуры отклика от ведомого устройства", и все данные там есть.
Возьмите свое сообщение, проверьте правильность DA, проверьте правильность CRC-16, затем вы можете проверить количество байтов и получить временные данные.
Это довольно простая вещь (за исключением CRC, который требует немного работы, но есть масса примеров этого:
http://comfiletech.com/blog/modbus-crc-algorithm-for-net/
например.

2 Ответов

Рейтинг:
2

OriginalGriff

То, что это выглядит как один из них:
1) число с плавающей запятой, вероятно, сначала получило наименее значимый байт,
2) неправильная настройка портов - я бы начал с двойной проверки руководства на скорость передачи данных и настройки стоп-битов.
3) данные упакованы каким-то образом: похоже, что данные, которые вы показываете, - это STX ByteCount1 ByteCount0, затем байты данных ByteCount и, возможно, контрольная сумма?

Серьезно, я бы проверил руководство и использовал HyperTerminal, чтобы убедиться, что вы можете правильно общаться с устройством, прежде чем я начну писать код. Если вы этого не сделаете, вы понятия не имеете, где могут быть проблемы.


Рейтинг:
0

CPallini

Чтобы получить лучшую помощь, вы должны подробно описать свой сценарий (возможно, включая дополнительную информацию об устройстве). Во всяком случае наши Грифф уже дал вам правильное предложение: установите связь с программой эмулятора терминала (я бы использовал PuTTY - бесплатный SSH и telnet клиент для Windows[^]) и модифицируйте свою программу, чтобы воспроизвести успешную коммуникацию.