# FOCAS學習筆記 ## 範例 ::: success 範例:用於取得刀具狀態。 ::: ``` csharp using System; using System.Runtime.InteropServices; public class FocasToolStatus { // 定義 FOCAS 函數對應的 C# 封裝 [DllImport("Fwlib32.dll")] // 請確保引用了正確的 FOCAS 库文件 public static extern short cnc_rdtlstatus(IntPtr handle, short type, short[] status); // 主函數 public static void Main(string[] args) { short[] toolStatus = new short[10]; // 設置用於保存刀具狀態的數組,這裡假設最多有 10 把刀具 // 建立與 CNC 控制器的連接 IntPtr handle = FocasFunctions.cnc_allclibhndl3(endPoint.Address.ToString(), endPoint.Port, 10); // 請使用正確的 CNC 控制器的 IP 地址和端口號建立連接 short ret = cnc_rdtlstatus(handle, 0, toolStatus); // 讀取刀具狀態,type = 0 表示讀取所有刀具狀態 if (ret == FocasConstants.EW_OK) { // 成功讀取刀具狀態 for (int i = 0; i < toolStatus.Length; i++) { Console.WriteLine($"刀具{i + 1}狀態:{(toolStatus[i] == 1 ? "在位" : "不在位")}"); } } else { // 讀取失敗,請檢查連接和其他問題 Console.WriteLine($"無法讀取刀具狀態。錯誤碼:{ret}"); } // 關閉與 CNC 控制器的連接 // 這裡添加相關代碼 } } // FOCAS 相關常量定義 public static class FocasConstants { public const short EW_OK = 0; // 在這裡添加其他常量 } ``` ## 常用讀取數據函數 | 物件 | 函數 | 描述 | 注意 | | ------------ | -------------- | --------------------------------------- | ---------------------------------------------------------- | | 軸位置 | cnc_rdpower | 用於讀取各個軸的當前位置。 | 通常用於數控車床或者加工中心。 | | 刀具狀態 | cnc_rdtlstatus | 用於讀取刀具的在位狀態。 | 通常用於檢查刀具是否放置在刀庫中。 | |刀具磨損|cnc_rdtofs|刀具磨損的偏移值|無| | 軸速度 | cnc_actspeed | 用於讀取各個軸的當前運行速度。 | 通常用於監控加工中的軸速度。 | | 加工程序狀態 | cnc_statinfo | 用於讀取加工程序的運行狀態。 | 包括加工模式、運行狀態、系統報警等信息。 | | 加工計數器 | cnc_rdmeter | 用於讀取加工計數器的數值。 | 通常用於監控加工過程中的計數器,如加工時間、加工零件數等。 | | 系統報警 | cnc_alarm | 用於讀取系統報警信息。 | 可以獲取當前的系統報警代碼和報警信息。 | | 工件坐標系統 | cnc_rdposition | 用於讀取工件坐標系統(WCS)的當前位置。 | 無 | | 程序計數器 | cnc_rdprogdir | 用於讀取程序計數器的數值。 | 通常用於獲取當前加工程序的編號。 |