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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2013, 16:10   #11
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

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

Цитата:
Сообщение от raxp Посмотреть сообщение
...в модуле и так создается своя нить (поток) для приема данных. Если бы не использовали обертку BCPort, а сами, тогда да.
тут странность образовалась, добавил строку edit2.Text:=str, но почемуто в едит не все данные записываются, например вместо Range: отображаются только обрывки слова. Такое ощущение что буфер какойто нужен или что то вроди того.

Цитата:
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.Text:=memo1.Text+str;
edit2.Text:=str;
gstr:=str;
end;
а если пишу строку edit2.Text:=edit2.Text+str; то все нормально добавляет.
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 26.11.2013, 14:54   #13
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

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

Цитата:
Сообщение от raxp Посмотреть сообщение
...вы изначально неправильно подошли к вопросу мониторинга. Вы смотрите на вопрос визуализации в однострочном компоненте, забывая о нечитаемых символах и переводах строки. Просто выводите байтовое отображение данных в HEX параллельно с визуализацией куда-нибудь, тогда будете видеть, что на самом деле приходит.
А как реализовать с помощью этого компонента это?
я с Delphi пока еще на вы

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

...так компонент-то ни причем.

Есть буфер-массив байт, размер буфера известен. Пройдитесь циклом по всем элементам массива и примените inttohex(byte[i], 2) и накопите это текстовое уже отображение через пробел в одну переменную, ее то и выводите в EDIT/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 27.11.2013, 14:09   #16
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...вы изначально неправильно подошли к вопросу мониторинга. Вы смотрите на вопрос визуализации в однострочном компоненте, забывая о нечитаемых символах и переводах строки. Просто выводите байтовое отображение данных в HEX параллельно с визуализацией куда-нибудь, тогда будете видеть, что на самом деле приходит.
я как понимаю зполнять нужно в том же цикле что и str заполняется?

Цитата:
BComPort1.Read(t, count);
for i:= 1 to count do begin
str:= str + t[i];
end;
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 27.11.2013, 14:38   #17
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

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

Цитата:
Сообщение от raxp Посмотреть сообщение
...так компонент-то ни причем.

Есть буфер-массив байт, размер буфера известен. Пройдитесь циклом по всем элементам массива и примените inttohex(byte[i], 2) и накопите это текстовое уже отображение через пробел в одну переменную, ее то и выводите в EDIT/
так вроде как буфер массив в формате ansiChar - (t: array[1..255] of ansiChar , а inttohex(byte[i], 2) насколько я знаю целые числа преобразует в шестнадцетеричные?
а пока заметил такую фишку, ели заполнять memo таким образом:
memo2.lines.Add(t);

то все приходит в memo без потерь, но в разорванном виде:
(R-124)приходит как:
Цитата:
R-
12
4

R-
1
24
R-12
4


R-1
24
Вот теперь до меня дошло почему в Edit все отрывками приходит.
Только не совсем понятно по каким критериям формировать массив в который будет заполнятся элементы(R- 12 4) пока не накопятся в полноценную строку(R-124)? может попробовать проверить так: если элемент массива равен R то записываем в массив R плюс еще 4 элемента?
хотя наверное глупо будет если в друг в строке будет больше 5ти символов или меньше, может тогда заключать строку перед отправкой в какие нибудь скобки внутри которых и будет строка? вот как бы грамотнее реализовать это не знаю
может я не верно мыслю?

Последний раз редактировалось azzzazzzelDEAN; 27.11.2013 в 20:50.
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 27.11.2013, 23:02   #19
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

написал функцию которая, собирает в себя элементы массива, и выдает только готовый код(типа D256. Правда срабатывает только процентах 70-80
Цитата:
function preobr(var str: string): string;
var
i:integer;
com:string;
begin
for I := 1 to length(str) do
begin
if str[i]='D' then
begin
str1:='';
str1:=str1+str[i];
end;

if (str[i]<>' ') and (str[i]<>'D') and (str[i]<>';') then
begin
str1:=str1+str[i];
end;

if str[i]=';' then
begin
com:=str1+str[i];
end;
end;
Result:=com;
end;
переменная str1 глобальная, по другому не знал как сделать чтоб данные набивались до той степени пока не получим целую строку(типа D256.
Цитата:
procedure TMainForm.BComPort1RxChar(Sender: TObject; Count: Integer);
var str: ansistring;
st1,st2:string;
i: Integer;
t: array[1..255] of ansiChar;
begin
str:= '';
//bc.ReadStr(s, count);

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

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

memo1.Text:=memo1.Text+str;
end;
думаю есть более грамотный способ реализации ведь memo знает когда перенос строки делать а когда нет
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 27.11.2013, 23:20   #20
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
так вроде как буфер массив в формате ansiChar - (t: array[1..255] of ansiChar , а inttohex(byte[i], 2)
вы снова не поняли. Есть таблица аски символов, среди них есть неотображаемые. Есть байт-код символа, к примеру ord('1') = 0x31, char($31) = '1'. Inttohex() даст вам их 16-тиричное отображение текстом.

Цитата:
Вот теперь до меня дошло почему в Edit все отрывками приходит.
а это уже зависит как вы передаете. В буратине есть несколько методов передачи.

Цитата:
? вот как бы грамотнее реализовать это не знаю
реализуйте пакетную передачу с признаком окончания пакета, скажем пусть им будет #13. Когда на верхнем уровне встречаете этот символ, пакет принят.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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