<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Roeders | じじぃの引出し</title>
	<atom:link href="https://www.kazuban.com/blog/tag/roeders/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kazuban.com/blog</link>
	<description>なにかしら、皆さんの参考になれば幸いです！</description>
	<lastBuildDate>Fri, 14 Apr 2023 09:07:21 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.kazuban.com/blog/wp-content/uploads/2020/05/cropped-ICON-1-32x32.png</url>
	<title>Roeders | じじぃの引出し</title>
	<link>https://www.kazuban.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ＮＣプログラム／工具径補正</title>
		<link>https://www.kazuban.com/blog/dia-compensation/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sat, 28 Dec 2019 01:16:44 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[Heidenhain]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[Roeders]]></category>
		<category><![CDATA[ハイデンハイン]]></category>
		<category><![CDATA[ファナック]]></category>
		<category><![CDATA[工具径補正]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=1518</guid>

					<description><![CDATA[前回、図形を定義する基本的なＧコードの説明をしました。これで、工具経路の輪郭の定義はできるようになると思います。ただ、これは工具中心経路の定義なので、実際の加工を想定すると工具径も考慮する必要があります。また、マシニング [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/nc-gcode-02/">前回、図形を定義する基本的なＧコードの説明をしました。</a><br>これで、工具経路の輪郭の定義はできるようになると思います。<br>ただ、これは<span class="markerYellow">工具中心経路の定義なので</span>、実際の加工を想定すると工具径も考慮する必要があります。<br>また、マシニングセンターのような工具を自動で交換する機械の場合には、使用工具の長さも考慮しなければいけません。<br>前回までのＧコードで、工具径や工具長まで考慮してＮＣプログラムする事は可能ですが、使用工具を変更するたびに移動座標を修正する必要があり、実用的ではありません。<br>基本的な工具経路の輪郭を定義したＮＣプログラムを利用して、補正をかける事で加工に使用できるようになります。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">工具補正指令　／　工具径・工具長</a></li><li><a href="#toc2" tabindex="0">工具径補正</a><ol><li><a href="#toc3" tabindex="0">G41/G42/G40　／　工具径補正指令</a></li><li><a href="#toc4" tabindex="0">スタートアップ・キャンセル／工具径補正</a></li></ol></li><li><a href="#toc5" tabindex="0">工具径補正番号指令</a><ol><li><a href="#toc6" tabindex="0">ファナック／工具径補正番号</a></li><li><a href="#toc7" tabindex="0">ハイデンハイン・レダース／工具径補正</a></li><li><a href="#toc8" tabindex="0">ハイデンハイン iTNC530 の工具径補正指令</a></li><li><a href="#toc9" tabindex="0"> レダース RMS6 の工具径補正指令 </a></li><li><a href="#toc10" tabindex="0">補正量をプログラムで管理する</a></li></ol></li><li><a href="#toc11" tabindex="0">まとめ</a><ol><ol><li><a href="#toc12" tabindex="0">ＮＣプログラムの記事</a></li></ol></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">工具補正指令　／　工具径・工具長</span></h2>



<p class="wp-block-paragraph">ＮＣプログラムは、既存の輪郭指令を利用して制御機側の設定で補正をかける事ができます。<br>この機能により、<span class="markerYellow">ＮＣプログラムの修正なしに、</span>使用工具や加工状況に合わせた経路で動作させる事が可能になります。<br>ただし、補正をかけるコードは、互換性があまりありません。<br>ファナック系とＯＳＰでも違いますし、<a href="https://www.kazuban.com/blog/fanuc-heidenhain-roeders/#outline__2_1">ハイデンハインやレダースでは工具管理方法の違い</a>から、補正値を設定しておく補正番号などありません。<br>まずはファナックでの説明を元に、他の制御機にも触れていこうと思います。<br>補正には、工具径補正と工具長補正があります。<br>工具径補正は工具の径方向（製品のサイズ）の調整用です。<br>工具長補正は工具の長さ（製品の深さ）の調整用です。</p>



<h2 class="wp-block-heading"><span id="toc2">工具径補正</span></h2>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/Compensation2.png" alt=""/></figure>



<p class="wp-block-paragraph">図面を描く場合と違って、加工しようとすると、工具の径を考慮する必要があります。<br>工具径が事前にわかっている場合には、上図<span style="color:white; background-color:blue;">青線</span>のように仕上がり寸法に対して、工具半径分オフセットした輪郭を定義する事で加工は可能になります。<br>ところが、<span class="markerYellow">工具径が不明な場合や加工精度が必要な場合</span>には<span class="markerPink">加工時の環境に合わせる必要</span>があります。<br>その都度データを修正していたのでは大変なので、機械コントローラ側で調整できる仕様を<strong>工具径補正</strong>といいます。<br>工具径補正ができる仕様の制御機では、基本輪郭データは適当でいいことになりますが、一般的には２種類の方法で輪郭データを作成します。<br>一つは、 工具径を考慮しない 仕上がり寸法<span style="color:blak; background-color:skyblue;">（図面通り）</span>でデータを作成する方法です。<br>この場合、加工時の補正は、<span class="markerPink">使用工具半径</span>を入力する事になります。<br>二つ目は、予定の基本工具径を考慮して、その工具半径分オフセットした形状でデータを作成する方法です。<br>この場合、<span class="markerPink">データ作成時の基本工具径と使用時の工具径の差</span>を補正として入力します。<br>ここでは、前者の方法で、図面寸法でデータを作成する方法で説明します。</p>



<h3 class="wp-block-heading"><span id="toc3">G41/G42/G40　／　工具径補正指令</span></h3>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/Compensation3.png" alt=""/></figure>



<p class="wp-block-paragraph">補正を使用する際には、<strong>工具の進行方向</strong>を考慮する必要があります。<br>加工する場合の工具をイメージして、工具の進行方向の左側に工具が来るような補正には<strong>「G41」</strong>、工具進行方向の右側に工具が来る場合には<strong>「G42」</strong>の指令を使用します。<br>「G41/G42」は指定されたブロックから、<span class="markerYellow">次のブロックを先読み</span>し移動方向（ベクトル）を認識してその方向に対して「右側・左側」へオフセットした工具経路が自動的に計算されます。<br>この工具経路のオフセットされた輪郭は<strong>「G40」</strong>コードが指令されるまで制御機により<strong>自動的</strong>に生成されます。<br>この指令により、「G41/G42」から「G40」までの工具経路は、補正として自動調整された経路となります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>「Ｇコード　グループ０７」<br>・G41　：　工具径補正左<br>・G42　：　工具径補正右<br>・G40　：　工具径補正キャンセル</p></blockquote>



<figure class="wp-block-video"><video height="652" style="aspect-ratio: 852 / 652;" width="852" controls src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/工具径補正.mp4"></video></figure>



<p class="wp-block-paragraph">では、<strong>補正量</strong>はどのようにして決定するのでしょうか？<br>これは、ファナック系とハイデンハイン・レダースでは方法が異なります。<br>ファナック系の場合は、<strong>「D」+「数字」</strong>で指令し、制御機で設定します。<br>例えば、「G01 G41 X10.0 Y20.3<strong> D01</strong>F2000」の指令では、制御機の補正設定画面の「D01」の設定箇所に設定されている数値が補正量となります。<br>ハイデンハインやレダースでは、工具管理方法が違うので、工具が呼ばれた時点で工具径を認識するようになっています。<br>したがって、<span class="markerPink">補正番号をわざわざ指定する必要はありません</span><br> 「G01 G41   X10.0 Y20.3<strong> </strong>F2000」でいいことになります。 </p>



<h3 class="wp-block-heading"><span id="toc4">スタートアップ・キャンセル／工具径補正</span></h3>



<p class="wp-block-paragraph">工具径補正は、「G41/G42」が指令されたブロックから次のブロックのベクトル（進行方向）を認識しその<span class="markerPink">ベクトルの法線方向</span>に工具補正量だけオフセットされたパス（経路）を自動生成します。<br>その時に注意が必要なのは、補正指令ブロックの直前の位置が重要です。<br>補正モードでない場合には、指令の座標位置へ移動しますが、補正モードではオフセットされた座標となりますから指令と違う座標へ移動するので思わぬ干渉が起きる場合があります</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G41_1.png" alt=""/></figure>



<p class="wp-block-paragraph">この例では、「P1 ⇒ P2 ⇒ P3 ⇒ P4  ⇒  P1」で製品の輪郭として定義してます。<br>加工に入る前に「P0」位置で工具を降し「P0 ⇒ P1」で工具径補正（G41)を指令します。<br>「P0」位置からいきなり製品輪郭へ移動させてます。<br>そうすると、 「P0 ⇒ P1」 へ移動する途中で制御機は次の動作（P1 ⇒ P2）の方向を先読みしその法線方向の座標を計算し、「P1」の座標を自動補正します。<br>これを<strong>スターアップ</strong>動作と呼びますが、<span class="markerYellow">スタート位置によっては、</span><span class="markerPink">思わぬ食込みが発生</span>する場合があります。<br>これは、「G40」を指令するキャンセルブロックでも同様で、キャンセル位置によっては食込みが発生します。<br>これをさける為には、オフセット決定する法線方向側の離れた位置をスタート位置（キャンセル位置）にするか、食込みが発生しないように、スターアップを考慮して輪郭を延長させたり、要素を追加したりします。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G41-0.png" alt=""/></figure>



<p class="wp-block-paragraph">上図でＮＣプログラムを作成してみます。</p>



<pre class="wp-block-preformatted">%
 O1000
 G17G90G00
 G00X0Y0Z50.0
 X62.0Y0           (P0)
 Z5.0
 G01Z-10.0F300
 G41D01X24.0Y25.0F500 (P1)
 X40.0Y80.0        (P2)
 X70.0Y60.0        (P3)
 X75.0Y25.0        (P4)
 X24.0Y25.0        (P1)
 G40X62.0Y0        (P0)
 M30
 %</pre>



<p class="wp-block-paragraph"><a href="http://www.trycut.com/">TRYCUT</a>と言うソフトで、シミュレーションしてみます。<br>TRYCUTの補正設定画面にも工具径補正「D01」に、使用工具の半径を設定しています。</p>



<figure class="wp-block-video"><video height="880" style="aspect-ratio: 1032 / 880;" width="1032" controls src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G41.mp4"></video></figure>



<p class="wp-block-paragraph">予想通り、「P0 ⇒ P1」のスタートアップ動作で「P1」付近で食込んでしまいました。</p>



<pre class="wp-block-preformatted"> X0Y0           (P0) </pre>



<p class="wp-block-paragraph">スタート位置を「X0Y0」に修正し、もう一度シミュレーションかけてみます。</p>



<figure class="wp-block-video"><video height="584" style="aspect-ratio: 824 / 584;" width="824" controls src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G41-2.mp4"></video></figure>



<p class="wp-block-paragraph">今度は、食込みませんでした。<br>このように、工具径補正を使用する場合には、<strong>スタートアップ（キャンセル）</strong>を意識する必要があります。<br>一般的には、<span class="markerPink">輪郭要素へ直接アプローチせず</span>に、進入円弧などを使用してスタートアップしたほうが安全です。<br>ＣＡＭによっては、補正を利用する場合、進入指令が必須なＣＡＭもあります。</p>



<pre class="wp-block-preformatted">%
 O1000
 G17G90G00
 G00X0Y0Z50.0
 X49.5Y15.0      
 Z5.0
 G01Z-10.0F300
 <strong>G41D01X59.5Y15.0F500 </strong>　<strong>(スタートアップ)</strong>　　
 <strong>G03X49.5Y25.0I-10.0  </strong> <strong> (進入円弧)</strong>
 G01X24.0Y25.0F500 
 X40.0Y80.0        
 X70.0Y60.0        
 X75.0Y25.0        
 X49.5        
<strong> G03X39.5Y15.0J-10.0 </strong>   <strong>(退出)</strong>
 <strong>G01G40X49.5Y15.0</strong>      <strong> (キャンセル)</strong>
 G00Z50.0
 M30
 %</pre>



<h2 class="wp-block-heading"><span id="toc5">工具径補正番号指令</span></h2>



<p class="wp-block-paragraph">工具径補正を利用する場合、その補正量を設定する必要がありますが、その設定方法は、コントローラによって違いがあります。<br>ここでは、もっとも一般的はファナック系とハイデンハイン、レダースでの設定方法を簡単に説明します。</p>



<h3 class="wp-block-heading"><span id="toc6">ファナック／工具径補正番号</span></h3>



<p class="wp-block-paragraph">ファナック系では、前述のように、「G41またはG42」と共に<strong>「D」+「数字」（Ｄ番号）</strong>で設定します。<br>Ｄ番号は、制御機側にＤ番号の設定テーブルが用意されていて、そこに補正量を設定しておきます。<br>工具径補正指令があった場合、その補正量を参考にオフセット経路を自動計算します。<br>このように、ファナックでは<span class="markerYellow">使用工具と工具径補正の関連性はなく、</span>Ｄ番号により管理されています。<br>これにより、ＮＣプログラムでＤ番号を変更する事で自由に補正量も変更できますが、Ｄ番号を間違えたり、設定値の入力ミスがあった場合には大変です。</p>



<h3 class="wp-block-heading"><span id="toc7">ハイデンハイン・レダース／工具径補正</span></h3>



<p class="wp-block-paragraph">ハイデンハインやレダースは、工具管理にファナックよりも複雑なデータバースを使用しています。<br>このデータベースには、いろいろな情報が含まれていますが、必須な情報として「工具の長さ」<strong>「工具直径」</strong>が含まれています。<br>使用工具に対してこの情報を持っているため、工具径補正においてもファナックのような<span class="markerPink">Ｄ番号により補正量の設定は必要ありません。</span><br>また、「工具長」や「工具径」の情報は基本的に、自動工具測定装置から自動的に設定されます。<br>国産機と違いヨーロッパでは<span class="markerYellow"> 自動工具測定装置は必須</span>の考えがあるようです。<br>また、使用工具情報を元にする事から、自動工具交換装置「ATC」付きマシン（マシニングセンター）がターゲットだと思われます。<br></p>



<h3 class="wp-block-heading"><span id="toc8">ハイデンハイン iTNC530 の工具径補正指令</span></h3>



<p class="wp-block-paragraph">ハイデンハインでは、「G41/G42」の代わりに「<strong>RL</strong>」(G41)、「<strong>RR</strong>」(G42) の指令を使用します。<br>「<strong>R0</strong>」が補正モードキャンセルです。<br>また、補正番号などはありません。<br>補正量は、呼び出した工具の<a rel="noopener" aria-label="管理テーブル (新しいタブで開く)" href="https://www.kazuban.com/bbs/heidenhain/heidenhain.cgi?mode=main&amp;no=11" target="_blank">管理テーブル</a>に情報があります。<br>工具テーブルの「R」項目に基本的には工具半径が入力されていて、制御機はその値をもとにオフセットします。<br>さらに「DR」項目で追加の補正量を設定できます。<br>さらに、工具を呼び出すコマンド「TOOL CALL」行に「DR」で直接数値を追加できます。<br>補正量＝「D : Tool table」+「DR : Tool Table」+「DR : Tool Call」となりTool Table からだけでなく、工具交換指令のNCプログラムからでも調整できます。<br>上のファナックのＧコードを、ハイデン言語で表してみます。</p>



<pre class="wp-block-preformatted">0 BEGIN PGM 1001 MM
 L X+0 Y+0 R0 FMAX
 L Z+50 R0 FMAX
 L X+49.5 Y+15 R0 FMAX
 L Z+5 FMAX
 L Z-10 F300
 <strong>L X+59.5 RL F500</strong>
 CC X+49.5 Y+15
 C X+49.5 Y+25.0 DR+
 L X+24 Y+25
 L X+40 Y+80
 L X+70 Y+60
 L X+75 Y+25
 L X+49.5
 CC X+49.5 Y+15
 C X+39.5 Y+15.0 DR+ F1000
 <strong>L X+49.5 Y+15 R0</strong>
 L Z+50 FMAX
 END PGM 1001 MM</pre>



<p class="wp-block-paragraph">ハイデンハインでは、直線補間は「L」で指令しますので、G言語に対してL言語と呼ばれることもあります。</p>



<h3 class="wp-block-heading"><span id="toc9"> レダース RMS6 の工具径補正指令 </span></h3>



<p class="wp-block-paragraph">レダース言語の、プログラム構文は上の二つとは全く違います。<br>ＮＣプログラムと言うよりは、プログラミング言語の「VB」や「JavaScript」に似ているように思います。<br>ただ、工具経路を指令する移動の指令は、<span class="markerBlue">ファナックのＧコードとハイデンハインのＬ言語の両方</span>を理解できます。<br>したがって、座標系や工具交換、などの準備機能をレダース言語で指令すれば、加工の工具移動指令は、ファナックかハイデンハインのコードを若干編集する程度で使用できます。<br>下記では上のファナックのＧコードを、レダースが動作する言語で表してみます。 </p>



<pre class="wp-block-preformatted"> G17 G90 G00
 SH
 CCI
 G00 X49.5 Y15.
 Z50.
 Z5.
 G01 Z-10. F300.
<strong> G41 X59.5 F500.</strong>
 G03 X49.5 Y25. I-10.
 G01 X24.
 X40. Y80.
 X70. Y60.
 X75. Y25.
 X49.5
 G03 X39.5 Y15. J-10. F1000.
 <strong>G01 G40 X49.5</strong>
 G00 Z50.
 SH
 CCA
 M30</pre>



<p class="wp-block-paragraph">このように、ほとんどファナックと同様のコードが使用可能です。<br>これが、ハイデンハイン言語も同様に使用可なのは驚きです。<br>ただファナックと違うのは、<span class="markerPink">工具径補正番号がありません</span>ね。<br>こちらも。ハイデンハインと同様に工具管理データベースに工具径も登録されていて、補正は使用工具により自動的に設定できるためです</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/ToolType-2.png" alt=""/></figure>



<p class="wp-block-paragraph">この仕様によって、工具交換後「Tdm -auto」の指令だけで補正量は決定されます。<br>補正量は、「G41/G42」指令により自動的に工具半径分がオフセットされます。<br>また、「G41 -R=0.02」のように、工具半径に補正量を追加することもできますし、工具半径が不明な場合には、その値が直接使用されます。<br>さらに、「SET_OFFSET_R」という指令を使うと、オフセット量を直接指定できます。<br>直接「 SET_OFFSET_R =5.02 -abs」とできますし、変数も使用可能です。<br>「$DIAM_」というシステム変数で、スピンドルにある実際の工具径がわかるので、その１/２に調整量を付加することで、補正量を調整したりできます。</p>



<pre class="wp-block-preformatted">・
・
$Offset_C = ($DIAM_)/2 + 0.05
SET_OFFSET_R=$Offset_C -abs
G01 G41 X59.5 Y0.0 F1000 
・
・</pre>



<p class="wp-block-paragraph">この指令で、<span class="markerPink">実際の</span>「工具半径 + 0.05」の補正を設定できます。</p>



<h3 class="wp-block-heading"><span id="toc10">補正量をプログラムで管理する</span></h3>



<p class="wp-block-paragraph">このように、ハイデンハインやレダースの言語を見てみると、<span class="markerYellow">補正量はNCプログラムで定義する</span>のが基本的な考え方のように思います。<br>対して、ファナック系では、コントローラ側の補正画面で設定するのが一般的です。<br>後者の場合、自由度はあがりますが入力忘れや入力ミスの場合、大きな被害がでる場合が考えられます。<br>特に、NCデータ作成側と、機械操作側が違う担当者の場合には、補正番号の伝達方法は重要になりますね。<br>完全でなくても、<span class="markerPink">安全率を見込んだ補正量はNCプログラムに定義</span>しておいたほうが安心だと思います。<br>もちろん、ファナックの場合でも、システム変数を利用すれば同様の事ができます。<br>具体的には、「G10」のコードや「#11001～」や「#2201～」のシステム変数に代入することで定義できます<br>ただし、この大事な変数が制御機のバージョンやオプションによって番号が変わってしまうは、困ったもんです。</p>



<h2 class="wp-block-heading"><span id="toc11">まとめ</span></h2>



<p class="wp-block-paragraph">今回は、工具径補正の説明をしました。<br>ファナック系だけではく、ハイデンハインやレダースの指令も簡単に紹介しました。<br>一番の違いは、工具径補正番号（D番号）の有無ですね。<br>利用方法によって、いろいろな意見があると思いますが、自動化を目指そうと思うと、工具を持ってきただけで、基準の補正量が決定できる仕様が有利だと思っています。</p>



[adchord]



<h4 class="wp-block-heading"><span id="toc12">ＮＣプログラムの記事</span></h4>



<div class="pager">
  <a class="prev page-numbers" href="https://www.kazuban.com/blog/nc-gcode-02/">PREV</a>

  <a class="page-numbers" href="https://www.kazuban.com/blog/nc-gcode-01/">1</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/nc-gcode-02/">2</a>
  <!-- <a class="page-numbers" href="https://www.kazuban.com/blog/dia-compensation/">3</a> -->
  <span aria-current="page" class="page-numbers current">3</span>
  <a class="page-numbers" href="https://www.kazuban.com/blog/lenrth-compensation/">4</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/main-sub-pro/">5</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/sub-to-package/">6</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/nc-program-g91/">7</a>

  <a class="next page-numbers" href="https://www.kazuban.com/blog/lenrth-compensation/">NEXT</a>
</div>
]]></content:encoded>
					
		
		<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2019/12/工具径補正.mp4" length="218077" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G41.mp4" length="2710248" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G41-2.mp4" length="2197819" type="video/mp4" />

			</item>
		<item>
		<title>NCプログラム／プログラム構造</title>
		<link>https://www.kazuban.com/blog/nc-gcode-01/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sat, 30 Nov 2019 09:30:55 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[CAM]]></category>
		<category><![CDATA[Fanuc]]></category>
		<category><![CDATA[G-Code]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[Roeders]]></category>
		<category><![CDATA[レダース]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=1289</guid>

					<description><![CDATA[最近の投稿は、覚書きとしても残しておきたかったので、素人ながらLinux系の投稿が連続していましたが、今回は気分を変えて、今まで携わってきたＮＣ関連の記事を書こうと思います。 目次 ＮＣプログラムとは？ プログラムの構成 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">最近の投稿は、覚書きとしても残しておきたかったので、素人ながらLinux系の投稿が連続していましたが、今回は気分を変えて、今まで携わってきたＮＣ関連の記事を書こうと思います。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ＮＣプログラムとは？</a></li><li><a href="#toc2" tabindex="0"> プログラムの構成 </a><ol><li><a href="#toc3" tabindex="0">コメント文</a></li><li><a href="#toc4" tabindex="0">「%」ファナックの特殊文字</a></li><li><a href="#toc5" tabindex="0">Ｎアドレス＋数字　／　シーケンス番号</a></li><li><a href="#toc6" tabindex="0"> Ｇアドレス＋数字　／　Ｇコード </a></li><li><a href="#toc7" tabindex="0">軸＋数値　／　Ｘ，Ｙ，Ｚ、Ａ，Ｂ，Ｃ，・・</a></li><li><a href="#toc8" tabindex="0">  Mアドレス＋数字　／　Mコード  </a></li><li><a href="#toc9" tabindex="0">  Fアドレス＋数値　／　送り速度</a></li><li><a href="#toc10" tabindex="0">   Sアドレス＋数値　／　主軸回転数 </a></li><li><a href="#toc11" tabindex="0"> Ｔアドレス＋数値　／ 　工具指定</a></li></ol></li><li><a href="#toc12" tabindex="0">まとめ</a><ol><ol><li><a href="#toc13" tabindex="0">ＮＣプログラムの記事</a></li></ol></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ＮＣプログラムとは？</span></h2>



<p class="wp-block-paragraph">ＮＣ工作機械のコントローラへの指令の集まりです。<br>プログラムとありますが、ファナック系は基本的には命令コードの羅列ですね。 通常のプログラミング言語とはちょっと違います。<br>オプションでカスタムマクロという言語もありますが、分岐や条件判断機能はありますが、変数に制限が多くて一般的なプログラミング言語とは程遠いです。<br> 主要なコントローラは、「Fanuc系」「Heidenhain」「Siemens」「Roeders」などが上げられますが、 構文は全く違います。<br>　　参照（　<a href="https://www.kazuban.com/blog/fanuc-heidenhain-roeders/">ファナック vs ハイデンハイン vs レダース</a>　）<br>各コントローラの言語構文はぜんぜん違いますが、主なコントローラは基本的な工具経路を指令するGコード構文は理解できるようにはなっています。<br>ただし、まったく同一ではないので、その違いの知識は必要です。<br>日本製の工作機械の場合ほとんど「Fanuc系」ですが、その中でも工作機械メーカーによって、「Fanuc」「Meldas」「OSP」「Tosnuc」「Sodick」など、微妙な違いがあり完全な互換性はありません。<br> さらに、 <span class="markerPink">「 同じFanuc製」</span>で <span class="markerPink">「 同じ機械メーカー製」</span>であっても、コントローラの仕様やバージョンによっても一部違いがあり、同じＮＣプログラムが使用できない場合も多いのでやっかいです。<br> 数種類の機械メーカー製の工作機械を扱う場合、ユーザー側からみるとかなり面倒な仕様ですね。<br> ただし、補助機能と呼ばれる「工具交換」「冷却装置制御」「コンベア」「吸引器作動」など加工そのものではなく、加工に必要な<span class="markerYellow">補助的な部分</span>は機械に依存するので互換性は少ないです。<br> <span class="markerYellow">対して機械に依存しない加工経路を指令する基本的なＧコード部分は大きな違いはありません。</span><br> まずは、基本的で一番重要な、工具の動きを制御する部分のＧコードを理解しましょう。<br> 海外機も含めFanuc以外のコントローラでも動作させられる可能性が増えます。 </p>



<h2 class="wp-block-heading"><span id="toc2"> プログラムの構成 </span></h2>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="262" src="https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-1024x262.png" alt="" class="wp-image-1338" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-1024x262.png 1024w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-300x77.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-768x197.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1.png 1385w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">通常コントローラはＮＣプログラムを１行づつ実行していきます。<br>その一行を<strong>「ブロック」</strong>と呼びます。<br><strong>「ブロック」</strong>は<strong>「ワード」</strong>と呼ばれる、コントローラが理解できる単語が集まったものです。<br>さらに<strong>「ワード」</strong>は、「半角英大文字」と「数字または数値」が合体したもので、「 半角英大文字 」は<strong>「アドレス」</strong>と呼ばれます。<br>「<strong>アドレス</strong>」によって「数字／数値」の部分は、どちらになるか決まります<br>移動の動作方法を指令する<strong>「ワード」</strong>は「G」アドレスが主です。<br>「補助機能」である「M」アドレスなども含めて、基本動作指令を総称してGコード（GCode）と呼ぶ場合もあります。<br> <span class="markerYellow">「数字」と「数値」の違いはなんでしょうか？</span></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p> 「数値」は量を表す値ですが「数字」は「０～９」までの単なる文字です。<br>ＮＣ的には、動作指令の一つで各<strong>「ワード」</strong>を識別するための文字といえます。<br>「<strong>ワード</strong>」の中でも、「<strong>Gアドレス</strong>」のワードは「<strong>Gコード／準備機能</strong>」と呼ばれ、この指令により次の動作方法を決める一番重要な<strong>「ワード」</strong>です。<br>「数値」の場合は、次に変化する量を指令します。<br>「数値」は、移動する先の座標（X,Y,Zなど）であったり、送り速度（F）だったり、主軸の回転数（S）だったりします。</p></blockquote>



<pre class="wp-block-preformatted">N0001     G01           　　  X10.123   Y23.567    F2000    &lt;----- ブロック
------------------------------------------------------------
整理番号  直線で移動     Ｘ軸座標    Ｙ軸座標    送り速度
</pre>



<p class="wp-block-paragraph">この例では、「N」「G」「X」「Y」「F」が「アドレス」です。<br>「G01」や「X10.123」が「ワード」。<br>全体の一行が「ブロック」となります。<br>また、「N0001」や「G01」のような、「アドレス」＋<strong>「数字」</strong>の場合<br>「数字」は値ではなく、動作の指令を識別するための<strong>文字</strong>です<br>また「01」の「0」は主なコントローラからは無意味です。<br>「G01」と「G1」は同等です。（3ＤプリンタのGCodeでは文字数が一定でないと、エラーになる場合がありました）<br>「X」「Y」「F」などは、 「アドレス」＋<strong>「数値」</strong>となります。<br>「数値」は<strong>数</strong>としての意味を持ちます。「X」「Y」は各軸の位置情報、「F」はスピード値を指令しています。 </p>



<p class="wp-block-paragraph">ファナックの資料ですが、一部資料を添付します</p>



<figure class="wp-block-image size-large"><img decoding="async" width="927" height="475" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/アドレス.png" alt="" class="wp-image-1399" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/12/アドレス.png 927w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/アドレス-300x154.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/アドレス-768x394.png 768w" sizes="(max-width: 927px) 100vw, 927px" /></figure>



<p class="wp-block-paragraph"> アドレスはこの他にもいろいろありますが、必要あれば今後追加説明しますがファナック系であればネット上にもたくさん情報はあるので検索してみてください。<br>基本的にコントローラは、この一行「ブロック」単位で、機械に指令を送り機械を動作させます。</p>



<h3 class="wp-block-heading"><span id="toc3">コメント文</span></h3>



<p class="wp-block-paragraph">コントローラ的には無意味ですが、オペレータへの情報用として、コメント文が用意されています。<br>コメント文は、コントローラにより違いがあります。<br>・ファナック系<br>　　「(」から「)」までをコメントとする。<br>　　ただし、FanucとOSPは若干違いがあり、OSPは行を跨がない<br>　　したがって、OSPでは、「(」から行末までをコメントとするが、<br>　　ファナックでは、「)」で閉じるまでコメントとして扱われる。<br>　　また、ソディックの場合には漢字が使用できて便利。<br>・ハイデンハイン<br>　「;」文字から行末までをコメントして扱う。<br>　「*」文字もコメントと扱うが、見出しの意味も持つ<br>・レダース<br>　「//」の２文字から行末までコメントとして扱う<br>　「/*」から「*/」で挟まれた文はすべてコメントとなる<br>コメント文は必須ではありませんが、うまく使用すると、プログラムが見やすくなります。</p>



<h3 class="wp-block-heading"><span id="toc4">「%」ファナックの特殊文字</span></h3>



<p class="wp-block-paragraph">ファナックの場合、ＮＣ指令の始まりと終わりを示す文字として「%」が必要になります。<br>海外製やＯＳＰの場合には、必要ありません。<br>紙テープ時代には実際の指令コードの前に、人間が読める文字をパンチする花文字と呼ばれる部分がありましたが花文字と分離するための処理だったのかもしれませんね。</p>



<h3 class="wp-block-heading"><span id="toc5">Ｎアドレス＋数字　／　シーケンス番号</span></h3>



<p class="wp-block-paragraph">「N0102」のような「ワード」となります。<br>動作的には意味を持ちませんが、プログラムを途中から始めたい場合のジャンプキーに使用したり、カスタムマクロという複雑なプログラムでジャンプ先に指定したりします。<br>番号の桁数や順番、混同も問題ありませんが、ジャンプする場合、上の行から検索されます。<br>全ての「ブロック」に連番で使用する場合もありますが、あまり意味がないので必要な箇所のみに、付加する場合が多いです。</p>



<h3 class="wp-block-heading"><span id="toc6"> Ｇアドレス＋数字　／　Ｇコード </span></h3>



<p class="wp-block-paragraph">マニュアルには「準備機能」とありますが、実際の工具移動位置を指令する前か同じ行で指令し、主に動作方法を指令します。<br>移動位置指令と共に一番基本的なコードです。<br>基本的に位置指令は、「この座標値へ行け」と指令しますが、その位置へ行くのにどのように行くのか？例えば、直線でとか右回り円弧で・・とかのイメージで指令します。<br>上にも少し触れましたが、移動指令のコードは他の制御機でも互換性を持たせている場合が多いので、基本的なコードを理解しておくと、ファナック以外の機械も動作させる事は可能です。<br>Ｇコードについては、また別のページでまとめたいと思います</p>



<h3 class="wp-block-heading"><span id="toc7">軸＋数値　／　Ｘ，Ｙ，Ｚ、Ａ，Ｂ，Ｃ，・・</span></h3>



<p class="wp-block-paragraph">「アドレス」で移動させる軸を指令し、その後に座標値を繋げます<br>軸は機械によりさまざまですが、３軸の機械の場合にはＸ，Ｙ、Ｚ軸が一般的です。５軸機械の場合、さらにＡ，Ｂ，Ｃのうちどれか２軸が回転軸として追加されます。<br>さらにワイヤカット放電加工機の場合、Ｕ，Ｖ軸でワイヤーの傾きが追加される場合もあります。<br>治具研削盤の場合、Ｕ軸を切込み軸として使う場合もあります。</p>



<h3 class="wp-block-heading"><span id="toc8">  Mアドレス＋数字　／　Mコード  </span></h3>



<p class="wp-block-paragraph">「補助機能」と呼ばれています。<br>工具を移動させる指令の前後で、機械へ補助的な動作をさせる指令です。<br>たとえは、「回転しろ」とか「冷却水を出せ」とか「コンベア起動」などを指令します。<br>このＭコードも加工に必須の指令はファナック以外の制御機でも互換性が高いコードが多いです。</p>



<h3 class="wp-block-heading"><span id="toc9">  Fアドレス＋数値　／　送り速度</span></h3>



<p class="wp-block-paragraph">機械の構成によって、テーブルが動く場合と工具（主軸）が動く場合がありますが、ＮＣプログラム的には、工具が動いた方向で考え、その時の送り速度を指示します。(Tool Motion)<br> 単位はmm/minで指定し、１分間に工具が動く距離になります。<br>「F2000」 の指令では、「一分間で2000mmで動け」の指令になります<br>ただし、実際のスピードが指令値と同じ速さで動くとは限りません。<br>機械は、動作の始まりと終わりで加減速の影響で指令値よりも遅くなります。<br>機械によって、同じＮＣデータで指令しても、加工スピードは変化します。<br>また、「F3」のように数値が一桁の場合には、  制御機によっては、一桁の数字がパラメータとして理解され、別に設定された数値で動作する場合もあります。<br>Ｆ一桁指令と呼ばれています。</p>



<h3 class="wp-block-heading"><span id="toc10">   Sアドレス＋数値　／　主軸回転数 </span></h3>



<p class="wp-block-paragraph">主軸の回転数です。<br>一分間の回転数を指令します。<br>通常、この指令は回転数を設定するのみで、「Mコード」で回転を制御します。<br>具体的には、M03で正回転（時計回り）、M04で反回転（反時計回り）で回転を実施し、M05で回転を停止します。</p>



<h3 class="wp-block-heading"><span id="toc11"> Ｔアドレス＋数値　／ 　工具指定</span></h3>



<p class="wp-block-paragraph">マシニングセンターの場合、自動で工具交換ができます。<br>「どの工具を使用するか」を「Ｔコード」で指定します。<br>ただし、この指令はファナック系と他の制御機（ハイデンハインやレダース）では若干違います。<br>ファナックでは、工具番号の指定のみですが、工具交換まで行う制御機もあります。<br>ファナック系の場合は、「T03」の指令の場合、「工具番号３の工具を準備しろ！」の指令で、実際の工具交換は行われません。<br>実際に工具交換させるには、「M06」の指令を実行させます。<br>ハイデンハインの場合は、「TOOL CALL」というコマンドを使用します。<br>「TOOL CALL 3」のみで「工具番号３」の工具を主軸に持ってきます。<br>レダースの場合には、「T3」の指令だけで「工具番号３」と交換します<br>さらに、「TT=（工具の名前）」の指令では、事前に工具に名前をつけておくと、工具番号ではなく、工具名で交換させる事もできます<br>工具交換した後の状態もファナック系とは違うのですが、詳細は後日紹介しようと思います。</p>



<h2 class="wp-block-heading"><span id="toc12">まとめ</span></h2>



<p class="wp-block-paragraph">ＮＣプログラムは、コントローラの種類によって全く違う構文となりますが工具径路を指令するＧコードは、他の制御機でもある程度互換性を持たせています。<br>「ワード」が集まった「ブロック」を一行づつ機械へ送り、動作（加工）させるための命令の集まりです。<br>次回はこの「工具経路」を指令するコード部分（Gコード）の説明しようと思います</p>



<h4 class="wp-block-heading"><span id="toc13">ＮＣプログラムの記事</span></h4>



<div class="pager">
  <!-- <a class="prev page-numbers" href="https://www.kazuban.com/blog/nc-gcode-01/">PREV</a> -->

  <!-- <a class="page-numbers" href="https://www.kazuban.com/blog/nc-gcode-01/">1</a> -->
  <span aria-current="page" class="page-numbers current">1</span>
  <a class="page-numbers" href="https://www.kazuban.com/blog/nc-gcode-02/">2</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/dia-compensation/">3</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/lenrth-compensation/">4</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/main-sub-pro/">5</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/sub-to-package/">6</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/nc-program-g91/">7</a>

  <a class="next page-numbers" href="https://www.kazuban.com/blog/nc-gcode-02/">NEXT</a>
</div>



<hr class="wp-block-separator"/>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
