問題タブ [g-code]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
44 参照

parsing - YACC を GCODE (GRBL) に適用する

GCode は、多軸 (CNC) ロボットに移動方法を伝えるために使用される言語です。次のようになります。

これらのコマンドを文章にまとめましたが、各トークンは別の行にある可能性があります。実際、数字をそれぞれのコード文字に連結する規則はありません。それでも、以下で説明するように、トークンを取得できる LEX パーサーを既に持っています。

一部のコマンド (M または G コード) にはパラメータがあります。M3 の場合、S (主軸速度) パラメータを持つことができます。G0 と G1 は X、Y、Z、F などを持つことができます。G3 は X、Y、Z、I、J、R を持つことができます。ただし、各 G コードはこれらすべてのパラメータを必要とするわけではなく、1 つ、多く、またはすべてを必要とします。

ここで注意すべきことの 1 つは、1 つのパスを切断してから z 軸を持ち上げていることです。つまり、作業面の上の場所に移動し、貫通し、パスを切断してからリフトオフします。私はこれを「ブロック」または「パス」と呼びますが、私が興味を持っているのはこれです。

乱雑な形式で GCode を解析し、「ブロック」の構造を作成できるようにする必要があります。ここで、ブロックは z 軸の上下の間の一連の「コマンド」です。

LEX (特に python PLY) を使用して、この言語をトークン化できます。そして得る:

Lexx を使用すると、「コマンド」と呼ばれるもののルールが必要になります。

コマンドは任意のコメント、または : 'G' または 'M' コードの後に​​適切なパラメーター コード (X、Y、Z など) が続く コマンドは、別のコマンド (コメント、G または M) に遭遇すると終了します。

次に、「ブロック」と呼ばれるものが必要です。ブロックとは、Z ダウンの後、Z アップの前に来る一連の「コマンド」です。

100 個の G コードと 100 個の M コード、および 25 個のパラメーター コード (AZ から G と M を差し引いた値) があります。

「コマンド」のルールは次のようになります。

では、ブロックをどのように定義するのでしょうか!?

これは非常に長い投稿だと思いますが、YACC がこれを実行できるかどうかについて誰か考えを教えていただけませんか? それ以外の場合は、lex トークンを手動でツリーに変換するコードを記述します。

補遺 @rici

この質問を理解するために時間を割いていただきありがとうございます。フィードバックとして: 私の完全な仕事は、さまざまなユース ケースに基づいてコードのチャンクをブロックに分離するという困難な作業を YACC に任せることです。

たとえば、「彫刻」する場合、ブロックは文字やその他の形状 (xy 平面) を表すことがよくあります。したがって、ブロックは、xy 平面内外の z 軸の動きによって定義されます。

プロセスブロックをポストできるようにしたい:

  • ハッチは「ブロック」を塗りつぶします。これには、パスの境界、それらの境界への接線、ツールの直径などのかなり複雑な計算が含まれます。これは最も差し迫った使用例であり、これに対する適切な解決策はまだありませんが、実行できるため、実行できることはわかっています。 Inkscape (ベクター グラフィックス アプリケーション)
  • n 度回転します。かなり単純な座標変換ですが、これに対する解決策は既にあります。
  • 繰り返し深化(押し出し)します。ブロックをコピーし、反復ごとに Z 深度を調整します。単純。
0 投票する
1 に答える
37 参照

python-3.x - 文字列内の数値を行ごとに検索、乗算、置換する

CNC レーザー出力の Gcode をスケーリングしています。レーザーの「S」値の最大値は 225 で、現在のファイル スケールは 1000 です。S 値のみ/すべてに .225 を掛け、0 の S 値を省略し、各行の文字列を置き換える必要があります。軸移動および機械機能の G コードには、事前に指定された「M」、「G」、「X」、「Y」、「Z」、「F」、および「S」があります。

注: 7.5k 行のコードがあるため、これを手動で行うことはできません。

(上 3 行) のような結果で .py を期待:

サンプル ファイル コード:

これを試しました:

出力:

test.rtf ファイル: