SDOデータの構造解析#
ここでは、EL6695(EtherCATゲートウェイターミナル)を例として取り上げます。このターミナルでは、Index0xFA20
に診断データが格納されています。これらをコンプリートアクセスで読み出します。
個々のオブジェクトのデータ仕様は、エントリをダブルクリックすることで詳細ウィンドウが現れますのでここから確認できます。データサイズは最下部のBit Size
を閲覧できますので、対応する型を選定してください。
注釈
ODのより詳しい情報はデバイスメーカが提供している仕様書を参照してください。弊社製のELターミナルのマニュアル(InfoSys)では、EtherCAT Terminals以下の各デバイスのCommissioning
以下のStandard Object
や、CoE Object
などに記載があります。
構造体の定義#
任意の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