Thông báo

Collapse
No announcement yet.

Làm sao để mở cổng COM ảo(USB-RS232) một cách tự động

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Làm sao để mở cổng COM ảo(USB-RS232) một cách tự động

    Hiện nay các ứng dụng có kết nối máy tính thường sử dụng cổng COM ảo từ cổng USB. Nhưng một rắc rối có thể gặp phải đó là, mỗi khi bạn cắm USB-RS232 vào những cổng USB khác nhau, thì máy tính sẽ nhận ra thành những cổng COM khác nhau (COM5, COM6 ..).


    Giả sử thiết bị của bạn là một sản phẩm cho người sử dụng, thật là bất tiện mỗi khi mở ứng dụng lên bắt buộc người dùng phải chọn cổng COM để kết nối với thiết bị.

    Nhiều khi trên máy của người dùng có đến 2 hay 3 cổng COM, với người dùng bình thường nhiều khi còn không biết cổng COM nào kết nối với thiết bị đang sử dụng.

    Để giải quyết vấn đề này, mình cũng từng Post bài hỏi bên ddth.com, tuy nhiên không phải là ý hay khi hỏi các vấn đề liên quan đến phần cứng bên đó. Google cho xong. Và mình đã có cách để giải quyết vấn đề này:
    * Mỗi một thiết bị USB đều có Product ID và Vendor ID (ví dụ của Microchip là VID = 0x04D8 và PID = 0x000A) .
    * Sử dụng ManagementObjectSearcher trong .NET để lấy thông tin phần cứng
    * Kiểm tra thông tin phần cứng với PID và VID có trùng với cổng USB-COM của mình không, trả về tên cổng COM.

    Code C# (nhớ add ref cho System.Management)
    Code:
    public string GetComPort(string hardwareId)
            {
    
                try
                {
                    ManagementObjectSearcher searcher =
                        new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity");
    
                    foreach (ManagementObject port in searcher.Get())
                    {
                        string name = port["Name"].ToString();
                        if (name.Contains("COM"))
                        {
                            string[] o = (string[])port["HardwareId"];
                            if (o != null)
                            {
                                if (o.Length > 1)
                                {
                                    string[] Sp = SerialPort.GetPortNames();
                                    if (o[1] == hardwareId)
                                    {
                                        foreach (string PortName in Sp)
                                        {
                                            if (name.Contains(PortName)) return PortName;
                                        }
                                    }
                                }
                            }
                        }
                            
                    }
                }
                catch (ManagementException)
                {
                }
                return null;
    
            }
    Sử dụng code này, ví dụ cho USB-COM của Microchip (PIC)
    Code:
    _portName = GetComPort("USB\\VID_04D8&PID_000A"); //return "COM8"
    Vậy là sau khi ứng dụng khởi động, nếu kiểm tra _portName khác null, thì có thể Open Port đó, không cần người dùng phải lựa chọn.

    [Bổ sung]
    Để biết Hardware Id, các bạn xem hình bên dưới

    Last edited by minhtuan04; 27-11-2009, 21:04. Lý do: Bổ sung
    Diễn đàn Vi điều khiển:

  • #2
    giao tiếp máy tính

    chào các bạn !
    mình có một vấn đề muốn hỏi các bác là:
    đã có ai lập trình giao tiếp cổng COM dùng C++ truyền dữ liệu qua cổng COM chưa?
    giúp mình với....mình muốn truyền một kí tự qua cổng COM và khi qua cổng COM thì dữ liệu ở dạng Bit 0x01,0x02......chẳng hạn như vậy?
    có ai biết thì chỉ giúp mình với...mình đang rất cần?
    Thank you

    Comment


    • #3
      cho mình hỏi truyền dữ liệu từ máy tính ra cổng com và cổng com ảo có gì khác nhau?///

      Comment


      • #4
        Nguyên văn bởi phamthuchung Xem bài viết
        cho mình hỏi truyền dữ liệu từ máy tính ra cổng com và cổng com ảo có gì khác nhau?///
        chẳng khác gì nhau cả ... vì là com cả thôi . Tuy nhiên công nghệ hiện nay cổng com ảo ... có thể có tốc độ khá cao ( so với cổng com truyền thống IBM-PC )
        Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

        Comment

        Về tác giả

        Collapse

        minhtuan04 Tìm hiểu thêm về minhtuan04

        Bài viết mới nhất

        Collapse

        Đang tải...
        X