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

Терминал для COM порта

27.09.2012, 16:54. Показов 4979. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Надо написать программу, которая будет посылать и принимать данные через COM порт. Так же требуются настройки скорости передачи, стоп бит и четности. Программа нужна для работы с USB->UART преобразователем. С чего следует начать реализацию данного проекта? Может у билдера есть что-то готовое для таких случаев?

Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2012, 16:54
Ответы с готовыми решениями:

Чековый притер. Терминал. Проброс порта
Доброго дня. Засел тут над принтером. Имеем. Терминал сервер на 2003 винде. Клиент XP. Конфа ...

Терминал для БК
По одному из заказов делаю терминал для БК. Основой послужили - stm32f407zg, промышленный дисплей...

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

Разработка ПО для электронной кассы (терминал)
Здравствуйте! Я новенький на Вашем замечательном форуме! Рад быть частью сообщества компетентных и...

8
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
27.09.2012, 19:23 2
CreateFile(), ReadFile(), WriteFile(), GetCommState(), SetCommState, ClearCommError() и CreateThread(), TerminateThread() для отдельного потока приема.
0
1 / 1 / 0
Регистрация: 27.09.2012
Сообщений: 13
27.09.2012, 23:30  [ТС] 3
Спасибо, я уже разобрался

Добавлено через 4 часа 5 минут
Все работает, но повис на одном месте. Вывод принятых данных осуществляется в Memo в строку:

C++
1
2
3
4
priem = Form2->Memo1->Lines->operator [](Form2->Memo1->Lines->Count - 1) + (char*)bufrd;
 
 Form2->Memo1->Lines->Delete(Form2->Memo1->Lines->Count - 1);
 Form2->Memo1->Lines->Add(priem);
Так вот вывод данных идет без пробелов, т.е. в виде:

C++
1
ОК;ОК;ОК;ОК;ОК;ОК;ОК;ОК;
Вот я и не могу придумать, как сделать пробелы. Ведь надо учитывать, что могло быть передано слово, а мог быть и один символ. Куда бы я не добавлял вывод пробела, данные начинают съезжать и расползаться.... Как это сделать?
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
27.09.2012, 23:45 4
Цитата Сообщение от BARS_ Посмотреть сообщение
->Add(priem);
а что мешает писать Add(priem+" "); ? Или +"\t" (табулятор).
0
1 / 1 / 0
Регистрация: 27.09.2012
Сообщений: 13
27.09.2012, 23:48  [ТС] 5
Так я писал, но тогда начинают разбегаться отдельные буквы в словах
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
27.09.2012, 23:48 6
без примера - не понятно
0
1 / 1 / 0
Регистрация: 27.09.2012
Сообщений: 13
27.09.2012, 23:56  [ТС] 7
Вот без пробелов:



А вот с Add(priem + " ")

0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
28.09.2012, 00:00 8
Тяжелый случай. Вы, видимо, подхватываете данные "поштучно", по мере приема, не ожидая мало-мальскую паузу; возможно по таймеру; возможно и с потерями...
0
1 / 1 / 0
Регистрация: 27.09.2012
Сообщений: 13
28.09.2012, 00:32  [ТС] 9
Ну потерь точно нет, а за прием отвечает вот такая функция (найдена на просторах интернета):

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
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(); // вот здесь выводим данные в Memo
        }
       }
    }
  }
}
0
28.09.2012, 00:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2012, 00:32
Помогаю со студенческими работами здесь

Составьте программу для вывода на терминал таблицы значений функций:
y=tg x xε(знак принадлежности) ( 0; π\2 ) Δx=0,1

Фискальный регистратор, 1С через терминал и ключи для драйвера Атол
Просьба помидорами не кидать! :-[ Помогите разобраться, пожалуйста. 1С 7.7, работаем через...

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

Как создать входящее подключение для VPN через терминал или bat-файл?
Всем привет! Ребат помогите разобраться как создать входящее подключение для VPN через терминал или...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru