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 

Spezielles Byte nach Eingang weiterverarbeiten, RS232



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!

02.02.2012, 09:58
Beitrag #11

Maxix Offline
LV-Neueinsteiger ; )
*


Beiträge: 10
Registriert seit: Feb 2012

2010 fully loaded ; )
2012
DE

38xo0
Deutschland
RE: Spezielles Byte nach Eingang weiterverarbeiten, RS232
Moin,
danke für die weiteren Ratschläge und das Erstellen des VI.


In der Anleitung des Stellmotors steht, dass die Daten im ASCII Code kommen.
Bei der Definition der Bytes steht dann:

$Kxxxx<LF>

$K Kennung Istposition
xxxx Istposition, 0x0000 bis 0x0480, (Begrenzung durch relatives Messsystem)
<LF> Line-Feed

Die Begrenzung durch das relative Messsystem sind meine (jetzt) „036C“ (Ventil geht net weiter auf). Allerdings ist dies ASCII Code (char), und nicht hex, richtig?
Das dort „0x“ vor der 0000 bzw. 0480 steht verwirrte mich, denn ich hatte gelesen, dass Hexadezimalzahlen durch die Folge von „0x“ angekündigt werden. Wenn man sich dies Ziffer für Ziffer nach der angehängten Tabelle entschlüsseln würde, kämen nur irgendwelche Befehle aber keine Werte zustande.

Zum Verständnis:
Habe ich ein ASCII Zeichen, kann ich dieses in hex, dez oder binär ummünzen. Aus jedem System lässt es sich wieder zurück ins ASCII Zeichen „holen“, oder in eines der anderen Formate ändern.
Wenn ich jetzt aber das eigentlich Zeichen als hex angebe, hat es doch eine ganz andere Bedeutung oder nicht?
Sprich:
ASCII „30“
Ist nicht
Hex „30“.

Wenn ich nun in die beiden VIs schaue und dort von einem Hexadezimal-String in eine Zahl umgewandelt wird, frage ich mich, ob das richtig ist.
Es kommt ein ASCII Code durch das VISA herein. Der Baustein nimmt dann diesen Wert und geht davon aus, dass es ein Hexwert ist. Anschließend wandelt er diesen in eine Zahl (eine Dezimalzahl nehme ich an).
Stört das gar nicht, bzw. ist das nicht „eigentlich“ falsch?
Die Bedeutung der „0“ bei Hex ist ja eine andere als wenn es sich um eine ASCII Chars „0“ handelt.
In der Hilfe steht:
„Interpretiert die Zeichen 0 bis 9, A bis F und a bis f in String beginnend am Offset als eine ganze Hexadezimalzahl und zeigt diese in Zahl an“.
Heißt für 036C dann (C=12)*1 + 6*16 + 3*256 + 0*4096 = 876 (ist auch der ausgegebene Wert).
Nehme ich die 036C in ASCII und wandel sie in hex um, ergibt das 30 33 36 43.
Wandelt man dies in eine Dezimalzahl, ergibt es: 808662595
Im Endeffekt müsste das Verhältnis ja immer gleich bleiben und ich kann auch aus dem Wert „876“ eine Prozentangabe erzeugen. Aber ich möchte gerne ein wenig dahinter steigen und bin gut durcheinander : )

Wäre super, wenn mir das jemand erklären/bestätigen kann.

Gruß

Justus


Angehängte Datei(en) Thumbnail(s)
   

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
02.02.2012, 10:07 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2012 10:10 von GerdW.)
Beitrag #12

GerdW Offline
______________
LVF-Team

Beiträge: 17.468
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Spezielles Byte nach Eingang weiterverarbeiten, RS232
Hallo Justus,

OMG, wat lernt die Jugend heute bloß so im Mathe-Unterricht...

In deiner Botschaft bekommst die 4 Ziffern des Hexwerte als ASCII kodiert ("human readable"). Die Funktion "Hexadezimal-String nach Zahl" wandelt dir diesen String dann wieder in eine Zahl zurück - und zwar im genannten Beispiel in 876d (oder auch 36Ch). (In welchem Zahlensystem du dir die Zahl darstellen lässt, ist übrigens vollkommen Banane und hier irrelevant.) Die Umrechnung nach Prozent musst du dann selbst machen, ich vermute mal nach der einfachen Dreisatzformel 36Ch/480h=76,042%...

