![]() |
Serielle Schnittstelle ansprechen ...
Hallo Leute,
ich hab ein kleinen Problem ;-) ich will mit einer Relaiskarte kommunizieren .. ![]() Handbuch: ![]() Folgende Unit habe ich gefunden: ![]() Ich würde nun gerne die Karte initialisieren und wie im Handbuch beschrieben Byte 1 -> Befehl 3 Byte 2 -> Adresse Karte 1 Byte 3 -> Daten 164 Byte 4 -> Checksumme an die Karte schicken (Relais K8, Relais K6 und Relais K3 einschalten) - Binär 10100100 Aber irgendwie schaff ichs nicht .. die unit "com" hab ich in meinem Project USES eingebunden .. onButtonClick: var myCOM:TCOM; begin mycom:=TCOM.Create(self); if (myCOM.TestComPortAvailable(1)) = TRUE then showmessage('Karte 1 gefunden') else showmessage('Karte NICHT gefunden!'); da kommt immer "Karte 1 gefunden" .. weiter komme ich nicht Vielen Dank für Hinweise LiGrü Erich |
AW: Serielle Schnittstelle ansprechen ...
Cool, ich glaube die Relais-Karte von Conrad habe ich auch 8-)
Was ist jetzt genau dein Problem? Du möchtest jetzt ein paar Bytes über die Leitung bringen, findest aber nichts in dem Code von "Arnold Müller"? Der scheint seinem "TCom" nur ein Send für "Char" und "PChar" gegeben zu haben. Ich persönlich finde vorgefertigte Quellcodes für serielle Kommunikation übertrieben. Es ist nie wirklich das was man jetzt gerade braucht und aufwändig ist es ehrlich gesagt auch nicht selbst zu machen. CreateFile(..) um einmal ein Handle auf den Port zu bekommen, und fortan mit WriteFile(..) schreiben und ReadFile(..) lesen. |
AW: Serielle Schnittstelle ansprechen ...
ich würde die Cport Lib empfehlen:
![]() Damit kann man ALLES machen ;)
Delphi-Quellcode:
var sDaten:string;
begin ComPort1.Port:='COM1'; ComPort1.Open; sDaten:=#3#1#164; ComPort1.WriteStr(sDaten +checksumme(sDaten){gibt da x unterschiedliche Möglichkeiten...}); .... procedure TForm2.ComPort1RxChar(Sender: TObject; Count: Integer); var sRX:string; begin //daten empfangen: if count>0 then begin ComPort1.ReadStr(sRX,Count); end; end; |
AW: Serielle Schnittstelle ansprechen ...
Wäre auch meine Wahl.
|
AW: Serielle Schnittstelle ansprechen ...
Hi ..
Hab mir die Componente installiert .. Leider passiert auf der Platine nix ??? ... ist es wegen meiner checksum oder wegen der Bytes die ich übertragen soll ??? Hab:
Delphi-Quellcode:
function checksum(s:String):Integer;
var sum,i:Integer; begin sum := 0; for i := 1 to length(s) do begin inc(sum, ord(s[i])); end; result:= sum; end; procedure .... var sDaten:string; begin ComPort1.Port:='COM1'; ComPort1.Open; sDaten:=#3#1#164; ComPort1.WriteStr(sDaten + inttostr(checksum(sDaten))); end; procedure TMainForm.ComPort1RxChar(Sender: TObject; Count: Integer); var sRX:string; begin if count>0 then begin ComPort1.ReadStr(sRX,Count); end; showmessage(sRX); end; |
AW: Serielle Schnittstelle ansprechen ...
haste denn das richtige kabel? war das dabei?
haste die richtige baudrate/stopbits/parität/flussteuerung usw eingestellt? |
AW: Serielle Schnittstelle ansprechen ...
und ich sehe grade das du wahrscheinlich bei dem hinzufügend er prüfsumme:
Delphi-Quellcode:
machen musst.
chr(checksum(sDaten)));
+ inttostr(123) schickt 3 bytes, + chr(123) schickt 1 byte (zeichen 123) |
AW: Serielle Schnittstelle ansprechen ...
... sollte zwischen Daten und Checksum nicht ein Trennzeichen (',' oder '*') sein ?
... o.k., Handbuch gelesen --> ohne Trennzeichen |
AW: Serielle Schnittstelle ansprechen ...
Zitat:
Gruß K-H |
AW: Serielle Schnittstelle ansprechen ...
PERFEKT !!!!
Vielen Dank .. Funktioniert super .. Ich hab die karte als "1" angesprochen .. richtig ist die "0"
Code:
begin
mainform.ComPort1.Port:='COM1'; mainform.ComPort1.Open; mainform.ComPort1.Connected:=true; sDaten:=#3#0#164; mainform.ComPort1.WriteStr(sDaten + chr(checksum(sDaten))); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz