Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2017, 04:50   #1
8toni8
 
Регистрация: 22.01.2012
Сообщений: 8
По умолчанию Как обрабатывать информацию полученную по com порту - C++ Builder

Появилась необходимость принимая данные через com порт, проводить какие то действия по команде из com порта. Подскажите где и про что можно об этом почитать? (Не откажусь от примеров кода)
8toni8 вне форума Ответить с цитированием
Старый 07.10.2017, 08:35   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Попробуйте этот компонент, его вроде хвалят: TurboPower Async Professional

А так всё зависит от сложности задачи. Простейший обмен легко делается самостоятельно - порт открывается как файл, чтение/запись тоже файловыми командами. Только нужно правильно установить состояние порта (функция SetCommStat).
Black Fregat вне форума Ответить с цитированием
Старый 07.10.2017, 19:17   #3
8toni8
 
Регистрация: 22.01.2012
Сообщений: 8
По умолчанию

В принципе открывать и настраивать порт я научился. А вот как читать из него и производить на основании этих посылок те или иные действия или выводить куда то показания, пока не сообразил... Так как не удается найти на просторах интернета информации по этому вопросу Может быть подскажите как вы в свое время этому учились? Не ужели само пришло? Может быть в книге какой-то то прочитали?
8toni8 вне форума Ответить с цитированием
Старый 07.10.2017, 20:13   #4
8toni8
 
Регистрация: 22.01.2012
Сообщений: 8
По умолчанию

Я то где то в глубине души понимаю, что нужно вытащить из буфера и сравнить значение и уже от этого и плясать Но реализовать мозгов квалификации пока еще не достаточна

Сейчас завис, вот на чем:
Код:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
char J1 = (char*)bufrd;
	if (true) {
		Form1->D1->Caption = "Ура";
	} else Form1->D1->Caption = "No";


	//Form1->D1->Caption = ((char*)bufrd);
}
Выдает ошибку: "[BCC32 Error] Unit1.cpp(484): E2034 Cannot convert 'char *' to 'char'"
Мне не понятно, как это он не может char в char записать?))

bufrd имеет тип unsigned char...

Кстати, еще вопрос из той же оперы, если bufrd является unsigned char, то как ему в таком случае удается передавать буквенные символы?
То есть к примеру такая конструкция работает ведь:
Form1->Memo1->Lines->Add((char*)bufrd);
Или:
Form1->D1->Caption = ((char*)bufrd);

При этом на сколько я правильно помню "Form1->D1->Caption" имеет тип string? Дак почему же они тогда без проблем конвертируется?

Последний раз редактировалось 8toni8; 07.10.2017 в 20:35.
8toni8 вне форума Ответить с цитированием
Старый 07.10.2017, 23:20   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от 8toni8 Посмотреть сообщение
bufrd имеет тип unsigned char
Точно? А часом не unsigned char*
waleri вне форума Ответить с цитированием
Старый 08.10.2017, 10:32   #6
8toni8
 
Регистрация: 22.01.2012
Сообщений: 8
По умолчанию

Нет, вот:
Код:
unsigned char bufrd[BUFSIZE],bufwr[BUFSIZE];
Может я конечно чего то и не понимаю в этой жизни

P.S. Как вы уже поняли, исходники у меня ворованные
8toni8 вне форума Ответить с цитированием
Старый 08.10.2017, 10:36   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Именно не понимаете. Тип unsigned char[BUFSIZE], что может приводиться к
unsigned char*. А если хотите unsigned char, то и пишите, например,
Код:
char J1 = bufrd[0];
p51x вне форума Ответить с цитированием
Старый 08.10.2017, 20:16   #8
8toni8
 
Регистрация: 22.01.2012
Сообщений: 8
По умолчанию

Большое спасибо, теперь стало все ясно и с обработкой вопрос решился
Пример:
Код:
	char J11 = bufrd[1];
	char J22 = 255; //С каким значением сравниваем

	if (J2 == J22) {
		Form1->D3->Caption = "Ура";
	} else Form1->D3->Caption = "No";
8toni8 вне форума Ответить с цитированием
Старый 08.10.2017, 20:17   #9
8toni8
 
Регистрация: 22.01.2012
Сообщений: 8
По умолчанию

Ну и на стороне контроллера такой код:
Код:
void main( void ){
    USART_Init(MYUBRR); //	Инициализация порта
    while(1){
        USART_Transmit('1');
        _delay_ms(5000);  
		USART_Transmit('255');
        _delay_ms(5000); 
		USART_Transmit(255);
        _delay_ms(5000);
    }
}
8toni8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа позволяющая вводить, хранить и обрабатывать информацию для учета участников Олимпиады. Формировать отчет количества участников по виду спорта. pocheto Общие вопросы C/C++ 9 06.06.2017 23:41
написать программу в С++ Builder формирующую массив, содержащийй информацию об автомобилях sky1212 Общие вопросы C/C++ 1 18.05.2011 02:53
где браузер хранит полученную информацию? Arassir HTML и CSS 2 28.04.2010 21:39
Как обрабатывать данную ситуацию? Arkuz БД в Delphi 2 08.12.2008 02:51
как обрабатывать события с клавы? proglamer Паскаль, Turbo Pascal, PascalABC.NET 13 25.10.2007 11:41