AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten über RS232

Ein Thema von ueei.net · begonnen am 27. Feb 2013 · letzter Beitrag vom 27. Feb 2013
Antwort Antwort
ueei.net

Registriert seit: 5. Mär 2004
Ort: Wels
53 Beiträge
 
#1

Daten über RS232

  Alt 27. Feb 2013, 07:53
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.
  Mit Zitat antworten Zitat
ASM

Registriert seit: 16. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Daten über RS232

  Alt 27. Feb 2013, 10:29
Mit Hilfe der SynaSer serial library.
Ist Freeware und Open Source. Hier

Delphi-Quellcode:
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;
Byte Empfangen:
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.
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