Последовательная связь с использованием WPF, RS232 и микроконтроллера

Поэтапное создание рабочего WPF приложения, которое способно работать с портом последовательной связи. Понятие ReadTimeout, WriteTimeout и Dispatcher.Invoke метода. Последовательная передача данных через RS232, используя технологию Microsoft WPF.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 28.09.2012
Размер файла 404,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Последовательная связь с использованием WPF, RS232 и микроконтроллера

Выполнил

Петряев Вячеслав Евгеньевич

Эта статья покажет, как использовать последовательную передачу данных через RS232, используя технологию Microsoft WPF. Я не хочу останавливаться на внешнем виде программы, а уделить большее внимание коду. В частности есть ключевые пункты, такие как Dispatcher.Invoke метод и преобразование символов их из ASCII в 16 систему счисления, что является камнями преткновения в последовательной связи с микроконтроллером.

Ключевые слова: WPF, COM порт, RS232, C#.

Keywords: WPF, Serial Port, RS232, C#.

Следует начать с того, что нужно показать, как создать приложение. Чтобы создать проект для приложения:

1. Запустите Visual Studio 2010.

2. В меню File («Файл») выберите команду New («Создать»), а затем команду New Project («Проект»).

Рис. 1. Выбор меню создания проекта

3. Откроется диалоговое окно New Project («Создание проекта»).

Рис. 2. Диалоговое окно создания проекта

Примечание. В поле со списком Target Framework Version («Целевая версия платформы») по умолчанию выбрано последнее использованное значение. При создании проекта убедитесь в том, что выбрана нужная версия платформы.

Шаг 1. Выберите язык в нашем случае C#, а затем выберите пункт Windows.

Шаг 2. Выберите пункт WPF Application («Приложение WPF»).

Шаг 3. Введите имя проекта.

Совет. Хотя в имени проекта можно использовать пробелы, делать это не рекомендуется.

Шаг 4. Нажмите кнопку ОК, чтобы создать новое приложение WPF.

Присвоим приложению заголовок. Свойство Title находится в верхней левой части хрома окна. [1]

Теперь можно начинать создавать приложение. Код написан просто, с небольшим вниманием на обозначения. Во-первых, начнем с интерфейса. Сперва сделаем 2 ComboBox для выбора номера COM порта и скорости передачи, а так же разместим TextBox для данных, которые нужно отправить, и Richtextbox для отображения полученной информации из COM порта, и пару кнопок для действий.

Первый важный фактор - то, откуда будут получены номера COM портов и скорость. Есть способы, с помощью которых можно получить эти данные от компьютера, но для большего контроля поместим все названия в файл XML по имени CommsData.xml. Эти данные обеспечены “Источником данных” и размещены в предалах Windows.Resource элемента. XPath показывает какой элемент выбран, а x:Key - то, на что я ссылаюсь в коде.

<Window.Resources>

<XmlDataProvider x:Key="ComPorts" Source="CommsData.xml" XPath="/Comms/Ports" />

<XmlDataProvider x:Key="ComSpeed" Source="CommsData.xml" XPath="/Comms/Baud" />

</Window.Resources>

Приведем содержание CommsData.xml.

<Comms>

<Ports>COM1</Ports>

<Baud>921600</Baud>

</Comms>

Так можно дописать сколько нужно строк с нужными названиями COM портов и скоростей.

В каждом элементе ComboBox нужно указать место, откуда он будет брать информацию. В нашем случае это xml файл. Для выбора порта:

<ComboBox Name="Comm_Port_Names” ItemsSource="{Binding Source={StaticResource ComPorts}}"/>

Для выбора скорости:

<ComboBox Name="Baud_Rates" ItemsSource="{Binding Source={StaticResource ComSpeed}}"/>

С интерфейсом закончили и можно приступать к добавлении функциональности.

Во-первых, мы должны добавить ссылку на библиотеку IO.PORTS, которая содержит команды для управления COM портом.

using System.IO.Ports;

Теперь мы можем создать последовательный порт. Для удобства я назвал его serial, но если вам требуется рабоать с несколькими портами, то их названия должны отличаться.

SerialPort serial = new SerialPort();

Есть несколько свойств последовательного порта, которые можно редактировать. Это происходит в рамках исходного кода перед нажатием кнопки Connect. Главное их установить до открытия порта.

serial.PortName = Comm_Port_Names.Text; //Com Port Name

serial.BaudRate = Convert.ToInt32(Baud_Rates.Text);

serial.Handshake = System.IO.Ports.Handshake.None;

serial.Parity = Parity.None;

serial.DataBits = 8;

serial.StopBits = StopBits.One;

serial.ReadTimeout = 200;

serial.WriteTimeout = 50;

Информацию об этих свойствах смотрите в RS232 протоколе. Эти параметры удовлетворяют в большинстве случаев. Есть два важных свойства. ReadTimeout - это свойство устанавливает максимальное время, которое программа читает данные с порта от начала приема. Если сделать его маленьким, то могут возникать ошибки и сообщение может быть укорочено. WriteTimeout - время, отведенное для отправки данных через порт.

Теперь у нас есть последовательный порт. Важно создавать вызов функции каждый раз, когда порт имеет данные для чтения. Для этого создадим события и добавим его к событиям получения данных:

serial.DataReceived+=new SerialDataReceivedEventHandler(Recieve);

Будем записывать данные в строку

String recieved_data;

А затем вызовем функцию этих данных в нашу форму. Что бы это сделать вначале нужно подключить еще одну библиотеку:

using System.Windows.Threading;

private void Recieve (object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

{

recieved_data = serial.ReadExisting();

Dispatcher.Invoke(DispatcherPriority.Send,

new UpdateUiTextDelegate(WriteData), recieved_data);

}

Сейчас мы должны использовать Dispatcher.Invoke метод. Его цель проста: главная форма находится под контролем своего потока; когда последовательный порт объявляет о получении данных, создается новый поток, чтобы прочитать эти данные. Этот метод позволяет передать нашу строку из одного потока в другой без ошибок.

Данные могут быть отображены в любом элементе, способном отображать текст. В нашем случае это RichTextBox. Сперва нужно создать абзац. wpf readtimeout writetimeout dispatcher invoke rs232 порт

FlowDocument mcFlowDoc = new FlowDocument();

Paragraph para = new Paragraph();

Вот так выглядит функция для отображения данных:

private void WriteData(string text)

{

para.Inlines.Add(text);

mcFlowDoc.Blocks.Add(para);

Commdata.Document = mcFlowDoc;

}

Отправка данных. Для общения с микроконтроллером данные необходимо преобразовать в 16 систему. Текст, набранный в SerialData TextBox запускает функцию SerialCmdSend.Во-первых нужно проверить открыт ли порт. Во-вторых преобразовать данные в 16 систему.

private void Send_Data(object sender, RoutedEventArgs e)

{

SerialCmdSend(SerialData.Text);

SerialData.Text = "";

}

public void SerialCmdSend(string data)

{

if (serial.IsOpen)

{

try

{

byte[] hexstring = Encoding.ASCII.GetBytes(data);

foreach (byte hexval in hexstring)

{

byte[] _hexval = new byte[] { hexval };

serial.Write(_hexval, 0, 1);

Thread.Sleep(10);

}

}

catch (Exception ex)

{

para.Inlines.Add("Ошибка отправки" + data + "\n" + ex + "\n");

mcFlowDoc.Blocks.Add(para);

Commdata.Document = mcFlowDoc;

}

}

else

{

}

}

Вот что получается в итоге:

Все. Сейчас вы имеете рабочее WPF приложение, способное работать с портом последовательной связи. Имея эти знания, вы можете начать разрабатывать, например, свою SCADA систему.

Размещено на Allbest.ru


Подобные документы

  • Универсальная последовательная шина USB - универсальный порт для подключения устройств к персональному компьютеру и организации обмена между ними. Особенности спецификаций USB от версии 1.0 до версии 3.0. Архитектура, правила подключения, совместимость.

    курсовая работа [2,6 M], добавлен 23.11.2013

  • Основные понятия баз данных: нормализация, связи и ключи. Создание и этапы проектирования базы данных, решение задачи о предметной области. Изучение СУБД Microsoft Access s 2003: пользовательский интерфейс, главное окно приложения, создание таблиц.

    реферат [2,1 M], добавлен 10.11.2010

  • Программирование с использованием технологий Microsoft .NET. Разработка приложения "Станция технического обслуживания автомобилей": инфологическое, даталогическое проектирование базы данных. Информационное и программное обеспечение, логическая структура.

    курсовая работа [1,6 M], добавлен 03.07.2011

  • Разработка программного приложения Windows Forms для работы с базой данных на языке высокого уровня в автономном режиме с использованием ADO.NET. Создание консольных приложений (варианты метода Main), выполнение запросов к SQL серверу и листинг программ.

    курсовая работа [2,4 M], добавлен 16.06.2014

  • Ядро микроконтроллеров AVR семейства Mega. Временные характеристики ЖК-дисплея. Подключение модуля HD44780. Список управляющих комбинаций битов регистра IR, выполняемые команды. Приём данных по интерфейсу RS 232. Назначение выводов 9-контактного разъема.

    курсовая работа [1,2 M], добавлен 10.01.2015

  • Теоретические подходы к сети на FireWire, основные проблемы и пути их решения. Обмен цифровой информацией между компьютером и другими электронными устройствами. Описание высокоскоростной последовательной шины, спецификации FireWire и принцип работы.

    курсовая работа [365,9 K], добавлен 18.11.2009

  • Создание приложения Windows Forms в среде Microsoft Visual Studio 2008. Разработка программы "Курсовой" для организации работы по учёту курсовых работ в учебных заведениях с возможностью добавления, удаления, редактирования и поиска информации.

    курсовая работа [2,2 M], добавлен 28.06.2011

  • Разработка протоколов передачи данных электросвязи для систем сотовой и кабельной связи по аналого-цифровым телефонным линиям связи. Одновременная передача данных и голоса, коррекция ошибок и сжатия; их возможности. История и прогноз на будущее.

    реферат [72,9 K], добавлен 06.04.2010

  • Проектирование базы данных с использованием комплекса программных и языковых средств Microsoft Access. Модель данных, доступ к ним. Назначение, основные возможности и версии Access. Запуск программы; окно базы данных, формы для их ввода и редактирования.

    курсовая работа [1,1 M], добавлен 30.12.2014

  • Создание структуры базы данных на примере "Школьного журнала" с использованием метода и принципа нормализации. Понятия базы данных, архитектуры БД и проектирования. Описание предметной области; приложения для работы с базой данных TTable и TQuery.

    дипломная работа [996,4 K], добавлен 01.04.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.