One of the most common problems that a GPIB software developer has is configuring the software to match the requirements of each test system. Because one driver operates with a variety of systems, configuring your driver must be easy. NI's NI-488 software offers several methods of configuration so you can choose the method that is best for your application. This document describes each of the configuration methods available with the NI-488 MS-DOS software.
There are three methods using the NI-488 software for changing the default configuration options of your system. They are as follows:
The following sections explain the methods for changing the driver configuration characteristics and the advantages of each method.
IBCONF.EXE is a screen oriented, interactive program that passes two groups of features to the driver. The first group consists of the characteristics of the devices attached to the GPIB interface. Each device has the following characteristics:
The second group consists of the characteristics of each GPIB interface board in the computer. The NI-488 driver can control up to two GPIB interface boards. Each GPIB interface board has the following characteristics:
The advantages to executing and modifying IBCONF manually are that you have total flexibility in configuring each device, and you do not have to add configuration code to each application program.
The IBCONF batch mode offers an alternate method for modifying the configuration parameters of the NI-488 driver. In batch mode, the configuration information is contained in a configuration file that you create. To load the configuration information from the file that you have created, you type the following command:
where filename is the name of the configuration file, for example, sample.cfg. There must be at least one space between -b and filename.
You will not see the IBCONF device map, but will see a prompt requesting to update the loaded GPIB driver in memory. Answering yes eliminates the need to reboot the computer after the changes are made. However, you can eliminate the prompt so that the driver is automatically updated by executing IBCONF with the -d option. This automatically configures the loaded version of the driver.
Batch mode is useful for both GPIB developers that distribute executable programs and GPIB end users. For developers that have an installed base of programs, using this batch mode of IBCONF is an easy way to ensure proper configuration without having to make any changes to their existing programs. The user simply executes the batch file and the GPIB devices are automatically configured. Programmers can develop batch files for each of their programs.
The batch file can be edited using any text editor. The batch file is a free-form text file consisting of pairs of items. Each item must be separated by at least one space or new line character–this is the only format restriction. The first item of a pair is a mnemonic that represents a board or device characteristic, or a board/device map configuration function (for example, rename, connect, disconnect) to be configured. The second item of a pair is the value to which the first item (mnemonic) should be set. For example, to rename dev8 in the device map to scanner, enter the following line of code in the batch file:
To enable automatic serial polling for gpib0, enter the following line of code:
find board0 spoll yes
All the characteristics found in the actual IBCONF file can be altered using the batch mode method, including the base I/O address, interrupt setting, and DMA channel. You can also connect and disconnect devices from the GPIB interface boards just as you can do using the IBCONF device map. Table 1 contains a list of all the valid pairs of configuration items. Any value that can be entered as a number can be entered in decimal or hexadecimal. Hexadecimal numbers must be preceded with 0x (for example, decimal 64 would be written as 0x40).
First Item
|
Second Item
| |
Mnemonic
|
Explanation
|
Value
|
find | find board or device | board# or device# |
pad | primary GPIB address | number |
sad | secondary GPIB address | number |
tmo | timeout settings | number or mnemonic |
eos | EOS byte | number |
reos | terminate read on EOS | yes or no |
xeos | set EOI with EOS on write | yes or no |
bin | type of compare on EOS | 7-bit or 8-bit |
eot | set EOI with last byte of write | yes or no |
sc | system controller (board only) | yes or no |
sre | assert REN when SC (board only) | yes or no |
spoll | enable auto serial polling (board only) | yes or no |
tmng | timing (board only) | 2usec, 500nsec, 350nsec |
e488_2 | enable 488.2 protocols (board only) | yes or no |
cic_prot | CIC protocol (board only) | yes or no |
int | interrupt setting (board only) | number |
port | base I/O address (board only) | number |
dma | DMA channel (board only) | number |
raddr | repeat addressing (device only) | yes or no |
name | rename a device (device only) | device name |
connect | connect a device to a board (device only) | board# |
disconnect | disconnect a device from a board (device only) | no value |
type | switch the current board to PC2 or PC2A mode | pc2 or pc2a |
The following example is a sample configuration file along with a step-by-step explanation of each entry.
Example: scanner.cfg sample configuration file
Requirements :
Configuration File :
A third method for configuring devices is to dynamically configure them within the application program using special configuration functions. As described earlier, configuring a GPIB system requires knowledge of the bus and of the devices to which it is connected. Developers of application software can dynamically configure the driver so that novice users do not have to understand or edit IBCONF. This method is also ideal for running many different system configurations with the same GPIB interface board. Configuration changes made in the program only apply while the program is running. Upon termination, the configuration parameters are restored to their original settings. This method of configuration is not only more efficient, but also makes it very easy, because it comes in the form of subroutine function calls.
The IBCONFIG Function
By using the most powerful configuration function, ibconfig, you can dynamically configure all the software parameters found in IBCONF by simply adding ibconfig function calls to the application program. You can ensure that the driver is configured correctly regardless of the settings in IBCONF. The configuration parameters of ibconfig can be divided into two groups: board parameters and device parameters. Board parameters, for example, enable/disable hardware interrupts or enable/disable automatic serial polling. Device parameters can enable/disable repeat addressing.
You can also select primary and secondary addressing, timeout, and End-Of-String termination using ibconfig. However, the traditional NI-488 configuration functions ibpad (change primary address), ibsad (change secondary address), ibtmo (change timeout setting), ibeos (set End-Of-String character), and ibeot (set END termination message) are still supported. The following portion of code shows how the ibconfig function is used.
REM QuickBASIC 4.5 Example
REM The following code sets up a device for GPIB operation.
REM
REM $INCLUDE: 'qbdecl.bas'
CALL ibfind ("dev1", dev%)
REM Change primary address to 7.
option% = IbcPAD:value% = 7
CALL ibconfig(dev%, option%, value%)
REM Change timeout to 10 seconds.
option% = IbcTMO:value% = 13
CALL ibconfig (dev%, option%, value%)
The IBLN Function
The ibln function checks for a Listener at the specified address. This is similar to the NI-488.2™ routine FindLstn, except that the parameter is a single device address, not an array of addresses. ibln is useful for scanning several addresses to find out which Listeners are on the bus. Once you know what the address is, you can use ibconfig to change the primary address of that device in the driver.
The following portion of QuickBASIC code scans for Listeners at all GPIB primary addresses (with no secondary addresses) on the bus and reports which devices were found.
REM $INCLUDE: 'qbdecl.bas'
DIM Device%(30)
cnt% = 0
REM
REM The following call opens dev1 as a generic device.
REM You need a unit descriptor to call ibln.
CALL ibfind("dev1", dev%)
REM
REM Because you are not looking for secondary addresses, set
REM the sad parameter to 0. sad% = 0
REM Now scan the 30 possible primary addresses. Notice that
REM you are not checking address 0 because it is the default
REM address of the GPIB Controller, which should always be
REM listening.
FOR i% = 1 to 30
REM Check the response to see if a Listener is present at the
REM address specified by i%. If a device is listening, save
REM the address into the array Device%(), which is a listing
REM of all active Listeners.
REM
REM Increment the count as each Listener is found.
NEXT i%
REM Now print out the active addresses.
PRINT "Devices are present at the following addresses"
FOR j% = 0 to cnt% - 1
PRINT "A device is at GPIB Address "; Device%(j%)
NEXT j%
The IBDEV Function
In traditional NI-488 applications, the ibfind function is used to open devices for communication. ibfind returns a number (the unit descriptor) so GPIB calls can be made to that device. To use ibfind, however, the device name must be pre-configured in IBCONF, otherwise, ibfind will fail. As you can see, this is a shortcoming if you do not know the device name.
By using the ibdev function instead of the ibfind function, you can open and initialize a device without knowing its name. ibdev is similar to ibfind, except you do not pass a device name as one of the arguments in the function. ibdev simply opens the first unopened user-configurable device that it finds and returns a unit descriptor that is used in ibconfig, ibln, and all other device-level calls. After calling ibdev to obtain a unit descriptor, you may also need to call ibconfig to configure communication characteristics not configured using ibdev.
An example of how to use ibdev is shown below.
REM bd.index% is either 0 for gpib0 or 1 for gpib1.
bd.index% = 0
REM pad% is the primary address of the device you wish to
REM open. Suppose that in the above program, you determine
REM that there was one listening device at address 7.
pad% = Device%(0) : sad% = 0
REM For the other parameters that must be specified, set
REM the timeout to 10 seconds, enable the END message on
REM writes, and disable any EOS termination.
tmo% = 13 : eot% = 1 : eos% = 0
REM When calling ibdev, the value returned in ud% is the
REM unit descriptor.
CALL ibdev(bd.index%, pad%, sad%, tmo%, eot%, eos%, ud%)
This document has described two alternate methods for configuring a GPIB system other than the traditional IBCONF method: the batch mode method and the programming method. Both of these new methods transparently configure the driver with little or no effort from the end user. Using batch mode, you can create a batch file that configures the settings in IBCONF without an end user having to actually edit the IBCONF file. Using NI-488 configuration functions, you can dynamically configure the driver by adding functions to the program. Three of the most powerful NI-488 configuration functions (ibconfig, ibln, and ibdev) can find a particular Listener and change all the configuration settings found in IBCONF within your application program.