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

Работа с COM портом на С++ Builder 6

11.08.2011, 15:29. Показов 14856. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Работаю я с GSM модемами, пишу под них программу на C++ Builder 6. Посылаю в модем, через COM порт соответственно, AT команды (строку инициализации модема, ATD+номер sim-карты, +++, ATH), в ответ от него соответственно получаю те команды которые отправил и подтверждение, что модем выполнил команду (OK, CONNECT 9600). Все эти данные от модема я принимаю в компонент RichEdit для дальнейшей обработки.
Есть проблема: принимаемые данные дробятся по частям, т.е. принимаются в несколько строчек, а не в одну как надо, например:
Ответ модема - CONNECT 9600
принимается как:
CONNEC
T 9600
или ATD89156268111
принимается так:
ATD89156
268111
Очень нужно решить эту проблему для дальнейшей обработки полученных данных.

Вот исходники для обработки принятых данных из COM порта и вывода их в RichEdit на форму соответственно.

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
DWORD WINAPI ReadThread(LPVOID)
{
 COMSTAT comstat;
 DWORD btr, temp, mask, signal;
 
 overlapped.hEvent = CreateEvent(NULL, true, true, NULL);
 SetCommMask(COMport, EV_RXCHAR);
 while(1)
  {
   WaitCommEvent(COMport, &mask, &overlapped);
   signal = WaitForSingleObject(overlapped.hEvent, INFINITE);
   if(signal == WAIT_OBJECT_0)
    {
     if(GetOverlappedResult(COMport, &overlapped, &temp, true))
      if((mask & EV_RXCHAR)!=0)
       {
        ClearCommError(COMport, &temp, &comstat);
        btr = comstat.cbInQue;
        if(btr)
        {
         ReadFile(COMport, bufrd, btr, &temp, &overlapped);
         Printing();
        }
       }
    }
  }
}
 
void Printing()
{
 Form1->RichEdit1->Lines->Add((char*)bufrd);
 write(handle, bufrd, strlen(bufrd));
 memset(bufrd, 0, BUFSIZE);
}
Так же имеется полный исходник на C++ Builder 6, смотрите архив Рабочий проект.rar.
Вложения
Тип файла: rar Рабочий проект.rar (436.7 Кб, 682 просмотров)
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.08.2011, 15:29
Ответы с готовыми решениями:

Работа с COM портом в Builder C++ 6.0
Добрый день, уважаемые форумчане. Никогда не спрашивал совета на форумах, но нужна подсказка. Кто располагает временем, буду очень...

Работа с LPT портом в С++Builder
Народ помагите разобратся как работать в билдере с lpt портом :umnik:

Компонент для работы с сom-портом в С++ Builder 4
Здравствуйте. Необходима компонента для работы с сom-портом в С++ Builder 4. Подскажите,пожалуйста, где взять? Заранее спасибо.

7
 Аватар для radiohobbyt
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
12.08.2011, 06:43
В отдельном потоке
C
1
2
3
4
5
6
7
8
9
10
while(1)
{
ПолучаемОдинБайт();
ДописываемЕгоВКонецБуфера();
if(Получили перенос строки())
     {
     ДекодируемБуфер();//то есть обрабатываем
     ОчищаемБуфер();
     }
}
0
1 / 1 / 0
Регистрация: 04.10.2011
Сообщений: 10
14.10.2011, 09:05
А почему программа ваша не работает с портами выше 9?????
0
1 / 1 / 0
Регистрация: 06.12.2010
Сообщений: 19
14.10.2011, 09:08  [ТС]
Честно говоря, не знаю, а программу я эту уже закончил, применяю ее на работе.
0
1 / 1 / 0
Регистрация: 04.10.2011
Сообщений: 10
14.10.2011, 10:17
Скиньте если не жаль мне на мыло dprav@rambler.ru
0
0 / 0 / 0
Регистрация: 20.05.2015
Сообщений: 5
01.07.2015, 17:01
Столкнулся с такой же проблемой ! Сообщение прилетает не целиком, а частями. Размер сообщения достаточно маленький(Пример : 1 1 48.5 ), но на деле приходит "1 1 48." и только следующим сообщением "5".
Удалось побороть проблему? И если да то как?
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
02.07.2015, 00:48
MihailVlaskin, вот есть тема, посмотри, попробуй, но не все бездумно копипастить ...
Работа с КОМ портом. Исходник
1
0 / 0 / 0
Регистрация: 20.05.2015
Сообщений: 5
02.07.2015, 08:35
Проблема в том, что программа уже работает на другом практически идентичном оборудовании, проблем там нет ни каких. Есть только разница в том, что в старом варианте на ПК COM порт встроенный на материнской плате, а в новом варианте имеется ком порты на PCI плате. Возможно здесь кроется проблема.
Ранее пробовал снимать данные с оборудования через USB (эмуляция COM), там с данными вообще был ахтунг, а именно они превращались в кучу не связных данных.

_Dimon_ , спасибо) Попробую дальше ковырять.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.07.2015, 08:35
Помогаю со студенческими работами здесь

Работа с com портом
Добрый день, требуется дальнейшая работа с com портом после принятия определенных данных, как реализовать? using System; using...

Работа с COM-портом
Ребят, помогите, пожалуйста, сделать работу с 7 COM-портом, вывести на него 12 вольт, чтобы заработало подключенное к нему реле. просто...

Работа с COM-портом QT
Всем привет. Захотелось на днях написать GUI под windows для общения с STM32F100 по COM-порту. После долгих поисков перепробовал Delphi -...

Работа с Com портом
void comPortReciver(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { //описание...

Работа с COM портом
Cразу к делу ) Нужна программа где достаточно будет 1 кнопки Start которая по клику начнет чтение с com порта и запишет данные в лог...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru