VP-EC-8KO Digital Output I/O Module 8 Channel Relay SPDT Modbus RTU RS485

Digital Output I/O Module, 8 Channel Relay SPDT, 10 Amp, RS485, Modbus Interface

Regular price $99.95 USD Sale

Model No: VP-EC-8KO

This is an 8 Point Relay I/O Module, 24 VDC Powered and RS485 Modbus RTU Interface. Great for industrial applications as well as Arduino and Raspberry Pi projects when used with RS485 interfaces. The PIC processor has the ICSP port available making the relay module a development as well.


  • Power: 24 VDC
  • Network: RS485, Jumper selectable 9600 or 19.2K Baud, N81
  • Modbus RTU Protocol
  • Modbus ID: Dipswitch Selectable
  • Relay Output: OMRON G5LE-14 24 VDC, 10 A, SPDT (Single Pole Double Throw)
  • Relays are OMRON Series G5LE - UL,CSA, (Or Equivalent) EN standards approved and conforms to Electrical Appliance and Material Safety Law (300 V max.)
  • Protection: MOV's on contact outputs
  • Relay Test: Jumper to test relay operation, cycles thru relays K1 thru K8 ON
  • 5VDC Switching Power Supply
  • 3.3 VDC Linear Regulator
  • Supports Modbus Function 15 "Write Multiple Relay Coils"
  • Dimensions: 3.4" wide x 6.15" long


  • PIC18F45K20
  • c/w ICSP Port
  • Can be used as a development platform for power relay projects


  • Power On: BLUE LED
  • Relay 1 thru 8: RED LED ON
  • Heart Beat: AMBER LED (Flashes to indicate proper operation)
  • RS485: GREEN LED Rx, RED LED Tx.


  • DIN Rail Enclosure 6.5" Long x 3.5" Wide x 1" High
    Available in Black (Standard), Blue (Custom) and White (Custom)
    Fabricated with PETG Plastc

 For Modbus Registers and programming information, please visit the product page at vpprocess.com.

Sample Raspberry Pi 3 "C" Code Function

void VP_EC_8KO_Relay_Output(void)
    char i, index;
    char tx_buffer[11];
    unsigned int checksum;
    fd = serialOpen("/dev/ttyS0", 19200); 
    if(fd < 0)
        printf("Error opening Serial Port \nn");
    index = 0;   
    tx_buffer[index++] = MODBUS_ID_RELAY;
    tx_buffer[index++] = 15;              
    tx_buffer[index++] = 0;              
    tx_buffer[index++] = 0;              
    tx_buffer[index++] = 0;             
    tx_buffer[index++] = 8;             
    tx_buffer[index++] = 1;              
    tx_buffer[index++] = Relay_Status;   
    checksum = MB_crc16(tx_buffer,index);       
    tx_buffer[index++] = (char)(checksum & 0x00ff);      
    tx_buffer[index++] = (char)((checksum >>8)&0x00ff);  
    digitalWrite(DIR_RS485, HIGH);       

    for(i=0; i<index; i++)
        serialPutchar(fd, tx_buffer[i]);
    digitalWrite(DIR_RS485, LOW);