AGB  ·  Datenschutz  ·  Impressum  







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

Probleme Empfang TComPort DataPacket

Ein Thema von sambadancer · begonnen am 4. Mär 2012 · letzter Beitrag vom 8. Mär 2012
Antwort Antwort
sambadancer

Registriert seit: 18. Jan 2012
11 Beiträge
 
Delphi 7 Enterprise
 
#1

Probleme Empfang TComPort DataPacket

  Alt 4. Mär 2012, 20:02
Hallo,

ich hab in meinem Programm ein seltsames Phänomen. Leider weiss ich nicht warum dies so passiert.

Ich habe sehr viele Events in meinem Code festgelegt da ich mit einem Microcontroller kommuniziere. Das Programm ist für ein Schulprojekt von mir.

Ich habe im Objektinspektor den StopString eingetragen auf welche Bytes er reagieren soll.

Zum Programm : Es sollen 2 Messwicklungen getestet werden. Delphi schickt die Anweisungen, der µC führt aus und schickt Rückmeldungen. Bei der ersten Messwicklung funktioniert alles wie es soll, bei der zweiten , die genauso aufgebaut ist funktioniert die gestartet procedure einfach nicht.

Vielleicht hat jemand Tips dazu und kann mir vielleicht helfen....

Das Problem ist , wenn ich die Zweite Kurzschlussprüfung aufrufe , dann kommt immer Kurzschluss , obwohl im OI richtig zugewiesen.

Code:
// Prüfplan erste Messwicklung
//******************************************************************************
//Kurzschlussprüfung der ersten Messwicklung 4/3              (--> mController)
//------------------------------------------------------------------------------
procedure TForm1.Starte_Kurz_Pruef_Messw1;
var
      Kurzschluss_var : Integer;
begin
      Kurzschluss_var := $01;
      ComPort.ClearBuffer(true,true);
      if messagedlg('Starte Kurzschlussprüfung',mtInformation,[mbyes,mbno],0)=mryes then
try
      ComPort.Write(Kurzschluss_var,SizeOf(Kurzschluss_var))
      except on E: Exception do
      MessageDlg('Error: ' + E.Message, mtError, [mbOK], 0);
end else
      showmessage('Messung beendet');
end;
//Wandlersimulation gestartet erste Messwicklung              (--> mController)
//------------------------------------------------------------------------------
procedure TForm1.Starte_WandlerSim1;
var
      Wandlersim_var : Integer;
begin
      Wandlersim_var := $04;
      if messagedlg('Starte Wandlersimulation',mtInformation,[mbyes,mbno],0)=mryes then
      try
      ComPort.Write(Wandlersim_var, SizeOf(Wandlersim_var))
      except on E: Exception do
      MessageDlg('Error: ' + E.Message, mtError, [mbOK], 0)
end else
      showmessage('Messung beendet');
      Buttons_sperren;
end;
//Kurzschlussanzeige erste Messwicklung                       (<-- mController)
//------------------------------------------------------------------------------
procedure TForm1.Com_Kurzschluss_Messw1Packet(Sender: TObject; const Str: String);
begin
      Label1.Caption := ('Kurzschluss 1');
end;
//Kurzschlussprüfung bestanden erste Messwicklung             (<-- mController)
//------------------------------------------------------------------------------
procedure TForm1.Com_Kurzschluss_Messw1_bestPacket(Sender: TObject; const Str: String);
begin
Label1.Font.Color :=clLime;
Label1.Caption := ('Kurzschlussprüfung bestanden');
Starte_WandlerSim1;
end;
//Kurzschlussprüfung gestartet erste Messwicklung             (<-- mController)
//------------------------------------------------------------------------------
procedure TForm1.Com_Kurzschluss1_Messw1_gestPacket(Sender: TObject; const Str: String);
begin
Label1.Font.Color :=clLime;
Label1.Caption := ('Kurzschlussprüfung 1 gestartet');
end;
//Wandlersimulation OK erste Messwicklung                     (<-- mController)
//------------------------------------------------------------------------------
procedure TForm1.Com_Wandler1_gestPacket(Sender: TObject; const Str: String);
var
      Wandlersim_best : Integer;
      Wandlersim_nbest : Integer;
begin
Label1.Caption := ('Simulation gestartet');

      Wandlersim_best := $05;
      if messagedlg('Wandlersimulation OK?',mtInformation,[mbyes,mbno],0)=mryes then
begin
      try
      ComPort.Write(Wandlersim_best, SizeOf(Wandlersim_best))
      except on E: Exception do
      MessageDlg('Error: ' + E.Message, mtError, [mbOK], 0)
end
end  else
begin
      try
      Wandlersim_nbest := $06;
      ComPort.Write(Wandlersim_nbest, SizeOf(Wandlersim_nbest))
      except on E: Exception do
      MessageDlg('Error: ' + E.Message, mtError, [mbOK], 0);
end;
      begin
      Starte_WandlerSim1;
      end;
end;
end;
//Wandlersimulation beendet erste Messwicklung               (<-- mController)
//------------------------------------------------------------------------------
procedure TForm1.Com_Wandler1_beendetPacket(Sender: TObject; const Str: String);
begin
Label1.Caption := ('Simulation beendet');
ComPort.ClearBuffer(true,true);
end;
//##############################################################################

// Prüfplan zweite Messwicklung
//******************************************************************************
//Kurzschlussprüfung der zweiten Messwicklung 5/2              (--> mController)
//------------------------------------------------------------------------------
procedure TForm1.Starte_Kurz_Pruef_Messw2;
var
      Kurzschluss_var2 : Integer;
begin
      Kurzschluss_var2 := $02;
      ComPort.ClearBuffer(true,true);
      if messagedlg('Starte Kurzschlussprüfung',mtInformation,[mbyes,mbno],0)=mryes then
try
      ComPort.Write(Kurzschluss_var2,SizeOf(Kurzschluss_var2))
      except on E: Exception do
      MessageDlg('Error: ' + E.Message, mtError, [mbOK], 0);
end else
      showmessage('Messung beendet');
end;
//Wandlersimulation gestartet zweite Messwicklung              (--> mController)
//------------------------------------------------------------------------------
procedure TForm1.Starte_WandlerSim2;
var
      Wandlersim_var : Integer;
begin
      Wandlersim_var := $07;
      if messagedlg('Starte Wandlersimulation',mtInformation,[mbyes,mbno],0)=mryes then
      try
      ComPort.Write(Wandlersim_var, SizeOf(Wandlersim_var))
      except on E: Exception do
      MessageDlg('Error: ' + E.Message, mtError, [mbOK], 0)
end else
      showmessage('Messung beendet');
      Buttons_sperren;
end;
//Kurzschlussanzeige zweite Messwicklung                       (<-- mController)
//------------------------------------------------------------------------------
procedure TForm1.Com_Kurzschluss_Messw2Packet(Sender: TObject; const Str: String);
begin
      Label1.Font.Color :=clRed;
      Label1.Caption := ('Kurzschluss 2');
end;
//Kurzschlussprüfung bestanden zweite Messwicklung             (<-- mController)
//------------------------------------------------------------------------------
procedure TForm1.Com_Kurzschluss_Messw2_bestPacket(Sender: TObject; const Str: String);
begin
Label1.Font.Color :=clLime;
Label1.Caption := ('Kurzschlussprüfung bestanden');
Starte_WandlerSim2;
end;
//Kurzschlussprüfung gestartet zweite Messwicklung             (<-- mController)
//------------------------------------------------------------------------------
procedure TForm1.Com_Kurzschluss_Messw2_gestPacket(Sender: TObject; const Str: String);
begin
Label1.Font.Color :=clLime;
Label1.Caption := ('Kurzschlussprüfung 2 gestartet');
end;
//Wandlersimulation OK zweite Messwicklung                     (<-- mController)
//------------------------------------------------------------------------------
procedure TForm1.Com_Wandler2_gestPacket(Sender: TObject; const Str: String);
var
      Wandlersim_best : Integer;
      Wandlersim_nbest : Integer;
begin
Label1.Caption := ('Simulation gestartet');

      Wandlersim_best := $08;
      if messagedlg('Wandlersimulation OK?',mtInformation,[mbyes,mbno],0)=mryes then
begin
      try
      ComPort.Write(Wandlersim_best, SizeOf(Wandlersim_best))
      except on E: Exception do
      MessageDlg('Error: ' + E.Message, mtError, [mbOK], 0)
end
end  else
begin
      try
      Wandlersim_nbest := $09;
      ComPort.Write(Wandlersim_nbest, SizeOf(Wandlersim_nbest))
      except on E: Exception do
      MessageDlg('Error: ' + E.Message, mtError, [mbOK], 0);
end;
      begin
      Starte_WandlerSim2;
      end;
end;
end;
//Wandlersimulation beendet erste Messwicklung               (<-- mController)
//------------------------------------------------------------------------------
procedure TForm1.Com_Wandler2_beendetPacket(Sender: TObject; const Str: String);
begin
Label1.Caption := ('Simulation beendet');
ComPort.ClearBuffer(true,true);
end;
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Probleme Empfang TComPort DataPacket

  Alt 4. Mär 2012, 21:29
Wieso hast du so viele Ereignisse zum empfangen von Daten? Eins reicht doch völlig aus und darin wertest du die Antwort aus.

Kommt denn bei der 2. Messung auch das richtige Ergebnis zurück?
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Wal

Registriert seit: 22. Sep 2006
57 Beiträge
 
#3

AW: Probleme Empfang TComPort DataPacket

  Alt 5. Mär 2012, 01:34
In deinem Code sehe ich nicht, wie du Daten empfängst.
Achtung unter Delphi7 sind AnsiChar Char.

Bei meinem Laufbandprojekt empfange ich so und reagiere darauf:

Delphi-Quellcode:
const
  Co_PAUSE = 2;
  Co_SCHNELLSTART = 3;

procedure TMainForm.ComPortRxChar(Sender: TObject; Count: Integer);
var
  A: String;
  C: AnsiChar;
  I: Integer;
begin
  if Count = 1 then
  begin
    ComPort.Read(C, 1);
    case Ord(C) of
    Co_PAUSE : begin
                        if pan_start.Caption = 'Pausethen
                          pan_start.OnClick(self);
                      end;
    Co_SCHNELLSTART: begin end;
    Co_SCHNELLSTOP : begin end;
    Co_LANGSAMSTART: begin end;
    Co_LANGSAMSTOP : begin end;
    Co_AUFSTART : begin end;
    Co_AUFSTOP : begin end;
    Co_ABSTART : begin end;
    Co_ABSTOP : begin end;
    end;
  end else
  begin
    for I := 1 to Count do
    begin
      ComPort.Read(C, 1);
      A := A + Char(C);
    end;
    lab_IstAnalog.Caption := A;
  end;
end;
Bei Messungen würde ich aber mit Checksummen arbeiten, um Falschmessungen auszuschliessen.
Gruß Wal

Es gibt viel zu tun, sitzen wir's aus ! 0(°~°)0
  Mit Zitat antworten Zitat
sambadancer

Registriert seit: 18. Jan 2012
11 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Probleme Empfang TComPort DataPacket

  Alt 5. Mär 2012, 09:20
@divBy0

Ja das hab ich mir auch schon überlegt. Jedoch fehlt mir da ein Ansatz wie ich das auswerten soll.
Denke das wird mit dem Start und stopstring gemacht.mjedoch wie die syntax dazu aussehen soll weiß ich nicht genau....

Wie gesagt , vom Controller wird "Kurzschluss2 gestartet" gesendet , jedoch wird nicht das richtige Paket angesprochen.
Im weiteren Verlauf des Ablaufs klappt alles wie es soll.

Vielleicht hat ja einer von euch einen Ansatz zum auswerten , dann könnte ich das ganze umschreiben.

Empfangen werden die Daten über die TComDataPacket . Dort kann ich einen Start und im objektinspektor definieren.

Geändert von sambadancer ( 5. Mär 2012 um 09:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Probleme Empfang TComPort DataPacket

  Alt 5. Mär 2012, 09:23
Wie sieht denn dein Protokoll vom PC zum µC aus?
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Probleme Empfang TComPort DataPacket

  Alt 5. Mär 2012, 10:06
Beim Packet wäre ja auch zu überlegen, ob die mit einem Start und Stop Event arbeiten kannst.
Ansonsten, kannst Du eventuell die Datenmenge etc. prüfen.

Die Frage wäre erst mal, wie genau sehen die Daten aus die Du empfangen willst?

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  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 02:43 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