Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]Передача команды по COM порту 
V
    Опции темы
Moby
Дата 26.2.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем привет!

Мне надо по COM порту послать команду, одну букву, если быть точным. 

Как мне это сделать.

Я нашел несколько ресурсов, но везде люди обращались с проблемами, которые мне не помогли.

Гуглить не получается, нормального туториала не могу найти.

Дайте пожалуйста либо ссылку, либо код. smile

Заранее спасибо!



PM MAIL ICQ   Вверх
mes
Дата 26.2.2010, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



в винде ? открыть как файл и писать в него.
см. msdn : CreateFile и т.д


--------------------
PM MAIL WWW   Вверх
Moby
Дата 26.2.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, в винде. 

Вот я как раз и нашел инфу про то, что открыть файл и т.п. Но не уже ли все так просто? 

Вот код, который я нашел. Прошу помочь разобраться.

Вот тут человек открывает порт
Код

hPort = CreateFile( [color=orangered]portName[/color],
                    GENERIC_READ | GENERIC_WRITE,
                    0,    // must be opened with exclusive-access
                    NULL, // default security attributes
                    OPEN_EXISTING, // must use OPEN_EXISTING
                    FILE_FLAG_NO_BUFFERING|FILE_FLAG_WRITE_THROUGH,    // not overlapped I/O
                    NULL  // hTemplate must be NULL for comm devices
                    );
if (hPort != INVALID_HANDLE_VALUE){
        int err = 0;
        int status = 0;
        // делаем специфичный запрос для COM-порта, чтобы убедится что это он
        if (GetCommModemStatus(hPort,&status)){
            // чистим входную и выходную очередь
            PurgeComm(hPort,PURGE_RXCLEAR|PURGE_TXCLEAR|PURGE_RXABORT|PURGE_TXABORT);            
            // сбрасываем возможную ошибку
            ClearCommError(hPort,&err,NULL);
            // размеры буфферов для модема
            SetupComm(hPort,1024,1024);

            SecureZeroMemory(&timeouts,sizeof(timeouts));
            timeouts.ReadIntervalTimeout          = MAXDWORD;
            timeouts.ReadTotalTimeoutMultiplier   = 0;
            timeouts.ReadTotalTimeoutConstant     = 1;    
            timeouts.WriteTotalTimeoutMultiplier  = 0;
            timeouts.WriteTotalTimeoutConstant    = 1;
            
            // ставим таймаут чтения/записи
            SetCommTimeouts(hPort,&timeouts);
        } 
        return;
    }


Тут вопрос, что делать с portName? Или просто тупо написать "COM1"?

Тут человек настраивает.
Код

DCB dcb;

    SecureZeroMemory(&dcb, sizeof(DCB));
    dcb.DCBlength = sizeof(DCB);

        GetCommState(hPort,&dcb);
    
        // тут ставим скорость, дата биты и т д 

    dcb.fAbortOnError = FALSE;
    dcb.fDsrSensitivity = FALSE;
       SetCommState(hPort, &dcb);



Тут вопрос. А что насчет настроек бод, информационных бит, стоповый бит, чётность? Мне просто сказали определенные настройки COM порта.
PM MAIL ICQ   Вверх
mes
Дата 26.2.2010, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(Moby @  26.2.2010,  17:35 Найти цитируемый пост)
Тут вопрос, что делать с portName? Или просто тупо написать "COM1"?

а вот это для чего написано было :
Цитата(mes @  26.2.2010,  16:54 Найти цитируемый пост)
см. msdn : CreateFile и т.д 

 smile 
Цитата

Communications Resources

The CreateFile function can create a handle to a communications resource, such as the serial port COM1. For communications resources, the dwCreationDisposition parameter must be OPEN_EXISTING, the dwShareMode parameter must be zero (exclusive access), and the hTemplateFile parameter must be NULL. Read, write, or read/write access can be specified, and the handle can be opened for overlapped I/O.

To specify a COM port number greater than 9, use the following syntax: "\\.\COM10". This syntax works for all port numbers and hardware that allows COM port numbers to be specified


Цитата(Moby @  26.2.2010,  17:35 Найти цитируемый пост)
А что насчет настроек бод, информационных бит, стоповый бит, чётность?

если б внимательно прочитали бы вышеприведенную ссылку, то дошли б и до этого примера
http://msdn.microsoft.com/en-us/library/aa...28VS.85%29.aspx
а также нашли бы описание структуры DCB :
http://msdn.microsoft.com/en-us/library/aa...28VS.85%29.aspx
 smile 



--------------------
PM MAIL WWW   Вверх
Moby
Дата 27.2.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо! То что нужно! Надо было сразу смотреть там. smile
PM MAIL ICQ   Вверх
chaos
Дата 27.2.2010, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



Moby, так же есть boost::asio & ACE. куда приятнее работать с последовательным портом
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

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


 




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


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

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