実践! ご主人様とメイドがステッピングモーターを動かす:江端さんのDIY奮闘記 EtherCATでホームセキュリティシステムを作る(7)(4/7 ページ)
さて、今回は、前回に続きEtherCATの“2大技巧”の1つである「SyncManager」を解説したいと思います。その後、ステッピングモーターを動かすためのプログラムを作成してみましょう。
EtherCATでステッピングモーターを回す
では、ようやくここから、EtherCATでステッピングモーターを回すプログラムの作成に入ります。このプログラムはSOEMで動かすマスタ用のアプリケーションとなります。
SOEMのアプリケーションを、スクラッチから作るのは大変なので、Microsoft Visual C++の中のsimple_test”プロジェクトの中にある、”simple_test.c”を改造して作ってしまいましょう。
まず、前提として、「SOEMのデバッグ&トレース環境の作り方」が完了しているものとします(参考)。
Simple_testのプロジェクトを「スタートアッププロジェクトに設定」して、実行してみてください(simple_test.cは、まだ改造しません)。
この段階で、あなたの使っているDI/DOのEtherCATのスレーブのLEDが、ピカピカと点滅していれば問題ありません。
もし、点滅していなければ、先ほどの「slaveinfo.exeの表示(前回分ご参照)」に記載されている、メモリの先頭アドレスの値(例:「IOMap:01257D80」)と、スレーブ1の出力デジタルI/O用のアドレス(例:「Outputs 01257D84」)を調べてください。点滅していないのであれば、値が異なっているハズです。この差分を求めておいてください。
上記の例ですと、差分は、01257D84 - 01257D80 = 4 となります。
次に、simple_test.cの、最初の部分にある、”void CALLBACK RTthread(…)
の中にある、”IOmap[0]++;” の”0”を上記の値(例:”4”)に入れ替えてください。
(例:"IOmap[0]++;"→IOmap[4]++;”)
これで、再度コンパイルして実行すれば、LEDの点滅が確認できると思います。
これが先ほど申し上げた、「PCのメモリアドレス「01257D80」から最初の2バイト(のうち最初の8ビット)が、出力用、次の2バイト(のうち最初の8ビット)が入力用と分かれば、それで足るのです」の意味です。
“simple_test.c“が、EtherCATスレーブを制御するメモリの番地(例:”IOMap[4]”)さえ分かってしまえば、あとは、その” "IOMap[]"の中身を書き変えてやるだけで、EtherCATスレーブは動き出します。
何はともあれ、とにかく、何が何でも、この段階でスレーブのLEDのピカピカ点滅を確認してください。これが点滅しなかったら、ここから先に進めることができません。
さて、最後に、このマスタのアプリケーション(例:simple_test.c)で使われる”IOMap[]”の内容を(本当に、何度もしつこいですが)もう一度だけ、おさらいしてみましょう。
マスタとスレーブが協力して、うまいことマスタ(SOEM)のメモリを無駄に使わないように、パッキングしているのが分かります。
Copyright © ITmedia, Inc. All Rights Reserved.