Последовательная связь с использованием 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