![]() |
Daten über RS232
Hallo, ich würde gerne Daten über die RS232 Schnittstelle senden und auch empfangen.
Die Daten sind in folgendem Format vorhanden (Senden und Empfangen) 40 03 70 01 03 01 53 94 1B 03 1B 02 00 00 02 Ja, ich habe schon Google bemüht und auch die Suche im Forum. Nachdem ich aber ein Projekt in aller letzter Sekunde rein bekommen habe fehlt mir die Zeit für Experimente. Ich würde für eine verwendbare Lösung auch gerne einen Unkostenbeitrag anbieten. Wichtig ist noch zu sagen, es handelt sich um ein Delphi7 Projekt. |
AW: Daten über RS232
Mit Hilfe der SynaSer serial library.
Ist Freeware und Open Source. ![]()
Delphi-Quellcode:
Byte Empfangen:
Uses Synaser;
Var ser: TBlockSerial; CurrentComPort: Ansistring = 'COM2'; Baudrate: word = 38400; // Schnittstelle öffnen function RS232Init(var ser: TBlockSerial): Boolean; var availablePorts: AnsiString; begin result := false; availablePorts := GetSerialportNames; if pos(CurrentComPort, availablePorts) = 0 then exit; if not assigned(ser) then ser := TBlockserial.Create; try ser.RaiseExcept := true; ser.DeadlockTimeout := 5000; ser.Connect(CurrentComPort); ser.Config(Baudrate, 8, 'N', 0, false, true); ser.RaiseExcept := false; result := true; except FreeAndNil(ser); end; end;
Code:
// liest Byte mit Timeout in ms
data[i] := ser.recvbyte(1000); Byte Senden::
Code:
ser.SendByte(data: byte);
Als einfaches Beispiel zum Empfang von Daten:
Delphi-Quellcode:
Const
MaxData = 50000; // nur Beispiel!; anpassen Type // oder mit offenem Array arbeiten tBuffer = Array [0..Maxdata] of Byte; Var buffer: tBuffer; function empfangedaten(var data: tBuffer): integer; begin result := 0; if not RS232Init(ser) then exit; try // evt. ein Startsignal an Gegenstelle ser.sendstring('send data' + #13); repeat Application.ProcessMessages; if Keypressed(VK_ESCAPE) then exit; // liest Byte mit Timeout in ms data[result] := ser.recvbyte(1000); if not (ser.LastError = ErrTimeout) then inc(result, 1); Form1.ShowStatusbarInfo(Format(' %d Bytes received', [result])); until (ser.LastError = ErrTimeout) or (result > length(data)); if result > 0 then dec(result, 1); except // handling... end; {...} end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 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