Autor Beitrag
Smartie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Fr 03.06.05 12:15 
Hallo,

ich habe grad ein Problem, bei dem ich wirklich nicht merh weiterkomme:

Ich sende einen Befehlssatz über den RS232 an mein Gerät, damit er mir die Daten, die er gespeichert hat, über eben diesen COM-Port sendet.

Der Teil für den RS232 sieht folgendermaßen aus:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
{-----------------------------------------------------------------------------
  Procedure : Button3 - COM-Aktivieren
  Version   : Alfa

  Resultat    : Button zum Auslesen der Daten vom COM-Port
-----------------------------------------------------------------------------}

procedure TForm1.Button3Click(Sender: TObject);
begin
  ApdComPort1.OutPut := 'R00010128X' ; // Befehlssatz zum anfordern der Daten
                                       // und öffnen der COM-Verbindung
                                           // 'R' = Read   'X' = BCC
end;


{-----------------------------------------------------------------------------
  Procedure : Timer1
  Version   : Alfa

  Resultat    : Timer Einstellungen
-----------------------------------------------------------------------------}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    RS232Activate := False;
end;



{-----------------------------------------------------------------------------
  Procedure : COM-Port
  Version   : Alfa

  Resultat    : Auslesen der Daten vom COM
-----------------------------------------------------------------------------}

procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
  I : Word;
  C : Char;
  S : String;

begin
  RS232Activate  := True;   // Erst JETZT auf true gesetzt
  Timer1.enabled := False; // Neustart des Timers, sehr wichtig!!
  Timer1.enabled := True;
  S := '';
  for I := 1 to Count do begin
    C := ApdComPort1.GetChar;
    case C of
      #0..#31 : S := S + C {Don't display} ;
      else S := S + C;
    end;
  end;
  tempBuffer := tempBuffer + S;   //Erst temporär

  // DatenString wird erst später deklariert


Ok, beim Testen (Ohne das Gerät, sondern mit dem Laptop kurzgeschlossen, ich hab das Gerät simuliert) funktionierte auch alels wunderbar. Doch nun hab ich das Ding in die Hände bekommen, und bin hier eine halbe Ewigkeit lang verzweifelt.
Folgende Kleinschritte hab ich geschafft, und komme nun echt gar nimmerweiter:

Er sendete mir immer nur 2 Byte (Zu senden wären 78 Byte). Ich hab debuged, und in meiner Befehlszeile (Die ich ja versende) einen kleinen Fehler entdeckt. den hab ichbehoben, und siehe da... er sendet immmer noch "nur" 2 Byte.
Aber, nach 184 durchforsten des Users Manual (Ihr kennt dies erschlagenden Werke) konnte ich doch rausbekommen, das die Nun versendeten Byte die Quittung sind. Sprich, das Gerät sagt mir : "Gut,deine Befehlszeile passt soweit, und ist gut angekommen". (Die 2 Byte vorher waren eine Fehelrmeldung, nur war es nicht ganz so leicht, diese als solceh zu erkennen).
Tja, ich nehme an, daß ich bei mir einen kleinen Fehler habe. Ich denke, mein Programm liest nur diese 2 Byate, quasi den ersten Block der gesendet wird, aber nicht wasdahinter kommt. aber gerade das interessiert mich.

Ich hab schon rumexpirementiert, das Ding umgebaut etc. pp.
Aber ich kam ncith weiter.
Weiß einer von den Spezialisten hier, was ich falsch mache? Oder was ich ergänzen muß?
Wäre dankbar, wenn mir jemand weiter helfen könnte.

Lieben Gruß, schönes Wochenende und dankeschön,

Smartie
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.06.05 16:12 
Moin!

Leider ist dein "Problem" sehr komplex, da kann man nicht den Finger an eine bestimmte Stelle legen und einen Fehler "finden"... :wink:

Vorschlag: Taste dich doch erstmal an die Kommunikation mit dem Gerät selbst ran, z.B. könntest du mit HyperTerminal oder sonstwas für einem Terminalprog "direkt" mit dem Gerätchen "zu reden" versuchen, also Kommandos senden und direkt sehen, ob das, was du erwartest, auch zurück kommt. In einem weiteren Schritt könntest du dann ganze auf ein selbst geschriebenes Prog umstellen.

In der aktuellen Situation hast du ja schon Probleme zu unterscheiden, ob dein Prog nicht richtig arbeitet oder das Gerät... :wink:

cu
Narses