INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Neuling benötigt hilfe



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

22.08.2006, 14:36
Beitrag #1

Steve1 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Aug 2006

LV8.0
2006
kA

4420
Deutschland
Neuling benötigt hilfe
Hallo alle zusammen,
ich arbeite erst seit 3 Wochen mit LV und meine Grundkenntnisse übers Programmieren sind auch nicht so berauschend.
Also: Ich möchte über LV mit VISA einen Messverstärker ansprechen, der im Normalmodus permanent seine Messwerte auf die serielle Schnittstelle schreibt. Es werden für jeden Messwert 5 Bytes übertragen:
-das erste dient der Synchronisierung
-das zweite ist Status-Byte
-3 bis 5 sind Daten-Bytes : HByte, MByte und LByte
es werden also 24 Bit übertragen
Die Registerwerte werden durch Semikolon getrennt übetragen, nachdem sie durch einen entsprechenden Befehl angefordert wurden. Es werden 2 bis 8 Daten-Bytes übertragen.
Nun zu meinen Fragen:
Wie kann ich das permanente Schreiben unterbinden?
Warum bekomme ich, nachdem ich einen Befehl gesendet habe, nicht die zu erwartente Antwort?
Wie kann ich die drei Daten-Bytes herausfiltern um diese Auszuwerten?
Ich hoffe auf eure Unterstützung


Angehängte Datei(en)
Sonstige .vi  Messverst_rker.vi (Größe: 29,93 KB / Downloads: 254)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
22.08.2006, 14:57
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Neuling benötigt hilfe
Hallo,

das permanente Schreiben kannst Du unterbinden, wenn Du eine Event-Structure verwendest. Dann wird irgendein Case nur nach einem bestimmten Event ausgeführt.

Wenn Du ein Schreibbefehl sendest, dann sollte "Read" nicht aktiv sein, wenn Du ein Abfragebefehl schickst, dann sollten beide aktiv sein. Vielleicht liegt es daran, dass Du nichts empfängst. Ich habe auch mal über VISA *RST (Reset) geschickt und hatte ein "Read" dabei. Dann hat das Gerät einfach keinen Reset durchgeführt.

Die Datenbytes kannst Du ja in ein Array schreiben und da gibt es ja einige Möglichkeiten, um irgendwelche Werte "rauszufiltern" (Index Array) oder zu löschen (Delete from Array),....

Gruß Markus

' schrieb:Hallo alle zusammen,
ich arbeite erst seit 3 Wochen mit LV und meine Grundkenntnisse übers Programmieren sind auch nicht so berauschend.
Also: Ich möchte über LV mit VISA einen Messverstärker ansprechen, der im Normalmodus permanent seine Messwerte auf die serielle Schnittstelle schreibt. Es werden für jeden Messwert 5 Bytes übertragen:
-das erste dient der Synchronisierung
-das zweite ist Status-Byte
-3 bis 5 sind Daten-Bytes : HByte, MByte und LByte
es werden also 24 Bit übertragen
Die Registerwerte werden durch Semikolon getrennt übetragen, nachdem sie durch einen entsprechenden Befehl angefordert wurden. Es werden 2 bis 8 Daten-Bytes übertragen.
Nun zu meinen Fragen:
Wie kann ich das permanente Schreiben unterbinden?
Warum bekomme ich, nachdem ich einen Befehl gesendet habe, nicht die zu erwartente Antwort?
Wie kann ich die drei Daten-Bytes herausfiltern um diese Auszuwerten?
Ich hoffe auf eure Unterstützung

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.08.2006, 15:00
Beitrag #3

A.Berndsen Offline
LVF-Team
LVF-Team

Beiträge: 2.437
Registriert seit: Feb 2005

8.2.1 - 2011
2004
DE

724xx
Deutschland
Neuling benötigt hilfe
' schrieb:Nun zu meinen Fragen:
Wie kann ich das permanente Schreiben unterbinden?
Warum bekomme ich, nachdem ich einen Befehl gesendet habe, nicht die zu erwartente Antwort?
Wie kann ich die drei Daten-Bytes herausfiltern um diese Auszuwerten?
Ich hoffe auf eure Unterstützung

Hallo Steve,

die Einstellungen der Schnittstelle solltest Du außerhalb der Whileschleife plazieren. (nach links aus der Schleifer rauslegen) Sonst wird die Schnittstelle mit jedem Schleifendurchlauf neu initialisiert. Das ist nicht notwendig und geht zu Lasten der Schnelligkeit.
Im selben Zuge solltest Du natürlich das Schliessen der Visa-Session ebenfalls aus der Schleife herausnehmen. (nach rechts ziehen zusammen mit dem Fehlerbehandler)

Was meinst Du mit permanentes Schreiben ?
Wenn Du das Schaltverhalten Deines Schreiben-Schalters auf "Latch beim drücken" änderst, sollte Dein Befehl nur einmal gesendet werden.
Welche Antwort bekommst Du denn auf Deinen gesendeten Befehl?

