Отправить сообщение через CAPL

Я отправляю сообщение CAN из базы данных,

variables
{
  message PNHV_Energy msg;
}

output (msg);

Это сообщение имеет 5 сигналов

signal A: 1 bit - startbit is 28
signal B: 3 bit - startbit is 29
signal C: 16bit - startbit is 48
signal D: 8 bit - startbit is 32
signal E: 8 bit - startbit is 40

Как мне построить это и отправить? Проблема, с которой я сталкиваюсь, заключается в сигнале A и сигнале B, которые упакованы в один байт в местоположении A: 1bit-28. сигнал B: 3бит-29 до 30.

какое значение для байта 3 должно быть установлено?

msg.byte(3)= ?

Он использует формат с прямым порядком байтов.


person Nikhil    schedule 18.01.2018    source источник


Ответы (2)


Переменные типа message являются классами в CAPL. Если они взяты из действующей базы данных CAN, они поставляются предварительно упакованными со всеми связанными с ними сигналами. Давайте посмотрим на пример

Variables
{
    message PHNV_Energy msg;
}

on start {
    /* at the beginning of measurement, set the signals */
    msg.A = 0x00;
    msg.B = 0x00;
    msg.C = 0x00;
    ...
}

on message * {
    /* every time a message is received by our CAPL program node */
    output(message);
}

Это гораздо более простой способ сформулировать свое сообщение по сравнению с вашим решением: вам больше не нужно об этом беспокоиться.

Проблема, с которой я сталкиваюсь, заключается в сигнале A и сигнале B, которые упакованы в один байт в сигнале местоположения A: 1bit-28. сигнал B: 3бит-29 до 30.

person Daemon Painter    schedule 16.02.2018

Нашел ответ на вопрос,

Variables
{
    message PNHV_Energy msg; //Message to be sent from database
}

send_message()
{
    msg.byte(0)=0x0;  //0x00
    msg.byte(1)=0x0;  //0x00
    msg.byte(2)=0x0;  //0x00
    msg.byte(3)=0x20; //bit29-31: signal 1, bit 28: signal 2
    msg.byte(4)=0xFF; //FF to be sent at byte4: signal 3
    msg.byte(5)=0xFF; //bit 40 to bit 47: signal 4
    msg.byte(6)=0x10; //bit 48-51:0 bit52-55:1: signal 5
    msg.byte(7)=0x27; //bit 56-59:7 bit60-63:2: signal 5

    output (msg); // output Message
}
person Nikhil    schedule 18.01.2018
comment
Да, вы также можете создать свой сигнал вручную, но почему вы готовы создавать себе проблемы, когда вы можете адресовать сигналы внутри сообщения напрямую? - person Daemon Painter; 27.03.2018
comment
Я согласен на это. Спасибо за ваш вклад - person Nikhil; 02.04.2018