|    
      Controller Digital I/O Overview  
    Introduction 
    All MEI motion controllers (XMP, ZMP and eXMP) support some I/O directly connected to the controller. The following table summarizes which of the input or output bits in the software are mapped to which physical hardware pin.  
    The XESTOP input pin does NOT perform any special function on the controller.  
    
      
        Bits  | 
        XMP 
            
             | 
        
             ZMP  | 
        eXMP 
             | 
       
      
        PCI  | 
        CPCI  | 
        PMC  | 
        PCI  | 
        PMC  | 
       
      
        | IN0 | 
        OPTO_A* | 
        OPTO_A* | 
        OPTO_A* | 
          | 
        OPTO_A* | 
        OPTO_A* | 
       
      
        | IN1 | 
        OPTO_B* | 
        OPTO_B* | 
        OPTO_B* | 
          | 
        OPTO_B* | 
        OPTO_B* | 
       
      
        | IN2 | 
        OPTO_C* | 
        OPTO_C* | 
        OPTO_C* | 
          | 
        OPTO_C* | 
        OPTO_C* | 
       
      
        | IN3 | 
        OPTO_D* | 
        OPTO_D* | 
        OPTO_D* | 
        IN3 | 
        OPTO_D* | 
        OPTO_D* | 
       
      
        | IN4 | 
        OPTO_E* | 
        OPTO_E* | 
        OPTO_E* | 
        IN4 | 
        OPTO_E* | 
        OPTO_E* | 
       
      
        | IN5 | 
        OPTO_F* | 
        OPTO_F* | 
        OPTO_F* | 
        IN5 | 
        OPTO_F* | 
        OPTO_F* | 
       
      
        | IN6 | 
        XESTOP | 
        XESTOP | 
        XESTOP | 
        XESTOP | 
        XESTOP | 
        XESTOP | 
       
      
        | OUT0 | 
        OPTO_A* | 
        OPTO_A* | 
        OPTO_A* | 
        OUT0 | 
        OPTO_A* | 
        OPTO_A* | 
       
      
        | OUT1 | 
        OPTO_B* | 
        OPTO_B* | 
        OPTO_B* | 
        OUT1 | 
        OPTO_B* | 
        OPTO_B* | 
       
      
        | OUT2 | 
        OPTO_C* | 
        OPTO_C* | 
        OPTO_C* | 
        OUT2 | 
        OPTO_C* | 
        OPTO_C* | 
       
      
        | OUT3 | 
        OPTO_D* | 
        OPTO_D* | 
        OPTO_D* | 
          | 
        OPTO_D* | 
        OPTO_D* | 
       
      
        | OUT4 | 
        OPTO_E* | 
        OPTO_E* | 
        OPTO_E* | 
          | 
        OPTO_E* | 
        OPTO_E* | 
       
      
        | OUT5 | 
        OPTO_F* | 
        OPTO_F* | 
        OPTO_F* | 
          | 
        OPTO_F* | 
        OPTO_F* | 
       
      
        |   | 
         * These pins share the physical output pins. The pin is either an input or output, and depends on the external wiring to the controller.  | 
       
     
    See Also 
    Connect Controller I/O: XMP-SynqNet Series  
      
     What I/O does a Controller Support?  
     The io field of the MEIControlInfo structure returned by the meiControlInfo function, returns if each pin is supported on the specific controller along with a descriptive string, if the input or output is supported.  
    
      
        |   | 
        
            
               typedef struct MEIControlInfoIoDigitalIn {     MPI_BOOL      supported;     const char    *name; } MEIControlInfoIoDigitalIn;
typedef struct MEIControlInfoIoDigitalOut {
    MPI_BOOL    supported;
    const char  *name;
} MEIControlInfoIoDigitalOut;
typedef struct MEIControlInfoIo {
    MEIControlInfoIoDigitalIn   digitalIn[MPIControlInMAX+1];
    MEIControlInfoIoDigitalOut  digitalOut[MPIControlOutMAX+1];
} MEIControlInfoIo;
typedef struct MEIControlInfo {
   ...
   
   MEIControlInfoIo  io;
} MPIControlInfo; 
     
               | 
             
          | 
       
     
    For example, executing the following piece of code on a ZMP-PCI controller  
    
      
        |   | 
        
            
               MEIControlInfo controlInfo; meiControlInfo( control, &controlInfo ); 
               
               | 
             
          | 
       
     
    would return the following contents: 
    
      
         | 
        Supported 
        0 = No  
        1 = Yes   | 
        Bit  | 
       
      
        | controlInfo.io.digitalIn[0] | 
        1  | 
        IN0  | 
       
      
        | controlInfo.io.digitalIn[1] | 
        1  | 
        IN1  | 
       
      
        | controlInfo.io.digitalIn[2] | 
        1  | 
        IN2  | 
       
      
        | controlInfo.io.digitalIn[3] | 
        0  | 
         | 
       
      
        | controlInfo.io.digitalIn[4] | 
        0  | 
         | 
       
      
        | controlInfo.io.digitalIn[5] | 
        0  | 
         | 
       
      
        | controlInfo.io.digitalIn[6] | 
        1  | 
        XESTOP  | 
       
      
        | controlInfo.io.digitalOut[0] | 
        1  | 
        OUT0  | 
       
      
        | controlInfo.io.digitalOut[1] | 
        1  | 
        OUT1  | 
       
      
        | controlInfo.io.digitalOut[2] | 
        1  | 
        OUT2  | 
       
      
        | controlInfo.io.digitalOut[3] | 
        0  | 
         | 
       
      
        | controlInfo.io.digitalOut[4] | 
        0  | 
         | 
       
      
        | controlInfo.io.digitalOut[5] | 
        0  | 
         | 
       
     
      
     Accessing the I/O on the Controller  
    The controller I/O can be set or monitored using the following MPI functions: 
    mpiControlDigitalIn 
        mpiControlDigitalOutSet 
        mpiControlDigitalOutGet 
    These functions take two arguments, bitStart and bitCount, which allow either a single bit to be accessed (bitCount equals one) or multiple, adjacent I/O bits to be accessed (bitCount is greater than one).  
    The following code shows how to get the state of controller input 1. 
    
      
        |   | 
        
            
               unsigned long input1; mpiControlDigitalIn( control, 1, 1, &input1 );
 
 
  | 
             
          | 
       
     
    The next piece of code shows how to set three controller outputs (2, 3 and 4): 
    
      
        |   | 
        
            
               mpiControlDigitalOutSet( control, 2, 3, 7, TRUE ); 
  | 
             
          | 
       
     
      
     |