ファンクションブロックを用いたデータアクセス#

コンプリートアクセスでSDOデータを読み出すには、FB_ECCoeSdoReadExファンクションブロックを使います。以下の手順でお使いください。

ライブラリの有効化#

PLCプロジェクトのReferencesメニューからライブラリマネージャを出現させ、IO/Tc2_EtherCATのライブラリを追加してください。TwinCAT XAEに含まれているライブラリですので、別途リポジトリからのインストールは不要です。

EtherCATマスタのAmsNetID、読み出したいサブデバイスのEtherCATアドレスの調査#

EtherCATマスタのAMS NetIdを確認してください。

また、読み出したい対象のサブデバイスのEtherCATアドレスを、EtherCATタブを開いて調べます。

プログラム#

2byteアライメントで定義したsdo_EL6695_diag構造体変数を使って、FB_ECCoeSdoReadExファンクションブロックを通じて0.5秒ごとに周期的にSDOを読み出すプログラム例を紹介します。

事前に調べたEtherCATマスタのNetId、サブデバイスのEtherCATアドレス、読み出したい対象のCoE Index、定義した構造体変数へのポインタおよびそのサイズを指定します。

bExecuteは、bErrorが立ち上がることなくbBusyがFalseとなるまで保持します。

PROGRAM MAIN
VAR
    fbSdoRead: FB_ECCoeSdoReadEx;
    el6695_diag : sdo_EL6695_diag;
    read_request : TON;
END_VAR

read_request(
    IN := fbSdoRead.bBusy OR NOT fbSdoRead.bExecute, 
    PT := T#0.5S
);


fbSdoRead(sNetId := '10.200.64.8.4.1',
    nSlaveAddr := 1008,
    nIndex := 16#FA20,
    nSubIndex := 0,
    pDstBuf := ADR(el6695_diag),
    cbBufLen := SIZEOF(el6695_diag),
    bExecute := read_request.Q,
    bCompleteAccess := TRUE
);

これにより、0.5秒毎にMaibox通信でSDOを読み出し、構造体変数へマップすることができます。PDOなどでは読み取れない診断データ等を定期的に監視し、故障予知などにご活用ください。