Dobot MagicianのI/Oインターフェースを利用して、2つのエアーポンプを同時に動作させる方法の解説を行います。より広範な作業への適用をお考えの方にとって、ご参考になれば幸いです。
1. やるべきこと
エアーポンプを2つ繋げる場合、
-
- GP1, SW1に接続した1つ目のポンプ(A)
- GP2, SW2に接続した2つ目のポンプ(B)
のそれぞれについて、ON/OFFの制御を記述する必要があります。
(単一の関数によって両方のポンプを一度に動かすことは[wc_highlight color=”yellow” class=””]できません[/wc_highlight])
ポンプ(A)のON/OFFについては、従来通りの記述で制御可能です。
ポンプ(B)は、
GP2(EIO14)でエアーの方向(吸入/吐出)を指定し、
SW2(EIO17)でポンプのON/OFFを行う
ことで動かします。
2. 処理の流れ
次のような処理を例にとり、以降では2つのエアーポンプを制御する具体的な記述例を紹介いたします。
-
- 初期設定
- 2つのポンプをON
- (なんらかの処理)
-
2つのポンプをOFF
3. 各言語でのコード例
一連の処理部分をBlockly, PythonおよびC++で記述した例です。ご自身の環境に合わせてご参照ください。(なお、C++での実行にはDobotDLLが必要となります。)
[wc_tabgroup class=”” layout=”box”]
[wc_tab title=”Blockly”]
SuctionCupブロックでポンプ(A)を制御し、EIO17のON/OFFでポンプ(B)を制御します。処理を順に追っていくと、
1, 2つ目のブロックでポンプ(B)のEIOを設定
3つ目のブロックでポンプ(B)のエアーの方向を設定 (Value=1で吸入)
[wc_accordion collapse=”1″ leaveopen=”0″ class=”SetLevelOutput” layout=”box”]
[wc_accordion_section title=”SetLevelOutputの挙動について”]
3つ目のブロックにあるSetLevelOutputでは、指定した値に応じてエアーポンプ動作時の振る舞いが変化します。具体的には
-
- EIO14 = 0のとき、吐き出し
- EIO14 = 1のとき、吸い込み
の動作を行います。今回は吸盤に吸い付ける動作を想定し、吸い込みを行うよう設定します。
[/wc_accordion_section]
[/wc_accordion]
4, 5つ目のブロックで各ポンプをON
7, 8つ目のブロックで各ポンプをOFF
のようになっています。
[/wc_tab]
[wc_tab title=”Python”]
1 ##### set output ##### 2 dType.SetIOMultiplexingEx(api, 14, 1, 1) 3 dType.SetIOMultiplexingEx(api, 17, 1, 1) 4 5 ##### seting for pump B ##### 6 dType.SetIODOEx(api, 14, 1, 1) 7 8 ##### open pump A ##### 9 dType.SetEndEffectorSuctionCupEx(api, 1, 1) 10 11 ##### open pump B ##### 12 dType.SetIODOEx(api, 17, 1, 1) 13 14 15 dType.SetWAITCmdEx(api, 1000, 1) # wait for 1 sec. 16 17 18 ##### close pump A ##### 19 dType.SetEndEffectorSuctionCupEx(api, 0, 1) 20 21 ##### close pump B ##### 22 dType.SetIODOEx(api, 17, 0, 1)
dType.SetEndEffectorSuctionCupExでポンプ(A)を制御し、dType.SetIODOExを使ってEIO14,17をON/OFFすることでポンプ(B)を制御します。処理を順に追っていくと、
2,3行目でポンプ(B)のEIOを設定
[wc_accordion collapse=”1″ leaveopen=”0″ class=”SetLevelOutput” layout=”box”]
[wc_accordion_section title=”dType.SetIOMultiplexingExの引数に関して”]
2つ目の引数で対象のEIO番号、3つ目の引数でEIOの機能を指定しています。
詳細はDobot Magician API Description をご覧ください。
[/wc_accordion_section]
[/wc_accordion]
6行目でポンプ(B)のエアーの方向を設定 (第3引数=1で吸入)
[wc_accordion collapse=”1″ leaveopen=”0″ class=”SetLevelOutput” layout=”box”]
[wc_accordion_section title=”エアーの方向の指定について”]
6行目のSetIODOExでは、第3引数に指定した値に応じてエアーポンプ動作時の振る舞いが変化します。具体的には
-
- 第3引数= 0のとき、吐き出し
- 第3引数= 1のとき、吸い込み
の動作を行います。今回は吸盤に吸い付ける動作を想定し、吸い込みを行うよう設定します。
[/wc_accordion_section]
[/wc_accordion]
9,12行目で各ポンプをON
18,21行目で各ポンプをOFF
のようになっています。
[/wc_tab]
[wc_tab title=”C++”]
1 // set WAIT time 2 WAITCmd wait; 3 wait.timeout = 1000; 4 5 // set output 6 IOMultiplexing ioMul14, ioMul17; 7 8 ioMul14.address = 14; 9 ioMul14.multiplex = IOFunctionDO; 10 ioMul17.address = 17; 11 ioMul17.multiplex = IOFunctionDO; 12 SetIOMultiplexing(&ioMul14, true, NULL); 13 SetIOMultiplexing(&ioMul17, true, NULL); 14 15 IODO io14, io17; 16 17 // setting for pump B 18 io14.address = 14; 19 io14.level = 1; 20 SetIODO(&io14, true, NULL); 21 22 // open pump A 23 SetEndEffectorSuctionCup(true, true, true, NULL); 24 25 // open pump B 26 io17.address = 17; 27 io17.level = 1; 28 SetIODO(&io17, true, NULL); 29 30 31 SetWAITCmd(&wait, true, NULL); // wait for 1 sec. 32 33 34 // close pump A 35 SetEndEffectorSuctionCup(true, false, true, NULL); 36 37 // close pump B 38 io17.level = 0; 39 SetIODO(&io17, true, NULL);
SetEndEffectorSuctionCup()でポンプ(A)を制御し、SetIODO()を使ってEIO14,17をON/OFFすることでポンプ(B)を制御します。処理を順に追っていくと、
8~13行目でポンプ(B)のEIOを設定
[wc_accordion collapse=”1″ leaveopen=”0″ class=”SetLevelOutput” layout=”box”]
[wc_accordion_section title=”SetIOMultiplexing()の引数について”]
1つ目の引数で対象のEIO番号とEIOの機能を指定します。
詳細はDobot Magician API Description をご覧ください。
[/wc_accordion_section]
[/wc_accordion]
18~20行目でポンプ(B)のエアーの方向を設定 (level=1で吸入)
[wc_accordion collapse=”1″ leaveopen=”0″ class=”SetLevelOutput” layout=”box”]
[wc_accordion_section title=”エアーの方向の指定について”]
20行目のSetIODO()では、1つ目の引数で指定した値に応じてエアーポンプ動作時の振る舞いが変化します。具体的には
-
- level= 0のとき、吐き出し
- level= 1のとき、吸い込み
の動作を行います。今回は吸盤に吸い付ける動作を想定し、吸い込みを行うよう設定します。
[/wc_accordion_section]
[/wc_accordion]
23~28行目で各ポンプをON
35~39行目で各ポンプをOFF
のようになっています。
[/wc_tab]
[/wc_tabgroup]