Getting error: "Invalid combination of start bit, signal size, and byte order", when packing message in big endian format using vehicle network toolbox

2 Ansichten (letzte 30 Tage)
I am trying to transmit a 4 byte can message in big endian format using the vehicle network toolbox using the code below.
message = canMessage(0x123, false, 4);
pack(message, 0x12345678, 31, 32, 'BigEndian');
But when i run it i get the error below when packing the message.
Error using can.Message/pack
Invalid combination of start bit, signal size, and byte order.
Error in canDebug (line 2)
pack(message, 0x12345678, 31, 32, 'BigEndian');
I have tried fixing the issue using the following changes, all errornous:
message = canMessage(0x123, false, 4);
pack(message, 0x12345678, 32, 32, 'BigEndian');
Error using pack
Expected STARTBIT to be a scalar with value < 32.
Error in can.Message/pack (line 614)
validateattributes(startBit, {'numeric'}, ...
Error in canDebug (line 2)
pack(message, 0x12345678, 32, 32, 'BigEndian');
message = canMessage(0x123, false, 4);
pack(message, 0x12345678, 0, 32, 'BigEndian');
Error using can.Message/pack
Invalid combination of start bit, signal size, and byte order.
Error in canDebug (line 2)
pack(message, 0x12345678, 0, 32, 'BigEndian');

Antworten (1)

Muskan
Muskan am 21 Feb. 2024
The start bit and the byte order are not independent. You can further refer to the following MATLAB Answer for a better understanding:
I hope this helps!
  1 Kommentar
Søren Lang
Søren Lang am 21 Feb. 2024
I have been looking at that question, though if you compress the message to 2 bytes, as to keep the message short and to the point.
message = canMessage(500,false,2);
pack(message,int16(1000),16,16,'BigEndian')
value = unpack(message,16,16,'BigEndian','int16')
You get the error:
Error using pack
Expected STARTBIT to be a scalar with value < 16.
This is because bit position 16 does not exist when doing 0 indexing as is done with the vehicle network toolbox.
When doing big endian the byte array is reversed, eg.
[0x12 0x34 0x56] -> [0x56 0x34 0x12]
Thus the startbit will be given as the total amount of bits in the message minus 8 bits. Thus to run the above code, it should look like below.
message = canMessage(500,false,2);
pack(message,int16(1000),8,16,'BigEndian')
value = unpack(message,8,16,'BigEndian','int16')

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Vehicle Network Toolbox finden Sie in Help Center und File Exchange

Produkte


Version

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by