Daten einer Heidenhain iTNC 530 SPS erfassen

Industrie-Steuerungen der Firma Heidenhain werden u.a. in Dreh- und Fräsmaschinen eingesetzt. Hier zeigen wir, wie man die aktuelle Position der Frässpindel mit dem connect-Gateway im laufenden Prozess erfassen kann.
Inhaltsverzeichnis
Datenpunkte festlegen
Wir wollen in diesem Beispiel die Position der Frässpindel erfassen. Diese wird über drei Koordinatenwerte bestehend aus der X, Y und Z-Position bestimmt.
Zunächst einmal legen wir für jede Koordinate einen Datapoint
fest. Hierzu legen wir in der XML-Konfigurationsdatei des connect-Gateways folgende Einträge an.
<datapoints> <datapoint> <path>/heidenhain_itnc_530/axis_position_x</path> <type>decimal</type> </datapoint> <datapoint> <path>/heidenhain_itnc_530/axis_position_y</path> <type>decimal</type> </datapoint> <datapoint> <path>/heidenhain_itnc_530/axis_position_z</path> <type>decimal</type> </datapoint> </datapoints>
Verbindung zur Heidenhain SPS
Damit das connect-Gateway eine Verbindung zur iTNC 530 aufbaut, legen wir einen Endpoint
fest. Dieser Endpoint kommuniziert über das LSV2-Protokoll mit der SPS. Hierfür müssen wir lediglich die IP-Adresse und den TCP/IP-Port der SPS als Parameter angeben.
<endpoint> <name>Heidenhain</name> <protocol plugin="HEIDENHAIN_LSV2"> <name>LSV2</name> <parameters> <param key="ip">192.168.100.119</param> <param key="port">19000</param> </parameters>
Die eigentliche Kommunikation ist im mitgelieferten Heidenhain-LSV2 Plugin bereits implementiert. So muss sich der Kunde um keine weiteren Details mehr kümmern.
Daten zyklisch abfragen
Wir wollen die aktuelle Position der Frässpindel jede Sekunde ermitteln und später weiterverarbeiten. Hierzu legen wir in der Konfiguration einen zyklischen Trigger
an, der jede Sekunde den konfigurierten Endpunkt aufruft.
<trigger> <cyclicTrigger> <period>1</period> <unit>seconds</unit> </cyclicTrigger> </trigger>
Datenerfassung
Im folgenden Konfigurationsschritt legen wir fest, welche Daten wir abfragen und wie diese aufbereitet werden müssen, um die gewünschten Werte zu ermitteln.
Abfragen
Hierzu benötigen wir einen Producer
, über den wir festlegen, welchen Aufruf wir ausführen. Dies können wir in diesem Fall über einen attribute_index
steuern.
<producer> <name>axis</name> <parameters> <param key="attribute_index">21</param> </parameters>
Aufbereiten
Die gewünschten Daten kommen in aneinandergereiht als Zeichenkette aus der SPS. Diese Zeichenkette müssen wir entsprechend aufbereiten, um die einzelnen Koordinaten-Werte zu erhalten. Hierzu verwenden wir einen regulären Ausdruck im entsprechenden Decoder-Plugin.
<decoder plugin="REGEX_DECODER"> <parameters> <param key="regex">^.{12}([^\x00]*)\x00([^\x00]*)\x00([^\x00]*).*$</param> <param key="input_charset">UTF-8</param> </parameters>
Abschließend steuern wir die Auswertung des regulären Ausdrucks über einzelne Daten-Mappings. In jedem Mapping bilden wir einen Wert aus einer Treffer-Gruppe des Ausdrucks auf den passenden Datapoint ab.
Mit drei Mappings erhalten wir so die drei Werte für X, Y und Z-Koordinate.
<mapping> <datapoint>/heidenhain_itnc_530/axis_position_x</datapoint> <parameters> <param key="template">\1</param> <param key="parse_number">DECIMAL</param> </parameters> </mapping> <mapping> <datapoint>/heidenhain_itnc_530/axis_position_y</datapoint> <parameters> <param key="template">\2</param> <param key="parse_number">DECIMAL</param> </parameters> </mapping> <mapping> <datapoint>/heidenhain_itnc_530/axis_position_z</datapoint> <parameters> <param key="template">\3</param> <param key="parse_number">DECIMAL</param> </parameters> </mapping>
Zusammenfassung
Wir haben gesehen, wie man das connect-Gateway konfiguriert, um Daten über das Heidenhain LSV2 Protokoll zu erfassen. Im Beispiel haben wir die Position der Frässpindel ermittelt, aber es können selbstverständlich eine Vielzahl anderer nützlicher Informationen erhoben werden.
Über einen Trigger ermitteln wir sekündlich die aktuelle Position der Frässpindel. Um dieses Position richtig zu erfassen, haben wir einen regulären Ausdruck als Decoder der Rohdaten verwendet und erhalten so die bereinigten Werte.
Die bereinigten Werten können wir nun anderen Anwendungen zur Verfügung stellen. Hierzu erweitern wir die Konfiguration um zusätzliche Consumer, um die Position z.B. in einer Datenbank zu protokollieren oder via HTTP in die Cloud zu senden.