Slide 1

Slide 1 text

Jonas Neubert Python & PLCs A STEP BY STEP GUIDE PYCON INDIA 2020

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

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”.

Slide 4

Slide 4 text

LC Inside PLC Inside PLC Inside PLC Inside PLC Inside PLC Inside

Slide 5

Slide 5 text

PLC Inside

Slide 6

Slide 6 text

PLC Inside PLC Inside PLC Inside PLC Inside

Slide 7

Slide 7 text

By Dusso Janladde at at Wikimedia Commons (CC-BY-SA 3.0) https://commons.wikimedia.org/wiki/File:Nitro_coaster.jpg PLC Inside

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

PLC Inside

Slide 10

Slide 10 text

PLC Inside

Slide 11

Slide 11 text

PLC Sensors (Input) Actuators (Output)

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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:

Slide 14

Slide 14 text

Part 1: Mini Tutorial: Blink Traffic Signal

Slide 15

Slide 15 text

Step 1 Figure out what type of PLC you are working with My PLC is model P1-540 from Automation Direct

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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.

Slide 18

Slide 18 text

NON-PYTHON LANGUAGE AHEAD Ladder Logic ● Graphical programming language ● Very common for PLCs ● Used in this example ● You don’t have to understand it

Slide 19

Slide 19 text

Step 4 Assign PLC program variables to Modbus registers

Slide 20

Slide 20 text

Step 4 Assign PLC program variables to Modbus registers “master” client “slave” server Modbus protocol over Ethernet Ladder Logic

Slide 21

Slide 21 text

Step 4 Assign PLC program variables to Modbus registers https://en.wikipedia.org/wiki/Modbus#Modbus_object_types

Slide 22

Slide 22 text

Step 4 Assign PLC program variables to Modbus registers BlinkColor (1=Red, 2=Yellow, 3=Green) First holding register Modbus address: 40001 Python index: 0 BlinkIntervalMS Second holding register Modbus address: 40002 Python index: 1 https://en.wikipedia.org/wiki/Modbus#Modbus_object_types

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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)

Slide 25

Slide 25 text

Step 1: Figure out type of PLC Step 2: Create network connection Step 3: Program PLC Step 4: Assign Modbus registers Step 5: pip install [your-favorite-modbus-library] Step 6: Read/write Modbus registers

Slide 26

Slide 26 text

Part 2: Frequently Asked Questions

Slide 27

Slide 27 text

Q: Can I program my PLC in Python? A: No. 1) Not an IEC-61131 language 2) Not exactly made for realtime execution

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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!

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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/

Slide 34

Slide 34 text

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.

Slide 35

Slide 35 text

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