Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - kann keine daten über die serielle schnittstelle senden


mexwell - Fr 03.10.08 23:12
Titel: kann keine daten über die serielle schnittstelle senden
hallo erstmal..

ich habe folgendes problem...
undzwar möchte ich eine relaiskarte über die serielle schnittstelle steuern. das ganze funktioniert auch mit putchar...
das problem ist das ich keinen string senden kann. das ganze hat auch schonmal geklappt, bis ich den rechner neu aufgesetzt hab. ich hab auch schon überprüft ob an der schnittstelle was rauskommt, indem ich mit einem crossoverkabel und dem hyper terminal die daten gelesen hab die rausgeschickt werden. obwohl das richtige rauskommt reagiert die relaiskarte nicht.
gibt es irgendwelche einstellungsmöglichkeiten??
ich vermute es liegt vllt sogar an irgendwelchen treibern weil es mit demselbem code schon funktioniert hat..


Xentar - Sa 04.10.08 01:19

Baudrate, Parity, Databits, Stopbits schon überprüft?


mexwell - Sa 04.10.08 09:58

ja hab ich alles schon überprüft...die karte lässt sich auch steuern über den befehl "putchar(^A)". für eine andere anwendung wäre es mir jedoch lieber einen string senden zu können. ich wollte zusätzlich eine zweite relaiskarte (vellemannk8056) und einen ir transmitter (http://www.irtrans.de) ansteuern. und da wäre es so einfacher.


mexwell - Sa 04.10.08 10:16

oder fangen wir mal ganz vorne an wenn ich mit async pro eine dezimalzahl als string senden möchte ist doch

com.open:= true;
com.putstring ('11');

zum senden der zahl 11 richtig, oder?
hänge schon seit tagen an diesem problem...


Xentar - Sa 04.10.08 13:41

Nun ist die Frage, ob wirklich die Zahl 11 als String erwartet wird, oder ein Byte, mit dem Wert 11 ;) Das wäre dann PutString(#11)
Ich selber arbeite bei den Apros mit der Methode Output, also z.B. ApdComPort.Output := 'test'; Kann aber sein, dass das im Hintergrund dasselbe ist wie PutString.

Edit: Gibts da ein Beispielprogramm zu? Wenn ja, könntest du dir z.B. mit PortMon anschauen, was genau dieses Beispielprogramm sendet.


mexwell - Sa 04.10.08 22:00

danke für den tipp, aber ich glaube nicht dass es daran liegen kann. in der dokumentation der relaiskarte steht dass es einem freigestellt ist ob man dezimal hexadezimal oder im ascii-code sendet. bei der karte liegt auch eigentlich nicht dass problem sie lässt sich ja steuern aber ebend nicht mit einem string. momentan versuche ich eine zweite karte anzusteuern (vellemann k8056), und die will einen string haben. ich werd nachher auf jedenfall nochmal die ganzen parameter überprüfen ob diese richtig eingestellt sind. wenn ich jetzt mal einen schritt weiterdenke und davon ausgehe dass in der programmierung alles richtig gemacht wurde, kann es denn sein dass es im system etwas gibt das verhindert dass ich einen string senden kann bzw. nicht richtig ankommt. mit hyperterminal hab ich ja schon nachgesehn was ankommt, und das war richtig. achso und mit com.output hat das auch nicht funtkioniert. der fehler lässt sich schlecht eingrenzen und macht somit die lösung des problems relativ schwer für einen anfänger.


jaenicke - Sa 04.10.08 22:09

user profile iconmexwell hat folgendes geschrieben Zum zitierten Posting springen:
in der dokumentation der relaiskarte steht dass es einem freigestellt ist ob man dezimal hexadezimal oder im ascii-code sendet.
Naja, aber irgendwoher muss die Karte ja dann wissen wie sie die ankommenden Bits interpretieren muss...
Ich meine, wie du sendest mag zwar egal sein, nicht aber was du sendest. Die Daten müssen dann bei einer anderen Sendemethode vermutlich trotzdem im Bitstrom genauso aussehen, es sei denn du kannst das Format vorher angeben.


mexwell - So 05.10.08 13:21

ok das problem mit relaiskarte 1 wäre gelöst der befehl war com.putstring(#11); und nicht putstring('1');. und nun zum nächsten die karte von vellemann benötigt einen string der sich aus zahlen und buchstaben zusammensetzt. da funktioniert das mit dem: '#' nicht. was hab ich da für möglichkeiten?


Xentar - So 05.10.08 14:29


Delphi-Quelltext
1:
PutString(#12 + 'test' + #13#14 + 'muh');                    

Wo ist das Problem?


jaenicke - So 05.10.08 14:36

Vermutlich im Verständnis.
Ich versuche mal am Beispiel zu erklären wo der Unterschied liegt:

Quelltext
1:
2:
#11     0000 1011           // die 11 als Zahl
'11'    0011 0001 0011 0001 // zweimal die 1 hintereinander
Und wenn die Bits so ankommen, muss das eben in dem Format sein wie es sein soll.