//
//  Licensed to the Apache Software Foundation (ASF) under one or more
//  contributor license agreements.  See the NOTICE file distributed with
//  this work for additional information regarding copyright ownership.
//  The ASF licenses this file to You under the Apache License, Version 2.0
//  (the "License"); you may not use this file except in compliance with
//  the License.  You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.
//
:imagesdir: images/
:icons: font

== Apache PLC4X™: Universal Protocol Adapter for Industrial IoT

image::iot-lab.jpg[width=480, float=right]

[.lead]
Just like OPC-UA, but totally different.

We are currently probably experiencing the greatest advances in the way we process information in human history.

While these advances are taking over more and more parts of our world, it seems one large segment has continuously been missing out all the fun.

As everyone is talking about IoT, virtualization, BigData, FastData and machine-learning, the manufacturing industry has seemed to been stuck in a closed-source proprietary world.

Unfortunately the industry's Programmable Logic Controllers (PLCs) communicate with a large number of usually incompatible protocols.
This has made it difficult to create applications that integrate these systems with the new world.

This is where PLC4X™ comes in:

*It is our goal to create a set of libraries, that allow unified access to any type of PLC*

In general we are trying to achieve the same goal OPC-UA is trying to address, but we try to do this by going a completely different path.

While with OPC-UA every device has to be retrofitted with the ability to speak a new protocol and use a common client to speak with these devices,
PLC4X tries to provide a unified API by implementing drivers for communicating with most industrial controllers in the protocols they natively understand.

Each of these drivers is being implemented from the specs or by reverse engineering protocols in order to be fully Apache 2.0 licensed.

The major benefits of PLC4X™ over OPC-UA, from our point of view are:

- No need to modify existing hardware
- Activating OPC-UA support on existing PLCs greatly increases the load on the PLCs
- No need to pay for licenses to activate OPC-UA support

At first we will be concentrating on providing adapters for the most widely used protocol such as:

- icon:pause-circle[role=light-gray] BACnet
- icon:check[role=green] link:protocols/ads/index.html[Beckhoff ADS (TCP)]
- icon:wrench[role=yellow] link:protocpls/delta-v/index.html[Emerson DeltaV (UDP)]
- icon:wrench[role=yellow] link:protocols/ethernet-ip/index.html[EtherNet/IP (TCP)]
- icon:wrench[role=yellow] KNXNet/IP (UDP)
- icon:check[role=green] link:protocols/modbus/index.html[Modbus (TCP)]
- icon:check[role=green] link:protocols/opc-ua/index.html[OPC-UA (TCP)]
- icon:pause-circle[role=light-gray] Profinet
- icon:check[role=green] link:protocols/s7/index.html[S7-STEP7 (TCP)]
- icon:wrench[role=yellow] link:protocols/s7/index.html[S7-TIA (TCP)]

We are planning on providing support for the following programming languages:

- icon:wrench[role=yellow] C++
- con:wrench[role=yellow] C# (.Net)
- icon:check[role=green] link:plc4j/index.html[Java]
- icon:wrench[role=yellow] Python

Beyond implementing the pure adapters we have already implemented some of the planned integration modules to popular projects in the Apache IoT world such as:

[width=100%]
|===
a|image::apache_edgent_logo.png[width=80%,link=https://edgent.apache.org] a|image::apache_camel_logo.png[width=80%,link=https://camel.apache.org] a|image::apache_kafka_logo.png[width=80%,link=https://kafka.apache.org]
|icon:check[role=green] https://edgent.apache.org[Apache Edgent™ (Incubating)] |icon:check[role=green] https://camel.apache.org[Apache Camel™] |icon:check[role=green] https://kafka.apache.org[Apache Kafka™]

a|image::apache_nifi_logo.svg[width=80%,link=https://nifi.apache.org] a|image::apache_brooklyn_logo.png[width=80%,link=https://brooklyn.apache.org] a|image::apache_mynewt_logo.png[width=80%,link=https://mynewt.apache.org]
|icon:wrench[role=yellow] https://nifi.apache.org[Apache Nifi™] |icon:pause-circle[role=light-gray] https://brooklyn.apache.org[Apache Brooklyn™] |icon:pause-circle[role=light-gray] https://mynewt.apache.org[Apache Mynewt™]
|===

Hereby greatly reducing the barriers and the learning curve for creating industrial IoT applications.

=== Upcoming Conferences & Meetups

On this page we are listing options to attend talks and events around PLC4X.

[width="100%",cols="2,^2,2,^2,^3",options="header"]
|=========================================================
|Date |Location |Type |Event | Title
|18th June 2019 |Erfurt (GER) |Meetup |https://www.meetup.com/de-DE/iothde/events/260140057/[IoT Thüringen] |Industrie & IoT: Die perfekte Verbindung mit Flexibus & Apache PLC4X
|=========================================================

A full list containing also previous events can be found https://plc4x.apache.org/developers/conferences.html[here].

Looking forward to meeting you.

If you've got or found any events or talks we might be missing, please inform us on dev@plc4x.apache.org.
