Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение из COM порта 
:(
    Опции темы
Static
Дата 9.9.2009, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 6.11.2008

Репутация: нет
Всего: 2



Пример не помог. Ибо если его скопипастить - получается то же самое. Но елки-ж-палки! Терминал-то работает!!!
--------------------
Я не настолько безнадежен, как кажется...
PM MAIL   Вверх
smoke_man
Дата 9.9.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



Вот пример - проверил на своем модеме.
Код


#include <windows.h>
#include <iostream>
#include <cstdlib>


int main()
{
    //Это вместо DWORD
    unsigned long int portErr      = 0;
    int count = 0;
    //Посылаемые данные в порт
    const  char *buff = "at\r\n";
    //Буфер под данные из порта 
    char *Inbuff = new char[255];
    //Количесвто записанных байт в порт и прочитанных из порта
    DWORD WritingByte = 0, ReadByte = 0;
    //Таймаут на прием
    int notanswer = 10000;
    //Струкутра состояния порта
    _COMSTAT st;
    //Структура настройки порта
    DCB dcb;
    //Таймаут порта
    COMMTIMEOUTS timeouts = {MAXDWORD,MAXDWORD,600,0,0};
    //Открываем com-порт 1
    HANDLE ComHandle=CreateFileA("\\\\.\\COM20",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0); 
    if (ComHandle == INVALID_HANDLE_VALUE)
    {

        MessageBoxA(NULL,"Порт не создан","!",MB_OK);
        delete Inbuff;

        return 0;
    }
    //После открытия настраиваем его
    SetupComm(ComHandle,1024,1024);
    SetCommTimeouts(ComHandle,&timeouts);
    GetCommState(ComHandle,&dcb);
    dcb.DCBlength = sizeof(dcb);
    dcb.BaudRate= 57600;
    dcb.fParity = FALSE;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;

    dcb.fBinary = TRUE;
    dcb.fOutxCtsFlow = FALSE;
    dcb.fOutxDsrFlow = FALSE;
    dcb.fDtrControl = DTR_CONTROL_ENABLE;
    dcb.fDsrSensitivity = FALSE;
    dcb.fOutX = FALSE;
    dcb.fInX = FALSE;
    dcb.fNull = FALSE;
    dcb.fRtsControl = RTS_CONTROL_DISABLE;
    dcb.fAbortOnError = TRUE;

    dcb.StopBits = ONESTOPBIT;
    //Устанавливаем настройки
    SetCommState(ComHandle,&dcb);

    EscapeCommFunction(ComHandle, SETRTS);
    EscapeCommFunction(ComHandle, SETDTR);
    //Сбрасываем ошибки
    ClearCommError(ComHandle,&portErr,NULL);
    PurgeComm(ComHandle, PURGE_TXCLEAR | PURGE_RXCLEAR);


    //ПИшем в порт 2  байта
    WriteFile(ComHandle,buff,4,&WritingByte,NULL);
    if(WritingByte == 0)
    {
        MessageBoxA(NULL,"Ошибка записи","!",MB_OK);
        delete Inbuff;

        return 0;
    }
    //Принимаем данные из порта
    Sleep(2000);
    while(count<=0)
    {
        ClearCommError(ComHandle,&portErr,&st);
        //Считываем количесво принятых байт
        count = st.cbInQue;
        //Проверяем наш таймаут
        if(notanswer == 0)
        {

            MessageBoxA(NULL,"Нет ответа","!",MB_OK);
            delete Inbuff;
            return 0;
        }
        if(count<=0)
        {
            notanswer--;
            continue;
        }
        //Если данные есть в порте читаем их и выходи из цикла приема
        ReadFile(ComHandle,Inbuff,count,&ReadByte,NULL);
        break;
    }
    for(int i = 0;i<count;i++)
    {
        std::cout<<Inbuff[i];
    }
    system("PAUSE");

    return EXIT_SUCCESS;
}

Успешно работает.
Картинка прилагается.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Screen.rar 7,22 Kb


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Static
Дата 9.9.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 6.11.2008

Репутация: нет
Всего: 2



Спасибо за пример. А теперь внимание (барабанная дробь). У меня с этим кодом НИ-ЧЕ-ГО не поменялось. Что может быть не так кроме кода? Настройки проекта, подключаемые либы, качество кожи на бубне?

Добавлено через 4 минуты и 34 секунды
так... я добился от модема ответа. Пока не понял, как именно smile Всем, кто участвовал - спасибо еще раз. Пошел мучать железяку
--------------------
Я не настолько безнадежен, как кажется...
PM MAIL   Вверх
Static
Дата 9.9.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 6.11.2008

Репутация: нет
Всего: 2



Проблема все же была в недоинициализированной структуре dcb. Вот так... :(
--------------------
Я не настолько безнадежен, как кажется...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0668 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.