SDOデータの構造解析

SDOデータの構造解析#

ここでは、EL6695(EtherCATゲートウェイターミナル)を例として取り上げます。このターミナルでは、Index0xFA20に診断データが格納されています。これらをコンプリートアクセスで読み出します。

個々のオブジェクトのデータ仕様は、エントリをダブルクリックすることで詳細ウィンドウが現れますのでここから確認できます。データサイズは最下部のBit Sizeを閲覧できますので、対応する型を選定してください。

注釈

ODのより詳しい情報はデバイスメーカが提供している仕様書を参照してください。弊社製のELターミナルのマニュアル(InfoSys)では、EtherCAT Terminals以下の各デバイスのCommissioning以下のStandard Objectや、CoE Objectなどに記載があります。

例:

EL34x3 電力計測ターミナルの場合

EL6695 EtherCATブリッジターミナルの場合

構造体の定義#

任意のIndexをコンプリートアクセスする場合、サブインデックスのバイト配列に準じた構造体を定義します。定義する構造体は4Byteアライメントとなるようにpack_modeを指定します。

重要

コンプリートアクセスでサブインデックスがバイト列で構成されたSDOは、4byteアライメントのデータ配置となっています。対してTwinCAT3の標準的なメモリアライメントは8byteアライメントです。このままではバイト配列を構造体データに対応せずデータがずれてしまいます。このため、SDOとマッピングする構造体、または、そのインスタンス変数などに対しては、必ず4byteアライメントを指定する{attribute 'pack_mode' := '4'}のattributeを付与してください。

{attribute 'pack_mode' := '4'}
TYPE sdo_EL6695_diag :
STRUCT
    identify : USINT;
    status : UINT;
    cpu_usage : UINT;
    heap_usage : UINT;
    aoe_packets: UINT;
    eoe_packets : UINT;
    foe_packets : UINT;
    soe_packets : UINT;
    voe_packets : UINT;
    other_pacekts: UINT;
    mbx_info : UINT;
    pd_copy_time_my: UINT;
    pd_copy_time_remote :UINT;
    info_2 : UINT;
    info_3 : UINT;
    info_4 : UINT;
    info_5 : UINT;
    info_6 : UINT;
    info_7 : UINT;
    info_8 : UINT;
    info_9 : UINT;
    info_10 : UINT;
    info_11 : UINT;
    info_12 : UINT;
    info_13 : UINT;
    info_14 : UINT;
    info_15 : UINT;
    info_16: UINT;
    info_17 : UINT;
    info_18 : UINT;
END_STRUCT
END_TYPE