Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 07.02.2012, 19:19   #1
S_007
Нуждающийся
 
Аватар для S_007
 
Регистрация: 30.01.2011
Сообщений: 76
Написано одно полезное сообщение
(для 7 участников)
Hex данные через com port

Помогите кто знает, существует ли функция в MidletPaskel что бы в com port отпрвить данные в формате Hex, например 0x31,0x10 и тд.?
Встречал только такую, в формате ASCII.

text:= 'AD123';
s := comm_write_string(text);
(Offline)
 
Ответить с цитированием
Старый 08.02.2012, 16:40   #2
ProgrammerForever
AnyKey`щик
 
Аватар для ProgrammerForever
 
Регистрация: 08.01.2012
Адрес: Новосибирск
Сообщений: 8
Написано 3 полезных сообщений
(для 4 пользователей)
Ответ: Hex данные через com port

Хочешь видеть гипертерминалом 16ричные цифры? Так и надо переводить число в HEX-сторку, что и есть ASCII, потом дописывать (при надобности) символы "0x" и отправлять этой же функцией.
Тебе только нужно найти (или написать) функцию преобразования числа типа byte в строку, содержащую его hex-код.
Как-то так:
function Byte2Hex(n:byte;ap:string) :string;
{Функция перевода байта в 16ричное число}

{n - число для перевода в HEX вид}
{ap - строка-префикс, например '0x'}

{ProgrammerForever (c) 2012}
var
   L,H:byte;
   retval:string;
begin
   L:=n mod 16;
   H:=n div 16;

   Case L of
      0: retval:='0';
      1: retval:='1';
      2: retval:='2';
      3: retval:='3';
      4: retval:='4';
      5: retval:='5';
      6: retval:='6';
      7: retval:='7';
      8: retval:='8';
      9: retval:='9';
      10: retval:='A';
      11: retval:='B';
      12: retval:='C';
      13: retval:='D';
      14: retval:='E';
      15: retval:='F';
	end;

	Case H of
      0: retval:='0'+retval;
      1: retval:='1'+retval;
      2: retval:='2'+retval;
      3: retval:='3'+retval;
      4: retval:='4'+retval;
      5: retval:='5'+retval;
      6: retval:='6'+retval;
      7: retval:='7'+retval;
      8: retval:='8'+retval;
      9: retval:='9'+retval;
      10: retval:='A'+retval;
      11: retval:='B'+retval;
      12: retval:='C'+retval;
      13: retval:='D'+retval;
      14: retval:='E'+retval;
      15: retval:='F'+retval;
	end;

	Byte2Hex:=ap+retval;
end;

Последний раз редактировалось ProgrammerForever, 09.02.2012 в 07:06.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
S_007 (09.02.2012)
Старый 09.02.2012, 10:14   #3
S_007
Нуждающийся
 
Аватар для S_007
 
Регистрация: 30.01.2011
Сообщений: 76
Написано одно полезное сообщение
(для 7 участников)
Ответ: Hex данные через com port

ProgrammerForever огромное спасибо! Буду пробовать...
(Offline)
 
Ответить с цитированием
Старый 09.02.2012, 12:42   #4
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Hex данные через com port

Есть Lib_hex, которая может преобразовывать числа в HEX.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
S_007 (09.02.2012)
Старый 09.02.2012, 18:34   #5
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Hex данные через com port

А может человеку просто нужно не строку а бинарные данные передавать?
(Offline)
 
Ответить с цитированием
Старый 09.02.2012, 19:41   #6
S_007
Нуждающийся
 
Аватар для S_007
 
Регистрация: 30.01.2011
Сообщений: 76
Написано одно полезное сообщение
(для 7 участников)
Ответ: 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? Поделись пожалуйста!

Последний раз редактировалось ViNT, 10.02.2012 в 01:40.
(Offline)
 
Ответить с цитированием
Старый 10.02.2012, 01:46   #7
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Hex данные через com port

Есть два варианта, одна только в hex преобразует, другая может и обратно.

Только не совсем понятно, в чем проблема. Если отправлять строку '10', то и должно приходить '10'. Правильно я понимаю, что вместо 10 приходит 1_0 (т.е. $49$20$48), или как? Может терминал просто криво отображает?
Вложения
Тип файла: zip Libs.zip (808 байт, 600 просмотров)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
S_007 (10.02.2012)
Старый 10.02.2012, 23:58   #8
S_007
Нуждающийся
 
Аватар для S_007
 
Регистрация: 30.01.2011
Сообщений: 76
Написано одно полезное сообщение
(для 7 участников)
Ответ: 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, если есть хоть какой-то пример к твоей либе, скинь пожалуйста!
(Offline)
 
Ответить с цитированием
Старый 11.02.2012, 15:04   #9
ProgrammerForever
AnyKey`щик
 
Аватар для ProgrammerForever
 
Регистрация: 08.01.2012
Адрес: Новосибирск
Сообщений: 8
Написано 3 полезных сообщений
(для 4 пользователей)
Ответ: Hex данные через com port

Чтобы отправить последовательность $10,$41,$0С, используй функцию chr().
s := comm_write_string(chr(16)+chr(65)+chr(12));
должно сработать, в принципе, если тут chr() делает ту же работу, что и в "классическом" Паскале.
[16,65,12 = $10,$41,$0С]
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
S_007 (13.02.2012)
Старый 13.02.2012, 01:02   #10
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Hex данные через com port

ProgrammerForever прав, нужно использовать chr(), подставлять можно сразу в hex, т.е. chr($10).
(Offline)
 
Ответить с цитированием
Старый 13.02.2012, 21:35   #11
S_007
Нуждающийся
 
Аватар для S_007
 
Регистрация: 30.01.2011
Сообщений: 76
Написано одно полезное сообщение
(для 7 участников)
Ответ: Hex данные через com port

Да, ProgrammerForever прав, сработало! Спасибо! Упёрся теперь в другое, всё таки не получается избежать МК, между телефоном и машиной, так как микросхема K_Line байт который получает от телефона сразу отправляет обратно т.е. делает эхо и при этом программа сразу зависает потому что либа com порта, как я понял, даже если делать прием в отдельном потоке, не умеет отправлять и сразу принимать байты. Но тем не менее Спасибо Всем кто учавствовал! Надеюсь, что на будущее это может пригодиться не только мне! Спасибо!
(Offline)
 
Ответить с цитированием
Старый 14.02.2012, 23:12   #12
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Hex данные через com port

А что за микросхема? Неужели нельзя эхо отключить?
(Offline)
 
Ответить с цитированием
Старый 16.02.2012, 13:03   #13
S_007
Нуждающийся
 
Аватар для S_007
 
Регистрация: 30.01.2011
Сообщений: 76
Написано одно полезное сообщение
(для 7 участников)
Ответ: Hex данные через com port

ViNT, эта микросхема, простой адаптер-преобразователь, для сопряжения ПК или МК. K_Linia 12 вольтовая, для наглядности вложил простую схему такого адаптера на транзисторах. В МК есть прерывания как на передачу так и на прием, програмно можно игнорировать эхо. Но мне пришла мысль, незнаю, может получится так, сильно завалило снегом, не могу пока добраться до машины чтоб поэкспериментировать

thread.stop; // останавливаю тред для чтения из порта

s := comm_write_string(chr(16)+chr(65)+chr(12)); //Передаю посылку

thread.init;
thread.start; // запускаю тред для чтения из порта и ожидаю ответа ЭБУ
после приема посылки, снова останавливаю тред и т.д.
Изображения
Тип файла: bmp K_line.bmp (138.0 Кб, 1201 просмотров)
Тип файла: bmp L9637.bmp (901.2 Кб, 1796 просмотров)
(Offline)
 
Ответить с цитированием
Старый 16.02.2012, 18:18   #14
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Hex данные через com port

Думаю, так не получится, эхо дойдет и повесит прогу быстрее, чем запустится поток. Впрочем, по идее можно проверить и без машины, просто замкнув TX и RX мобилы и выдав байт в порт.
Как вариант, можно поискать другой преобразователь, не дающий эхо.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 01:12.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com