Jump to content
TU_Techniker

NI cRIO und Ethernet

Recommended Posts

Guten Abend allerseits!

 

Ich möchte für ein Forschungsprojekt einige Tinkerforgemodule mit einem NI CompactRIO verwenden. Der cRIO hat einen Etherneteingang, den ich mit meinem Stack verbunden hab.

Auf meinem cRIO läuft als embedded system, d.h. ich kann dort keine Software wie den Deamon installieren. Alle LabVIEW Funktionen benötigen aber den Deamon um LabVIEW mit den Modulen kommunizieren zu lassen.

Hat jemand Erfahrung mit der basic TCP IP Kommunikation mit dem Ethernetmodul? Ich hab die Doku zum Protokoll gefunden, kann aber nicht viel damit anfangen. Hat jemand einen Beispielcode (auch andere Sprachen)?

 

Vielen lieben Dank!

Share this post


Link to post
Share on other sites

Moin,

 

Die Ethernet-Extension ist ein Brick Daemon, d.h. den musst du nicht auf der cRIO installieren, sondern kannst dich mit LabVIEW auf die IP-Adresse der Ethernet-Extension verbinden.

Share this post


Link to post
Share on other sites

Hey rtrbt!

 

ich habe jetzt eine Verbindung zwischen den beiden Geräten etablieren können. Ich versuche mir jetzt in LabVIEW den Header zusammenzubasteln. Hat jemand einen Beispielcode dafür? Auch für die konvertierung von Base58 bis Hex (in LabVIEW)?

 

Grüße aus Darmstadt!

Share this post


Link to post
Share on other sites

All unsere API Bindings für die verschiedenen Programmiersprachen nutzen intern unser TCP/IP Protokoll. Daher kannst du dir irgendeins unserer API Bindings ansehen als Beispiel dafür wie das TCP/IP Protokoll zu nutzen ist.

 

Aber kannst du auf dem cRIO nicht einfach unsere .NET basierten LabVIEW Bindings einsetzen? Oder unterstützt der cRIO .NET nicht?

Share this post


Link to post
Share on other sites

Servus!

Ich habe eine Website verwendet, um die UID von Base58 in HEX umzuwandeln. Site: https://www.mobilefish.com/services/cryptocurrency/brainwallet.html#converter

Auf der Dokuseite bei TCP/IP Protocol wird in einem Beispiel die UID b1Q in 98 83 00 00 konvertiert. Wenn ich die UID über die Seite konvertieren lasse, sagt mir zunächst das Eingabefeld, dass das nur 3 byte sind und außerdem kommt da eine andere HEXfolge heraus. Ändere ich nun aber die UID von b1Q auf B1q, sind das dann 2 byte und 83 98. Was ist nun korrekt? Ist die Anwendung falsch programmiert? Könnt ihr mir eine Alternative empfehlen?

Die UID meines Masters lautet 6DbKt8, was mir in CC 1A 5A 4D konvertiert wird. Ich möchte erst einmal die erste Funktion ansprechen (getStackVoltage). Dazu schicke ich wie im Anhang die Nachricht. Eine Antwort bekomme ich aber nicht, der String bleibt leer. Was muss ich hier an vorletzter Stelle eintragen?

CodeSnippet.JPG

Share this post


Link to post
Share on other sites

Es gibt zwei Varianten von Base58: https://en.wikipedia.org/wiki/Base58

Wir verwenden die Flickr Variante, die meisten Online Tools scheinen aber die Bitcoin Variante zu verwenden.

6DbKt8 dekodiert zu 0x31 0x10 0xb1 0xdc

Ich kann auf Anhieb kein Online Tool finden, dass die Flickr Variante nutzt. Ich habe gerade ein kleines Python Script zusammenkopiert, dass die Flickr Variante dekodiert:

$ python3 base58decode.py 6DbKt8
base58:                6DbKt8
decimal:               3702591537
hexadecimal:           0xdcb11031
bytes (little endian): 0x31 0x10 0xb1 0xdc
$ python3 base58decode.py b1Q
base58:                b1Q
decimal:               33688
hexadecimal:           0x8398
bytes (little endian): 0x98 0x83 0x0 0x0

 

base58decode.py

  • Like 1

Share this post


Link to post
Share on other sites

Hallo zusammen,

da trage ich zur Vollstaendigkeit noch ein Shellscript bei. Ausgabe in diesem Fall ist "\x31\x10\xb1\xdc".

Ich kann mich schwach erinnern, dass es recht muehsam war einen passenden Umrechnealgorithmus zu finden.

Weiterhin viel Freude. ;D

Der Loetkolben

#!/bin/bash

# Stand 23.4.2013
# Loetkolbenzauberkiste

tUID=6DbKt8

###################################################################################
ALPHABET="123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
BASECOUNT=`expr length $ALPHABET`
DECODED=0
MULTI=1
for ((i=`expr length $tUID - 1` ; i > -1 ; i--))
  do
    VALUE=${tUID:$i:1}
    DECODEDVALUE=`expr index $ALPHABET $VALUE`
    DECODEDVALUE=`expr $DECODEDVALUE - 1`
    DECODED=`expr $DECODED + $MULTI \* $DECODEDVALUE`
    MULTI=`expr $MULTI \* $BASECOUNT`
  done
HEXDECODEDSTR=""
HEXDECODED=`printf "%08x" $DECODED`
for i in {6,4,2,0}
  do
    DIGIT=${HEXDECODED:$i:2}
    HEXDECODEDSTR=$HEXDECODEDSTR"\x"$DIGIT
  done
###################################################################################

echo "$HEXDECODEDSTR"

exit 0

 

Share this post


Link to post
Share on other sites

Hier meine aktuelle Lösung. Die Schleife am Ende verwendet ich um die Callbacks meiner zwei Bricklets zu verarbeiten. Je nach Header sortiere ich die Werte.

Zu der TCP Connection: Ich habe den cRIO mit einem Switch verbunden, genauso die Tinkerforge Module. Die IP bei Tinkerforge habe ich statisch festgelegt, beim cRIO hat das mit einer statischen IP nicht funktioniert. Bei beiden Geräten verwende ich die gleiche Subnetzmaske.

Vielen Dank für die Hilfe hier im Forum!

Example.JPG

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...