Unser Funkmodul für Messuhren und andere Handmessmittel wie Bügelmessschraube oder Messschieber kann mit dem Funkmodul M8 für Verbindungen über WebSockets verwendet werden.

Dieses Praxisbeispiel soll zeigen, wie eine WebSocket-Verbindung zum Messgerät hergestellt werden kann.

Das Beispiel besteht aus einer einfachen Webseite / Webanwendung in HTML und Javascript. Über diese einfachen Techniken ist es möglich, direkt auf das Funkmodul zuzugreifen und den aktuellen Messwert sowie Statusinformationen aus der Funk-Messuhr auszulesen. Dies ist im Vergleich zu MQTT ohne zusätzliche Infrastruktur eines Brokers möglich und somit vor allem für kleine, lokale Anwendungen eventuell einfacher umzusetzen als eine MQTT Abfrage.

Web-Oberfläche der Beispielanwendung

Der Quelltext der einfachen Anwendung:

<!DOCTYPE HTML>
<html>
<head>
  <meta name="websocket_test">
  <meta charset="UTF-8"/>
  <style>button{width:140px;height:50px}body{background: #f48f0d;}</style>
  <style>table, th, td { border-collapse: collapse;}</style>
<title>websocket to iot test</title>
</head>
<body style="font-family: arial, sans-serif;">
    <div style="width:500px;border:1px solid black;align:left">
        <form onsubmit="return false">
            Client name (informal): <input type="text" id="txtName" value="Client_1"><br>
            Server: <input type="text" id="txtServer" value="192.168.1.119">
        </form>
        <form onsubmit="return false">
            <button type="submit" id="btnConnect">Connect to IoT device</button>
            <input type="checkbox" id="cbxSsl" name="ssl" checked>
            <label for="cbxSsl">SSL</label>
            <input type="checkbox" id="cbxRaw" name="raw" checked>
            <label for="cbxRaw">Raw</label>
        </form>
        <form onsubmit="return false">
            <button type="submit" id="btnConfigSet" disabled>Set configuration</button>
        </form>
        <form onsubmit="return false">
        <table>
        <tr><td>
            <button type="submit" id="btnRequestMeas" disabled>Request measurements</button>
            </td><td>
            Repeat count:<input style="width:80px;" size="3" type="number" id="txtRepCnt" value="3"><br>
            Interval:<input style="width:80px;" size="6" type="number" id="txtRepMs" value="200">
            </td>
        </tr></table>
        </form>
        <form onsubmit="return false">
            <button type="submit" id="btnRequestMeta" disabled>Request device info</button>
        </form>
        <!-- output form -->
        <form onsubmit="return false">
            <div style="overflow:scroll;height:400px;word-break:break-all" id="divOut">Not connected...</div>
        </form>
        <!-- clear -->
        <form onsubmit="return false">
            <button type="submit" id="btnClear">Clear</button>
        </form>
    </div>
    <script type="text/javascript">
        const elem = id => document.getElementById(id);
        const txtName = elem("txtName");
        const txtServer = elem("txtServer");
        const txtRepCnt = elem("txtRepCnt");
        const txtRepMs = elem("txtRepMs");
        const btnConnect = elem("btnConnect");
        const cbxSsl = elem("cbxSsl");
        const cbxRaw = elem("cbxRaw");
        const btnConfigSet = elem("btnConfigSet");
        const btnRequestMeas = elem("btnRequestMeas");
        const btnRequestMeta = elem("btnRequestMeta");
        const btnClear = elem("btnClear");
        const divOut = elem("divOut");

        class Mdevice {
            constructor() {
                this.connecting = false;
                this.connected = false;
                this.name = "";
                this.ws = null;
            }
            connect() {
                if (this.ws === null) {
                    this.connecting = true;
                    txtName.disabled = true;
                    this.name = txtName.value;
                    btnConnect.innerHTML = "Connecting...<br>"+txtServer.value+"<br>ssl "+
                      cbxSsl.value+": "+(cbxSsl.checked?"on":"off");
                    this.ws = new WebSocket("ws"+(cbxSsl.checked?"s":"")+"://"+txtServer.value+"/"+(cbxRaw.checked?"raw1":"dev1"));
//                    this.ws = new WebSocket("wss://192.168.1.119/dev1");
                    this.ws.onopen = e => {
                        this.connecting = false;
                        this.connected = true;
                        divOut.innerHTML += "<br><p>Connected.</p>";
                        btnConnect.innerHTML = "Disconnect";
                        btnConfigSet.disabled=false;
                        btnRequestMeas.disabled=false;
                        btnRequestMeta.disabled=false;
                        // optional: send something through the websocket 
                        // this.ws.send(this.name + " connected!");
                    };
                    this.ws.onmessage = e => {
                        divOut.innerHTML+="<p>"+e.data+"</p>";
                        divOut.scrollTo(0,divOut.scrollHeight);
                    }
                    this.ws.onclose = e => {
                        this.disconnect();
                    }
                }
            }
            disconnect() {
                if (this.ws !== null) {
                    // optional: send something through the websocket 
                    // this.ws.send(this.name + " disconnect!");
                    this.ws.close();
                    this.ws = null;
                }
                if (this.connected) {
                    this.connected = false;
                    btnConfigSet.disabled=true;
                    btnRequestMeas.disabled=true;
                    btnRequestMeta.disabled=true;
                    txtName.disabled = false;
                    divOut.innerHTML+="<p>Disconnected.</p>";
                    btnConnect.innerHTML = "Connect";
                }
            }
            sendMessage(msg) {
                if (this.ws !== null) {
                    this.ws.send(msg);
                }
            }
        };
        let mdevice = new Mdevice();
        btnClear.onclick = () => {
            divOut.innerHTML ="";
        }
        btnConnect.onclick = () => {
            if (mdevice.connected) {
                mdevice.disconnect();
            } else if (!mdevice.connected && !mdevice.connecting) {
                mdevice.connect();
            }
        }
        btnConfigSet.onclick = () => {
            mdevice.sendMessage("{\"cmd\":\"config\",\"sleep_sec\":13698,\"display_text\":\"MESSAGE\"}");
            divOut.focus();
        }
        btnRequestMeas.onclick = () => {
            if (cbxRaw.checked) {
               mdevice.sendMessage("meas"); // -- opt: csv instead json
            } else {
              mdevice.sendMessage("{\"client\":\""+this.name+"\",\"cmd\":\"meas\",\"rep_cnt\":"+
                txtRepCnt.value+",\"rep_ms\":"+txtRepMs.value+"}");
            }
            divOut.focus();
        }
        btnRequestMeta.onclick = () => {
            // mdevice.sendMessage("1|info|*");
            mdevice.sendMessage("{\"client\":\""+this.name+"\",\"cmd\":\"info\"}");
            divOut.focus();
        }
    </script>
</body>
</html>

Der Quellcode dieses Programmbeispiels kann hier heruntergeladen werden.

Mit unserer Digitalanzeige für Messmittel bieten wir eine einfache Möglichkeit die Messwerte auf einem externen Display darzustellen. Durch die Verwendung allgemeiner und offener Standards können die Displays sehr universell eingesetzt werden. Entweder als reine Anzeige zum Beispiel einer einzelnen Messuhr oder als Teil einer komplexen MQTT oder LAN Infrastruktur zur Anbindung über Funk.

Einsatzmöglichkeiten der Fernanzeige für verschiedene Messgeräte

Das Angebot für eine einfache, externe Messwertanzeige für Messuhr oder Messschieber für Mess-, Anzeige- oder Prüfaufgaben ist am Markt sehr übersichtlich. Entsprechend bedienen wir mit unserem Funk-Anzeigemodul für Messuhren ein Produkt in dieser Nische für Anwendungsfälle in welchen ein eigener PC, Smartphone oder Tablet entweder als überdimensioniert gelten oder aufgrund der damit verbundenen administrativen Aufwände ausscheiden.

Das Stand-Alone Display mit TFT Farbbildschirm kann als externe Messwertanzeige für Messmittel wie Messuhr, Messschieber oder Bügelmessschraube verwendet werden.

MQTT und WLAN für Messmittel sind unsere Passion. Dennoch gibt es Anforderungen, in welchen eine kabellose Übertragung nicht gewünscht oder notwendig ist.
Entsprechend kann dieses Modul nicht nur als WLAN-Funkanzeige sondern auch über ein Kabel als kabelgebundene Fernanzeige für eine Messuhr oder ein anderes Messgerät verbunden werden. Als weitere Verbindungsmöglichkeit besteht die Option per WLAN Funkverbindung eine Verbindung zum Messsystem über das MQTT Protokoll oder HTTP / WebSockets herzustellen.
Als kabelgebundenes Protokoll wird das Mitutoyo Digimatic Protokoll oder auch ein serielles Protokoll wie es z.B. von Mahr-Messuhren oder den Messuhren von Helios-Preisser verwendet wird unterstützt.

Die Fernanzeige mit aktivierter Grenzwertüberwachung (IO/NIO, grün/rot) und Bereichsanzeige

Grenzwertüberwachung

Eine konfigurierbare Grenzwertüberwachung ermöglich das Beurteilen des Messergebnisses an der Fernanzeige.

Die Grenzen können entweder extern konfiguriert über das WLAN vorgegeben werden oder können am Touch-Display eingegeben und verändert werden.

Konfigurationsmöglichkeiten

Die Grundkonfiguration erfolgt über eine Web-Oberfläche. Hierzu stellt das Anzeigemodul eine eigene Web-Schnittstelle bereit. Diese ermöglicht weitreichende Konfigurationsmöglichkeiten über alle Features der Fernanzeige.

Web Oberfläche zur Konfiguration des Remote Displays über einen Browser

Technische Daten der Fernanzeige

EigenschaftWertEinheit
Maße (BxHxT), ohne Kabel 106 x 74 x 22mm
Gewicht95g
Temperaturbereich0-50°C
Versorgungsspannung5V
Stromaufnahme300mA
Messinterval0,3 – 600sek
TFT LCD Display320 x 200pixel

Dokumentation

Lesen Sie unsere Dokumentation der Fernanzeige um Detailinformationen über die Funktionsweise und Konfigurationsmöglichkeiten zu erhalten.

Resourcen

Download der Übersicht als PDF.

Kundenprojekte

Durch unsere Agile Fertigung lassen sich über Kundenprojekte viele Anpassungen für Anzeigelösungen für Messinstrumente umsetzen. Was letztendlich auf dem TFT Farbdisplay angezeigt wird kann frei definiert werden. Der Fantasie des Kunden sind hier keine Grenzen gesetzt. Denkbar ist die grafische Visualisierung der Messwerte z.B. als Zeigerinstrument genauso wie eine Messhistorie in Form einer Verlaufsgrafik oder Historienansicht. Trotzdem ist zu bedenken, dass es sich um ein einfaches Display handelt: Sehr aufwendige Visualisierungen von Messwerten lassen sich nach wie vor deutlich einfacher, schneller und besser mit einem PC oder Tablet-Computer in MS-Windows oder Android/iOS umsetzen. Hier haben wir genug Erfahrung um jeden Visualisierungswunsch einer Messvorrichtung als Remote Display für ein beliebiges Messmittel im Labor-, Entwicklungs- oder Fertigungsumfeld umzusetzen.

Optional kann das Display auch zusätzliche Steuereingänge bereitstellen. Diese können dann z.B. für unseren elektromechanischen Messuhr-Anheber in einer automatisierten Prüfvorrichtung verwendet werden.

Das Produkt wurde nach unserer Philosophie der agilen Fertigung umgesetzt.
Dies bedeutet z.B. dass das Gehäuse in ABS gedruckt wird und nur einfache Standardkomponenten verwendet werden.
Dadurch wird eine lange Teileversorgung sichergestellt. In Bezug auf die Kabelverbindungen bedeutet es, dass einfache Standardkabel in fertig konfektionierter Länge direkt verwendet werden können.
Weiter können spezielle Kundenanforderungen einfach umgesetzt werden.

Projektbeispiel

In diesem Projektbeispiel zur automatisierten Messung über IoT Messmittel werden 4 Messuhren mit automatischem Anheber des Messtaster verwendet. Die Messwerte werden zentral auf einer externen MQTT-Anzeige dargestellt.

Alle 4 Mitutoyo Absolute Messuhren der Messeinrichtung sind per Kabel an die externen Displays angeschlossen. Über einen Schalter lassen sich die Messuhren zentral anheben und absenken sobald das Werkstück vom Werker in die Montageeinrichtung eingelegt ist. Die Messwerte werden an zentraler Stelle über die externe Anzeige visualisiert. Die Anlage kann dahingehend automatisiert werden, dass sowohl die Verarbeitung der Messwerte als auch das Anheben oder Absenken der Messuhr-Taster über externe Signale z.B. über MQTT gesteuert werden. Somit ist auch ein komplett autonomer Betrieb der Messstation über Roboter und Steuerung möglich.

Über ein externes Signal kann der Messfühler anheben oder absenken. Der Zustand des Messstiftes wird auf dem Display als Pfeil dargestellt. Bei abgesenktem Messstift wird der aktuelle Messwert der Messuhr in rot oder grün dargestellt. Bei nicht angeschlossener oder ausgeschalteter Messuhr wird ein rotes diagonales Kreuz angezeigt.

Das Produkt wurde nach unserer Philosophie der agilen Fertigung umgesetzt.
Dies bedeutet z.B. dass das Gehäuse mit 3D Druckern gedruckt wird und nur einfache Standardkomponenten verwendet werden. Dadurch wird eine lange Teileversorgung sichergestellt. In Bezug auf die Kabelverbindungen bedeutet es, dass einfache Standardkabel in fertig konfektionierter Länge direkt verwendet werden können.

Alternativen

Eine Alternative zu einem autonomen externen Display stellt ein Smartphone oder Tablet als Anzeige dar. Auch dieses kann über ein Adapterkabel direkt an eine Messuhr angeschlossen werden. Neben der reinen Anzeige lassen sich hier dann noch weitere Funktionen auf dem Betriebssystem des mobilen Rechnern einfach umsetzen.

Rechtliches

Mitutoyo und Digimatic sind vermutlich eingetragene Warenzeichen von Mitutoyo. Wir verwenden diese Bezeichnungen hier zur Erklärung des hier vorgestellten Produkts (der Hardware und Software). Wir stehen in keiner Verbindung zu Mitutoyo – setzen aber sehr gerne und wo immer möglich deren gute und zuverlässigen Messuhren und Messschieber ein.