Coding Based CAPL Script Interview Questions

Coding Based CAPL Script Interview Questions

Hello guys, welcome back to our blog. Here in this article, we will discuss coding-based CAPL script interview questions and code-based answers.

Ask questions if you have any electrical,  electronics, or computer science doubts. You can also catch me on Instagram – CS Electrical & Electronics

Coding Based CAPL Script Interview Questions

CAPL (Communication Access Programming Language) is a scripting language used in Vector’s CANoe and CANalyzer tools for simulating, testing, and analyzing CAN (Controller Area Network) communication. It is similar to C but has event-driven capabilities, making it suitable for handling CAN messages, diagnostic requests, and other automotive communication tasks.

CAPL supports:

  • Event-driven programming (e.g., on message, on timer, on key press, etc.)
  • Message transmission and reception
  • Timers and cyclic events
  • File handling and logging

01. Write a basic CAPL script and explain the structure.

Code:

variables {
  int counter;  // Global variable
}

on start {
  counter = 0;
  write("CAPL Program Initialized");
}

Explanation:

  • variables {} section declares global variables.
  • on start {} is an event that triggers when the simulation starts.

02. Write a CAPL script to send a CAN message.

Code:

message 0x100 msgExample; // Declare CAN message with ID 0x100

on start {
  msgExample.dlc = 8;  // Set Data Length Code (DLC)
  msgExample.byte(0) = 0x11;
  msgExample.byte(1) = 0x22;
  output(msgExample);  // Send message
}

Explanation:

  • The message msgExample with ID 0x100 is defined.
  • DLC (Data Length Code) is set to 8 bytes.
  • Bytes are assigned values.
  • output(msgExample); sends the message.

03. Write a CAPL script to receive a CAN message and process its data.

Code:

on message 0x200 {
  write("Received Message: ID=0x200, Data= %02X %02X", this.byte(0), this.byte(1));
}

Explanation:

  • The event on message 0x200 triggers when a message with ID 0x200 is received.
  • this.byte(n) extracts data bytes from the received message.

04. Write a CAPL script to execute a function every 100ms using a timer.

Code:

variables {
  timer myTimer;
}

on start {
  setTimer(myTimer, 100);
}

on timer myTimer {
  write("Timer Event Triggered");
  setTimer(myTimer, 100);
}

Explanation:

  • setTimer(myTimer, 100); starts the timer.
  • on timer myTimer {} executes every 100ms.

05. Write a CAPL script to log CAN messages to a file.

Code:

variables {
  dword fileHandle;
}

on start {
  fileHandle = fopen("log.txt", "w");
  if (fileHandle == 0) write("File opening failed!");
}

on message * {
  fprintf(fileHandle, "Msg ID: 0x%X Data: %02X %02X %02X\n", this.ID, this.byte(0), this.byte(1), this.byte(2));
}

on stop {
  fclose(fileHandle);
}

Explanation:

  • fopen(“log.txt”, “w”); opens a file for writing.
  • on message * logs all received CAN messages.
  • fclose(fileHandle); closes the file when the simulation stops.

06. Write a CAPL function to calculate the sum of two numbers.

Code:

int add(int a, int b) {
  return a + b;
}

on start {
  int result = add(5, 10);
  write("Sum = %d", result);
}

Explanation:

  • int add(int a, int b) defines a function.
  • result = add(5, 10); calls the function.

07. Write a CAPL script to execute code when a key is pressed.

Code:

on key 'A' {
  write("Key A Pressed");
}

Explanation:

  • The on key ‘A’ event triggers when the ‘A’ key is pressed.

08. Write a CAPL script to check if a received message has a specific byte value.

Code:

on message 0x300 {
  if (this.byte(0) == 0xAA) {
    write("Special Byte Received!");
  }
}

Explanation:

  • if (this.byte(0) == 0xAA) checks if the first byte is 0xAA.

09. Write a CAPL script using a for loop.

Code:

on start {
  int i;
  for (i = 0; i < 5; i++) {
    write("Loop iteration %d", i);
  }
}

Explanation:

  • A for loop runs 5 times, printing the iteration number.

10. Write a CAPL script using an array.

Code:

variables {
  int dataArray[5];
}

on start {
  dataArray[0] = 10;
  dataArray[1] = 20;
  write("First Value: %d, Second Value: %d", dataArray[0], dataArray[1]);
}

Explanation:

  • dataArray[5] defines an array of 5 integers.
  • Values are stored and accessed.

11. Write a CAPL script to send a CAN message every 500ms.

Code:

variables {
  message 0x400 msgCyclic;
  timer cyclicTimer;
}

on start {
  setTimer(cyclicTimer, 500);  // Start the cyclic timer
}

on timer cyclicTimer {
  msgCyclic.dlc = 2;
  msgCyclic.byte(0) = 0xAB;
  msgCyclic.byte(1) = 0xCD;
  output(msgCyclic);
  setTimer(cyclicTimer, 500);  // Restart the timer
}

Explanation:

  • A timer is used to send a CAN message every 500ms.
  • The message 0x400 is sent with 2 bytes of data.

12. Write a CAPL script to process only messages with IDs 0x500 and 0x600.

Code:

on message * {
  if (this.ID == 0x500 || this.ID == 0x600) {
    write("Filtered Message ID: 0x%X", this.ID);
  }
}

Explanation:

  • if (this.ID == 0x500 || this.ID == 0x600) filters messages with specific IDs.

13. Write a CAPL script using a switch-case to process different message IDs.

Code:

on message * {
  switch (this.ID) {
    case 0x700:
      write("Message ID 0x700 received");
      break;
    case 0x701:
      write("Message ID 0x701 received");
      break;
    default:
      write("Unknown message ID: 0x%X", this.ID);
  }
}

Explanation:

  • switch (this.ID) allows processing different message IDs efficiently.

14. Write a CAPL script to check if a specific bit is set in a message byte.

Code:

on message 0x800 {
  if (this.byte(0) & 0x01) {
    write("Bit 0 is set in byte 0");
  }
}

Explanation:

  • this.byte(0) & 0x01 checks if bit 0 of the first byte is set.

15. Write a CAPL script using a structure for CAN messages.

Code:

typedef struct {
  int id;
  byte data[8];
} CanMessage;

variables {
  CanMessage msg;
}

on start {
  msg.id = 0x900;
  msg.data[0] = 0x11;
  msg.data[1] = 0x22;
  write("Struct Message ID: 0x%X, Data[0]: %02X", msg.id, msg.data[0]);
}

Explanation:

  • typedef struct defines a custom CAN message structure.

16. Write a CAPL script to log events to a file.

Code:

variables {
  dword logFile;
}

on start {
  logFile = fopen("event_log.txt", "w");
  if (logFile == 0) write("Error opening log file!");
}

on message * {
  fprintf(logFile, "Received Message ID: 0x%X\n", this.ID);
}

on stop {
  fclose(logFile);
}

Explanation:

  • fopen(“event_log.txt”, “w”) opens a log file for writing.
  • fprintf(logFile, …); logs received message IDs.

17. Write a CAPL script to detect bus-off and restart CAN communication.

Code:

on busOff {
  write("Bus Off detected! Restarting CAN...");
  restartCAN();
}

Explanation:

  • The on busOff {} event detects bus-off and calls restartCAN();.

18. Write a CAPL script to calculate and display the CAN bus load.

Code:

variables {
  float busLoad;
}

on timer 1s {
  busLoad = getBusLoad();
  write("Current CAN Bus Load: %f%%", busLoad);
  setTimer(1s, 1000);
}

Explanation:

  • getBusLoad(); retrieves the current CAN bus load in percentage.

19. Write a CAPL script to extract and process a signal from a CAN message.

Code:

on message 0xA00 {
  int rpm = (this.byte(1) << 8) | this.byte(0);
  write("Engine RPM: %d", rpm);
}

Explanation:

  • The RPM signal is extracted using bitwise operations from 2 bytes.

20. Write a CAPL script to handle CAN error frames.

Code:

on errorFrame {
  write("Error Frame Detected! Error Type: %d", this.errorType);
}

Explanation:

  • The on errorFrame {} event triggers when a CAN error occurs.
  • this.errorType provides the error type.

Conclusion

These 20 CAPL interview questions cover essential concepts like:

  • Message transmission & reception
  • Timers & cyclic events
  • Logging & file handling
  • CAN bus diagnostics
  • Signal decoding & error detection

This was about “Coding Based CAPL Script Interview Questions”. Thank you for reading.

Also, read:

About The Author

Share Now