Difference between revisions of "C sharp сериен порт"

From Ilianko
 
(24 intermediate revisions by the same user not shown)
Line 7: Line 7:
  
 
==Стартиране на програмата==
 
==Стартиране на програмата==
Първо записваме, а след това стартираме с [[startForm|'''F5''' или бутона '''play''']]. Така ще се премине в дебъг режим. За да се редактира отново приложенито, първо трябва да се затвори прозореца на приложенито в дебъг режим.
+
[[startForm|Първо записваме проекта с ново име (File -> Save WindowsFormApplication1 As ..), а след това стартираме с '''F5''' или бутона '''play''']]. Така ще се премине в дебъг режим. За да се редактира отново приложенито, първо трябва да се затвори прозореца на приложенито в дебъг режим.
  
 
==Добавяне на бутон и настройки(properties)==
 
==Добавяне на бутон и настройки(properties)==
Line 20: Line 20:
  
 
==Добавяне на програмен код==
 
==Добавяне на програмен код==
===Деклариране на използваните класове за управление на серийния порт===
+
 
 +
Кликнете два пъти върху формата, за да се отвори прозореца с програмния код.
 +
 
 +
===Деклариране на използваните класове===
 +
 
 +
Към автоматично генерираните клсова
 +
<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

Стартиране на 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.

Добавяне на многоредово текстово поле

От прозореца с инструменти (ToolBox - в дясно горе), в частта средства за управление (Common Controls) изберете TextBox и кликнете върху модела на формата и разположете текстовото поле. От настройки (properties) променете опцията Multiline от false на true.

Добавяне на програмен код

Кликнете два пъти върху формата, за да се отвори прозореца с програмния код.

Деклариране на използваните класове

Към автоматично генерираните клсова

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;

Създаване на инстанция на серийния порт

В класа Form1 добавете:

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);
        }));
    }