Hast Du mal mit Hyperterminal das ganze simuliert. Was erhältst Du dort als Antwort ?

Grüße
Andreas

Geht nicht, gibts nicht!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.08.2006, 15:19
Beitrag #4

Steve1 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Aug 2006

LV8.0
2006
kA

4420
Deutschland
Neuling benötigt hilfe
' schrieb:Hallo Steve,

die Einstellungen der Schnittstelle solltest Du außerhalb der Whileschleife plazieren. (nach links aus der Schleifer rauslegen) Sonst wird die Schnittstelle mit jedem Schleifendurchlauf neu initialisiert. Das ist nicht notwendig und geht zu Lasten der Schnelligkeit.
Im selben Zuge solltest Du natürlich das Schliessen der Visa-Session ebenfalls aus der Schleife herausnehmen. (nach rechts ziehen zusammen mit dem Fehlerbehandler)

Was meinst Du mit permanentes Schreiben ?
Wenn Du das Schaltverhalten Deines Schreiben-Schalters auf "Latch beim drücken" änderst, sollte Dein Befehl nur einmal gesendet werden.
Welche Antwort bekommst Du denn auf Deinen gesendeten Befehl?

Hast Du mal mit Hyperterminal das ganze simuliert. Was erhältst Du dort als Antwort ?

Grüße
Andreas

Ich bedank mich für euer bemühen.

@ Andreas: Das permanente Schreiben bezog sich auf den Messverstärker. Er antwortet fast endlos. Keine Ahnung wieso und weshalb...

Ich werde eure Ratschläge jetzt in aller Ruhe ausprobieren und mich gegebenfalls noch mal melden!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.08.2006, 15:30
Beitrag #5

A.Berndsen Offline
LVF-Team
LVF-Team

Beiträge: 2.437
Registriert seit: Feb 2005

8.2.1 - 2011
2004
DE

724xx
Deutschland
Neuling benötigt hilfe
Hallo Steve,

ich hab Dein Programm testweise hier laufen lassen.
Mit der Funktion der Kippschalter hab ich so meine Nöte.
Deshalb habe ich diese testweise durch Schaltflächen ersetzt.
Kannst Du mir sagen, was der Wert 59 als Abschlußzeichen darstellt?
Das ist mir so nicht geläufig.

Grüße
Andreas


Angehängte Datei(en)
Sonstige .vi  Steve_Messverstaerker.vi (Größe: 30,37 KB / Downloads: 244)

Geht nicht, gibts nicht!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.08.2006, 16:30
Beitrag #6

Steve1 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Aug 2006

LV8.0
2006
kA

4420
Deutschland
Neuling benötigt hilfe
' schrieb:Hallo Steve,

ich hab Dein Programm testweise hier laufen lassen.
Mit der Funktion der Kippschalter hab ich so meine Nöte.
Deshalb habe ich diese testweise durch Schaltflächen ersetzt.
Kannst Du mir sagen, was der Wert 59 als Abschlußzeichen darstellt?
Das ist mir so nicht geläufig.

Grüße
Andreas

Die 59 soll ein ";" bedeuten (ASCII). Ich hatte die Absicht, das immer nur bis zu dem ";" gelesen werden soll, damit ich die Daten dann auswerten kann. Klappt aber leider nicht so, wie ich es mir gvorgestellt hab.


' schrieb:Die 59 soll ein ";" bedeuten (ASCII). Ich hatte die Absicht, das immer nur bis zu dem ";" gelesen werden soll, damit ich die Daten dann auswerten kann. Klappt aber leider nicht so, wie ich es mir gvorgestellt hab.
Nochmal ich.
Danke nochmal für dein Bemühen.
Mir stellt sich jetzt aber dir Frage, wie ich die gelesenen Daten auswerten kann???
Beim Schreiben stell ich einen Befehl aus einer Befehlstabelle, den der Messverstärker mit unterschiedliche Anzahl von Daten-Bytes beantwortet. Und genau die Bytes benötige ich. Wie kann ich das machen?
Ich hoffe auf Unterstützung von euch?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
22.08.2006, 17:07
Beitrag #7

A.Berndsen Offline
LVF-Team
LVF-Team

Beiträge: 2.437
Registriert seit: Feb 2005

8.2.1 - 2011
2004
DE

724xx
Deutschland
Neuling benötigt hilfe
' schrieb:Die 59 soll ein ";" bedeuten (ASCII). Ich hatte die Absicht, das immer nur bis zu dem ";" gelesen werden soll

Das brauchst Du nicht so zu machen.
Lies einfach alles ein was Du gesendet bekommst und dann kannst Du mit Stringoperationen den gelesenen Wert aufteilen und dann weiter verarbeiten. Da Du das Trennzeichen zwischen die Bytes kennst ist das kein Problem.
Anschließend mußt Du nur noch die Daten wieder zusammensetzen, damit Du den ursprünglichen Wert bekommst.

Stell doch mal einen Antwortstring hier rein, damit wird dann klar wie es weiter gehen sollte.
Dein Programm tut in der Hauptsache das was es soll.
Sende einfach mal einen Befehl aus der Befehlstabelle. Das kannst Du alternativ auch mit Hyperterminal machen.

Grüße
Andreas

Geht nicht, gibts nicht!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.08.2006, 17:17
Beitrag #8

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Neuling benötigt hilfe
Zum Auswerten von Daten musst du einen Parser programmieren.

Es geht so:

1) Du empfängst alle Daten in einer Whileschleife
2) Du übergibst diese Daten an eine weitere Whileschleife mittels einer Queue
3) In dieser weiteren Whileschleife suchst du deinen Syncbyte in den Daten
4) Wenn du Syncbyte gefunden hast, schneidest du an dieser Stelle deine Daten ab (mit Search und Split String)
5) Dann suchst du in dem abgeschnittenem String dein Abschlusszeichen und schneidest an dieser Stelle noch mal die Daten ab
6) Das was vor dem Abschlusszeichen steht ist ein Paket, das du leicht mit "Type Cast" in Zahlen umwandeln kannst.
7) Den Rest von abgeschnittenen Daten gibst du mit einem Schieberegister wieder an den Anfang der Whileschleife.
8) Die Daten, die von der vohrigen Whileschleife knüpfst du mit "Concancenate Strings" an das Ende deiner Daten

Ungefähr so, wie im Bild

Wenn unklar, nochmal Fragen


Gruss


Angehängte Datei(en) Thumbnail(s)
   

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.08.2006, 07:38
Beitrag #9

Steve1 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Aug 2006

LV8.0
2006
kA

4420
Deutschland
Neuling benötigt hilfe
' schrieb:Das brauchst Du nicht so zu machen.
Lies einfach alles ein was Du gesendet bekommst und dann kannst Du mit Stringoperationen den gelesenen Wert aufteilen und dann weiter verarbeiten. Da Du das Trennzeichen zwischen die Bytes kennst ist das kein Problem.
Anschließend mußt Du nur noch die Daten wieder zusammensetzen, damit Du den ursprünglichen Wert bekommst.

Stell doch mal einen Antwortstring hier rein, damit wird dann klar wie es weiter gehen sollte.
Dein Programm tut in der Hauptsache das was es soll.
Sende einfach mal einen Befehl aus der Befehlstabelle. Das kannst Du alternativ auch mit Hyperterminal machen.

Grüße
Andreas

Hier also eine Antwort vom Messverstärker.
Könnte ich nicht bei "VISA:Lesen" nen Befehl geben, das es mir nur die 5 Bytes ausliest? Oder liest es dann willkürlich irgendwelche?
Ich bin richtig begeistert von eurem Zuspruch! Da macht es Spass mit LV zu arbeiten bzw. es zu lernen...

Ich


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.08.2006, 15:14
Beitrag #10

Steve1 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Aug 2006

LV8.0
2006
kA

4420
Deutschland
Neuling benötigt hilfe
' schrieb:Zum Auswerten von Daten musst du einen Parser programmieren.

Es geht so:

1) Du empfängst alle Daten in einer Whileschleife
2) Du übergibst diese Daten an eine weitere Whileschleife mittels einer Queue
3) In dieser weiteren Whileschleife suchst du deinen Syncbyte in den Daten
4) Wenn du Syncbyte gefunden hast, schneidest du an dieser Stelle deine Daten ab (mit Search und Split String)
5) Dann suchst du in dem abgeschnittenem String dein Abschlusszeichen und schneidest an dieser Stelle noch mal die Daten ab
6) Das was vor dem Abschlusszeichen steht ist ein Paket, das du leicht mit "Type Cast" in Zahlen umwandeln kannst.
7) Den Rest von abgeschnittenen Daten gibst du mit einem Schieberegister wieder an den Anfang der Whileschleife.
8) Die Daten, die von der vohrigen Whileschleife knüpfst du mit "Concancenate Strings" an das Ende deiner Daten

Ungefähr so, wie im Bild

Wenn unklar, nochmal Fragen
Gruss

Danke für deine Erklärung, aber mir sind leider noch einige Sachen unklar.
Was z.B. ist ein Syncbyte oder ein "Concancenate Strings"?
Sorry, bin noch ein Grünling im Bezug auf LV?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Dringend Hilfe bei NI-USB-8451 benötigt Drucksensor 5 5.869 23.03.2010 13:11
Letzter Beitrag: Drucksensor
  I/O Hilfe benötigt für Uraltmessstellenumschalter mit BCD Ausgang pauliprinzip 2 3.706 23.06.2009 16:15
Letzter Beitrag: pauliprinzip
  Hilfe Parallele Schnittstelle Hilfe Elli 2 4.476 12.04.2006 05:26
Letzter Beitrag: Fritz

Gehe zu: