Instrument Control (GPIB, Serial, VISA, IVI)

cancel
Showing results for 
Search instead for 
Did you mean: 

Undocumented blue-screen error using PCI-GPIB under Windows 2000

We're running under Windows 2000, using a PCI-GPIB card and v1.60 of the driver, to talk to 4 instruments. With the supplied GPIBPCI.SYS we get an undocumented blue-screen:

** STOP: 0x000000B8 0x00000000 0x00000000 0x00000000
A wait operation, attach process, or yield was attempted from a DPC routine.

With the updated GPIBPCI.SYS (the one supplied to cure a known blue-screen problem) we still get the same error.

We've managed to reproduce the problem with a simple test harness talking to the NI drivers.
We've also been in contact with NI UK support and they've apparently been able to reproduce the problem - it appears that there's an undocumented problem with the driver - we'
re still waiting for further information...

Has anybody else seen this error ?
0 Kudos
Message 1 of 5
(3,618 Views)
Hello,
Make sure that the gpib.sys that you downloaded was approximately 316K, since this was the size of the latest version. Otherwise, I recommend contacting NI via email support (link below) so that they can troubleshoot the issue with you. It would help to provide an NI-Spy capture with your email.

Kim L.
Applications Engineering
National Instruments

http://sine.ni.com/apps/we/niae_asc.main
0 Kudos
Message 2 of 5
(3,618 Views)
The updated gpibpci.sys file was mailed to us by NI support 19/6/01. Size 308K (316,291 bytes), version 1.61.0041. We're sending an NI-Spy capture as suggested.
0 Kudos
Message 3 of 5
(3,618 Views)
Following KimL's suggestion I contacted NI email support. To summarise their answer:

CAUSE: The GPIB card has no sending buffer - if data can't be sent the OS generates a wait function to hold transmission until the device is ready to receive. When NRFD goes low (i.e. the device is ready) the wait function transmits the data. Too much data too fast and the OS generates too many waits. Result - the blue-screen noted.

SOLUTION - Use *ESE, *SRE, and WaitSRQ() to block the calling code until the operation ("RESET" in the example below) has completed.

Example:
Send(m_nBoardId, addr[0], "RESET", 5, NLend);
Send(m_nBoardId, addr[0], "*ESE 0x1", 8, NLend);
Send(m_nBoardId, addr[0], "*SRE 0x1", 8, NLend);
WaitSRQ (m_nBoardId, Finished) // Finished being 1
or 0
ReadStatusByte(m_nBoardId, addr[0], serialres) // serialres is the serial
byte

We've tried this, and it definitely improves things. However, we are still getting the same blue-screen, but far less frequently. We are currently investigating further...
0 Kudos
Message 4 of 5
(3,618 Views)
Does anyone know if this problem has been fixed in NI488.2 version 2?

Thanks!
0 Kudos
Message 5 of 5
(3,618 Views)