Quando definisci i mapping di middleware scalabile orientato ai servizi su IP (SOME/IP) in VSIDL, descrivi la serializzazione del formato di trasmissione e la codifica del payload di ogni messaggio SOME/IP. Utilizzando le definizioni SomeIpType e SomeIpStruct,
puoi modellare primitive, stringhe, array e struct nidificati che corrispondono
alle regole di codifica del payload dello stack AUTOSAR ARXML (SOMEIP-TRANSFORMATION-PROPS) e SOME/IP (incluso COVESA vsomeip).
Questa pagina si concentra su come scrivere una definizione di tipo SomeIpStruct, che viene utilizzata nei blocchi type_definition per i mapping di eventi e metodi.
SomeIpStruct message
Un messaggio SomeIpStruct rappresenta un payload SOME/IP strutturato composto da più campi. La struttura definita qui viene utilizzata dal broker SOME/IP per
tradurre tra i byte SOME/IP non elaborati e i campi di un messaggio protobuf SDV.
Quando definisci una struttura, configuri due proprietà principali:
length_field_size(facoltativo): specifica le dimensioni (in byte) del campo lunghezza che precede la struttura nel payload serializzato. I valori utilizzati dell'enumerazioneLengthFieldSizeincludonoZERO(nessun campo di lunghezza),ONE,TWOeFOUR.field(ripetuto): un elenco di campi che compongono la struttura.
Definisci i campi struct
Ogni campo all'interno di SomeIpStruct richiede:
field_name: il nome del campo. Deve corrispondere esattamente al nome del campo corrispondente definito nel messaggio protobuf SDV per garantire la corretta traduzione del messaggio.field_type: il tipo di dati SOME/IP del campo (SomeIpType). Può essere una primitiva, una stringa, un array o un'altra struttura nidificata.
Scrivi i tipi di campo SomeIpType
Il blocco field_type configura il tipo di dati specifico utilizzando una delle seguenti varianti:
- Tipi primitivi:utilizza
someip_primitivecon valori comeUINT8,UINT32,INT32,FLOAT32eBOOL. - Stringhe:utilizza
someip_stringe specifica le informazioni su codifica (ad esempio,UTF_8oUTF_16_LE) e lunghezza (fixed_lengtholength_field_size). - Array:utilizza
someip_arraye definisciarray_type(che è un altroSomeIpTypericorsivo), insieme alle informazioni sulla lunghezza (fixed_lengtholength_field_size). - Struct nidificati:utilizza
someip_structper incorporare un'altra definizione di struct in modo ricorsivo.
Esempio: scrivi una definizione di tipo struct
Ecco un esempio pratico di come scrivere un SomeIpStruct all'interno di un blocco type_definition. Questo payload contiene un numero intero senza segno a 8 bit denominato
interval e un numero intero senza segno a 32 bit denominato counter:
type_definition {
# No length field precedes this struct
length_field_size: ZERO
# First field: interval
field {
field_name: "interval"
field_type {
someip_primitive: UINT8
}
}
# Second field: counter
field {
field_name: "counter"
field_type {
someip_primitive: UINT32
}
}
}
Aggiungere tipi complessi
Per includere un campo stringa a lunghezza dinamica e un array all'interno della struct, aggiungi campi come questo:
field {
field_name: "status_message"
field_type {
someip_string {
string_encoding: UTF_8
length_field_size: FOUR
}
}
}
field {
field_name: "measurements"
field_type {
someip_array {
length_field_size: FOUR
array_type { someip_primitive: FLOAT32 }
}
}
}
Mappa la codifica del payload AUTOSAR ARXML e vsomeip
Quando integri AAOS SDV con unità di controllo elettronico (ECU) AUTOSAR esterne
o stack SOME/IP come COVESA vsomeip, assicurati che il tuo VSIDL type_definition
corrisponda ai parametri di serializzazione dei cavi definiti in ARXML
(SOMEIP-TRANSFORMATION-PROPS e SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS)
o nella configurazione vsomeip del sistema:
AUTOSAR ARXML e parametro vsomeip |
Equivalente di VSIDL SomeIpType |
Regola di serializzazione e codifica del payload |
|---|---|---|
sizeOfStructLengthField (0, 1,
2, 4 byte) |
SomeIpStruct.length_field_size (ZERO,
ONE, TWO, FOUR) |
Antepone un prefisso di lunghezza in byte esplicito prima del payload della struct serializzata. Imposta questo valore su ZERO per le struct a layout fisso senza un
prefisso di lunghezza. |
sizeOfArrayLengthField (0, 1,
2, 4 byte) |
SomeIpArray.length_field_size (ZERO,
ONE, TWO, FOUR) o
fixed_length |
Gli array dinamici richiedono un prefisso del campo lunghezza (ONE,
TWO o FOUR byte) che indica la lunghezza in byte
degli elementi dell'array serializzato. |
sizeOfStringLengthField e codifica (UTF-8,
UTF-16LE, UTF-16BE) |
SomeIpString.string_encoding e
length_field_size o fixed_length |
Corrisponde alle regole di serializzazione delle stringhe AUTOSAR (inclusa la gestione del marcatore dell'ordine dei byte e della terminazione null) per le stringhe a lunghezza variabile e fissa. |
Tipi di base primitivi (uint8, uint16,
uint32, float32, boolean) |
SomeIpPrimitive (UINT8,
UINT16, UINT32, INT32,
FLOAT32, BOOL) |
Codifica i valori primitivi in ordine di byte di rete (big-endian per impostazione predefinita in base alla specifica SOME/IP) corrispondenti al campo protobuf di destinazione. |