Noch ein Beispiel:
Du startest Notepad und schreibst dort die schöne Zahl "876" hin und speicherst das Ganze als Textdatei. Was steht dann in der Datei? Dort stehen die Bytes 38h, 37h und 36h (und evtl. noch 0Dh und 0Ah, wenn du ein Zeilenende hinzugefügt hast) - trotzdem liest du 876, da die Zahl "human-readable" als ASCII codiert wurde.
Genauso liefert dir dein Sensor Werte: "human-readable" ASCII-kodierte Hexwerte...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2012, 10:39 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2012 10:45 von Lucki.)
Beitrag #13

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Spezielles Byte nach Eingang weiterverarbeiten, RS232
(02.02.2012 09:58 )Maxix schrieb:  Die Begrenzung durch das relative Messsystem sind meine (jetzt) „036C“ (Ventil geht net weiter auf). Allerdings ist dies ASCII Code (char), und nicht hex, richtig?
Ich gehe jetzt mal nur auf diesen Satz ein, weil sich hier schon mal ein fundamentaler Irrtum offenbart.
ASCII-Code steht nicht im Widerspruch zu HEX. ASCII-Code kann in Binär-, Oktal-, Dezimal oder Hex- Darstellung sein.
Das Gegenteil von ASCII-Code ist die direkte Übertragung von Bytes.
Beispiel: Wert Dezimal "10"
Bei direktes Byte hat es die Bitfolge "00001010". Hier gibt es keinen Diffenziereung Binär, Dezimal.., das Byte selbst ist immer dasselbe. Bei VISA-Lesen werden die Zeichen aber immer als Text interpretiert. In diesem Falle wäre das ein Linefeed. Das Linefeed ist kein Linefeed, sondern der Wert 10, wenn es sich nicht im ASCII-Code handelt.

Der ASCII - Wert der Zahl 10 hängt davon ab, in welchem Zahlensystem man es Codiert. Vom gesamten ASCII-Zeichensatz werden hier nur die wenigen Zeichen von 0..9, A..D verwendet. Also:
Binär: "1010" = 8-stelliger String
Dezimal: "10" = 2-stelliger String
Hex: "A" = 1-stelliger String

Der Nachteil der direkten Wertübertragung ist, daß man die ganzen Steuerzeichen, wie z.B. <LF>, nicht mehr benutzen kann, da diese Bytes jederzeit mitten in den Zahlen vorkommen können. Der Vorteil ist natürlich offensichtlich: Für direkte Übertragung eines 32Bit Integers brauche ich 4 Byte, für die Übertragung als ASCII-HEX aber 8 Byte.

Trotzdem: Der Standard bei serieller Übertragung ist der ASCII-Code - man möchte auf die Steuerzeichen nicht verzichten. Und nur damit hast Du es in Deinem Fall zu tun. Ob es sich um HEX- oder DEC- Code handelt , das mußt Du aus dem Manual selbst herausfinden, das können wir nicht wissen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2012, 11:54 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2012 11:55 von Maxix.)
Beitrag #14

Maxix Offline
LV-Neueinsteiger ; )
*


Beiträge: 10
Registriert seit: Feb 2012

2010 fully loaded ; )
2012
DE

38xo0
Deutschland
RE: Spezielles Byte nach Eingang weiterverarbeiten, RS232
Hiho,
bei mir ist die Schulzeit schon fast 10 Jahre zurück… ich denke die Kids von heute sind noch viel ärmer dran.
Ist schon ne Menge neues Input…

Ich habe mir nun eine Anzeige erstellt um entsprechende Werte auszulesen.
Das funktionierte auch überraschend gut und auf Anhieb. VI dazu ist im Anhang.
Als nächstes werde ich versuchen aus dem bestehenden ein SubVI zu erstellen, damit ich es einfacher dreimal gleichzeitig nutzen kann.
Ich gehe nicht davon aus, dass dies so einfach wird…
Der erste Versuch einfach das VISA Resourcename und das Stop als Eingang und die % Werte als Ausgänge zu nehmen hat nicht funktioniert : D
(Baue jetzt erst mal die Stellmotoren auf und schaue, ob es so drei Instanzen mit unterschiedlichen COM-Ports nebeneinander geben darf).

@Lucki,
dein VI dazu hat sehr geholfen. Jetzt kann ich anfangen alles zu verstehen… danke dir.


Gruß

Justus


Angehängte Datei(en)
10.0 .vi  Dateneinlesen VI.vi (Größe: 25,32 KB / Downloads: 175)

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2012, 12:37
Beitrag #15

GerdW Offline
______________
LVF-Team

Beiträge: 17.468
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Spezielles Byte nach Eingang weiterverarbeiten, RS232
Hallo Justus,

