Binäre Kommunikation

VISA, TCP/IP, CAN und ähnliche Protokolle
Аватара пользователя
learny
adviser
adviser
Сообщения: 207
Зарегистрирован: 23 окт 2008, 17:54
Версия LabVIEW: 8.5
Контактная информация:

Binäre Kommunikation

Сообщение learny »

Hallo eg, hallo zusammen,

hoffe dass ich an der richtigen Stelle poste.
Ich habe einen Hardware Datalogger mit dem ich über RS232 kommunizieren kann. Das Beispiel von eg funktioniert prima mit einem Test-Gerät (ISDN-Router mir seriellem Anschluss).
Was mein Datalogger betrifft, konnte ich über einen Port-Monitor jedoch nur HEX-Befehle vom Hersteller-Software feststellen.

Ich habe versucht das praktische Beispiel (und das Read/Write ni-VI) so umzustellen, dass ich die HEX-Befehle eingeben kann. Ergebnis: nichts wird vom Puffer ausgelsen. Der Readline bleibt leer.

any ideas?

Danke und Grüße

learny
أهلا و سهلا بالمستخدمين العرب
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Serielle Schnittstelle ohne VISA

Сообщение Eugen Graf »

Hallo, kannst du mal nen Screenshot von deinem Block Diagramm machen oder dein VI hier posten?
Аватара пользователя
learny
adviser
adviser
Сообщения: 207
Зарегистрирован: 23 окт 2008, 17:54
Версия LabVIEW: 8.5
Контактная информация:

Re: Serielle Schnittstelle ohne VISA

Сообщение learny »

Hallo eg, und danke für deine Antwort.

Ich kann leider erst am Montag Screenshots machen..

Für den Anfang (auch aufgrund meiner "Grundstufenkenntnisse" in LV), dass ich überhaupt eine Antwort auf irgendein Befehl von meinem seriellen Gerät bekommen kann, nutze ich gerade das Beispiel basic serial R/W von Labview. Mit deinem Beispiel VI habe ich das selbe Problem: Ich bekomme keine Antworten zurück.

Der Format der gesendeten Befehle wird in HEX-Format gesendet, wie ich über einen Port-Monitor festgetellt habe.

Grüße
learny
أهلا و سهلا بالمستخدمين العرب
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Serielle Schnittstelle ohne VISA

Сообщение Eugen Graf »

Dann musst du dich mit dem Übertragungsprotokoll auseinander setzen. Die binären Befehle sind in der Dokumentation zu deinem Gerät erklärt.
Kann sein, dass du Glück hast und die Treiber schon von jemandem geschrieben sind. Du kannst im Internet nach "Dein Gerätename Treiber" suchen.
Аватара пользователя
learny
adviser
adviser
Сообщения: 207
Зарегистрирован: 23 окт 2008, 17:54
Версия LabVIEW: 8.5
Контактная информация:

Re: Serielle Schnittstelle ohne VISA

Сообщение learny »

Hallo eg, und danke für Deine Antwort

das Glück, den passenden Treiber dazu gefunden zu haben hatte ich leider nicht. Ich habe allerdings einen Treiberwunsch für das Gerät von ni angefordert. Viellleicht wird ja mein Wunsch erfüllt...

Im Benutzerhandbuch meines Geräts, finde ich nur die Befehle im string form. auf Seite 32 in folgendem Dokument (Kommunikationsbeschreibung): http://download.sma.de/smaprosa/dateien ... ZD0803.pdf

Weißt Du vielleicht wie ich eine Verbindung zwischen dem HEX-Übertragungsprotokoll und den Kommandos im Herstellerdokument finden kann?

Danke im Voraus
أهلا و سهلا بالمستخدمين العرب
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Binäre Kommunikation

Сообщение Eugen Graf »

Ne ne, das ist doch genau das, was du brauchst. Die Befehle auf der Seite 32 haben Identifier (CMD). Du kannst weiterhin das Beispiel basic serial R/W nutzen, nur mussst du mit dem Rechtsklick die Darstellung auf Hexadecimal umstellen. Das wichtigste ist SMA Rahmenformat (Seite 13), SMA Telegrammformat (Seite 24) und die Befehlsliste (Seite 32).

Gruß
Аватара пользователя
learny
adviser
adviser
Сообщения: 207
Зарегистрирован: 23 окт 2008, 17:54
Версия LabVIEW: 8.5
Контактная информация:

Re: Binäre Kommunikation

Сообщение learny »

morgen werde ich mir das ganze + folgendes Dokument lesen, ausprobieren und mich dann anschließend melden :clap:

http://digital.ni.com/public.nsf/allkb/ ... 2800710865
أهلا و سهلا بالمستخدمين العرب
Аватара пользователя
learny
adviser
adviser
Сообщения: 207
Зарегистрирован: 23 окт 2008, 17:54
Версия LabVIEW: 8.5
Контактная информация:

Re: Binäre Kommunikation

Сообщение learny »

Hallo eg,

also ich habe folgendes probiert:

- im Serial R/W habe ich die Anzeige auf HEX umgestellt.
- Ich habe einen Request wie in der Port-Log (vom Portmonitor)gesendet.
- Immernoch keine Antwort.

Wenn ich das Rahmenformat auf Seite 13 mit dem Log-Protokoll vergleiche, dann stelle ich fest, das es sich um die Antworten handelt, die ich vom Gerät bekomme.
Die Antworten haben folgendes Rahmen:
7E: Startbyte
FF: Adresse
03: Control
und genau dieser Block wiederholt sich bei jeder Antwort, am Anfang und am Ende.

Zu den Requests:

Die Requests

Die "requests" erfolgen ebenso im HEX-Format, beginnend mit:
Start: 68
Längenbyte: 0-255 (i.e. 04 04 im Log)
Start: 68
Protokollkopf: Enthält die Kommandos (die CMD_Kommandos?)


Ich habe bereits soviel ausprobiert, das VI ließt aber immernoch nichts.

In der Anlage ein Ausschnitt aus dem Monitor-Log, wo der Datenlogger und an ihm verbundene Geräte sich melden nach jeweils ein Request, den ich gerne in meinem simple R/W VI realisieren möchte. :cry: :D

Danke vielmals.

Gruß
learny
Вложения
1.JPG
أهلا و سهلا بالمستخدمين العرب
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Binäre Kommunikation

Сообщение Eugen Graf »

Womit hast du die Requests gemacht?

Erweitere das Simple Serial R/W um folgendes:

Mache dir einen Cluster aus allen Elementen, die du abschicken willst und benutze danach Flatten To String VI um aus deinem Cluster ein binäres String zu bekommen. Danach kannst du diesen String einfach an VISA Write anschliessen.

Beim VISA Read ist folgendes zu beachten:
wenn du beim Konfigurieren der seriellen Schnittstelle das Termination Char eingeschaltet hast, dann wirst du beim binären Übertragungsprotokoll beim Lesen fast immer einen Timeoutfehler bekommen. Um es zu vermeiden, musst du Termination Char ausschalten und beim Lesen die genaue Anzahl Bytes angeben.

Hier siehst du wie ich ein Paket zum Abschicken zusammenstelle:
ich bündele den Paketinhalt zu einem Cluster und wandele diesen Cluster in ein binäres String um.
BinaryCMD.png
BinaryCMD.png (11.26 КБ) 22631 просмотр
Wichtig dabei ist genau zu wissen was in den Cluster reinkommt und das steht in der Dokumentation. Auch ist auf die Datentypen der Clusterelemente zu achten, diese müssen ganz genau übereinstimmen, sonst wird das Gerät dein Befehl nicht verstehen.
Аватара пользователя
learny
adviser
adviser
Сообщения: 207
Зарегистрирован: 23 окт 2008, 17:54
Версия LabVIEW: 8.5
Контактная информация:

Re: Binäre Kommunikation

Сообщение learny »

Hallo eg,

Die Requests habe ich mit dem Originalprogramm versursacht und mit Hilfe von Free Serial-Port-Monitor aufgezeichnet.

Bevor ich an der Bündelung mit dem Cluster arbeite, möchte ich nur kurz noch was fragen:
Mache dir einen Cluster aus allen Elementen, die du abschicken willst und benutze danach Flatten To String VI um aus deinem Cluster ein binäres String zu bekommen. Danach kannst du diesen String einfach an VISA Write anschliessen.
Was meinst Du mit den "Elementen die ich abschicken möchte"? Die HEX-Befehle, die ich aus den logged-requests aufgezeichnet habe, oder die CMD Befehle, die auf Seite 32 des Protokolls?

Ich werde mich zunächst mit clustern und Flatten to string vertrauter machen und anschließend das Basic Serial R/W "versuchen" zu erweitern.

Danke

Beste Grüße
أهلا و سهلا بالمستخدمين العرب
Аватара пользователя
learny
adviser
adviser
Сообщения: 207
Зарегистрирован: 23 окт 2008, 17:54
Версия LabVIEW: 8.5
Контактная информация:

Re: Binäre Kommunikation

Сообщение learny »

die Elemente sind die Bytes in jedem Block, die bei jedem Request mitgesendet werden, oder?
أهلا و سهلا بالمستخدمين العرب
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Binäre Kommunikation

Сообщение Eugen Graf »

