{{{ #!html
シグナルデータの取り扱い
}}} [[BR]] = はじめに = * RTEから送信されるシグナルデータが,Comモジュール内でどのように使用されるかを説明する * AUTOSARのComモジュールは,OSEK/COM]仕様をベースにしており,一部の機能では仕様理解のためにOSEK/COM仕様書を参照する必要がある * OSEK/VDXのWebサイト閉鎖に伴い,OSEK/COM仕様書は既に公開されていないが「osekcom303.pdf」で検索するとヒットすることがある ---- = データ内で使用されるビット = == UINT8 == * ComSignalType: UINT8 * ComBitSize: 3 * データ: 7(0x07) {{{ | (byte 0) | bit | 7 6 5 4 3 2 1 0 | data | 0 0 0 0 0 1 1 1 | pack | * * * | }}} * 受信でIPDUから取り出す場合,0で符号拡張(0)される == UINT16 == * ComSignalType:UINT16 * ComBitSize:13 * データ: 4369(0x1111) {{{ | (byte 1) (byte 0) | bit | 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 | data | 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 | pack | * * * * * * * * * * * * * | }}} * 受信時処理は,UINT8と同様 == SINT8 == * ComSignalType: SINT8 * ComBitSize: 4 * データ: -4(0xFFFC) {{{ | (byte 0) | bit | 7 6 5 4 3 2 1 0 | data | 1 1 1 1 1 1 0 0 | pack | * * * * | }}} * 符号有り整数(2の補数)において,ビットサイズ4ということは,-8~7まで格納できる || -8||1000|| || -7||1001|| || -6||1010|| || -5||1011|| || -4||1100|| || -3||1101|| || -2||1110|| || -1||1111|| || 0||0000|| || 1||0001|| || 2||0010|| || 3||0011|| || 4||0100|| || 5||0101|| || 6||0110|| || 7||0111|| * 受信側で符号拡張して取り出される * [https://www.autosar.org/fileadmin/standards/classic/4-0/AUTOSAR_SWS_COM.pdf#page=35&view=fitv AUTOSAR_SWS_COM.pdf(COM008)]参照 == UINT8_N == * ComSignalType: UINT8_N(uint8[n]) * ComSignalLength: 3 * データ: {1,2,3} {{{ | (byte 2) | (byte 1) | (byte 0) | bit | 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | data | 0 0 0 0 0 0 1 1 | 0 0 0 0 0 0 1 0 | 0 0 0 0 0 0 0 1 | pack | * * * * * * * * | * * * * * * * * | * * * * * * * * | }}} * UINT8_Nの場合,シグナルサイズが必ず8の倍数とするため,{{{ComBitSize}}}でなく{{{ComSignalLength}}}で大きさを指定する == FLOAT32/FLOAT64 == * 浮動小数点は部分的なビットでは意味がないため,{{{ComBitSize}}}は32か64である必要がある * [https://www.autosar.org/fileadmin/standards/classic/4-0/AUTOSAR_SWS_COM.pdf#page=35&view=fitv AUTOSAR_SWS_COM.pdf(COM579)]参照 * R4.1では,FLOAT32/FLOAT64の場合,{{{ComBitSize}}}は無視されると書かれている * [https://www.autosar.org/fileadmin/standards/classic/4-1/AUTOSAR_SWS_COM.pdf#page=134&view=fitv AUTOSAR_SWS_COM.pdf(ECUC_Com_00158)]参照 ---- = I-PDUへのパッキング = 以下のデータを例にエンディアン毎のパッキング方法を図示する * ComSignalType: UINT32 * ComBitSize: 12 * ComBitPosition: 13 * {{{ComBitPosition}}}は,リトルエンディアンではLSBを,ビッグエンディアンではMSBを示すので注意が必要 * [https://www.autosar.org/fileadmin/standards/classic/4-0/AUTOSAR_TPS_SystemTemplate.pdf#page=145&view=fitv AUTOSAR_TPS_SystemTemplate.pdf(Figure 5.6)]参照 * PduLength: 4 * データ: "101010101010" == リトルエンディアン == {{{ | (byte 3) | (byte 2) | (byte 1) | (byte 0) | bit | 31 30 29 28 27 26 25 24 | 23 22 21 20 19 18 17 16 | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0 | data | 0 0 0 0 0 0 0 1 | 0 1 0 1 0 1 0 1 | 0 1 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | pack | <------------------------------------* | }}} * osekcom303.pdf(2.4.2, Figure 2-9)参照 == ビッグエンディアン == {{{ | (byte 0) | (byte 1) | (byte 2) | (byte 3) | bit | 7 6 5 4 3 2 1 0 | 15 14 13 12 11 10 9 8 | 23 22 21 20 19 18 17 16 | 31 30 29 28 27 26 25 24 | data | 0 0 0 0 0 0 0 0 | 0 0 1 0 1 0 1 0 | 1 0 1 0 1 0 0 0 | 0 1 0 1 0 0 0 0 | pack | *<---------------------------------- | }}} * osekcom303.pdf(2.4.3, Figure 2-10)参照 == オペーク == * エンディアン変換がオペークに設定されている場合,(I-PDUに詰め込む)最初のバイトのビット0を{{{ComBitPosition}}}とする * つまり,{{{ComBitPosition}}}には,ビットの先頭となる8の倍数しか指定してはいけない * 参考仕様 * [https://www.autosar.org/fileadmin/standards/classic/4-0/AUTOSAR_SWS_COM.pdf#page=135&view=fitv AUTOSAR_SWS_COM.pdf(COM259_Conf)] * [https://www.autosar.org/fileadmin/standards/classic/4-0/AUTOSAR_SWS_COM.pdf#page=34&view=fitv AUTOSAR_SWS_COM.pdf(COM472)] * [https://www.autosar.org/fileadmin/standards/classic/4-0/AUTOSAR_SWS_COM.pdf#page=162&view=fitv AUTOSAR_SWS_COM.pdf(COM443, COM553)] * 以下のデータを例にオペークのパッキング方法を図示する * ComSignalType: UINT8_N * ComSignalLength: 2 * ComBitPosition: __'''8'''__ * PduLength: 3 * データ: {1,3} {{{ | (byte 2) | (byte 1) | (byte 0) | bit | 23 22 21 20 19 18 17 16 | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0 | data | 0 0 0 0 0 0 1 1 | 0 0 0 0 0 0 0 1 | 0 0 0 0 0 0 0 0 | pack | <----------------------------------------------* | }}}