PythonでNCプログラムを自動生成してみる

記事
IT・テクノロジー
ココナラの名前を、「生産技術プログラマ」に戻しました。なんとなく。
はい。

今回は、CNCフライスやCNC旋盤の制御に欠かせないNCプログラム(.ncd)のお話です。
プライベートで、多くのNCプログラムを作成する機会があり、なんか自動化できたらいいよなーと 何年も考えてきたのですが、今年から学んでいるPythonでやってみたら、あっさりと形になりましたー、という話です。

<忙しい方のための要約ぅ~>
    ・CAD作図 →NCVCでNCデータ変換が面倒なので、Pythonで自動化してみた。
    ・ついでにスプライン関数で曲線補間したら、Pythonだとチョー楽だった件。
    ・UIに拘らなければ、コーディング開始~たたき台完成まであっという間。Pythonすげー。


はい。ちゃんと真面目に解説します(笑)

テストですので、シンプルな切削軌道といくつかの条件だけを与えて、PythonでNCデータを自動生成することを主眼とします。
動作仕様は、以下の通り。

(1) xy座標をCSVファイルにまとめて、インプットファイルとして読み込み。
(2) NCデータ冒頭には、アブソリュート指令やワーク座標系などの命令を固定で。
(3) NCデータ末尾には、クーラント停止などの命令を固定で。
(4) 切削軌道は、次の2パターンを持つことにします。
   パターン1: 直線
   パターン2: スプライン曲線

ファイルの読書きや、配列データの処理などは、ネット上にたくさん良い文献がありますので、気になった方はGoogle検索したりCopilotで検索してみてください。(CopilotやChatGPTは、ほんとオススメです)

……………………………………………………………………………………

パターン1(直線軌道)は、割と簡単です。
・CSVファイルを読込み。
・NCデータ先頭にアブソリュート指令などを固定で書込み。
・座標データは、CSVファイルから読込んだ値に"X"{x_value}"Y"{y_value}"F"{feedrate}と記載するだけ。
・NCデータ末尾に、クーラント停止などを固定で書込み。

これだけです。
csvファイルは、pandas.read_csv()を使用すればOK。
切削起動の書込みは、open(path, mode='w') as fileで開いて、file.write(f'X{x_value}Y{y_value}F{feedrate}')と書けばいけます。

……………………………………………………………………………………

面白いのは、パターン2(スプライン曲線軌道)です。

従来の方法では、CADソフトなどで座標空間のキャンバスを準備して、スプライン曲線を手動でプロットする必要がありましたが、これがなかなか手間がかかります。

そこで、Pythonを使用して、曲線軌道を自動で計算できないかというアイディアです。
与えるデータは、パターン1(直線軌道)と同じ。
(これが、通過するXY座標のポイントデータになります)

CSVデータの読出しは、
    df = pandas.read_csv(path)
で同じですが、xy座標は
    xs = df['x'].values
    ys = df['y'].values
でlist型として持っておきます。

ここで、スプライン関数の演算です。
    from scipy.interpolate import CubicSpline
    import numpy as np
    cs = CubicSpline(xs, ys)
    xxs = np.linespace(xs.min, xs.max(), num={補間する点数を考慮した整数値})
    yys = cs(xxs)
これだけでスプライン関数で曲線補間された点群データが取得できます。
なんてこった。Visual Basicでトライしたときは、あんなに苦労したのに。こんなあっさりできてしまうとは…。
後は、パターン1(直線軌道)の時と同じ手順で、*.ncdファイルにデータを書き込むだけ。

ここまでできれば、あとはきちんとした切削軌道を与えたり、切削工具の始動時にワークを傷つけないように 一時的に退避して原点にアプローチするなどの処理を入れてあげるだけですね。

最後まで読んでくれて、ありがとうございます。
おしまい。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら