Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
 Аватар для Antiplayer
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305

SetCommState не работает

18.10.2012, 12:37. Показов 4928. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код. Он не работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DCB dcb;
HANDLE hLpt =
CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
 
 
//далее установим наши параметры
dcb.BaudRate = CBR_9600;
dcb.fBinary = TRUE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
dcb.fDsrSensitivity = FALSE;
dcb.fNull = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = FALSE;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = 1;
 
SetCommState(hLpt, &dcb);;
  //запишем параметры в порт
CloseHandle(hLpt);
Соответственно, потом открываю консоль, ввожу mode com2 и мне показавыются дефолтные настройки порта, а не те которые я устанавливал.
В общем проблему решил с помощью
C++
1
2
AnsiString console4="mode "+Form1->ComboBox2->Text+" baud=9600 stop=2 data=8 parity=n";
system(console4.c_str())
Но такой способ меня не устраивает. Потому что вылезает консоль. Как можно решить проблему, не устанавливая сторонних компонентов. Нет доступа к скачиванию файлов на работе.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.10.2012, 12:37
Ответы с готовыми решениями:

Не выполняется SetCommState
Ребята, проблема. Помогите, кто может. Я вручную заполняю структуру DCB для настройки COM-порта, а SetCommState не выполняется и...

Приложение работает в Debug, странно работает в Release и не работает при билде
Действия выполняются на эмуляторе Pixel 2. Android 9.0. Если я запускаю приложение с конфигурацией Debug, то всё в порядке. При запуске же...

Мышь работает через раз, то есть запустил ОС - мышь не работает, перезагрузил - мышь работает
Установлена Windows 7 со всеми последними обновлениями. Все всегда замечательно работало. Но с недавних пор мышь стала работать через раз....

11
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
18.10.2012, 22:28
1 на всякий случай делать в начале memset(&dcb, 0, sizeof(dcb));
2 вы закрыли порт, чего же вам еще? пока порт жил настройки должны были быть теми которые вы задали. можете проверить через GetCommState после вызова SetCommState. или вы хотите дефолтные настройки операционной системы поменять?
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
18.10.2012, 22:49
А почему HANDLE hLpt? Все-таки COM порт?

