В начало | Зарегистрироваться | Заказать наши киты почтой
 
 
 
 

Программа обмена по RS-232 на языке C# в среде Microsoft Visual Studio

📆14 мая 2013   ✒️Serhiy_UA   🔎39.051   💬5  
Программа обмена по RS-232 на языке C# в среде Microsoft Visual Studio

Сограждане, применяющие микроконтроллеры, часто испытывают потребность использования функций обмена по интерфейсу RS-232. Для этого надо уметь программировать и писать обслуживающие программы уже не только для микроконтроллеров, а и для персональных компьютеров.

Мне приходилось программировать в Turbo Pascal, затем в Delphi и, наконец, в Borland C++ Builder 6.0. Все они были по-своему интересны и полезны. Однако сейчас становятся популярны новые среды программирования, и надо не отставать от других пользователей в их освоении. Как мне кажется, наиболее перспективной является среда Microsoft Visual Studio 2010 (сокращенно MSVS2010) и программирование на языке C# (си шарп). Некоторые скажут зачем, но как поговариваю: летчик должен уметь летать на всем что летает, и немного на том, что не летает, если он конечно профессионал.
Книг по среде Microsoft Visual Studio 2010 и языку C# достаточно, учебные и пробные версии ПО можно найти в интернете, так что можно смело начинать.

В приложении - готовый, написанный мною открытый проект, который можно использовать в своих работах как образец-заготовку. Проект небольшой, так что его легко будет освоить, затем дополнить и расширить его функциями, в общем, использовать по своему усмотрению.
При запуске программы PR14_RS-232.exe непосредственно или через оболочку MSVS2010 появится следующее основное окно, что на следующем рисунке.
Программа обмена по RS-232 на языке C# в среде Microsoft Visual Studio

В окне два поля для отображения кода выдачи и принятого кода и три кнопки управления. Сразу отмечу, что коды обмена отображаются байтами в 16-ричной системе счисления, а сами байты отделены пробелами. Например, для выдачи кода нужно в режиме обычного редактирования подготовить код, а затем кликнуть по кнопке «Выдать». В данном случае в качестве шаблона предлагается выдать код их шести байт: 0f 12 34 56 78 90. Если по ошибке будет введен символ, не принадлежащий 16-ричной системе, то при нажатии на кнопку, выдачи не произойдет, но появится следующее сообщение об ошибке.

Все принятые коды выводятся в аналогичном формате в окне «Принятый код», при этом размер принятого кода может быть достаточно большим, и в этом случае дополнительно появляется полоса прокрутки.

То есть используя данную программу можно обмениваться через СОМ1 со скоростью 9600 бит/с, что вполне достаточно для многих приложений при работе с микроконтроллерами.

А что же внутри программы, каков исходный код?

Основная часть написанной мною программы для проекта PR14_RS-232.sln содержится в файле Form1.cs.

Рассмотрим некоторые особенности и функции кода в этом файле Form1.cs.
В самом начале файла, основные подключения через директивы using, без которых ничего работать не будет. Последние из них, что с комментариями, необходимы для работы с СОМ портом и таймером. По поводу таймера, СОМ порт может обходиться и без него, таймер добавлен для последующего улучшения пользовательского интерфейса.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.IO; // для работы с СОМ портом
using System.IO.Ports;

using System.Timers; // Для работы с таймером

Создание СОМ порта обеспечивают следующие строки в class Form1. Здесь же видно, что обмениваться данными будем через СОМ1, но легко можно задать и другие.
    public partial class Form1 : Form
    {
        private SerialPort port = new SerialPort("COM1");// Создание СОМ-порта

Кстати, если скорость и другие параметры не устраивают, то их меняем подобно следующему:
private SerialPort port = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);

В основной функции public Form1() четыре строки. Первая формирует основную форму с кнопками и окошками, это стандартная строка, которая всегда создается автоматически. Следующие две строки создают обработчик прерываний для обменов по СОМ порту и отрывают сам СОМ порт. Четвертая строка выводит шаблон из шести байт в окно выдачи, к которому можно сделать привязку и, конечно, изменить.
public Form1()
        {
            InitializeComponent();
            port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            port.Open(); // Open the port
            richTextBox2.Text = "0f 12 34 56 78 90";
        }

В обработчике приема void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) имеется две строки, одна в самом начале, а другая в конце. Эти строки необходимы для синхронизаций, их обязательно надо применять. Управление передается обработчику, как только во входном буфере СОМ порта появляются принятые данные. Для считывания данных применяется следующие три строки. Здесь принятые коды считываются в байтовый буфер buffer.
      int bytes = port.BytesToRead;
            byte[] buffer = new byte[bytes];
            port.Read(buffer, 0, bytes);

Очередные следующие за ними три строки выводят данные в окно «Принятый код». Таким образом, в этом обработчике осуществляется прием по RS-232 и побайтный вывод принятого кода, а между байтами вставляются пробелы, что улучшает их обзор.

В обработчике выдачи private void button1_Click(object sender, EventArgs e), который запускается по кнопке «Выдать», осуществляются следующие действия. Проверяется, все ли символы в окне «Код выдачи» принадлежат 16-ричной системе счисления. Для этого используются первые двадцать строк кода, а при ошибке выводится сообщение через MessageBox.Show. Затем осуществляется собственно сама выдача, для этого применены следующие строки:
   byte[] bytes = new byte[Str.Length / 2];

            for (int i = 0; i < Str.Length / 2; i++)
            {
                char ch1 = Str[i * 2];
                char ch0 = Str[i * 2 + 1];
                bytes[i] = (byte)(STB(ch1) << 4 | STB(ch0));
                
            } 
            port.Write(bytes, 0, bytes.Length);

Где в последней строке, bytes – это сам подготовленный массив байт для выдачи, а bytes.Length – число выдаваемых в СОМ порт байт. Данный обработчик использует еще функцию private byte STB(char ch), служащую для преобразования знаковых символов в числа.

При нажатии кнопок «Очистить» работают обработчики private void button3_Click(object sender, EventArgs e) и private void button2_Click(object sender, EventArgs e), основная задача которых очистка окон приема и выдачи.
Вот такая небольшая программка.

Файлы

В архиве проект на языке C# в среде Microsoft Visual Studio 2010 и готовый файл PR14_RS-232.exe
🎁PR14_RS-232.zip  52.1 Kb ⇣ 207

Немного о себе

Я занимаюсь схемо-техникой с применением микроконтроллеров. Их было у меня достаточно много: это Intel 8080, 8051, 196, Atmel AT90, AVR, ATtiny и megaAVR, Silabs, а также NiosII. Их я программировал на ассемблере и С, и связывал с персональным компьютером по интерфейсу RS-232 на подобных программах, ну и с более сложным функционалом.

Желаю удачи!
Сергей

Камрад, рассмотри датагорские рекомендации

🌼 Полезные и проверенные железяки, можно брать

Опробовано в лаборатории редакции или читателями.




 

Читательское голосование

Нравится

Статью одобрили 36 читателей.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

Поделись с друзьями!

 

 

Связанные материалы

 

Схема на Датагоре. Новая статья Программа ForMC в помощь программисту микроконтроллеров... Программа называется ForMC, изначально предназначалась для МК AVR. В ней объединены несколько...
Схема на Датагоре. Новая статья Elect_60: программа микроконтроллерного управления внешними устройствами от ПК... Многие наши коллеги желающие создать микроконтроллерное устройство, управляемое от ПК сталкиваются...
Схема на Датагоре. Новая статья Программирование микроконтроллеров ATmega... Хеллоу ВСЕМ!!! Итак, как я и обещал, расскажу как залить программу в МК. Для этого нам понадобится...
Схема на Датагоре. Новая статья RusTV Player - программа для просмотра более 300 TV-каналов онлайн... Я встретил в Сети интересную программку RusTV Player Артура Каримова из г. Омск. Это программа для...
Схема на Датагоре. Новая статья Визуализация для микроконтроллера. Часть 1. OLED дисплей 0.96" (128х64) на SSD1306... Добрый день, друзья! Эта статья открывает цикл, посвящённый средствам визуального отображения...
Схема на Датагоре. Новая статья Программирование точных часов с применением алгоритма Брезенхама (Bresenham's Algorithm)... В свое время меня заинтересовала возможность реализации точного хода часов программно. Алгоритмы...
Схема на Датагоре. Новая статья Грызём микроконтроллеры. Урок 8. Программирование кнопок, клавиатуры, энкодера... Здравствуйте, дорогие Датагорцы! По некоторым слабо зависящим от меня причинам не мог участвовать в...
Схема на Датагоре. Новая статья Портативный анализатор ИК сигналов «IR-master»... Каждый радиолюбитель сталкивающийся с применением в своих конструкциях дистанционных пультов...
Схема на Датагоре. Новая статья Программа для лабораторного блока питания с микропроцессорным управлением на ATMega16... Обещанный релиз первого варианта "правильной" программы к статье Сделай сам лабораторный...
Схема на Датагоре. Новая статья Не стартует материнка от кнопки питания. Лечим очень нетривиальным методом... Приветствую читателей журнала Датагор! Есть у меня пожилой компьютер, которому уже исполнилось лет...
Схема на Датагоре. Новая статья Грызём микроконтроллеры. Урок 1. Моргаем 8-ю светодиодами. CodeVision, Proteus, ISIS... Эту статью (а точнее цикл статей) я решил полностью посвятить микроконтроллерам фирмы Atmel....
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 5... Для того чтобы писать более сложные программы, нужно хорошо представлять структуру и...
 

Комментарии, вопросы, ответы, дополнения, отзывы

 

<
Читатель Датагора

alex

<
Читатель Датагора

koan51

<
Читатель Датагора

GogaZh

<
Читатель Датагора

MerBas

Добавить комментарий, вопрос, отзыв 💬

Камрады, будьте дружелюбны, соблюдайте правила!

  • Смайлы и люди
    Животные и природа
    Еда и напитки
    Активность
    Путешествия и места
    Предметы
    Символы
    Флаги
 
 
В начало | Зарегистрироваться | Заказать наши киты почтой