ListenOnly-Modus in C++ aktivieren

This forum covers PCAN-Linux and Linux development issues concerning our products
Post Reply
Wurzelseppal
Posts: 4
Joined: Mon 19. Feb 2018, 07:42

ListenOnly-Modus in C++ aktivieren

Post by Wurzelseppal » Mon 19. Feb 2018, 08:01

Hallo liebe PEAK-Community!

Ich entwickle gerade eine C-Anwendung auf Linux / Debian und muss dabei nur CAN-Frames via PCAN-USB-Converter auslesen. Da würde sich die Option bzw. der Modus "ListenOnly" anbieten. Aber leider konnte ich keine Funktion finden, mit der man "ListenOnly" setzten kann.

Mein Code sieht derweil wie folgt aus:

Code: Select all

	TPCANStatus CANStatus;
	TPCANMsg ReadMessageBuffer;
	TPCANTimestamp TimeStamp;

	//...
	
	CANStatus = CAN_Initialize(PCAN_USBBUS1, PCAN_BAUD_250K, 0, 0, 0);		

	if(CANStatus!=PCAN_ERROR_OK)
	{
		printf("Error while initialising CAN-Interface: 0x%x \nExiting...\n", CANStatus);

		return EXIT_FAILURE;
	}

	CAN_Read(PCAN_USBBUS1, &ReadMessageBuffer, &TimeStamp);

	//...
	
	CAN_Uninitialize(PCAN_USBBUS1);
Nun meine Frage: Wo und Wie kann ich den ListenOnly-Modus (in C/C++) aktivieren?

Vielen Dank für Eure Hilfe!

MfG Michael

M.Maidhof
Support
Support
Posts: 1753
Joined: Wed 22. Sep 2010, 14:00

Re: ListenOnly-Modus in C++ aktivieren

Post by M.Maidhof » Mon 19. Feb 2018, 10:24

Hallo,

wenn Sie die PCANBasic API mit dem chardev Treiber unter Linux nutzen, finden Sie die noetigen infos im PCANBasic package in der PCAN-Parameter_Documentation.pdf auf Seite 29.

Mit freundlichen Gruessen

Michael Maidhof

Wurzelseppal
Posts: 4
Joined: Mon 19. Feb 2018, 07:42

Re: ListenOnly-Modus in C++ aktivieren

Post by Wurzelseppal » Mon 19. Feb 2018, 11:46

Hallo,

ja ich nutze den "chardev" Treiber für Debian Jessie. Auf der Seite 29 ist der Paramter wirklich sehr gut beschrieben. Dort steht, dass er zusammen mit dem Channel "PCAN_USBBUS1" gesetzt wird. Allerdings bin ich mir nicht sicher, ob das so richtig ist:

Code: Select all

    DWORD iBuffer = PCAN_PARAMETER_ON;

    if(CAN_SetValue(PCAN_USBBUS1, PCAN_LISTEN_ONLY, &iBuffer, sizeof(iBuffer)) != PCAN_ERROR_OK)
        printf("Error while setting ListenOnly!");
    else printf("Successfully set ListenOnly mode.");
Nun sollte der ListenOnly-Modus gesetzt sein? Stimmt das so?

LG Michael

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

Re: ListenOnly-Modus in C++ aktivieren

Post by K.Wagner » Mon 19. Feb 2018, 13:38

Hello,

ja, der Code sieht gut aus. Bitte bemerken Sie, dass die Hardware nur wirklich in "Listen-Only" Modus ist, wenn der Parameter gesetzt und der Kanal verbunden ist. Der Code sollte wie folgt aussehen:

Code: Select all

   TPCANStatus CANStatus;
   TPCANMsg ReadMessageBuffer;
   TPCANTimestamp TimeStamp;
   DWORD iBuffer;
  
// Initialisierung des Kanals
//...
   CANStatus = CAN_Initialize(PCAN_USBBUS1, PCAN_BAUD_250K, 0, 0, 0);      
   if(CANStatus!=PCAN_ERROR_OK)
   {
      printf("Error while initialising CAN-Interface: 0x%x \nExiting...\n", CANStatus);
      return EXIT_FAILURE;
   }

// Setzen der Listen-Only Modus
//...
    iBuffer = PCAN_PARAMETER_ON;

    if(CAN_SetValue(PCAN_USBBUS1, PCAN_LISTEN_ONLY, &iBuffer, sizeof(iBuffer)) != PCAN_ERROR_OK)
    {
        printf("Error while setting ListenOnly!");
      return EXIT_FAILURE;
    }

// Lesevorgang
//...
   CAN_Read(PCAN_USBBUS1, &ReadMessageBuffer, &TimeStamp);
//...
   
// Verbindung beenden
   CAN_Uninitialize(PCAN_USBBUS1);
Best regards,
Keneth

Post Reply