Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2013, 19:36   #1
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию Терминал BComPort выдает иероглифы.

Здравствуйте. У меня с компьютером, с помощью виртуального Com-порта, связано устройство(контроллер Arduino). Так вот это устройство отправляет в порт данные.Когда отправляет по одному символу то все приходит нормально, но когда отправляет несколько символов за раз приходят китайские иероглифы.И из сотен иероглифов местами иногда могут проскакивать те символы что я отправлял. может кто подскажет в чем проблема? Сторонние терминалы(например com_terminal-1.9b) принимают все отлично. Принимаю в delphi терминалом который шел в примере с компонентом.
Заранее всем спасибо
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 23.11.2013, 22:00   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...дуина отправляет в аски. Показывайте код приема у вас и дамп, снятый сниффером при данном обмене.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 24.11.2013, 00:09   #3
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...дуина отправляет в аски. Показывайте код приема у вас и дамп, снятый сниффером при данном обмене.
код приема:
procedure TMainForm.BComPort1RxChar(Sender: TObject; Count: Integer);
var
S: String;
begin
BComPort1.ReadStr(S, Count);
if cbCRLF.Checked and (S[Length(S)] = #13) then // Добавление перевода строки
S := S + #10;
Memo1.Text := Memo1.Text + S;
end;

фото того что приходит в терминалы.
http://modernlife.ucoz.ru/photo/1-0-5-3

не совсем понял про дамп? как его снять? и какой сниффер пользовать?
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 24.11.2013, 11:31   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Сниффер - Portmon.
Версия Delphi - юникодная? Попробуйте заменить во всех методах string на ansistring или:
Код:
procedure tform1.rec(Sender: TObject; Count: Integer);
var s: ansistring;
    i: Integer;
    t: array[1..255] of ansiChar;
begin
 str:= '';
 //bc.ReadStr(s, count);

 BC.Read(t, count);
 for i:= 1 to count do begin
  str:= str + t[i];
 end;
 
 if cbCRLF.Checked and (S[Length(S)] = #13) then // Добавление перевода строки
 S := S + #10;
 
 Memo1.Lines.SetText(Memo1.Lines.GetText + s);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 MEMO1.CLEAR;
...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 24.11.2013, 22:24   #5
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
Сниффер - Portmon.
Версия Delphi - юникодная? Попробуйте заменить во всех методах string на
...[/CODE]
насчет версии не знаю.а где это посмотреть можно?
а вообще делфи 2009 так что скорее всего юникодный
Portmonom не понял как работать.
Сделал другой утилитой (вот фотка:
http://modernlife.ucoz.ru/photo/1-0-6-3

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

Последний раз редактировалось azzzazzzelDEAN; 24.11.2013 в 22:40.
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 25.11.2013, 04:54   #6
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Обычно в таких случаях скорость порта неправильно выставлена.
Пробуй разную скорость
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 25.11.2013, 08:35   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Скорость порта в чужом терминале и у него = 9600.

Цитата:
пример кода который вы привели вставил он не работает, пытался все стринг на ансистринг заменить, но тоже не работает - делфи ругается.
у меня работает. Какую ошибку пишет и как именно вы вставили, тупой копипаст?

Цитата:
Portmonom не понял как работать.
элементарно, выбрать порт, нажать кнопку HEX и захват, дамп - лог обмена в текстовом виде в тему, ваши какахостинги задолбали уже в виде картинок.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 25.11.2013, 14:26   #8
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
Скорость порта в чужом терминале и у него = 9600.

у меня работает. Какую ошибку пишет и как именно вы вставили, тупой копипаст?

элементарно, выбрать порт, нажать кнопку HEX и захват, дамп - лог обмена в текстовом виде в тему, ваши какахостинги задолбали уже в виде картинок.
подшаманил ваш предыдущий код и вот теперь заработало.
Цитата:
procedure TMainForm.BComPort1RxChar(Sender: TObject; Count: Integer);
var str: ansistring;
i: Integer;
t: array[1..255] of ansiChar;
begin
str:= '';

BComPort1.Read(t, count);
for i:= 1 to count do begin
str:= str + t[i];
end;

if cbCRLF.Checked and (Str[Length(Str)] = #13) then // Добавление перевода строки
Str := Str + #10;

//Memo1.Lines.SetText(Memo1.Lines.Get Text + str);
memo1.Text:=memo1.Text+str
end;
На то как вы реализовали запись в Memo компилятор ругается(говорит что то про типы Char и Ansistring).
минуты полторы две погонял вроде косяков нету. и сейчас слово arduino каждый раз приходит с переносом на новую строку а раньше все приходило в одну строку.

в портмоне кнопка порт неактивна и не могу выбрать.
А вот дамп с другой проги:
Цитата:
[25/11/2013 18:16:47] Read data
41 A
[25/11/2013 18:16:47] Read data
52 44 55 RDU
[25/11/2013 18:16:47] Read data
49 4e 4f 0d INO.
[25/11/2013 18:16:47] Read data
0a .
[25/11/2013 18:16:47] Read data
41 A
[25/11/2013 18:16:47] Read data
52 44 55 RDU
[25/11/2013 18:16:47] Read data
49 4e 4f 0d INO.
[25/11/2013 18:16:47] Read data
0a .
[25/11/2013 18:16:47] Read data
41 A
[25/11/2013 18:16:47] Read data
52 44 55 49 RDUI
[25/11/2013 18:16:47] Read data
4e 4f 0d NO.
[25/11/2013 18:16:47] Read data
0a .
[25/11/2013 18:16:48] Read data
41 A
[25/11/2013 18:16:48] Read data
52 44 55 49 RDUI
[25/11/2013 18:16:48] Read data
4e 4f 0d NO.
[25/11/2013 18:16:48] Read data
0a .
[25/11/2013 18:16:48] Read data
41 A
[25/11/2013 18:16:48] Read data
52 44 55 49 RDUI
[25/11/2013 18:16:48] Read data
4e 4f 0d NO.
[25/11/2013 18:16:48] Read data
0a .
[25/11/2013 18:16:48] Read data
41 A
[25/11/2013 18:16:48] Read data
52 44 55 49 RDUI
[25/11/2013 18:16:48] Read data
4e 4f 0d 0a NO..
вот не пойму от куда точки берутся я их то не отправляю.или это норм? в делфи сейчас все нормально без точек приходит

И еще один вопрос. В чем косяк был почему не работало со стандартным примером а с этим заработало?

Сейчас следующая задача у меня будет, отсылать координаты через мое устройство и рисовать на канве в соответствии с этими координатами. Если возникнут вопросы буду спрашивать
А пока Спасибо за помощь

Последний раз редактировалось azzzazzzelDEAN; 25.11.2013 в 14:37.
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 25.11.2013, 15:11   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
На то как вы реализовали запись в Memo компилятор ругается(говорит что то про типы Char и Ansistring).
минуты полторы две погонял вроде косяков нету.
надо писать что за ошибки в теме сразу. А так, пишу по памяти обычно . Ну, и привести типы к единому тоже вам никто не мешает.

Цитата:
и сейчас слово arduino каждый раз приходит с переносом на новую строку а раньше все приходило в одну строку
вообще, вы так задумали, разве нет? С другой стороны, что вам мешает просто писать - memo.lines.add()?

Цитата:
в портмоне кнопка порт неактивна и не могу выбрать.
ОС семерка? В ней работать не будет, Руссинович ушел оттуда к тому моменту.

Цитата:
вот не пойму от куда точки берутся я их то не отправляю.или это норм?
неотображаемые символы сниффер так отображает, это интерпретация CR LF в данном случае.

Цитата:
И еще один вопрос. В чем косяк был почему не работало со стандартным примером а с этим заработало?
потому что у вас юникодная Delphi + по разному воспринимается тип string в разных версиях (в методе ReadStr() компонента он и используется). У меня же доступ через чтение буфера и непосредственное выделение памяти в один байт для каждого символа в принятом массиве, как и положено.

Цитата:
Сейчас следующая задача у меня будет, отсылать координаты через мое устройство и рисовать на канве в соответствии с этими координатами. Если возникнут вопросы буду спрашивать
вообще, если вы изначально не обозначили тему как единую, скажем под то же устройство GPS, то принято: 1 вопрос - 1 тема. Иначе месиво будет.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 25.11.2013 в 15:13.
raxp вне форума Ответить с цитированием
Старый 25.11.2013, 15:30   #10
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
вообще, вы так задумали, разве нет? С другой стороны, что вам мешает просто писать - memo.lines.add()?
да так большой разницы нет как в мемо отображаться будет большой разницы нет(с переносом нагляднее). Основная суть использовать данные для других целей - некоторые данные в массив будут занасится, некоторые в базу данный. и т.д.

Цитата:
Сообщение от raxp Посмотреть сообщение
ОС семерка? В ней работать не будет, Руссинович ушел оттуда к тому моменту.
да 7ка.

Цитата:
Сообщение от raxp Посмотреть сообщение
вообще, если вы изначально не обозначили тему как единую, скажем под то же устройство GPS, то принято: 1 вопрос - 1 тема. Иначе месиво будет.
хорошо если что создам только по уму наверное потоки сделать для этих целей? а то я немного попробовал нифига не работает(одна строка приходит и одна линия рисуется)
azzzazzzelDEAN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
терминал Microlot gugushka Компьютерное железо 0 19.10.2012 11:31
Терминал Линукс! Necare Помощь студентам 3 20.04.2011 17:22
Операционная система - терминал rushei Операционные системы общие вопросы 3 05.08.2009 04:34
пробема кодировки при копировании текса через буф.обмена выдает иероглифы! Linx Общие вопросы Delphi 3 29.05.2007 23:12