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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нахождение устройства на COM порту 
:(
    Опции темы
kma
Дата 22.5.2007, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите плиз как узнать на каком COM  порту подключено устройство.
 Я уже 3 день пытаюсь найти как это можно сделать и негде не чего про это нету  smile 
Заранее спасибо

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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



последовательно во все порты шлеш какую-нить инфу. на эту инфу устройсво должно ответить другой инфой. в результате: если на свой запрос получил правильный ответ: на этом порту висит твое устройство.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
kma
Дата 22.5.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можешь показать пример, я не знаю как это делается smile 
PM MAIL   Вверх
bsa
Дата 22.5.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(kma @ 22.5.2007,  13:59)
Можешь показать пример, я не знаю как это делается smile

 smile 
Код
for(int i = 0; i < COM_PORTS_COUNT; ++i) {
    com_send_info(i, info1);
    if ( !com_read_info_timeout(i, &info2, 1) )
       if (!memcmp(info2, valid_info) )
          something(i); //устройство найдено
}

Естественно функции com_* и something() взяты "отбалды". smile
PM   Вверх
kma
Дата 22.5.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Естественно функции com_* и something() взяты "отбалды".  


А где можно взять нормальные функции для проверки COM портов?
PM MAIL   Вверх
_hunter
Дата 22.5.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



нет таких функций. нужно самому писать... как? -- тут:
http://izone.kiev.ua/articles/delphi/16/282.htm
почитай... хоть и Delphi, но идею понять можно.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Annihilator
Дата 23.5.2007, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


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

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



Почитай здеся про com-порты


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
kma
Дата 23.5.2007, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я посмотрел ссылки и не чего не понял. Я не когда не сталкивался и не изучал язык программирования Delphi smile 
Я уже написал программу которая работает с Сканером штрих кодов подключенным к COM порту. Проблема состоит в том что пользователь может подключит Сканер к любому COM порту  и как узнать в какой он его подключил я не как не могу понять smile 
Вот код моей програмы
Код

#include "stdafx.h"
#include <windows.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>

HANDLE m_hComm;
char strCommPort[5];
void ProcessCommandLine();
void ReadData();
BOOL InitComm();

int main(int argc, char* argv[])
{
    ProcessCommandLine();
    if(InitComm())
        ReadData();
    if (m_hComm != INVALID_HANDLE_VALUE)
    {
        EscapeCommFunction(m_hComm, SETBREAK);
        CloseHandle(m_hComm);
        m_hComm = INVALID_HANDLE_VALUE;
    }
        
    return 0;
}

void ProcessCommandLine()
{
    strcpy((char *)strCommPort,"COM1:");
}

BOOL InitComm()
{
    DCB dcb;
    m_hComm = CreateFile((LPCTSTR)strCommPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (m_hComm == INVALID_HANDLE_VALUE) 
    {
       MessageBox(::GetActiveWindow(),"Unable to open COM port!", "Error!",MB_OK);
       return FALSE;
    }
      
    GetCommState(m_hComm,&dcb);
    SetupComm (m_hComm, 256, 256);       
    dcb.BaudRate = CBR_9600;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT;
    SetCommState (m_hComm, &dcb);
    SetCommMask(m_hComm, EV_BREAK | EV_RXCHAR);
    return TRUE;
}

void ReadData()
{
    printf((char*)strCommPort);
    BYTE        szBuffer[256];
    DWORD        dwEvtMask;
    DWORD        dwError;
    DWORD        dwBytes;
    COMSTAT        csStat;
    OVERLAPPED    o;
    o.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    int            nCount;
    char        strTemp[128];
    for(nCount=0;nCount<128;nCount++)strTemp[nCount]=0;
    nCount=0;
    for (; ;)
    {
        ResetEvent(o.hEvent);

    if (!WaitCommEvent(m_hComm, &dwEvtMask, &o))
    {
        Sleep(100);
    }

        if (dwEvtMask & EV_BREAK)
            break;
        else if (dwEvtMask & EV_RXCHAR)
        {
            ClearCommError(m_hComm, &dwError, &csStat);
            ResetEvent(o.hEvent);
            int saizBuf = 15;
            if (ReadFile(m_hComm, &szBuffer, saizBuf , &dwBytes, NULL)== false)
            {
                Sleep(50);
            }
            else
            {
                for (UINT i = 0; i < saizBuf; i++)
                {
                    if(szBuffer[i]==13)
                    {
                        printf("\n%s",(char *)strTemp);
                        for(nCount=0;nCount<128;nCount++)strTemp [nCount]=0;
                        nCount=0;
                    }
                
                    else
                    {
                        strTemp[nCount]=szBuffer[i];
                        nCount++;
                    }
                }
                if(nCount>64)
                {
                    for(nCount=0;nCount<128;nCount++)strTemp[nCount]=0;
                    nCount=0;
                }
            }
        }

    }
}

PM MAIL   Вверх
JackYF
Дата 23.5.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

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



Дык у тебя же в проге уже есть общение с ком-портом! Просто тебе нужно послать в него чего-нибудь
(в данном случае WriteFile, я полагаю), а прочитать ответ с помощью ReadFile, как ты и делаешь в программе.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
kma
Дата 23.5.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я пробовал записывать и считывать, не чего не получается. При записи функция WriteFile возвращает true даже если Сканер не подключен к COM порту. А когда пытаюсь считать
после записи в COM порт то программа заходит в функцию ReadFile и ждет когда я начну пользоваться Сканером не зависимо подключен он COM порту или нет и пока я не начну Сканировать программа висит smile 

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


полуавантюрист
****


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

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



А документация на сканер у тебя есть? Ведь какая-то низкоуровненвая идентификация у него есть? Или он работает напрямую, чистым потоком данных?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
kma
Дата 23.5.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Модель сканера Chipher lab 1000. Документации у меня не какой к нету нету
PM MAIL   Вверх
JackYF
Дата 23.5.2007, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

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



Цитата(kma @  23.5.2007,  17:45 Найти цитируемый пост)
Модель сканера Chipher lab 1000. Документации у меня не какой к нету нету 


Жаль. Сложно работать с устройством на низком уровне, про которое ничего не знаешь.
Поиск в гугле ничего не дал?



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
bsa
Дата 23.5.2007, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Интересно, а разве нет функции чтения, которая не ждет данных? Или нельзя открыть этот com-порт в неблокирующем режиме?
hint: Читай описание флага FILE_FLAG_OVERLAPPED в описаниях CreateFile и ReadFile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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