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

        • bqviet
          Trả lời cho Đấu tắt điện cho máy tính bảng
          bởi bqviet
          Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
          06-12-2025, 17:17
        • nguyendinhvan
          Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
          bởi nguyendinhvan
          Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
          05-12-2025, 19:59
        • afrendly
          Trả lời cho Đấu tắt điện cho máy tính bảng
          bởi afrendly
          Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
          04-12-2025, 01:27
        • nick22
          Trả lời cho Máy điện châm ?
          bởi nick22
          Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
          01-12-2025, 13:23
        Đang tải...
        X