laboratorul 5 utilizarea portului serial în visual c#dberian/labs/laborator5_mtp_is.pdf ·...

3
1 Laboratorul 5 Utilizarea portului serial în Visual C# .NET Ce ne propunem astăzi? În acest laborator ne propunem să implementăm în Visual C# .NET o aplicație destinată trimiterii și recepționării datelor folosind portul de comunicare de tip serial. Programul va căuta porturile existente, se va conecta la un port, apoi va trimite și va recepționa date prestabilite. Aplicația propusă (Figura 1) va comunica cu un echipament exterior pe portul serial prin transmitere de mesaje. Aplicația utilizează un ComboBox pentru afișarea porturilor de comunicare disponibile. Pentru a afișa proprietățile portului serial vom folosi un control PropertyGrid. Mesajul va fi trimis introdus dintr-un control TextBox simplu iar cel recepționat va fi afișat într-un control TextBox multi linie. Figura 1. Interfața aplicației pentru comunicare serială Mai pe larg, vom proceda astfel… Utilizarea porturilor seriale trebuie să includem în proiectul nostru biblioteca de funcții System.IO.Ports. Pentru a accesa portul serial va trebui să importăm prin drag&drop din ToolBox componenta SerialPort (Figura 2).

Upload: dinhtuyen

Post on 06-Feb-2018

224 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Laboratorul 5 Utilizarea portului serial în Visual C#dberian/Labs/Laborator5_MTP_IS.pdf · Laborator 5 – MTP 2 Figura 2. Portul serial din ToolBox Căutarea porturilor seriale

1

Laboratorul 5

Utilizarea portului serial în Visual C# .NET

Ce ne propunem astăzi?

În acest laborator ne propunem să implementăm în Visual C# .NET o aplicație destinată trimiterii și recepționării datelor folosind portul de comunicare de tip serial. Programul va căuta porturile existente, se va conecta la un port, apoi va trimite și va recepționa date prestabilite.

Aplicația propusă (Figura 1) va comunica cu un echipament exterior pe portul serial prin transmitere de mesaje. Aplicația utilizează un ComboBox pentru afișarea porturilor de comunicare disponibile. Pentru a afișa proprietățile portului serial vom folosi un control PropertyGrid. Mesajul va fi trimis introdus dintr-un control TextBox simplu iar cel recepționat va fi afișat într-un control TextBox multi linie.

Figura 1. Interfața aplicației pentru comunicare serială

Mai pe larg, vom proceda astfel…

Utilizarea porturilor seriale trebuie să includem în proiectul nostru biblioteca de funcții System.IO.Ports. Pentru a accesa portul serial va trebui să importăm prin drag&drop din ToolBox componenta SerialPort (Figura 2).

Page 2: Laboratorul 5 Utilizarea portului serial în Visual C#dberian/Labs/Laborator5_MTP_IS.pdf · Laborator 5 – MTP 2 Figura 2. Portul serial din ToolBox Căutarea porturilor seriale

Laborator 5 – MTP

2

Figura 2. Portul serial din ToolBox

Căutarea porturilor seriale

În primul rând trebuie să identificăm porturile seriale existente în calculator. Această identi-ficare este recomandată să se realizeze la pornirea aplicației. Codurile pentru identificarea porturilor seriale sunt următoarele: // Salveaza denumirile porturilor fizice

string[] ArrayComPortsNames = null;

ArrayComPortsNames = SerialPort.GetPortNames();

comboBox1.Items.Clear();

foreach (string portName in ArrayComPortsNames)

{

comboBox1.Items.Add(portName);

}

comboBox1.SelectedIndex = 0;

// Conectarea obiectului serialPort1 cu portul fizic prin denumirea portului fizic

serialPort1.PortName = comboBox1.Text;

Transmiterea datelor pe portul serial

Transmiterea datelor pe portul serial este permisă cu condiția ca acel port serial să fie des-chisă. Astfel înainte de a trimite date pe portul serial trebuie să ne asigurăm ca acest port este deschis. Deschiderea portului este realizat folosind codurile următoare: serialPort1.Open(); // deschiderea portului serial pentru comunicare

Transmiterea datelor efective se realizează prin comanda: serialPort1.WriteLine(serialMessage) // serialMessage

Recepționarea datelor pe portul serial

Recepționarea datelor pe portul serial este mai complexă datorită faptului că recepționarea este un procedeu asincron și necesită un alt fir de execuție. Evenimentul care se execută la recepția datelor este evenimentul DataReceived pentru obiectul de tip SerialPort. private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

string txt = "";

txt += serialPort1.ReadExisting().ToString();

SetText(txt.ToString());

}

Page 3: Laboratorul 5 Utilizarea portului serial în Visual C#dberian/Labs/Laborator5_MTP_IS.pdf · Laborator 5 – MTP 2 Figura 2. Portul serial din ToolBox Căutarea porturilor seriale

Utilizarea portului serial în Visual C# .NET

3

Deoarece acest eveniment se execută în mod asincron nu putem afișa direct stringul txt, ci vom avea nevoi de o functie de tip delegate pentru a transmite datele unui textBox. Acestă funcție o denumim SetTextCallback și va avea ca parametru textul primit pe portul paralel. delegate void SetTextCallback(string text);

Folosind această funcție de tip delegate vom construi funcția SetText(string text). Această funcție are rolul de a construi mesajul primit si de a-l afișa pe textBox-ul multi linie. private void SetText(string text)

{

if (this.textBox2.InvokeRequired)

{

SetTextCallback textCallBack = new SetTextCallback(SetText);

this.Invoke(textCallBack, new object[] { text });

}

else

{

this.textBox2.Text += text;

}

}

Sfaturi utile

Trebuie să verificați în permanență starea porturilor (dacă acestea sunt închise sau deschise). Dacă portul este în starea necorespunzătoare atunci pot apărea erori. Cea mai frecventă eroare este deschiderea dublă sau închiderea dublă a portului serial. O altă eroare fatală este transmiterea sau citirea datelor din porturile închise.

Cu ce ne-am ales?

Prin aplicația dezvoltată în cadrul laboratorului de astăzi am reușit să ne familiarizăm cu utilizarea portului serial in modul bidirecțional.

Bibliografie

[1] Visual C# Resources, http://msdn.microsoft.com/en-us/vstudio/hh341490%28v=msdn.10%29.aspx