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
Benutzerbild von Jens Hartmann
Jens Hartmann

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

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
sambadancer

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

AW: Probleme Empfang TComPort DataPacket

  Alt 5. Mär 2012, 11:26
Also ich muss dazu sagen das ich noch nicht allzu.ange delphi programmiere und vielleicht das eine oder andere Nicht genau kenne.

Der Empfang der Daten ist Byte weise.... Denke ich mal.... Der Controller schickt. z.B. Die Zeichenkette Kurzschluss2 gestartet.
Jetzt soll der Eventhandler die Procedure messwick2 gest aufrufen und mir die Anweisung ausführen.

Bei den meisten Sachen klappt es, aber manchmal eben nicht. Im ersten Prüfplan funktioniert es immer, bei dem zweiten startet zwar die kurzschlussprüfung aber er zeigt mir immer "Kurzschluss" in roter Schrift an.

Dies deutet immer darauf hin das die Procedure Kurzschluss messwick2 aufgerufen wird. Aber warum kann ich nicht sagen..
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Probleme Empfang TComPort DataPacket

  Alt 5. Mär 2012, 11:37
irgendwie fehlt der Code der die Rückgabe (OnRxChar o.ä.) behandelt?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

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

AW: Probleme Empfang TComPort DataPacket

  Alt 5. Mär 2012, 11:37
So kannst du z.B. auf die verschiedenen Kommandos reagieren:

Delphi-Quellcode:
procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: string);
begin

  if Str = 'Kurzschluss2 gestartetthen
  begin
    // Code für Kurzschluss2 gestartet
  end;

end;
@Bummi: Der Empfang müsste über TComDataPacket laufen.
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
sambadancer

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

AW: Probleme Empfang TComPort DataPacket

  Alt 5. Mär 2012, 16:26
Ich hab das eben mal so probiert wie divBy0 es beschrieben hat. Ab und an mal funktioniert es richtig , aber manchmal kommt auch gar nix zurück.

Habe eben mal als Ausgabe wenn der String emfangen wurde eine Showmessage eingefügt. Aber mal wird es angezeigt mal nicht.

Muss ich vielleicht den Buffer löschen damit nicht zuviel Unsinn drinnen steht , und wie könnte ich diesen löschen oder woran könnte dies liegen?

