![]() |
Hex данные через com port
Помогите кто знает, существует ли функция в MidletPaskel что бы в com port отпрвить данные в формате Hex, например 0x31,0x10 и тд.?
Встречал только такую, в формате ASCII. text:= 'AD123'; s := comm_write_string(text); |
Ответ: Hex данные через com port
Хочешь видеть гипертерминалом 16ричные цифры? Так и надо переводить число в HEX-сторку, что и есть ASCII, потом дописывать (при надобности) символы "0x" и отправлять этой же функцией.
Тебе только нужно найти (или написать) функцию преобразования числа типа byte в строку, содержащую его hex-код. Как-то так: Код:
function Byte2Hex(n:byte;ap:string) :string; |
Ответ: Hex данные через com port
ProgrammerForever огромное спасибо! Буду пробовать...
|
Ответ: Hex данные через com port
Есть Lib_hex, которая может преобразовывать числа в HEX.
|
Ответ: Hex данные через com port
А может человеку просто нужно не строку а бинарные данные передавать?
|
Ответ: Hex данные через com port
ViNT, Phantom спасибо что включились в эту тему! Проблема такая:
если я передаю в порт к примеру цифру 10 text:= '10'; s := comm_write_string(text); то в терминале получаю 49, 48, или 1C в терминале 49, 67, а как добиться чтобы на выходе порта было именно 10 - 1С, а не раздельно 1 и 0, или 1 и С? ViNT, а у тебя есть такая библиотека Lib_hex? Поделись пожалуйста! |
Ответ: Hex данные через com port
Вложений: 1
Есть два варианта, одна только в hex преобразует, другая может и обратно.
Только не совсем понятно, в чем проблема. Если отправлять строку '10', то и должно приходить '10'. Правильно я понимаю, что вместо 10 приходит 1_0 (т.е. $49$20$48), или как? Может терминал просто криво отображает? |
Ответ: Hex данные через com port
ViNT, Спасибо огромное! Я извеняюсь, что ввел в заблуждение из-за того что не точно всё объяснил. Hyper Terminal принимает правильно если отправить - 10 то и будет - 10, если отправить символ - А то и будет отображаться - А. Ну вначале немного напишу суть моей задумки, сейчас почти на всех современных машинах стоят блоки управления двигателем, есть идея написать программу для диагностики двигателей телефоном, и точно знаю это реально, протокол блоков управления известен, есть опыт связи с ними, но только при помощи микроконтроллеров, собирал на них бортовые компьютеры для себя и для друзей, связь микроконтроллера и ЭБУ осуществляется через юсарт, на выходе юсарта сигналы TX-RX, (такие же как и у мобилы) при помощи специальной микросхемы объединяются в один выход и общение ЭБУ и контроллера происходит по одному проводу т.е. K_Line. Здесь многие могут спросить - вчем проблема - цепляеш к контроллеру дисплей, клаву и все дела... Но у мобилы больше ресурсов, скорость побольше, оперативки, да программу можно наворотить до беспредела. Так вот в чем сама проблема, чтобы связаться с ЭБУ нужно отправить посылку к примеру $10,$41,$0С после этого ждем ответа пробуждения ЭБУ и т.д, я подключал к мобиле контроллер, к контроллеру дисплей, вот этим text:= '10'; s := comm_write_string(text); отправил, контроллер из буфера юсарта выводит на экран, чистый без всяких преобразований каждый байт и вот что я увидел, первый байт был 49 - это десятичная 1 (в хэксе 31) а второй байт 48 - это десятичный 0 (в хэксе 30). А ведь надо чтобы было - по протоколу - первый байт в буфере должен быть $10 второй $41 и третий $0С. Получается мобила каждый символ из этой переменной text:= '10'; отправляет в порт по отдельности, причем в десятичном виде. Если кто знает как можно програмно выйти с положения, помогите, за ранее благодарен! ViNT, если есть хоть какой-то пример к твоей либе, скинь пожалуйста!
|
Ответ: Hex данные через com port
Чтобы отправить последовательность $10,$41,$0С, используй функцию chr().
Код:
s := comm_write_string(chr(16)+chr(65)+chr(12)); [16,65,12 = $10,$41,$0С] |
Ответ: Hex данные через com port
ProgrammerForever прав, нужно использовать chr(), подставлять можно сразу в hex, т.е. chr($10).
|
Ответ: Hex данные через com port
Да, ProgrammerForever прав, сработало! Спасибо! Упёрся теперь в другое, всё таки не получается избежать МК, между телефоном и машиной, так как микросхема K_Line байт который получает от телефона сразу отправляет обратно т.е. делает эхо и при этом программа сразу зависает потому что либа com порта, как я понял, даже если делать прием в отдельном потоке, не умеет отправлять и сразу принимать байты. Но тем не менее Спасибо Всем кто учавствовал! Надеюсь, что на будущее это может пригодиться не только мне! Спасибо!
|
Ответ: Hex данные через com port
А что за микросхема? Неужели нельзя эхо отключить?
|
Ответ: Hex данные через com port
Вложений: 2
ViNT, эта микросхема, простой адаптер-преобразователь, для сопряжения ПК или МК. K_Linia 12 вольтовая, для наглядности вложил простую схему такого адаптера на транзисторах. В МК есть прерывания как на передачу так и на прием, програмно можно игнорировать эхо. Но мне пришла мысль, незнаю, может получится так, сильно завалило снегом, не могу пока добраться до машины чтоб поэкспериментировать
thread.stop; // останавливаю тред для чтения из порта s := comm_write_string(chr(16)+chr(65)+chr(12)); //Передаю посылку thread.init; thread.start; // запускаю тред для чтения из порта и ожидаю ответа ЭБУ после приема посылки, снова останавливаю тред и т.д. |
Ответ: Hex данные через com port
Думаю, так не получится, эхо дойдет и повесит прогу быстрее, чем запустится поток. Впрочем, по идее можно проверить и без машины, просто замкнув TX и RX мобилы и выдав байт в порт.
Как вариант, можно поискать другой преобразователь, не дающий эхо. |
Часовой пояс GMT +4, время: 21:17. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot