|
2 / 2 / 0
Регистрация: 07.12.2010
Сообщений: 21
|
|
Программирование Com порта в Microsoft Visual Studio 9.0 C++07.12.2010, 13:11. Показов 52196. Ответов 84
Метки нет (Все метки)
Всем привет!
Имеется микроконтроллер AVR ATmega128, на борту которого имеется UART. Требуется написать приложение для Win32 принимающее с МК по RS-232 информацию. Интерфейс 3-х проводной. TxD, RxD и GND. Подключение ПК к МК осуществляется через виртуальный COM8 порт, тоесть через преобразователь USB в COM. В МК зашита программа тупого посыла символа "$" в цикле. Все работает прекрасно(данные приходят). Проверял программой Terminal v1.9b Имеется куча примеров, но не один не работает, нет опыта в программировании на C++. То отсутствует какая то библиотека, то непонятная ошибка. Я понимаю что это просто для знающего, но увы я только знакомлюсь с языком Microsoft Visual Studio 9.0 C++. если на нем этого сделать не возможно, посоветуйте тот на котором это возможно. Подскажите с чего начать, как инициализировать порт, как подключиться, как получить байт? Да, кол-во получаемых байтов неизвестно, точнее пока оно бесконечно. Для начала хотелось бы чтобы программа тупо принимала все что передается в порт и выводила на экран. Добавлено через 20 минут Кто нибудь... помогите подключить C++ к внешнему устройству!!!!
0
|
|
| 07.12.2010, 13:11 | |
|
Ответы с готовыми решениями:
84
Отличие между Microsoft Developer Studio и Microsoft Visual Studio? Как с сайта Microsoft скачать Microsoft Visual Studio 2005 Express Edition? Вылетает Visual Studio 2008 из-за системы управления версиями Microsoft Visual SourceSafe. |
|
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 11
|
|
| 04.07.2013, 15:43 | |
|
2 сом-порта для меня роскошь. На ноуте нет ни одного. Приобрел переходник usb-com, идея состоит в том, что закоротив пины Tx и Rx на com-разъеме я в программе пытаюсь записать данные, а потом считать их. Пока такая простенькая идея отрабатывается. Данных немного. Надо "научиться" задавать нужную температуру устройству, управляемому по com, и делать это с необходимой точностью. т.е. я транслирую в порт 2 значения. int и double. Но вот каким образом биты расположатся в кадрах протокола обмена - мне неведомо. Поэтому есть идея использовать метод write, где надо задавать 3 параметра. И затырка в том, что мне не ясно, как сделать так, чтобы из типа string получился тип byte. Чтение msdn и форумов ситуацию не прояснило. Где-то рекомендуют использовать методы класса marshall, где-то System::Text::Encoding::GetBytes(Numeric UpDown->Text), подставляя полученное в 1 аргумент write. В общем, бился много, толку 0. Может подскажете, в каком направлении копать, чтоб научиться стринги в байты нарезать?
0
|
|
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 04.07.2013, 17:17 | |
|
Ффух! пока понятно, что ничего не понятно. :-) Почему тебе нужно "стринги в байты нарезать"?
Опиши протокол обмена с этой железякой. Потом можно будет прикинуть, как его реализовать на C++/CLI.
0
|
|
|
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 11
|
|
| 05.07.2013, 11:18 | |
|
Может сумбурно объяснил...Попробую понятнее изложить.
1. Аппаратная часть. 1.1 Ноут, без единого com-порта. 1.2 Преобразователь Usb-com, ф-мы Defender. Приобретен с целью потренироваться записать/почитать данные из ком-порта 1.3 Модель "абсолютно черного тела (АЧТ)" под названием M345X6_infrablack4. Физического доступа к этой штуковине у меня пока нет. Видел ее только в виде документации, высланной заказчиком. Полезных сведений - протокол обмена RS 232, и рекомендуемые настройки порта (с этим проблем нет, Visual Studiовский компонент serialPort позволяет их выставить очень легко и просто ) 2. Задача. АЧТ должен получать с компа и отдавать обратно на комп следующие данные: 1. Температура АЧТ в пределах от -5 до 170 градусов. 2. Точность установки, которая варьируется в пределах от 0 до 1 с точностью 2 знака после запятой. 3. Реализация. Я создал класс, который абстрактно отображает сущность моего АЧТ, которого под рукой у меня нет, и создал экземпляр этого класса, с которым и собираюсь проводить эксперименты. В нем прописаны следующие переменные: int temperature и double precision. А также четыре метода SetTemperature(int), SetPrecision(double), GetTemperature(), GetPrecision(), с помощью которых я из окошек, расположенных на форме, организую общение с экземпляром АЧТ. На форме размещены 2 окошка NumericUpDown, и кнопка Button. Так как данные, вводимые пользователем в NumericUpDown имеют тип String, то для того, чтобы отдать данные АЧТ я делаю так: sd.SetTemperature (System::Convert::ToDouble::TemperatureW indow->Text). Чтобы вернуть данные из АЧТ я делаю так: TemperatureWindow->Text=System::Convert::ToString(sd.GetTe mperature()). Вот. А теперь важный момент. Экземпяр класса я создал только лишь с целью оживить пользовательский интерфейс, а по сути-то мне нужно формировать битовую посылку в порт. И где-то в этом месте начинаются непонятности. Чтобы сформировать такую посылку мне ведь надо взять из NumericUpDown поле Text, потом переделать его в тип Byte, и скормить то, что получилось методу serialPort1->Write. А ведь у меня 2 окошка. Одно для температуры, другое для точности. И если я дважды выполню Write, вероятно, данные в порт пойдут одни поверх других? И насчет метода write, как я уже говорил, тоже сомнения. Он перегруженный. Ему можно отдать строку string в одном случае, а в другом ему надо передать аж 3 параметра - массив типа Byte, первый элемент массива (int) и количество байтов (int). В моем случае это предпочтительнее, метод гибкий. А вот как из string сделать byte - я ума никак не приложу. Делал так: array <Byte>^bytes = System::Text::Encoding::GetBytes(Tempera tureWindow->Text). Не работает, говорит недопустимый вызов нестатичной функции-члена. Пробовал System::Convert::ToByte(TemperatureWindo w->Text). Пробовал так: serialPort1->Write(System::Convert::ToByte(Temperatu reWindow->Text),0,2). Тоже не работает. На этом умные мысли кончились, полез на форум Ну вот как-то так, надеюсь не утомил своими глупостями
0
|
|
|
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 11
|
|
| 05.12.2013, 17:01 | |
|
Джентельмены, доброго дня всем Вам еще разок. Бьюсь-бьюсь, никак не добьюсь, очень нужен чей-нибудь совет. Все таже задачка чтения-записи из/в COM-порт посредством Visual Studio 2008. Вот такая конструкция:
... if (!serialPort1->IsOpen) serialPort->Open(); serialPort1->WriteLine(TextBox2->Text); textBox1->AppendText(System::Convert::ToString(se rialPort1->ReadExisting)); ... Проверили, открыт ли порт, если не открыт - открыли; записали строку (предварительно подготовленную) в выходной буфер ком-порта; считали данные из входного буфера ком-порта, предварительно приведя их в строковый вид. По идее все должно шевелиться, но увы...я не вижу ни единой принятой строчки. Помогите, люди добрые, не кодом, но мудрым советом ))). Не хватает понимания физики процесса.
0
|
|
|
1 / 1 / 0
Регистрация: 15.09.2018
Сообщений: 5
|
|
| 01.10.2018, 13:32 | |
|
Sudoki, вопрос не по теме, но нет возможности ждать, нет!
Вопрос: как передать данные из функции (говоря языком ANSI C) в текстовое поле textBox Form1 VS 2010, CLR? C++. Сама форма Form1 создается автоматически помощником. В форму вручную добавлены элементы: textBox1, comboBox1, button1. Задача при нажатии botton1 считать данные из comboBox1 и что-то записать в textBox1. Что как делать не пойму, начинаю изучать С++ с нуля (ранее писал на ANSI C для микроконтроллеров, мне 55 лет), но необходимо сделать задачу быстро, на самом деле функция иная, но если мне понять до я модифицирую мою основную. В другой ветке мне рекомендовали внести ее в класс, но куда и что писать в Form1 не пойму. ------------------------------------------------------------- Функция в отдельном файле: отдельный файл: func.cpp #include "func.h" int calc(int a, int b) { string pozition; if(a > 5) pozition = comboBox_COMselect->Text; //получить имя выбранного порта if(b < 10) textBox_SendData->Text = System::Convert::ToString(100); } ___________________________
0
|
|
| 01.10.2018, 13:32 | |
|
Microsoft Visual Studio microsoft visual studio 2005 Microsoft Visual Studio 2010 Microsoft visual studio 2010 Чем отличается Microsoft Visual C++ 2010 Express от Visual Studio 2010 Ultimate Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем
Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026
. . .
|
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки
План доработки модели динамики микоризных симбиозов (EcM с гистерезисом)
Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
|
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
|
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
|
|
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание:
как одно здание порождает конфликты требований,
которые никто не планировал
Материалы для обсуждения с МГСУ · 2026
Рисунки внутри приложенного ворд файла.
Что за. . .
|
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования?
Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная.
Где разрыв
. . .
|
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно»
Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
|
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую:
Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
|