اطلاعیه

Collapse
No announcement yet.

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

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

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

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

    #2
    پاسخ : پیدا کردن پورت سریال

    اکتیو بودن یعنی چه؟ یعنی کسی باهاش کار بکنه؟ با چه زبونی میخوای بنویسی؟ #C ... C ..... ؟

    دیدگاه


      #3
      پاسخ : پیدا کردن پورت سریال

      سلام آقا رضا منم اینو لازم دارم.
      فرض بر اینه که ما یه وسیله رو به یه پورت وصل می کنیم اما شماره پورت رو نمی دونیم(قراره برنامه پورت رو شناسایی بکنه).
      یه نمونه از این میتونه FT232<=>Serial باشه.
      می بینیم و نادیده می گیریم!

      دیدگاه


        #4
        پاسخ : پیدا کردن پورت سریال

        توی C که نمیدونم احتمالا باید رجیستری رو بخونین. اما در #C براحتی میتونین از تابع زیر استفاده کنین و لیست سریال پورت ها رو بگیرین. اونا رو دونه دونه باز کنین و به میکروتون یک پیغام بفرستین و منتظر باشین تا زمانی فید بک اش رو بگیرین.

        System.IO.Ports.SerialPort.GetPortNames

        به عنوان مثال میشه یک همچین کدی نوشت:


        public static string GetActivePortName(byte[] request, byte[] expected_result)
        {
        byte[] reply = new byte[expected_result.Length];
        Exception ex_BreakLoops = new Exception();

        foreach (string port_name in SerialPort.GetPortNames())
        {
        SerialPort sp = new SerialPort(port_name, 9600, Parity.None, 8, StopBits.One);
        try
        {
        sp.Open();
        sp.Write(request, 0, request.Length);
        sp.ReadTimeout = 100;
        if (sp.Read(reply, 0, reply.Length) != reply.Length)
        continue;
        for (int i = 0; i < reply.Length; i++)
        if (reply[i] != expected_result[i])
        throw ex_BreakLoops;
        sp.Dispose();
        return port_name;
        }
        catch
        {
        continue;
        }
        finally
        {
        sp.Dispose();
        }
        }
        return string.Empty;
        }


        با فرض اینکه یک بافر حاوی فرمان ارسالی و یک بافر حاوی جواب دریافتی با روال مربوطه پاس بشه تا اون روال بتونه پورت رو چک کنه.

        چون نمیشه یک دستگاه متصل به یک پورت سریال رو فقط به صرف ایجاد دسترسی به اون پورت شناسایی کرد.
        البته میشه مطمئن شد که آیا اصولا کسی به این پورت احتمالا وصل هست یا نه. (از طریق Break Detecion).

        البته این کد هم ایده کلی رو نشون میده. و مطمئنا یک کمی بهش باید ور برین.

        دیدگاه


          #5
          پاسخ : پیدا کردن پورت سریال

          مقاله زیر به طور کامل به این موضوع پرداخته است :

          http://www.4shared.com/file/5F3BpaY6/serialC.html




          دیدگاه


            #6
            پاسخ : پیدا کردن پورت سریال

            پیدا کردن هوشمند نام پورت ها در c#

            از دستور زیر برای پیدا کردن نام پورت ها به صورت هوشمند در c# استفاده می شود :

            foreach (string s in SerialPort.GetPortNames())

            System.Diagnostics.Trace.WriteLine(s);



            در صورتی که از یک combo box هم برای نمایش پورت ها استفاده شود به شکل زیر تغییر می کند :

            cmbPortName.Items.Clear();

            foreach (string s in SerialPort.GetPortNames())

            cmbPortName.Items.Add(s);



            if (cmbPortName.Items.Contains(Settings.Default.PortN ame)) cmbPortName.Text = Settings.Default.PortName;

            else if (cmbPortName.Items.Count > 0) cmbPortName.SelectedIndex = 0;

            else

            {

            MessageBox.Show(this, "There are no COM Ports detected on this computer.\nPlease install a COM Port and restart this app.", "No COM Ports Installed", MessageBoxButtons.OK, MessageBoxIcon.Error);

            this.Close();

            }



            دیدگاه

            لطفا صبر کنید...
            X