この記事ではガリル社のモーションコントローラーを制御するプログラムについて記載する。ガリルはモーターなどのアクチュエータ(以下モーター)を制御するためのコントローラーであり、プログラムをコーディングし、ガリルへ転送・実行させることでモーター制御が可能となる。
##一般
- プログラムは簡単なスクリプト言語。
- プログラムの拡張子は.dmc。
- プログラムはコマンドの組み合わせで出来ている。
- コマンドは大文字アルファベット2文字からなる。
- コマンドはプログラムかターミナルで使用できる。
- プログラムは大文字小文字が区別される。
- コマンドの後にその引数を入力するが、間にスペースを入れても入れなくてもよい。
- 軸の指定はコマンドの後に対応するアルファベットを入力する。モーター起動コマンドはSHであり、例えば1軸目を起動させるならSHA,2軸目を起動させるならSHBとなる。
##プログラムの流れ
ガリルはモーターを制御するためのものであり、プログラムは大きく次の流れから構成される。
- 準備フェーズ(モーターを適切に動かすためのパラメータ設定)
- 実行フェーズ(モーターを動作させている間の挙動設定)
- 終了フェーズ(モーターを停止させるためのパラメータ設定)
最低限必要なコマンドのみで示すと次のようになる。
- SH(モーターを起動させるコマンド)
- BG(モーターを動作させるコマンド)
- ST(モーターを停止させるコマンド)
- MO(モーターを終了させるコマンド)
簡単なプログラムを以下に記載する。準備フェーズに動作に必要なパラメータの設定(加速度・減速度・回転数)とデジタルIOへ出力(想定としてはモーターで動作させるまえに油圧・空気圧システムの電磁弁へ出力をするようなイメージ)を行っている。実行フェーズではBGコマンドで指定したパラメータ通りにモーターが動作する。ここでは2秒モーターを動作させた後に停止させている。終了フェーズでは、モーターを終了させ、デジタルIOへ出力を行っている。
intro.dmc
'プログラム開始
#INTRO
'準備フェーズ
AC 10000 '加速度設定
DC 10000 '減速度設定
JG 30000 '回転数設定
SB1 'デジタルIOの1番目をオン
SH 'モーター起動
'実行フェーズ
BG 'モーター起動
WT 2000 '2秒待機
ST 'モーター停止
AM 'モーター動作が完全に指定するまで待機
'終了フェーズ
MO 'モーター終了
CB1 'デジタルIOの1番目をオフ
EN 'プログラムの終了
##コーディング上の注意点
- コメントは文頭に'またはREMをつける。
- ラベルは#のあとにアルファベット7文字までで指定する。なお、大文字小文字は区別される。
- プログラムの実行単位はラベルからENコマンドまでとなる。プログラムの呼び出しはラベルに対して行われ(ターミナルでXQ#{ラベル名}と入力するとプログラム実行)、ENコマンドが実行されるとプログラムは終了する。
- 関数の実行単位もラベルからENコマンドまでとなる。プログラム内での関数呼び出しはラベルに対して行われ(プログラム内でJS#{ラベル名})、ENコマンドが実行されると呼び出し元に処理が戻る。
- 文法上のエラーはダウンロードをした時点でターミナルに表示される。
- プログラムは各行逐次実行されるが、各コマンドの動作が完全に終了するまえに次のコマンドに移行することがある。例えばSTコマンドでモーターを終了させた後にMOを実行させるとモーター動作が完全に停止する前にモーター電源を落とそうとする場合がある。このためSTコマンドの後にAMコマンドを入れることで安全にMOをすることができる。このAMに限らず、ガリルは完全に動作が終了するまえに次の動作に移行しようとすることがある。そのため、プログラムと実際の動きが違ったり、モーターが不穏な動き・音を発するなどが生じたらこの現象を疑うべきである。
- SBは各デジタルIOへ出力を行うコマンドだが、OPコマンドでは一括出力を行うことができる。OPとSBは2進数換算でき、SB2とSB4コマンドを個別に行うコマンドはOP10 (2^1+2^3)、SB1とSB5を個別に行うコマンドはOP17(1+2^4)と同じ操作になる。なお、すべてのデジタルIOをオフにするのはOP0となる(いちいちCB1,CB2,CB3,,,とやる必要はない)。