Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
Egor_student

Тестирование Com порта

16.05.2009, 16:41. Показов 4038. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание: Протестировать com порт в WinXP на языке Visual C++

Протестировать DTR(4) и RTS(7) проблем не возникло
(подключил через MAX232 и помигал светодиокиками)

Возникли проблемы с остальными выводами :
- TD(3);
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
hFile = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL);
 
    if(hFile==INVALID_HANDLE_VALUE)
    {
        MessageBox("Не удалось открыть порт!", "Ошыбка", MB_ICONERROR);
    }
    else
    {
        MessageBox("Порт успешно открыт", "Ok", MB_OK);  порт открываеться
    }
    
    
    
    DCB dcb;
    GetCommState(hFile,&dcb);
    dcb.BaudRate=CBR_9600;
    dcb.Parity=NOPARITY;
    dcb.ByteSize=8;
    dcb.StopBits=1;
    SetCommState(hFile,&dcb);
 
 
 
    byte buffer=0xFF,readmas;
      DWORD nb;
    OVERLAPPED ov;
    WriteFile(hFile,&buffer,1000,&nb,&ov);
...
Светодиодик мигает только под Win98, в ХР не хочет(((



-Замкнул TD(3) c RD(2) и написал

WriteFile(hFile,&buffer,10000,&nb,&ov);
ReadFile(hFile,&readmas,Sizeofbuffer,NUL L,NULL);

readmas в значение 0xFF так и не становится


- Как можно проверить состояние RI(9) CTS(8) DSR(6) CD(1)?


Сам порт работает проверял другими exe


Колупаюсь в инете уже 3 дня и ничего не могу понять. Объясните плиз как сделать и если не лень покажите
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.05.2009, 16:41
Ответы с готовыми решениями:

Тестирование LPT порта
Здравствуйте. нашел в интернете код программы который может включить светодиод и отключить его. вот код #include...

Удаленное тестирование приложение/Пересылка на тестирование
Если кто-то написал приложение под андроид и захочет показать другому человеку, то достаточно отослать apk. А как обстоит с этим дело в...

Unit -тестирование или автоматизированное тестирование
Доброго времени суток. Я программирую «для себя» второй год, на выходе получаются разного рода приложения от постоянно подающих с...

2
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
16.05.2009, 17:20
структуру overlapped нужно заполнять правильно(занулить по меньшей мере оффсеты) или отправлять NULL(вроде можно).
Посмотри GetCommMask ( SetCommMask), при асинхронной обработке можно ослеживать всякие разные состояния. Еще посмотри на GetCommModemStatus.
1
Egor_student
17.05.2009, 00:18
Вопрос исчерпан.
Во всем разобрался. вот пример реализации:
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
HANDLE hFile; // файл порта
DWORD ModemStat,bc;
DCB dcb;
COMMTIMEOUTS ct;
char         *buf_out="Test string";
char         *buf_in;
LPCTSTR      FileName="COM1";
 
dcb.DCBlength=sizeof(DCB);
    BuildCommDCB("baud=9600 parity=N data=8 stop=1",&dcb);
    dcb.fNull=TRUE;
    
    ct.ReadTotalTimeoutConstant=2000; //чтение файла произаодиться не более 2с иначе завершение чтения
    ct.ReadIntervalTimeout=10;
    ct.ReadTotalTimeoutMultiplier=0;
    ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant=0;
 
   
 
 
    hFile = CreateFile(FileName,                    //открываем порт COM1
                        GENERIC_READ|GENERIC_WRITE, 
                        0, 
                        NULL, 
                        OPEN_EXISTING, 
                        0,
                        NULL);
 
    if(hFile==INVALID_HANDLE_VALUE)//Если не получилось
    {
        MessageBox("Не удалось открыть порт COM1!", "Ошыбка", MB_ICONERROR);\
            FileName="COM2";      
                hFile = CreateFile(FileName, 
                                    GENERIC_READ|GENERIC_WRITE, //Открываем порт COM2
                                    0, 
                                    NULL, 
                                    OPEN_EXISTING, 
                                    0,
                                    NULL);
 
                 if(hFile==INVALID_HANDLE_VALUE)
                    {
                         MessageBox("Не удалось открыть порт COM2!", "Ошыбка", MB_ICONERROR);
                    }
                    else
                     {
                         MessageBox("Порт COM2 успешно открыт", "Ok", MB_OK);  
                     }
    
    }
    else
    {
        MessageBox("Порт COM1 успешно открыт", "Ok", MB_OK);  
    }
    
    SetCommState(hFile,&dcb);
    SetCommTimeouts(hFile,&ct);
    PurgeComm(hFile,PURGE_TXCLEAR|PURGE_RXCLEAR);
    SetupComm(hFile,256,256);
 
 
void CTestComDlg::OnButton9() 
{
//записатьTD прочитатьRD 
 
buf_in=(char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,strlen(buf_out)+1);
    WriteFile(hFile,buf_out,strlen(buf_out),&bc,NULL);
    if (ReadFile(hFile,buf_in,strlen(buf_out),&bc,NULL))
 
    
 
    {if (*buf_in==*buf_out)
    {
        MessageBox("Сигнал 1", "ОК", MB_OK);
    }
    else
    {
        MessageBox("Сигнал 0", "Ошыбка", MB_ICONERROR);  
    }
    }
    
 
    HeapFree(GetProcessHeap(),0,buf_in);
 
 
}
 
void CTestComDlg::OnButton5() 
{
    // read CD(1)
    GetCommModemStatus(hFile,&ModemStat);
    if ((ModemStat&&MS_RLSD_ON)!=0)
    {
        MessageBox("Сигнал 1", "ОК", MB_OK);
    }
    else
    {
        MessageBox("Сигнал 0", "Ошыбка", MB_ICONERROR);  
    }   
}
 
 
 
 
void CTestComDlg::OnButton7() 
{
    // read CTS(8)
    
    GetCommModemStatus(hFile,&ModemStat);
    if ((ModemStat && MS_CTS_ON)!=0)
    {
        MessageBox("Сигнал 1", "ОК", MB_OK);
    }
    else
    {
        MessageBox("Сигнал 0", "Ошыбка", MB_ICONERROR);  
    }
}
 
void CTestComDlg::OnButton6() 
{
    // read DSR(6)
    GetCommModemStatus(hFile,&ModemStat);
    if ((ModemStat && MS_DSR_ON)!=0)
    {
        MessageBox("Сигнал 1", "ОК", MB_OK);
    }
    else
    {
        MessageBox("Сигнал 0", "Ошыбка", MB_ICONERROR);  
    }
    
}
 
void CTestComDlg::OnButton8() 
{
    // read RI(9)
    GetCommModemStatus(hFile,&ModemStat);
    if ((ModemStat && MS_RING_ON)!=0)
    {
        MessageBox("Сигнал 1", "ОК", MB_OK);
    }
    else
    {
        MessageBox("Сигнал 0", "Ошыбка", MB_ICONERROR);  
    }
}
 
 
 
void CTestComDlg::OnButton10() 
{ 
//записать TD
    for (int i=0;i<100;i++)
    {
        WriteFile(hFile,buf_out,strlen(buf_out),&bc,NULL);
    }
    
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2009, 00:18
Помогаю со студенческими работами здесь

Чтение из COM порта, При чтении из порта зависает read()
Каждому рано или поздно приходится программировать com порт. Вот и мой черед пришол. Я ужу умею: Откривать,закривать, писать. а читать не...

Тестирование (или Юнит тестирование)
Доброго времени суток, возник такой вопрос, раньше встречался на фронтенде с js тестированием, сейчас задался вопросом по поводу...

Тести́рование програ́ммного обеспе́чения(Модульное тестирование, или юнит-тестирование)
Извиняюсь перед администрацией что разместил тему в несоответствующем разделе, не мог найти про тестирование ПО. На днях встал вопрос о...

Тестирование БД
Здравствуйте, появился такой вопрос, на который не нашел инфы в интернете. Нужно реализовать нагрузочные тесты на добавление, обновление...

тестирование
Здравствуйте, есть WCF сервис запущенный локально, есть консольный клиент как проэмулировать работу 200 пользователей?


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru