در فریم ورک .NET 2 به بعد فضا نام System.IO.Ports اضافه گردید این فضا نام دارای کلاسی با عنوان Serial Port می باشد که از این می توان برای دسترسی به پورت سریال و ارسال و دریافت اطلاعات از طریق این پورت انجام داد.


برای شروع باید فضا نام بالا را فراخوانی کنیم برای این کار از using استفاده می کنیم .

 
1 using System.IO.Ports;


برای اینکه از طریق پورت سریال بتوانیم داده ارسال و دریافت کنیم باید پورت مورد نظر را open یا باز کنیم.پورت سریال دارای پارامترهایی می باشد که نرخ و سرعت تبادل اطلاعات رو ست می کند . پس قبل از باز کردن یک پورت باید مقدار پارامترها را تعیین کنیم این پارامترها عبارت است از

  • Baud Rate: اندازه سرعت تبادل اطلاعات را تعیین می کند , معادل بیت بر ثانیه است.
  • Parity
  • Stop Bits
  • Data Bits : تعداد بیت ها را مشخص میکند
  • Port Name : شماره پورتی که می خواهید باز کنید مثل com1,com2

خوب بر اساس توضیحات داده شده مقادیر بالا را مقداردهی و پورت را با دستور زیر باز می کنیم.

 
01 //ایجاد یک آبجکت از serial port
02 SerialPort ccom = new SerialPort();
03 //اگر پورت قبلا باز باشد آن را ببندد
04 if (ccom.IsOpen == true) ccom.Close();
05 //مقدار دهی پارامتر ها
06 ccom.BaudRate = 9600;
07 ccom.DataBits = 8;
08 ccom.Parity = (Parity)Enum.Parse(typeof(Parity), "None");
09 ccom.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "One");
10 ccom.PortName = "COM1";
11 //باز کردن پورت
12 ccom.Open();


برای آگاهی از پورت های سریال در سیستم می توان از دستور GetPortNames() برای این منظور استفاده کرد.

 
1 foreach (string s in SerialPort.GetPortNames())
2 Console.WriteLine(s);


برای انجام عمل فرستادن اطلاعات به پورت از دستور Write برای این منظور استفاده می کنیم. این دستور اطلاعات را به دو صورت Text و Byte ارسال می کند به نمونه مثال های زیر توجه کنید.

 
1 //ارسال به صورت Text
2 string msg = "Hello";
3 ccom.Write(msg);
4 //ارسال به صورت Byte
5 ccom.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);


البته برای انتقال اطلاعات به صورت Byte بهتر است از روش پایین استفاده کنیم.یک تابع با نام HexToByte می نویسیم که مقدار را از Hex به Byte تبدیل می کند بعد از انجام عمل تبدیل آن را ارسال می کنیم.

 
01 private byte[] HexToByte(string msg)
02 {
03 msg = msg.Replace(" ", "");
04 byte[] comBuffer = new byte[msg.Length / 2];
05 for (int i = 0; i < msg.Length; i += 2)
06 comBuffer[i / 2] = (byte)Convert.ToByte(msg.Substring(i, 2), 16);
07 return comBuffer;
08 }
09   
10 "direction: ltr;">
11   
12 "direction: ltr;"> byte[] newmsg = HexToByte(msg);
13 ccom.Write(newmsg, 0, newmsg.Length);


دراینجا برنامه ای را برای شما می گذارم که این برنامه درای یک کلاس با نام CommunicationManager.cs می باشد که شامل توابعی برای ارسال و دریافت اطلاعات از پورت سریال می باشد.این برنامه می تواند راهنمای خوبی برای شما باشد.

لینک دریافت فایل SerialPortCommunication
همانطور که می دانید از پورت سریال در ساخت واسط بین کامپیوتر و مدارات الکترونیکی کاربردی زیادی دارد که شاید دلیل آن سهولت کار با این پورت می باشد.

DB9 Male (Pin Side) DB9 Female (Pin Side)
DB9 Female (Solder Side) DB9 Male (Solder Side)
————- ————-
\ 1 2 3 4 5 /     \ ۵ ۴ ۳ ۲ ۱ /
\ ۶ ۷ ۸ ۹ /       \ ۹ ۸ ۷ ۶ /
——— ———

DB9 Female to DB9 Female Null-Modem Wiring
2 | 3 | 7 | 8 | 6&1| 5 | 4
—- —- —- —- —- —- —-
3 | 2 | 8 | 7 | 4 | 5 | 6&1

9-pin 25-pin Assignment From PC
—— —— ————————- ————
Shield 1 Case Ground Gnd
1 8 DCD (Data Carrier Detect) Input
2 3 RX (Receive Data) Input
3 2 TX (Transmit Data) Output
4 20 DTR (Data Terminal Ready) Output
5 7 GND (Signal Ground) Gnd
6 6 DSR (Data Set Ready) Input
7 4 RTS (Request To Send) Output
8 5 CTS (Clear To Send) Input
9 22 RI (Ring Indicator) Input

نحوه ارتباط به این صورت خواهد بود که پین RX کامپیوتر به پین TX مدار پین RX مدار به پین TX کامپیوتر وصل خواهد شد.
برای اطلاعات بیشتر می توانید به این آدرس مراجعه کنید.

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx