У меня есть тестовое устройство с генератором радиочастотных сигналов Agilent E4426B, подключенным к ПК через мост Ethernet-GPIB от National Instrument. Мое программное обеспечение пытается дезинфицировать прибор, предварительно установив его и сохранив текущее состояние во всех местах памяти, доступных для записи с помощью стандартной команды SCPI "* SAV x, y".
Цикл работает до определенной точки, но в конечном итоге прибор реагирует с ошибкой и постоянно отображает значок «L» на передней панели и сообщение «Удаленная предустановка» внизу. В этот момент он не будет реагировать на другие удаленные команды, и мне придется либо выключить питание, либо нажать LOCAL, затем PRESET, после чего потребуется около 3 минут для завершения предварительной настройки. В этот момент значок «L» все еще присутствует, и следующая команда GPIB, отправленная на прибор, заставляет его сообщить об ошибке -113 (неопределенный заголовок) в очереди ошибок прибора.
Я запустил шпион NI, чтобы посмотреть, что происходит, и обнаружил, что ошибка происходила в той же точке цикла - в данном случае "* SAV 6,2". От NI Spy:
Отправить (0, 0x0017, "* SAV 6,2", 8 (0x8), NLend (0,0x01))
Идентификатор процесса: 0x00000520 Идентификатор потока: 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 мс было еще раньше. Я уже устранил неисправный кабель или инструмент как виновника. Этот же тип последовательности работает без ошибок на старшем генераторе сигналов, поэтому я испытываю желание объяснить это ошибкой в прошивке прибора.