Passing GPIB Control - System Controller vs. Controller In Charge

Updated Mar 27, 2023

Reported In




  • NI-488.2

Issue Details

I need to be able to pass control from one General Purpose Interface Bus (GPIB) instrument to another. What are the differences between the System Controller and Controller in Charge, and how do I pass Controller In Charge?


The two types of GPIB controllers are as follows:
  • System Controller (SC) - The device that has ultimate control over the GPIB bus. Any device that supports having SC can be configured as such. The key points are there can be only one SC on any given GPIB, and the device configured to be SC cannot change dynamically throughout your program.
  • Controller In Charge (CIC) - The device that currently has control over the GPIB bus. The key points here are that, like SC, there can be only one CIC on any given GPIB at a time. However, CIC can be passed from one instrument to another programmatically.
For many applications, the SC and CIC are always the GPIB interface card in your computer. If you have an instrument that has GPIB controller capability, however, it is often useful to pass CIC to this device in your program. This can be done via a few methods, the most common of which is through either the function ibpct (NI-488) or PassControl (NI-488.2). See your 488.2 function reference manual for more details on these functions.

The question now arises - Now that my controller instrument has CIC and is controlling devices on the GPIB, how do I get CIC back to my GPIB interface card to continue my program? This can be done one of two ways.
  • Your controller instrument has knowledge of the address number of the SC, the ibpct command, and is kind enough to execute this command back to the SC when it is done with its control. This is not particularly common, which leads to the second option.
  • One of the main benefits of SC is that it is the only device on the bus that can take control without it being passed to it, thereby regaining CIC. Either the ibsic (NI-488) or SendIFC (NI-488.2) functions will accomplish this task. These functions clear the bus, take CIC away from whichever instrument had it, and returns it to the SC. Using this method, your program would need to have some knowledge of how long the other instrument is going to need control, so you can time the issuance of the command to not interrupt the operation of the controller instrument.