Управление Serial Port rs485 - протокол modbus rtu

158
24 февраля 2018, 18:48

Появилась необходимость написать приложение которое может общаться с некоторым устройством, оно имеет интерфейс rs485 работает по протоколу modbus rtu. Честно признаюсь опыта работы с регистрами, байтами нет. Поэтому прошу помощи.

Инженер железки кинул описание:

BaudRate = 9600; DataBits = 8; Parity = None; StopBits = Two;

Устройство поставляется с установленным адресом 0х01 . Регистры значения веса находятся в регистрах по адресу 0000h и 0001h .

Пример чтения регистров : запрос - 01 03 00 00 00 02 C4 0B

Где: Первый байт - номер устройства (адрес) Второй байт - номер функции (03 = чтение регистров) Третий и четвертый - адрес начала регистров (0000) Пятый и шестой - количество регистров (0002) Последние два байта - контрольная сумма.

ответ - 01 03 04 00 00 00 4C FB C6

Где: Первый и второй байты повторяют запрос Третий байт - количество байт данных (4 байта) Данные: 00 00 00 4C = 76 у.е. Последние два байта - контрольная сумма.

Раз в 60 мс, приложение должно опрашивать устройство и возвращать значение на экран. Как лучше реализовать? Запрос в отдельном потоке? Или смысла нет?

  1. Мне нужно отправить команду на чтение веса, я правильно понимаю, мне нужно сделать так?

    serial = new SerialPort("COM3", 9600);
    serial.Handshake = System.IO.Ports.Handshake.None;
    serial.Parity = Parity.None;
    serial.DataBits = 8;
    serial.StopBits = StopBits.Two;            
    serial.Open();
    serial.Write(new byte[] { 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B }, 0, 8);
    serial.Close();
    
  2. Прочитать ответ с устройства. Здесь больше мне не понятно. Как получить ответ и как его интерпретировать? распарсить байты

READ ALSO
C# + Selenium скриншот элемента - правка кода

C# + Selenium скриншот элемента - правка кода

Нашёл код - который имеет более 60 положительных оценок от пользователей - он делает скриншот элемента, но не как не могу его подвести под поледние...

141
Как совпадение вывести по его номеру из Regex

Как совпадение вывести по его номеру из Regex

Так он дает первое совпадениеА как вывести, к примеру, второе или третье без цикла и page

168
Как убрать border у каждого второго элемента react native?

Как убрать border у каждого второго элемента react native?

Всем привет! Пишу приложение на react native и мне нужно , что бы граница с лева была через элемент , а не у каждогоКак реализовать?

191
Скрыть/показать checkbox

Скрыть/показать checkbox

Помогите,пожалуйста, есть код:

211