Framework RAD.web Vorstellung des Frameworks - Rapid Application Development for web services - db::solutions
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
db::solutions Framework RAD.web® Vorstellung des Frameworks Rapid Application Development for web services db::solutions Dirk Brinkmeier
db::solutions Das Framework RAD.web® – Die universelle IoT Plattform • Eine Softwarelösung auf Basis modernster und freier Internettechnologien • Eine Grundlage für die Vernetzung und die Verteilung von Prozessdaten zwischen verschiedenen Maschinen oder Funktionsbaugruppen in einer verteilten Produktionsumgebung • Eine kompakte Lösung für die Automatisierung, der Prozessleittechnik (SCADA) und der Visualisierung (HMI) von Daten • Erweiterung der Leistungsgrenzen der bisherigen Implementierung • Ergänzung des Funktionsumfangs um moderne Kommunikations-Schnittstellen auf Basis aktueller Internettechnologien • Einfache Erstellung von Progressive Web Applikationen für native und effektive Benutzerschnittstellen (z.B. HMI, etc.) ohne Abhängigkeiten zu Front-End-Frameworks (Vue, React, Angular, …) • Keine fortlaufenden Migrationsaufwände an aktuelle Versionen von Front-End-Frameworks • Native JavaScript Component Library mit direkter Integration in die Applikation unter Nutzung von aktuellen HTML Standards • Einfache Migration bestehender Web-Applikationen oder Einbindung bestehender Applets oder Web-Assemblies • Alternative um die die Kette der Abhängigkeiten eines Windows Ökosystems zu vermeiden • Eine Lösung ohne Lizenzkosten und ohne klassische Serverumgebung Dirk Brinkmeier Framework RAD.web® 04.10.2020 2
db::solutions Grundgedanken bei der Auslegung des Framework • Kapselung aller Betriebssystemabhängigkeiten auf möglichst hoher Abstraktionsebene • Nutzung definierter Schnittstellen zur Anwendungsschicht über dedizierte Ereignismethoden • Hohe Konfigurierbarkeit des Verhaltens der Basisapplikation, d.h. Auswahl der aktiven Module des Frameworks, Skalierung der Module, etc. • Implementierung flexibler Verwaltungsklassen für immer wieder kehrende Aufgaben (Logging, Timer, Tasks, Threads, etc.) • Leistungsfähiges Webserverbackend das sich über einfach anzuwendende APIs an den Anwendungsfall der Applikation anpassen lässt • Unterstützung moderner Kommunikationsstandards (TCP/IP, SSL, HTML5, REST, JSON, MQTT, etc.) • WebSocket-Implementierung für Synchronisation des Frontends in Echtzeit • Vollständige CGI-Unterstützung zur Einbindung von PHP, Perl, Python und Bash- Skripten (z.B. Python-KI-Module) • Und noch vieles mehr…. Dirk Brinkmeier Framework RAD.web® 04.10.2020 3
db::solutions Fullstack – Die RAD.web® Architektur SPA „Single Page Applikation“ Architektur • SPA angelehnte Architektur (aber nicht Client darauf fixiert) • Native Browserunterstützung bzw. Browser REST JS jQuery HTML5 CSS WebSockets unabhängig • Keine Browser-Plugins bzw. spezielle Features notwendig • Standard HTML Code, keine proprietären HTML Web-Komponenten-Klassenframework HTML Tags • Server Progressive Web Applikation u.a. über JSON-Manifest Datei RAD.web® Server-Plattform • Einfache Integration in bestehende Lösungen Responsive App-Look-and-Feel über alle Plattformen Dirk Brinkmeier Framework RAD.web® 04.10.2020 4
db::solutions Infrastruktur – Einfache Integration ohne Abhängikeiten Microsoft Hyper-V oder VMWare Hostsystem Windows Server VM 1 Windows Server VM 2..n Linux-Server VM Docker VM Datenbankserver Windows Anwendungen Framework RAD.web® MQTT Message-Broker MSSQL, Oracle, … Windows Services HTTP/REST/MQTT/WS … Intranet Internet Maschinennetz HMI Cloudanbindung Maschine 1..n Maschine 1..n Officeanwendungen Predictive Maintenance Dirk Brinkmeier Framework RAD.web® 04.10.2020 5
db::solutions Orchestrierung – Intranet, Internet, RAD.web® und MQTT Intranet Internet Framework RAD.web® Message-Broker Cloud-Anbindung Zentrale Funktionen Informationsverwaltung IoT Datenpool „Businesslogik“ „Event-Manager“ „Digitaler Zwilling“ MQTT MQTT HTTP/REST MQTT WebSockets HMI / Maschinen / Applikationen / Bedienoberflächen Protokoll nach Verwendungszweck etc. Kein klassisches Datenbusmodell Industrial IT Dirk Brinkmeier Framework RAD.web® 04.10.2020 6
db::solutions Prozesskommunikation in Echtzeit – Multithreading Topic 1 MQTT Prozessdaten MQTT Client Message-Broker Visualisierung und HMI Topic 2 „Eclipse Mosquitto“ Applikationen MQTT MQTT Cloud-Anbindung Topic 3 Predictive Maintenance Topic n MQTT … Im Framework parallelisiert, im Broker serialisiert, d.h. nicht deterministisch aber Framework zugesicherte Übertragung RAD.web® Webrequest 1 HTTP/REST/WebSockets Webserver Im Framework parallelisiert und durch Webrequest 2 direkte Kommunikation voll Echtzeitfähig Webrequest 3 HTTP/REST/WebSocket Webrequest n Dirk Brinkmeier Framework RAD.web® 04.10.2020 7
db::solutions RAD.web® Serviceprovider – Webrequest vs. RPC Client Webrequest mit URI-Parametern Beispiel http://…/request.html?prepare=yes&filter=test&domain=All&type=All RAD.web® bietet als RPC Serviceprovider RAD.web® Serviceprovider Funktionalität wie gRPC oder WCF, … Server Registrierter Eventmethodenaufruf Beispiel: „RPC-Referenz“ request.html Anmerkung: gRPC nutzt HTTP/2 und WCF basiert auf HTTP/1.1 bzw. SOAP 1.1 als Transport-Protokoll Programmcode / Aktion Beispiel: „RPC-Methode“ void TModul::getResponse(…) {}; Dirk Brinkmeier Framework RAD.web® 04.10.2020 8
db::solutions WebSockets – Das universelle Message System Browser 1 Transparente Anbindung im RAD.web® Austausch von Telegrammen Broadcast (an alle Clients) mit Inhalten im JSON Format WebSockets ws: und wss: über TCP/IP Browser 2 über Eventmethoden Browser X Framework RAD.web® Bidirektional (Request/Response Modell) Browser Dirk Brinkmeier Framework RAD.web® 04.10.2020 9
db::solutions Anwendungsfall – Kommunikation im Produktionsumfeld HMI 1 HMI 2 HMI 3 Cloud-Anbindung Keine Datenbankzugriffe Kapselung der Schnittstellen HTTP/REST HTTP/REST über RESTful APIs und MQTT MQTT WebSockets WebSockets Framework RAD.web® Message-Broker MQTT HTTP/REST ¹ HTTP/REST ¹ MQTT MQTT Maschine A Maschine B Applikation A Applikation B Applikation C ¹) Beckhoff® ADS in Arbeit, Siemens® MPI/DP in Vorbereitung Dirk Brinkmeier Digitale Geschäftsmodelle im Maschinenbau 04.10.2020 10
db::solutions Basiskomponenten des Frameworks – Teil 1 Webserver Systemobjekte ▪ Hochgradig skalierbarer und leistungsfähiger Webserver ▪ Einfache Verwaltung von Threads ▪ Leistungsfähige Web-Session („View-State“) Verwaltung auch unter ▪ Timer und Timeoutverwaltungsklassen Hochlastbedingungen implementiert über Eventmethoden ▪ WebSocket-Unterstützung inkl. Client-Library (Reconnect, etc.) ▪ Basisklassen für zyklische ▪ Unterstützung von CGI-Anwendungen (PHP, Perl, Python, Bash) Taskbearbeitungen ▪ Frei programmierbare und bidirektionale JSON- und REST-APIs (GET/POST) ▪ Universelle ▪ Direkte Datenversorgung von Tabellenansichten aus JSON-APIs Dateiverarbeitungsmethoden ▪ Verarbeiten von AJAX-Postbacks über Events in der Applikation ▪ Frei konfigurierbare und performante ▪ Grafische HTML Komponenten werden direkt aus der Applikation generiert Logging-Klasse ▪ Dynamische Erzeugung von HTML Content aus Eventmethoden Datenbanken Konvertierungsklassen ▪ Native und hochgradig performante ▪ Base36, Base64 und URL Kodierungs- und Dekodierungsmethoden Anbindung an PostgreSQL Server ▪ Native und schnelle UTF-8, UTF-16, Widestring und Multibyte ▪ Nutzung von lokalen SQLite3 Datenbanken Konvertierungsmethoden ▪ Universelle Anbindung verschiedener ▪ Hoch performante Codepageconvertierungsmethoden Datenbanktypen ▪ Transparentes ARM/I86 Endian Handling ▪ Mächtige Variantenklasse ▪ Parser für HTML- und JSON-Daten ▪ Einfach zu nutzende Table-, Header- und Rowset-Klassen Dirk Brinkmeier Framework RAD.web® 04.10.2020 11
db::solutions Basiskomponenten des Frameworks – Teil 2 Formatierung Internet-Hilfsklassen ▪ Basis für die Lokalisierung der Applikation ▪ FTP und HTTP(S) bzw. JSON Daten- und ▪ Generische Datumsformatverwaltung optimiert für Internetformate Dateitransfer ▪ MD5, SHA256, SHA512 Hashmethoden ▪ Datenkompression mit GZIP Unterstützung ▪ Auf OpenSSL aufsetzendes Kryptografiemodul ▪ Umfangreiche HTML und JavaScript Bibliothek ▪ MQTT-Client mit sehr einfach anzuwendender Programmierschnittstelle Systemeinbindung ▪ Ausgelagerte Prozesse mit Überwachung auf Zeitüberschreitung starten Bildverarbeitung ▪ Einfache Einbindung von Bash, Python oder Perl Scripts ▪ Bildverarbeitung von JPEG und PNG Dateien ▪ TCP/IP-Socket-Verwaltungsklassen, inkl. ▪ Skalierung und Modifikation von Kontrast, Helligkeit und Farbsättigung TLS Unterstützung ▪ Dynamisch gerenderte Bilddaten über Zeichenroutinen ▪ Hot-Plug- bzw. Plug-and-Play- Überwachungsklassen ▪ Verwendung von GPIO Pins (z.B. RASPI, Sonstiges NVIDIA Jetson) ▪ Benutzerkontensteuerung bzw. Mandantenverwaltung ▪ Rekursives GNU Buildsystem auf Autotools Basis ▪ Fourier-Datenanalyse Dirk Brinkmeier Framework RAD.web® 04.10.2020 12
db::solutions Schichtenmodell des Frameworks Betriebssystemschicht (Ubuntu/Debian/SuSE/…) RAD.web® Basisapplikation als Linux-Dämon Logging Timer Timeouts GPIO/RS232 Sockets Threads Sessions Webserver System-DB Applikations-DB MQTT (Multithreaded) SQLite3 (Benutzer, etc.) PostgreSQL Client APIs und Events Applikationsschicht Dirk Brinkmeier Framework RAD.web® 04.10.2020 13
db::solutions API des Webservers zur Applikation Webserverinstanz Prepared Web-Request (Multi-Threading-Model vs. Node.js Single-Thread) application.addWebPrepareHandler(&app::TExample::prepareWebRequest, this); POST-Datenverarbeitung von AJAXed Requests application.addWebAction("OnButtonClick", &app::TExample::onButtonClick, this, WAM_SYNC); Virtuelle URLs und RESTful APIs application.addWebLink("config.json", &app::TExample::getExampleConfig, this, true); Web API Datenempfang application.addWebData("reordered.json", &app::TExample::setReorderedData, this, WAM_ASYNC); Virtuelle Verzeichnisse application.addWebLink("thumbnails/", &app::TExample::getBitmap, this, false); Dynamischer Content application.addWebToken("MSG_APPLICATION_LOG", "-"); Gerenderte HTML Komponenten direkt aus den Quelltext der Applikation Hautmenü, Kontextmnü, Buttons, Dropdowns, etc. Dirk Brinkmeier Framework RAD.web® 04.10.2020 14
db::solutions Applikation & Basisframework • Instanziieren der Applikationsmodule • Initialisieren der Basisapplikation • Kontrolliertes Ausführen der Applikationsmodule durch das Basisframework • Kontrolliertes Beenden aller Module und zurück rollen aller offenen Ressourcen in Verwaltung durch das Basisframework Das Framework verwaltet alle Ressourcen der Applikation Dirk Brinkmeier Framework RAD.web® 04.10.2020 15
db::solutions Modulverwaltung und Ressourcemanagement Application Modul 1 int TModule::prepare(); Instanzierung von Objekten, Initialisierung von Variablen, … Sequentieller Aufruf über die Applikation int TModule::execute(); Aktiver Modulcode void TModule::unprepare(); Ausführen von „Last will and testament“ Aktionen Umgekehrte Reihen- folge beim Aufräumen void TModule::cleanup(); Bereinigung von Ressourcen, warten auf Beendigung asynchroner Aktionen Modul 2 int TModule::prepare(); Modul 3 Instanzierung von Objekten, Initialisierung von Variablen, … Modul 4 Modul n … Basisklasse Dirk Brinkmeier Framework RAD.web® 04.10.2020 16
db::solutions Konfiguration des Frameworks Webserverinstanz [AppWebServer] Basiseinstellungen Enabled = yes [Global] Codebeispiel UseHttps = no Port = 8099 RunOnce = yes DocumentRoot = /mnt/DBHOMESRV/lost+found/wwwroot/ RunAsUser = dirk UploadFolder = /home/dirk/upload/ LoggingFolder = /var/log/dbApps/base/ AllowedFromIP = 0.0.0.0;127.0.0.1;::1;fd66:1967:0:1;192.168.200;192.168.201 DataFolder = /usr/local/dbApps/ RestfulAPIRoot = /rest/ Description = Reference Music Player DisableVfsGZip = no PIDFile = /tmp/base.pid VfsDataDeleteDelay = 1000 TempFolder = /tmp/ IndexPage = index.html;index.htm;home.html;home.htm UseTerminalInput = no CertFile = /etc/dbApps/base/certs/server.crt CyclicFlushDelay = 30000 KeyFile = /etc/dbApps/base/certs/server.key Locale = en_US.UTF-8 DiffieHellmanFile = /etc/dbApps/base/certs/dh.pem UseTempDirAsPwd = no TLSCipherPriority = NORMAL:-MD5:-VERS-SSL3.0:+VERS-TLS1.1:+VERS-TLS1.0 NiceLevel = 0 TokenDelimiter = [[X]] Affinity = -1 SessionDeleteAge = 180000 UseDongle = yes RequestDeleteAge = 30000 DisableSwappiness = yes ClientRefreshInterval = 5 HeapDeallocateDelay = 0 JavaScriptRefreshTimer = 2000 Handles = 8192 Credentials = admin:12345:3 AuthRealm = dbApplications (c) 2015 [MimeTypes] SessionLogonExpired = 0 SystemMimeTypeFile = /etc/mime.types GreeterURL = /signin.html EnableCaching = yes [GPIO] MinimizeHTML = no Enabled = no VerbosityLevel = 1 Filesystem = /sys/class/gpio/ Debug = no AllowManifestFiles = true [Webserver] Multithreading = yes Enabled = yes SessionStore = /usr/local/dbApps/sessions/ DigestAlgorithm = MD5 [Sockets] Enabled = yes Konfigurationsdateien MaxSessionCount = 512 [Homepage] [Database] Reference = AppWebServer UseDefaultDatabase = yes Directory = /home/dirk/www/ DefaultDatabaseName = application Alias = /home/ DefaultDatabaseType = PGSQL Redirect = Enabled = yes [Internet] ExecCGI = no UseMQTTClient = yes ScaleJPG = 0 MQTTConnectionName = application UseExif = no Dirk Brinkmeier Framework RAD.web® 04.10.2020 17
db::solutions Loggingklasse des Frameworks Konfiguration • Threadsafe • Einfache Konfiguration von Dateigröße, Backup und Aufräumen veralteter Logdateien • Konfigurierbarer Cache für hohe Performance • Direkter Zugriff auf FIFO der letzten Logeinträge • Alle Exceptions werden vom Framework abgefangen und in separater Logdatei protokolliert Inhalt einer Logdatei Verzeichnis Dirk Brinkmeier Framework RAD.web® 04.10.2020 18
db::solutions HTML Komponenten aus der Applikation Dirk Brinkmeier Framework RAD.web® 04.10.2020 19
db::solutions Mandanten und Rollenverwaltung • Rollen (z.B. User/Advanced/Administrator) können Benutzern zugeordnet werden • Passwörter werden direkt gehasht und nicht im Klartext gespeichert • Zuordnung auf grafische Elemente wie Hauptmenü oder Kontextmenü werden direkt im Quelltext festgelegt Dirk Brinkmeier Framework RAD.web® 04.10.2020 20
db::solutions Grafische Komponenten – HTML und JavaScript • Modale Dialoge über standardisierte JavaScript Aufrufe • Buttons, Button-Groups • Dropdowns, Radiobox, Checkbox • Eingabefelder • Basis ist Twitter-Bootstrap • Datenversorgung über Applikation (AJAX, siehe nächste Folie) Dirk Brinkmeier Framework RAD.web® 04.10.2020 21
db::solutions Datenversorgung grafischer Komponenten – AJAX Dirk Brinkmeier Framework RAD.web® 04.10.2020 22
db::solutions Webtoken – Dynamischer HTML Content HTML Quellcode mit Platzhalter Zuweisung des Token in der Applikation Dynamischer Inhalt wird im Browser angezeigt Content dynamisch generieren Dirk Brinkmeier Framework RAD.web® 04.10.2020 23
db::solutions Handling konkurrierender Zugriffe – Multithreading Beispiel: 3 konkurrierende Abfragen (quasi-parallel) HTML Page Inhalt zum Zeitpunkt 1 HTML Page Inhalt zum Zeitpunkt 2 HTML Page Inhalt zum Zeitpunkt 3 Das Framework löst Zugriffskonflikte auf Resultat: 3 Speicherabbilder mit unterschiedlichen Inhalten (Validierung per Referenzzählung) Dirk Brinkmeier Framework RAD.web® 04.10.2020 24
db::solutions Praxisbeispiel – Applikationsmodul IoT/MQTT • Abfrage der Systemkonfiguration • Anbindung der Ereignismethoden • Empfangsmethoden mit den abonnierten Topics verknüpfen • Veröffentlichen bzw. Abonnieren der gegeben Topics Das Framework kapselt die MQTT Funktionalität Dirk Brinkmeier Framework RAD.web® 04.10.2020 25
db::solutions Eventmethoden – URI-Parameter und Web-Sessions Aufbereitete Liste aller URI-Parameter Beispiel : ../search.html?prepare=yes&filter=test&domain=All&type=All Zusätzliche (custom) Header in der Response Anmerkung: Event-Methode setzt den zusätzlichen Header Aufbereitete Liste aller Sessionvariablen Sichwort „Viewstate“ Namentlicher Zugriff auf Sessionvariablen und Parameter Alle Daten aus dem Webserver stehen der Applikation direkt zur Verfügung Dirk Brinkmeier Framework RAD.web® 04.10.2020 26
db::solutions Standard API für Datenbankabfragen • Standardisiertes SQL Abfragehandling mit Parameterbindung für alle Datenbanktypen • Einfache Auswertung des Resultsets z.B. POST Daten aus Webservers-Event- Methode im JSON-Format Dirk Brinkmeier Framework RAD.web® 04.10.2020 27
db::solutions Dreiklang – HTML, JavaScript, Eventmethoden Dirk Brinkmeier Framework RAD.web® 04.10.2020 28
db::solutions Datasets für Tabellenansichten HTML Objekt auf der Webseite Eventmethode in der Applikation Dirk Brinkmeier Framework RAD.web® 04.10.2020 29
db::solutions Canvas – Bitmaps und Bildbearbeitung Eventmethode in der Applikation Implementierung in der Applikation Aufruf der Zeichenroutinen des Frameworks Dirk Brinkmeier Framework RAD.web® 04.10.2020 30
db::solutions Proof-of-Concept – Realisierung RAMI 4.0 Referenzarchitekturmodell Industrie 4.0 Cloudanbindung HMI Devices Predictive Maintanance Konfiguration Digitale Office- Geschäftsmodelle Anwendungen MQTT HTTP Client/Server RAD.web® Serviceprovider HTTP/REST Client/Server MQTT Netzwerk (TCP/IP) Modul / Maschine Modul / Maschine Modul / Maschine Modul / Maschine Modul / Maschine 1 2 3 4 5 Dirk Brinkmeier Framework RAD.web® 04.10.2020 31
db::solutions Vielen Dank für Ihre Aufmerksamkeit db::solutions Dirk Brinkmeier Meierfeld 17 32049 Herford +49 (0) 5221 282732 info@dbrinkmeier.de www.dbrinkmeier.de Dirk Brinkmeier Framework RAD.web® 04.10.2020 32
Sie können auch lesen