Raspberry Pi as a PLC in Automation Applications

The Raspberry Pi is being used in more automation applications as a PLC replacement.

 In this example, a Raspberry Pi 3 is being used as the main controller. The design spec called for:

  • 16 Analog Inputs 4-20 mA
  • 8 Digital Inputs
  • 12 Relay Outputs for control
  • 4 Analog Outputs 4-20 mA
  • 120 VAC Prime Power
  • 24 VDC Field Power
  • Real TIme Clock
  • Industrial Enclosure

Here is a closer look at the interior panel:

The enclosure is a BUD Industries ABS / Polycarbonate blend type with a clear cover and aluminum backpanel. The dimensions are 14" W x 16" H x 7" D. All modules are DIN rail mounted for simple installation. As can be seen in the above picture, the local wiring is all ribbon cable, and the center of the panel is wide open for field wiring. All terminal blocks used are industrial grade rising clamp screw type.

The power supply chosen for this project is a Delta Chrome series which has a wide input AC Voltage range of 90 to 264 VAC, 24 VDC @ 0.42A output rating, and various safety approvals. All the PI-SPI-DIN modules have high efficiency switching power supplies, the input 4-20 mA signals are from powered transmitters.

The heart of the system is the PI-SPI-DIN-RTC-RS485 module. This supports the RPi, provides power to the RPi via the GPIO ribbon cable, has a RS485 interface for external displays and Modbus I/O modules, a battery backed Real Time Clock (I2C address 0x6f) and a buffered 16 Pin GPIO bus for the PI-SPI-DIN modules. Power for the PI-SPI-DIN modules, in this case 24 VDC, is also carried via this 16 pin GPIO ribbon cable.

The software for this project is written in C, and emulates a 16 point gas detection system, with digital inputs for manual fan control and analog outputs for variable speed fan control. We will post the completed software within a few weeks after testing.

GPIO loading on the RPi itself is very light, considering the total of number if I/O points:

  • SPI Buss - 3 GPIO Pins (we use our own SPI routines to allow for any number of arbitrary GPIO lines to be used as Chip selects)
  • I2C Buss - RTC Address (0x6f), 4 Point Analog Output Address (0x60)
  • PI-SPI-DIN-8AI-20mA Module 1 - 1 GPIO Chip Select
  • PI-SPI-DIN-8AI-20mA Module 2 - 1 GPIO Chip Select
  • PI-SPI-DIN-8DI Module - 1 GPIO Chip Select
  • PI-SPI-DIN-4KO Relay Module x 3 - Only 1 GPIO Chip select required, the modules use the MCP23S08 GPIO expander with 4 addresses
  • RS485 - GPIO UART Rx and Tx and 1 GPIO pin for direction control

That is a total of 10 GPIO  (+ the I2C buss) used for a total of 40 I/O Points plus RS485 and Real Time Clock interface. There is a lot of room for expansion. The software flexibility of the RPi allows the control software to be written in C, or Python, in our case, we write in C.

From a cost perspective, the above system including the enclosure, power supply, all modules, DIN rails and the RPi 3 cost less than $600 which rivals any PLC on the market considering the number of I/O points.

Getting back to the automation application, the software design criteria is as follows:

  • Read 16 analog sensors
  • Each sensor has an alarm threshold fro LOW and HIGH
  • Relays will be designated as LOW and HIGH alarm relays
  • Digital inputs will manually operate (override) Relays 1 thru 8
  • Analog outputs will be used for variable speed fan control based on the number of analog inputs in alarm condition

A very simple setup, we will post the software as a future blog post when completed.

Update March 2018

VP Process Inc has created a launched on GitHub a new set of Python libraries for the PI-SPI and PI-SPI-DIN series of products.


 Node-Red support is now available.




Leave a comment

Please note, comments must be approved before they are published