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

2 vues (au cours des 30 derniers jours)
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');

Réponses (1)

Muskan
Muskan le 21 Fév 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 commentaire
Søren Lang
Søren Lang le 21 Fév 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')

Connectez-vous pour commenter.

Catégories

En savoir plus sur Vehicle Network Toolbox dans Help Center et File Exchange

Produits


Version

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by