＜ＣＡＭ１３ (version 3.3)＿マクロプログラムに係る描画チェック機能について＞

　ＣＡＭ１３は下記のマクロプログラムに対応しており、描画チェック機能を用いて動作を確認することが
できます。

１．変数に代入された値を参照して表示
　変数等で表現したマクロプログラムを、代入した値を参照または演算処理したうえ表示する機能を付加して
います。
　この機能により、描画ブロックにおける変数や条件式の状態を確認することができます。

　例えば、＃１＝５；＃２＝３；とした場合、下記（例１）、（例２）のように表示します。
（例１）＃[＃１＋＃２]＝６／３；　を　＃８＝２.０；　と表示します。　
（例２）ＩＦ[＃１ ＧＥ ＃２]ＧＯＴＯ１　を　ＩＦ[５ ＞＝ ３]ＧＯＴＯ１　と表示し、結果は真(true)
　　　　になります。

　なお、変数が『空』の場合は、条件式の比較演算子が『ＥＱ』または『ＮＥ』の場合においてのみエラーと
ならず、当該変数部を『空』と表示します。それ以外の比較演算子を用いた場合は『比較演算子の誤り』とい
うエラーメッセージを表示し、条件式以外で『空』の変数を参照した場合は『変数に代入なし『空』を参照』
というエラーメッセージを表示します。
　条件式で比較する値がいずれも『空』の場合、『 空 ＥＱ 空 』で真(true)、『 空 ＮＥ 空 』で偽(false)
になります。
　例えば、＃３が『空』の場合、下記（例３）のように表示します。
（例３）ＩＦ[＃３ ＮＥ ３]ＧＯＴＯ１　を　ＩＦ[ 空 ！＝ ３]ＧＯＴＯ１　と表示し、結果は真(true)に
　　　　なります。

２．ローカル変数
・＃１〜＃３３
・Ｇ６５でサブプログラムを呼び出す場合、引数アドレスを用いて引数を引き渡すことができます。
・Ｇ６５による多重呼び出しは、Ｍ９８による多重呼び出しと合わせて最大５重まで可能（初期値は３重
　まで。システムパラメータを変更すれば最大５重まで可能）。
・Ｇ６５でサブプログラムを呼び出す場合、メインプログラムと各サブプログラム、また、他のプログラム
　それぞれにおいて異なる階層の変数として使用することができます。
　なお、Ｍ９８によりサブプログラムを呼び出した場合は、呼び出し元と同じ階層の変数として扱います。
・Ｇ６５における引数アドレスとローカル変数の番号は、下記のように対応しています。
　『Ｇ』、『Ｌ』、『Ｎ』、『Ｏ』、『Ｐ』は、引数アドレスとして使用することができません。
　Ａ：＃１、　Ｂ：＃２、　Ｃ：＃３、　Ｄ：＃７、　Ｅ：＃８、　Ｆ：＃９、　Ｈ：＃１１、Ｉ：＃４、
　Ｊ：＃５、　Ｋ：＃６、　Ｍ：＃１３、Ｑ：＃１７、Ｒ：＃１８、Ｓ：＃１９、Ｔ：＃２０、Ｕ：＃２１、
　Ｖ：＃２２、Ｗ：＃２３、Ｘ：＃２４、Ｙ：＃２５、Ｚ：＃２６

３．コモン変数
・＃１００〜＃１４９、＃５００〜＃５４９
・メインプログラムやサブプログラムに関係なく、また、他のプログラムからも、同じ階層、共通の変数と
　して使用することができます。

４．システム変数
・下記のシステム変数を使用することができます。
　工具長補正量 ：(H01〜H10)#2001〜#2010
　工具径補正量 ：(D01〜D10)#2401〜#2410
　G90/G91の状態：#4003
　G98/G99の状態：#4010
　G54のシフト量：(X軸)#5221、(Y)#5222、(Z)#5223
　G55のシフト量：(X軸)#5241、(Y)#5242、(Z)#5243
　G56のシフト量：(X軸)#5261、(Y)#5262、(Z)#5263
　G57のシフト量：(X軸)#5281、(Y)#5282、(Z)#5283
　G58のシフト量：(X軸)#5301、(Y)#5302、(Z)#5303
　G59のシフト量：(X軸)#5321、(Y)#5322、(Z)#5323

５．変数の使用方法
・演算が可能
　＃１＝１；
　＃２＝１５；
　＃３＝＃１＋＃２；　　　　　　　　　⇒　＃３＝１６；と同じ意味。
・アドレスに続くデータとして使用可能
　＃１＝４１；
　＃２＝５；
　＃３＝1；
　＃４＝１００；
　Ｇ＃１Ｄ＃２Ｇ＃３Ｘ３５．Ｆ＃４；　⇒　Ｇ４１Ｄ５Ｇ１Ｘ３５．Ｆ１００.；と同じ意味。
　　　　　　　　　　　　　　　　　　　　　※アドレスＧ、Ｌ、Ｎ、Ｏ、Ｐに続く変数は必ず整数に変換し、
　　　　　　　　　　　　　　　　　　　　　　アドレスＤ、Ｈ、Ｍに続く変数はＧ６５を指令したブロック
　　　　　　　　　　　　　　　　　　　　　　では小数点付き、それ以外の場合は整数に変換します。
・変数番号に演算が可能
　＃１＝１；
　＃[＃１＋４]＝１００；　　　　　　　⇒　＃５＝１００；と同じ意味。
・間接呼び出しが可能
　＃５＝１００；
　＃[＃５]＝３０；　　　　　　　　　　⇒　＃１００＝３０；と同じ意味。

６．演算
・四則演算：＋、−、＊、／
・三角関数：Ｓ Ｉ Ｎ[ ]、Ｃ Ｏ Ｓ[ ]、Ｔ Ａ Ｎ[ ]、ＡＴＡＮ[ ]
・絶 対 値：Ａ Ｂ Ｓ[ ]
・ル ー ト：ＳＱＲＴ[ ]
・四捨五入による整数化：ＲＯＵＮＤ[ ]、ＲＯ[ ]
・少数点以下 切り捨て ：ＦＩＸ[ ]
・少数点以下 切り上げ ：ＦＵＰ[ ]
※ＳＱＲＴにマイナス値を代入、ＴＡＮに９０を代入等、演算できない数値を代入すると、『演算できない
　数値を代入』というエラーが表示されます。

７．繰り返しと分岐
・ＷＨＩＬＥ及びＩＦを使用することができます。
　無限ループを指令した場合等、描画ブロック数が３万を超えるとエラーメッセージを表示します。
　※エラーメッセージが出ても３万ブロックまでは描画可能。
・繰り返し（条件付き）
　ＷＨＩＬＥ[条件式]ＤＯｎ；←真(true)でＥＮＤｎ間の処理を実行し、偽(false)でＥＮＤｎの次ブロック
　　　　　　　　　　　　　　　へ移動。
　（処理）
　ＥＮＤｎ；
　※ＥＮＤｎのブロックは、ＷＨＩＬＥを指令したブロック以降に記述してください。
　※多重ループは３重まで可能です。４重以上指令した場合は読み飛ばします。
・無限ループ
　ＤＯｎ；←無条件にＥＮＤｎ間の処理を繰り返す。
　（処理）
　ＥＮＤｎ；
　※ＥＮＤｎのブロックは、ＤＯを指令したブロック以降に記述してください。
　※必ずＩＦ文と組み合わせて、無限ループにならないように指令してください。
　※ＷＨＩＬＥと合わせて多重ループは３重まで可能です。４重以上指令した場合は読み飛ばします。
・分岐
　ＩＦ[条件式]ＧＯＴＯｎ；　←真(true)でＮｎ(シーケンス番号ｎ)へ分岐。
　（処理）
　Ｎｎ；
※ＧＯＴＯnによる分岐先は、ブロックの先頭にＮｎ(シーケンス番号n)が記載されていること。
・無条件分岐
　ＧＯＴＯｎ；　←無条件にＮｎ(シーケンス番号n)へ分岐。
　（処理）
　Ｎｎ；
※ＧＯＴＯnによる分岐先は、ブロックの先頭にＮｎが記載されていること。
・条件付き処理
　ＩＦ[条件式]ＴＨＥＮ（処理）；←真(true)でＴＨＥＮの右側の処理を実行。

８．比較演算子
・ＷＨＩＬＥ文やＩＦ文の条件式に使用する比較演算子は下記のとおりです。
　ＥＱ：（例）[Ａ ＥＱ Ｂ]　⇒　Ａ＝Ｂならば真(true)、その他の場合は偽(false)
　ＮＥ：（例）[Ａ ＮＥ Ｂ]　⇒　Ａ≠Ｂならば真(true)、その他の場合は偽(false)
　ＧＥ：（例）[Ａ ＧＥ Ｂ]　⇒　Ａ≧Ｂならば真(true)、その他の場合は偽(false)
　ＬＥ：（例）[Ａ ＬＥ Ｂ]　⇒　Ａ≦Ｂならば真(true)、その他の場合は偽(false)
　ＧＴ：（例）[Ａ ＧＴ Ｂ]　⇒　Ａ＞Ｂならば真(true)、その他の場合は偽(false)
　ＬＴ：（例）[Ａ ＬＴ Ｂ]　⇒　Ａ＜Ｂならば真(true)、その他の場合は偽(false)
　※ＡＮＤやＯＲによる条件式の組合わせには対応していません。