PDA

View Full Version : کار با مبدل های USB به سریال و پیدا کردن پورت متصل شده در #C



rbm_elec
چهارشنبه 23 شهریور 1390, 16:53 عصر
سلام به همگی دوستان
من یه برنامه دارم که یک آرایه رو به پورت com ارسال میکنه،در حال حاضر تو این برنامه کاربر باید شماره پورتی که مبدل USB به سریال متصل شده رو از Divice Maneger نگاه کنه و اون رو تو برنامه وارد کنه تا برنامه دیتا رو بفرسته،حالا میخوام این عمل مشخص شدن شماره پورت کام رو خود برنامه انجام بده،ضمنا من تو فایل درایور مبدل دستکاری کردم و اسم مبدل رو هر اسمی بخوام میزارم و میخوام اگر دستگاه مشابهی متصل بود فقط دستگاه مورد نظر که اسمش رو تو برنامه تعریف کردم شناسایی بشه
از اساتید ممنون میشم راهنمایی کنند

rbm_elec
جمعه 25 شهریور 1390, 14:48 عصر
کسي راهنمايي نميكنه چطور ميشه اسم پورتها رو فهميد؟

misoft.ir
جمعه 25 شهریور 1390, 20:34 عصر
سلام
من تنها کاری که تونستم بکنم اینه که تمام پورت های کام رو در یک لیست باکس نمایش بدم.
کاربر اون رو انتخاب کنه.
البته به نظرم تا حالا این کار خیلی مفید واقع شده است.

try
{
string[] portNames =
System.IO.Ports.SerialPort.GetPortNames();
comboBox1.Items.Clear();
for (int i = 0; i <= portNames.Length - 1; i++)
{
comboBox1.Items.Add(portNames[i]);
}
if (comboBox1.Items.Count > 1)
{
comboBox1.SelectedIndex = 1;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

jblaox
جمعه 25 شهریور 1390, 23:47 عصر
سلام

مبدل های USB به سریال اکثرا (و نه همه ) از چیپ های FTDI استفاده میکنند .

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

تنها چیزی که من دارم این که برنامه ای به شما بدهم که مشخصات ریز تمام پورت برای شما بده بعد خود برنامه نویسی کنی و از ان فقط آن خودت میخواهی بدست بی آوری و ...

using Utilities.Debug; //used to print my debug messages from any class to this form

namespace WMITestBed
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DBug.debugMessageEvent += new DBug.DebugEventHandler(DBug_debugMessageEvent);
}

void DBug_debugMessageEvent(object source, string debugMessage)
{
if (InvokeRequired)
{
try
{
Invoke(new DBug.DebugEventHandler(DBug_debugMessageEvent), new object[] { source, debugMessage });
}
catch (ObjectDisposedException eventDispatcherClosed)
{
Console.WriteLine("There's no object associated with the DBug event any more: " + eventDispatcherClosed.Message);
DBug.debugMessageEvent -= new DBug.DebugEventHandler(DBug_debugMessageEvent);
}
}
else
{
//debugList.Items.Insert(0, debugMessage);
debugList.Items.Add(debugMessage);
}
}

private void demoOneBtn_Click(object sender, EventArgs args)
{
//Below is code pasted from WMICodeCreator
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\WMI",
"SELECT * FROM MSSerial_PortName");

foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("MSSerial_PortName instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("InstanceName: {0}", queryObj["InstanceName"]);

Console.WriteLine("-----------------------------------");
Console.WriteLine("MSSerial_PortName instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("PortName: {0}", queryObj["PortName"]);


//If the serial port's instance name contains USB it must be a USB to serial device
if (queryObj["InstanceName"].ToString().Contains("USB"))
{
Console.WriteLine(queryObj["PortName"] + " is a USB to SERIAL adapter/converter");
}
}
}
catch (ManagementException e)
{
MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
}

}


/// <summary>
/// Just to override the Console class which means easy copy paste from WMICodeCreator
/// -ignore this class its nothing important just means DBug will output all Console.WriteLine()
/// </summary>
internal class Console
{
public static void WriteLine(string message)
{
DBug.print(message);
}

public static void WriteLine(string message, object info)
{
DBug.print(String.Format(message, info));
}
}
}

rbm_elec
شنبه 26 شهریور 1390, 23:01 عصر
خیلی ممنون
من تازه برنامه نویسی کامپیوتری رو شروع کردم و مبتدی در #C ، میشه در مورد قسمت اول که مربوط به debug هست توضیح بدید که چکاری انجام میده؟
نمیشه یکی از مشخصات بدست اومده با این روش رو با مشخصات تغییر داده شده در نام درایور مبدل،مقایسه کرد و در صورت برابری اون پورت رو انتخاب نمود؟

rbm_elec
دوشنبه 28 شهریور 1390, 23:08 عصر
دستوری نیست که بشه با اون اسمی رو که هنگام اتصال وسایل USB روی toolbar ویندوز نمایش میده رو بدست آورد؟

danial82
دوشنبه 25 مهر 1390, 15:10 عصر
سلام

مبدل های USB به سریال اکثرا (و نه همه ) از چیپ های FTDI استفاده میکنند .

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

تنها چیزی که من دارم این که برنامه ای به شما بدهم که مشخصات ریز تمام پورت برای شما بده بعد خود برنامه نویسی کنی و از ان فقط آن خودت میخواهی بدست بی آوری و ...

using Utilities.Debug; //used to print my debug messages from any class to this form

namespace WMITestBed
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DBug.debugMessageEvent += new DBug.DebugEventHandler(DBug_debugMessageEvent);
}
}
}


سورسی که گذاشتی خیلی ناقصه میشه
میشه کاملشو بذاری؟
من میخوام با توجه به سریال نامبر FTDI بفهمم دستگاه به کدوم پورت Com وصل شده

danial82
یک شنبه 01 آبان 1390, 19:11 عصر
کسی چیزی به ذهنش نمیرسه

danial82
یک شنبه 15 آبان 1390, 12:22 عصر
بعد از کلی گشتن پیدا کردم

UInt32 count = 0;
FTDI.FT_STATUS status = ftdi.GetNumberOfDevices(ref count);
if (status != FTDI.FT_STATUS.FT_OK)
{
log.Warn("Unable to access FTDI");
return ports;
}
FTDI.FT_DEVICE_INFO_NODE[] list = new FTDI.FT_DEVICE_INFO_NODE[count];
status = ftdi.GetDeviceList(list);
if (status != FTDI.FT_STATUS.FT_OK)
{
log.Warn("Unable to access FTDI");
return ports;
}
foreach (FTDI.FT_DEVICE_INFO_NODE node in list)
{
if ((status = ftdi.OpenByLocation(node.LocId)) == FTDI.FT_STATUS.FT_OK)
{
try
{
string comport;
ftdi.GetCOMPort(out comport);
ports.Add(new Port(comport, node.Description, node.SerialNumber));
}
finally
{
ftdi.Close();
}
}
}

m-processor
سه شنبه 05 اردیبهشت 1391, 22:30 عصر
یه سوال کمی مرتبط
آیا از مبدل های سریال به usb می تونم مثل همون پورت سریال استفاده کنم؟ (دستوراتی که توی این سایت گفتید قابل استفادست)
راحت ترین راه برای تست پورت سریال چیه که بدونم داره کار میکنه یا نه ؟

ممنون