読者です 読者をやめる 読者になる 読者になる

LinuxCNCでCNCフライスを制御する

はじめに

一般的にNCフライスの制御にはMach3が使われることが多い.しかし,複雑な切削を行う場合(=長いGコードを読み込む場合)には,有料のライセンスを購入する必要があり,ソフトの機能に制約がある.
一方で,LinuxCNCと呼ばれるオープンソースなNCフライス制御ソフトも開発されており,こちらには機能制約はない.(機能的にはこちらの方が汎用的らしい?)
購入したNCフライスはMach3を想定して設定されているが,ライセンス代をケチるためにLinuxCNCで頑張ってみることにした.

なお,使用したNCフライスは以下の「黒い奴」である.

item.rakuten.co.jp

黒い奴にはMach3用の設定が提供されているので、これを元にLinuxCNCを設定する

コマンド

↓LinuxCNCの起動(レイテンシ調査もこっち.Sample Configurations->apps->latency.ツリービューを色々弄ると見つけられる.生成した設定ファイルはMy Configurationsに登録されるはず.)

./linuxcnc

↓LinuxCNC設定ファイル生成画面の起動

./stepconf

LinuxCNCのインストール

以下のサイトから落としてくれば良い.リアルタイム性能を引き出すために,Linuxカーネルに細工をする必要があり,細工済みの起動イメージが配布されている.これを用いるのが一番楽だ.
これを書いている人は,ソースからビルドを試みたが,あまりに躓く点が多いので,一度諦めている.

linuxcnc.org

配布されている起動イメージではvncserverが入っていない.また,sshd_configではパスワード認証を許可していないので,ログイン周りで弄らないといけないかもしれない.

起動出来た場合,最初にlinuxcncのレイテンシを調べておく(latency-histogram).レイテンシが数usec以内に収まっていない場合には,対策が必要かもしれない.
レイテンシ軽減の一つの策として,カーネルの起動コマンドにisolcpusを追加し,割り込み用のcpuを定義する方法がある.レイテンシは減るが,実質的にcpu数が一つ減るので処理速度とのトレードオフである.

f:id:sosoru_m:20170106180857j:plain
▲レイテンシの少ない例。isocpusを有効にした場合さらに改善する.

f:id:sosoru_m:20161024215649p:plain
▲レイテンシが多い例.カーネルレベルでのリアルタイム処理の対策を行っていない.

レイテンシはすなわち出力波形のジッターとして出てくるはず.オシロスコープで実際の波形を見たわけではないが,ジッターはレイテンシ以下の数値にはならないと思う.

stepconf

レイテンシが満足できたら,次はNCフライス制御の設定を行う.
パラレルポートのピン位置や,軸の回転ステップ数や範囲についてを設定する.
LinuxCNC 2.7.8ではMach3の設定を読み込めるが,読み込んだ全ての設定が反映されているかはとても怪しい.(ピン位置の設定は反映されていなかった)

Mach3の設定画面を見つつ,stepconfを進めていけば良い.


f:id:sosoru_m:20170106182524p:plain
▲この画面はあまり設定を変更する必要がなかった.Mach3のKernelSpeedとだいたい一致するように Max step rate を設定してやればよい?

f:id:sosoru_m:20170106183023p:plain
▲ピンアサイン設定.ここは悩まされた。
Mach3と対応していない一部の設定項目について説明する.StepやDirection,Home,EStopは省略する.

項目 Mach3での呼称 説明
Spindle PWM Spindle 主軸スピンドルに与えるPWM信号.
Amplifier Enable Enable1 ステッピングモータの通電切り替え?
Spindle On Output #1 スピンドル回転のオン/オフ
Coolant Flood Output #2 クーラントのオン/オフ(任意負荷)

Mach3のLowActiveはstepconfのinvertedと対応する.
また,EmergencySwitchの入力信号が,Mach3と論理が一致しないようなので,注意する.
Mach3を使いこなしていないから,OutputやEnableに関する設定がどのようにソフトの挙動と対応するかは知らない.これは試行錯誤で設定を行った.
ちなみに,二つ先の画面で軸の移動量をテストする機能があるので,ピンアサインに関して一部動作確認できる.

f:id:sosoru_m:20170106184455p:plain
▲これは重要ではない.オプションでおまけのGUIを表示できるよってやつ.スピンドル回転数などを表示するときに用いるらしい.

f:id:sosoru_m:20170106184837p:plain
▲これは重要.軸の移動量を決定する.灰色背景のテキストボックスは「編集可能」,もっとユーザビリティを考えてほしい.Mach3ではmmあたりのステップ数(画像一番下の数値)のみ決定するが,LinuxCNCでは一回転あたりのステップ数を指定する.軸のリードピッチが分からないと変換できないので,調べる必要がある.
右上のボタンで移動量をテストできる.(もちろん,ピンアサインが間違っていたら動かない.)

f:id:sosoru_m:20170106185605p:plain
▲重要だが躓く要素は少ない.PWM RateはMach3でも同様の設定項目はある.画像では最高回転数の時をPWM(=Duty比)1.0と設定している.

これで設定は終了で,あとは設定ファイルを保存するか聞かれるはず.設定をLinuxCNCに読ませて上手く動けば成功.

おわり

以上,是非とも設定で躓き,泥水を啜り,地べたから這い上がりつつも,なんとか動作確認をすませ,時間を浪費してほしい.なお,Mach3を2万円で購入するのであれば,以上の設定はすべて無駄である.