![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 18.04.2014
Сообщений: 10
|
![]()
Всем привет!
Пробую написать программу для диагностики автомобиля по K-line. К слову, программа пишется в основном для себя и для изучения нового для меня языка программирования. Моих знаний пока что хватило на написание метода коммуникации с блоком управления через СОМ-порт (k-line адаптер на FT232RL). Блок отвечает положительно, значит я на верном пути Только у меня возник вопрос: как отделять в принятом сообщении то, что я послал в порт от ответа блока управления? То есть при посылке пакета startComm = 81 10 F1 81 03 в порт, при чтении из порта я получаю эхо+ответ блока = 81 10 F1 81 03 83 F1 10 C1 6B 8F 3F. Жирным выделен ответ блока, который и требуется далее анализировать. Есть мысли просто проходить по принятому массиву байт и сравнивать с массивом, который я послал в порт. Когда элементы массивов перестанут совпадать, то значит дошли до посылки от блока. Может есть еще какие-нибудь варианты? |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Не очень понимаю почему в ответе идет запрос, но думаю твоя идея правильная.
Впрочем если ответ всегда идет в начале, можно просто вычислить смещение по длине запроса и уже сместив указатель массива считывать.
I'm learning to live...
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 18.04.2014
Сообщений: 10
|
![]()
Спасибо! Думаю, идея со смещением подойдет. Просто запоминать, сколько байт послал в порт (N) и первые N-байт просто отсекать из принятого массива.
Могу ошибаться в своих рассуждениях, но K-line - это один провод, а у COM-порта Rx и Tx. То есть два провода переходят в один ![]() |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 11.04.2014
Сообщений: 21
|
![]()
При смещении только надо проверять, что в начале именно запрос. Т.к. Он там может быть не всегда (учитывая подробность описания проблемы
![]() |
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]() Цитата:
К сожалению, реализаций K-line адаптера множество, начиная от FT-232 + L9637, заканчивая просто на двух транзисторах, поэтому и советовать что-то конкретное при вашем умолчании об реализации нельзя. Однако в данном конкретном случае, наличие эха - не трагедия и решается просто - приемом в буфер и разбором пакета, начиная с длины переданного пакета, т.е. смещения, как и посоветовали выше.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 18.04.2014
Сообщений: 10
|
![]()
raxp, большое спасибо за развернутый ответ! Адаптер собран на FT232RL + L9637. Думаю, что в данном случае нет возможности управлять эхом.
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 18.04.2014
Сообщений: 10
|
![]()
Чтобы не плодить еще одну тему, задам еще один вопрос тут.
Как определить конец посылки из порта? Я использую методику чтения из порта, как написано в MSDN SerialPort.DataReceived - событие Можно ли использовать свойство BytesToRead, чтобы однозначно определить окончание приема байт? |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Функция изменяет старший байт числа на заданное значение,не изменяя младший байт ( C++ ) | Любимый_1 | Помощь студентам | 3 | 07.10.2013 16:42 |
Контрольная сумма массива байт. | ka11n | C# (си шарп) | 1 | 26.02.2013 11:24 |
Найти байт максимальным количестов единиц и байт с максмальным количеством нулей и разность (ассемблер) | Beren42 | Помощь студентам | 0 | 15.12.2010 20:32 |
Получение массива байт JPanel | BleStaR | Общие вопросы по Java, Java SE, Kotlin | 0 | 15.12.2010 17:20 |
Перевод массива битов в байт | Барбарис | Общие вопросы .NET | 4 | 25.02.2010 16:15 |