Easyelectronics.ru

Электроника для всех
Текущее время: 11 авг 2020, 02:10

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Вывод в com-порт в Visual C
СообщениеДобавлено: 27 фев 2017, 00:58 
Заглядывает иногда

Зарегистрирован: 25 янв 2012, 22:59
Сообщения: 35
Здравствуйте!
Стоит задача связать контроллер и ПК по UART. В кратце: контроллер принимает от ПК команду
'#''1''0''1'0х13 и что то по ней делает. Пытался написать тестовую программу для ПК в Visual C,
где по нажатию кнопки в порт отправляется указанная команда.

Цитата:

private void btnSend_Click(object sender, EventArgs e)
{

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

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

}
}

Но в порт в этом случае выводится не '#''1''0''1'0х13 как хотелось, а '#''1''0''1'0х10, вопрос как правильно сделать так, чтобы в конце посылки выводился символ перевода каретки, а не строки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод в com-порт в Visual C
СообщениеДобавлено: 27 фев 2017, 01:01 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2769
Откуда: Санкт-Петербург
Не WriteLine, а Write. И передавайте \r сами - в конце строки или отдельным Write.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод в com-порт в Visual C
СообщениеДобавлено: 27 фев 2017, 21:57 
Заглядывает иногда

Зарегистрирован: 25 янв 2012, 22:59
Сообщения: 35
aamonster писал(а):
Не WriteLine, а Write. И передавайте \r сами - в конце строки или отдельным Write.

Спасибо, теперь получилось


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод в com-порт в Visual C
СообщениеДобавлено: 28 фев 2017, 09:31 
Заглядывает иногда

Зарегистрирован: 09 янв 2013, 21:54
Сообщения: 102
Откуда: Челябинск
Это не Visual C, а C# .Net


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод в com-порт в Visual C
СообщениеДобавлено: 28 фев 2017, 12:33 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2769
Откуда: Санкт-Петербург
Пофиг, разница между C#, Managed C++ и даже Visual Basic на этом уровне не настолько бросается в глаза - при одних и тех же библиотеках.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод в com-порт в Visual C
СообщениеДобавлено: 28 фев 2017, 23:28 
Заглядывает иногда

Зарегистрирован: 25 янв 2012, 22:59
Сообщения: 35
Ещё маленький вопрос: хотелось бы чтобы считанное из порта сообщение отображалось как последовательность шестнадцатеричных значений, а не как последовательность asqii символов, что требуется сделать для этого?

читаю ответ из порта по кнопке следующим образом:
Код:
private void btnReceive_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort.IsOpen)
                {
                    textReceive.Text= serialPort.ReadExisting();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод в com-порт в Visual C
СообщениеДобавлено: 28 фев 2017, 23:43 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2769
Откуда: Санкт-Петербург
Почитайте в хелпе про ToString (вроде вызов чисто.ToString("X2")
Или String.Format


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод в com-порт в C# .Net
СообщениеДобавлено: 28 фев 2017, 23:45 
Заглядывает иногда

Зарегистрирован: 09 янв 2013, 21:54
Сообщения: 102
Откуда: Челябинск
Надо считать массив байт вместо строки.
Перебрать все байты в массиве и перевести в строки шестнадцатеричные.
На Linq одной строкой можно:
Код:
string str = String.Join(" ", (bytearray.Select(x => x.ToString("X2"))));


Только если хотите не по кнопке вручную считывать, а автоматически и быстро, то такая работа с портом (как вы пытаетесь написать) не даст необходимой стабильности. Простое чтение ReadExisting никуда не годится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод в com-порт в C# .Net
СообщениеДобавлено: 04 мар 2017, 18:10 
Заглядывает иногда

Зарегистрирован: 25 янв 2012, 22:59
Сообщения: 35
Rius писал(а):
Надо считать массив байт вместо строки.
Перебрать все байты в массиве и перевести в строки шестнадцатеричные.


Сделал следующее:

Код:
private void LineReceived(string s)
        {
            textReceive.Text = s;

        }
        private void btnReceive_Click(object sender, EventArgs e)
        {

           

            try
            {
                if (serialPort.IsOpen)
                {
                    int intBytes = serialPort.BytesToRead;
                    byte[] bytes = new byte[intBytes];

                    serialPort.Read(bytes, 0, intBytes);
                    string s = BitConverter.ToString(bytes);
                    this.BeginInvoke(new LineReceivedEvent(LineReceived), s);
                   
                   

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

            }
        }

вроде как то работает, спасибо Всем откликнувшимся за помощь)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB