Difference between revisions of "C sharp сериен порт"
(32 intermediate revisions by the same user not shown) | |||
Line 7: | Line 7: | ||
==Стартиране на програмата== | ==Стартиране на програмата== | ||
− | Първо записваме, а след това стартираме с | + | [[startForm|Първо записваме проекта с ново име (File -> Save WindowsFormApplication1 As ..), а след това стартираме с '''F5''' или бутона '''play''']]. Така ще се премине в дебъг режим. За да се редактира отново приложенито, първо трябва да се затвори прозореца на приложенито в дебъг режим. |
==Добавяне на бутон и настройки(properties)== | ==Добавяне на бутон и настройки(properties)== | ||
− | |||
− | ==Добавяне на управление== | + | От прозореца с инструменти (ToolBox - в дясно горе), в частта средства за управление (Common Controls) [[CS добавяне бутон|изберете Button и кликнете върху модела на формата]]. |
+ | |||
+ | Кликнете с десен бутон на мишката върху появилия се бутон, [[CS настройки|изберете properties и сменете текста на бутона]] от '''button1''' на '''Connect'''. | ||
+ | |||
+ | ==Добавяне на многоредово текстово поле== | ||
+ | |||
+ | [[CS многоредово текстово поле|От прозореца с инструменти (ToolBox - в дясно горе), в частта средства за управление (Common Controls) изберете TextBox и кликнете върху модела на формата и разположете текстовото поле. От настройки (properties) променете опцията '''Multiline''' от '''false''' на '''true'''.]] | ||
+ | |||
+ | ==Добавяне на програмен код== | ||
+ | |||
+ | Кликнете два пъти върху формата, за да се отвори прозореца с програмния код. | ||
+ | |||
+ | ===Деклариране на използваните класове=== | ||
+ | |||
+ | Към автоматично генерираните клсова | ||
+ | <code><pre>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;</pre></code> | ||
+ | [[CS добавяне на вградени класове|добавете класовете за управление на серийния порт]] | ||
+ | <code><pre> | ||
+ | using System.IO; | ||
+ | using System.IO.Ports; | ||
+ | </pre></code> | ||
+ | |||
+ | ===Създаване на инстанция на серийния порт=== | ||
+ | [[Инстанция сериен порт|В класа Form1 добавете:]] | ||
+ | private SerialPort comport = new SerialPort(); | ||
+ | Може да изглежда така: | ||
+ | public partial class Form1 : Form | ||
+ | { | ||
+ | private SerialPort comport = new SerialPort(); | ||
+ | |||
+ | public Form1() | ||
+ | { | ||
+ | |||
+ | === Събитие при натискане на бутона === | ||
+ | |||
+ | [[CS add event on click|Върнете се в прозореца за проектиране и кликнете два пъти върху бутона '''connect'''.]] Това автоматично ще създададе метод, който ще се изпълнява при натискане на бутона. За отваряне на серийния порт и изпращане на начално съобщение може, трябва да се добави следния код: | ||
+ | <code><pre> | ||
+ | private void button1_Click(object sender, EventArgs e) | ||
+ | { | ||
+ | if (!comport.IsOpen) | ||
+ | { | ||
+ | comport.BaudRate = 9600; | ||
+ | comport.Parity = Parity.None; | ||
+ | comport.StopBits = StopBits.One; | ||
+ | comport.DataBits = 8; | ||
+ | comport.Handshake = Handshake.None; | ||
+ | comport.RtsEnable = true; | ||
+ | comport.Open(); | ||
+ | |||
+ | if (comport.IsOpen) | ||
+ | { | ||
+ | comport.Write("\n\rHello Serial Port!\n\r"); | ||
+ | button1.Text = "Disconnect"; | ||
+ | } | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | comport.Close(); | ||
+ | if (!comport.IsOpen) | ||
+ | { | ||
+ | button1.Text = "Connect"; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </pre></code> | ||
+ | |||
+ | |||
+ | Кликнете два пъти върху текстовото поле и добавете код за изпращане на нов символ: | ||
+ | <code><pre> | ||
+ | private void textBox1_TextChanged(object sender, EventArgs e) | ||
+ | { | ||
+ | textBox1.Invoke(new EventHandler(delegate | ||
+ | { | ||
+ | if (comport.IsOpen) | ||
+ | { | ||
+ | string t = textBox1.Text; | ||
+ | char b = (char)t[t.Length - 1]; | ||
+ | comport.Write(b.ToString()); | ||
+ | if (b == '\n') | ||
+ | comport.Write("\r".ToString()); | ||
+ | } | ||
+ | } | ||
+ | )); | ||
+ | } | ||
+ | </pre></code> | ||
+ | |||
+ | ==Приемане на данни== | ||
+ | |||
+ | За генериране на събитие при постъпване на данни добавете към конструктура public Form1(). С втория ред ще бъде извикван метода port_DataReceived при наличие на данни. | ||
+ | comport.RtsEnable = true; | ||
+ | comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); | ||
+ | public Form1() ще изглежда така: | ||
+ | <code><pre> | ||
+ | public Form1() | ||
+ | { | ||
+ | InitializeComponent(); | ||
+ | comport.RtsEnable = true; | ||
+ | comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); | ||
+ | } | ||
+ | </pre></code> | ||
+ | Добавете ново текстово поле и метод port_DataReceived за извеждане на получени символи, примерно: | ||
+ | <code><pre> | ||
+ | private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) | ||
+ | { | ||
+ | // If the com port has been closed, do nothing | ||
+ | if (!comport.IsOpen) return; | ||
+ | string data = comport.ReadExisting(); | ||
+ | |||
+ | textBox2.Invoke(new EventHandler(delegate | ||
+ | { | ||
+ | textBox2.AppendText(data); | ||
+ | })); | ||
+ | } | ||
+ | </pre></code> |
Latest revision as of 10:41, 27 January 2016
Contents
Стартиране на Microsoft Visual C# Express
Start -> Microsoft Visual C# Express
Създаване на Windows форма
От главното меню изберете File->New Project->Windows Forms Application.
Стартиране на програмата
Първо записваме проекта с ново име (File -> Save WindowsFormApplication1 As ..), а след това стартираме с F5 или бутона play. Така ще се премине в дебъг режим. За да се редактира отново приложенито, първо трябва да се затвори прозореца на приложенито в дебъг режим.
Добавяне на бутон и настройки(properties)
От прозореца с инструменти (ToolBox - в дясно горе), в частта средства за управление (Common Controls) изберете Button и кликнете върху модела на формата.
Кликнете с десен бутон на мишката върху появилия се бутон, изберете properties и сменете текста на бутона от button1 на Connect.
Добавяне на многоредово текстово поле
Добавяне на програмен код
Кликнете два пъти върху формата, за да се отвори прозореца с програмния код.
Деклариране на използваните класове
Към автоматично генерираните клсова
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;
Създаване на инстанция на серийния порт
private SerialPort comport = new SerialPort();
Може да изглежда така:
public partial class Form1 : Form { private SerialPort comport = new SerialPort(); public Form1() {
Събитие при натискане на бутона
Върнете се в прозореца за проектиране и кликнете два пъти върху бутона connect. Това автоматично ще създададе метод, който ще се изпълнява при натискане на бутона. За отваряне на серийния порт и изпращане на начално съобщение може, трябва да се добави следния код:
private void button1_Click(object sender, EventArgs e)
{
if (!comport.IsOpen)
{
comport.BaudRate = 9600;
comport.Parity = Parity.None;
comport.StopBits = StopBits.One;
comport.DataBits = 8;
comport.Handshake = Handshake.None;
comport.RtsEnable = true;
comport.Open();
if (comport.IsOpen)
{
comport.Write("\n\rHello Serial Port!\n\r");
button1.Text = "Disconnect";
}
}
else
{
comport.Close();
if (!comport.IsOpen)
{
button1.Text = "Connect";
}
}
}
Кликнете два пъти върху текстовото поле и добавете код за изпращане на нов символ:
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Invoke(new EventHandler(delegate
{
if (comport.IsOpen)
{
string t = textBox1.Text;
char b = (char)t[t.Length - 1];
comport.Write(b.ToString());
if (b == '\n')
comport.Write("\r".ToString());
}
}
));
}
Приемане на данни
За генериране на събитие при постъпване на данни добавете към конструктура public Form1(). С втория ред ще бъде извикван метода port_DataReceived при наличие на данни.
comport.RtsEnable = true; comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
public Form1() ще изглежда така:
public Form1()
{
InitializeComponent();
comport.RtsEnable = true;
comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}
Добавете ново текстово поле и метод port_DataReceived за извеждане на получени символи, примерно:
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// If the com port has been closed, do nothing
if (!comport.IsOpen) return;
string data = comport.ReadExisting();
textBox2.Invoke(new EventHandler(delegate
{
textBox2.AppendText(data);
}));
}