Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi signal an Kassenschublade (https://www.delphipraxis.net/73546-signal-kassenschublade.html)

Privateer3000 19. Jul 2006 16:21


signal an Kassenschublade
 
Hallo Gemeinde,

folgendes möchte ich realisieren:
per Buttonknopf soll ein Char an den com-port gesendet werden
an dem wiederum ein Interface hängt das einen Kondesator auflädt
und eine herkömmliche Kassenschublade öffnet.
Lt. Hersteller des Interfaces soll man so vorgehen:
Zitat:

Normaler Modus:
Schicken Sie irgendein Zeichen zwischen ASC(000) und ASC(255) zum 8005/1A (Interface).
Hat jemand schon einmal damit Erfahrung gemacht?

PS: Der Hersteller hat auch einen Beispielcode im Lieferumfang, allerdings in "C".

Grüße
Privateer

Der_Unwissende 19. Jul 2006 16:55

Re: signal an Kassenschublade
 
Hi,
was genau ist denn eigentlich deine Frage? Ob jmd. damit Erfahrung hat? Such mal hier nach Kassenschublade u.Ä., dürftest du einiges finden.

Wenn du nicht weißt wie man per RS 232 kommuniziert such danach (Com Port sollte auch helfen).

Wenn du C Code hast und einzelne Teile nicht verstehst, auch dazu wird dir hier geholfen. Aber du muss ein wenig sagen woran genau du gerade scheiterst.

Was den C-Code angeht, vergiss den erstmal. Alles was du brauchst ist eine einfache RS 232 Kapselung. Ich würde dir TComPort empfehlen (findest du bei Sourceforge). Hast du diese Komponente installiert, sind alle wichtigen Funktionen gekapselt. Du ziehst dir einfach ein TComport auf dein Formular, klickst doppelt auf das Icon, stellst alles ein. Im Programm kannst du dann mit WriteStr(chr(irgendwas zwischen 0 und 255)) ein beliebiges Zeichen verschicken und schauen was passiert.
Sollten dann Probleme auftreten, oben steht wo du überall suchen kannst und wonach.

Gruß Der Unwissende

Privateer3000 19. Jul 2006 17:53

Re: signal an Kassenschublade
 
Danke, soweit habe ich alles befolgt und die Komponente installiert.
Wie verschicke ich aber nun dieses WriteStr an die Komponente?
Delphi-Quellcode:
procedure TForm1.oeffnenClick(Sender: TObject);
begin
....
end;
das ist mir nicht klar...

Danke nochmal

Der_Unwissende 19. Jul 2006 18:48

Re: signal an Kassenschublade
 
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.

Privateer3000 19. Jul 2006 20:13

Re: signal an Kassenschublade
 
Alles klar, alles funktioniert.
Danke auch für die Zusatzinfos.

Grüße
Privateer


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz