Immer wenn in Unternehmen asynchrone Ereignisse auftreten, wie zum Beispiel das Einscannen von Strichcodes in der Fertigung, löst dies zahlreiche gleichartige Vorgänge aus, die parallel erfolgen. Um zu vermeiden, dass es hierbei zu Problemen kommt, ist es wichtig, dass die Systemschnittstellen automatisch und in Echtzeit aktualisiert werden, damit diejenigen die die Vorgänge steuern und überwachen, immer auf dem aktuellen Stand sind, ohne dass hierfür manuelle Eingaben erforderlich sind.

Bei einem unserer Kunden, für den wir eine integrierte MES-Lösung basierend auf SAP MII (MII)/SAP PCo (PCo)/Sybase implementiert haben, war dies eine wesentliche Anforderung, da pro Minute zahlreiche Anfragen von verschiedenen Maschinen eingingen und nicht genügend Zeit für die Verantwortlichen zur Verfügung stand, um jedes Mal eine Schaltfläche zur Aktualisierung anzuklicken.

Unser Entwickler Sai Krishna Vellanki ermöglicht Ihnen einen Blick hinter die Kulissen, wie wir dieses Problem für unseren Kunden gelöst haben:

Eine Möglichkeit zur Handhabung asynchroner Ereignisse ist die Festlegung eines Zeitintervalls, wobei einmal pro Sekunde ein Backend-Aufruf feststellt, ob neue Daten vorhanden sind. Allerdings belegt dies viele Ressourcen und kann zu Performance-Problemen führen.

Wenn beispielsweise ein Client eines Maschinenbedieners jede Sekunde einen Aufruf an den Server schickt, sind dies 60 Anfragen pro Minute, 3600 pro Stunde und 86400 pro Tag. Stehen in einem Werk 25 Maschinen, ergibt dies eine enorme Zahl!

Dann haben wir PCo WebSockets entdeckt. Dies war das perfekte Tool, um die oben genannte Anforderung zu erfüllen.

Es gab verschiedene Blog-Einträge und Dokumentationen zur Konfiguration eines WebSocket-Servers, zur Einrichtung eines Zielsystems und einer Remote-Benachrichtigung in PCo sowie zum Empfang und Versand von Nachrichten. Doch es gab keinen Beispielcode für die Nutzung auf der Bedienoberfläche.

Anwendungsszenario:

  1. In der Werkstoffherstellung müssen zur Produktion eines Endprodukts (Wareneingang) verschiedene Grundstoffe (Warenausgang) verbraucht werden.
  2. Es kann unterschiedliche Endprodukte geben, die vielleicht die gleichen Grundstoffe verwenden oder unterschiedliche Grundstoffe benötigen.
  3. Der Warenausgang basiert auf dem Einscannen von Strichcodes. Ausgehend von dem Scan ermittelt das System, ob ein korrekter Grundstoff oder ein falscher Grundstoff verwendet wird.
  4. Wenn es ein korrekter Grundstoff ist, wird kein Problem gemeldet. Handelt es sich dagegen um einen falschen Grundstoff, wird ein Maschinenalarm (audiovisuelles Signal) ausgelöst, der den Verantwortlichen darauf hinweist, dass ein Fehler vorliegt, und es muss (nach Hinzufügen von WebSocket) zugleich eine automatische Pop-up-Meldung auf dem Client des Verantwortlichen erscheinen, die eine detaillierte Fehlermeldung enthält.
  5. Für den Warenausgang sind verschiedene Prüfkriterien festgelegt, beispielsweise falscher Grundstoff, doppeltes Scannen des Strichcodes, Zurückspeichern nicht erfolgt, Bestand in SAP nicht verfügbar usw.

In dem oben geschilderten Anwendungsszenario ist entscheidend, dass eine automatische Pop-up-Meldung an den Bediener angezeigt wird, aus der hervorgeht, welcher Fehler aufgetreten ist. Andernfalls wird kein Beitrag zur Echtzeiterkennung von Fehlern in der Produktion geleistet.

In PCo werden ein WebSocket-Server, ein Zielsystem und eine Benachrichtigung konfiguriert:

Im Beispielcode verwenden wir ein JavaScript-WebSocket-Objekt.
Als Erstes müssen wir die WebSocket-URL zusammen mit dem Benachrichtigungsnamen in einer Variablen speichern:

var oURL = “ws://<host>:<port>/WebsocketNotification“;
Erstellen des WebSocket-Objekts: var ws = new WebSocket(oURL);

Die wichtigsten Ereignisse für die WebSocket-Kommunikation:*

Ereignis Event-Handler Beschreibung
Offen Socket.onopen Dieses Ereignis tritt ein, wenn die Socket-Verbindung aufgebaut wurde.
Nachricht Socket.onmessage Dieses Ereignis tritt ein, wenn der Client Daten vom Server empfängt.
Fehler Socket.onerror Dieses Ereignis tritt ein, wenn ein Fehler in der Kommunikation aufgetreten ist.
Schließen Socket.onclose Dieses Ereignis tritt ein, wenn die Verbindung geschlossen wird.

*Quelle: Tutorialspoint HTML5

Wir verwenden den Nachrichtenkommunikationstyp JSON.

Weitere Informationen über die verschiedenen verfügbaren Nachrichtentypen – siehe die SAP-Dokumentation: JSON-Nachrichten für WebSocket-Verbindungen

Während des „onopen“-Ereignisses, wenn die Socket-Verbindung aufgebaut wird, subskribieren Sie die Tags, um die Änderungen am Tag-Wert zu verfolgen.

Wichtig ist, dass Sie die JSON.stringify-Methode verwenden. Denn die an einen Webserver gesendeten Daten müssen ein String sein.

Mit der oben gezeigten Methode können Tag-Werte subskribiert werden. Wenn nun eine Änderung am Wert des subskribierten Tags auftritt, wird das Ereignis „onmessage“ ausgelöst. Bei diesem Ereignis können Sie Ihre eigene Logik festlegen, was bei einer Änderung des Tag-Wertes geschehen soll.

Wichtig ist, dass Sie die JSON.parse-Methode verwenden. Die von dem Webserver erhaltenen Daten sind immer ein String. Wenn wir die Parse-Methode verwenden, werden die Daten zu einem JavaScript-Objekt.

Wenn ein Client subskribiert wurde, muss bei Aktualisieren/Neuladen der Seite oder einem Kommunikationsfehler die Subskription aufgehoben werden. Andernfalls bleibt die Sitzung geöffnet, bis ihre Subskription aufgehoben wird, was zu Problemen führen kann, wenn mehrere Clients subskribiert wurden.

Um die Subskription bei einem Kommunikationsfehler aufzuheben, muss das Ereignis „onclose“ verwendet werden. Wenn ein Aktualisieren/Neuladen vorliegt, kann das Ereignis „window.onbeforeunload“ verwendet werden.

Mit dem oben beschriebenen Code stellt das System sicher, dass der Client ausgehend von asynchronen Ereignissen reagieren kann, die auf der Fertigungsebene ausgelöst werden.

Hier ein kurzes Demovideo:

Kommentare

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht.

Empfohlene Artikel

Procurement

Der Einkauf: vom Nebendarsteller zum strategischen Helden durch Automatisierung?

Wie Automatisierung dazu beitragen kann, das Wertversprechen des Einkauf zu verbessern. Der Einkaufsfunktion steht eine Transformation bevor und der zündende …

weiterlesen
CRM

“Alexa, starte SAP Cloud for Customer …”

Sprachassistenten wie Alexa oder Siri sind bereits im Alltag angekommen. Durch eine einfache und intuitive Interaktion mit natürlicher Sprache dienen …

weiterlesen
Logistics

Echtzeit-Verkehrsdaten für „Live“-Distributionsmanagement

Die Distribution auf der „letzten Meile“ (letztes Wegstück beim Transport der Ware zum Kunden) ist mit vielfältigen Herausforderungen konfrontiert. …

weiterlesen