<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="../Fmethod_xsl/fmethod_he_c.xsl"?>

<root>
    <func>


        <!-- 関数名 -->
        <title>cnc_rdmacro</title>



        <!-- 関数宣言 -->
        <declare>
            <!-- Visual C++の宣言 -->
            <vc>
                <include>#include "fwlib32.h"</include>
                <prottype>FWLIBAPI short WINAPI cnc_rdmacro(unsigned short FlibHndl, short number, short length, ODBM *macro);</prottype>
            </vc>
        </declare>



        <!-- 解説 -->
        <doc>
            <cmn>
                <p>numberで指定された番号のカスタムマクロ変数を読み出します。データは符号付のバイナリ形式でODBM内に格納されます。</p>

                <p>読み出し可能なカスタムマクロ変数の種類は以下の通りです。</p>

                <ol>
                    <li>ローカル変数 (#1〜#33)</li>
                        読み出す時点で実行されているカスタムマクロのローカル変数が読み出されます。<br/>
                    <li>コモン変数 (#100〜#999)</li>
                        読み出し範囲は<a href="ncdata/cnc_rdmacroinfo.htm" target="_parent">cnc_rdmacroinfo</a>関数の説明を参照して下さい。<br/>
                    <li>システム変数 (#1000〜#9999)</li>
                </ol>
                <p>
                    <a href="ncdata/cnc_setmactype.htm" target="_parent">cnc_setmactype</a>関数により、
                    読み出すカスタムマクロ変数の型を切り換えることができます。
                </p>
                <ul>
                    <li>10進形式浮動小数点型(データ形式=M*10**(-E))</li><br/>
                    <table>
                        <colgroup valign="top">
                        <colgroup valign="top">
                        <colgroup valign="top">
                        <tr>
                            <td>mcr_val</td>
                            <td>:</td>
                            <td>変数値(=M)<br/>
                            符号付の4バイトバイナリ形式<br/>
                            (有効範囲:999999999〜-999999999)</td>
                        </tr>
                        <tr>
                            <td>dec_val</td>
                            <td>:</td>
                            <td>小数点以下桁数(=E)<br/>
                            符号付の2バイトバイナリ形式<br/>
                            (有効範囲:-128 〜 127)</td>
                        </tr>
                        </colgroup>
                        </colgroup>
                        </colgroup>
                    </table>

                    <p>mcr_valは必ず9桁で返り、その分をdec_valの値で調整します。</p><br/>

                    <blockquote>
                        例: 変数値が12.345の場合、以下のように読み出されます。<br/>
                        mcr_val = 123450000<br/>
                        dec_val = 7
                    </blockquote>

                    <li>2進形式浮動小数点型(データ形式=M*2**(-E))</li><br/>
                    <table>
                        <colgroup valign="top">
                        <colgroup valign="top">
                        <colgroup valign="top">
                        <tr>
                            <td>mcr_val</td>
                            <td>:</td>
                            <td>変数値(=M)<br/>
                            符号付の4バイトバイナリ形式<br/>
                            (有効範囲:制限なし)</td>
                        </tr>
                        <tr>
                            <td>dec_val</td>
                            <td>:</td>
                            <td>小数点以下桁数(=E)<br/>
                            符号付の2バイトバイナリ形式<br/>
                            (有効範囲:-128 〜 127)</td>
                        </tr>
                        </colgroup>
                        </colgroup>
                        </colgroup>
                    </table>

                </ul>

                <p>なお、カスタムマクロ変数には『空』という特殊な値がありますが、10進形式浮動小数点型/2進形式浮動小数点型ともに以下で表します。</p>

                <blockquote>
                    <p>mcr_val = 0<br/>
                    dec_val = -1</p>
                </blockquote>

                <p>カスタムマクロ変数の詳細については、CNCの取扱説明書を参照して下さい。</p>

            </cmn>
        </doc>



        <!-- 引数 -->
        <argument>
            <common>
                <vc>
                    <item>
                        <name>FlibHndl</name>
                        <type>in</type>
                        <content>
                            <p>
                                ライブラリハンドルです。詳細は、「<a href="handle.htm" target="_parent">ライブラリハンドル</a>」を参照して下さい。
                            </p>
                        </content>
                    </item>
                    <item>
                        <name>number</name>
                        <type>in</type>
                        <content>
                            <p>リードするカスタムマクロ変数番号を指定します。</p>
                        </content>
                    </item>
                    <item>
                        <name>length</name>
                        <type>in</type>
                        <content>
                            <p>データブロック長(ODBM構造体のサイズ=10)を指定します。</p>
                            <p><b>ODBM</b></p>
                            <p><img src="ncdata/macro.gif"/></p>
                        </content>
                    </item>
                    <item>
                        <name>macro</name>
                        <type>out</type>
                        <content>
                            <p>カスタムマクロ変数を返すODBM構造体へのポインタです。ODBM構造体は次の通りです。</p>
<pre>
typedef struct  odbm {
    short   datano ;        /* カスタムマクロ変数番号 */
    short   dummy ;         /* 未使用 */
    long    mcr_val ;       /* カスタムマクロ変数値 */
    short   dec_val ;       /* 小数点以下桁数 */
} ODBM ;
</pre>
                        </content>
                    </item>
                </vc>
            </common>
        </argument>



        <!-- 戻り値 -->
        <errcode>
            <item>
                <name>EW_LENGTH</name>
                <content>データブロック長の誤り<br/>ODBM構造体のサイズ(length)が不正です。</content>
            </item>
            <item>
                <name>EW_NUMBER</name>
                <content>データ番号の誤り<br/>カスタムマクロ変数番号(number)の指定が不適切です。</content>
            </item>
            <item>
                <name>EW_NOOPT</name>
                <content>オプションなし<br/>カスタムマクロ機能が必要です。</content>
            </item>
        </errcode>



        <!-- CNCオプション -->
        <option>
            <hssb>拡張ドライバ/ライブラリ機能が必要です。</hssb>
            <ethr><p>イーサネット機能と拡張ドライバ/ライブラリ機能が必要です。</p>
                  <p>但し、Series 160i/180i/210i/0i MODEL B, 300i に関しては次のようになります。</p>
                  <p>組込みイーサネットを使用のとき、</p>
                  <p><ul>上記２つの機能は必要ありません。</ul></p>
                  <p>イーサネットボードを使用のとき、</p>
                  <p><ul>イーサネット機能のみ必要です。</ul></p>
            </ethr>
            <need>
                <li>Series 150, 150i, 300i/310i/320i</li>
                カスタムマクロ<br/>
                <br/>
                <li>Series 160/180/210, 160i/180i/210i, 0i, Power Mate i</li>
                カスタムマクロＢ<br/>
                <br/>
            </need>
            <type>
                <li>Series 150</li>
                カスタムマクロコモン変数 200個<br/>
                カスタムマクロコモン変数 300個<br/>
                カスタムマクロコモン変数 600個<br/>
                <br/>
                <li>Series 150i</li>
                カスタムマクロコモン変数 900個<br/>
                <br/>
                <li>Series 160/180/210, 160i/180i/210i, 0i, Power Mate i</li>
                カスタムマクロコモン変数追加<br/>
                <br/>
                <li>Series 300i/310i/320i</li>
                カスタムマクロコモン変数追加<br/>
                組込みマクロ機能<br/>
                <br/>
            </type>
            <!-- 300is -->
            <is>
                <hssb>拡張ドライバ/ライブラリ機能が必要です。</hssb>
                <need>カスタムマクロ</need>
                <type>
                  カスタムマクロコモン変数追加<br/>
                  組込みマクロ機能<br/>
                </type>
            </is>
        </option>



        <!-- CNCパラメータ -->
        <parameter></parameter>



        <!-- CNCモード -->
        <mode></mode>



        <!-- 対応機種 -->
        <support>
            <!-- M（ミリング） -->
            <m>
                  <fs0ia>H</fs0ia>
                <fs0ib>O</fs0ib>
                <fs15>H</fs15>
                <fs15i>O</fs15i>
                <fs16>H</fs16>
                <fs18>H</fs18>
                <fs21>H</fs21>
                <fs16ia>O</fs16ia>
                <fs18ia>O</fs18ia>
                <fs21ia>O</fs21ia>
                <fs16ib>O</fs16ib>
                <fs18ib>O</fs18ib>
                <fs21ib>O</fs21ib>
                <fs30i>O</fs30i>
            </m>
            <!-- T（旋盤） -->
            <t>
                  <fs0ia>H</fs0ia>
                <fs0ib>O</fs0ib>
                <fs15>H</fs15>
                <fs15i>X</fs15i>
                <fs16>H</fs16>
                <fs18>H</fs18>
                <fs21>H</fs21>
                <fs16ia>O</fs16ia>
                <fs18ia>O</fs18ia>
                <fs21ia>O</fs21ia>
                <fs16ib>O</fs16ib>
                <fs18ib>O</fs18ib>
                <fs21ib>O</fs21ib>
                <fs30i>O</fs30i>
            </t>
            <!-- LC（ローダ制御） -->
            <lc>
                  <fs0ia>X</fs0ia>
                <fs0ib>X</fs0ib>
                <fs15>X</fs15>
                <fs15i>X</fs15i>
                <fs16>H</fs16>
                <fs18>H</fs18>
                <fs21>H</fs21>
                <fs16ia>H</fs16ia>
                <fs18ia>H</fs18ia>
                <fs21ia>H</fs21ia>
                <fs16ib>H</fs16ib>
                <fs18ib>H</fs18ib>
                <fs21ib>H</fs21ib>
                <fs30i>X</fs30i>
            </lc>
            <!-- P（パンチプレス） -->
            <p>
                <fs16i>O</fs16i>
                <fs18i>O</fs18i>
            </p>
            <!-- L（レーザ） -->
            <l>
                <fs16i>O</fs16i>
                <fs18i>X</fs18i>
            </l>
            <!-- W（ワイヤカット） -->
            <w>
                <fs16i>E</fs16i>
                <fs18i>E</fs18i>
            </w>
            <!-- PM（パワーメート） -->
            <pw>
                <d>O</d>
                <h>O</h>
            </pw>
            <!-- 300is -->
            <is>
                <m>
                    <fs30is>O</fs30is>
                </m>
                <t>
                    <fs30is>O</fs30is>
                </t>
            </is>
        </support>



        <!-- 参照 -->
        <reference>
            <item>
                <name>cnc_wrmacro</name>
                <file>ncdata/cnc_wrmacro.htm</file>
            </item>
            <item>
                <name>cnc_rdmacror</name>
                <file>ncdata/cnc_rdmacror.htm</file>
            </item>
            <item>
                <name>cnc_wrmacror</name>
                <file>ncdata/cnc_wrmacror.htm</file>
            </item>
            <item>
                <name>cnc_rdmacror2</name>
                <file>ncdata/cnc_rdmacror2.htm</file>
            </item>
            <item>
                <name>cnc_wrmacror2</name>
                <file>ncdata/cnc_wrmacror2.htm</file>
            </item>
            <item>
                <name>cnc_rdmacroinfo</name>
                <file>ncdata/cnc_rdmacroinfo.htm</file>
            </item>
            <item>
                <name>cnc_getmactype</name>
                <file>ncdata/cnc_getmactype.htm</file>
            </item>
            <item>
                <name>cnc_setmactype</name>
                <file>ncdata/cnc_setmactype.htm</file>
            </item>
        </reference>



        <!-- プログラム例 -->
        <example>
<vc>
以下のプログラムは指定された番号のカスタムマクロ変数を読み出して表示します。

#include "fwlib32.h"

/* number is variable number to be read. */
short example( short number )
{
        ODBM macro ;
        char strbuf[11] ;
        short ret ;
        ret = cnc_rdmacro( h, number, 10, &#38;macro ) ;
        if ( !ret ) {
                sprintf( &#38;strbuf[1], "%09ld", macro.mcr_val ) ;
                if ( strbuf[1] == '0' ) strbuf[1] = ' ' ;
                strncpy( &#38;strbuf[0], &#38;strbuf[1], 9 - macro.dec_val ) ;
                strbuf[9-macro.dec_val] = '.' ;
                printf( "%s\n", strbuf ) ;
        }
        else
                printf( "**********\n" ) ;
        return ( ret ) ;
}
</vc>
        </example>



    </func>
</root>
