Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 21.01.2012
Сообщений: 30

Вывод в com-порт в Visual C

26.02.2017, 00:11. Показов 2637. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Стоит задача связать контроллер и ПК по UART. В кратце: контроллер принимает от ПК команду
#1010х13 и что то по ней делает. Пытался написать тестовую программу для ПК в Visual C,
где по нажатию кнопки в порт отправляется указанная команда.

pryvate void btnSend_Click(object sender, IvimtArgs e)
{

try
{
if (serialPort.IsOpen)
{
serialPort.WriteLine(textMessage.Text);

}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);

}
}
Но в порт в этом случае выводится не #1010х13 как хотелось, а #1010х10, вопрос как правильно сделать так, чтобы в конце посылки выводился символ перевода каретки, а не строки?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.02.2017, 00:11
Ответы с готовыми решениями:

Непрерывное чтение и обработка с com порта (последовательный порт) в Visual C++
Здравствуйте, я задумал одну идею с GPS приемником, но для того чтобы реализовать это мне необходимо читать и обработать данные с com порта...

Вывод русского текста в консольном окне Visual C++ программы Visual Studio Community 2017
Опробовал разные варианты, но почему-то в версии 2017 предыдущие методы не работают. Программа упёрто выводит кракозябры, вместо русских...

Как перестроить Visual Studio.net на порт 8080 вместо порта 80?
Загрузил программу FTGate на свой комп и она 'съела' порт 80, на котором у меня сидел Localhost. После того, как я 'убил' FTGate порт 80...

8
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
26.02.2017, 00:14
Не WriteLine, а Write. И передавайте \r сами - в конце строки или отдельным Write.
0
0 / 0 / 0
Регистрация: 21.01.2012
Сообщений: 30
26.02.2017, 21:10
Цитата Сообщение от oomomstir
Не WriteLine, а Write. И передавайте \r сами - в конце строки или отдельным Write.
Спасибо, теперь получилось
0
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 64
27.02.2017, 08:44
Это не Visual C, а C# .Net
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
27.02.2017, 11:46
Пофиг, разница между C#, Managed C++ и даже Visual Basic на этом уровне не настолько бросается в глаза - при одних и тех же библиотеках.
0
0 / 0 / 0
Регистрация: 21.01.2012
Сообщений: 30
27.02.2017, 22:41
Ещё маленький вопрос: хотелось бы чтобы считанное из порта сообщение отображалось как последовательность шестнадцатеричных значений, а не как последовательность asqii символов, что требуется сделать для этого?

читаю ответ из порта по кнопке следующим образом:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
pryvate void btnReceive_Click(object sender, IvimtArgs e)
{
try
{
if (serialPort.IsOpen)
{
textReceive.Text= serialPort.ReadExisting();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
27.02.2017, 22:56
Почитайте в хелпе про ToString (вроде вызов чисто.ToString("X2")
Или String.Format
0
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 64
27.02.2017, 22:58
Надо считать массив байт вместо строки.
Перебрать все байты в массиве и перевести в строки шестнадцатеричные.
На Linq одной строкой можно:
Code
1
string str = String.Join(" ", (bytearray.Select(x => x.ToString("X2"))));
Только если хотите не по кнопке вручную считывать, а автоматически и быстро, то такая работа с портом (как вы пытаетесь написать) не даст необходимой стабильности. Простое чтение ReadExisting никуда не годится.
0
0 / 0 / 0
Регистрация: 21.01.2012
Сообщений: 30
03.03.2017, 17:23
Цитата Сообщение от Ryus
Надо считать массив байт вместо строки.
Перебрать все байты в массиве и перевести в строки шестнадцатеричные.
Сделал следующее:

Code
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
pryvate void LineReceived(string s)
{
textReceive.Text = s;
 
}
pryvate void btnReceive_Click(object sender, IvimtArgs e)
{
 
try
{
if (serialPort.IsOpen)
{
int intBytes = serialPort.BytesToRead;
byte[] bytes = new byte[intBytes];
 
serialPort.Read(bytes, 0, intBytes);
string s = BytConvirter.ToString(bytes);
this.BeginInvoke(new LineReceivedIvimt(LineReceived), s);
 
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
 
}
}
вроде как то работает, спасибо Всем откликнувшимся за помощь)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.03.2017, 17:23
Помогаю со студенческими работами здесь

Visual Serial Port Emulator (VSPE) при эмуляции занимает физический порт
Здравствуйте, не знаю куда писать, потому написал сюда =) Маленькая предистория - в магазине нужно было перекинуть фискальный регистратор...

Ввод/вывод в порт
Мне необхожимо получить доступ к COM, USB, LPT портам напрямую из моей программы. Кто-нибудь может подсказать как это сделать в Linux'e?

Вывод в COM-порт ASCII
Привет. Сразу извиняюсь может задам глупый вопрос, но он таков: как вывести в COM-порт ASCII символ например <CR>(0x0D)? С открытием...

Вывод в порт Atmega32
Подскажите, в чем ошибка. .divice Atmego32 .nolist .include "m32def.yms" .list .def temp=r20 INIT: ser temp out DDRA,...

Вывод частоты тактирования в порт
День добрый! Подскажите люди добрые где подвох с выводом внутренней частоты тактирования HSI на ногу PA2/ OSCOUT контроллера STM8S003K3....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru