Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: signal an Kassenschublade

  Alt 19. Jul 2006, 18:48
Nichts zu danken.

Wichtig ist es, dass du die Kommunikationsparameter (Baudrate, Parität, ...) richtig einstellst, soweit die Kasse die Kommandos interpretiert (schein ja hier nicht wirkich der Fall zu sein?). Dann muss dein TComport den Eigenschaftswert von Connected auf true setzen (standardmässig false).
Nun kannst du einfach mit
Code:
// Comport1 soll jetzt hier eine nicht umbenannte Instanz von TComport sein
Comport1.WriteStr(chr(10)); <- schreibt den Character mit dem Wert 10 
Comport1.WriteStr('A'); <- Schreibt den Character A, Wert 65
So, das ist schon alles. Um den Rest kümmert sich die Kapselung. Schöner als der Weg den ich dir gerade beschrieben habe ist es natürlich, dass du nicht vorweg (zur Designzeit) die Kommunikationsparameter und den Comport festlegst.
Alle RS 232 Ports, die der aktuelle Rechner besitzt listet dir die Funktion enumComPorts der Unit CPort auf (genauer gesagt werden die in ein TStrings geschrieben).
Code:
var s : TStrings;
begin
  s := TStringList.Create;
 
  try
    CPort.enumComPorts(s);
    ... <- in s stehen jetzt all die Namen der Comports die Verfügbar sind
    // z.B. könnte man alle in eine TComComboBox zur Auswahl des Ports nehmen
    // einfach vom selben Reiter auf das Formular, autoApply auf True und als ComPort den
    // verwendeten TComport (hier jetz ComPort1) zuweisen

    ComComboBox1.Items.Assign(s); // <- hier werden alle verfügbaren Port eingetragen
    // nun führt ein Wechsel des angezeigten Ports automatisch dazu, dass dieser ausgewählt wird
  finally
    s.Free;
  end;
end;
Dieser Weg ermöglicht eine hohe Flexibilität. Ein paar etwas ältere Lösungen erlauben gerne mal die Wahl zwischen Com1 .. Com4. Probleme gibt es dann immer, wenn a) mehr als 4 RS 232 Ports verfügbar sind oder b) z.B. ein virtueller Port Com99 der eigentlich über einen Netzwerkadapter angesprochen wird eine Nummer > 4 hat. Mit der oben gezeigten Methode stellt man sicher, dass der Port auch wirklich vorhanden ist und jeder vorhandene Port selektiert werden kann.

Solltest du eine Antwort von der Kasse erwarten, gibt es zwei interessante Ereignisse für dich: OnRxChar und OnRxFlag.
Das erste Event wird immer ausgelöst, wenn Daten im Puffer landen. Bei auslesen ist immer vorsicht geboten, denn die Kommunikation erfolgt asynchron. Es kann ein unvollstäniger Teil einer Nachricht oder mehr als eine Nachricht im Puffer landen. Häufig wird zum Trennen ein bestimmtes Zeichen (gerne #13 / Carriage Return) verwendet. Gibt es ein solches Zeichen, kann es als EventChar festgelegt werden. Das OnRxFlag Ereignis tritt dann ein, wenn dieses EventChar empfangen wurde (aber eben nur dann, OnRxChar bei jedem Zeichen).

Hoffe das hilft ein wenig weiter.
  Mit Zitat antworten Zitat