Delphi-Quellcode:
procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: string);
begin
  if Str ='Kurzschluss1 gestartetthen
  begin
    // Code für Kurzschluss2 gestartet
    showmessage('Kurzschluss1 gestartet !!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
end
else if Str ='Kurzschluss1 bestandenthen
begin
     showmessage('Kurzschluss1 bestanden 8746759837684376')
end

end;
BEim ersten mal funktioniert der Empfang und die Ausgabe.Starte ich es noch einmal kommt nix mehr.

Es scheint wohl so das irgendwie Leerzeichen oder sowas noch im Buffer sind ,die dann dazu führen das der String nicht komplett ist...Deswegen wird er auch manchmal nicht erkannt.
Aber wie ich das löse , keine Ahnung.

Geändert von sambadancer ( 5. Mär 2012 um 21:30 Uhr)
  Mit Zitat antworten Zitat
Wal

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

AW: Probleme Empfang TComPort DataPacket

  Alt 8. Mär 2012, 15:03
Habe hier mal einen Testaufbau mit einem Atmel Mega8 gemacht.
Sendet der Mega8 "AD" + Wert + #13#10 wird ComData1Packet angesprungen und die Progressbar zeigt einen Analogwert an, den ich mit einem Poti am Mega8 einstelle.
Bei den anderen ComData's sende ich einfach nur die entsprechenden Strings vom Mega8 aus. Das funktioniert bei mir hier immer und ohne Prob's.

Delphi-Quellcode:
unit uMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, CPort, Vcl.StdCtrls, Vcl.ExtCtrls,
  Vcl.ComCtrls;

type
  TfrmMain = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    ProgressBar1: TProgressBar;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    ComPort: TComPort;
    ComData1: TComDataPacket;
    ComData2: TComDataPacket;
    ComData3: TComDataPacket;
    ComData4: TComDataPacket;
    ComData5: TComDataPacket;
    ComData6: TComDataPacket;
    ComData7: TComDataPacket;
    ComData8: TComDataPacket;
    ComData9: TComDataPacket;
    ComData10: TComDataPacket;
    procedure ComData1Packet(Sender: TObject; const Str: string);
    procedure ComData2Packet(Sender: TObject; const Str: string);
    procedure ComData3Packet(Sender: TObject; const Str: string);
    procedure ComData4Packet(Sender: TObject; const Str: string);
    procedure ComData5Packet(Sender: TObject; const Str: string);
    procedure ComData6Packet(Sender: TObject; const Str: string);
    procedure ComData7Packet(Sender: TObject; const Str: string);
    procedure ComData8Packet(Sender: TObject; const Str: string);
    procedure ComData9Packet(Sender: TObject; const Str: string);
    procedure ComData10Packet(Sender: TObject; const Str: string);
  end;

var
  frmMain: TfrmMain;
  Buffer: PACKED ARRAY[0..9] OF Byte;

implementation

{$R *.dfm}

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ComData1.Free;
  ComData2.Free;
  ComData3.Free;
  ComData4.Free;
  ComData5.Free;
  ComData6.Free;
  ComData7.Free;
  ComData8.Free;
  ComData9.Free;
  ComData10.Free;
  ComPort.Close;
  ComPort.Free;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  ComPort := TComPort.Create(Nil);
  ComPort.Port := 'COM5';
  ComPort.BaudRate := br38400;
  ComData1 := TComDataPacket.Create(Nil);
  ComData1.ComPort := ComPort;
  ComData1.StartString := 'AD';
  ComData1.StopString := #13#10;
  ComData1.OnPacket := ComData1Packet;
  ComData2 := TComDataPacket.Create(Nil);
  ComData2.ComPort := ComPort;
  ComData2.StartString := 'PAUSE';
  ComData2.StopString := #13#10;
  ComData2.OnPacket := ComData2Packet;
  ComData3 := TComDataPacket.Create(Nil);
  ComData3.ComPort := ComPort;
  ComData3.StartString := 'ABSTART';
  ComData3.StopString := #13#10;
  ComData3.OnPacket := ComData3Packet;
  ComData4 := TComDataPacket.Create(Nil);
  ComData4.ComPort := ComPort;
  ComData4.StartString := 'ABSTOP';
  ComData4.StopString := #13#10;
  ComData4.OnPacket := ComData4Packet;
  ComData5 := TComDataPacket.Create(Nil);
  ComData5.ComPort := ComPort;
  ComData5.StartString := 'AUFSTART';
  ComData5.StopString := #13#10;
  ComData5.OnPacket := ComData5Packet;
  ComData6 := TComDataPacket.Create(Nil);
  ComData6.ComPort := ComPort;
  ComData6.StartString := 'AUFSTOP';
  ComData6.StopString := #13#10;
  ComData6.OnPacket := ComData6Packet;
  ComData7 := TComDataPacket.Create(Nil);
  ComData7.ComPort := ComPort;
  ComData7.StartString := 'SCHNELLSTART';
  ComData7.StopString := #13#10;
  ComData7.OnPacket := ComData7Packet;
  ComData8 := TComDataPacket.Create(Nil);
  ComData8.ComPort := ComPort;
  ComData8.StartString := 'SCHNELLSTOP';
  ComData8.StopString := #13#10;
  ComData8.OnPacket := ComData8Packet;
  ComData9 := TComDataPacket.Create(Nil);
  ComData9.ComPort := ComPort;
  ComData9.StartString := 'LANGSAMSTART';
  ComData9.StopString := #13#10;
  ComData9.OnPacket := ComData9Packet;
  ComData10 := TComDataPacket.Create(Nil);
  ComData10.ComPort := ComPort;
  ComData10.StartString := 'LANGSAMSTOP';
  ComData10.StopString := #13#10;
  ComData10.OnPacket := ComData10Packet;
  ComPort.Open;
end;

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  Buffer[0] := $66;
  Buffer[1] := $30;
  Buffer[2] := $51;
  Buffer[3] := $00;
  Buffer[4] := $00;
  Buffer[5] := $00;
  Buffer[6] := $00;
  Buffer[7] := $00;
  Buffer[8] := $00;
  Buffer[9] := $66;
  ComPort.Write(Buffer, SizeOf(Buffer));
end;

procedure TfrmMain.ComData1Packet(Sender: TObject; const Str: string);
begin
  Progressbar1.Position := StrToInt(Str);
  ComPort.ClearBuffer(True,False);
end;

procedure TfrmMain.ComData2Packet(Sender: TObject; const Str: string);
begin
  Memo1.Text := Memo1.Text + 'PAUSE' + #13#10;
  ComPort.ClearBuffer(True,False);
end;

procedure TfrmMain.ComData3Packet(Sender: TObject; const Str: string);
begin
  Memo1.Text := Memo1.Text + 'ABSTART' + #13#10;
  ComPort.ClearBuffer(True,False);
end;

procedure TfrmMain.ComData4Packet(Sender: TObject; const Str: string);
begin
  Memo1.Text := Memo1.Text + 'ABSTOP' + #13#10;
  ComPort.ClearBuffer(True,False);
end;

procedure TfrmMain.ComData5Packet(Sender: TObject; const Str: string);
begin
  Memo1.Text := Memo1.Text + 'AUFSTART' + #13#10;
  ComPort.ClearBuffer(True,False);
end;

procedure TfrmMain.ComData6Packet(Sender: TObject; const Str: string);
begin
  Memo1.Text := Memo1.Text + 'AUFSTOP' + #13#10;
  ComPort.ClearBuffer(True,False);
end;

procedure TfrmMain.ComData7Packet(Sender: TObject; const Str: string);
begin
  Memo1.Text := Memo1.Text + 'SCHNELLSTART' + #13#10;
  ComPort.ClearBuffer(True,False);
end;

procedure TfrmMain.ComData8Packet(Sender: TObject; const Str: string);
begin
  Memo1.Text := Memo1.Text + 'SCHNELLSTOP' + #13#10;
  ComPort.ClearBuffer(True,False);
end;

procedure TfrmMain.ComData9Packet(Sender: TObject; const Str: string);
begin
  Memo1.Text := Memo1.Text + 'LANGSAMSTART' + #13#10;
  ComPort.ClearBuffer(True,False);
end;

procedure TfrmMain.ComData10Packet(Sender: TObject; const Str: string);
begin
  Memo1.Text := Memo1.Text + 'LANGSAMSTOP' + #13#10;
  ComPort.ClearBuffer(True,False);
end;

end.
Gruß Wal

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

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

AW: Probleme Empfang TComPort DataPacket

  Alt 8. Mär 2012, 15:06
Hier auch noch der Code vom Mega8 mit Bascom:

Delphi-Quellcode:
'--------------------------------------------------------------
'            mega8.bas
' mega8 sample file
'--------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 38400

Declare Sub Setelv(byval L As Byte)

Config Int0 = Falling
Config Portb = Output
Config Portd = Output
Portb = 11111000

Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

On Urxc Rec_isr
On Int0 Int0_irq
On Timer1 Isr_von_timer1

Enable Interrupts
Enable Urxc
Enable Int0
Enable Timer1

Timer1 = 3036

Dim B As Bit
'1 = Befehl über RS323 empfangen

Dim Buffer(10) As Byte 'Datenbytes des Befehls
Dim E As Byte
'1 = Laufband Ab; 2 = Laufband Auf
Dim F As Byte '1 = Laufband langsammer; 2 = Laufband schneller
Dim P As Byte
'SollSpeed
Dim S As Byte 'IstSpeed
Dim V As Byte
'SollSteigung
Dim Z As Byte 'Datenbyte Zähler

Dim I As Word
'Schleifenzähler
Dim T As Word 'IstSteigung
Dim W As Word
'SteigungsDigits

T = Getadc(0)

If T > 230 Then
   Portb.4 = 0
   E = 1
   W = 230
End If

If T < 220 Then
   Portb.3 = 0
   E = 2
   W = 230
End If

'--------------------------------------------------------------------
'                             Main
'--------------------------------------------------------------------
Main:

Do
If B = 1 Then
If Buffer(1) = &H66 Then
If Buffer(10) = &H66 Then
Select Case Buffer(2)

Case &H00 : Set Portb.2

Case &H10 :
Print "SCHNELLSTART"
P = Buffer(3)
F = 1

Case &H20 :
Print "LANGSAMSTART"
P = Buffer(3)
F = 2

Case &H30 : Call Setelv(buffer(3))


Case &HFF : Reset Portb.2

End Select
End If
End If
Reset B
End If

T = Getadc(0)

If T < 220 Then
Portb.4 = 1
Portb.3 = 0
E = 2
W = 230
End If

If T > 875 Then
Portb.3 = 1
Portb.4 = 0
E = 1
W = 865
End If

If E > 0 Then
If E = 1 Then
If T = W Or T < W Then
Portb.4 = 1
E = 0
Print "ABSTOP"
End If
Else
If T = W Or T > W Then
Portb.3 = 1
E = 0
Print "AUFSTOP"
End If
End If
End If

If F > 0 Then
Incr S
If F = 1 Then
Portb.1 = 1
For I = 1 To 12000
Next
Portb.1 = 0
For I = 1 To 5000
Next
Else
Portb.0 = 1
For I = 1 To 12000
Next
Portb.0 = 0
For I = 1 To 5000
Next
End If
If S = P Then
If F = 2 Then
Print "LANGSAMSTOP"
Else
Print "SCHNELLSTOP"
End If
F = 0
S = 0
End If
End If
Loop
End
'--------------------------------------------------------------------


Rec_isr:
   Incr Z
   Buffer(z) = Udr
   If Z = 10 Then
      Set B
      Z = 0
   End If
Return


Int0_irq:
   Set Portb.2
   Print "PAUSE"
Return


Isr_von_timer1: 'ISR von Timer1
Timer1 = 3036
Print "AD" ; T
Toggle Portd.6
Return


Sub Setelv(byval L As Byte)
W = L * 43
W = W + 230
T = Getadc(0)
If V > L And T > 230 Then
Portb.4 = 0
V = L
E = 1
Print "ABSTART"
End If
If V < L And T < 865 Then
Portb.3 = 0
V = L
E = 2
Print "AUFSTART"
End If
End Sub
Gruß Wal

Es gibt viel zu tun, sitzen wir's aus ! 0(°~°)0
  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 20:14 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