logo
فروشگاه اینترنتی آسا اینترفیس
فروشگاه اینترنتی آسا اینترفیس


پورت سریال؛ آموزش راه‌اندازی در سی‌شارپ

 

برای برنامه‌نویسی از Visual Studio 2012 استفاده شده و ورژن Net Framework. مورد استفاده 4.5 انتخاب شده است، که برنامه‌نویسی برای پورت سریال در ورژن‌های 2005 و 2008 و 2010  کاملاً یکسان است. کلیه متد ارائه شده برای کار با پورت سریال، در کلیه Net Framework. ها، از ورژن 2 به بالا یکسان است. یعنی شما دقیقاً از همین متدها برای راه‌اندازی پورت سریال در سایر نسخه‌ها می‌توانید استفاده کنید.

 

بخش یکم: آغاز به کار در #C

 

  Visual Studio 2012 ایجاد یک پروژه در

از مسیر FILE\New\Project یک پروژه جدید ایجاد کنید.

 

تصویر (1) مسیر ایجاد یک پروژه جدید در محیط Visual Studio 2012

تصویر (1) مسیر ایجاد یک پروژه جدید در محیط Visual Studio 2012

 

از قسمت سمت چپ پنجره باز شده، نوع پروژه را #Visual C سپس Window و سرانجام، Windows Forms Application را انتخاب کنید. در پایین پنجره نام دلخواه خود را برای پروژه در قسمت Name وارد کنید و روی دکمه OK کلیک کنید. پیشنهاد می‌کنم برای هماهنگی با ادامه آموزش، نام پروژه تان را Serial_test بگذارید.

 

تصویر (2) تنظیم مشخصات پروژه جدید در محیط Visual Studio 2012

تصویر (2) تنظیم مشخصات پروژه جدید در محیط Visual Studio 2012

 

پروژه ما برای کدنویسی و استفاده از ابزار و کنترل‌ها آماده است. مشاهده می‌فرمایید که یک صفحه یا فرم، در ویژوال استدیو برای شما ایجاد شده است. این فرم، بعداً تبدیل به صفحه‌ی اصلی برنامه‌ای که خواهد ساخت، می‌شود. فقط توجه داشته باشید که پنجره‌های Toolbox و Properties مانند آنچه در دو سمت تصویر زیر هست، باز باشند. البته ممکن است مکان این پنجره ها در کامپیوتر شما با تصویر یکسان نباشد. صفحه‌ای که فرم ایجاد شده در آن نمایش داده می‌شود، صفحه Design است. برای تغییر اندازه این فرم میتوان با کشیدن گوشه‌های فرم، یا وارد کردن اندازه مورد نظر در ویژگ Size از پنجره Properties که در سمت راست تصویر زیر قرار دارد، اندازه فرم را تغیییر دهید.

 

تصویر (3) یک پروژه ایجاد شده در محیط Visual Studio 2012

تصویر (3) یک پروژه ایجاد شده در محیط Visual Studio 2012

 

اگر به هر دلیلی این دو پنجره را مشاهده نمی‌کنید، برای فعال کردن نمایش آنها مانند تصویر زیر از منوی VIEW نمایش آنها فعال کنید، یا در بین سایر پنجره‌ها در دو سمت صفحه آنها را بیابید، و با جابجایی پنجره‌ها، آنها در محل مناسب قرار دهید. با راست کلیک روی فرم و انتخاب Properties نیز می‌توانید پنجره Properties را باز کنید. شما می‌توانید با کشیدن پنجره‌ها آن ها را جابجا کنید و در مکان مورد نظر قرار دهید. بهتر است این هر یک از این دو پنجره در یک سمت صفحه باشند چون همزمان با هر دوی آنها کار می‌کنیم.

 

تصویر (4) فعال کردن نمایش پنجره‌های مورد نیاز در Visual Studio 2012

تصویر (4) فعال کردن نمایش پنجره‌های مورد نیاز در Visual Studio 2012

 

در صفحه Design شما می‌توانید ویژگی‌های دیداری برنامه خود شامل دکمه‌ها، منوها و کلیه ابزاری که در برنامه خود قرار می‌دهید را ببینید و یا تغییر کنید.

احتمالاً در آینده، هنگامی که پروژه‌تان را باز می‌کنید، صفحه Design و یا حتی صفحه Code پروژه شما به هنگام باز شدن پروژه، به صورت پیش فرض برایتان نمایش داده نشود، یا ممکن است به صورت اتفاقی آن‌ها را ببندید. اصلاً نگران نباشید، حتی نیازی به زنگ زدن به دوستانتان ندارید تا در این زمینه به کمکتان بشتابند. کافی است پنجره Solution Explorer را پیدا کنید. می‌دانید که نخستین مکانی که برای نمایش دادن هر پنجره‌ای باید بروید، منوی VIEW است. با کلیک روی نام هر پنجره‌ای، آن را در هر کنجی که پنهان شده باشد بیرون می‌کشید. کم کم مکان پنجره‌ها را یاد می‌گیرید و بعد خیلی راحت پنجره‌های دیگر را پیدا می‌کنید. البته هیچگاه به هیچ پنجره‌ی دیگری نیاز نخواهیم داشت. در Solution Explorer روی Form1.cs دابل کلیک کنید.

پنجره Solution Explorer نقشه پیوند اجزای برنامه‌ی ما است. اما چون ما یک برنامه ساده می‌سازیم که تنها شامل 1 فرم است، فقط این فرم و کدهای آن در Solution Explorer وجود دارد. اگر با فرض اینکه برنامه‌ای بسازید که شامل فرم‌ها یا صفحات مختلف باشد همه آن ها را می‌توانید در این پنجره پیدا کنید.

 

تصویر (5) باز کردن پنجره Solution Explorer از منوی VIEW

تصویر (5) باز کردن پنجره Solution Explorer از منوی VIEW

 

اگر اندازه فرم برنامه‌تان را تنظیم نکرده‌اید، روی فرم کلیک کنید و در پنجره Properties ویژگی Size آن را برابر 450,320 قرار دهید.

 

تصویر (6) فرم ایجاد شده در پنجره Design نمایش داده می‌شود

تصویر (6) فرم ایجاد شده در پنجره Design نمایش داده می‌شود

 

استفاده از ابزار

از پنجره Toolbox یک Button را با درگ کردن روی فرم، یا دابل کلیک روی Button در پنجره Toolbox، روی فرم قرار دهید و با جابجا کردن Button آن را در محل مناسب در فرم قرار دهید.

برای وارد کردن هر ابزاری به فرم، شما باید در صفحه Design باشید. وقتی شما یک پروژه ایجاد میکنید، صفحه Design پروژه‌تان را می‌بینید.

 

تصویر (7) قرار دادن یک Button روی فرم 

تصویر (7) قرار دادن یک Button روی فرم 

 

روی Button که در فرم قرار داده‌اید کلیک کنید و از پنجره Properties ویژگی Name و Text مربوط به این Button را مانند تصویر زیر تغییر دهید. اگر پنجره Properties را نمی‌بینید روی Button راست کلیک کنید و از منوی راست کلیک روی Properties کلیک کنید.

(Name) btnClose

(Text) Close

 

تصویر (8) تنظیم ویژگی‌های Button در پنجره Properties 

تصویر (8) تنظیم ویژگی‌های Button در پنجره Properties 

 

ویژگی Text مربوط به نمایش متنی است که روی Button یا هر کنترل دیگری نمایش داده می‌شود اما Name برای کدنویسی اهمیت دارد، چون در کدنویسی برای هر ابزار، از Name آن ابزار استفاده می‌شود. پس باید نام یک ابزار، همیشه منحصر به فرد انتخاب شود و به گونه‌ای باشد که به هنگام کدنویسی با نام سایر کنترل‌ها اشتباه گرفته نشود.

 

کدنویسی  

حالا روی دکمه Close که ویژگی نام و متن آن را تنظیم کرده‌ایم دابل کلیک کنید مشاهده می‌کنید که به صفحه Code پروژه (Form1.cs) می‌روید. توجه داشته باشید که با دابل کلیک روی هر Button کدهای رویداد مربوط به «کلیک» آن Button به صورت اتوماتیک در پنجره Code وارد می‌شود. این کدها به این معنی است که هنگام اجرای این برنامه، اگر روی این Button کلیک شود، برنامه چه کاری را باید انجام دهد. یعنی هنگام اجرای برنامه، هنگام روی دادن هر رویدادی متد آن رویداد اجرا می‌شود. مثلاً برای یک Button متد رویداد کلیک زمانی اجرا می‌شود که در زمان اجرا روی آن کلیک شود. پس، اگر می‌خواهید با کلیک روی Button کار خاصی انجام شود. باید کدهای مربوط به آن کار را در متد رویداد کلیک Button وارد کنید.

با دابل کلیک روی هر ابزاری به طور پیش فرض متد فرآیند خاصی که به نظر سازنده پرکاربردتر است ساخته می‌شود. یعنی ابزارها فرآیندهای دیگری هم دارند که شما می‌توانید بسته به نیازتان آنها را فعال و استفاده کنید. در ادامه با چگونگی ایجاد یک فرآیند آشنا خواهید شد.

همیشه یادتان باشد که همه کدها یا دستورات برنامه را باید در صفحه Code پروژه بنویسید. پس هر جایی سخن از کدنویسی به میان آمد، به این صفحه بروید و هر جا که در مورد گذاشتن ابزار روی فرم گفته شده با چابکی، به آن صفحه کوچ کنید.

 

تصویر (9) صفحه Code پروژه 

تصویر (9) صفحه Code پروژه 

 

ما می‌خواهیم از این Button برای بستن صفحه برنامه استفاده کنیم، پس برای رویداد کلیک آن، کد زیر را وارد کنید:

 

private void btnClose_Click(object sender, EventArgs e) 
{
   this.Close();
}

 

بعد از دابل کلیک روی Button در صفحه Design به صفحه Code رفته‌اید و متد فرآیند کلیک دکمه Close ایجاد شده است. پس تنها باید کدهای درون متد را بنویسید. یعنی تنها باید کد ;()this.Close را درون متد ایجاد شده بنویسید.

متد ()this.Close باعث بسته شدن پنجره جاری می‌شود. که در رویداد کلیک دکمه btnClose تعریف شده است. یعنی اگر برنامه اجرا شود، با کلیک روی این دکمه پنجره یا صفحه‌ای که این دکمه روی آن قرار دارد بسته می‌شود.

 

تصویر (10) نوشتن دستورات در متد فرآبند کلیک Button 

تصویر (10) نوشتن دستورات در متد فرآبند کلیک Button 

 

مشاهده می‌کنید که در رویداد کلیک این Button، از نامی که برای Button انتخاب کردید، استفاده شده است.

 

اجرای برنامه 

پس از انجام همه مراحل بالا، باید برنامه را آزمایش، و از اجرای درست برنامه آسودگی خاطر پیدا کنیم. در منوی DEBUG روی Start Debugging کلیک کنید و یا کلید F5 را روی صفحه کلید کامپیوترتان فشار دهید و یا روی آیکن Start Debugging در پنجره اصلی ویژوال استدیو کلیک کنید. اگر شما در کدنویسی اشتباهی نداشته باشید برنامه ساخته شده اجرا میشود و اگر برنامه شما ایرادی داشته باشد شما میتوانید مکان و نوع ایراد کار خود را در پنجره Error List ببینید. حتی اگر این پنجره را بسته باشید، هنگام اجرای برنامه به صورت خودکار در پایین پنجره اصلی ویژوال استدیو باز می‌شود.

 

تصویر (11) اجرای برنامه ساخته شده 

تصویر (11) اجرای برنامه ساخته شده 

 

مشاهده می‌فرمایید فرم شما مانند هر برنامه دیگری، همه ویژگی‌های یک برنامه ویندوزی را دارد. برای خارج شدن از حالت Debug و بازگشت به Visual Studio روی X پنجره یا دکمه Close که خودتان ساخته‌اید، کلیک کنید. از مسیر (DEBUG\Stop Debugging  (Shift+F5 نیز می‌توان پنجره برنامه را ببندیم و به Visual Studio برگردیم. توجه داشته باشید که زمانی که در حالت Start Debugging هستید، نمی‌توانید هیچ تغییری در کد و یا فرم برنامه‌تان ایجاد کنید.

 

تصویر (12) خارج شدن از حالت Debug

تصویر (12) خارج شدن از حالت Debug

 

حل یک مشکل

اگر به هر دلیلی ابزاری روی فرم قرار دهید و پس از ایجاد شدن متد رویداد آن، اقدام به پاک کردن آن رویداد کنید، مثلاً شما یک Button روی فرم قرار می‌دهید و پس از دابل کلیک روی آن، وقتی متد رویداد کلیک ساخته شد متوجه می‌شوید نام Button را تنظیم نکرده‌اید! وقتی متد فرآیند کلیک آن را پاک می‌کنید، با مشکل زیر روبرو می‌شوید.

 

تصویر (12) مشکل ناشی از پاک کردن متد رویداد یک ابزار

تصویر (12) مشکل ناشی از پاک کردن متد رویداد یک ابزار

 

برای پیشگیری از این مشکل باید نخست، Button را از فرم حذف کنید، سپس متد فرآیند آن را پاک کنید. اما اگر با صفحه بالا روبرو شدید، خونسردی خود را حفظ کنید و در همان صفحه، روی لینک Serial_test Form1.Designer.cs Line:129Column:1 که زیر نوشته (Instances of this error (1 قرار دارد، کلیک کنید. ویژوال استدیو، به صورت خودکار شما را به مکان ایراد، راهنمایی می‌کند. خطی که کورسر در ابتدای آن قرار دارد، مربوط به ایجاد متد کلیک برای دکمه‌ای است که وجود ندارد، و همین مسئله باعث پیش آمدن این مشکل گشته است. برای حل مشکل، آن خط را کامل پاک کنید. بقیه کدهای مربوط به این ابزار بعداً به صورت خودکار پاک می‌شوند پس اصلاً نگران نباشید. اما مواظب خط های دیگر که مربوط به سایر ابزار است، باشید که دستکاری نشوند. این صفحه که عنوان آن Form1.Designer.cs است مربوط به کدهای، ابزار هایی است که ویژگی‌های آن ها را در پنجره Properties تنظیم کرده‌اید. در اینجا کدهای مربوط به تنظیمات ابزارهایی که شما استفاده کرده‌اید وجود دارد.

 

تصویر (14) برطرف کردن ایراد، با پاک کردن خط مربوط به ابزاری که متد رویدادش پاک شده است

تصویر (14) برطرف کردن ایراد، با پاک کردن خط مربوط به ابزاری که متد رویدادش پاک شده است

 

تولید فایل exe. برنامه 

برای تولید فایل exe. برنامه‌ای که ساخته‌اید، نخست پروژه را به حالت Release ببرید. وقتی یک پروژه ایجاد می‌کنید، برنامه به صورت پیش فرض در حالت Debug قرار دارد. اگر در صفحه ویژوال استودیو زیرِ منوی TEAM را نگاه کنید، منوی کشویی که Debug در آن نوشته شده را می‌بینید. به همین سادگی؛ روی آن کلیک کنید و آن به Release تغییر دهید. سپس، از منوی BUILD روی (Build Solution (F6  کلیک کنید. سپس دوباره از منوی BUILD این بار روی Build >Your Project Name کلیک کنید. گزارش انجام عملیات بالا، در پنجره Output قابل مشاهده است. در صورتی که عملیات با موفقیت به پایان برسد، شما پیام زیر را در پنجره Output مشاهده خواهید کرد:

 

========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

 

 فایل exe. برنامه شما از مسیر زیر قابل دستیابی است:

 

Documents\Visual Studio 2012\Projects\Serial_test\Serial_test\bin\Release\Serial_test.exe

 

میتوانید فایل exe. را بردارید و بدون نیاز به ویژوال استدیو، حتی در کامپیوترهای دیگر نیز اجرا کنید. البته برنامه شما برای اجرا شدن روی هر کامپیوتری نیاز به نصب بودن ورژن Net Framework. که برنامه را با آن نوشتید دارد. البته نگران این موضوع نباشید چون بیشتر برنامه‌ها هنگام نصب شدن Net. را به همراه دارند.

 

بخش دوم: کار با پورت سریال 

 

در این بخش با ساخت یک برنامه ساده، با مفاهیم اولیه برنامه‌نویسی پورت سریال آشنا می‌شوید. کلیه مراحل کار و دستورات، خط به خط توضیح داده شده است. کار با این پورت بسیار ساده‌تر از آنچه که فکر می‌کنید است. از قوی‌ترین ابزار برنامه نویسی COPY + PASTE غافل نشوید.

 

تصویر (15) نمونه فرم پورت سریال

تصویر (15) نمونه فرم پورت سریال

 

وارد کردن کامپونت پورت سریال 

برای کار با پورت سریال باید کامپونت مربوط به این پورت را به برنامه اضافه کنید. برای وارد کردن کامپونت مربوط به این پورت، از پنجره Toolbox و از بخش Componets کنترل SerialPort را روی فرمی که در بخش پیش ایجاد کردید، درگ کنید. در پنجره Properties ویژگی‌های این کامپونت را می‌بینید. که نیازی به تغییر هیچکدام از آنها در این صفحه نمی‌باشد چون در قسمت کدنویسی تنظیمات لازم را انجام می‌دهیم. فقط به نام کامپونت، serialPort1  توجه کنید که کدنویسی را بر پایه نام آن انجام می‌دهیم.

 

تصویر (16) ویژگی‌های کامپونت پورت سریال

تصویر (16) ویژگی‌های کامپونت پورت سریال

 

باز کردن پورت 

کامپیوتر خانگی شما احتمالاً دو پورت سریال به نام‌های COM1 و COM2 دارد و اگر از مبدل‌های USB TO COM استفاده می‌کنید، می‌دانید که با وصل کردن این مبدل‌ها به کامپیوتر، یک پورت سریال مجازی در سیستم شما ایجاد می‌شود که در Device Manager  ویندوز نیز قابل مشاهده است. برای تبادل داده با هر پورت سریالی‌ها باید آن را در برنامه باز کنید. باز کردن یک پورت یعنی برقرار کردن ارتباط بین برنامه و پورت سریال مورد نظر. پس پورتی که باز شده است، می‌توانید داده آن را دریافت و یا از طریق آن داده ارسال کنید.

 

تصویر (17) پورت‌های سریال در Device Manager  ویندوز 

تصویر (17) پورت‌های سریال در Device Manager  ویندوز 

 

برای باز کردن پورت باید متد مربوطه را در #C فراخوانی کنید. سپس با دابل کلیک روی دکمه Open Port به پنجره Code بروید و در متد رویداد کلیک این Button کدهای زیر را وارد کنید:

 

private void btnOpen_Click(object sender, EventArgs e) 
{  
   serialPort1.DataBits = 8;  
   serialPort1.Parity= Parity.None;  
   serialPort1.StopBits = StopBits.One; 
   serialPort1.BaudRate = 9600;  
   serialPort1.PortName = "COM1"; 
   serialPort1.Open(); 
} 

 

این کدها به این مفهوم است که هنگام اجرای این برنامه با کلیک روی دکمه Open Port، این پورت پس از تنظیم ویژگی‌های زیر:

 8 بیت داده،

بدون بیت پریتی،

1 بیت پایان،

باودریت 9600 و

نام پورت  Com1

باز می‌شود و آماده دریافت و ارسال داده است.

serialPort1 نام کامپونت پورت سریال است که روی فرم قرار داده‌اید، و ویژگی‌های آن با کلیک روی دکمه Open Port، در فرم برنامه‌تان هنگام اجرای آن، همانطور که در بالا گفته شد تنظیم می‌شود. توجه داشته باشبد اگر شما می‌خواهید با هر پورتی و یا هر تنظیماتی ارتباط برقرار کنید تنظیمات خود را وارد کنید و به نام پورتی که باز می‌کنید به اندازه کافی توجه کنید شاید نام پورت سریال شما در سیستم‌تان COM5 باشد!

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

 

using System.IO.Ports;

 

تصویر (18) افزودن فضای نام متدهای کامپونت سریال

تصویر (18) افزودن فضای نام متدهای کامپونت سریال

 

بستن پورت 

پورتی که باز است در هیچ برنامه دیگری قابل دستیابی نیست. پس باید پس از پایان کار با هر پورتی، پورت مورد نظر را بست و دسترسی به آن را آزاد کرد. برای بستن پورت از یک Button دیگر استفاده می‌کنیم که کاربر با کلیک روی آن، پورت را ببندد پس یک Button از  Toolbox به فرم خود درگ کنید تا به فرم شما اضافه شود و ویژگی‌های آن را در پنجره Properties به مانند زیر تغییر دهید:

(Name) btnClosePort

(Text) Close Port

کد های زیر را در متد رویداد کلیک دکمه Close Port بنویسید:

 

private void btnClosePort_Click(object sender, EventArgs e) 
{   
   serialPort1.Close();   
   MessageBox.Show("PORT Closed", "OK", MessageBoxButtons.OK);  
}

 

با اجرای این متد، اول متد ()serialPort1.Close اجرا می‌شود و پورت باز شده را می‌بندد. سپس پنجره پیام با عنوان OK و متن PORT Closed نشان داده می‌شود. توجه کنید بسیاری از مواردی که استفاده می‌کنیم، مانند نمایش پنجره‌های پیام تنها برای راهنمایی کاربر است و حتی بدون این موارد هم برنامه شما برای ارتباط با پورت سریال کامل است.

 

ارسال داده 

بعد از باز شدن پورت می‌توان ارسال یا دریافت داده را انجام داد. چندین متد برای ارسال داده از طریق پورت سریال در #C وجود دارد که در بخش بعدی کاملاً توضیح داده شده‌اند. در این قسمت از یک متد ساده برای ارسال داده از طریق پورت سریال استفاده می‌کنیم.

برای ارسال داده، یک Button دیگر به فرم خود اضافه کنید و ویژگی‌های آن را مانند زیر وارد کنید:

(Name) btnSend

(Text) Send Data

سپس در قسمت رویداد کلیک این کلید کدهای زیر را وارد کنید:

 

private void btnSend_Click(object sender, EventArgs e) 
{   
   serialPort1.WriteLine("TEST SERIAL"); 
}

 

این متد، متن TEST SERIAL از طریق پورت مورد نظر ارسال می‌کند. فقط توجه داشته باشید قبل از ارسال باید پورت مورد نظر باز شده باشد. یعنی باید در زمان اجرای برنامه، اول روی دکمه Open Port کلیک کنید تا پورت مورد نظر باز شود. سپس با کلیک بر روی دکمه Send Data، داده را از طریق پورت باز شده ارسال کنید.

می‌خواهیم به جای ارسال این متن ثابت، متن وارد شده در یک Textbox را ارسال کنیم. پس از پنجره Toolbox یک Textbox را روی فرم درگ می‌کنیم و از پنجره Properties ویژگی‌های آن را به صورت زیر تغییر می‌دهیم.

(Name) textBox1

(Multiline) True

 

ویژگی نام که لازم به توضیح نیست و هر جایی که خواستیم در برنامه از این Textbox استفاده کنیم از نام آن استفاده می‌کنیم. و ویژگی Multiline به ما این توانایی را می‌دهد که از چند خطی بودن آن استفاده کنیم چون درحالت اولیه فقط یک خط از متنی که درون آن است نمایش داده می‌شود. اما پس از این تنظیم می‌توانید با درگ کردن گوشه‌های آن را به اندازه دلخواه تنظیم و چند خطی شدن آن را ببینید.

روی دکمه Send Data دابل کلیک کرده و در متد فرآیند کلیک این Button به جای کد قبلی که یک متن ثابت را ارسال می‌کرد کد زیر را وارد کنید:

 

private void btnSend_Click(object sender, EventArgs e) 
{   
   serialPort1.WriteLine(textBox1.Text); 
}

 

این کد، یعنی با کلیک روی این Button متنی که در textBox1  وارد شده از طریق پورت سریالی که قبلاً باز شده، ارسال شود.

متد ()WriteLine یک رشته را از طریق پورت مورد نظر ارسال می‌کند و در پایان ارسال، کاراکتر NewLine را ارسال می‌کند.

پس در هنگام اجرای برنامه متن مورد نظر را در textBox1 وارد کنید و پس از باز کردن پورت آن را ارسال کنید.

 

دریافت داده 

کدنویسی برای دریافت داده کمی با ارسال آن تفاوت دارد، چون شما هر زمان که مایل بودید می‌توانستید با کلیک روی دکمه Send Data متن وارد شده در textBox1 را ارسال کنید. اما برای دریافت برنامه باید به گونه‌ای باشد که هنگامی که فرستنده آن را ارسال می‌کند بدون دخالت کاربر داده را دربافت و اگر لازم شد نشان دهد.

برای نمایش داده دریافت شده نیاز به یک Textbox داریم پس یک Textbox دیگر به فرم خود اضافه کنید وبژگی‌های آن را مانند زیر تنظیم کنید:

(Name) textBox2

(Multiline) True

 

 سپس در صفحه Design برنامه روی SerialPort کلیک کنید و در بالای پنجره Properties، روی آیکن رویدادها کلیک کنید و از رویدادهای پیش رو، روی رویداد DataRecieve دابل کلیک کنید.

 

تصویر (19) افزودن متد serialPort1_DataReceived به برنامه

تصویر (19) افزودن متد serialPort1_DataReceived به برنامه

 

می‌بینید که متد این رویداد نیز به قسمت کدهای ما اضافه می‌شود.

 

تصویر (20) افزوده شدن متد رویداد به کدها

تصویر (20) افزوده شدن متد رویداد به کدها

 

نخست، یک متغیر از نوع رشته تعریف کنید تا داده دریافت شده در آن قرار بگیرد. این متغیر باید در بدنه کلاس فرم تعریف شود چون هم در متد رویداد DataReceived و هم در متد DisplayText  از آن استفاده می‌شود.

 

public partial class Form1 : Form 
{ 
   string StrRecieve;

 

مشاهده می‌کنید که همه متدها در این بدنه تعریف شده‌اند.

 

تصویر (21) متدها در بدنه کدها

تصویر (21) متدها در بدنه کدها

 

برای نمایش متن به وسیله این رویداد باید یک متد تعریف کنیم و آن را قبل از متد رویداد DataReceived قرار دهید:

 

private void DisplayText(object sender, EventArgs e) 
{ 
   textBox2.AppendText(StrRecieve); 
}

 

کدهای زیر را در متد رویداد serialPort1_DataReceived می‌نویسیم:

 

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
   string StrRecieve; 
   StrRecieve = serialPort1.ReadExisting();   
   this.Invoke(new EventHandler(DisplayText)); 
}

 

متد این رویداد زمانی که داده‌ی جدید برای دریافت آماده است اجرا می‌شود و داده را دریافت و در رشته StrRecieve قرار می‌دهد. سپس متد DisplayText را فراخوانی می‌کند و این متد رشته دریافت شده را در textBox2 قرار می‌دهد. توجه داشته باشید که اگر در خود رویداد serialPort1_DataReceived اقدام به نمایش متن کنید برنامه شما با ایراد مواجه می‌شود، چون این رویداد از Thread با اولویت بالا استفاده می‌کند، نمی‌توانید در این متد به کنترل‌ها و یا ابزار دسترسی داشته باشید. پس باید در این متد داده دریافت شده را در رشته StrRecieve قرار دهید و برای نمایش داده، متد DisplayText را فراخوانی کنید. متد DisplayText داده دریافت شده آن را به متن textBox2 می‌افزاید.

به جای دستور AppendText شما می‌توانید از دو نمونه زیر استفاده کنید. هر یک از دو دستور زیر، رشته StrRecieve را به ادامه متن textBox2 می‌افزایند. یعنی رشته StrRecieve به ادامه متن textBox2 اضافه می‌شود بدون اینکه آنچه که از قبل در آن نوشته شده پاک شود.

 

textBox2.AppendText(StrRecieve) 
textBox2.text = textBox2.text+StrRecieve 
textBox2.text += StrRecieve

 

سورس پایانی برنامه

 

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO.Ports; 
 
namespace Serial_test 
{ 
   public partial class Form1 : Form 
   {            
      string StrRecieve; 
  
      public Form1() 
      { 
         InitializeComponent(); 
      } 
      private void btnClose_Click(object sender, EventArgs e) 
      {       
         this.Close(); 
      } 
      
      private void btnOpen_Click(object sender, EventArgs e) 
      {       
         serialPort1.DataBits = 8;       
         serialPort1.Parity = Parity.None;       
         serialPort1.StopBits = StopBits.One;       
         serialPort1.BaudRate = 9600;       
         serialPort1.PortName = "COM13";       
         serialPort1.Open(); 
       } 
      
       private void btnClosePort_Click(object sender, EventArgs e) 
       { 
          serialPort1.Close(); 
          MessageBox.Show("PORT Closed", "OK", MessageBoxButtons.OK); 
       } 
  
       private void btnSend_Click(object sender, EventArgs e) 
       {        
          serialPort1.WriteLine(textBox1.Text); 
       }  
     
       private void DisplayText(object sender, EventArgs e) 
       { 
          textBox2.AppendText(StrRecieve); 
       }       

       private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) 
       {         
          StrRecieve = serialPort1.ReadExisting();      
          this.Invoke(new EventHandler(DisplayText));      
        }     
   } 
}

 

اگر نام پروژه و ابزار استفاده شده شما با پروژه من یکسان باشد، می‌توانید همه کد بالا را یکجا به صفحه Code پروژه خود COPY + PASTE کنید. اما توصیه می‌کنم هر بار تنها دستورات درون هر متد را کپی کنید و به عملکرد آنها توجه کنید. فهمیدن این کدها بسیار ساده است. برای یاد گرفتن برنامه نویسی بهترین کار بدست آوردن کدهای آماده و فهمیدن کار آنها و چگونگی استفاده از آن‌ها است و تلاش کنید با تغییر کدها به عملکرد مورد نظرتان برسید.

 


دانلود مستندات آموزش!

دیدگاه‌ها (۱)

*
*

    imanarmanfj1387 پاسخ

    در بخش کامپونتس گزینه serialport وجود نداره و سرچ می کنم پیدا نمی کنه از ویژوال استودیو 2022 استفاده می کنم ممکنه سریال پورت جای دیگه ای باشه؟

question