HSSB版ライブラリでは、CNC側のHSSBボードとの通信を確立するために、ハンドル番号取得関数『cnc_allclibhndl』または、『cnc_allclibhndl2』によりライブラリのハンドル番号を取得する必要があります。
Ethernet版ライブラリでは、CNC側のイーサネットボードとの通信を確立するために、ハンドル番号取得関数『cnc_allclibhndl3』にCNC側のIPアドレスを指定して、ライブラリのハンドル番号を取得し、通信回線を作成する必要があります。
一度取得したライブラリのハンドル番号は、CNC/PMCデータウィンドウライブラリの各関数に引き数として渡すため、アプリケーションにてデータウィンドウへのアクセスが終了するまで、その値を保持する必要があります。
ライブラリハンドルはそれを獲得したスレッドに所有されます。ハンドルを獲得したスレッドAが、他のスレッドBにそのハンドル番号を教えても、スレッドBはそのハンドルを使用する事はできません。
1つのスレッドが、ハンドル番号取得関数を複数回呼んで、複数のライブラリハンドルを獲得する事は可能です。例えば、2系統のシステムで、同じCNC(同じIPアドレス)に対するハンドルを2つ確保し、それぞれのハンドルに異なる系統を割り当てるような使い方ができます。
同じIPアドレスへのライブラリハンドルを複数個獲得しても、ライブラリはそのIPアドレスに対してはプロセス毎(アプリケーション毎)に1つしかTCP/IP回線を作成しません。これは、CNC側イーサネットボードのリソースの消費を押さえるためです。よって、あるライブラリハンドルで通信エラーが発生し、通信回線が切断してしまった場合、もう一方のハンドルも自動的に通信不能となってしまいます。
また、アプリケーションが終了するときには、ハンドル番号の開放関数『cnc_freelibhndl』により取得したハンドルを開放し、通信を終了する必要があります。
<注意>
取得したライブラリハンドルを開放しないでアプリケーションを終了すると、ライブラリハンドルに対する管理情報用の領域が開放されずに蓄積されてしまいます。これをくり返し行っていくと、ライブラリハンドルが取得できなくなります。
従って、アプリケーションの処理シーケンスの概略は、次のようになります。
高速シリアルバス(HSSB)で接続したNC側の電源をオフした場合の注意事項を以下に示します。
ライブラリハンドルを取得した後にNCの電源をオフにすると、そのライブラリハンドルは無効となります。 (HSSBのマルチ接続を行っている場合は、電源をオフしたNCに対するライブラリハンドルのみ無効となります。)
NCの電源がオフとなり無効となったライブラリハンドルでライブラリ関数を実行すると、 完了ステータスがEW_HSSB となります。
また、この状態でNC側を立ち上げ直してから無効となったライブラリハンドルでライブラリ関数を実行し続けた場合、 完了ステータスはEW_HANDLE に変わります。無効となったライブラリハンドルは、 cnc_freelibhndl で必ず開放して下さい。
ライブラリ関数が処理を実行している最中にNC側の電源をオフした場合、実行中であった 処理自体の動作は保証されません。従って、NC側の電源をオフする場合は、ライブラリが 処理中でないことを確認してから行って下さい。
ライブラリが処理を実行していないときにNC側の電源をオフした場合は、NCを立ち上げた後に ライブラリハンドルを再度獲得することでライブラリ関数が実行可能となります。
NC側の電源がオフの場合にcnc_allclibhndl、または cnc_allclibhndl2を実行すると、完了ステータスが EW_HSSB となります。
また、NCの立ち上げ直後にcnc_allclibhndl、または cnc_allclibhndl2を実行すると、完了ステータスが EW_BUSY となる場合があります。
これはNCとのインタフェースの初期化が終了していないことを示します。完了ステータスがEW_BUSY となっ た場合は、初期化が終了するまでリトライして下さい。
イーサネットで接続したNC側の電源をオフした場合の注意事項を以下に示します。
ライブラリハンドルを取得した後にCNCの電源をオフにしても、すぐに接続が切れるわけではありません。CNCの電源をオフしても、CNC側のイーサネットボードからTCP/IPのリセットが通知されませんので、TCP/IPの仕様上ライブラリ側は回線が切れたことが検出できません。(この状態を、TCP/IPの用語で「ハーフオープン」と呼びます。)
ハーフオープンの状態で各ライブラリ関数を実行すると、cnc_allclibhndl3で指定した時間でタイムアウトエラーが発生し、その後電源をオフしたCNCと接続している全てのライブラリハンドルが無効となります。
CNCの電源がオフとなり無効となったライブラリハンドルでライブラリ関数を実行すると、完了ステータスがEW_SOCKETとなります。無効となったライブラリハンドルは、cnc_freelibhndlで必ず開放して下さい。その後CNCを立ち上げ、ライブラリハンドルを再度獲得することで、再びライブラリ関数が実行可能となります。
ライブラリが処理を実行している最中にCNC側の電源をオフした場合、実行中であった処理自体の動作は保証されません。
CNC側の電源がオフの場合にcnc_allclibhndl3を実行すると、完了ステータスがEW_SOCKETとなります。
しかし、cnc_allclibhndl3によりライブラリハンドルを獲得し、その後CNC側の電源オフによりハーフオープン状態となったとき、再び同じCNCに対してハンドルを獲得すると、cnc_allclibhndl3の完了ステータスがEW_OKとなるので注意が必要です。
cnc_allclibhndl3はすでに回線を作成していれば、その回線を再利用しようと試みます。上記の例の場合、最初のcnc_allclibhndl3により、すでに回線が作成されていますので、2回目の呼び出しにおいて最初に作成した回線をライブラリハンドルに割り当てようとします。回線が切断されていることがライブラリで分かれば新たな回線を作成しますが、この場合ハーフオープン状態となっているので、ライブラリには回線が切断されていることが分かりません。よってライブラリは、ハーフオープン状態の回線をハンドルに割り当て、2つ目のハンドル獲得が成功します。
この状態で、2つ目のハンドルを使って各ライブラリ関数を実行すると、タイムアウトエラーが発生し、ハーフオープン状態の回線がクローズされます。