Конечно это не ошыбка, но, например, HANDLE hCom было бы понятней.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
18.10.2012, 23:32
Попробуйте так:
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
dcb=(DCB*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(DCB));
dcb->DCBlength=sizeof(DCB);
 
 
COMport=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
   if(COMport==INVALID_HANDLE_VALUE) {
    Application->MessageBox("Unable to open COM Port","Error",MB_OK);
      HeapFree(GetProcessHeap(),0,dcb);
        return(0);
   }
   else{
   if (BuildCommDCB(L"baud=9600 parity=N data=8 stop=1",dcb)==0){
    Application->MessageBox("Unable to initialize CommDCB Structure.","Error",MB_OK);
      HeapFree(GetProcessHeap(),0,dcb);
        return(0);
    }
   dcb->fNull=true;
   ct.ReadIntervalTimeout=100;//100;
   ct.ReadTotalTimeoutMultiplier=35;
   ct.ReadTotalTimeoutConstant=50;
   ct.WriteTotalTimeoutMultiplier=0;
   ct.WriteTotalTimeoutConstant=0;
   SetCommTimeouts(COMport,&ct);
   SetCommState(COMport,dcb);
Только нужные значения для вас пропишите в инициализацию dcb и ct
0
 Аватар для Antiplayer
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
15.01.2013, 15:30  [ТС]
Кстати, вот конкретно так всё работает:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit11.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm11 *Form11;
DCB portDcb;
COMMTIMEOUTS portTO;
HANDLE  f_port;
//---------------------------------------------------------------------------
__fastcall TForm11::TForm11(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm11::Button1Click(TObject *Sender)
{
    f_port = CreateFile("COM2",
        // вот здесь сраный капец, не забываем правильно переводить перменные. Типизированные языки такие типизированные
        GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
 
    if (f_port == INVALID_HANDLE_VALUE) {
        return;
    }
 
    if (! GetCommState (f_port, &portDcb))
    {
        CloseHandle (f_port);
        f_port = INVALID_HANDLE_VALUE;
        return;
    }
 
    portDcb.BaudRate = 9600; //устанавливаем скорость
    portDcb.fBinary = true;
    portDcb.fParity = false; //проверка четности
    portDcb.Parity = NOPARITY;// Установка типа четности
    portDcb.ByteSize = 8;
    portDcb.StopBits = ONESTOPBIT;   // 2 бита
    portDcb.fDtrControl = DTR_CONTROL_DISABLE;
    portDcb.fRtsControl = RTS_CONTROL_DISABLE;
 
    if (! SetCommState (f_port, &portDcb))
    {
        CloseHandle (f_port);
        f_port = INVALID_HANDLE_VALUE;
        return;
    }
    if (! SetCommTimeouts (f_port, &portTO))
    {
        CloseHandle (f_port);
        f_port = INVALID_HANDLE_VALUE;
        return;
    }
    CloseHandle(f_port);
}
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
15.01.2013, 15:33
а вы не пробовали смотреть руками после программы - настройки сохраняются?
0
 Аватар для Antiplayer
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
15.01.2013, 15:42  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
а вы не пробовали смотреть руками после программы - настройки сохраняются?
Сохраняются, в cmd "mode com2" показывает именно то, что я задал, вместо дефолтных значений.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
15.01.2013, 15:44
ок. кста, фраза
C++
1
ONESTOPBIT;   // 2 бита
ломает мозг)
1
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
15.01.2013, 16:28
Цитата Сообщение от vxg Посмотреть сообщение
ок. кста, фраза
C++
1
ONESTOPBIT;   // 2 бита
ломает мозг)
Логика........ )))
0
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 2
04.12.2013, 10:54
Цитата Сообщение от vxg Посмотреть сообщение
1 на всякий случай делать в начале memset(&dcb, 0, sizeof(dcb));
2 вы закрыли порт, чего же вам еще? пока порт жил настройки должны были быть теми которые вы задали. можете проверить через GetCommState после вызова SetCommState. или вы хотите дефолтные настройки операционной системы поменять?
Здравствуйте, а как можно поменять дефолтные настройки оерпационной системы? Спасибо!
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
04.12.2013, 13:05
как минимум через панель управления. как программно - не знаю
0
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 2
04.12.2013, 13:47
Цитата Сообщение от vxg Посмотреть сообщение
как минимум через панель управления. как программно - не знаю
Я, видимо, не корректно вопрос задал. Хотел узнать, есть ли возможность поменять настройки "по умолчанию", которые выставляются при нажатии на кнопку "Восстановить умолчания/Restore Defaults" в свойствах COM-порта, например, чтобы скорость не 9600 устанавливалась, а 115200.
Диспетчер устройст и реестр (по пути HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wi ndows NT\CurrentVersion\Ports) пробывал.

Спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.12.2013, 13:47
Помогаю со студенческими работами здесь

Не работает монитор комп работает а на мониторе нет изображения что делать ?
У меня компьютер старый давно покупал и мне захотелось проверить включается или нет и тут возникла одна проблема не включается монитор (...

Windows 7, не работает часть служб, не работает сеть, восстановление системы не помогает
Приветствую коллеги! Сам админю уже лет 10, не случалось ситуации еще что гугл не помогал, но вот пришел в организацию, на пк банк клиент,...

Не работает php на wps-е. Гланвая страница работает все остальное нет
На локальном дэнвере все отлично работает. Но при копировании на впс и сдоступом через сеть работает только главная страница сайта. Все...

Подключение библиотеки DLL C++: работает на примере консоли и не работает в WinForms App
Здравствуйте! Помогите начинающему бедному студенту!! Осваиваю С++. В книге Прохоренко(программирование в visual studio 2010 express)...

IE опять все портит, в 9 версии работает, а в остальных нет. не работает float
сайт http://gkantecreo.ru/ вверху в шапке слайдер в блоке div с css {float: left; padding-left: 15px;} везде прижат слева, а в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru