Posts mit dem Label IoT werden angezeigt. Alle Posts anzeigen
Posts mit dem Label IoT werden angezeigt. Alle Posts anzeigen

Mittwoch, 4. Juli 2018

Home-IoT

Mit JavaScript und NodeMCU läßt sich schnell und einfach eine Home-IoT zusammenbasteln.


Die Elemente werden mittels Drag & Drop auf die Webseite gezogen (Framework webPCE.js), beschriftet und beliebig bunt angelegt. Mit dem RUN-Script {Home-IoT} kann nun eine Verbindung über WiFi zur NodeMCU hergestellt werden. Auch werden im RUN-Script die im Browser gezeichneten Elemente mittels JS programmiert. 


Bild 1: Beispiel einer Home-IoT-Anwendung mit webPCE.js und NodeMCU

Die Logik für die Steuerung der Öffner S1 + S2 an den Fenstern werden mittels den IEC-61131 Blöcken in sekundenschnelle erstellt. Im RUN-Script sind die entsprechenden Scripte automatisch durch den Klick mit der Maus auf das entsprechende Blockelement verbunden und werden im "RUN-Modus" automatisch gestartet. Fertig ist die Home-IoT.

Die auf dem Breadboard aufgebaute Schaltung zeigt sehr schön wie das alles funktioniert. Die Kosten für den kompletten Aufbau einschließlich aller Komponenten liegen bei etwa 25€.



Bild 2.: Das Breadboard mit der Node-MCU und der Spannungsversorgung  

Die Schalter "S1" und "S2" simulieren die Schließer an den Fenstern und die grüne  LED den Ausgang Q1, welcher am IEC-UND-Block (Bild 1, oben rechts) geschaltet wird. Solange die LED leuchtet ist alles ok. Sobald der Ausgang Q1 entfällt wird ein Alarm-Signal ausgelöst (nicht verdrahtet ). Der blaue Potentiometer dient als Temperatur-Simulation. Da der Pin "A0" an der NodeMCU einen Wert von 0-1024 auflöst, wird dieser mit dem IEC-SCALE-Block auf 0-70 Grad Celsius skaliert. 

Hier der Link zum Video:




Kursinfo:













Donnerstag, 3. Mai 2018

Objekte mit der Maus bewegen Teil II

😉 Neues 5-Tages-Seminar: Framework PCE.js aus der erfolgreichen Serie:

Neu: Kursinfo:

 

Objekte mit der Maus bewegen

Automatisieren mit dem Internet

  • Erstellen Sie dynamische Webanwendung mit node.js und dem Framework PCE.js.

  • Verwandeln Sie eine Webseite schnell zur aktiven HMI oder IoT-Netzwerk mit SVG-Objekten. 

  • Implementierten sie künstliche Intelligenz durch steuerbare Inline-Run-Code Scripte.

  • Erstellen Sie eine Funktionsdatenbank für die Objekt-Kommunikation. 

  •  Anwendungen aus dem Bereich PCE, wie z. B.  P&ID, Grafcet oder IEC61131 können mit dem Framework schnell und einfach integriert werden.

  • PCE.js zeigt eine völlig neue Idee, Webseiten aktiv und dynamisch zu gestalten.

  • Nachhaltiger Produktschutz durch Verschlüsselung der inline-Scripte in der Webanwendung.

  • Private-Server ermöglicht Unabhängigkeit zur kommerziellen Cloud.


Kurs-Voraussetzungen/Merkmale:

  • Ohne Fleiß kein Preis und Programmierkenntnisse in Java-Script oder C++/C#
  • Bestens geeignet für Umsteiger von C++/C# nach JS (ECMAScript)
  • Anwendungen nur über Klassenstrukturen, also ab ECMA6 (C++-Stil)
  • Keine HTML- und CSS-Kenntnisse erforderlich
  • Eigener PC mit vorinstallierter Software (Note.js, Google Chrom, Texteditor)
  • Kurseinstieg ab dem 3. Kurstag ist möglich

Kurs-Ziele:

  • Anwendung und Erweiterung des bestehenden Framework PCE.js
  • Handhabung einer dynamischen Webseite mit JS ohne HTML-Details
  • Servereigenschaften mit Node.js für PCE-Objekte erstellen
  • Anwendungen durch Klassenstrukturen (Vererbung) mit JS
  • SVG-Objekte erzeugen und mit der Maus bewegen
  • Dynamische SVG-Templates erstellen (DOM-Funktionen)
  • Ereignisgesteuerte Programmierung für die Menüführung
  • Inline-Scripte (Regeln) und deren Anwendung
  • Funktionsdatenbank und das Prinzip der KI-Verteilung
  • SVG-Templates im RUN-Modus testen
  • Selbständige Entwicklungstätigkeit einer Webapplikation mit dem Framework
  • Anwendungen im Internet via IoT und Industrie 4.0 für effizientes Projektieren mit dem Framework PCE.js



  • Bild 1: Das PCE.js Framework und seine möglichen Anwendungsgebiete

https://www.youtube.com/watch?v=2QHF3RGrGOo


Einleitung und Seminarbeschreibung

 

PCE steht für Process-Control-Engineering und gewinnt durch die Webtechnologie wieder mehr an Aufmerksamkeit und damit auch an Bedeutung für ein neues und modernes Publikum. Die Begriffe HMI (Human-Machine Interface) oder zu Deutsch MMS (Mensch-Maschine-Schnittstelle), stammen aus Zeiten der Visualisierung (SKADA) und sind Anwendungen für die industrielle Automatisierung, welche mittels eines Gerätes (CPE, nicht mit PCE zu verwechseln) und einer dort installierten Software die Verbindung zwischen Mensch und Maschine visualisieren und ermöglichen soll.
Eigentlich ist das traditionelle Thema HMI für Anwender mit Blick auf Web-Anwendungen nicht nur langweilig, sondern auch höchst kompliziert. Die Prozess-Steuerung, welche letztendlich durch die Kontrolle einer Applikation in einer SPS die entsprechende Sichert zur Anlage garantiert, ist ein ganz wichtiger Faktor zum Thema PCE und gestaltet die Kopplung zur HMI oft äußerst komplex und kostenintensiv.

Nun - solche Erläuterungen  und Spezifikationen (wie im oberen Abschnitt dargestellt) sind weiterhin gültig, aber nicht vollständig in das heutige Geschehen mit dem Internet einzugliedern, denn die Zeiten und damit auch die Anwendungen und deren Protokolle, haben sich in den letzten Jahren durchgängig und deutlich verändert.

Neue Geräte (IoT-fähige CPEs) können über die Web-Technologie und dem Internet nicht nur einen Service für Personen anbieten, sondern ermöglichen auch über einen Browser ein Smartphone oder ein Tablett als Web-Panel zu nutzen. Allerdings betrachten die meisten Anwender dieser Geräte nicht mehr unter dem Gesichtspunkt HMI, sondern allgemein als Webapplikation.  Und diese hat natürlich überwiegend kostenfreien Charakter.

Und damit sind wir beim Thema PCE.js-Framework angekommen. Wir, das sind die Kursteilnehmer und Referenten, vergessen alles was uns an Konzepte zur Erstellung einer Webseite für Industrieanwendungen (HMI/Iot) über HTML, CSS und XML (AJAX) erinnert.

Zielsetzung ist es, uns auf eine moderne und schlanke Webanwendung im  Sinne Web-PCE zu konzentrieren. Es handelt sich hier um die Umsetzung bewährter Techniken in  eine moderne Webtechnologie. Um das deutlich zu machen, handelt es sich nicht nur um die Erstellung einer dynamischen Webseite oder das Ein- und Ausschalten der Kaffee-Maschine über eine Cloud, sondern die Anwendung einer dynamischen Webseite mit JavaScript und Node.js sowie künstlicher Intelligenz (KI) durch sogenannte steuerbare inline-Scripte. Ähnlich wie beim Arduino - einfach, schnell und effizient!

So erarbeiten wir uns eine erste Webseite, welche es uns erlaubt eigene Objekte in ein Top-Menü zu organisieren, von dem aus wir dann die Objekte in die leere Projektseite (Web-Display)  mittels Maus plazieren. Eben - Objekte mit der Maus bewegen :) -  Die so gezeichnete Webseite wird dann Schritt für Schritt als Web-Applikation  vervollständigt und schließlich durch die Integration der Inline-Scripte steuerbar gemacht, sodass diese vorerst in einer Simulation getestet werden können. Nachdem der Test zufriedenstellend ist, wird die Anwendung auf dem Privatserver mit node.js getestet. Danach steht der Anwendung nichts mehr im Wege um damit ins Internet zu gehen

Damit wir diese Vision umsetzen und praktizieren können, brauchen wir kostenfreie Werkzeuge, ein wenig Geschick und ausreichend  Zeit mit ein wenig Geduld. Zudem benötigen wir eine klar beschriebene Aufgabenstellung für die Erstellung der eigenen Web-Applikation mit dem Framework PCE.js.

[PCE] Process Control Engineering (PCE-Kategorien, DIN EN 62424, DIN EN 60848, IEC 61131)
[CPE] Customer Premises Equipment nicht mit PCE zu verwechseln
[SCADA] Supervisory Control and Data Acquisition
[Regeln] Programmierungs-Anwendung der IoT-fähigen Geräte wie z. B. Flow-Diagramm, Grafcet oder IEC 61131

Samstag, 4. Februar 2017

Multikommunikation mit der IOT2020

☺☺☺☺Bei der Erstellung des Buches musste ich feststellen, dass meine Arduino-Kenntnisse nicht ausreichend waren um mit der IOT2020 eine etwas größere Aufgabenstellung zu lösen. Dazu musste ich die C++-Sourcen des EthernetClient der Intel-Version studieren. So manche Dinge sind doch nicht so blauäugig anzugehen, wie ich dachte 😭.

Kann man mit der IOT2000 nicht auf die SD-Karte schreiben?

Das hat mich sehr gewundert, dass ich mittels der Arduino-Welt nicht auf die SD-Karte schreiben konnte und musste gezwungenermaßen in die Eclipse-Welt umsteigen. Vielleicht ist es ja nur meine Unwissenheit oder gibt es da andere Erfahrungen?

Das Thema aus Kapitel 12 zeigt die schon industriereife Aufgabenstellung, welche nun endlich gelöst wurde:

12 Multikommunikation mit der SIMATIC IOT2000

Die serielle Verbindung über die Schnittstelle zur Arduino-IDE (COM) haben wir schon in Kapitel 8.2, speziell in Kapitel 8.2.1 für den SerialEvent kennen gelernt. Ich denke, die Anwendungen über die serielle Schnittstelle sind relativ einfach zu verstehen und findet sicherlich noch in manchen Anwendungen ihre Berechtigung. Für IoT sind proprietäre Protokolle und das Pollen von Daten allerdings nicht mehr aktuell. Abgesehen davon ist die lokale Entfernung der Teilnehmer über USB sehr begrenzt und zudem alle Teilnehmer über das Internet kommunizieren möchten. Hier wird die COM-Schnittstelle nur für die Simulation der Analogeingänge mit Ardu_IOsim der IOT2000 und zu Testzwecken angewendet.

Das Ziel muss nun sein, eine Kommunikation über Ethernet mit anerkannten Protokollen zu schaffen. Nur so können gewisse IoT-Dienste erreicht werden.
Damit IoT aus Sicht eines Projektes angewendet wird, betrachten wir eine etwas gehobene  Anwendung aus folgenden Komponenten:
  • WinCC mit Rezeptur und PLC (S7-1200®) über Profinet
  • Externe SPS (S7-1500) welche nicht im Tia Portal zum WinCC-Projekt konfiguriert ist
  • IOT2020
  • Webanwendung mit einem Browser

12.1 Aufgabenstellung

In Bild  12.1 ist das Deployment zu sehen. Wir erstellen ein TIA-Projekt mit einer Visualisierung (WinCC) und Rezeptverarbeitung auf einer S7-1200®. Die Daten der Rezeptur sollen auf einem Web-Browser dargestellt werden. Im System existiert zusätzlich eine S7-1500®, deren Analogwert (Sinus) im gleichen Web-Browser dargestellt werden soll. Die IOT2000 besitzt zudem eigene Analogeingänge, welche ebenfalls auf dem Web-Browser abgebildet werden. Diese Analogdaten sollen über Ardu_IOsim simuliert werden, da kein Shield zur Verfügung steht.
Die Anpassung der IP-Adressen wird in Kapitel 12.1.1 erklärt, da Sie sicherlich nicht die gleiche Konstellation über Ihren Router haben, wie das hier bei meinem PC der Fall war. Im Detail müssen nun folgende Punkte erfüllt werden:
  •  Ardu_IOsim wird mit Netbeans gestartet und soll die 6 analogen Eingänge der IOT2000 simulieren.
  •  Mit dem TIA Portal wird eine Visualisierung auf einem Panel-PC entwickelt, welche mit einer SPS (S7-1200®) eine Rezeptur anwendet. Daraus soll ein Rezeptwert über die IOT2000 auf dem Web-Browser des PCs übertragen werden.
  •  Die IOT2000 empfängt vom Panel-PC den Analogwert und sendet diesen auf den Webbrowser. Zudem bildet die IOT2000 ihre eigenen Analogeingänge auf dem Webbrowser ab. Zu guter Letzt verbindet sich die IOT2000 mit der externen S7‑1500® um dessen Analogwert ebenfalls auf dem Webbrowser abzubilden.

Bild 12.1  Deployment zur Aufgabenstellung


WinCC und die S7‑1200® werden auf einem PC mit PLCSIM simuliert, sonst müssten Sie ja einen Panel-PC und einen PC für den Webserver zur Verfügung stellen J. Aus diesem Grunde wird das Projekt in drei Teilen vorgestellt:
  1. Teil: Für den Webserver brauchen Sie einen PC und eine IOT2000.
  2. Teil: Sie brauchen für dieses Beispiel einen PC, eine IOT2000 und eine S7‑1500®.
  3. Teil: Sie brauchen einen PC mit PLCSIM TIA Portal V13 SP1 und eine IOT2000 

    12.2 Die Programmstruktur


     Bild  12.4 Die Programmstruktur zur Aufgabenstellung
In Bild  12.4 ist die Programmstruktur (Arduino) zu sehen. Dazu eine kurze Zusammenfassung:
  •  Die S7-1500® kommuniziert über Ethernet mit der IOT2020 und besitzt einen DB1, welcher über einen FB den Wert einer Sinuskurve darstellt. Diese soll als Real-Zahl im Webserver angezeigt werden. Dazu wird der Baustein plc.GetFloatFromDB angewendet.
  •  WinCC schreibt die Rezeptdaten auf die Festplatte. Gleichzeitig kommuniziert WinCC über eine C++-Schnittstelle, damit der Rezeptwert an die IOT2000 gelangt. Dazu wird der Baustein plc.GetFloatFromWinCC verwendet.
  • Die IOT2000 holt sich den Analogwert (C++) aus der S7‑1500® und gibt diesen an den Webserver weiter. Dazu wird der Baustein plc.PutMessage2Client verwendet.
  • Die IOT2000 liest ihre eigenen 6 Analogwerte und übergibt diese dem Webserver.
  •  Die IOT2000 empfängt die Rezeptdaten von WinCC (C++-Interface) um diese an den Webserver zu senden.
  • Der Webbrowser befindet sich auf dem Test-PC, welcher auch PLCSIM startet.
Damit dieses Beispiel realisiert werden kann wurde die PLC_IOT in der IOT2000 mit den Funktionen plc.PutMessage2Client und plc.GetFloatFromDB erweitert. So ist eine einfache Anwendung durch den Programmierer gewährleistet, ohne sich in die Server-Client-Technik einzuarbeiten.




Im Test  wurden zwei Browser und die Simulation gestartet, sowie die S7-1500 mit der Sinuskurve verwendet. Die Webseite wird jede Sekunde aufgerufen und die Zykluszeit der IOT2020 beträgt für dieses Beispiel im Schnitt ca. 15 Millisekunden.

Mittwoch, 11. Januar 2017

Absturz der IOT2000

IOT2000  ohne Shield testen

Bei den ersten Schritten mit der SIMATIC IOT2000 fällt auf, dass beide Sketche sich gleichzeitig im RUN befinden können. Das kann sehr Vorteilhaft sein, wenn die Arbeitsaufteilung stimmt und bedeutet, dass die Programme sich nicht in Konkurrenz befinden dürfen. Also entweder die Pins mit der Arduino- oder der Intel® -Welt programmieren, sonst gibt es einen gemischten Salat ☺.

Absturz beim Test der PLC in Kapitel 9 festgestellt

Die Anwendung der  PLC wird in Kapitel 9 vorgestellt. Hier ein Ausschnitt für das Lesen von analogen Werten.
9.2.5 Analogwerte lesen uns skalieren
Das Programm befindet sich auf der Buch-CD unter PLC_IOT200_Kap_9_2_5.



Hier wurde die Funktion von SCALE aus der FUP-Programmierung verwendet und angepasst. Die Parameter error und BIPOLAR (Bild  9.11), wurden nicht übernommen. Tritt ein Fehler auf, z. B. bei falscher Angabe der Grenzen (HI_LIM, LO_LIM), wird der Analogwert auf 0.0 gesetzt. Die Anwendung negativer Werte findet im Baustein nicht statt und kann vom Leser gegebenenfalls nachgeholt werden. In den meisten Fällen ist der negative Wert aus dem Rohwert ein Thema nach der Skalierung, wenn das bei einem Rohwert von 0-1023 überhaupt sinnvoll ist, da dieser nicht negativ werden kann.
Im Beispiel wurde plc.Scale für vier Bereiche skaliert. Jeder Bereich soll einem Ausgang (A0-A3) zugeordnet werden. In Bild  9.11 sind die vier Bereiche (Punkt 1 bis Punkt 4) durch die Schieber optisch dargestellt (diese haben keine Wirkung auf das Programm) und zeigen wie der aktuelle Wert (AI0) von 692 sich im dritten Bereich befindet und deswegen A2 gesetzt ist.

9.3  Das Absturz-Problem mit C++-Klassen bei der IOT2000
Wenn sie eine Klasse nicht im loop() instanziieren (Bild  9.13), dann darf die Klasse im Konstruktor keine Systemfunktionen aufrufen.

Wird im Konstruktor einer Klasse eine Systemfunktion benutzt, wie z. B. Millis(), dann hängt sich die IOT2000 nach dem Hochladen auf (Stand Jan. 2017), wenn die Instanz der Klasse global erzeugt wird.
In Bild  9.13 ist das Beispiel der Deklaration aus den Übungen zu sehen. PLC_IOT plc(&ioSim) wird vor dem loop() deklariert. Der Konstruktor initialisiert dabei die PLC und muss unter anderem auch die Timer zurücksetzen. In der Timerfunktion wird Millis() verwendet. Das würde zu einem Systemabsturz führen, da es Millis() anscheinend noch gar nicht gibt. Aus diesem Grunde wird die Klasse über den Konstruktor keine Systemfunktionen aufrufen. Diese Absicherung ist im folgenden Bild  9.14 zu sehen.

Hier wird das Attribut inRun auf false gesetzt bevor der Konstruktor wirksam wird und somit verhindert, dass die Methode InitPLC() keine Systemfunktionen anwendet (z. B. beim Timer). InitPLC() wird danach inRun auf true setzen, damit z. B. Millis() für die Timer im Anwenderprogramm verwendet werden kann.
Wenn also die Kommunikation zum Simulator ausfällt (Checksum zählt hoch) dann haben Sie vielleicht in einem Konstruktor eine Systemfunktion benutzt, obwohl diese noch nicht instanziiert war und das IOT2000 kennt die Programmanwendung nicht mehr.
Nun können Sie das Problem lösen, indem Sie grundsätzlich keine globalen Deklarationen vornehmen, sondern erst im loop() deklarieren. Das ist für die Programmierer welche z. B. mit Singleton arbeiten nicht möglich, denn diese sind instanziiert, bevor der loop() beginnt. Je nach Auffassung und Begründung gehen hier die Meinungen auseinander, aber abstürzen darf eine Hardware mit den besonderen Eigenschaften der Industrietauglichkeit, nach meiner Meinung nicht.
Übrigens: Bei einem Test auf dem Arduino-Board UNO mit diesem Problem, konnte kein Absturz festgestellt werden!

Vertrieb in Deutschland zum Buch gesucht!





Mittwoch, 4. Januar 2017

Ist die IOT2000-Arduino kompatibel zur Arduino-Welt?

IOT2000 und die Arduino-Welt

Bei der Erstellung meines neuen Buches zur IOT2000 ist mir zur Programmierung der Arduino-Anwendung aufgefallen, dass die Programme, welche auf einem UNO-Board entwickelt wurden, nicht ohne Anpassungen fehlerfrei übersetzt wurden. Dazu nachfolgend ein Ausschnitt aus dem Buch zu Kapitel 8:


8    Der Arduino-Sketch in der SIMATIC IOT2000 für Ardu_IOsim

Die Anwendung der IO-Simulation Ardu_IOsim hat den Vorteil, dass vorerst keine digitalen und analogen Eingänge verdrahtet sein müssen und der Sketch trotzdem getestet werden kann, bevor man sich ein passendes Shield für die IOT2000 suchen muss.

Der Programmzusatz für den Test mit Ardu_IOsim muss für das eigene Anwenderprogramm so gering wie möglich sein. Die Programmierung des Sketchs darf auch nach dem Einsatz eines Shields für die digitalen und analogen Eingänge keine Programmänderung erfordern.
Diese Forderung ist mit einem kleinen Trick ohne großen Aufwand erfüllbar. Betrachten wir die kleine Softwarestruktur zum Sketch in Bild  8.1.


























Das Anwenderprogramm verbindet sich mit einem #include “Ardu_IOsim.h“ mit der Klasse Ardu_IOsim_PLC.cpp und kann so die Eigenschaften dieser Klasse anwenden. Dies ist aber nur dann der Fall, wenn der Anwender dies wünscht. Das wird durch die #define _IOSIM_ festgelgt. Ist das der Fall, dann wird innerhalb serialEvent die Schnittstelle zu Ardu_IOsim (PC) aktiv und kann für das Anwenderprogramm nicht mehr genutzt werden. Auch werden innerhalb des Anwenderprogrammes bestimmte #define-Anweisungen aktiv (nicht im Bild abgebildet). Existiert das Define _IOSIM_ nicht, wird das Anwenderprogramm ohne die Simulation abgearbeitet. Wie sieht das nun in der Praxis aus?
In Bild  8.2 ist das Grundgerüst für das Einbinden der Simulation ersichtlich. Leider verfügt der Editor über keine Zeilen-Nummerierung (Version 1.6.9). Dazu nun folgende Erklärungen:
Die #define _IOSIM_-Anweisung sorgt dafür, dass die Zeilen nach #ifdef _IOSIM_ ausgeführt werden. Soll die Simulation abgeschaltet werden, so ist die Zeile #define _IOSIM_ in Kommentare zu setzen (//#define _IOSIM_). Im Falle der Simulation wird mit Ardu_IOsim iosim; die Instanz der Klasse Ardu_IOsim instanziiert und die darauffolgenden #define-Anweisungen bedeuten, dass die im Programm üblichen Funktionen digitalRead, analoRead und pinMode umgeleitet werden in iosim.DigitalRead, iosim.AnalogRead und ioSim.PinMode. Somit können in der Anwendersoftware diese Anweisungen wie gewohnt benutzt werden.



Im setup werden wie gewohnt die Pin konfiguriert. Hier im Beispiel sind die Pins 2 und 3 als Ausgänge deklariert. Danach wird die serielle Schnittstelle auf 115200 Baud eingestellt und falls Zeichen vorhanden sind, gleich der Buffer geleert.
Der loop zeigt ein kleines Beispiel zur Anwendung der digitalen und analogen Befehle. Ist die Simulation aktiv, werden die digitalen und analogen Eingänge simuliert, ohne dass der Programmierer der Anwender-Software etwas dazu berücksichtigen muss. Im Beispiel wird der digitale Pin_2 auf den digitalen Pin_3 kopiert und der Ana_0 entsprechend bei >=127 der Pin_3 gesetzt oder gelöscht.

Die Funktion serialEvent  ist eine Systemfunktion und wird automatisch aufgerufen, sobald sich Zeichen an der seriellen Schnittstelle befinden. Nur hier muss die #ifdef _IOSIM_-Anweisung eingefügt werden, damit die Methode iosim.SerialEvent nur dann aufgerufen wird, wenn _IOSIM_ auch tatsächlich definiert worden ist.
Damit soll das Prinzip über die Anwendung einer IO-Simulation programmtechnisch ausreichend erklärt sein.
Aufgefallen ist mir, dass das Programm Ardu_IOsim, welches auf dem Arduino UNO entwickelt wurde nicht in der SIMATIC IOT2000 fehlerfrei übersetzt wurde. Damit ist die IOT2000 nicht unbedingt 100% kompatibel zum Arduino-Konzept!

Aus diesem Grunde wurde die Software für die Anwendung in der SIMATIC IOT2000 angepasst. Der Arduino-Kenner sollte sich also nicht wundern, wenn hier einige cast gesetzt wurden, die sonst nicht verwendet werden. Auch die Register zum Atmel-Prozessor (z. B. DDRD, PORTA usw.) wurde durch Funktionen künstlich ersetzt. Zudem auch serialEvent() auch nicht funktioniert, sind einige Anpassungen notwendig (naja - ist ja auch kein Arduino-Board!).
So jagt eine Überraschung die andere.
Im folgenden Kapitel 8.1 wird die IOT2000-Arduino-Version vorgestellt. Die ursprünglich entwickelte Arduino-Version für das UNO-Board befindet sich auch auf der Buch-CD.
Besonders interessant ist, dass beide Module (Arduino-IDE und Eclipse) gleichzeitig lauffähig sind! Das kann zu Überraschungen führen, wenn die Programme bezüglich der Pins konkurrierend sind J.






Montag, 19. Dezember 2016

SIMATIC IOT2000


Was und wie kann ich mit dem neuen Gateway SIMATIC IOT2000 anfangen?

Diese Frage habe ich mir mehrmals gestellt und bin vorerst zu keinem Ergebnis gekommen. Nach einigen Untersuchungen am Objekt konnte ich feststellen, dass ich wohl ein Galileo-Board in den Händen hielt. Das hat mich nicht sehr überrascht, denn das Galileo-Board gibt es ja schon seit 2014 mit der Integration einer Arduino-Schnittstelle. Wie und was kann ich nun mit dem IOT2000 anfangen, um nicht das was es bereits in der Galileo-Welt schon gibt, noch einmal neu zu erfinden?

Die Antwort ist mein neues Buch:



Nachfolgend einige Seiten aus dem Buch. Weitere Ausschnitte folgen noch :)


1.1 SIMATIC IOT2000

Viele reden von Industrie 4.0, deren Idee es ist, unter anderem Daten in der Cloud über die weltweite Vernetzung für verschiedene Nutzer zur Verfügung zu stellen. Das Problem ist nicht die Erfassung der physikalischen Daten, sondern deren Portierung und Darstellung über ein Netzwerk in eine entsprechende Internet-Struktur. Beispielhaft liefert ein Barcode eine Information über ein Objekt (Größe, Gewicht, Farbe, Preis usw.) und kann so als gespeichertes Objekt innerhalb eines Netzwerkes Informationen weitergeben.
Eine Lösung bietet das Kommunikationsprotokoll MQTT[1], welches sich bereit in der Anwendung IoT etabliert hat und bietet bessere Möglichkeiten der Umsetzung als das http[2]-Protokoll.
Ganz anders sieht es bei der Sensorik aus, diese liefern nicht nur Daten wie Temperatur, Feuchtigkeit usw., sondern können zudem Funktionalität übermitteln und Aktionen einleiten. So schaltet sich z. B. eine Heizung ein, wenn die Temperatur unter den Sollwert fällt. Aufgrund der verschiedenen Systeme und Darstellung der physikalischen Werte entsteht ein riesiges Funktionsbündel. Dazu gehören z. B. die Identifikation, Adressierung und Skalierung der Daten und ein ganz wichtiges Argument ist die Informationsverarbeitung der eingebetteten  Systeme (Embedded). Und da sind wir schon beim SIMATIC IOT2000 (im weiteren Buchverlauf auch häufig als IOT2000 bezeichnet) angekommen.

Es stellt sich damit die Frage: „Wie kommen meine physikalischen Daten in die IOT2000 und wie muss ich diese verwerten und kalibrieren, um diese dann wieder in einem Netzwerk zur Verfügung zu stellen"?




[1] [MQTT] Message Queue Telemetry Transport
[2] [http] hypertext transfer protocol

Ein Gateway mit der Möglichkeit verschiedene Datenquellen zu lesen, zu schreiben und auch zu erzeugen wäre eine denkbare Lösung. Z. B. eine SPS kann von der Datenquelle lesen und Daten erzeugen. Experten können sich deren Programmierung gut vorstellen. Auch die Vernetzung der SPS innerhalb eines bekannten, lokalen Netzwerkes ist gut denkbar. Die Daten oder sogar Funktionalität in einen Cloud zu senden wird dagegen für den SPS-Programmierer schon schwieriger, sich vorzustellen und damit auch umzusetzen. Noch komplexer wird der Gedanke, Daten aus anderen Netzwerken und deren Geräte zu erfassen, auszutauschen und letztendlich in einer Cloud als Service zur Verfügung zu stellen.

Die Sensorik und die Kommunikationsfähigkeit, sollten mit einer minimalen Informationsverarbeitung möglich werden.

 ....

8.1 Der Entwurf von Ardu_IOsim
Es soll ein Programm geschrieben werden, welches die digitalen Eingänge Pin2-Pin13 und die analogen Eingänge A0-A5 des Arduino-Boards simulieren soll. Die Kontrolle zum Arduino-Board soll mit der seriellen Schnittstelle (USB) erfolgen. Dafür müssen je ein Programm für den PC und ein Programm für das Arduino-Board geschrieben werden. Für den PC wird das Java-Programm und das C++-Programm für den Arduino erstellt. Die Anwendung auf dem PC wird durch eine kleine Grafik (JavaFX Scene Builder) unterstützt, welche es erlaubt die Schnittstelle zum Arduino zu kontrollieren. Die digitalen und analogen Eingänge für den Arduino können so per Klick zum Board gesendet werden, welches nun mit seinem Anwenderprogramm auf die simulierten Daten reagiert und diese dann auf einer Webseite präsentiert.
Das Arduino-Projekt bekommt eine Library, welche zum beliebigen, eigenen Projekt eingefügt wird. Der Programmierer kann so mittels #define-Anweisung zwischen Simulation und echten Eingängen unterscheiden.


Bild  8.1 Das Programm Ardu_IOsim kann für das SIMATIC IOT2000 und dem Arduino/Genuino eingesetzt werden
....

8.1 Der Datenaustausch zwischen Arduino/IOT2000 und Ardu_IOsim

Der Arduino/IOT2000 dient als Server und der PC als Client. Das bedeutet, dass der PC seine Aufforderung an den Client sendet und dieser Antwortet. Mit der Aufforderung des Client werden die digitalen und die analogen Eingänge im ASCII-Format gesendet (Bild  8.2). Im Bild sind die Eingänge Pin_0, Pin_1, Pin10 und Pin_11 als Eingänge deklariert. Die restlichen Pins sind Ausgänge und können bei dieser Deklaration vom Anwender nicht gesetzt werden.
Die Datenrichtungen der einzelnen Pins sind für die Darstellung im Programm Ardu_IOsim wichtig, damit diese richtig angezeigt werden und die Eingabemöglichkeit zugeordnet werden können. Dafür werden die Datenrichtungsregister DDRD-DDRC gesendet. Für die Zustände der Ports auf True oder False sind die Register Port_D bis Port_C zuständig. Im Programm Ardu_IOsim werden die letzten Ports DDRC und Port_C nicht ausgewertet. Das kann dann der Leser erweitern, falls er die analogen Pins ebenfalls als digitale Eingänge verwerten möchte. Das Zusammensetzen der Port-Signale übernimmt die Funktion SerialEvent, welche dann noch später zur Programmierung erklärt werden wird.
Damit ist die Philosophie für den Datenaustausch dieser proprietären Verbindung prinzipiell erklärt.
Wenn die SIMATIC IOT2000 Daten zur Verfügung stellen soll, ist diese als Server zu programmieren (Empfehlung). Sie wird also nie von sich aus irgendwelche Daten senden, sondern wartet bis der Client (PC) seine Aufforderung dazu sendet.
Welches Protokoll dazu verwendet wird und wie die Vernetzung mit anderen SPSen funktionieren soll, wird in Kapitell 11 vorgestellt.