本文提供了 GPIB 錯誤代碼的解決方案。
下列內容大多來自《NI-488.2 適用於 Windows 的使用者手冊》(請參閱下方的其他資源)。
錯誤條件:驅動程式錯誤。
說明:如果 GPIB 硬體配置不正確,或者傳遞給 ibfind 函式的介面名稱或裝置名稱不正確,就會傳回 EDVR。
可能的原因:通常,如果您錯誤輸入機板介面名稱或儀器裝置名稱,就會造成 EDVR 錯誤。舉例來說,NI 機板的預設介面名稱是 GPIB0,但您可能會誤寫為 GPIBO (使用「oh」而非「0」。如果傳遞至 ibdev 函式的機板索引不正確,也可能會發生這個錯誤。機板索引是 GPIB 機板介面名稱中的一個數字部分,但許多人誤會其是機板的主要位址。舉例來說,我可能會在電腦上安裝 PCI-GPIB 機板,並且提供 2 的主要位址。機板的預設介面名稱是 GPIB0,因此機板索引為 0,而非 2。
解決方案:
錯誤條件:函式要求 GPIB 機板為 Controller-In-Charge (CIC)。
說明:某些函式需要 GPIB 機板為 CIC,NI-488.2 函式參考手冊會說明這些函式 (請參閱下方的相關連結)。根據預設,您的 GPIB 機板會是系統控制器,但這與充電控制器不相同。系統控制器可以隨時成為 CIC (指定通用介面匯流排可能有 1 個系統控制器)。
可能的原因:通常,當您在程式開始時未將介面清除,以確保您的 GPIB 機板是 CIC,就會造成 ECIC 錯誤。
解決方案:
錯誤條件:偵測到沒有偵聽器的函式。
說明:GPIB 通訊需要一個 Talker (寫入資料訊息) 與一個以上的 Listener (讀取資料訊息)。嘗試寫入作業時,通常會發生 ENOL,但沒有定址的 Listener,或者指定地址沒有 Listener。針對裝置寫入,ENOL 表示您嘗試通訊的 GPIB 位址與連接至匯流排的裝置的 GPIB 位址不一致。
可能的原因:您嘗試與之通訊的儀器不在預期主要地址,儀器電源未開啟,或是儀器連接線中斷或中斷。
解決方案:
錯誤條件:GPIB 機板 (GPIB0 或 GPIB1) 定址不正確。
說明:當 GPIB 機板為 Controller-In-Charge (CIC) 且無法在讀取與寫入函式前正確排序,就會發生 EADR。在要求影像交握功能且尚未插入 GPIB ATN 通道時,函式 ibgts 也會傳回 EADR。在此情況下,將無法進行影形交握,並傳回錯誤通知您。
可能的原因:與您所通訊的儀器相同的主要位址,您的 GPIB 機板的設定都已完成。
解決方案:
錯誤條件:函式呼叫的無效參數。
說明:如果將無效的引數傳遞至函式呼叫,就會造成 EARG。
可能的原因:以下舉例說明:您透過 0 到 17 之間的值呼叫 ibtmo (可能的逾時值會對應至 0 到 17 之間的值表,預設值為 13,代表 10 秒的逾時時間);您透過在第二個參數的高位元中設定的無意義位元呼叫 ibeo;或是使用無效位址呼叫 ibpad (或 ibsad)。
解決方案:
錯誤條件:GPIB 機板並非系統控制器 (如必要)。
說明:當 GPIB 機板不具備系統控制器功能時,當呼叫 ibsic、ibsre、SendIFC 或 EnableRemote 時,就會造成 ESAC。
可能的原因:GPIB 機板並未設定為「系統控制器」。
解決方案:
錯誤條件:I/O 作業已中斷。
說明:EABO 表示 I/O 作業因某些原因而取消。
可能的原因:EABO 錯誤通常是讀取或寫入作業期間的逾時,但也可能是在執行 I/O 作業時呼叫 ibstop 函式、ibclr 函式或類似函式所造成的。如果 PCI 匯流排控制 (電腦的 BIOS 中的選項) 未啟用,您可能會在使用 PCI-GPIB 機板撰寫作業期間遭到逾時。如果您讀取的儀器不了解先前的指令,因此無法寫信給您,您可能會在讀取作業期間遭到逾時。儀器可能沒有用途的原因有幾個:
解決方案:
錯誤條件:不存在的 GPIB 機板。
說明:如果 GPIB Configuration Utility 指定的 I/O 位址沒有任何 GPIB 介面卡,就會發生 ENEB。當機板未實際插入系統、設定期間指定的 I/O 位址與實際機板設定不一致、系統與基本 I/O 位址發生衝突,或是機板的介面名稱與與裝置相關的機板介面名稱不同時,就會發生這個問題。
解決方案:
錯誤條件:在使用 DMA 進行資料傳輸時,發生錯誤。
說明:如果當 NI-488.2 驅動程式嘗試使用 DMA 來透過 GPIB 傳輸資料時,遇到系統 DMA 錯誤,就會發生 EDMA。
解決方案:
錯誤條件:當非同步 I/O 正在執行時,不允許使用函式。
說明:如果進行其他 GPIB 呼叫前,非同步 I/O 作業尚未完成,就會發生 EOIP。在非同步 I/O 作業期間,您只能使用 ibstop、ibnotify、 或 ibonl 函式。如果嘗試進行其他任何 GPIB 呼叫,就會傳回 EOIP。
可能的原因:在非同步 I/O 期間呼叫任何不受支援的 GPIB 函式。
解決方案:
錯誤條件:無法進行作業。
說明:如果您的 GPIB 介面卡無法執行作業,或已透過軟體停用特定功能,而所進行的呼叫需要該項功能,就會造成 ECAP。
解決方案:
錯誤條件:檔案系統錯誤。
說明:如果 ibrdf 或 ibwrtf 呼叫在執行檔案作業期間遇到問題,就會造成 EFSO。具體而言,這個錯誤會指出函式無法開啟、建立、尋找、寫入或關閉所存取的檔案。此一情況的專屬作業系統錯誤碼會包含在 ibcntl 中。
解決方案:
錯誤條件:指令位元傳輸錯誤。
說明:如果裝置運作時遇到特定 GPIB 匯流排錯誤,就會造成 EBUS。所有裝置函式都會傳送指令位元,執行定址與其他匯流排管理作業。裝置應該在預設組態或 ibtmo 函式所指定的時間限制內,接受這些指令位元。如果傳送這些位元指令時發生逾時,就會造成 EBUS。
可能的原因:GPIB 控制器沒有連接任何 GPIB 裝置。如果所有儀器都未啟動、其中一部儀器發生錯誤並插入交握線路、GPIB 連接線與機板連線中斷,或 GPIB 連接線毀損,就會發生這個情況。
解決方案:
錯誤條件:序列輪詢狀態位元遺失。
說明:只有 ibrsp 函式會回報 ESTB。ESTB 表示從自動序列輪詢接收的一個或多個序列輪詢狀態位元,因缺乏儲存空間而遭到棄置。有許多較舊的狀態位元可供使用;不過,最舊的狀態位元正由 ibrsp 呼叫傳回。
可能的原因:儀器正在重複插入 SRQ 線路。
解決方案:
錯誤條件:SRQ 持續處於 ON 位置。
說明:ESRQ 只能由裝置層級的 ibwait 呼叫傳回,而您已在當中設定 ibwait 函式,使其傳回狀態字元 (ibsta) 所插入的 RSQ 位元。ESRQ 表示由於 GPIB SRQ 線路持續處於 ON,因此無法等候 RQS。
可能的原因:這個情況可能是由下列事件所造成:發生連接線問題,導致 SRQ 線路持續保持插入;由於軟體不認識這項裝置,因此插入 SRQ 線路的軟體對裝置無所知;無法序列詢裝置以取消插入 SRQ 線路;或 GPIB 匯流匯排測試器 (或相似裝置) 正在強迫插入 SRQ 線路。
解決方案:
錯誤條件:表格問題。
說明:只有在 FindLstn 與 FindRQS 函式運作期間,才會發生 ETAB。ETAB 表示這些函式使用的表格發生某些問題。
可能的原因:就 FindLstn 而言,ETAB 意味著指定的表格沒有足夠空間可以容納接收器找到的所有位址。就 FindRQS 而言,ETAB 意味著指定表格中的所有裝置都未提出服務要求。
解決方案:
錯誤條件:GPIB 介面已鎖定,且無法存取。
可能的原因:如果有 2 個以上的程序想要存取同一介面,但其中一個程序已鎖定該介面,就會發生這個錯誤。當作業因介面遭到鎖定而無法執行時,將會傳回這個錯誤。此外,如果任一程序試圖在未發生此類鎖定的情況下解鎖介面,也會傳回這個錯誤。
解決方案:
錯誤條件:ibnotify 回呼無法重新設定。
可能的原因:如果我們在 NI-488.2 應用程式中使用非同步通知 (ibnotify),就會發生這個錯誤。如果想要讓您的應用程式收到發生一個或多個 GPIB 事件的非同步通知,這個函式就能派上用場。這個事件通知會透過回呼函式執行。當 ibnotify 呼叫發出時,這個回呼函式會使用 NI-488.2 驅動程式註冊。這個錯誤表示此回呼通知無法透過傳回不合法的值來重新設定自身,或發生嚴重的驅動程式錯誤 (EDVR)。
解決方案:
錯誤條件:輸入控制代碼無效。
可能的原因:如果有多個 GPIB 指令接收了機板或裝置的輸入控制代碼,並將其做為輸入參數,就有可能造成這個錯誤。許多情況都有可能導致這個錯誤發生。下方列出了其中幾個情境:
解決方案:
錯誤條件:特定輸入控制代碼持續處於進行中狀態。
可能的原因:如果相同程序中具有多個執行緒,或有 2 個以上的執行緒正在存取相同介面,就會發生這個錯誤。指定的單位描述子上已有一個 ibwait 呼叫正在進行,當執行緒已使用相同的描述子執行 ibwait,而其他執行緒嘗試呼叫相同描述子上的 ibwait,就會發生 EWIP。
解決方案:
錯誤條件:事件通知因介面重設而取消。
可能的原因:當事件通知因介面重設而取消時,就會造成 ERST。在下列情況下,驅動程式中擱置的 ibwait 呼叫會傳回 ERST:
在下列情況下,可使用 ERST 請求 ibnotify 回呼:
解決方案:
錯誤條件:介面失去電力。
可能的原因:如果介面失去電力,就會造成 EPWR。這個錯誤經常發生在系統進入待機模式時,以及從待機模式啟動時。
解決方案: