National Instrument Ethernet-to-GPIB ブリッジを介して PC に接続された Agilent E4426B RF 信号発生器を備えたテスト フィクスチャがあります。私のソフトウェアは、機器をプリセットし、現在の状態を標準 SCPI コマンド「*SAV x,y」で書き込み可能なすべてのメモリ位置に保存することで、機器をサニタイズしようとしています。
ループはある程度機能しますが、最終的に機器はエラーで応答し、前面ディスプレイに「L」アイコンを表示し続け、下部に「リモート プリセット」メッセージを表示します。その時点で、それ以上のリモート コマンドに応答しなくなり、電源を入れ直すか、LOCAL を押してから PRESET を押す必要があります。この時点で、プリセットが完了するまでに約 3 分かかります。その時点で「L」アイコンはまだ存在し、次の GPIB コマンドが測定器に送信されると、測定器エラー キューに -113 エラー (未定義のヘッダー) が報告されます。
NIスパイを起動して何が起こっているのかを確認したところ、ループの同じポイントでエラーが発生していることがわかりました。この場合は「* SAV 6,2」です。NIスパイから:
送信 (0, 0x0017, "*SAV 6,2", 8 (0x8), NLend (0,0x01))
プロセス ID: 0x00000520 スレッド ID: 0x00000518
ibsta:0xc168 iberr: 6 ibcntl: 2(0x2)
計測器ドライバーのコードは次のとおりです。
int CHP_E4426b::Erase()
{
if ((m_StatusCode = Initialize()) != GPIB_SUCCESS) // basically just sends "*RST"
return m_StatusCode;
m_SaveState = "*SAV %d, %d";
for (int i=0; i < 10; i++)
for (int j=0; j < 100; j++) {
sprintf(m_CmdString, m_SaveState, j, i);
if ((m_StatusCode = Send(m_CmdString, strlen(m_CmdString))) != GPIB_SUCCESS)
return m_StatusCode;
}
return GPIB_SUCCESS;
}
内部ループの最後に小さな Sleep() 遅延 (10 ~ 20 ミリ秒) を入れてみましたが、驚いたことに、エラーが遅くではなく早く表示されました。10 ミリ秒ではループが 44.1 でエラーになり、20 ミリ秒ではさらに早くなりました。原因となっている配線や測定器の不具合はすでに排除しました。これと同じタイプのシーケンスは、ハイエンドの信号発生器でエラーなしで機能するため、これを機器のファームウェアのバグと見なしたくなります。