Programmable Logic Controller Trivia: Used to be called Programmable Controller (PC). Then the Personal Computer got invented in the 1980s and the “L” got added to “PLC”.
Photo by Daniel Åhs Karlsson at at Wikimedia Commons (CC-BY-SA 3.0) https://commons.wikimedia.org/wiki/File:OTIS_GEN_2_Comfort_Roof_Taket_(Daniel_Åhs).jpg PLC Inside
who am I Jonas Neubert Software Engineer and Automation Engineer working in biotech industry from Germany, now living in Oakland, California followup to previous talks about automation, PLCs (check out all my previous talks here: https://jonasneubert.com/talks) Current Local Time: 12:55 AM why this talk
Table of Contents What is a PLC? Mini Tutorial Frequently Asked Questions https: // jonasneubert.com / pyconindia2020 @jonemo / [email protected] Q: What was THE acronym “PLC” for again? A: Programmable Logic Controller slides: contact: intro: part 1: part 2:
Step 2 Create a network (or RS-232) connection to your PLC - My PLC has IP address 192.168.1.9 - My laptop is configured with IP 192.168.1.8 and subnet mask 255.255.255.0 - Connected via Ethernet through a Netgear switch
Step 3 Program the PLC to do something (use the vendor software for this) I have already programmed my PLC to blink the traffic light. The programming software was a free download from the vendor’s website.
NON-PYTHON LANGUAGE AHEAD Ladder Logic ● Graphical programming language ● Very common for PLCs ● Used in this example ● You don’t have to understand it
Step 5 pip install [your-favorite-modbus-library] Package pymodbus modbus-tk pyModbusTCP MinimalModbus umodbus micropython-modbus ctmodbus License BSD LGPL MIT Apache 2.0 MPL 2.0 GPL GPL Latest Release Sep 2020 May 2020 Oct 2018 Aug 2019 Feb 2020 — Aug 2020 ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ TCP Serial Oldest and most popular, sparse docs Similar to pymodbus, sparse docs TCP only, simple API RTU & ASCII master only, detailed docs protocol only, Flask-like server API MicroPython port of modbus-tk security-focused REPL for pymodbus ✓ ✓ ✓ ✓ ✓ ✓ ✓ master ✓ ✓ ◑ ✓ ✓ ✓ slave Stars 1.1k 287 104 143 110 — 26 This is the one I will used in the example
Step 6 Read/write Modbus registers via the network from pyModbusTCP.client import ModbusClient c = ModbusClient("192.168.1.9") c.read_holding_registers(0) c.write_single_register(0, 3)
Process Data Process Parameters Sensor Signals Actuator Signals The Two Control Loops of “IIoT” Field Devices PLC Logic Python Code “Inner Loop” “Outer Loop” milliseconds per iteration interfaces to the physical world timing critical & safety critical logic release process might be regulated minutes to months per iteration interfaces to databases and APIs optimization & customization regular software release cycle
Process Data Process Parameters Sensor Signals Actuator Signals The Two Control Loops of “IIoT” Field Devices PLC Logic Python Code “Inner Loop” “Outer Loop” milliseconds per iteration interfaces to the physical world timing critical & safety critical logic release process might be regulated minutes to months per iteration interfaces to databases and APIs optimization & customization regular software release cycle
Q: Is Modbus the only PLC communication protocol? A: Modbus was the first protocol developed for this purpose, and there are many others: Ethernet/IP, OPC-UA, ProfiNET, Profibus, DeviceNET, EtherCAT, ADS, DirectNet, BACnet, ... see also: “List of Automation Protocols“ on Wikipedia https://en.wikipedia.org/wiki/List_of_automation_protocols
Q: Help! My Python script won’t connect to the PLC! Many problems encountered when working with PLCs are actually networking/connection problems: - Know the basics of networking: IP addresses, ports, subnet masks, etc - Firewalls and other security software - Your PLC might not be on the network at all!
Q: Why not just use a RaspberryPi/Arduino/CircuitPython Board? Out of the box, these devices do not meet the requirements that PLCs are designed for. ? Raspberry Pi is a trademark of the Raspberry Pi Foundation
Q: Can I simulate a PLC? - Write a Modbus slave using pymodbus - PLC Fiddle, (plcfiddle.com, free) web based playground for ladder logic - Free/trial version of a vendor software with simulator: CODESYS, Twincat, Rockwell CCW, Automation Direct DoMore - CODESYS for RaspberryPi (codesys.com, €50) Cross-platform IEC 61131-3 editor and runtime. The editor is free, the RaspberryPi runtime is €50. - OpenPLC (openplcproject.com, free) A IEC-61131-3 editor (written in Python) and runtime for various targets, including RaspberryPi. List of free software and training resources: https://www.reddit.com/r/PLC/comments/ehu2u3/read_first_how_to_learn_plcs_and_get_into_the/
Q: Can you* help me with my PLC question? When asking for help, always include this info: - Brand and model of PLC - PLC Programming Software - Communication protocol - Python code snippet A sketch and/or photo of your setup really helps! * This advice probably works with asking advice from anyone. Of course, you are welcome to contact me with questions about this talk! However, for most PLC questions (and most Python questions) I am far from an expert. Make sure to check the documentation and training materials from your PLC maker first, and also check out PLC related online forums like reddit.com/r/PLC, mrplc.com, plctalk.net.
What’s the URL for these slides again? https://jonasneubert.com/pyconindia2020 Sorry, I didn’t leave time for questions. The best ways to contact me are Twitter (@jonemo) and email ([email protected]) My last slide