Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Datenübertragung über TMSComm / String Double (https://www.delphipraxis.net/114424-datenuebertragung-ueber-tmscomm-string-double.html)

Chemiker 25. Mai 2008 09:42


Datenübertragung über TMSComm / String Double
 
Hallo,

ich habe folgendes Problem, die Datenübertragung über die serielle Schnittstelle wird mit der Komponente TMSComm von VS 6.0 Prof. durchgeführt.
Die Übertragung ist eine Messstellen – Kennung und einen Messwert als String.
Etwa in der Form

‚T01T1-000135.12’ dieser String wird über die serielle Schnittstelle übertragen.

Ergebinss:

‚T01T1’ Messstellen - Kennung als String
-135.12 Messwert als Double

Ich würde aber lieber die Messstellen – Kennung als String übertragen und den Messwert als Double.

Bis bald Chemiker

marabu 25. Mai 2008 09:53

Re: Datenübertragung über TMSComm / String Double
 
Moin,

ich würde es lieber weiter als String übertragen. Sobald du interne Datenformate übermittelst, wirst du dir Gedanken über ein binärkompatibles Übertragungsprotokoll machen müssen, damit nicht plötzlich Steuerzeichen interpretiert werden, die einfach nur Bestandteil eines Double-Wertes sind.

Freundliche Grüße

Chemiker 25. Mai 2008 10:11

Re: Datenübertragung über TMSComm / String Double
 
Hallo marabu,

danke für die schnelle Antwort.
Es ist jetzt so, dass ein Block von 16 Zeichen übertragen wird egal welcher Messwert übertragen wird.
Ist es eigentlich möglich den Anfang und das Ende des Blocks zu kennzeichnen, dann könnte der String so aussehen:

[Anf.] T01T1-135.12[Ende]
[Anf.]T01T2+10000.01[Ende]
usw.

allerdings bekomme ich dann unterschiedlich Längen.

Bis bald Chemiker

marabu 25. Mai 2008 10:53

Re: Datenübertragung über TMSComm / String Double
 
Warum nicht? Dafür sind die ASCII Control Character schließlich da, z.B. STX (#2, start-of-text) und ETX (#3, end-of-text).

Chemiker 25. Mai 2008 12:48

Re: Datenübertragung über TMSComm / String Double
 
Hallo marabu,

dann werden die Strings so aufgebaut:
chr(002)+’T01T1-132.12’+chr(003)
chr(002)+’T02T1+1000000.01’+chr(003)

Aber wie kann ich den übertragenen String wieder isolieren? Und wie muss der Aus- und Eingabepuffer aussehen. Bisher habe ich bei einem Fehler der Empfangspuffer gelöscht.

Bis bald Chemiker

marabu 25. Mai 2008 13:03

Re: Datenübertragung über TMSComm / String Double
 
Hallo,

die Lösung ist eigentlich recht einfach: Du benötigst einen Zustandsautomaten, der dieses primitive Protokoll verarbeiten kann. Bei TP Async Pro werden dir für diesen Zweck Data Trigger Events angeboten. Vielleicht bietet MSCOMM32.OCX ja ähnliche Mechanismen?

Freundliche Grüße

Chemiker 25. Mai 2008 14:37

Re: Datenübertragung über TMSComm / String Double
 
Hallo marabu,

also aus der Dokumentation geht nichts hervor, ob das Protokoll so aufgebaut ist. Man kann von Text auf Binär umstellen das war’s.
Habe auch schon im Internet gesucht, aber kein passendes Beispiel in VB, C++ oder Delphi gefunden.

Ich wollte das Programm nur anpassen und nicht eine neue Komponente einbauen. Ist auch blöd, dass seit bestehen von Delphi so eine Komponente nicht vorhanden ist, daher habe ich vor Jahren auf TMSCOMM gesetzt, weil mir VS 6.0 zur Verfügung stand.

Ich werde mal Versuchen, ob ich es binär hinbekomme und die einzelnen Bytes prüfen.
Wenn Du noch eine Idee hast, nur her damit.

Bis bald Chemiker

OldGrumpy 25. Mai 2008 15:46

Re: Datenübertragung über TMSComm / String Double
 
ÖHM... Was genau ist jetzt Dein Problem? Ich hab den Thread jetzt zweimal gelesen und komme einfach nicht dahinter, was Du nun ändern willst, Chemiker. Wo genau klemmt es denn? Willst Du irgendein Programm von C++ nach Delphi portieren oder worum geht es eigentlich? Sobald Du das ASCII-basierte Protokoll in ein binäres Protokoll änderst, wird Dein Parser sehr viel komplizierter, Du erhöhst also ohne Not die Anzahl möglicher Bugs und Probleme. Mehr Details zum Problem bitte!

Chemiker 25. Mai 2008 16:35

Re: Datenübertragung über TMSComm / String Double
 
Hallo OldGrumpy,

ursprünglich wollte ich einen String+Double Wert über die serielle Schnittstelle übertragen.
Habe ich so in #1 geschrieben. Es ist aber besser beim String zu bleiben.
Meine Frage ist jetzt wenn ich einen String übertrage, sollte er wie in #5 aussehen.

Zitat:

die Lösung ist eigentlich recht einfach: Du benötigst einen Zustandsautomaten, der dieses primitive Protokoll verarbeiten kann. Bei TP Async Pro werden dir für diesen Zweck Data Trigger Events angeboten. Vielleicht bietet MSCOMM32.OCX ja ähnliche Mechanismen?
Diese Data Trigger Events sind wahrscheinlich nicht in MSCOMM vorhanden, jedenfalls finde ich nichts.

Bis bald Chemiker

marabu 25. Mai 2008 17:17

Re: Datenübertragung über TMSComm / String Double
 
Hallo Chemiker,

hast du das Event OnComm() übersehen?

Damit solltest du doch alles notwendige implementieren können.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz