簡體   English   中英

多個USB轉RS485 FTDI設備ID

[英]Multiple USB to RS485 FTDI Device ID

我需要協助。 我正在使用C ++ / CX編寫Win 10應用程序。 我使用兩個USB到RS485設備,兩者都有相同的VID號碼。 在舊的日子里,我可以編寫一些軟件並使用舊的COMx等連接到端口。

我現在按照此處的示例串行樣本使用收集設備信息的方法,因此在查找連接的設備時,我在可用設備列表中看到的內容如下。

\\?\\ FTDIBUS#VID_0403 + PID_6001

兩個設備都具有相同的VID和PID。 這導致我有線連接到正確的USB設備的問題。 我想我的應用程序試圖同時連接到這兩個設備? 有沒有人對如何解決這個障礙有任何想法?

void MainPage::Get_Serial_Devices() {

cancellationTokenSource_Port1 = new Concurrency::cancellation_token_source();
cancellationTokenSource_Port2 = new Concurrency::cancellation_token_source();

// THIS USES ASYNCRONOUS OPERATION. GET A LIST OF SERIAL DEVICES AND POPULATE THE COMBO BOX
Concurrency::create_task(ListAvailablePortsAsync()).then([this](DeviceInformationCollection^ serialDeviceCollectioin)
{

    // serialDeviceCollection CONTAINS ALL SERIAL DEVICES FOUND, COPY INTO _deviceCollection
    DeviceInformationCollection^ _deviceCollection = serialDeviceCollectioin;

    // CLEAR EXISTING DEVICES FOR OUR OBJECT COLLECTION
    _availableDevices->Clear();

    // FOR EVERY DEVICE IN _deviceCollection
    for (auto &&device : _deviceCollection) {

        if (device->Name->Equals("USB-RS485 Cable")) {

            // CREATE A NEW DEVICE TYPE AND APPEND TO OUR OBJECT COLLECTION
            _availableDevices->Append(ref new Device(device->Id, device));

            Total_Ports++;

            this->DeviceLists->Items->Append(device->Id);


        }

    }

});





void MainPage::ConnectButton_Click(Object^ sender, RoutedEventArgs^ e) {



if (Port1_Connected == false) {

    // CAST INDEX TO CORRELATING Device IN _availableDevices
    Device^ selectedDevice = static_cast<Device^>(_availableDevices->GetAt(Port_1_ID));



    // GET THE DEVICE INFO
    DeviceInformation^ entry = selectedDevice->DeviceInfo; 



    Concurrency::create_task(ConnectToSerialDeviceAsync_Port1(entry, cancellationTokenSource_Port1->get_token())).then([this]( ) {

        Get_Echo(); 
        Waiting_For_Ack = true;


    }); 

}


Concurrency::task<void> MainPage::ConnectToSerialDeviceAsync_Port1(DeviceInformation^ device, Concurrency::cancellation_token cancellationToken) {


// CREATE A LINKED TOKEN WHICH IS CANCELLED WHEN THE PROVIDED TOKEN IS CANCELLED
auto childTokenSource = Concurrency::cancellation_token_source::create_linked_source(cancellationToken);

// GET THE TOKEN
auto childToken = childTokenSource.get_token();


    // CONNECT TO ARDUINO TASK
    return Concurrency::create_task(SerialDevice::FromIdAsync(device->Id), childToken).then([this](SerialDevice^ serial_device) {

        try {



            _serialPort_Port1 = serial_device;

            TimeSpan _timeOut;  _timeOut.Duration = 10;

            // CONFIGURE SERIAL PORT SETTINGS

            _serialPort_Port1->WriteTimeout = _timeOut;
            _serialPort_Port1->ReadTimeout = _timeOut;

            _serialPort_Port1->BaudRate = 57600;

            _serialPort_Port1->Parity = Windows::Devices::SerialCommunication::SerialParity::None;
            _serialPort_Port1->StopBits = Windows::Devices::SerialCommunication::SerialStopBitCount::One;
            _serialPort_Port1->DataBits = 8;
            _serialPort_Port1->Handshake = Windows::Devices::SerialCommunication::SerialHandshake::None;



            // CREATE OUR DATA READER OBJECT
            _dataReaderObject_Port1 = ref new DataReader(_serialPort_Port1->InputStream);
            _dataReaderObject_Port1->InputStreamOptions = InputStreamOptions::None;


            // CREATE OUR DATA WRITE OBJECT
            _dataWriterObject_Port1 = ref new DataWriter(_serialPort_Port1->OutputStream);


            this->ConnectButton->IsEnabled = false;
            this->DisconnectButton->IsEnabled = true;


            // KICK OF THE SERIAL PORT LISTENING PROCESS
            Listen_Port1();



        }

        catch (Platform::Exception^ ex) {

            this->Error_Window->Text = (ex->Message);

            CloseDevice(PORT_1);
        }

    });

FT_PROG是一個免費的EEPROM編程實用程序,用於FTDI設備。 它用於修改存儲FTDI設備描述符的EEPROM內容以定制設計。

可以在此處下載完整的FT_PROG用戶指南。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM