Autor Beitrag
NAND
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 23.11.10 17:25 
Hallo

ich versuche hier von meinem PC mit Win7 auf mein Funkgerät zu zugreifen über die RS232 Schnittstelle.
Ich habe die Geräte Spezifikation gelesen und die Parameter in meinem Programm eingestellt. (4800Baud,8Datenbits,Keine Parität,2 Stopbits)
Ich weiß das dass Gerät Datengruppen von je 5 Bytes emfangen muss, um mit ihm zu kommunizieren. Nur leider gelingt mir das bisher nicht.

Ich habe die Suche hier im Forum benutzt und google zu Rate gezogen, ohne das ich sagen könnte mir ist die Sache jetzt klarer als vorher.
Vieleicht könnt Ihr mir ja etwas auf die Sprünge helfen.

Ich nutze die Komponente Turbo Async Professional 4.07, ich habe einen ComPort(Com1) mit den oben erwähnten Werten geöffnet.
Jetzt möchte ich eine Byte-Folge senden wovon die ersten 4 Leer sind und das 5 den Hex Wert 10h hat.Im Anschluss warte ich auf die Antwort
vom Funkgerät das mir einen String mit 345 Bytes zurück liefern müsste.

Egal was ich versucht habe: mit:

UMessage := (chr($00) + chr($00) + chr($00) + chr($00) + chr($10));
ACP.Output := UMessage;

habe ich das Gefühl funktioniert es nicht.
Also ist warscheinlich so das ich als Delphianfänger Mist geschrieben habe.
Könnte mir jemand erklären wie ich bei geöffnetem ComPort diese Bytes sende und dann auf Empfangen umschalte/wechsel?

hamradio.online.ru/f.../man_sch_ft747gx.pdf
Ich habe hier mal den Link zum Manule des Funkgerätes angehängt auf Seite 27-30 sind die Standarts für die CAT Kommunikation beschrieben.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 23.11.10 17:50 
ich verwende TComport aus der ComPort Library, kann Dir so nicht spezifisch helfen.
Hast Du per Hyperterminal mal versucht ob es prinzipiell geht.
Ich vermute auch bei Async Pro wird es Events geben bei denen die empfangenen Daten verarbeitet werden müssen.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
NAND Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 23.11.10 18:00 
Ich hatte schon ein Programm mit dem der FT747GX zu steuern ging.Aber das war nicht direkt für mein Gerät geschrieben, da passierten immer mal Abstürze.
Hyperterminal gibts in Win7 nicht mehr. Leider aber konnte man da hex Zeichen senden?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 23.11.10 18:22 
Es wäre schön, wenn du auch schreiben würdest wo das denn in dem PDF Dokument steht was du senden willst...

Ein String wird mit dem Nullzeichen beendet, so dass ich vermute, dass das Problem dadurch entsteht. Schließlich wird das an die API-Funktion als PChar übergeben, und dort gibt es keine Längenangabe, sondern nur dieses Endzeichen. Bist du sicher, dass es das Nullzeichen ist, das du senden musst?
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Di 23.11.10 20:19 
Hallo NAND,

bis Du sicher das die Verbindung über COM 1 läuft? Welche COM-Ports werden angezeigt?

Bis bald Chemiker
NAND Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 23.11.10 22:27 
@ jaenicke PDF Seite 30 den Update Befehl will ich senden.4 leere Bytes und das 5. mit dem Hexwert 10h.

@Chemiker ich habe nur einen ComPort am PC das ist Com1 wenn ich in meinem Programm nen naderen öffnen wollte, gibts ne Fehlermeldung.
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Mi 24.11.10 00:24 
Hallo NAND,

Du kannst Dir mit Hilfe von IsPortAvailable die verfügbaren COM-Ports ansehen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
  i: integer;
begin
  ComboBox1.Items.Clear;
  for I := 1 to 32 do
  begin
    if IsPortAvailable(i) then
    begin
      ComboBox1.Items.Add ('COM ' + IntToStr (i));
    end;
  end;
end;




Bis bald Chemiker
NAND Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 24.11.10 00:27 
Das probier ich gleich mal aus.

Edit: Ja das funktioniert soweit.Habe es ein wenig umgebaut, es erscheint nun in einer Listbox eine Meldung wenn der Com offen ist oder geschlossen.
Leider fehlt mir noch eine Status Meldung z.B. Com1 offen mit ..Baud,..Databits,..Parität,..Stopbits oder sowas in der Art.

Und das Thema senden/empfangen stellt sich mir immer noch!
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Mi 24.11.10 20:59 
Hallo NAND,

ich habe für solche Versuche mir COM0COM installiert, das ist ein visueller COM-Port über ein 0-Modem verbunden. Wenn Du Dir dann noch ein kleines Sendeprogramm schreibst kann man damit das Empfangsprogramm testen.
Mit der Komponente TApdComPort ist es auch möglich die Werte vom ausgesuchten COM-Port zu ermitteln.
COM-Port Nummer einstellen in TApdComPort.
Dann kann man mit z.B.:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
   MyComPort: TApdComPort;
   Baudzahl: integer;
begin
   MyComPort.ComPortNr:= 1
   Baudzahl:= MyComPort.Baud;
Die Baudzahl ermitteln. Genauso kann man die anderen COM-Port Parameter ermitteln.

Um festzustellen ob ein COM-Port offen ist kann man in versuchen ihn zu öffnen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
If not MyComport.Open then
begin
    MyComport.Open := TRUE;
end;
Wenn man sehen will welche Verbindungen anliegen, ist die Komponente T ApdSLController in Verbindung mit den TAPDStatusLight sehr hilfreich.

Was noch für mich von Interesse ist hast Du wirklich nur den COM 1 Port?

Bis bald Chemikerr
NAND Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 24.11.10 21:16 
Ja das habe ich so in ähnlicher Form auch gemacht.
Das öffnen des Ports und die vorherige Parameter Übergabe sind kein Thema mehr.
Das funktioniert. Ich muss nun erstmal lernen wie ich am einfachsten ein ByteArray mit 5 Bytes
zu je 2 Stellen fülle und dann noch umdrehe um es letztendlich zu senden... .
Ich habe mir gedacht das wenn ich erstmal diese 5 Bytes sende um eine Frequenz zu ändern,sehe ich
einfacher ob ich auf dem richtigen weg bin als mit der Senden/Emfangen Methode fürs erste.

P.S.Und ja ich habe nur den COM1 im Gerätemanager nachzuschauen, und auf der Rückseite meines PC ist nur eine 9 polige
Stiftleiste(RS232) 100% ich könnte zwar dieser Schnittstelle einen andere Adresse geben aber warum sollte ich das tun. :wink:

Edit: Ich habe es jetzt hinbekommen das dass Gerät auf Daten reagiert, ich sende die Zeichen einfach hintereinander.So entsteht
auch gleich noch ein kleiner Zeit Puffer der dem Gerät wohl zu Gute kommt.Probleme hab ich allerdings das Emfangen der Zeichenkette
mit 345 Bytes hinzubekommen.Habs mit GetBlock...probiert aber ohne Erfolg.Naja vieleicht fällt der Groschen noch!