<?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/custom-macro/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kazuban.com/blog</link>
	<description>なにかしら、皆さんの参考になれば幸いです！</description>
	<lastBuildDate>Mon, 04 Aug 2025 23:57:13 +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>ファナック・カスタムマクロの展開をAiにやってもらう！</title>
		<link>https://www.kazuban.com/blog/custom-macro-with-ai/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sat, 02 Aug 2025 02:50:55 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[NC]]></category>
		<category><![CDATA[カスタムマクロ]]></category>
		<category><![CDATA[CAM]]></category>
		<category><![CDATA[ファナック]]></category>
		<category><![CDATA[生成Ai]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=11441</guid>

					<description><![CDATA[最近は、CAMの充実もあって、カスタムマクロの利用もかなり減少しいていると思います。ただ、穴などの基本的な加工の場合、座標値入力だけで加工できるのでうまく使えば、かなり重宝します。マシニングセンターを、操作フライス盤的な [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>最近は、CAMの充実もあって、カスタムマクロの利用もかなり減少しいていると思います。<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><ol><li><a href="#toc2" tabindex="0">プログラミングの難易度</a></li><li><a href="#toc3" tabindex="0">デバッグの複雑さ</a></li></ol></li><li><a href="#toc4" tabindex="0">そうだ、Aiに展開してもらおう！</a><ol><li><a href="#toc5" tabindex="0">課題データ</a></li><li><a href="#toc6" tabindex="0">Aiの回答</a><ol><li><a href="#toc7" tabindex="0">プログラム全体の概要</a></li><li><a href="#toc8" tabindex="0">O1000: 主プログラム</a></li><li><a href="#toc9" tabindex="0">O6000: 面取りマクロプログラム</a></li><li><a href="#toc10" tabindex="0">O6100: 穴位置プログラム</a></li><li><a href="#toc11" tabindex="0">まとめ</a></li></ol></li><li><a href="#toc12" tabindex="0">完成</a></li><li><a href="#toc13" tabindex="0">シミュレーション</a></li></ol></li><li><a href="#toc14" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">カスタムマクロの欠点</span></h2>



<p>Google で「カスタムマクロ欠点」で検索してみると、下記のAi概要が最上部に表示されました<br>話は変わりますが、最近では通常検索でもAi回答が出てくるようになりましたね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>AI による概要</strong></p>



<p>カスタムマクロは、NCプログラムの効率化や自動化に役立つ一方で、いくつかの欠点も存在します。主な欠点としては、<mark>プログラミングの難易度、デバッグの複雑さ、互換性の問題、そして過度な依存によるリスク</mark>などが挙げられます。</p>



<p class="has-light-grey-background-color has-background"><strong>カスタムマクロの欠点</strong></p>



<ul class="wp-block-list">
<li><strong>プログラミングの難易度:</strong>カスタムマクロは、通常のNCプログラムよりも複雑なロジックを記述する必要があるため、習得に時間がかかり、プログラミングの難易度が高いです。特に、条件分岐やループ処理を多用する場合、複雑さが増し、エラーが発生しやすくなります。</li>



<li><strong>デバッグの複雑さ:</strong>カスタムマクロのデバッグは、通常のNCプログラムよりも難易度が高いです。変数の値の変化や処理の流れを追跡するのが難しく、エラーの原因特定に時間がかかることがあります。また、マクロプログラムが複雑になるほど、デバッグ作業はさらに困難になります。</li>



<li><strong>互換性の問題:</strong>カスタムマクロは、使用するNC工作機械や制御装置の種類によって、互換性の問題が発生する可能性があります。同じマクロプログラムでも、機械が異なると正しく動作しない場合や、エラーが発生する場合があります。そのため、マクロプログラムを作成する際には、互換性を考慮する必要があります。</li>



<li><strong>過度な依存によるリスク:</strong>カスタムマクロに過度に依存すると、マクロプログラムの変更や修正が必要になった場合に、他の作業に影響が出たり、生産性が低下する可能性があります。また、マクロプログラムの作成者が不在になった場合、保守や管理が困難になるというリスクもあります。</li>
</ul>



<p>その他の考慮事項</p>



<ul class="wp-block-list">
<li><strong>マクロプログラムの可読性:</strong>カスタムマクロは、可読性の高い書き方を心がける必要があります。コメントを適切に記述し、変数名や処理の流れを分かりやすくすることで、他の人がマクロプログラムを理解しやすくなります。</li>



<li><strong>マクロプログラムのバージョン管理:</strong>カスタムマクロは、バージョン管理を行うことで、変更履歴を把握し、必要に応じて以前のバージョンに戻すことができます。</li>



<li><strong>マクロプログラムのテスト:</strong>カスタムマクロは、実際に機械を動かす前に、シミュレーション環境などで十分にテストを行う必要があります。これにより、エラーの発生を未然に防ぎ、安全に運用することができます。</li>
</ul>



<p>これらの欠点や考慮事項を踏まえ、カスタムマクロの導入を検討する必要があります。</p>
</blockquote>



<p>なるほど・・<a href="https://www.kazuban.com/blog/category/nc/custom-macro/">ここのサイトでもいくつか取り上げていますが</a>、まさに同意見です。<br></p>



<h3 class="wp-block-heading"><span id="toc2"><strong>プログラミングの難易度</strong></span></h3>



<p>マクロは数多く作成してきましたが<br>機械の制御器に処理させる言語になるので、どうしても、一般的なプログラミング言語と比較すると、中途半端で可読性は悪くなってしまします。<br>ちなみに、レダース(Roeders）機は、独自開発されたプログラミング言語ライクな言語です。<br>加工動作のGコードのサブプロ部分と、その動作部分を管理するメインプロ部分を分離する事を基本で開発されているように感じています。<br>特にWindowsソフトウェアとして開発された言語なので、自動化や多数個など、複雑なメインプロを開発する場合でもかなり楽です。</p>



<h3 class="wp-block-heading"><span id="toc3"><strong>デバッグの複雑さ</strong></span></h3>



<p>このサイトでも、何度か書いていますが、一番は変数の制限が可読性を悪くしているように思います。<br>筆者は通常のGコードだけであれば、<a href="https://www.trycut.com/">TRYCUT</a> と言うシミュレーションソフトを使っていますが、TRYCUTにはマクロ展開機能が付いていません。<br>シミュレートできないので、マクロのデバッグはエディタやプリントアウトして目視で追っかけ確認ますがかなかな面倒で、リスクもあります。<br>社内設備機械で、一台だけマクロも含めたシミュレート機能がある制御器があるので、確認のためだけに、その機械を起動させる場合もあります。<br>大人しく、マクロ機能付きのシミュレータを購入したら・・・の意見もあると思いますが、マクロ利用頻度から検討すると、どうしても費用対効果の面で無理があります。</p>



<h2 class="wp-block-heading"><span id="toc4">そうだ、Aiに展開してもらおう！</span></h2>



<p>前回、Fusion python API を、Aiに教わったらすごかった・・を記事にしました</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/fusion-python-api/" title="Fusion360  Python API 再挑戦！AIの力を借りて、sketchなど基本ライブラリを作ってみた。" 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="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Fusion360  Python API 再挑戦！AIの力を借りて、sketchなど基本ライブラリを作ってみた。</div><div class="blogcard-snippet internal-blogcard-snippet">Aiと言う強い味方を得て、Fusion API に再挑戦しています。pythonの学習もかねて、skrtch関連の関数をライブラリ化しています。筆者の環境では、正常に動作しています。コピペで利用可。Aiに教えてもらわないと、作成できなかった実例をレポートしています。</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">2025.07.09</div></div></div></div></a>
</div></figure>



<p>Fusion API は、一般的なpython言語構文やライブラリだけでなく、独自のオブジェクトを絡み合わせて開発していくので、そのパッケージの理解だけでも大変です。<br>それを、Aiに聞いたら、サンプルコードを出してくれたり、自作したコードを添削してくれたりと、驚きでした。<br>そこで上の記事を書いてたら、ピ～ンときました。<br>「そうだ、Fusion APIのパッケージを瞬時に解読できるなら、カスタムマクロなら簡単に解読してくれるかも！」</p>



<h3 class="wp-block-heading"><span id="toc5">課題データ</span></h3>



<p>課題NCデータは、以前記事にした、下記ページのデータをそのまま使ってみようと思います</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/chamfering-with-g66/" title="カスタムマクロ、G66モーダル呼び出しで固定サイクルを自作してみる。" 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="114" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer01.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer01.png 878w, https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer01-300x237.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer01-768x607.png 768w" sizes="(max-width: 114px) 100vw, 114px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">カスタムマクロ、G66モーダル呼び出しで固定サイクルを自作してみる。</div><div class="blogcard-snippet internal-blogcard-snippet">前回、カスタムマクロプログラムの例として、ハイデンハインサイクルをマクロ化する例を紹介しました。ハイデンハインサイクルに比べると、ファナック固定サイクルの機能は非常に貧弱ですが、カスタムマクロを自作する事で、無限に拡張する事が可能です。今回は、カスタムマクロのモーダル呼び出し「G66」を利用して、穴...</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">2022.05.30</div></div></div></div></a>
</div></figure>



<p>穴の面取りを輪郭加工で行うマクロです。<br>メインプロ「O1000」に加工条件や面取り条件を変数で定義して、G66モーダル呼び出しで「O6000」の面取り加工マクロを呼び出し、指定位置「O6100」で面取りを行うプログラムです<br>若干変数での計算式もあります。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-ada81581cdb38d9e779798ad0caed857"><code>こちらのファナックマクロを展開してください
%
O1000
( Chamfering Program Ver1.0 By kazuban )&nbsp;
G90G00G17G40G80G49&nbsp;
(++++++++++++++++++++)&nbsp;
#1=54 (WORK ORIGIN)
#2=10 (Tool Number)
#3=#2 (H Number)
#4=0.5(Tool Diameter)
#5=2300 (Spindle Speed)
#6=200 (Feed)
#7=8 (Coolant)
#8=0.0(Surface Coordinat)
#9=50.0 (Initial Point)&nbsp;
#10=5.0 (R Point)
(++++++++++++++++++++)&nbsp;
#11=12.0 (Hole Diameter)
#12=1.0 (Chamfer)
#13=0.5 (Offset)
(++++++++++++++++++++)&nbsp;
#30=6000 (Macro program No)
#31=6100 (Position program No)
(++++++++++++++++++++)&nbsp;
N0001
G#1
T#2
M06
G90G00X0Y0&nbsp;
G43Z&#91;#8+#9]H#3
( Chamfer Process )
S#5M03&nbsp;
M#7
(----------------------------)
(B:#2=#8 : Surface Coordinat)&nbsp;
(C:#3=#9 : Initial Point)&nbsp;
(I:#4=#10 : R Point)&nbsp;
(J:#5=#12 : Chamfer)&nbsp;
(K:#6=#13 : Offset)
(D:#7=#4 : Tool Dia)
(E:#8=#11 : Hole Dia)
(F:#9=#6 : Feed)
(++++++++++++++++++++)&nbsp;
G66 P&#91;#30] B&#91;#8] C&#91;#9] I&#91;#10] J&#91;#12] K&#91;#13] D&#91;#4] E&#91;#11] F&#91;#6]
M98P&#91;#31]
G67
G90G00Z&#91;#8+#9]
M09
M05
G91G28Z0&nbsp;
G91G49Z0&nbsp;
G90M05&nbsp;
( End of Process )
M30
%
%
O6000
( Chamfering Macro Ver1.0 By kazuban )&nbsp;
(+++++++++++++++++++)
#1=&#91;#8/2-&#91;#6+#7/2]] (circle radius)
(+++++++++++++++++++)
(B:#2 : Surface Coordinat)&nbsp;
(C:#3 : Initial Point)&nbsp;
(I:#4 : R Point)&nbsp;
(J:#5 : Chamfer)&nbsp;
(K:#6 : Offset)
(D:#7 : Tool Dia)
(E:#8 : Hole Dia)
(F:#9 : Feed)
(+++++++++++++++++++)
G90G00G17
Z&#91;#2+#3]&nbsp;
Z&#91;#2+#4]&nbsp;
G01Z&#91;#2-&#91;#6+#5]]F&#91;#9]&nbsp;
G91X&#91;#1]
G03X-&#91;#1*2]I-&#91;#1]J0.&nbsp;
X&#91;#1*2]I&#91;#1]J0.
G01X-&#91;#1]&nbsp;
G90G00Z&#91;#2+#3]&nbsp;
M99
%
%
O6100
( Hole Position )
X-35.Y55.
X-50.Y55.
X10.Y10.&nbsp;
M99
%</code></pre>



<p>このデータをそのまま、「Gemini 2.5 Flash」に突っ込んで、展開をお願いしてみました。</p>



<h3 class="wp-block-heading"><span id="toc6">Aiの回答</span></h3>



<p>G66仕様で、G66への変数渡しが「#変数」そのままでないので、作者が見直す時も結構面倒ですが、Aiは瞬時に分析してくれました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>提供されたFANUCマクロプログラムを解析し、その内容を以下に解説します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><span id="toc7"><strong>プログラム全体の概要</strong></span></h4>



<p>このマクロは、複数の穴の面取り加工を自動化するために設計されています。主プログラム (<code>O1000</code>) で加工条件を設定し、マクロプログラム (<code>O6000</code>) で実際の面取り動作を実行、そしてもう一つのプログラム (<code>O6100</code>) で穴の位置情報を呼び出す、という構成になっています。</p>



<h4 class="wp-block-heading"><span id="toc8"><strong>O1000: 主プログラム</strong></span></h4>



<p>このプログラムは、加工に必要な初期設定と、マクロ呼び出しを行います。</p>



<ul class="wp-block-list">
<li><strong>初期設定:</strong>
<ul class="wp-block-list">
<li><code>#1=54 (WORK ORIGIN)</code>: ワーク原点の位置を<code>#1</code>に設定。</li>



<li><code>#2=10 (Tool Number)</code>: 工具番号を<code>#2</code>に設定。</li>



<li><code>#4=0.5(Tool Diameter)</code>: 工具径を<code>#4</code>に設定。</li>



<li><code>#5=2300 (Spindle Speed)</code>: 主軸回転速度を<code>#5</code>に設定。</li>



<li><code>#6=200 (Feed)</code>: 送り速度を<code>#6</code>に設定。</li>



<li><code>#11=12.0 (Hole Diameter)</code>: 穴の直径を<code>#11</code>に設定。</li>



<li><code>#12=1.0 (Chamfer)</code>: 面取り量を<code>#12</code>に設定。</li>



<li><code>#13=0.5 (Offset)</code>: 工具のオフセット量を<code>#13</code>に設定。</li>
</ul>
</li>



<li><strong>マクロ呼び出し:</strong>
<ul class="wp-block-list">
<li><code>G66 P[#30] ...</code>: ここで、面取りマクロプログラム<code>O6000</code>（<code>#30</code>）を呼び出しています。</li>



<li><code>B[#8] C[#9]...</code>: マクロに渡す引数を設定しています。
<ul class="wp-block-list">
<li><code>B[#8]</code>: 面取り加工の開始基準となる<strong>ワーク表面座標</strong>。</li>



<li><code>C[#9]</code>: 加工前の待機位置である<strong>初期点</strong>。</li>



<li><code>I[#10]</code>: 加工開始前の<strong>退避点（R点）</strong>。</li>



<li><code>J[#12]</code>: <strong>面取り量</strong>。</li>



<li><code>K[#13]</code>: <strong>オフセット量</strong>。</li>



<li><code>D[#4]</code>: <strong>工具径</strong>。</li>



<li><code>E[#11]</code>: <strong>穴径</strong>。</li>



<li><code>F[#6]</code>: <strong>送り速度</strong>。</li>
</ul>
</li>



<li><code>M98 P[#31]</code>: 穴の位置情報を記述したプログラム<code>O6100</code>（<code>#31</code>）を呼び出します。これにより、<code>O6100</code>に記述された各座標で、<code>G66</code>で指定されたマクロが繰り返して実行されます。</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading"><span id="toc9"><strong>O6000: 面取りマクロプログラム</strong></span></h4>



<p>このプログラムは、<code>O1000</code>から渡された情報をもとに、実際の面取り加工を行います。</p>



<ul class="wp-block-list">
<li><strong>面取り加工の半径計算:</strong>
<ul class="wp-block-list">
<li><code>#1=[#8/2-[#6+#7/2]]</code>: この式は、面取り加工を行う円弧の半径を計算しています。
<ul class="wp-block-list">
<li><code>#8/2</code>: 穴の半径。</li>



<li><code>#6</code>: 面取り量。</li>



<li><code>#7/2</code>: 工具の半径。</li>



<li><strong>結果:</strong> <strong>面取り加工する円弧の半径 = (穴の半径) &#8211; (面取り量) &#8211; (工具の半径)</strong></li>
</ul>
</li>
</ul>
</li>



<li><strong>加工シーケンス:</strong>
<ol start="1" class="wp-block-list">
<li><code>G90G00G17</code>: 絶対指令、早送り、XY平面選択。</li>



<li><code>Z[#2+#3]</code>、<code>Z[#2+#4]</code>: Z軸を初期点、R点へと移動。</li>



<li><code>G01Z[#2-[#6+#5]]F[#9]</code>: Z軸を<strong>面取り深さ</strong>まで切り込みながら移動します。</li>



<li><code><strong>G91</strong>X[#1]</code>: <span class="marker-under-red">ワーク座標を基準</span>に、計算された半径分だけX軸を移動。円弧加工の開始位置に移動します。</li>



<li><code>G03X-[#1*2]I-[#1]J0.</code>: 半径<code>#1</code>の円弧で、左回りに<strong>180度円弧切削</strong>。</li>



<li><code>X[#1*2]I[#1]J0.</code>: さらに、半径<code>#1</code>の円弧で、左回りに<strong>180度円弧切削</strong>。これにより、1周分の面取り加工が完了します。</li>



<li><code>G01X-[#1]</code>: 円弧加工の開始位置から中心に戻ります。</li>



<li><code>G90G00Z[#2+#3]</code>: Z軸を初期点に戻します。</li>



<li><code>M99</code>: マクロプログラムの終了。主プログラム（<code>O1000</code>）に戻ります。</li>
</ol>
</li>
</ul>



<h4 class="wp-block-heading"><span id="toc10"><strong>O6100: 穴位置プログラム</strong></span></h4>



<p>このプログラムは、加工する穴のXY座標をリストアップしています。</p>



<ul class="wp-block-list">
<li><code>X-35.Y55.</code>: 1つ目の穴の座標。</li>



<li><code>X-50.Y55.</code>: 2つ目の穴の座標。</li>



<li><code>X10.Y10.</code>: 3つ目の穴の座標。</li>
</ul>



<p>これらの座標は、<code>O1000</code>の<code>M98 P[#31]</code>によって順番に読み込まれ、それぞれの位置で<code>O6000</code>の面取り加工が実行されます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



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



<p>このプログラムは、以下のような処理フローで動作します。</p>



<ol start="1" class="wp-block-list">
<li>主プログラム<code>O1000</code>がスタートします。</li>



<li>工具交換、初期位置決め、主軸回転、クーラントONなど、準備が完了します。</li>



<li><code>O6100</code>に記述された最初の座標（X-35.Y55.）に移動します。</li>



<li><code>G66</code>によって<code>O6000</code>の面取りマクロが呼び出されます。</li>



<li>マクロ内で計算されたパスで、面取り加工が行われます。</li>



<li>面取り加工が完了すると、<code>O1000</code>に戻ります。</li>



<li><code>O6100</code>の次の座標（X-50.Y55.）に移動します。</li>



<li>再び<code>O6000</code>が呼び出され、面取り加工が行われます。</li>



<li>この繰り返し処理が<code>O6100</code>の最後まで行われます。</li>



<li>全ての加工が終了すると、クーラントOFF、主軸停止、安全位置への退避が行われ、プログラムが終了します。</li>
</ol>



<p>この構成は、複数の同じ形状の加工を効率的に行うための、NCプログラミングの典型的な手法です。プログラムを分割することで、位置情報や加工条件の変更が容易になります。</p>
</blockquote>



<p>丁寧な解説ですが、<strong>加工シーケンス:</strong>４．の<span class="marker-under-red">「ワーク座標を基準</span>」と言うのがちょっと間違っていますね・・<br>無料版だからでしょうか？<br>でも、きちんとGコードに展開してくれれば、問題ないですから<br>再度、一般的なGコードへの展開をお願いすると・・・</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>%<br>O1000_EXPANDED<br>( Chamfering Program Expanded Version )</p>



<p>G90 G00 G17 G40 G80 G49&nbsp;</p>



<p>( Tool and Spindle Setup )<br>T10 M06&nbsp;<br>G90 G00 X0 Y0&nbsp;<br>G43 Z[0.0+50.0] H10<br>S2300 M03&nbsp;<br>M08</p>



<p>( &#8212; Hole 1 at X-35. Y55. &#8212; )<br>G90 G00 X-35. Y55.<br>G00 Z[0.0+50.0]<br>G00 Z[0.0+5.0]<br>G01 Z[0.0-[1.0+0.5]] F200<br>G91 X[12.0/2-[1.0+0.5/2]]<br>G03 X-[[12.0/2-[1.0+0.5/2]]2] I-[12.0/2-[1.0+0.5/2]] J0. X[[12.0/2-[1.0+0.5/2]]2] I[12.0/2-[1.0+0.5/2]] J0.<br>G01 X-[12.0/2-[1.0+0.5/2]]<br>G90 G00 Z[0.0+50.0]</p>



<p>( &#8212; Hole 2 at X-50. Y55. &#8212; )<br>・<br>・<br>・以下省略</p>
</blockquote>



<p>G66呼び出しの部分も、きちんと、展開してくれました。<br>さらに、[]内で、変数を数値に置き換えた計算式で表現してくれています。<br>おそらく、[]を認識できるコントローラであれば、このまま動作すると思いますが、トライカットは動作してくれないので、再度、[]内の計算式部分を、実数値に変換をお願いしました。</p>



<h3 class="wp-block-heading"><span id="toc12">完成</span></h3>



<p>以下が完成したデータです</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-66754072bbded3ae612360f6496ca273"><code>%
O1000
( Chamfering Program Expanded Numeric Version )

G90 G00 G17 G40 G80 G49&nbsp;

( Tool and Spindle Setup )
T10 M06&nbsp;
G90 G00 X0 Y0&nbsp;
G43 Z50.0 H10
S2300 M03&nbsp;
M08

( Chamfering Path Calculation )
( Hole Diameter: 12.0 )
( Chamfer: 1.0 )
( Tool Diameter: 0.5 )
( Offset: 0.5 )
( Radius for cutting: 12.0/2 - 1.0 - 0.5/2 = 6.0 - 1.0 - 0.25 = 4.75 )
( Cutting Depth: 1.0 + 0.5 = 1.5 )

( --- Hole 1 at X-35. Y55. --- )
G90 G00 X-35. Y55.
G00 Z50.0
G00 Z5.0
G01 Z-1.5 F200
G91 X4.75
G03 X-9.5 I-4.75 J0.
X9.5 I4.75 J0.
G01 X-4.75
G90 G00 Z50.0

( --- Hole 2 at X-50. Y55. --- )
G90 G00 X-50. Y55.
G00 Z50.0
G00 Z5.0
G01 Z-1.5 F200
G91 X4.75
G03 X-9.5 I-4.75 J0.
X9.5 I4.75 J0.
G01 X-4.75
G90 G00 Z50.0

( --- Hole 3 at X10. Y10. --- )
G90 G00 X10. Y10.
G00 Z50.0
G00 Z5.0
G01 Z-1.5 F200
G91 X4.75
G03 X-9.5 I-4.75 J0.
X9.5 I4.75 J0.
G01 X-4.75
G90 G00 Z50.0

( End of Program )
M09
M05
G91 G28 Z0
G91 G49 Z0
G90 M05
M30
%
</code></pre>



<h3 class="wp-block-heading"><span id="toc13">シミュレーション</span></h3>



<p>さっそく、シミュレーションしてみましょう！</p>



<figure class="wp-block-video"><video height="852" style="aspect-ratio: 1032 / 852;" width="1032" controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/08/macro-trycut.mp4"></video></figure>



<p>正常に動作しました。</p>



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



<p>やっぱり、Aiはすごいです。<br>座標値を変数で置き換えている程度のマクロであれば、エクセルやスクリプト言語などで、比較的簡単に変換できるかもしれませんが、計算式が入ってくると格段に難易度が上がります。<br>さらに、G66などのマクロ呼出しになると、引数への変数渡しに癖があるので、PC上での目視確認においても結構面倒です。<br>以前、マクロの変換ソフトの作成も考えた事もありますが、難易度高くで止めました。<br>今回のように、Aiに展開してもらえれば、手持ちのシミュレータで動作確認できるので、かなり気軽にマクロに取り組めると思います<br>それに、今回使用したAiは、「Gemini 2.5flash」で基本無料で利用できます。<br>ちょっと、間違った回答もありましたが、Fusion API の質問も含めて、制限が出ることはなかったです。「chatGPT」無料版では、制限に引っかかりました。</p>



<p></p>
]]></content:encoded>
					
		
		<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/08/macro-trycut.mp4" length="2284942" type="video/mp4" />

			</item>
		<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 loading="lazy" 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 loading="lazy" 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-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></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 loading="lazy" 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 loading="lazy" 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/custom-macro/</link>
					<comments>https://www.kazuban.com/blog/custom-macro/#comments</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Mon, 27 Jul 2020 07:45:11 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[Fanuc]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[カスタムマクロ]]></category>
		<category><![CDATA[ファナック]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=3109</guid>

					<description><![CDATA[オプション扱いの場合もありますが、CNC制御にはNCデータを操作したり、制御機のデータを読み書きしたりできる、マクロと呼ばれているプログラム機能があります。マクロは、簡易的ですがプログラミング的な言語構造と変数を使用でき [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>オプション扱いの場合もありますが、CNC制御にはNCデータを操作したり、制御機のデータを読み書きしたりできる、マクロと呼ばれているプログラム機能があります。<br>マクロは、簡易的ですがプログラミング的な言語構造と変数を使用できるため、NCプログラムをパラメータ化して汎用的なプログラムを作成する事ができます。<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><ol><li><a href="#toc2" tabindex="0">変数</a></li><li><a href="#toc3" tabindex="0">カスタムマクロの変数</a></li><li><a href="#toc4" tabindex="0">変数への代入と使用方法</a></li><li><a href="#toc5" tabindex="0">演算</a></li></ol></li><li><a href="#toc6" tabindex="0">システム変数</a><ol><li><a href="#toc7" tabindex="0">工具補正量</a></li><li><a href="#toc8" tabindex="0">位置情報</a></li><li><a href="#toc9" tabindex="0">ワーク座標系の機械座標系からのオフセット量</a></li></ol></li><li><a href="#toc10" tabindex="0">ワーク上面をワーク座標系Z座標に登録するマクロを作成してみましょう！</a><ol><li><a href="#toc11" tabindex="0">工具長既知のマスター工具を用意する</a></li><li><a href="#toc12" tabindex="0">マスター工具先端とワーク上面（素材）を合わせる</a></li><li><a href="#toc13" tabindex="0">工具の長さを工具長補正へ登録する</a></li></ol></li><li><a href="#toc14" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ファナック・カスタムマクロ</span></h2>



<p>一例としてワーク原点や工具情報の設定など、段取り支援プログラムを作成してみようと思います。<br>カスタムマクロはプログラムの一種なので言語的規則がありますが、ここでは基本的な構造や文法など掘り下げて説明はしていません。<br>また今回の例では、変数以外の構文はそれほど使用しません。<br>変数への代入・読み込み程度で作成するので、プログラミング的な知識はそれほど必要ありません。<br>言語的トレーニングは、工作機メーカーさんのセミナーやネット上にも沢山情報があると思うので、興味ある方はそちらを参照してみてください。</p>



<h3 class="wp-block-heading"><span id="toc2">変数</span></h3>



<p>カスタムマクロに限らず、プログラム言語には「変数」という、ある期間データを記憶してく識別名があります。<br>この「変数」にデータを代入する事で、パラメータとして汎用的に使用する事ができるプログラムを作成する事ができます。<br>通常のプログラム言語では「変数」には、「数値」や「文字」などいろいろな「データ型」を代入する事ができますが、ファナックのカスタムマクロは「数値」しか代入できません。<br>このことからも、複雑なプログラムを行う言語ではなく、NCデータをパラメータ化して、汎用的なＮＣに進化させる言語だといえます。</p>



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



<p>ファナックの変数は、「#」+「数字」の形しか使用できません。<br>さらに、数字の範囲により、「ローカル変数」「コモン変数」「システム変数」と分類されています。<br>さらに、マクロ呼び出しで数値を引数で渡す場合、非常にわかりづらい仕様になっています。<br>こういった制限のため、コメントをうまくつけないと、他人のマクロや自分作でも時間がたつと、理解できないプログラムになってしまいます。<br>ＣＡＭがまだ普及していなかった時代には、その使いづらさにも負けず、マクロを駆使して穴あけやポケット加工を汎用化して生産性をあげている削り屋さんがいましたね～<br>興味あるかたは、ネットなどで検索してください。<br>便利なマクロが落っこちているかも？しれませんよん！<br>ここでは、主に「ローカル変数：#1～#33」と「システム変数：#1000以上」のみでプログラムしてみようと思います。</p>



<h3 class="wp-block-heading"><span id="toc4">変数への代入と使用方法</span></h3>



<p>代入方法は、「# 数字」=「数値」となります。</p>



<pre class="wp-block-preformatted">#1 = 100.123
#2 = -50.987
と定義する事で、#1 と　#2 に右辺のデータが記憶されます。
この変数を通常のＮＣプログラムに使用すると、通常の定数指示と同様に使用する事ができます
G01 X#1 Y#2 F2000　→　G01 X100.123 Y-50.987 F2000 と同様</pre>



<h3 class="wp-block-heading"><span id="toc5">演算</span></h3>



<p>「変数」は四則演算や三角関数など、ある程度の演算機能ももっています<br>うまくマクロで演算させる事で、マクロ内で面倒な計算をさせる事ができます。<br>例えば、主軸の回転数は、切削速度（Vc）と工具径（D）から次の計算式で求める事ができます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="230" height="212" src="https://www.kazuban.com/blog/wp-content/uploads/2020/07/Rpm.png" alt="" class="wp-image-3118"/></figure>



<p>この計算式を使い、工具径と切削速度を変数に代入する事で、主軸回転数を自動的に計算するマクロを作成してみます。</p>



<pre class="wp-block-preformatted">%
O1000
G90G00G17G40G80G49
(++++++++++++++++++++)
<strong>#1=1.   (Tool)
#2=10.3 (Dia)
#3=20.  (Vc)</strong>
(+++++++++++++++++++)
<strong>#10=[ #3 * 1000. / 3.14 / #2 ] (SP)</strong>
(+++++++++++++++++++)
G54
N0001
<strong>T#1</strong>
M06
G90G00X0Y0
G43Z100.<strong>H#1</strong>
Z50.0
<strong>S#10</strong> M03
M08
G98G83R5.0Z-20.0Q10.0F120L0
X10.0 Y0
X20.0 Y0
X30.0 Y0
G80
M09
G91G28Z0
G91G49Z0
G90M05
M30
%</pre>



<p>こんな感じですね。<br>上部の、#2,#3 の工具径と切削速度の変数を編集する事で、自動的に回転数を決定できます。<br>また、#1に工具番号を設定しますが、工具番号と工具長補正番号に一定のルール（この例題の場合では、T番号＝H番号）がある場合には、H番号も変数化できます。<br>このように、変数を利用してパラメータ化する事で、汎用的なプログラムを作成する事ができます。<br>今回は、３つの変数しか使用していませんが、変数が「#」+「数値」の形なので変数が多くなると、変数が何を示しているのかわからなくなってきます。<br>そんな意味でも変数はなるべく利用者が分かりやすいように、上部にまとめて、コメントを入れておくことをお勧めします。<br>マクロプログラムに慣れてくると、ポケット加工やヘリカル穴あけなどよく使う形状はCAMなしでも利用できるようになります。<br>具体例は、ネット上でも公開されていますので、検索してみてください。</p>



<h2 class="wp-block-heading"><span id="toc6">システム変数</span></h2>



<p><span class="markerPink">「<strong>システム変数</strong>」は、<strong>工具情報や現在位置</strong>、<strong>ワーク座標系位置</strong>など制御機の内部データが記録されている、特殊な変数</span>です。<br>この変数を操作する事で、段取り時に必要な、工具長補正値設定、ワーク座標系設定などをプログラム化する事ができます。<br>下記、手元の資料を抜粋しますが、制御機のバージョンやオプションの状況により変数番号が変わる場合があります。<br> もし、実際に使用する場合には、お使いの制御機の取説でご確認ください。</p>



<h3 class="wp-block-heading"><span id="toc7">工具補正量</span></h3>



<ul class="wp-block-list"><li>変数番号の範囲は、補正番号<br>（例）D01 : #2001　　D02 : #2002<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>工具補正メモリA<br>#2001 ～  #2200<br>#10001 ～ #10999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>工具補正メモリB：パラメータNo.6000#3=0<br>#2001 ～ #2200　：　工具補正量（摩耗）<br>#10001 ～ #10999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2201 ～ #2400　：　工具補正量（Hコード・形状）<br>#11001 ～ #11999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>工具補正メモリB：パラメータNo.6000#3=1<br>#2001 ～ #2200　：　工具補正量（形状）<br>#10001 ～ #10999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2201 ～ #2400　：　工具補正量（Hコード・摩耗）<br>#11001 ～ #11999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>工具補正メモリC：パラメータNo.6000#3=0<br>#2001 ～ #2200　：　工具補正量（Hコード・摩耗）<br>10001 ～ #10999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2201 ～ #2400　：　工具補正量（Hコード・形状）<br>#11001 ～ #11999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#12001 ～ #12999　：　工具補正量（Dコード・摩耗）<br>#13001 ～ #13999　：　工具補正量（Dコード・形状）<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>工具補正メモリC：パラメータNo.6000#3=1<br>#2001 ～ #2200　：　工具補正量（Hコード・形状）<br>10001 ～ #10999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2201 ～ #2400　：　工具補正量（Hコード・摩耗）<br>#11001 ～ #11999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2401 ～ #2600　：　工具補正量（Dコード・形状）<br>#12001 ～ #12999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2601 ～ #2800　：　工具補正量（Dコード・摩耗）<br>#13001 ～ #13999</li></ul>



<h3 class="wp-block-heading"><span id="toc8">位置情報</span></h3>



<ul class="wp-block-list"><li>変数番号の範囲は、軸番号<br>（例）X軸の現在位置：#5021　Y軸の現在位置：#5022　Z軸の現在位置：#5023<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>直前の終点位置（ワーク座標系）<br>#5001 ～ #5020<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>現在位置（機械座標系）<br>#5021 ～ #5040<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>現在位置（ワーク座標系）<br>#5041 ～ #5060</li></ul>



<h3 class="wp-block-heading"><span id="toc9">ワーク座標系の機械座標系からのオフセット量</span></h3>



<ul class="wp-block-list"><li>変数番号の範囲は、軸番号<br>（例）G54のX軸の機械座標系位置：#5221　Y軸の現在位置：#5222　Z軸の現在位置：#5223<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>G54ワーク原点オフセット量<br>#5221 ～ #5240<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>G55ワーク原点オフセット量<br>#5241 ～ #5260<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>G56ワーク原点オフセット量<br>#5261 ～ #5280<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G57ワーク原点オフセット量<br>#5281 ～ #5300<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G58ワーク原点オフセット量<br>#5301 ～ #5320<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G59ワーク原点オフセット量<br>#5321 ～ #5340<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G54.1P1　拡張ワーク原点オフセット量<br>#7001 ～ #7020<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G54.1P2　拡張ワーク原点オフセット量<br>#7021 ～ #7040<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G54.1P3 ～<br>#7041 ～ <br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li></ul>



<h2 class="wp-block-heading"><span id="toc10">ワーク上面をワーク座標系Z座標に登録するマクロを作成してみましょう！</span></h2>



<p>加工段取りで、素材（ワーク）を機械テーブルへ載せた後は、その素材の位置関係を機械へ教えてあげる必要があります。<br>最近では、座標系はワーク座標系を使用する方法が一般的だと思いますので、ワーク座標系のシステム変数を操作してみようと思います。<br>これから作成するマクロは、主軸端面が素材上面へ接触する位置を、ワーク座標系の「Z0.000」として登録するマクロを作成してみます。</p>



<h3 class="wp-block-heading"><span id="toc11">工具長既知のマスター工具を用意する</span></h3>



<p>これから作成するマクロは、すでに工具長がわかっている工具（マスター工具）を利用します。<br>必ずしも専用マスター工具を用意する必要はなく、すでに工具長が制御機の工具長補正項目に登録されている工具でOKです。<br>工具長補正値は、主軸端面からマスター工具先端までの長さがプラス値で入っている仕様だとします。<br>専用マスター工具は必須ではありませんが、基準工具として、マスター工具を用意しておいたほうが便利な場面もあるで、ATCに余裕があれば準備しておくことをお勧めします。<br>もし、工具長既知の工具がない場合、手動による、工具長補正データの登録方法を以前に説明してありますので、下記を参考にしてみてください。</p>



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

<a href="https://www.kazuban.com/blog/lenrth-compensation/" title="ＮＣプログラム／工具長補正" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2020/01/工具長2.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">ＮＣプログラム／工具長補正</div><div class="blogcard-snippet external-blogcard-snippet">前回は「工具径補正」について説明しました。これは、定義されている輪郭（工具経路）を制御機に再定義（オフセット）させる指令です。この機能により、使用工具径や加工状況に合わせて「輪郭」を再定義し直す処理が省略できます。ただし、あくまでも定義輪郭...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog/length-compensation/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.kazuban.com</div></div></div></div></a>
</div></figure>



<h3 class="wp-block-heading"><span id="toc12">マスター工具先端とワーク上面（素材）を合わせる</span></h3>



<p>まずは手動で主軸端面とワーク上面を合わせる場合を考えてみます。<br>マスター工具を主軸へ呼び出し、ワーク上面へ置いた長さ既知のゲージへ接触する直前位置まで工具をおろします。<br>強く接触させてしまうと、マスター工具が破損してしまうので、十分注意いて、ブロックゲージを動かしながら接触位置を確認してください。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="718" height="568" src="https://www.kazuban.com/blog/wp-content/uploads/2020/01/工具長１.png" alt="" class="wp-image-1634" srcset="https://www.kazuban.com/blog/wp-content/uploads/2020/01/工具長１.png 718w, https://www.kazuban.com/blog/wp-content/uploads/2020/01/工具長１-300x237.png 300w" sizes="(max-width: 718px) 100vw, 718px" /></figure>



<p>この時点での、<span class="markerPink"><strong>機械座標系</strong></span>を読み取ります。<br>主軸端面がワーク上面へ接触する位置は、現高さから<br>「ブロックゲージ高さ（50.000)」+「マスター工具長」だけ下がった位置となります。<br>「Zワーク座標」＝「現機械座標値」-「ゲージ厚」-「マスター工具長」<br>になります。<br>この値を、使用するワーク座標系Z値へ登録すればOKですが、この作業をマクロにやらせてみようと思います。<br>X、Yの原点は、すでに使用ワーク座標系に登録済みとします。</p>



<pre class="wp-block-preformatted">%
O8001(SET TO WORK Z)
(--------------------)
#1=54. (WORK COORDINATE)
#2=50. (GAUGE)
#3=29. (MASTER T-NO)
#4=29. (MASTER H-NO)
(--------------------)
#11=#0
#12=#0
#13=#0
(--------------------)
G17G00G90
T[#3]M6
G#1X0Y0
#3006=1(Z MEASURE)
M00
#11=#[11000+#4] (LENGTH OF MASTER TOOL)
#12=#5023-#2 (CURRENT_MACHINE_Z - GAUGE)
#13=[#1*20+4143] (Z OF WORK COORDINATE NUMBER)
#[#13]=#12-#11
G91G28Z0
M30
%</pre>



<p>こんな感じでしょうか？<br>一つ、#3006=1(****)という特殊な変数を使用しています。<br>これは、(****)の文字列を画面に表示して停止する変数です。<br>ここでは、画面に「Z MEASURE」を表示して停止するので、<strong>ハンドルモード</strong>でマスター工具先端を、ブロックゲージ上面に合わせる操作を促しています。<br> #11=#[11000+#4]  は、#11=<strong>#11029</strong> となりますね。<br>#11029 は上記のシステム変数リストで確認してください。<br>今回は「工具補正メモリB：パラメータNo.6000#3=1」の機械の場合を想定しています。<br>H<strong>29</strong> の補正に登録されているデータを、#11に代入するの意味となります。<br>次の、#12=#5023-#2 は、#5023が現在のZ機械座標ですから、<br>「現機械座標値」-「ゲージ厚」を#12に代入する意味となります。<br>つまり、T<strong>29</strong>（マスター工具）の先端が、ワーク上面と接触する位置となります。<br>#13=[#1×20+4143] がちょっとポイントでしょうか？<br>上記のシステム変数のリストから、ワーク座標系・G54の<strong>Z値</strong>は、<strong>#5223</strong>です。<br>G55の<strong>Z値</strong>は、<strong>#5243</strong>ですね。<br><span class="markerYellow">ワーク座標系番号が増えると、システム変数値は、<strong>20</strong> 増えています。</span><br>したがって、ワーク座標番号からシステム変数を求める方法は、<br>システム変数＝「ワーク座標系番号」× 20 + 4143 で求められますね。<br>G54の場合、#13 = 54×20+4143 = 5223　となります<br><span class="markerPink">#[#13] は、#5223 と同じ意味です。</span><br> 整理すると、<br>#11 が、マスター工具長<br>#12がマスター工具がワーク上面と接触する位置なので<br>主軸端面が、ワーク上面と接触する位置は、#12-#11　となります。<br>この値を、使用する<strong>G54のZ値：#5223</strong>へ<strong>代入</strong>する事で、G54ワーク座標系のZ値を設定できます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>実際の操作は、マスター工具に交換して停止したのち、ハンドルモードへ切換、マスター工具先端を、ブロックゲージ上面に合わせ、再度メモリモードでサイクルスタートすれば、ワーク（素材）上面の機械座標系Z値が、ワーク座標系へ登録されます。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc13">工具の長さを工具長補正へ登録する</span></h3>



<p>次に、使用する工具の長さを測定し、工具長補正番号へ登録するマクロを作成してみましょう。<br>方法の概略は</p>



<ul class="wp-block-list"><li>事前にワーク（素材）原点・上面のワーク座標系を設定しておく</li><li>長さ既知の工具（マスター工具）を使用する</li><li>測定したい工具と工具交換し、<strong>ハンドルモード</strong>で、ブロックゲージと接触するZ位置へ移動する。</li><li>その時の、Z軸機械座標位置とマスター工具の接触位置との差により、対象の工具の長さを求める</li><li>求めた長さを、工具長補正番号へ入力する</li></ul>



<p>こんな感じのマクロを作成してます。</p>



<pre class="wp-block-preformatted">%
O8002(MEASURE TOOL LENGTH)
(--------------------)
#1=54. (WORK COORDINATE)
#2=50. (GAUGE)
#3=1. (T-NO)
#4=1. (H-NO)
#5=29.(MASTER_TOOL_H-NUMBER)
(--------------------)
#11=#0
#12=#0
#13=#0
#14=#0
(--------------------)
#11=[#1*20+4143] (Z of work coordinate)
#12=#[#11]+#[11000+#5]+#2 (MASTER_TOOL_GAUGE_HIGHT)
G17G00G90
T[#3]
M06
G[#1]G00X0Y0
G90
#3006=1(Z MEASURE ON HANDLE_MODE)
M00
#13=#12-#5023 (Difference from MASTER-TOOL)
#14=#[11000+#5]-#13 (Length of TOOL)
#[11000+#4]=#14 (Saving Tool-Length-Offset.)
G91G28Z0
M30
%</pre>



<p>#11 で指定ワーク座標系のZ軸情報のシステム変数番号を求めます<br>#12 でワーク座標系Z値とマスター工具長とブロックゲージ高さから、マスター工具がブロックゲージへ接触する機械座標を求めます<br>対象工具と工具交換後、#3006 で機械が停止するので、ハンドルモードへ切換、ブロックゲージと接触させます。<br>#13で、その時の機械座標値とマスター工具が接触する機械座標値（#12）の差を求めます。<br>#14で、マスター工具長と対象工具長とマスター工具長の差（#13）から、対象工具長を求めています。<br>#[11000+#4]=#14　で、対象工具長補正番号へ書き込みます </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>実際の操作は、ワーク（素材）のXYZ原点のワーク座標系への登録は終了していて、マスター工具の工具長も工具長補正へ登録済みが条件となります。<br>プログラムをスタートすると、測定する工具へ工具交換後、停止します。<br>ハンドルモードへ切換、ブロックゲージ上面へ工具先端を合わせます。<br>再度、メモリモードへ戻し、サイクルスタートで、工具長補正番号へ工具長さが登録されます。</p></blockquote>



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



<p>今回は、マスター工具を利用して、ワーク（素材）Z軸のワーク座標値の設定と、任意工具の工具長補正値設定をカスタムマクロで作成してみました。<br>カスタムマクロは、マクロ呼び出し機能により、固定サイクル的な機能をユーザー側でも作成するのが、もともとの目的のような気がしていますが、<br>単純な変数を使用するだけでも、便利な場合があります。<br>例えばシステム変数を利用すれば、工具長補正だけでなく、工具径補正へもプログラムから書き込み可能ですから、<br>工具径補正を使用する場合、プログラムの最初に、デフォルトの工具径補正値を設定しておくと、機械側での入力忘れなどの対策にもなると思います。<br>また、今回説明のシステム変数を利用する事で、機械の現時点の情報をプログラム側へ取り込む事ができます。<br>そのことを利用して、さまざまな処理をさせることも可能となります。<br>その一例として、簡単なシステム変数の操作を紹介しました。<br>ただし、今回のプログラムは実機では検証しておりませんので、実際に利用する場合には十分に確認の上、自己責任で使用してください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/custom-macro/feed/</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
	</channel>
</rss>