learny писал(а): Was meinst Du mit den "Elementen die ich abschicken möchte"? Die HEX-Befehle, die ich aus den logged-requests aufgezeichnet habe, oder die CMD Befehle, die auf Seite 32 des Protokolls?
Ich meine alles zusammen, was in das Request-Paket gehört. Also Syncbyte, CMD, Daten u.s.w.
Das ganze funktioniert genauso, wie in anderen Programmiersprachen. Man macht eine Datenstruktur (in LV ist es ein Cluster) und man castet diese Struktur aus den Typ ByteArray (das macht das Flatten To String in LV). Na gut, in C/C++ gibt es noch Pointer, den man direkt an die Write Funktion übergeben kann, aber in LV wird es mit Casten gemacht.
Аватара пользователя
learny
adviser
adviser
Сообщения: 207
Зарегистрирован: 23 окт 2008, 17:54
Версия LabVIEW: 8.5
Контактная информация:

Re: Binäre Kommunikation

Сообщение learny »

hallo eg,

bin gerade sehr durcheinander.. Möchte daher nur folgendes fragen, so dass ich die Information besser "ordnen" kann..

durch den Cluster werde ich in der Lage sein, die verschiedenen Parametern in eine Sturktur so zu bündeln, so dass ich sie danach aufgefächert in den VISA-Write VI schicke. Habe ich die Sache so richtig verstanden?

kann ich die Funktion des Clusters ersetzen durch einen einzigen Befehl, der alle in den Cluster eingehenden Parametern enthält? Brauche ich dazu das Flatten To String?

Ein Requestpaket soll eigentlich folgendes enthalten oder?:

1- Start Byte: 68
2- danach den Längenbyte 2x:04 04
3- dann wieder den Startbyte: 68

4- danach kommt der Inhalt des Telegramms, bestehend aus dem Protokollkopf+Nutzdaten (Laut Buch 7 Bytes Protokollkopf und bis 255 Byte für die Nutzdaten).

5- Checksum aus eine byteweise Addition des Protokollkopfes + Nutzdaten

6- Stoppbyte: 16

was ist die Stelle 4? Sind es die CMD-Befehle in string Format?

Danke vielmals
أهلا و سهلا بالمستخدمين العرب
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Binäre Kommunikation

Сообщение Eugen Graf »

learny писал(а): hallo eg,

bin gerade sehr durcheinander.. Möchte daher nur folgendes fragen, so dass ich die Information besser "ordnen" kann..

durch den Cluster werde ich in der Lage sein, die verschiedenen Parametern in eine Sturktur so zu bündeln, so dass ich sie danach aufgefächert in den VISA-Write VI schicke. Habe ich die Sache so richtig verstanden?
Ja, genau
learny писал(а): kann ich die Funktion des Clusters ersetzen durch einen einzigen Befehl, der alle in den Cluster eingehenden Parametern enthält?
Ja, du kannst es machen
learny писал(а): Brauche ich dazu das Flatten To String?
Nein, du kannst eine Stringkonstante erstellen und dort dein binäres String zum Abschicken fest reinschreiben
learny писал(а): Ein Requestpaket soll eigentlich folgendes enthalten oder?:

1- Start Byte: 68
2- danach den Längenbyte 2x:04 04
3- dann wieder den Startbyte: 68

4- danach kommt der Inhalt des Telegramms, bestehend aus dem Protokollkopf+Nutzdaten (Laut Buch 7 Bytes Protokollkopf und bis 255 Byte für die Nutzdaten).

5- Checksum aus eine byteweise Addition des Protokollkopfes + Nutzdaten

6- Stoppbyte: 16

was ist die Stelle 4? Sind es die CMD-Befehle in string Format?

Danke vielmals
Die CMD-Befehle sind nicht im Stringformat, es sind Zahlen, die du durch Flatten To String in ein binäres String umwandelst.
Ich denke das Commando steht an der Stelle 4 im Protokollkopf.

Übrigens, da du die Checksumme berechnen sollst, konnte die händische Eingabe über Terminal nicht funktionieren, außer du hast die Pakete mitgehört und genauso abgeschickt. Hast du schon ein VI zur Checksummenberechnung?
Аватара пользователя
learny
adviser
adviser
Сообщения: 207
Зарегистрирован: 23 окт 2008, 17:54
Версия LabVIEW: 8.5
Контактная информация:

Re: Binäre Kommunikation

Сообщение learny »

Die CMD-Befehle sind nicht im Stringformat, es sind Zahlen, die du durch Flatten To String in ein binäres String umwandelst.
Ich denke das Commando steht an der Stelle 4 im Protokollkopf.

Übrigens, da du die Checksumme berechnen sollst, konnte die händische Eingabe über Terminal nicht funktionieren, außer du hast die Pakete mitgehört und genauso abgeschickt. Hast du schon ein VI zur Checksummenberechnung?
bezüglich der Checksumme - habe ich leider nicht..

sind die CMD-Zahlen also die dazugeordneten Zahlen in der zweiten Spalte in der CMD-Tabelle auf Seite 32? (z.B. für CMD_GET_NET wäre die Zahl 6?)
أهلا و سهلا بالمستخدمين العرب
Ответить

Вернуться в «Kommunikation mit Geräten»