<?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>ハイデンハイン | じじぃの引出し</title>
	<atom:link href="https://www.kazuban.com/blog/tag/heidenhain_/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kazuban.com/blog</link>
	<description>なにかしら、皆さんの参考になれば幸いです！</description>
	<lastBuildDate>Wed, 25 Dec 2024 02:15:56 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.kazuban.com/blog/wp-content/uploads/2020/05/cropped-ICON-1-32x32.png</url>
	<title>ハイデンハイン | じじぃの引出し</title>
	<link>https://www.kazuban.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>カスタムマクロでハイデンハインサイクルを作ってみよう！</title>
		<link>https://www.kazuban.com/blog/heidenhain-from-macro/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Thu, 05 May 2022 00:57:35 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[カスタムマクロ]]></category>
		<category><![CDATA[CAM]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[ハイデンハイン]]></category>
		<category><![CDATA[ファナック]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=6570</guid>

					<description><![CDATA[最近、機械の立ち上げ作業でバタバタしていて、すっかり更新がご無沙汰しています。忘れられそうなので、５月の連休の空き時間で更新します。ネタとしては、以前から考えていたもので、ファナックカスタムマクロの使用例として、ハイデン [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>最近、機械の立ち上げ作業でバタバタしていて、すっかり更新がご無沙汰しています。<br>忘れられそうなので、５月の連休の空き時間で更新します。<br>ネタとしては、以前から考えていたもので、ファナックカスタムマクロの使用例として、ハイデンハインサイクルをマクロ化してみたいと思います。<br>ハイデンハインサイクルについては、下記で記事にしています。<br>ご興味あれば、覗いてみてください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-じじぃの引出し wp-block-embed-じじぃの引出し"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/heidenhain_cycle/" title="ハイデンハインのサイクル機能" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="95" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2021/12/Heidenhain.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2021/12/Heidenhain.png 895w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/Heidenhain-300x284.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/Heidenhain-768x726.png 768w" sizes="(max-width: 95px) 100vw, 95px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">ハイデンハインのサイクル機能</div><div class="blogcard-snippet internal-blogcard-snippet">ファナック系では、G73やG81～の固定サイクルと呼ばれている、ドリル加工用サイクルがありますがハイデンハイン制御機には、さらに高機能なサイクルが用意されています。変数で加工形状をカスタマイズできる点は、カスタムマクロに似ていす。多様なカスタムマクロが、標準で用意されているイメージです。さらに、ドリ...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.12.18</div></div></div></div></a>
</div></figure>




  <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></li><li><a href="#toc3" tabindex="0">カスタムマクロで変数化</a></li><li><a href="#toc4" tabindex="0">条件判断</a><ol><li><a href="#toc5" tabindex="0">条件分岐</a></li><li><a href="#toc6" tabindex="0">条件式</a></li></ol></li><li><a href="#toc7" tabindex="0">変数定義</a></li><li><a href="#toc8" tabindex="0">条件設定</a></li><li><a href="#toc9" tabindex="0">マクロ化</a></li><li><a href="#toc10" tabindex="0">完成</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">マクロとは？</span></h2>



<p>マクロ言語は、プログラム言語に似ていますが、単独では動作しません。<br>アプリケーションから呼び出される事で動作できます。<br>エクセルのマクロを思い浮かべると理解しやすいと思います。<br>エクセルマクロはかなり複雑な処理をプログラミングできますが、<br>結局、エクセルを起動しなければ単独では実行できません。<br>カスタムマクロも同様で単独では動作しません。<br>ファナック系制御機から呼び出される形で使用されます。</p>



<h2 class="wp-block-heading"><span id="toc2">カスタムマクロを使う利点</span></h2>



<p>マクロ言語は、変数や演算、条件判断、分岐など、基本的なプログラム機能を持っています。<br>したがって、類似形状をパラメータ化して定義できたり、単純な計算をやらせたり<br>対話的に操作させたりすることができます。<br>カスタムマクロについては、下記記事で少し書いてあるので、参考にしてください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-じじぃの引出し wp-block-embed-じじぃの引出し"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/custom-macro/" title="カスタムマクロで段取り支援" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="152" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2020/07/Image.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2020/07/Image.png 1283w, https://www.kazuban.com/blog/wp-content/uploads/2020/07/Image-300x177.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2020/07/Image-1024x605.png 1024w, https://www.kazuban.com/blog/wp-content/uploads/2020/07/Image-768x454.png 768w" sizes="(max-width: 152px) 100vw, 152px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">カスタムマクロで段取り支援</div><div class="blogcard-snippet internal-blogcard-snippet">オプション扱いの場合もありますが、CNC制御にはNCデータを操作したり、制御機のデータを読み書きしたりできる、マクロと呼ばれているプログラム機能があります。マクロは、簡易的ですがプログラミング的な言語構造と変数を使用できるため、NCプログラムをパラメータ化して汎用的なプログラムを作成する事ができます...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.07.27</div></div></div></div></a>
</div></figure>



<p><br>ハイデンハインのサイクルも、変数を変更するだけで、穴やポケットの加工が可能になっています。<br>ファナックの固定サイクルに比べるとはるかに豊富で単純な形状であればCAMなしで切削加工も可能です。<br>ファナックでもカスタムマクロを駆使すれば、同様のサイクルを作成する事が可能です。<br>今回は、マクロ作成の一例として、ハイデンハインのドリルサイクルを作ってみようと思います。<br>では、一番基本的な、「サイクル２００」を見てみましょう。<br>ハイデンハインの変数は、「Q」+「数値」で設定します。</p>



<div class="wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile" style="grid-template-columns:auto 42%"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="744" height="579" src="https://www.kazuban.com/blog/wp-content/uploads/2022/05/CYC200.png" alt="" class="wp-image-6577 size-full" srcset="https://www.kazuban.com/blog/wp-content/uploads/2022/05/CYC200.png 744w, https://www.kazuban.com/blog/wp-content/uploads/2022/05/CYC200-300x233.png 300w" sizes="(max-width: 744px) 100vw, 744px" /></figure><div class="wp-block-media-text__content">
<p>CYCL DEF 200 DRILLING<br>Q200=2 ;SAFETY CLEARANCE　<br>Q201=-15 ;DEPTH<br>Q206=250 ;FEED RATE FOR PLUNGING<br>Q202=5 ;INFEED DEPTH<br>Q210=0 ;DWELL TIME AT TOP<br>Q203=+20 ;SURFACE COORDINATE<br>Q204=100 ;2ND SAFETY CLEARANCE<br>Q211=0.1 ;DWELL TIME AT DEPTH</p>
</div></div>



<p>参考図と見比べるとだいたい、わかりますね。</p>



<ul class="wp-block-list"><li>Q200=2 ;SAFETY CLEARANCE　は、ドリル動作が始まる高さ。ファナックの「R点」</li><li>Q201=-15 ;DEPTH　は、最終加工深さ</li><li>Q206=250 ;FEED RATE FOR PLUNGING　は、加工送りスピード</li><li>Q202=5 ;INFEED DEPTH　は、一回の切込み量。ファナックでは「Q5.0」</li><li>Q210=0 ;DWELL TIME AT TOP　は、サイクルに入る前のドウェル時間みたいです。<br>固定サイクルにはない機能です</li><li>Q203=+20 ;SURFACE COORDINATE　は、穴の上面座標です。段差がある場合に有効です。</li><li>Q204=100 ;2ND SAFETY CLEARANCE　は、次の穴への移動高さ。ファナックでは「イニシャル点」</li><li>Q211=0.1 ;DWELL TIME AT DEPTH　は、穴加工底面でのドウェル。ファナックでは「G82」の機能</li></ul>



<p>ファナックの、G81、G82、G83　が合体したようなサイクルですね。<br>基本的には、G83に近いですが、Q201とQ202を同じ値にすれば、G81になりますし、<br>Q211を設定すればG82です。<br>ただし、G82の場合注意が必要です。<br>ハイデンハインでは「秒」で指定しますが、「G82」は一般的には「ミリ秒」単位です。<br>小数点指示も受け付ける機種もあると思いますが、今回は「ミリ秒」指示で小数点なしにしたいのですが変数を演算させた場合どうなるのか？<br>わかりません、実機での確認が必要です。<br>したがって、ハイデンハインサイクルを移植する場合では、Q211 の値を×1000する事になります。<br>Q200（SAFETY CLEARANCE）とQ204（2ND SAFETY CLEARANCE）も<br>ファナックのR点とイニシャル点を指定する場合の基準高さが違います。<br>ハイデンハインは、Q203（SURFACE COORDINATE）が基準になりますが<br>ファナックは、ワーク座標系のZ原点が基準になります。<br>Q210は、固定サイクルにはない項目なので、固定サイクルに入る直前にドウェル指令を追加する感じでしょうか・・</p>



<h2 class="wp-block-heading"><span id="toc3">カスタムマクロで変数化</span></h2>



<p>カスタムマクロの変数は、「#」+「数値」で設定しますが、変数には数値の範囲により、<br>「ローカル変数」「コモン変数」「システム変数」など種類があるので注意が必要です。<br>今回は、#1～#33の「ローカル変数」を使用ししょうと思います。<br>また、サイクル機能以外に、ワーク座標系番号と工具番号、回転数なども追加しようと思います。</p>



<h2 class="wp-block-heading"><span id="toc4">条件判断</span></h2>



<p>ハイデンハインサイクルと固定サイクルでは、設定変数が一対一ではないので、設定値によって条件判断が必要になるので、事前に整理してみます。</p>



<ul class="wp-block-list"><li>Q204はQ200と等しいかそれ以上とする</li><li>Q204とQ200が等しい場合は、「G99」、Q204が大きい場合には、その値をイニシャル点として「G98」モード</li><li>Q202がQ201以上でQ211が「0」の場合は、「G81」</li><li>Q202がQ201以上でQ211が「0」より大きい場合は、「G82」</li><li>Q202がQ201より小さくて、Q211が「0」の場合は、「G83」</li><li>Q202がQ201より小さくて、Q211が「0」より大きい場合には、どうしよう？<br>「G81」と「G82」の二工程にするか？</li></ul>



<p>こんな感じで、条件判断させてみましょう。</p>



<h3 class="wp-block-heading"><span id="toc5">条件分岐</span></h3>



<p>条件分岐は、「IF」｛条件式｝「GOTO」｛シーケンス番号｝で｛条件式｝が「真」の場合、指定｛シーケンス番号｝へジャンプします。<br>ジャンプではなく、変数処理をさせる事もできます。<br>「IF」｛条件式｝「THEN」｛処理｝<br>この場合は、｛条件式｝が「真」の場合、変数への代入や計算をさせる事ができます。</p>



<h3 class="wp-block-heading"><span id="toc6">条件式</span></h3>



<p>条件式では、一般的な記号での比較演算子が使えないので、ちょっと取りつきにくいです。<br>下記の「EQ」「NE」「GT」「GE」「LT」「LE」の演算子を使用します</p>



<figure class="wp-block-table"><table><tbody><tr><td>EQ</td><td>＝</td><td>equal to</td><td>左辺と右辺が等しい</td></tr><tr><td>NE</td><td>≠</td><td>not equal to</td><td>左辺と右辺が等しくない</td></tr><tr><td>GT</td><td>＞</td><td>greater than</td><td>左辺が右辺より大きい</td></tr><tr><td>GE</td><td>≧</td><td>greater than or equal to</td><td>左辺が右辺以上</td></tr><tr><td>LT</td><td>＜</td><td>less than</td><td>左辺が右辺より小さい</td></tr><tr><td>LE</td><td>≦</td><td>less than or equal to</td><td>左辺が右辺以下</td></tr></tbody></table></figure>



<h2 class="wp-block-heading"><span id="toc7">変数定義</span></h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>(+++++++++++++++++++)<br>#1 = 54. (Work coordinate)<br>#2 = 1. (T Number)<br>#3 = #2 (H Number)<br>#4 = 3200. (SP)<br>(+++++++++++++++++++)<br>(CYCL DEF 200 DRILLING)<br>#10 = 7.0 (Q200 SAFETY CLEARANCE)　<br>#11 = -20.0 (Q201 DEPTH)<br>#12 = 350.0 (Q206 FEED RATE FOR PLUNGING)<br>#13 = 3.0 (Q202 INFEED DEPTH)<br>#14 = 10.0 (Q210 DWELL TIME AT TOP)<br>#15 = -2.0 (Q203 SURFACE COORDINATE)<br>#16 = 52.0 (Q204 2ND SAFETY CLEARANCE)<br>#17 = 1.0 (Q211 DWELL TIME AT DEPTH)<br>(+++++++++++++++++++)<br>#10 = #10 + #15<br>#16 = #16 + #15<br>#18 = FIX[#17*1000] ( It may be no good)<br>(+++++++++++++++++++)<br>#20 = 98. (G98 OR G99)<br>#21 = 80. (CYCLE)<br>(+++++++++++++++++++)</p></blockquote>



<p>こんな感じでしょうか？<br>ハイデンハインのQパラメータをそのまま、＃変数と置き換えました。<br>R点（#10）とイニシャル点（#16）もZ原点からの指示に変更しています。<br><span style="text-decoration: underline;">#18は「秒」を「ミリ秒」に変換していますが、この方法ではダメかもしれません。<br>記憶では、「P」に小数点で「秒指令」できる機種もありますが、<br>小数点が入るとエラーになる制御機もあったような・・・？<br>FIX 関数を使ってみましたが、これで正解なのかは？？です。<br>たぶん、#18は小数点が入ってしまいそうです。<br>演算はやめて、直接「#18=2000」などどしたほうが、いいかもしれません。</span><br>コメントは、ファナックの場合、漢字が使用できない場合が多いので、英数文字にしました<br>ソディック機は漢字が使えるのですけどね～</p>



<h2 class="wp-block-heading"><span id="toc8">条件設定</span></h2>



<p>上記で検討した、条件をマクロ化してみましょう。</p>



<p>Q204はQ200と等しいかそれ以上とする<br>IF [#16 LT #10] THEN #16=#10</p>



<p>Q204とQ200が等しい場合は、「G99」<br>IF [#16 EQ #10] THEN #20=99.<br>Q204が大きい場合には、その値をイニシャル点として「G98」<br>IF [#16 GT #10] THEN #20=98.</p>



<p>Q202がQ201以上でQ211が「0」の場合には、「G81」<br>IF [[#13 GE #11]AND[#17EQ0]] THEN #21=81.</p>



<p>Q202がQ201以上でQ211が「0」より大きい場合には、「G82」<br>IF [[#13 GE #11]AND[#17GT0]] THEN #21=82.</p>



<p>Q202がQ201より小さくて、Q211が「0」の場合は、「G83」<br>IF [[#13 GE #11]AND[#17EQ0]] THEN #21=83.</p>



<p>Q202がQ201より小さくて、Q211が「0」より大きい場合にはどうするか？<br>苦肉の策で、「8382」とし、「G83」後、「G82」もやらせましょう。<br>IF [[#13 LT #11]AND[#17GT0]] THEN #21=8382.</p>



<p>こんな感じかな？！<br>固定サイクル「G81」「G82」「G83」の切り替えは、「#21」の数値により<br>条件ジャンプさせようと思います。<br>それから、固定サイクルは、定義した行の位置座標でサイクル加工を始めてしまいます。<br>X、Y軸はモーダルなので、指定しなくてもその場所で加工します。<br>加工させないで、固定サイクルの定義のみしたい場合には、「L」の繰り返し指令を利用し<br>繰り返しなしの意味で「L0」を指令します。<br>ただし、この「L」は制御機によって「K」の場合があります。<br>ＯＫＫの制御機は「K」だったように記憶していますが、お使いの制御機に合わせてください。</p>



<h2 class="wp-block-heading"><span id="toc9">マクロ化</span></h2>



<p>%<br>O1000<br>(CYCL DEF 200 DRILLING MACRO BY Kazuban)<br>(+++++++++++++++++++)<br>#1 = 54. (Work coordinate)<br>#2 = 1. (T Number)<br>#3 = #2 (H Number)<br>#4 = 3200. (SP)<br>(+++++++++++++++++++)<br>#10 = 7.0 (Q200 SAFETY CLEARANCE)　<br>#11 = -20.0 (Q201 DEPTH)<br>#12 = 350.0 (Q206 FEED RATE FOR PLUNGING)<br>#13 = 3.0 (Q202 INFEED DEPTH)<br>#14 = 10.0 (Q210 DWELL TIME AT TOP)<br>#15 = -2.0 (Q203 SURFACE COORDINATE)<br>#16 = 52.0 (Q204 2ND SAFETY CLEARANCE)<br>#17 = 1.0 (Q211 DWELL TIME AT DEPTH)<br>(+++++++++++++++++++)<br>#10 = #10 + #15<br>#16 = #16 + #15<br>#18 = FIX[#17*1000]<br>(+++++++++++++++++++)<br>#20 = 98. (G98 OR G99)<br>#21 = 80. (CYCLE)<br>(+++++++++++++++++++)<br>IF [#16 LT #10] THEN #16=#10<br>IF [#16 EQ #10] THEN #20=99.<br>IF [#16 GT #10] THEN #20=98.<br>IF [[#13 GE #11]AND[#17EQ0]] THEN #21=81.<br>IF [[#13 GE #11]AND[#17GT0]] THEN #21=82.<br>IF [[#13 GE #11]AND[#17EQ0]] THEN #21=83.<br>IF [[#13 LT #11]AND[#17GT0]] THEN #21=8182.<br>(++++++++++++++++++++)<br>(++++++++++++++++++++)<br>G90G00G17G40G80G49<br>G#1<br>N0001<br>T#2<br>M06<br>G90G00X0Y0<br>G43Z#16H#3<br>M00<br>(Check Start Point)<br>S#4M03<br>G04X#14<br>IF [#21 EQ 81] GOTO 0001<br>IF [#21 EQ 82] GOTO 0002<br>IF [#21 EQ 83] GOTO 0003<br>IF [#21 EQ 8382] GOTO 0003<br>(++++++++++++++++++++)<br>N0001(G81)<br>G#20 G81 Z#11 R#10 F#11 L0 (L may be K.)<br>GOTO 100<br>(++++++++++++++++++++)<br>N0002(G82)<br>#21 = 82<br>G#20 G82 Z#11 R#10 P#18 F#11 L0 (L may be K.)<br>GOTO 100<br>(++++++++++++++++++++)<br>N0003(G83)<br>G#20 G83 Z#11 R#10 Q#10 F#11 L0 (L may be K.)<br>GOTO 100<br>(++++++++++++++++++++)<br>N100<br>X-40.Y15.<br>X-60.Y15.<br>X-60.Y-15.<br>X-40.Y-15.<br>G80<br>Z#16<br>IF [#21 EQ 8382] GOTO 0002<br>GOTO 9999<br>(++++++++++++++++++++)<br>N9999<br>M09<br>M05<br>G91G28Z0<br>G91G49Z0<br>G90M05<br>M30<br>%</p>



<h2 class="wp-block-heading"><span id="toc10">完成</span></h2>



<p>こんな感じで作ってみましたが、機械を触れる環境でないので、まったく検証してません。<br>もし、実際の加工で使用する場合には、十分確認をお願いします。<br>また、どなたか、検証していただければ、助かります。<br>カスタムマクロ作成の参考になれば幸いです。<br></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ハイデンハインのサイクル機能</title>
		<link>https://www.kazuban.com/blog/heidenhain_cycle/</link>
					<comments>https://www.kazuban.com/blog/heidenhain_cycle/#comments</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sat, 18 Dec 2021 00:07:17 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[カスタムマクロ]]></category>
		<category><![CDATA[CAM]]></category>
		<category><![CDATA[Fanuc]]></category>
		<category><![CDATA[Fusion360]]></category>
		<category><![CDATA[Heidenhain]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[ハイデンハイン]]></category>
		<category><![CDATA[ファナック]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[固定サイクル]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=6236</guid>

					<description><![CDATA[ファナック系では、G73やG81～の固定サイクルと呼ばれている、ドリル加工用サイクルがありますがハイデンハイン制御機には、さらに高機能なサイクルが用意されています。変数で加工形状をカスタマイズできる点は、カスタムマクロに [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>ファナック系では、G73やG81～の固定サイクルと呼ばれている、ドリル加工用サイクルがありますが<br>ハイデンハイン制御機には、さらに高機能なサイクルが用意されています。<br>変数で加工形状をカスタマイズできる点は、カスタムマクロに似ていす。<br>多様なカスタムマクロが、標準で用意されているイメージです。<br>さらに、ドリルサイクルだけでなく、ポケットや測定用のサイクルも用意されています。<br>ファナック機では標準にない追加機能は、<span class="markerYellow">機械メーカーが提供</span>している場合が多いですが、<br>そうなるとどうしてもメーカー仕様になるので<span class="markerPink">互換性はありません。</span><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-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></ol></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><ol><li><a href="#toc8" tabindex="0">サイクル定義</a></li><li><a href="#toc9" tabindex="0">加工位置</a></li><li><a href="#toc10" tabindex="0">Fusion360 で出力してみた</a></li><li><a href="#toc11" tabindex="0">M12のタップ加工をプログラム化</a></li></ol></li><li><a href="#toc12" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ユーザーマニュアル入手</span></h2>



<p><a rel="noopener" href="https://www.heidenhain.com/" target="_blank">ハイデンハインのサイト</a>では、コントローラのマニュアルがダウンロードできます。</p>



<figure class="wp-block-image size-large is-resized"><a rel="noopener" href="https://www.heidenhain.com/" target="_blank"><img loading="lazy" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2021/12/image-1024x279.png" alt="" class="wp-image-6240" width="620" height="168" srcset="https://www.kazuban.com/blog/wp-content/uploads/2021/12/image-1024x279.png 1024w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/image-300x82.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/image-768x209.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/image.png 1197w" sizes="(max-width: 620px) 100vw, 620px" /></a></figure>



<p>ホームページから、「Service&amp;Support」⇒ 「Downloads」⇒ 「Documentation」と進み<br>下へスクロールして、右側の「Categories」で「CNC Controls」で各言語に対応したマニュアルがダウンロードできます。<br>ただ残念ながら、日本語はないみたいです。<br>私は、<a rel="noopener" href="https://product.heidenhain.de/JPBC/image/FILEBASE_PUBLIC/533_190-22.pdf" target="_blank">こちらをダウンロードしました。</a></p>



<h2 class="wp-block-heading"><span id="toc2">ドリル・タップサイクル</span></h2>



<p>ドリルやタップ用のサイクルは、ダウンロードしたマニュアルでは、<br>８．３項目、ページ３３１～　に説明があります。<br>英語ですが、単語とアイコンでだいたいわかると思います</p>



<ul class="wp-block-list"><li>240 CENTERING _______________________________Page 333</li><li>200 DRILLING _________________________________Page 335</li><li>201 REAMING _________________________________Page 337</li><li>202 BORING ___________________________________Page 339</li><li>203 UNIVERSAL DRILLING _____________________Page 341</li><li>204 BACK BORING _____________________________Page 343</li><li>205 UNIVERSAL PECKING ______________________Page 346</li><li>208 BORE MILLING _____________________________Page 349</li><li>206 TAPPING NEW _____________________________Page 351</li><li>207 RIGID TAPPING NEW ______________________Page 353</li><li>209 TAPPING W/ CHIP BRKG __________________Page 355</li><li>262 THREAD MILLING _________________________Page 359</li><li>263 THREAD MLLNG/CNTSNKG _______________Page 361</li><li>264 THREAD DRILLING/MLLNG _______________Page 365</li><li>265 HEL.THREAD DRLG/MLG __________________Page 369</li><li>267 OUTSIDE THREAD MLLNG ________________Page369</li></ul>



<p>ファナックの固定サイクルに比べるとかなり豊富なのがわかると思います。</p>



<h3 class="wp-block-heading"><span id="toc3">スレッドミル<br> </span></h3>



<p>ねじ切りサイクル。<br>国内では、OSGのプラネットカッターが有名です。<br>加工時間は増加しますが、破損時のリスク軽減や高硬度材へのネジ加工には有効だと思います。<br>特に、超硬材へのネジ加工を切削で行うには、現在ではこの方法しかないように思います！<br>では、NCプログラムはどうやって作成するでしょう。<br>国内機の場合、CAMが対応している場合にはその機能を利用したり、工具メーカーが公開している<br>支援ソフトなどを利用したり、ユーザー側でカスタムマクロを作成したりだと思いますが、ハイデンハインには、ねじ切りサイクルがすでに準備されています。</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2021/12/threwadmill.png" alt="" class="wp-image-6257" width="526" height="210" srcset="https://www.kazuban.com/blog/wp-content/uploads/2021/12/threwadmill.png 592w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/threwadmill-300x120.png 300w" sizes="(max-width: 526px) 100vw, 526px" /></figure>



<p>Cycle 262、Page 359 ～に説明があります。<br>サイクルの使用方法は、後ほど説明しますが、「Q」で始まる指令は変数で、Qパラメータと呼ばれています。<br>ファナックの「#」と同様です。<br>この例では、「Q355」で工具の種類、「Q239」でネジピッチ、「Q201」でネジ深さ、<br>「Q200」でＲ点位置などが、この図で分かりますね。<br>これらの変数を設定する事で、ねじ切りを行うことができます。</p>



<h2 class="wp-block-heading"><span id="toc4">ポケットサイクル</span></h2>



<p>穴加工だけではありません。<br>円や長方形、スロット形状もサイクルが用意されています。<br>ポケット用のサイクルは、ダウンロードしたマニュアルでは、<br>８．４項目、ページ３８２～　に説明があります。</p>



<ul class="wp-block-list"><li>251 RECTANGULAR POCKET ____________________Page 383</li><li>252 CIRCULAR POCKET _________________________Page 388</li><li>253 SLOT MILLING ______________________________Page 392</li><li>254 CIRCULAR SLOT ____________________________Page 397</li><li>212 POCKET FINISHING ________________________Page 402</li><li>213 STUD FINISHING __________________________Page 404</li><li>214 C. POCKET FINISHING _____________________Page 406</li><li>215 CIRCULAR STUD FINISHING _______________Page 406</li><li>210 SLOT RECIP. PLNG _________________________Page 410</li><li>211 CIRCULAR SLOT ____________________________Page 413</li></ul>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2021/12/PocketCycle.png" alt="" class="wp-image-6275" width="400" height="209" srcset="https://www.kazuban.com/blog/wp-content/uploads/2021/12/PocketCycle.png 1024w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/PocketCycle-300x157.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/PocketCycle-768x403.png 768w" sizes="(max-width: 400px) 100vw, 400px" /></figure>



<p>かなり豊富なサイクルが用意されています。<br>何種類かのサイクルを組み合わせる事で、ある程度の加工はCAMがなくてもできそうです。</p>



<h2 class="wp-block-heading"><span id="toc5">補正</span></h2>



<p>サイクルからは少し外れますが、ハイデンハインは工具を<a rel="noopener" href="https://www.kazuban.com/bbs/heidenhain/heidenhain.cgi?mode=main&amp;no=11" target="_blank">「Tool Table」というテキストファイルで管理しています。</a><br>そのため、任意の<span class="markerPink">工具を交換しただけ</span>で、コントローラは工具情報を「Tool Table」から取得します。<br>内容で必須なのは、「工具長さ」「工具径」ですが、この値は手動で入力してもいいですが<br>工具自動測定仕様であれば、自動的に入力されます。<br>したがって、<span class="markerPink">工具交換しただけで、工具長補正は完成</span>し、工具径補正が必要なNCデータを実行する場合「Tool Table」の値を元に、工具径補正が行われます。<br>これは、上記で説明した、「スレッドミル」や「ポケット」サイクルにも対応されます。<br>D番号を忘れた！などのトラブルはかなり少なくなります。<br>ちょっと面白い仕様に、切込み角度の項目があります。<br>これは、指定工具が切込み可能な場合、切込み角度を設定する項目です。<br>傾斜切込みを行うサイクルを使用する場合、このデータが参照されます。<br>このように、ハイデンハインでは使用工具はどのような工具なのかを登録しておき<br>工具交換する事で、その内容が自動的に反映される仕組みです。<br><span class="markerPink">工具交換しただけでと言うところが、重要なポイント</span>で交換すれば、<br>工具長補正は完了状態なので、ワークの任意のZ点に<strong>手パ</strong>（ハンドル）で簡単に移動できます。<br>これは、タッチプローブでも同じです。</p>



<h2 class="wp-block-heading"><span id="toc6">タッチプローブサイクル</span></h2>



<p>プローブ測定用のサイクルも用意されています。<br>ただし、上記で紹介したマニュアルには、載っていませんでした。<br><a rel="noopener" href="https://product.heidenhain.de/JPBC/image/FILEBASE_PUBLIC/670_388-20.pdf" target="_blank">こちらのマニュアルにありました。</a><br>タッチプローブ機能はオプションだからかもしれません。<br>ただ、特にEUではタッチプローブは必須の考えが強いように思います。</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2021/12/Probe-e1638693336693.png" alt="" class="wp-image-6279" width="317" height="296"/></figure>



<p>これは、ワーク測定用のサイクルですが、こちらもかなり充実していますね。<br>最近ファナック機はご無沙汰なので最近の状況は分かりませんが、<br>私が今までで立ち上げた、タッチプローブ仕様のファナック機では、<br>自動ワーク座標系設定やワーク測定は、機械メーカーのサービスマンが提供してくれた<br>マクロプログラムを使用する方法で教わりました。<br>ただどのメーカーも、単純にタッチした底面のワーク原点からの深さを表示するマクロがありませんでした。<br>例えば、ポケットの掘り込み加工後には、底面にタッチして、その深さを測定したくなります。<br>提供していただいたマクロの中には、２点を測定してその段差を出すマクロはありましたが、<br>やはり加工中では単純にタッチしただけで深さが知りたいですね。<br>これは、<span class="markerYellow">タッチプローブには、工具長の概念があまりない</span>のも要因のように思います。<br>しょうがないので、カスタムマクロで自作しましたが、ハイデンハインには上記のような<br>豊富なサイクルが用意されています。<br>サイクルを使うと、加工後自動測定するプログラムも比較的簡単に作成可能ですし<br>制御機提供のサイクルなので、おそらく、違うメーカーの機械や<br>違うメーカーの測定器であっても、同じプログラムで測定できると思います。</p>



<h2 class="wp-block-heading"><span id="toc7">プログラム例</span></h2>



<h3 class="wp-block-heading"><span id="toc8">サイクル定義</span></h3>



<p>サイクルを利用するには、まず「CYCLE DEF サイクル番号」でサイクルの種類を指定し、<br>Qパラメータで条件を設定します。<br>「;」の右側はコメントになります。<br>また行末の「~」は次の行と連続している意味です。<br>先頭の「18」は行番号ですが、すべてが「18行」の一行です。<br>見やすくするための仕様ではないかと思っています。<br>マニュアルではコメントが英語ですがだいたい理解できると思います。</p>



<pre class="wp-block-preformatted has-medium-font-size"><strong>18 CYCL DEF 200 DRILLING ~
   Q200=+5 ;SET-UP CLEARANCE ~
   Q201=-19 ;DEPTH ~
   Q206=400 ;FEED RATE FOR PLUNGING ~
   Q202=+19 ;PLUNGING DEPTH ~
   Q210=0 ;DWELL AT TOP ~
   Q203=+0 ;SURFACE COORDINATE ~
   Q204=+50 ;2ND SET-UP CLEARANCE ~
   Q211=0 ;DWELL AT BOTTOM</strong></pre>



<p>この例は、ドリルサイクルですが、ファナックの「G82」と「G83」が合体したようなサイクルです。</p>



<h3 class="wp-block-heading"><span id="toc9">加工位置</span></h3>



<p>サイクルへは、「CYCL CALL POS」「M99」「 CYCL CALL PAT」の３種類の方法で加工位置を指定します<br>サイクルは、最後に定義されたものが、「CYCL CALL」により呼び出されます。<br>「CYCL CALL POS」で加工位置を定義します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>12 <strong>CYCL CALL POS X+30 Y+20 Z+0</strong> FMAX M3<br>13 <strong>CYCL CALL POS X+80 Y+50 Z+0</strong> FMAX</p></blockquote>



<p>「M99」指令により、移動指令で移動した位置でサイクルを実行する事もできます</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>12 L X+30 Y+20 FMAX M3<br>13 CYCL CALL<br>14 L X+80 Y+50 FMAX<strong> M99</strong><br>15 L Z+100 FMAX M2</p></blockquote>



<p>「FMAX」は「早送り」の意味です。<br> 「 CYCL CALL PAT」 は事前に、加工位置を書きだしたファイルを用意し、<br>そのファイルを指定する方法です。<br>センターとドリルのような、同じ位置に複数のサイクルを使用する場合に便利です。</p>



<pre class="wp-block-preformatted has-medium-font-size"><strong>6 TOOL CALL 1 Z S5000 
7 L Z+10 RO F5000 
8 SEL PATTERN “TAB1” 
9 CYCL DEF 200 DRILLING ~
  Q200=2 ;SET-UP CLEARANCE ~
  Q201=-2 ;DEPTH ~
  Q206=150 ;FEED RATE FOR PLNGNG ~
  Q202=2 ;PLUNGING DEPTH ~
  Q210=0 ;DWELL TIME AT TOP ~
  Q203=+0 ;SURFACE COORDINATE  ~
  Q204=10 ;2ND SET-UP CLEARANCE  ~
  Q211=0.2 ;DWELL TIME AT DEPTH ~
10 CYCL CALL PAT F5000 M3 ;　<em>Cycle call in connection with point table TAB1.PNT</em>
11 L Z+100 R0 FMAX M6
12 TOOL CALL 2 Z S5000</strong></pre>



<p>加工位置ファイル「Point Table」は、「SEL PATTERN」で指定します。<br>呼び出し元と同じディレクトリにない場合には、フルパスで指定できます</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><br>SEL PATTERN “TNC:\DIRKT5\NUST35.PNT&#8221;</p></blockquote>



<h3 class="wp-block-heading"><span id="toc10">Fusion360 で出力してみた</span></h3>



<p> Fusion360、ポストライブラリには、「Heidenhain」用ポストも用意されています。<br>プレート素材に、適当な穴を開けたモデルを用意し、CAM処理させてみました。</p>



<pre class="wp-block-preformatted has-medium-font-size"><strong>0 BEGIN PGM 1001 MM
1 BLK FORM 0.1 Z X-150 Y-100 Z-50
2 BLK FORM 0.2 X+150 Y+100 Z+0
3 ;-------------------------------------
4 ;Tools
5 ; #92 D=20 - ZMIN=-51 - ZMAX=+50 - drill
6 ;-------------------------------------
7 ;
8 M5
9 TOOL CALL 92 Z S1590
10 L M140 MB MAX
11 M3
12 L X-110 Y-70 R0 FMAX
13 L Z+50 R0 FMAX
14 M7
15 CYCL DEF 32.0 TOLERANCE
16 CYCL DEF 32.1
17 CYCL DEF 200 DRILLING ~
   Q200=+5 ;SET-UP CLEARANCE ~
   Q201=-51 ;DEPTH ~
   Q206=160 ;FEED RATE FOR PLUNGING ~
   Q202=+20 ;INFEED DEPTH ~
   Q210=0 ;DWELL AT TOP ~
   Q203=+0 ;SURFACE COORDINATE ~
   Q204=+50 ;2ND SET-UP CLEARANCE ~
   Q211=0 ;DWELL AT BOTTOM
18 L FMAX M99
19 L Y+70 FMAX M99
20 L X+110 FMAX M99
21 L Y-70 FMAX M99
22 L Z+50 FMAX
23 M9
24 M5
25 L M140 MB MAX
26 M30
27 END PGM 1001 MM</strong></pre>



<p>すごいですね～<br>私がハイデンハイン制御の５軸を立ち上げてた時には、穴あけデータは、<br>サイクルで出力できないCAMもあったと記憶しています。<br>深穴サイクルなど、直線補間「G01」でサイクル動作を置き換えたデータでした。<br>Fusion360のポストは、ハイデンハインサイクルの勉強にも使えそうです。</p>



<h3 class="wp-block-heading"><span id="toc11">M12のタップ加工をプログラム化</span></h3>



<p>M12のタップ加工行うＮＣプログラムをサイクルを組み合わせて作ってみました。<br>加工位置用のファイル「P1.pnt」を編集する事で、任意箇所へタップ加工ができます。<br> 「P1.pnt」 は、制御機から作成できます。<br>マニュアルの「Point Tables」を参照してください。<br>たぶん、エディタなどでテキストを作成しても、使用できると思いますが<br>最初は書式がわからないと思うので、まずは制御機で作成すればテキスト化されるので<br>そのテキストファイルを修正する方法が簡単だと思います。<br>ただし、実機に触れる環境ではないので、<span class="markerPink">検証できておりません。<br>万が一、<strong>使用する場合には、十分確認してください。</strong></span></p>



<p class="has-black-color has-light-green-cyan-background-color has-text-color has-background"><strong>もし、実証できる方がいらっしゃれば、不具合点などコメントいただければ、助かります！</strong></p>



<p>P1.PNT
</p>



<pre class="wp-block-preformatted has-normal-font-size has-medium-font-size"><strong>BEGIN P1 .pnt MM
NR    X       Y       Z 
0     +31.5   -14     +0 
1     -15     -40     +0 
2     -31.5   +14     +0 
3     +15     +40     +0 
[END]</strong></pre>



<p>M12_SKD11.h</p>



<pre class="wp-block-preformatted has-medium-font-size"><strong>0  BEGIN PGM M12_SKD11 MM 
1  BLK FORM 0.1 Z  X+0  Y+0  Z-80
2  BLK FORM 0.2  X+150  Y+25  Z+0
3  * --------------------------------
4  CYCL DEF 247 DATUM SETTING ~
    Q339=+1    ;DATUM NUMBER
5  L  A+0  C+0 F3000 M21
6  ;;;;;;;;;;;;;;;;;;;;;;
7  ;;;; CENTER ;;;;;;;;;;
8  ;;;;;;;;;;;;;;;;;;;;;;
9  Q1 = 45 ;Tool
10 Q2 = 640 ;SP
11 Q3 = 80 ;F_Feed
12 Q4 = -0.6 ;Z_Depth
13 ;;;;;;;;;;;;;;;;;;;;;;
14 ;;;; DRILL D=10.2 ;;;
15 ;;;;;;;;;;;;;;;;;;;;;;
16 Q5 = 101 ;Tool
17 Q6 = 620 ;SP
18 Q7 = 120 ;F_Feed
19 Q8 = -25 ;Z_Depth
20 Q9 = 10 ;Q_Peck
21 ;;;;;;;;;;;;;;;;;;;;;;
22 ;;;; CHAMFER ;;;;;;;;;
23 ;;;;;;;;;;;;;;;;;;;;;;
24 Q30 = 46 ;Tool
25 Q31 = 2200 ;SP
26 Q32 = 240 ;F_Feed
27 Q33 = 0.5 ;Chanfer_Length
28 Q34 = 1.5 ;Distance
29 Q35 = Q33 + Q34 ;Depth
30 Q36 = 8 ;Coolant
31 Q37 = 12 ;Hole DIA
32 ;;;;;;;;;;;;;;;;;;;;;;
33 ;;;; TAPP M12 ;;;;;;;
34 ;;;;;;;;;;;;;;;;;;;;;;
35 Q10 = 104 ;Tool
36 Q11 = 120 ;SP
37 Q12 = -10 ;Z_Depth
38 Q13 = 1.75 ;Pitch
39 Q14 = 8 ;Coolant
40 ;;;;;;;;;;;;;;;;;;;;;;
41 * --------------------------------
42 ;;;; CENTER LBL 1 ;;;;;;;;;;;;;;
43 ;;;; DRILL LBL 2 ;;;;;;;;;;;;;;
44 ;;;; C LBL 3 ;;;;;;;;;;;;;;
45 ;;;; TAPP LBL 4 ;;;;;;;;;;;;;;
46 * --------------------------------
47 FN 9: IF +1 EQU +1 GOTO LBL 1
48 * --------------------------------
49 ;;;; SET POSITION ;;;;;;;;;;;;;;;
50 LBL 11
51 SEL PATTERN "P1.pnt"
52 CYCL CALL PAT F5000
53 M5 M9
54 L M140 MB MAX
55 LBL 0
56 * --- CENTER -----------------------
57 LBL 1
58 * - CENTER
59 TOOL CALL Q1 Z SQ2
60 M9
61 CYCL DEF 200 DRILLING ~
    Q200=+5    ;SET-UP CLEARANCE ~
    Q201=+Q4   ;DEPTH ~
    Q206=+Q3   ;FEED RATE FOR PLNGNG ~
    Q202=+Q4   ;PLUNGING DEPTH ~
    Q210=+0    ;DWELL TIME AT TOP ~
    Q203=+0    ;SURFACE COORDINATE ~
    Q204=+50   ;2ND SET-UP CLEARANCE ~
    Q211=+0    ;DWELL TIME AT DEPTH
62 L M140 MB MAX
63 L  X+0  Y+0 F8000 M3
64 L  Z+50 F8000
65 M0
66 M13
67 CALL LBL 11
68 LBL 0
69 * ---DRILL ----------------------
70 LBL 2
71 TOOL CALL Q5 Z SQ6
72 M9
73 CYCL DEF 200 DRILLING ~
    Q200=+5    ;SET-UP CLEARANCE ~
    Q201=+Q8   ;DEPTH ~
    Q206=+Q7   ;FEED RATE FOR PLNGNG ~
    Q202=+Q9   ;PLUNGING DEPTH ~
    Q210=+0    ;DWELL TIME AT TOP ~
    Q203=+0    ;SURFACE COORDINATE ~
    Q204=+50   ;2ND SET-UP CLEARANCE ~
    Q211=+0    ;DWELL TIME AT DEPTH
74 L M140 MB MAX
75 L  X+0  Y+0 F8000 M3
76 L  Z+50 F8000
77 M0
78 M13
79 CALL LBL 11
80 LBL 0
81 * --- CHAMFER -------------------
82 LBL 3
83 TOOL CALL Q30 Z SQ31 DR+Q34
84 M9
85 L M140 MB MAX
86 L  X+0  Y+0 F8000
87 L  Z+50 F5000
88 CYCL DEF 208 BORE MILLING ~
    Q200=+2    ;SET-UP CLEARANCE ~
    Q201=-Q35  ;DEPTH ~
    Q206=+Q32  ;FEED RATE FOR PLNGNG ~
    Q334=+2    ;PLUNGING DEPTH ~
    Q203=+0    ;SURFACE COORDINATE ~
    Q204=+50   ;2ND SET-UP CLEARANCE ~
    Q335=+Q37  ;NOMINAL DIAMETER ~
    Q342=+Q37  ;ROUGHING DIAMETER
89 M0
90 M3 MQ36
91 CALL LBL 11
92 LBL 0
93 * --- TAPP ----------------------
94 LBL 4
95 TOOL CALL Q10 Z SQ11
96 M9
97 Q15 = Q13 * 1
98 CYCL DEF 209 TAPPING W/ CHIP BRKG ~
    Q200=+5    ;SET-UP CLEARANCE ~
    Q201=+Q12  ;DEPTH OF THREAD ~
    Q239=+Q13  ;THREAD PITCH ~
    Q203=+0    ;SURFACE COORDINATE ~
    Q204=+50   ;2ND SET-UP CLEARANCE ~
    Q257=+Q15  ;DEPTH FOR CHIP BRKNG ~
    Q256=+Q13  ;DIST FOR CHIP BRKNG ~
    Q336=+0    ;ANGLE OF SPINDLE
99 L M140 MB MAX
100 L  X+0  Y+0 F8000 M3
101 L  Z+50 F5000
102 M0
103 MQ14
104 CALL LBL 11
105 LBL 0
106 * --------------------------------
107 L M140 MB MAX
108 M2
109 END PGM M12_SKD11 MM 
</strong></pre>



<p>こんなデータをタップ径や材質ごとに用意しておくと、座標を編集するだけで<br>多種類のタップ加工簡単にができます。<br>ファナックでも、マクロを作成すれば同様のデータは作成できますが<br>制御機のサイクルだけで作成できるところが、ユーザーにとってはありがたい所だと思います</p>



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



<p>一度、ハイデンハイン機を触ると、ファナック機には戻れないと言う意見をよく聞きます。<br>工具管理方法の違いもそうですが、このようなサイクルを<span class="markerPink">制御機側が提供している点</span>は<br>重要なポイントだと思います。<br>これは、高精度輪郭精度なども同じかもしれません。<br>機械メーカーの味付けで、同じNCデータを流しても、終了時間はかなりかわりますね。<br>機械メーカーにとっては、自由度があり、差別化ができていいのかもしれませんが<br>いろんなメーカーの機械を選択したい、ユーザー側としては、データの互換性は気になります。<br></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/heidenhain_cycle/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<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><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-6" checked><label class="toc-title" for="toc-checkbox-6">目次</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>ＮＣプログラムは、既存の輪郭指令を利用して制御機側の設定で補正をかける事ができます。<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>図面を描く場合と違って、加工しようとすると、工具の径を考慮する必要があります。<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>補正を使用する際には、<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>では、<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>工具径補正は、「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>この例では、「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>上図でＮＣプログラムを作成してみます。</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><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>予想通り、「P0 ⇒ P1」のスタートアップ動作で「P1」付近で食込んでしまいました。</p>



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



<p>スタート位置を「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>今度は、食込みませんでした。<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>工具径補正を利用する場合、その補正量を設定する必要がありますが、その設定方法は、コントローラによって違いがあります。<br>ここでは、もっとも一般的はファナック系とハイデンハイン、レダースでの設定方法を簡単に説明します。</p>



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



<p>ファナック系では、前述のように、「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>ハイデンハインやレダースは、工具管理にファナックよりも複雑なデータバースを使用しています。<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>ハイデンハインでは、「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>ハイデンハインでは、直線補間は「L」で指令しますので、G言語に対してL言語と呼ばれることもあります。</p>



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



<p>レダース言語の、プログラム構文は上の二つとは全く違います。<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>このように、ほとんどファナックと同様のコードが使用可能です。<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>この仕様によって、工具交換後「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>この指令で、<span class="markerPink">実際の</span>「工具半径 + 0.05」の補正を設定できます。</p>



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



<p>このように、ハイデンハインやレダースの言語を見てみると、<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>今回は、工具径補正の説明をしました。<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プログラム／Gコード　工具経路指令</title>
		<link>https://www.kazuban.com/blog/nc-gcode-02/</link>
					<comments>https://www.kazuban.com/blog/nc-gcode-02/#comments</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sat, 07 Dec 2019 08:42:23 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[G-Code]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[ハイデンハイン]]></category>
		<category><![CDATA[ファナック]]></category>
		<category><![CDATA[レダース]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=1323</guid>

					<description><![CDATA[前回は、NCプログラムの概要を説明しました。今回は工具経路の図形を定義する指令に使用されるＧコードについて説明します。ここまで理解できれば、二次元の図形をＧコードで定義できるようになります。 目次 絶対座標系と相対座標系 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a aria-label="前回は、NCプログラムの概要を説明しました (新しいタブで開く)" href="https://www.kazuban.com/blog/nc-gcode-01/" target="_blank">前回は、NCプログラムの概要を説明しました</a>。<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-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0"> 絶対座標系と相対座標系 </a><ol><li><a href="#toc2" tabindex="0"> 絶対座標系／アブソリュート：Ｇ９０ </a></li><li><a href="#toc3" tabindex="0"> 相対座標系／インクリメンタル：Ｇ９1 </a></li></ol></li><li><a href="#toc4" tabindex="0">Ｇコードグループ</a><ol><li><a href="#toc5" tabindex="0"> モーダルとワンショット </a></li></ol></li><li><a href="#toc6" tabindex="0">移動量指令の単位と小数点</a></li><li><a href="#toc7" tabindex="0">移動指令</a><ol><li><a href="#toc8" tabindex="0">Ｇ００　／　位置決め（早送り）</a></li><li><a href="#toc9" tabindex="0"> Ｇ０１　／　直線補間 （切削送り）</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>経路指令なので、「どこへ行け！」が基本になりますが<br>「どこへ」の指令に２種類の指令方法があります。 <br>「絶対座標系：G90」と「相対座標系：G91」です。<br>ちょっと面倒くさそうな言葉ですが、重要な指令なので、一番最初に書くことにしました。<br>指令座標 位置 が同じでも、どちらの座標系かを把握していないとまったく違う位置への移動になります。<br>非常に重要な指令です。</p>



<h3 class="wp-block-heading"><span id="toc2"> <strong>絶対座標系／アブソリュート：Ｇ９０</strong> </span></h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="478" height="456" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G90.png" alt="" class="wp-image-1384" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G90.png 478w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/G90-300x286.png 300w" sizes="(max-width: 478px) 100vw, 478px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p> 工作機械のある位置を原点と決めた場合、<span class="markerPink">その原点からの距離</span>を位置座標として指令するモードです。</p><p>（例）</p><p><strong>G90</strong> X10.123 Y-50.630</p><p>事前に決められた、原点（X0,Y0)位置から、指令位置へ移動させます </p></blockquote>



<h3 class="wp-block-heading"><span id="toc3"> <strong>相対座標系／インクリメンタル：Ｇ９1</strong> </span></h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="506" height="494" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G91.png" alt="" class="wp-image-1385" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G91.png 506w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/G91-300x293.png 300w" sizes="(max-width: 506px) 100vw, 506px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>工具（主軸）の現在地からの距離を指定するモードです。</p><p>（例）</p><p><strong>G91</strong> X10.123 Y-50.630</p><p><span class="markerPink">現在位置からの相対的な位置を指定します。</span><br>原点は関係ありません。</p></blockquote>



<p>「G90」と「G91」が違うだけで、座標位置の数値は全く同じですが、ぜんぜん違う位置への指令となりますから、非常に重要なコードです。</p>



<h2 class="wp-block-heading"><span id="toc4">Ｇコードグループ</span></h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="397" height="515" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/GGroup.png" alt="" class="wp-image-1396" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/12/GGroup.png 397w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/GGroup-231x300.png 231w" sizes="(max-width: 397px) 100vw, 397px" /></figure>



<p> この表は、ファナックの資料なので、それ以外の制御機では互換性のないコードもありますのでご承知くだ い。<br>Ｇコードはいくつかのグループに分類されていて、一つのブロック（行）に同じグループのコードは一緒に使用できません。<br>逆に、違うグループであれば、同じブロック（一行）で指令する事ができます、</p>



<h3 class="wp-block-heading"><span id="toc5"> モーダルとワンショット </span></h3>



<p><span class="markerBlue">「００グループ」<strong>以外</strong></span>は、一度指令されると、同じグループのコードが指令されるまで有効にまります。<br>例えば「G90」のコードは一度指令すると、「G91」のコードが指令されるまで有効になります。<br>このようなコードを<span class="markerPink">「モーダル」</span>なコードと呼ばれています<br>対して、 <strong>「００クループ」</strong> は、そのブロック（行）のみ有効なコードで<span class="markerPink">「ワンショット」</span>なコードと呼ばれます。<br>ここで説明する予定の基本的なＧコードは、「モーダル」なコードがほとんどなので、「モーダル」のみの説明とします。</p>
</div></div>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>「Ｇコード　グループ０３」<br>・G90　：　アブソリュート<br>・G91　：　インクリメンタル</p></blockquote>



<h2 class="wp-block-heading"><span id="toc6">移動量指令の単位と小数点</span></h2>



<p>移動量を数値で指令する場合、単位は何でしょうか？<br> インチ? 　m ?　cm  ?　mm  ?   <br>まず、インチかメトリックかについては、デフォルトではメトリックが一般的です。明示的に指令するには、Ｇコード（G20:インチ　G21:メトリック）が用意されています。<br>ただし、特にインチで指令する<span class="markerYellow"> 必要がない場合</span>には、<span class="markerPink">省略可能</span>です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p> 「Ｇコード　グループ０６」<br>・G20　：　インチ<br>・G21 　：　メトリック</p></blockquote>



<p>では、メトリック指令だとして、「X100」と指令した場合、実際の移動量はどれくらいでしょうか？<br>単位は機械系の場合「mm」が一般的なので、「100mm」と考えがちですが、これは特に、<strong>ファナックの場合</strong>には<span class="markerPink">注意</span>が必要です。<br>私に知ってる限りでは、「OSP」「ハイデンハイン」「レダース」などは「100」は期待通り「100mm」と認識しました。<br>対して私が触ったファナックの中には、「100mm」「0.1mm」「0.01mm」と認識する制御機がありました。<br>この違いは、制御機のパラメータの設定の違いです。<br>パラメータ設定のある項目に数値一桁目の単位が設定されています。<br>機械納入時この値は、「0.001」に設定されている場合が多いです。<br>高精度な機械の場合には、「0.0001」の場合もあります。<br>したがって、数値一桁目が「0.001」が設定されている場合には「100」の指令では「0.1mm」しか移動しない事になります。<br>この混乱をなくすため、<strong>「小数点」</strong>をつけるようにします。<br>「X100」を「X100.」や「X100.0」と書くようにします。<br>数種類の機械や制御機を使用する場合には、<span class="markerPink"><strong>「小数点」</strong>は必ず付けるように徹底</span>する事をお勧めします。</p>



<h2 class="wp-block-heading"><span id="toc7">移動指令</span></h2>



<p>「０１グループ」に属しています。<br>・早送り移動（位置決め）<br>・直線移動（直線補間）<br>・円弧移動（円弧補間）<br>があります。</p>



<h3 class="wp-block-heading"><span id="toc8">Ｇ００　／　位置決め（早送り）</span></h3>



<p>「指定位置に、最高速度で移動しろ！」の指令ですが、<strong>ファナック系</strong>では<span class="markerYellow"> 「指定軸の最高速度」</span>の指令となる場合もあるので注意が必要です。<br>例えば、「G00 X200.0 Y80.0」と指令した場合、指令座標へ最短距離で移動するように思いますが、ファナックの多く（古い機種）は<span class="markerPink">最短距離になりません。</span><br>「各軸の最高速度」の指令なので、とりあえず、Ｘ軸、Ｙ軸の最速で移動した後残った軸が移動する動作となります。<br>もし、Ｘ軸・Ｙ軸の最高速度が同じ場合、まずは、４５°方向へ移動し、その後まだ移動が残っている軸が移動します。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="881" height="582" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G00-2.png" alt="" class="wp-image-1443" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G00-2.png 881w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/G00-2-300x198.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/G00-2-768x507.png 768w" sizes="(max-width: 881px) 100vw, 881px" /></figure>



<p>最短距離方向を期待していると、<strong>思わぬ方向へ移動し干渉</strong>する場合もあるので注意が必要です。<br>また加工物の上面よりも、<span class="markerPink">深い位置では「G00」は使用しない</span>ほうが無難です。<br>最短距離のみで干渉を回避するCAMの場合、ぶつかる事になりかねません。<br>ハイデンハインやレダースの場合には、最短距離での移動が<strong>保証</strong>されています。<br>さらに最高速度は、オーバーライドダイアルで調整可能ですが、レダースの場合には<br>「SetFMax=20000」のように、コマンドで最高速度を設定できますし<br>ハイデンハインの場合もコントローラダイアログで設定できて便利です。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="685" height="468" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/FMAX.png" alt="" class="wp-image-1446" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/12/FMAX.png 685w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/FMAX-300x205.png 300w" sizes="(max-width: 685px) 100vw, 685px" /></figure>



<h3 class="wp-block-heading"><span id="toc9"> Ｇ０１　／　直線補間 （切削送り）</span></h3>



<p>「指定位置へ、最短（直線）で指定速度で移動しろ！」です、<br>「G00」との違いは、「指定速度／F(mm/min)」を付加する必要があります。<br>例えば「G01 X50.230 Y-5.423 F1300」のような指令となります。<br>３軸同時動作可能な機械は、ＸＹＺなど同時指令可能です。<br> 「指定速度／F」 は<strong>「モーダル」</strong>なので、以前に指令した値が適応されますが一度も指令されていない状態での「G01」は、エラーがでる場合もあります。<br>また、<span class="markerYellow"> ファナックの場合でも「G00」とは違い、最短距離で移動</span>します。<br>前述のように、「G00」で干渉が懸念される場合には、高速な速度指令で「G01」を使う事で回避できます。</p>



<h3 class="wp-block-heading"><span id="toc10">Ｇ０２・Ｇ０３　／円弧補間</span></h3>



<p>円弧補間は、指令平面に対して定義するので、事前に平面の定義が必要です。<br>ただし、平面定義がない場合には、「X-Y平面」と認識されます。<br>またヘリカル補間というオプションがあります。<br>これは、平面指定軸で円弧を描きながら、別の一軸へも同時に移動します。<br>イメージ的に、螺旋のような奇跡を定義できます。<br>平面指定は「G17 : X-Y」「G18 : Z-X」「G19 : Y-Z」のＧコードで指令します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p> 「Ｇコード　グループ０２」<br>・G17　：　ＸＹ平面<br>・G18 　：　ＺＸ平面<br>・G19 　：　ＹＺ平面 </p></blockquote>



<p>円弧の場合も、「指定位置に、移動しろ！」の座標値指令は「直線補間」と同じですが、「円弧<strong>中心の座標</strong>」と「円弧の<strong>半径</strong>」も指示しないと円弧形状は定義できません。<br>その指令方法は、「ＩＪＫ」方式と「Ｒ」方式があります。 <br>ここでは、 一般的な「G17 : X-Y」 で「ＩＪＫ」方式で説明します。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="737" height="664" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G02G03-1.png" alt="" class="wp-image-1419" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/12/G02G03-1.png 737w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/G02G03-1-300x270.png 300w" sizes="(max-width: 737px) 100vw, 737px" /></figure>



<p>「Ｇ１７：ＸＹ平面」の場合、移動先位置は「Ｘ、Ｙ」で指定します。<br>次にどのように行くのか？ですが、<strong>「Ｇ０２」</strong>で<strong>「時計回り」</strong>方向。<br><strong>「Ｇ０３」</strong>は<strong>「反時計回り</strong>」方向で定義できます。<br>また、円弧の中心位置を「Ｉ」で中心のＸ座標。「Ｊ」で中心のＹ座標を定義します。<br>ファナックの場合「Ｉ」「Ｊ」の値は、始点（現在位置）からの円弧中心への<span class="markerPink">インクリメンタル値（相対値）</span>で定義します。<br>絶対座標で考えると、I = 中心のＸ 座標  &#8211; 始点のＸ座標　となります。<br>ただし、<strong>「ハイデンハインのISOコード」</strong>や<strong>「レダース」</strong>の場合、「Ｉ」「Ｊ」の場合も<strong>「相対値」</strong>でなく<span class="markerYellow"><strong>「絶対値」</strong>で定義する場合</span>があります。<br><strong>国産の場合</strong>はほとんど<strong>「相対値」</strong>ですが、<strong>海外の制御機</strong>の場合<strong>「絶対値」</strong>がデフォルトな場合もあるので注意が必要です。<br>ここでは、相対値で考えてみますが、「ＩＪ」定義の場合、円弧半径を知りたい場合、簡単に確認できません。<br>次の計算方法を覚えておくと便利です。</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/半径.png" alt="" class="wp-image-1432" width="119" height="47" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/12/半径.png 587w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/半径-300x119.png 300w" sizes="(max-width: 119px) 100vw, 119px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p> 「Ｇコード　グループ０１」<br>・G00　：　位置決め（早送り）<br>・G01 　：　直線補間（切削送り）<br>・G02 　：　円弧補間（時計回り）<br>・G03 　：　円弧補間（反時計回り）</p></blockquote>



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



<p>Ｇ９０、Ｇ９１　絶対／相対　座標系<br>Ｇ１７　　　　　ＸＹ平面指定<br>Ｇ００、Ｇ０１　直線補間<br>Ｇ０２、Ｇ０３　円弧補間<br>ここまで理解できれば、二次元図形をＮＣコード化できると思います<br>そのＮＣコードを、機械制御機に入力すれば、ＸＹ平面上で、図形通りに動作させる事ができるはずです。</p>



<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-01/">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> -->
  <span aria-current="page" class="page-numbers current">2</span>
  <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/dia-compensation/">NEXT</a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/nc-gcode-02/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
