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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2013, 19:05   #1
Zadovatel
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 46
По умолчанию [Com порт;AT команды]Вывод информации и "мусор в ответе"

Всем привет.На повестке дня 2 вопроса.
1)Что за "мусор" приходит в ответе?

Бордовым подчеркнуто эхо и ответ.Остальное содержимое мне не понятно.
2)Как реализовать нормальный вывод?Сейчас использую вот такой вариант(жирным выделил момент,который мне не нравится):
Код:
procedure ReadComm;
  var
   Resive:array [0..255] of char;
  begin

     while true do
   begin
    TransMask:=0;
    WaitCommEvent(CommHandle,TransMask,@Ovr); //æäåì
    if (TransMask and EV_RXFLAG)=EV_RXFLAG then //ïðîâåðÿåì íóæíîå ñîáûòèå
     begin
      ClearCommError(CommHandle,Errs,@Stat);//ñáðàñûâàåì ôëàã
      Kols := Stat.cbInQue;
      ReadFile(CommHandle,Resive,Kols,Kols,@Ovr);//÷èòàåì
      //òóò äîëæíà èäòè îáðàáîòêà ïðèíÿòîé èíôîðìàöèè èç Resive
      Form1.Edit2.Text:=string(Resive);
      //íå î÷åíü õîðîøèé âàðèàíò âûâîäà, íî äëÿ ïðèìåðà ïîäîéäåò
     end;//mask
    end;//while
  end;
Во-первых,VCL в модуле,во-вторых текст постоянно перезаписывается,а хотелось бы,что бы просто происходил перевод строки.Читаю постоянно в отдельном потоке и при поступление перевода каретки в буфер считываю инфу.
P.S.Копирайты.Частично взят код пользователя со стороннего ресурса.Данные автора:Pasha, pasha676@newmail.ru.
Zadovatel вне форума Ответить с цитированием
Старый 27.08.2013, 19:31   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Остальное содержимое мне не понятно.
это кодировка, проблемы использования юникодной Delphi, к примеру.

Цитата:
Во-первых,VCL в модуле,
никто не заставляет, заведите глобальную переменную и выводите в нее. В другом месте эту переменную визуализируйте. А если речь о визуализации из потока, то синхронизе.

Цитата:
во-вторых текст постоянно перезаписывается,а хотелось бы,что бы просто происходил перевод строки
так добавьте символы переноса и пишите а-ля text:= text + ansistring(Resive) + #13#10. Или просто Memo1.lines.add()/

Цитата:
P.S.Копирайты.Частично взят код пользователя со стороннего ресурса
DW.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 27.08.2013 в 19:37.
raxp вне форума Ответить с цитированием
Старый 27.08.2013, 20:59   #3
Zadovatel
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 46
По умолчанию

Мне кажется,что здесь проблема не в кодировке.Символы очень часто меняются.

Последний раз редактировалось Zadovatel; 27.08.2013 в 22:12.
Zadovatel вне форума Ответить с цитированием
Старый 27.08.2013, 22:28   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...это просто неотображаемые (непечатаемые) символы аски ...выведите их код, байтовое значение и взгляните в таблицу аски.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 27.08.2013 в 22:33.
raxp вне форума Ответить с цитированием
Старый 28.08.2013, 00:33   #5
Zadovatel
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 46
По умолчанию

Привел читалку в терпимый вид и заметил,что сообщения дублируются.В чем может быть причина?

Результат запроса одной команды.В коде поменял только:
Код:
Form1.Memo1.lines.add(ansistring(Resive));
P.S.Обещаюсь завтра вытащить VCL,не пинайте сильно
Zadovatel вне форума Ответить с цитированием
Старый 28.08.2013, 07:34   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
В чем может быть причина?
...буфер очищать надо.

Цитата:
Сообщение от Zadovatel
Об устройстве ничего не известно(в глаза его не видел).
так как же вы с ним работаете, с конем вакуумным?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 28.08.2013, 10:11   #7
Zadovatel
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...буфер очищать надо.

так как же вы с ним работаете, с конем вакуумным?
Да вот так и работаю,методом тыка.Через удаленку тестирую.При помощи подбора AT команд выяснил,что это что-то вроде модема компании Wavecom,отсюда и пляшу.Чистка буфера полностью решила проблему.А стоит ли чистить структуру OVERLAPPED?
Как осуществить вот эту часть:
Цитата:
В другом месте эту переменную визуализируйте.
Я так понимаю,что бы уведомить программу о том,что чтение произведено,необходимо послать ей сообщение,и уже в собственном обработчике производить записывать в memo.Я все правильно понял или это ,как говорится "Рвать гланды через жопу"

Последний раз редактировалось Zadovatel; 28.08.2013 в 14:06.
Zadovatel вне форума Ответить с цитированием
Старый 28.08.2013, 19:01   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
это что-то вроде модема компании Wavecom
у WAVECOM есть офсайт, где куча даташитов на их продукцию. А узнать модель терминала просто классическими командами:

AT+CMGI, должен ответить WAVECOM MODEM.
AT+CGMM, даст рабочие частоты.
AT+CGMR, будет версия ПО.

Зная все это, выясните с чем работаете, зайдете к производителю и скачаете все по модему, его командам и даже примерам работы.

Цитата:
А стоит ли чистить структуру OVERLAPPED
если вы отслеживаете и служебные сигналы.

Цитата:
Я так понимаю,что бы уведомить программу о том,что чтение произведено,необходимо послать ей сообщение,и уже в собственном обработчике производить записывать в memo.Я все правильно понял или это ,как говорится "Рвать гланды через жопу"
в дополнительном потоке или таймере проверяете переменную, если не пустая, визуализируем и очищаем.

Если же вы из потока хотите обращаться к VCL, то вот вам пример:
Код:
type

  // создаем класс-поток
  t = class(TThread)
   procedure Execute; override;
   procedure f;
  end;


var text: ansistring;

procedure T.f;
begin
 // визуализируем
 form1.memo1.lines.add(text);
end;


procedure t.Execute;
begin
 while true do begin

  { ТУТ ВАШЕ ЧТЕНИЕ ПОРТА }
  text:= 
  ...

  Synchronize(f);
 end
end;



...
 // создаем поток
 tt:= t.Create(false);

...
 // уничтожаем поток
 tt.Terminate
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 28.08.2013 в 19:03.
raxp вне форума Ответить с цитированием
Старый 28.08.2013, 23:43   #9
Zadovatel
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 46
По умолчанию

По AT командам вопросов нет.Здесь скорее проблема в моей криворукости и в том,что я уже очень давно не програмил.Огромное вам спасибо за пояснение.Вы будете долго смеяться,но я совсем забыл,что глобальные переменные,объявленные в модуле видны всей программе и уже собирался писать для этих целей класс...

Последний раз редактировалось Zadovatel; 28.08.2013 в 23:48.
Zadovatel вне форума Ответить с цитированием
Старый 29.08.2013, 01:20   #10
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,867
По умолчанию

Цитата:
я совсем забыл,что глобальные переменные,объявленные в модуле видны всей программе
Все переменные объявленные вне процедур/функций являются глобальными, но не все они видны всей программе.
northener вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа функциями "ЕСЛИ", "И" и вывод текстового результата johny_03 Microsoft Office Excel 3 04.08.2014 11:01
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
настроить при открытии Excel 2003 в окошке "Тип файлов" вывод пункта "Все файлы (*.*)" по умолчанию? Unior Microsoft Office Excel 2 01.03.2009 02:42