Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
oldhowl
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 4
1

Сообщения фиксированной длины через COM порт

05.07.2016, 06:47. Просмотров 895. Ответов 3

Нужно опрашивать прибор по COM порту. Протокол RS232. Я бы мог спросить в других ветках, суть одна - байты. в ветке шарпа народ кажется более УМНЕЕ. Что хотят здесь от меня? я не могу разобраться.

Обмен реализован сообщениями фиксированной длины.
Формат сообщения следующий:
0 3 4 5 L-3 L-2 L-1
адрес прибора Код команды Параметры или данные 9, 25 или 65 байт контр. сумма
Длина сообщения L равна 16,32 или 72 байта в зависимости от количества данных.
Адрес прибора задается в двоично-десятичном коде и соответствует серийному номеру прибора. Младший байт адреса передается первым. При работе с сетью приборов адрес должен указываться в каждой команде. Для автоматического определения адреса одиночного прибора допустимо использовать команду запроса версии с широковещательным адресом 54535251.
Контрольная сумма:1-й байт сумма по модулю 2
2-й байт сумма по модулю 256
Формат ответа такой же. При успешном выполнении команды в байте 4 возвращается код команды, иначе возвращается код ошибки или ответа не будет совсем. Перечень ошибок приведен в Таблице 9.
1) Почему пишут "Для автоматического определения адреса одиночного прибора допустимо использовать команду запроса версии с широковещательным адресом 54535251"
Но в мониторе видно что порядок вообще обратный, а именно надо посылать в таком порядке:
C#
1
byte[] broadcastInvoke = { 0x51, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4A };
Почему в обратном порядке отправлено первые 4 байта?
Кликните здесь для просмотра всего текста
Эту строку я скопипастил из монитора и сделал массив, тестировал соединение


2)L-3, L-2,L-1 это длина в байтах? Вот есть команда 14 (запрос заголовка архива с устройства). Адрес устройства я получил, команда 14, параметры команды 01. Заполняю: 35 51 00 00 14 01 XX XX XX XX XX XX XX XX XX XX - что в этих иксах писать? Я могу конечно посмотреть монитор опять, но я не пойму суть.
2) Поясните про контрольные суммы по модулю 2 и 256 - как их генерить? Я понимаю что это XOR, но что складывать и как выводить в сообщение? Какой порядок? Какие байты складываются? опять обратный порядок в контрольй сумме или нет?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2016, 06:47
Ответы с готовыми решениями:

Нужна библиотека для возможности отсылать сообщения клавиатуры через порт PS/2 в обход API функций
Перепробовал кучу различных вариантов эмуляции клавиш, пришел к выводу что единственным рабочим...

Как в C# задать переменную типа string фиксированной длины?
как в C# задать переменную типа string фиксированной длины? В vb это делается так: st As String *...

Описать класс для работы с одномерным массивом строк фиксированной длины
помогите пожалуйста!) Описать класс для работы с одномерным массивом строк фиксированной длины....

Описать класс для работы с одномерным массивом строк фиксированной длины
Описать класс для работы с одномерным массивом строк фиксированной длины. Обеспечить следующие...

Описать класс для работы с одномерным массивом строк фиксированной длины
По заданию нужно Описать класс для работы с одномерным массивом строк фиксированной длины. Не...

3
Rius
Эксперт .NET
6213 / 4042 / 970
Регистрация: 25.05.2015
Сообщений: 12,230
Записей в блоге: 12
Завершенные тесты: 4
05.07.2016, 08:10 2
Лучший ответ Сообщение было отмечено oldhowl как решение

Решение

Цитата Сообщение от oldhowl Посмотреть сообщение
Почему пишут "Для автоматического определения адреса одиночного прибора допустимо использовать команду запроса версии с широковещательным адресом 54535251"
Но в мониторе видно что порядок вообще обратный, а именно надо посылать в таком порядке:
Потому что:
Цитата Сообщение от oldhowl Посмотреть сообщение
Младший байт адреса передается первым.


Цитата Сообщение от oldhowl Посмотреть сообщение
Формат сообщения следующий:
Таблицей приведите. Смешались в кучу кони, люди...
Цитата Сообщение от oldhowl Посмотреть сообщение
L-3, L-2,L-1 это длина в байтах?
Это номер или индекс байта в пакете.

Добавлено через 4 минуты
Цитата Сообщение от oldhowl Посмотреть сообщение
модулю 2 и 256
2: xor всех предшествующих байт;
256: сумма всех предшествующих байт, взять младший байт суммы.
1
oldhowl
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 4
05.07.2016, 11:55  [ТС] 3
Разобрался, только не могу CRC победить
0x35^0x51^0x02
складываю на калькуляторе XOR - получаю 66. Складываю в коде через ^ получаю 18.
Что я делаю не так?

Цитата Сообщение от Rius Посмотреть сообщение
2: xor всех предшествующих байт;
256: сумма всех предшествующих байт, взять младший байт суммы.
0
Rius
Эксперт .NET
6213 / 4042 / 970
Регистрация: 25.05.2015
Сообщений: 12,230
Записей в блоге: 12
Завершенные тесты: 4
05.07.2016, 12:01 4
C#
1
byte[] broadcastInvoke = { 0x51, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4A };
0x51 xor 0x52 xor 0x53 xor 0x54 = 0x04 (в калькуляторе)

C#
1
2
3
4
5
6
byte[] bytes = new byte[] { 0x35, 0x51, 0x02 };
byte crc = 0;
foreach (var b in bytes)
{
  crc ^= b;
}
crc == 0x66, и в калькуляторе, и в коде.
1
05.07.2016, 12:01
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2016, 12:01

Описать класс для работы с одномерным массивом строк фиксированной длины
Описать класс для работы с одномерным массивом строк фиксированной длины. Обеспечить следующие...

Описать класс для работы с одномерным массивом строк фиксированной длины
Описать класс для работы с одномерным массивом строк фиксированной длины. Обеспечить следующие...

Описать класс для работы с одномерным массивом строк фиксированной длины
Нужна помощь в решении задачи, по возможности с объяснением, т.к. я ее совсем не понимаю. Заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.