15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
1

Непрерывное чтение из Com-порта

20.02.2011, 00:14. Показов 4101. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
После подачи запроса необходимо дождаться ответа с порта.
хотел дописать существующую функцию и непрерывно повторять, однако отрабатывает только 1 цикл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
AnsiString TForm1::SendCommandWithResult(AnsiString command)
{
  unsigned long a;
  char lpBuf1[255];
 
  AnsiString result="";
  command.cat_sprintf("\r");
  if(Edit1->Text!="")   // проверяем на пустой запрос (е хотим получить только ответ) 
  {WriteFile(port,command.c_str(),command.Length(),&a,NULL);
 
  if (a!=command.Length()) return 0; }
  Sleep(500);
  strcpy(lpBuf1,"");
  ReadFile(port,lpBuf1,255,&a,NULL);
 
    if(lpBuf1!="")    /* проверяем на наличие ответа,   по идее при пустом запросе и пустом ответе возвращением 0, однако зависаем */     {
 
   if (strlen(lpBuf1))
  {
  result.sprintf("%s",lpBuf1);
  return result;
  }
 
  }
  else return 0;
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2011, 00:14
Ответы с готовыми решениями:

Непрерывное чтение данных по ComPort
Доброго времени суток! Работаю в RAD Studio XE8. Пишу приложение, обеспечивающее коммуникацию с 2...

Непрерывное чтение и обработка с com порта (последовательный порт) в Visual C++
Здравствуйте, я задумал одну идею с GPS приемником, но для того чтобы реализовать это мне...

Непрерывное чтение вывода консоли
Программе можно передать параметры через консоль при запуске, но можно ли считывать их оттуда уже...

Непрерывное чтение данных из сокета
Всем привет снова я, создал клиент который должен прочитать почту все по логину и паролю...

6
LK
Заблокирован
20.02.2011, 01:00 2
может, вставить код в цикл - while(), for() ?
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,878
Записей в блоге: 1
20.02.2011, 10:24 3
Для начала надо привести код в более читабельный вид:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
AnsiString SendCommandWithResult(AnsiString command)
{
        command += "\r";
 
        unsigned long iWritten;
        if(Edit1->Text != "")   // проверяем на пустой запрос (е хотим получить только ответ)
        {
                WriteFile(port, command.c_str(), command.Length(), &iWritten, NULL);
                if (iWritten != command.Length() ) return 0;
        }
 
        Sleep(500);
 
        char lpBuf1[255];
        unsigned long iReaded;
        ReadFile(port, lpBuf1, 255, &iReaded, NULL);
 
        if(iReaded > 0)    /* проверяем на наличие ответа,   по идее при пустом запросе и пустом ответе возвращением 0, однако зависаем */
        {
                return (AnsiString)lpBuf1;
        }
        else return 0;
}
0
LK
Заблокирован
20.02.2011, 10:59 4
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Для начала надо привести код в более читабельный вид
- а ты случайно своими запятыми логику работы кода не нарушил ?
0
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
20.02.2011, 13:24  [ТС] 5
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Для начала надо привести код в более читабельный вид:
C++
1
  if(Edit1->Text != "")   // проверяем на пустой запрос (е хотим получить только ответ)
Странно компилятор начал ругаться [C++ Error] Unit1.cpp(98): E2451 Undefined symbol 'Edit1'
В моем коде все работало без проблем

Добавлено через 42 минуты
Глюк ушел также внезапно, как и появился
0
68 / 68 / 9
Регистрация: 10.02.2011
Сообщений: 131
20.02.2011, 13:28 6
kzru_hunter Это был не глюк:
Цитата Сообщение от nikooolay Посмотреть сообщение
C++
1
AnsiString TForm1::SendCommandWithResult(AnsiString command)
Цитата Сообщение от kzru_hunter Посмотреть сообщение
C++
1
AnsiString SendCommandWithResult(AnsiString command)
У тебя ф-ция SendCommandWithResult является членом TForm1 поэтому из нее можно обращаться на прямую к Edit1.
А у nikooolay чтобы получить текст из Edit1 - нужно написать:
C++
1
Form1->Edit1->Text
0
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
20.02.2011, 15:21  [ТС] 7
Немного помучал код, и пришел к выводу что функция ReadFile(port, lpBuf1, 255, &iReaded, NULL); - обязана прочесть ответ с порта, даже если его там не предвидится.
Как можно побороть это?
0
20.02.2011, 15:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2011, 15:21
Помогаю со студенческими работами здесь

Чтение из COM порта, При чтении из порта зависает read()
Каждому рано или поздно приходится программировать com порт. Вот и мой черед пришол. Я ужу умею:...

Чтение с com порта
Здравствуйте! Подскажите, пожалуйста, почему у меня read() всегда возвращает значение -1 ? На...

Чтение из COM-порта
Ребят помогите глупому Пашке разобраться с багом в программе. Проблема в том, что программа висит...

Чтение com порта
Хочу реализовать что то вроде терминала для com порта, но все не как не могу реализовать чтение с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru