Einzelnen Beitrag anzeigen

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