Buffaloの16ボタンコントローラでEMC2/LinuxCNCを操作する

Buffalo のアナログジョイパッド BSGP1601をLinuxCNCのリモコンとして使うための設定.

ページ下の「analogjoypadBSGP1601.hal」ダウンロードして設定ファイルと同じディレクトリに置き、

設定名.ini」ファイルの[HAL]セクションの中から,"HALFILE = custom.hal"を探し,

その次の行に,「HALFILE = analogjoypadBSGP1601.hal」を追加することで設定ファイルを呼び出すことで利用する.

前回の設定を流用しているところもあるので一部微妙.

##################################################################################

# for remote joypad control アナログ軸を含むコントローラ設定

loadusr -W hal_input -KRAL BSGP1601

## "Gamepad"の部分は各自のゲームパッドのN:欄 Name= から,必ずただ一つ識別できるようなキーワードにする.

## 今回はBSGP1601とした.

## 使用するリアルタイムモジュールの呼び出し

## count= の値は,利用したい論理が、宣言した個数だけ確保される

loadrt and2 count=10

loadrt not count=5

loadrt mux2

########################################################################################

## アナログ軸に関わるパラメータの設定

## 最大送り速度.ここの値はjoypadでのみ利用される(画面でのjog速度と独立)

setp halui.jog-speed 1000

## デッドバンド(禁止帯)の設定.あまり小さいと,スティックのニュートラルがずれると機械が停止しなくなる.

## 大きすぎる/未設定の場合,移動速度変化の分解能が少なくなる.

setp halui.jog-deadband 0.010

## y軸とrz軸がイメージと逆に動いたので,以下行を追加した.

#setp input.0.abs-y-scale -127.5

#setp input.0.abs-rz-scale -127.5

## 入力ピンの設定.-1から1までの少数値をとる「input._.abs-_-position」を設定する.

net analogX input.0.abs-x-position => halui.jog.0.analog

net analogY input.0.abs-y-position => halui.jog.1.analog

net analogZ input.0.abs-rz-position => halui.jog.2.analog

#####################################################################################

#digital-btn on-off デジタルボタンの設定

#クーラント (=[F8])

## 現在の状態を入力し,その状態とボタン操作とで論理をとることで同じボタンでon-offする.

## この方式のメリットは使用ボタン数が削減できること,

## 欠点はチョン押ししないと2回押したと判定されてしまうこと.

#現在の状態

net flood-is-on halui.flood.is-on => and2.0.in0

net flood-is-on halui.flood.is-on => not.0.in

net not-flood-is-on not.0.out => and2.1.in0

#ボタン状態

net button-6 input.0.btn-pinkie => and2.0.in1

net button-6 input.0.btn-pinkie => and2.1.in1

#動作

#net floodOff and2.0.out => halui.flood.off

#net floodOn and2.1.out => halui.flood.on

## 使うことにしたand2ふたつとnotひとつをservo-threadの間隔ごとに実行する.

## 起きうる最大の実行遅れ時間は「USB通信と信号解釈の時間+servo-thread間隔の時間」となる

addf and2.0 servo-thread

addf and2.1 servo-thread

addf not.0 servo-thread

##以下,同様に設定していく

#Spindle On-Off スピンドル(主軸)のオンオフ (=[F9/F10])

net spindle-is-on halui.spindle.is-on => and2.2.in0

net spindle-is-on halui.spindle.is-on => not.1.in

net not-spindle-is-on not.1.out => and2.3.in0

net button-5 input.0.btn-top2 => and2.2.in1

net button-5 input.0.btn-top2 => and2.3.in1

net spindleOff and2.2.out => halui.spindle.stop

net spindleOn and2.3.out => halui.spindle.start

addf and2.2 servo-thread

addf and2.3 servo-thread

addf not.1 servo-thread

#pause/resume (=[P/S])

net pause-is-on halui.program.is-paused => and2.4.in0

net pause-is-on halui.program.is-paused => not.2.in

net not-paused not.2.out => and2.5.in0

net button-14 input.0.key-301 => halui.program.pause

net button-16 input.0.btn-dead => halui.program.resume

#optional stop M1 (=[Alt+M 1]) オン時のみGコード中のM1コードで停止してくれる,オプショナルストップのオンオフ

net M1-is-on halui.program.optional-stop.is-on => and2.6.in0

net M1-is-on halui.program.optional-stop.is-on => not.3.in

net not-M1-is-on not.3.out => and2.7.in0

net button-15 input.0.key-302 => and2.6.in1

net button-15 input.0.key-302 => and2.7.in1

net M1Off and2.6.out => halui.program.optional-stop.off

net M1On and2.7.out => halui.program.optional-stop.on

addf and2.6 servo-thread

addf and2.7 servo-thread

addf not.3 servo-thread

#homing all

net button-13 input.0.key-300 => halui.home-all

#machine-on/run

net button-4 input.0.btn-top => halui.program.run

#mode auto

net button-3 input.0.btn-thumb2 => halui.mode.auto

#mode manual

net button1- input.0.btn-joystick => halui.mode.manual

#emergency-stop

net button-2 input.0.btn-thumb => halui.estop.activate

#feed-override

net button-10 input.0.btn-base4 => halui.feed-override.increase

net button-9 input.0.btn-base3 => halui.feed-override.decrease

#spindle-override

net button-8 input.0.btn-base2 => halui.spindle-override.increase

net button-7 input.0.btn-base => halui.spindle-override.decrease