検索
連載

実践! ご主人様とメイドがステッピングモーターを動かす江端さんのDIY奮闘記 EtherCATでホームセキュリティシステムを作る(7)(4/7 ページ)

さて、今回は、前回に続きEtherCATの“2大技巧”の1つである「SyncManager」を解説したいと思います。その後、ステッピングモーターを動かすためのプログラムを作成してみましょう。

Share
Tweet
LINE
Hatena

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.

ページトップに戻る