Autor Beitrag
ibh_compucat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Do 15.03.07 16:00 
Hallo,
ich muß einen Meßwertgeber über die ser. Schnittstelle abfragen. Der Ablauf: PC an Gerät 1 Byte (Ack) = #6 als Aufforderung, den Meßwert zu senden und dann antwortet das Gerät mit dem Meßwert. Dem Forum habe ich entnommen, daß man sowas gut mit AsyncPro machen kann. Hab ich bei mir in D6 installiert und klappt auch soweit. Bis auf eine Kleinigkeit:
ich arbeite mit dem Beispiel aus ExCom:
(ich weiß leider nicht, wie man den Quellcode in Originalform bringen kann, tut mir leid!)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
  I : Word;
  C : Char;
  S : String;
  s1,
  s2
     : String;
begin
  S := '';
  for I := 1 to Count do
  begin
    C := ApdComPort1.GetChar;
    case C of
      #0..#31 : {Don't display} ;
      else
      S := S + C;
    end;
  end;
  Gewicht := S;
end;


In der Originalversion (Ausgabe über Showmessage) kommen nach einer Sendeaufforderung zwei Antworten (Messageboxen) mit Teilstrings, die sammengesetzt den richtigen Wert ergeben würden. Wo kann der Grund liegen?

Gruß ibh_compucat

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt

_________________
Was du nicht begreifst, kannst du nicht verlernen!
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Fr 16.03.07 09:15 
Hallo,
ich habe inzwischen herausgefunden, daß nur eine Antwort kommt, wenn weniger als 8 Zeichen rückgemeldet werden. Offensichtlich ist der Receiver Buffer auf 7 begrenzt, kann mir jemand sagen, wo ich die Bufferlänge einstellen kann?
Gruß
ibh_compucat

_________________
Was du nicht begreifst, kannst du nicht verlernen!
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Fr 16.03.07 09:31 
Ich denke nicht, dass der Buffer das Problem ist, sondern Dein Code.



Der Fehler liegt m.E. hier:

ausblenden Delphi-Quelltext
1:
2:
....
   Gewicht := S;


Du überschreibst hier die bereits empfangenen Daten !

versuch mal :
ausblenden Delphi-Quelltext
1:
Gewicht := Gewicht + S;					

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Fr 16.03.07 10:34 
Hallo chrisw,

zunächst Danke für Deine Antwort, ich habe das ausprobiert. Aber der String S wird ja vorher in der Schleife komplett gebildet und dann, nachdem die Schleife verlassen wurde, an die Variable Gewicht (String) übergeben. Der gesendete String ist 14 Zeichen lang, davon 12 darstellbare Zeichen. Mein Ergebnis ist aber gnadenlos nach 7 Stellen abgeschnitten! Deshalb habe ich die Vermutung, daß der Empfangspuffer nicht größer ist als 7 Byte.

Gruß
ibh_compucat

_________________
Was du nicht begreifst, kannst du nicht verlernen!
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Fr 16.03.07 10:39 
Übrigens ist der Standard Buffer bei Async Pro für ankommende Zeichen (InSize) auf 4096 Byte gesetzt.

Edit:// Hatte nicht gelesen, dass Du es schon ausprobiert hast !

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Fr 16.03.07 10:50 
Hallo Christian,

ich habe inzwischen ein Datapacket eingefügt und da konnte ich die Länge des Empfangsstring einstellen. Es klappt jetzt.
Nochmals vielen Dank!

Gruß inh_compucat

_________________
Was du nicht begreifst, kannst du nicht verlernen!