Zitat:Der erste Versuch einfach das VISA Resourcename und das Stop als Eingang und die % Werte als Ausgänge zu nehmen hat nicht funktioniert
Hat schon funktioniert, aber nicht so, wie von dir erwartet...
Nochmal: Link in meiner Signatur durcharbeiten. Dann immer laut wiederholen: THINK DATAFLOW!
Dataflow: Ein subVI wird gestartet, sobald alle Eingangsdaten anstehen und liefert Daten erst nach Beendigung! Wie soll dein subVI jemals mitbekommen, wann du den Stop-Knopf drückst, wenn du ihm nur den Status vom Aufruf anbietest?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.02.2012, 10:14 (Dieser Beitrag wurde zuletzt bearbeitet: 06.02.2012 10:15 von Maxix.)
Beitrag #16

Maxix Offline
LV-Neueinsteiger ; )
*


Beiträge: 10
Registriert seit: Feb 2012

2010 fully loaded ; )
2012
DE

38xo0
Deutschland
RE: Spezielles Byte nach Eingang weiterverarbeiten, RS232
Hallo,

ich habe ein wenig weiter herumgespielt und hatte noch ein paar Ideen, bei denen ich aber an der Umsetzung bzw. den Gedanken hänge…

Vorweg – natürlich versuche ich eure Ratschläge zu befolgen und lese mir die Links und Anleitungen durch, aber es ist wie eine Fremdsprache und von heut auf morgen kann ich dieses Wissen scheinbar nicht in meine Rübe prügeln, also bitte ich weiterhin um Nachsicht ; )

Nachdem ich Windows klargemacht habe, welcher Stellmotor an welchem COM-Port fungieren soll liest der PC nun alle Daten zufriedenstellend aus. Ich habe die Anzeige um eine Sollwertanzeige erweitert. Es funktioniert, aber habe ich auch einen einfachen/passenden Weg dazu genutzt? (Siehe VI).

Einer der Stellmotoren hat einen anderen Maximalwert als die anderen beiden (740 anstatt 876).
Da ich durch diesen Wert meine Prozentangabe ermittele wird bei z.B. 100% Ventilöffnung nicht 100% sondern nur ~ 85% angezeigt. Ich könnt ihn manuell ändern bzw. an den jeweiligen Motor anpassen, aber vielleicht lässt sich dafür auch eine Automatik entwickeln?
Also entweder fahre ich ein Programm in dem ich dreimal alles parallel laufen lasse (ohne SubVI) und habe somit einen einfacheren Zugriff auf die Werte (zur manuellen Änderung), oder es gibt eine Möglichkeit den maximalen Wert "automatisch" anzulernen.
Hier ist eine manuelle Lösung doch deutlich attraktiver und einfach oder?
Es geht mir dabei hauptsächlich um die Benutzerfreundlichkeit.
Zur Ermittlung des Maximalwertes eines jeden Motors müsste das Ventil ja dann einmal ganz auf gefahren werden. Die Stellmotoren werden aber auch nicht so häufig ausgetauscht…

Dann wünsche ich euch schon mal eine tolle Woche…

Justus


Angehängte Datei(en)
10.0 .vi  Dateneinlesen soll u ist ohne bytekontrolle.vi (Größe: 16,53 KB / Downloads: 165)

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
06.02.2012, 16:34 (Dieser Beitrag wurde zuletzt bearbeitet: 06.02.2012 16:35 von Maxix.)
Beitrag #17

Maxix Offline
LV-Neueinsteiger ; )
*


Beiträge: 10
Registriert seit: Feb 2012

2010 fully loaded ; )
2012
DE

38xo0
Deutschland
RE: Spezielles Byte nach Eingang weiterverarbeiten, RS232
Moin,
die Arbeit trägt Früchte.
Ich habe das Programm nun bereits in einer *.exe eingebettet und es funktioniert auch so wie gewünscht.

Mal sehen, wie es weiter geht.

Gruß

Justus


Angehängte Datei(en)
0.0 .rar  Alphalesen.rar (Größe: 288,44 KB / Downloads: 170)

Webseite des Benutzers besuchen 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
  dynamische Byte-Anzahl einer Nachricht Gottimp 6 4.948 23.03.2021 18:15
Letzter Beitrag: GerdW
  Problem: Empfangene Byte Anzahl ändert sich MKVH28 7 6.633 26.03.2015 17:39
Letzter Beitrag: Lucki
  Byte (hex) erzeugt Timeout im VISA Lolleg 2 4.257 06.06.2014 13:26
Letzter Beitrag: Lolleg
  Jeweiliges High und Low Byte richtig zusammenfügen rookieNo.x 2 7.932 29.10.2012 18:43
Letzter Beitrag: rookieNo.x
  Delay nach jedem gesendeten Byte hans75 5 6.064 21.09.2010 16:13
Letzter Beitrag: GerdW
  VISA Read - Byte Count Wert LabVIEWDompteur 5 11.383 13.05.2009 12:13
Letzter Beitrag: rolfk

Gehe zu: