Работа с COM-портом

Тема в разделе "Общие вопросы по С и С++", создана пользователем XIII, 7 мар 2005.

Статус темы:
Закрыта.
  1. XIII

    XIII Гость

    Мне необходимо передать букву 'A' в порт COM1 со скоростью 50 или 150 бод.

    Буду благодарен всем, кто откликнется.
     
  2. ????

    ???? Гость

    Код (Text):
    HANDLE CreateFile
    (
    LPCTSTR lpFileName,
    DWORD dwDesiredAccess,
    DWORD dwShareMode,
    LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    DWORD dwCreationDistribution,
    DWORD dwFlagsAndAttributes,
    HANDLE hTemplateFile
    );
    , где lpFileName = "COM1" - открытие порта
    Код (Text):
    BOOL GetCommState
    (
    HANDLE hFile,
    LPDCB lpDCB
    );
    - получение параметров порта, и изменение необходимых
    Код (Text):
    BOOL SetCommState
    (
    HANDLE hFile,
    LPDCB lpDCB
    );
    - установка новых(нужных) параметров порта
    Код (Text):
    BOOL WriteFile
    (
    HANDLE hFile,
    LPCVOID lpBuffer,
    DWORD nNumberOfBytesToWrite,
    LPDWORD lpNumberOfBytesWritten,
    LPOVERLAPPED lpOverlapped
    );
    - вывод в порт
     
  3. Guest

    Guest Гость

    <!--QuoteBegin-????+7:03:2005, 23:17 -->
    <span class="vbquote">(???? @ 7:03:2005, 23:17 )</span><!--QuoteEBegin-->
    Код (Text):
    HANDLE CreateFile
    (
    LPCTSTR lpFileName,
    DWORD dwDesiredAccess,
    DWORD dwShareMode,
    LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    DWORD dwCreationDistribution,
    DWORD dwFlagsAndAttributes,
    HANDLE hTemplateFile
    );
    , где lpFileName = "COM1" - открытие порта
    Код (Text):
    BOOL GetCommState
    (
    HANDLE hFile,
    LPDCB lpDCB
    );
    - получение параметров порта, и изменение необходимых
    Код (Text):
    BOOL SetCommState
    (
    HANDLE hFile,
    LPDCB lpDCB
    );
    - установка новых(нужных) параметров порта
    Код (Text):
    BOOL WriteFile
    (
    HANDLE hFile,
    LPCVOID lpBuffer,
    DWORD nNumberOfBytesToWrite,
    LPDWORD lpNumberOfBytesWritten,
    LPOVERLAPPED lpOverlapped
    );
    - вывод в порт[/quote]
    И это не будет работать под XP(NT). Винда скажет что мало привелегий. Выход один: написать свой драйвер или скачать готовый.
     
  4. zubr

    zubr Гость

    Guest
    Откуда ты взял, что не будет работать в NT? Все работает, тут же доступ к Com порту через API, а не напрямую.
     
  5. XIII

    XIII Гость

    Благодарю. :D

    Передавать данные в порт у меня получилось, а вот изменять скорость - нет . Есть ли какой-нибудь другой способ изменения скорости передачи данных?
     
  6. zubr

    zubr Гость

    Вот примерный код:
    Код (Text):
    void WritePort()
    {
    HANDLE FHandle;
    FHandle=CreateFile("COM1", GENERIC_READ || GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
     FILE_ATTRIBUTE_NORMAL || FILE_FLAG_OVERLAPPED, 0);
    DCB dcb;
    GetCommState(FHandle, &dcb);
    dcb.BaudRate=57600;//скорость порта
    SetCommState(FHandle, &dcb);
    char buf[1]="A";
    DWORD n;
    WriteFile(FHandle, &buf, 1, &n, NULL);
    CloseHandle(FHandle);
    }
     
  7. XIII

    XIII Гость

    Спасибо за помощь! ;)
    Теперь я могу и скорость изменять.
     
  8. Suslik

    Suslik Гость

    Это. классно конечно. А не напишет кто-нибудь очень добрый. Как прочитать из порта строку или символ. Пожалуйста. оч. надо. Заранее спасибо.
     
  9. Guest

    Guest Гость

    тока за деньги :D
     
  10. Guest

    Guest Гость

    че з аденьги никто не хочет ??? :D

    как жаль... :D
     
  11. ????

    ???? Гость

    <!--QuoteBegin-Guest+13:09:2005, 08:52 -->
    <span class="vbquote">(Guest @ 13:09:2005, 08:52 )</span><!--QuoteEBegin-->че з аденьги никто не хочет ??? :D

    как жаль... :D
    [snapback]24743" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Не за деньги есть наводка сверху - поищи в help'е и подумай. Могу и бесплатно написать, но если оплатишь курсы по основам работы с портами (8-и часовой курс, 10$ час + оплата проезда, питание, проживание).
     
  12. zubr

    zubr Гость

    Купи книгу Агурова "Последовательные интерфейсы ПК", книга недорогая и все доступно, с примерами. А писать тебе тут код для чтения слишком гиморно, причем может быть множество вариантов, в зависимости от протокола обмена и других условий.
     
  13. bel_nikita

    bel_nikita Гость

    Сходите на www.codeproject.com. Там уйма библиотек для работы с com портами. Ничего придумывать не нужно - уже все придумано за нас :D
     
  14. Guest

    Guest Гость

    все что там придумано, все делалось под конкретные задачи!

    zubr правильно сказал все зависит в основном от протокола обмена..
    под modbus я сам писал весь обмен по ком-порту.... опыт уже есть поэтому и предлагаю з аденьги :)

    а стеб почетного секретчика не овсем понимаю :D
     
  15. zubr

    zubr Гость

    Гости, вы хотя бы под ником каким нить посты делайте, а то не понятно кто просит, а кто предлагает.
    При использовании готовых библиотек все равно надо иметь понятие как работать с последовательными интерфейсами.
     
  16. zzzup

    zzzup Гость

    все что под гостем написано - мое :)

    следовательно я гостЬ !

    впрочем уже нет


    zubr точно, понятие надо иметь всегда, а потом уже спрашивать в принципе в форуме че не понятно, а не спрашивать предварительно ничего не читая.

    ты понял, XIII ?

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

    см. форум на www.sources.ru (только воспользуйся там поиском!!!)

    и нам поясни зачем тебе надо посылать/принимать байты, по какому протоколу и т.д.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей