Using 2 USB Adaptors

The free CAN Software API (Application Programming Interface) for Windows®
Locked
p.erasmus
Posts: 11
Joined: Fri 24. Sep 2010, 18:03

Using 2 USB Adaptors

Post by p.erasmus » Wed 12. Jan 2011, 20:45

I am using the PCAN Basic API with a USB adaptor which is working just fine, however I would like to
connect to a second CAN bus with a second adaptor running in the same Application software ,I would like to use the Application software as a gateway between the 2 systems
is this possible to do or do I have to use the Developer API ?
if it is possible with the Basic API is there a example some were?
Thank you for the support
Peter Erasmus
Automotive Engineering
Switzerland

K.Wagner
Software Development
Software Development
Posts: 1082
Joined: Wed 22. Sep 2010, 13:36

Re: Using 2 USB Adaptors

Post by K.Wagner » Thu 13. Jan 2011, 09:28

Hello Peter,

you are able to use up to 8 USB channels simultaneously within the same application using the PCAN-Basic.

We don't have an example doing this, but basicly you just need to make the connection process you have written in your app twice, one for each adaptor (CAN-Bus):

// PCAN-USB connected to the CAN-Bus A
PCANBasic.Initialize(PCANBasic.PCAN_USBBUS1, TPCANBaudrate.PCAN_BAUD_500K);

// PCAN-USB adaptor connected to the CAN-Bus B
PCANBasic.Initialize(PCANBasic.PCAN_USBBUS2, TPCANBaudrate.PCAN_BAUD_500K);

Then, you have to modify the way you read and write. You have to read from a channel and immediatly write to the other:

// Read from CAN-Bus A
PCANBasic.Read(PCANBasic.PCAN_USBBUS1, out CANMsg);

// Write to CAN-Bus B
PCANBasic.Write(PCANBasic.PCAN_USBBUS2, ref CANMsg);

Take into account that the PCAN-Basic does't allow you to write messages associated to a timestamp, so that the times between messages could be different when you re-write them to the second bus.

I hope this help. Good luck ;)
Best regards,
Keneth

p.erasmus
Posts: 11
Joined: Fri 24. Sep 2010, 18:03

Re: Using 2 USB Adaptors

Post by p.erasmus » Thu 13. Jan 2011, 09:56

Then, you have to modify the way you read and write. You have to read from a channel and immediatly write to the other:
Mr Wagner thank you for you example and efforts to help !!
I appoligisize if my statement regarding the gateway functionallity was misleading ,I want to read data from the 2 Busses ,at the moment i use your interrupt callBack to read CANA ,do I have to set up a second callBack for CANB ,The info you have given for connecting to CANA and CANB is very helpful and thank you very much for it.
I am not a windows programmer or software developer so I always have problems to understand how to implement the ideas is software examples like you showed me in your post is very much appreciated

Best regards
Peter
Peter Erasmus
Automotive Engineering
Switzerland

K.Wagner
Software Development
Software Development
Posts: 1082
Joined: Wed 22. Sep 2010, 13:36

Re: Using 2 USB Adaptors

Post by K.Wagner » Thu 13. Jan 2011, 11:20

Hi Peter,
p.erasmus wrote: ...at the moment i use your interrupt callBack to read CANA ,do I have to set up a second callBack for CANB ...
If you mean with "interrupt callback" the function "ReadMessages" from the PCAN-Basic samples, it is up to you if you do the new read works within the same function or in a new one. To read from the second adaptor you have to do just the same steps, but using the handle of the new USB-Channel. Taking as example "reading with a timer" from the PCAN-basic samples (I will use C#), you could modify the code a little to get what you want:

Code: Select all

       private void tmrRead_Tick(object sender, EventArgs e)
        {
            ReadMessages();
        }
you could change the code above to do something like this:

private void tmrRead_Tick(object sender, EventArgs e)
{
ReadMessagesFrom(PCANBasic.PCAN_USBBUS_1);
ReadMessagesFrom(PCANBasic.PCAN_USBBUS_2);
}

and this function...

Code: Select all

        private void ReadMessages()
        {
            TPCANMsg CANMsg;
            TPCANTimestamp CANTimeStamp;
            TPCANStatus stsResult;
	
            do
            {
                stsResult = PCANBasic.Read(m_PcanHandle, out CANMsg, out CANTimeStamp);

                if (stsResult == TPCANStatus.PCAN_ERROR_OK)
                    ProcessMessage(CANMsg, CANTimeStamp);

            } while (btnRelease.Enabled && (!Convert.ToBoolean(stsResult & TPCANStatus.PCAN_ERROR_QRCVEMPTY)));
        }
... could be changed to receive a parameter (channel):

private void ReadMessagesFrom(byte channelHandle)
{
TPCANMsg CANMsg;
TPCANTimestamp CANTimeStamp;
TPCANStatus stsResult;

do
{
stsResult = PCANBasic.Read(channelHandle, out CANMsg, out CANTimeStamp);

if (stsResult == TPCANStatus.PCAN_ERROR_OK)
ProcessMessage(CANMsg, CANTimeStamp);

} while (btnRelease.Enabled && (!Convert.ToBoolean(stsResult & TPCANStatus.PCAN_ERROR_QRCVEMPTY)));
}

Best regards,
Keneth
Best regards,
Keneth

p.erasmus
Posts: 11
Joined: Fri 24. Sep 2010, 18:03

Re: Using 2 USB Adaptors

Post by p.erasmus » Sat 15. Jan 2011, 10:10

Hello Keneth

Thank you very much for your help it is highly appreciated ,You do not now how much you helped me :D
you guys at Peak are unbelieveable !!!

Have a nice weekend
Peter Erasmus
Automotive Engineering
Switzerland

Locked