PDA

View Full Version : سوال: پيدا كردن پورت های سریال فعال و نمايش در يك ليست



arya1348
شنبه 11 دی 1389, 14:42 عصر
سلام
من ميخوام يه ميكرو كنترلر رو به كامپيوتر وصل كنم.
از كنترل Serial Port دارم استفاده مي كنم.
ميكروكنترلر با يه مبدل خاص به PC وصل شده و درايورش هم نصب شده و روي COM7 قابل شناسائيه. بعضي وقتها روي COM6 يا COM9 و يا با يه اسم ديگه ممكن شناسايي بشه.
حالا ميخوام ببينم چطور ميشه COM پورتهاي فعال رو شناسايي كرد و اونها رو توي يه ليست نمايش داد تا كاربر بتونه از بين اونها يكي رو انتخاب و بعد Open كنه. اميدوارم توضيحاتي كه دادم كافي باشه.
:متفکر:

unknown.unforgiven
شنبه 11 دی 1389, 17:58 عصر
سلام
فکر کنم این کارت رو را بندازه


SerialPort tempPort;
String[] ports = SerialPort.GetPortNames();
foreach (string str in ports)
try
{
tempPort = new SerialPort(str);
tempPort.Open();
if (tempPort.IsOpen)
comboBox1.Items.Add(str);
}
catch (Exception exp)
{
}

arya1348
یک شنبه 12 دی 1389, 10:27 صبح
خوب اين كد براي PHP نوشته شده و من نتونستم ازش تو #C استفاده كنم. ولي ايده جالبي داره.
تعداد پورتهاي COM از COM1 تا COM256 مي تونه قابل دسترس باشه.
ميشه يه كد نوشت كه از COM1 تا COM256 شروع كنه به ترتيب پورت رو باز كنه و اگه موفق شد و پورتي رو باز كرد اون رو توي يه Text Box نمايش بده.
ولي اين روش يه مشكل بزرگ داره:
پورتي كه از قبل توسط يه برنامه ديگه باز شده توي Text Box ما نمايش داده نميشه. مثلا ما روي يه كامپيوتر COM1 و COM2 رو داريم . اگه با اين روش بخواهيم پورتهاي موجود رو تو Text Box نمايش بديم به خاطر اينكه مثلا COM2 توسط يه برنامه ديگه باز شده نميتونيم COM2 رو تو ليست بياريم.
من مطمئنم يه روش خوب و راحت تر براي شناسائي COM پورتهاي موجود (اعم از باز و يا بسته) وجود داره .
اساتيدي كه اطلاعاتي تو اين زمينه دارن لطفا كمك كنند.
با تشكر.:متفکر:

unknown.unforgiven
یک شنبه 12 دی 1389, 11:19 صبح
سلام
دوست عزیز این کد واسه #Cه! خودم با همین کار میکنم. در رابطه با لیست پورت ها، چه فایده ای داره که پورتی رو که نمیتونی ازش تو برنامه استفاده بکنی نمایش بده؟ اما اگه میخوای نمایش بدی با همین کد میتونی این کار رو بکنی، فقط اون شرط و اون تیکه ای که پورت رو باز میکنه رو از برنامه پاک کن:چشمک:

arya1348
یک شنبه 12 دی 1389, 21:20 عصر
در رابطه با لیست پورت ها، چه فایده ای داره که پورتی رو که نمیتونی ازش تو برنامه استفاده بکنی نمایش بده؟فایدش اینه که لااقل می تونیم بفهمیم که چند تا COM پورت در دسترسه. حالا ممکنه که بعضی از اونها توسط برنامه های دیگه اشغال شده باشند و در حال حاضر قابل استفاده نباشند. تو خیلی از برنامه های حرفه ای مثل Serial Port Monitor تمام COM های قابل دسترس نمایش داده می شوند و اگه یکی از اونها اشغال شده باشه با open کردنش یه پیام میده که این پورت توسط یه برنامه دیگه در حال استفاده است.
سخت افزاری که من دارم یه مبدل USB to RS232 است. وقتی اونو به کامپیوتر وصل می کنم به لیست COM پورتها یکی دیگه اضافه میشه. مثلا COM9
خب برنامه من باید قدرت Refresh پورتهای قابل دسترس رو داشته باشه تا با اتصال یه همچین سخت افزارهایی بتونه آخرین پورتهای قابل دسترس (اعم از در حال استفاده و یا بیکار) رو نشون بده. خب مطمئنا منظور از پورتهای قابل دسترس فقط اونهایی هستن که کامپیوتر شناسایی کرده که تعدادش میتونه از 0 تا 255 باشه (نه لزوما همه شون)
اما در رابطه با کدی که شما زحمت شو کشیدی باید بگم من تازه از VB6 اومدم تو #C و هنوز مبتدی هستم . با این حال کد شما خیلی کمکم کرد و مشکل رو حل کردم.
کدی که من نوشتم اینه:


using System.IO.Ports;
private void Form1_Load(object sender, EventArgs e)
{
//Get a list of serial port names.
String[] ports = SerialPort.GetPortNames();

//Display each port name to the comboBox1.
foreach (string port in ports)
{
comboBox1.Items.Add(port);

}

}
البته فضای نام System.IO.Ports باید حتما به ابتدای برنامه اضافه بشه شاید به خاطر همین مسئله از کد پیشنهادی شما نتونستم استفاده کنم.
میشه کد بالا رو با کلیک روی combo box هم صدا زد و از آخرین وضعیت پورتهای قابل دسترس با خبر شد. به هر حال مشکل حل شد و از توجه شما به این تاپیک ممنونم.

:لبخندساده::لبخندساده:

arya1348
یک شنبه 12 دی 1389, 21:34 عصر
:لبخندساده:

mohammad311
دوشنبه 10 شهریور 1393, 22:25 عصر
سلام با vb6 چطور ميشه اينكارو انجام داد؟

mohammad311
دوشنبه 10 شهریور 1393, 22:26 عصر
سلام
فکر کنم این کارت رو را بندازه


SerialPort tempPort;
String[] ports = SerialPort.GetPortNames();
foreach (string str in ports)
try
{
tempPort = new SerialPort(str);
tempPort.Open();
if (tempPort.IsOpen)
comboBox1.Items.Add(str);
}
catch (Exception exp)
{
}


در vb6 چطور ميشه اينكارو انجام داد؟