Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Comport und LED Lauflicht (https://www.delphipraxis.net/112577-comport-und-led-lauflicht.html)

Pumba 23. Apr 2008 19:51


Comport und LED Lauflicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Habe ein problem einen string auf ein LED Display auszugeben, benutze die Async Pro komponenten
das senden über den comport ist nicht das problem sondern wie spreche ich so in Display an
mit diesen code wird ein text gesendet
Delphi-Quellcode:
procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var i : WORD;
    c: char;
begin
for i := 1 to count do
 begin
   c := ApdComPort1.GetChar;
   Memo1.Lines.Add('=> '+c);
   if c = #7 then MessageBeep(0)
     else if c in [#32..#126] then
      begin
       Buffer := Buffer + c;
      end;
 end;
end;
Das Protokol für das Display befindet sich im Anhang
Ich bekomme nicht einmal einen refresh auf das Display,
könntet ihr mir bitte weiterhelfen

vielen dank im vorraus
Pumba

sirius 23. Apr 2008 20:52

Re: Comport und LED Lauflicht
 
Als erste solltest du beachten, dass das Display Big Endian verlangt. Also genau andersherum wie Windows.
Und dann stellst du dier eben dein Protocol mal anhand dieses Beispieles zusammen.

Wie sendest du denn?

Klaus01 23. Apr 2008 21:08

Re: Comport und LED Lauflicht
 
Guten Abend,

für die BigEndian Notation ist diese Funktion recht nützlich:
Zitat:

Zitat von DelphiHilfe

function Swap(X);

Description

Swap exchanges the high-order bytes with the low-order bytes of the argument. X is an expression of type SmallInt, as a 16-bit value, or Word. This is provided for backward compatibility only.

Ein Beispiel wie man sie benutzt findest Du hier.

Grüße
Klaus

Pumba 24. Apr 2008 07:17

Re: Comport und LED Lauflicht
 
Hallo,

@Klaus01 danke für den LINK

Werde mich mal über "Big Endian" schlau machen

@sirius was meinst du mit wie sendest du, hab leider keine ahnung wie man das Display anspricht
habe bisher nur mit Barcodescannern und COM komuniziert, das project mit dem LED Lauflicht hab
ich leider von meinen vorgänger übernommen der hat es mit VS2005 versucht hat aber nicht wirklich
etwas zusammengeracht, Kollege ist weg und nun soll ich mich darum kümmern

wie könnte mann soetwas bewerkstelligen?
Hab schon im Internet gesucht hab aber nicht wirklich etwas brauchbares gefunden oder kennt jemand ein Buch


bin für jeden hinweis dankbar

Danke und Grüße Pumba

sirius 24. Apr 2008 07:31

Re: Comport und LED Lauflicht
 
Ich kenne die Komponente nicht und habe in Delphi selber noch nie mt dem Com-Port gearbeitet, weiß aber aus C++ und aus der Erfahrung mit anderen Schnittstellen, dass es meistens nix anderes ist,
-Komponente initialisieren
-Einstellungen vornehmen (Baudrate, Startbits, Stopbits, etc.)
-Stream oder Buffer senden (wie der aussieht gibt es ja ein schönes Beispiel)

Ich kann dir auf Grund der PDF den Stream zusammenbauen, den du senden musst, weiß aber nicht, wie es deine Komponente verlangt.


So, ich habe mal geschaut. Kann es aber nicht testen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Daten:string;
    TextPacket:string;
    TextData:string;
    Checksum:byte;
    i:integer;
    Laenge:word;
begin

  TextData:=#$01; //Method: Cyclic;
  TextData:=TextData+#$EF#$A2; //Attribut 1: Font=default;
  TextData:=TextData+#$EF#$B0; //Attribut 1: Color=red;
  TextData:=TextData+'Hello World'; //Nachricht
  TextData:=TextData+#$FF#$FF; //Ende von TextData;

  TextPacket:=#$01#$01+TextData; //Filenumber dazu

  Daten:=#$00#$00#$00#$00#$00+TextPacket; //5 x Reserved Betes
  Daten:=#$00+Daten; //Farbe: mono
  Daten:=#$08+Daten; //Höhe in Pixel: 8;
  Daten:=#$00#$78+Daten; //Breite in Pixel: 120
  Daten:=#$01+Daten; //Versionsnummer 1
  Daten:=#$00#$00+Daten; //Addresse: BroadCast

  Laenge:=length(daten);
  CheckSum:=0;
  for i:=1 to Laenge do inc(Checksum,ord(Daten[i])); //Checksumme berechnen

  Daten:=Daten+chr(Checksum); //Checksumme anhängen;
  Daten:=chr(hibyte(Laenge))+chr(lobyte(Laenge))+Daten; //Länge hinzufügen
  Daten:='$CSTES>'+Daten; //Header;

  apdComPort1.Open:=true;
  apdcomport1.Output:=Daten;
  apdcomport1.Open:=false;
end;
Einstellungen im OI für adpComPort1:
-Baudrate: 9600
-CompNumber: (entsprechend setzen)
Alles andere würde ich lassen.

Pumba 27. Apr 2008 09:31

Re: Comport und LED Lauflicht
 
Hallo sirius

Danke für die Info, hab den Code übernommen, das LEDlauflicht reagiert trotz alledem nicht
werde versuchen ein anderes zu bekommen,
danke erstmals für deine hilfe, jetzt verstehen ich auch ein wenig wie man diese led's anspricht



LG PUMBA

Wal 27. Apr 2008 09:47

Re: Comport und LED Lauflicht
 
Zitat:

Zitat von Pumba
Hallo,

Habe ein problem einen string auf ein LED Display auszugeben, benutze die Async Pro komponenten
das senden über den comport ist nicht das problem sondern wie spreche ich so in Display an
mit diesen code wird ein text gesendet
Delphi-Quellcode:
procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var i : WORD;
    c: char;
begin
for i := 1 to count do
 begin
   c := ApdComPort1.GetChar;
   Memo1.Lines.Add('=> '+c);
   if c = #7 then MessageBeep(0)
     else if c in [#32..#126] then
      begin
       Buffer := Buffer + c;
      end;
 end;
end;
Das Protokol für das Display befindet sich im Anhang
Ich bekomme nicht einmal einen refresh auf das Display,
könntet ihr mir bitte weiterhelfen

vielen dank im vorraus
Pumba

Entweder steh ich auf dem Schlauch oder...

Mit diesem Code empfängst du Daten vom Comport.
Habe hier Code um ein Radio anzusteuern zum vergleichen:

Sendeprocedure
Delphi-Quellcode:
procedure Datenausgeben(Byte0: Byte; Byte1: Byte; Byte2: Byte; Byte3: Byte; Byte4: Byte; Byte5: Byte; Byte6: Byte; Byte7: Byte);
var
  Pruefsumme: Integer;
begin
  if RadioOn then
  begin
    Pruefsumme:= Byte0;
    If Pruefsumme >= 256 Then Pruefsumme:= Pruefsumme - 256;

    Pruefsumme:= Pruefsumme + Byte1;
    If Pruefsumme >= 256 Then Pruefsumme:= Pruefsumme - 256;

    Pruefsumme:= Pruefsumme + Byte2;
    If Pruefsumme >= 256 Then Pruefsumme:= Pruefsumme - 256;

    Pruefsumme:= Pruefsumme + Byte3;
    If Pruefsumme >= 256 Then Pruefsumme:= Pruefsumme - 256;

    Pruefsumme:= Pruefsumme + Byte4;
    If Pruefsumme >= 256 Then Pruefsumme:= Pruefsumme - 256;

    Pruefsumme:= Pruefsumme + Byte5;
    If Pruefsumme >= 256 Then Pruefsumme:= Pruefsumme - 256;

    Pruefsumme:= Pruefsumme + Byte6;
    If Pruefsumme >= 256 Then Pruefsumme:= Pruefsumme - 256;

    Pruefsumme:= Pruefsumme + Byte7;
    If Pruefsumme >= 256 Then Pruefsumme:= Pruefsumme - 256;

    Form1.RadioComPort.PutString(chr(Byte0)+ chr(Byte1)+chr(Byte2)+chr(Byte3)+chr(Byte4)+chr(Byte5)+chr(Byte6)+chr(Pruefsumme));
  end;
end;
Aufruf:
Delphi-Quellcode:
if (RadioDatenArray[16] and 32) = 32 then
    begin
      RadioDatenArray[16] := RadioDatenArray[16] and $DF; // bit wieder zurueck setzen
      Datenausgeben($84, 3, $FA, 1, 0, 0, 0, 0);
      // neue Audiodaten abfragen
      goto ende;
    end;

    if (RadioDatenArray[16] and 1) = 1 then
    begin
      RadioDatenArray[16] := RadioDatenArray[16] and $FE;
      Datenausgeben($84, 3, $F0, 1, 0, 0, 0, 0);
      // neuen Sendername abfragen
      goto ende;
    end;

    if (RadioDatenArray[16] and 2) = 2 then
    begin
      RadioDatenArray[16] := RadioDatenArray[16] and $FD;
      Datenausgeben($84, 3, $F0, 2, 0, 0, 0, 0);
      // neuen Sender Text abfragen
      goto ende;
    end;

    if (RadioDatenArray[16] and 4) = 4 then
    begin
      RadioDatenArray[16] := RadioDatenArray[16] and $FB;
      Datenausgeben($84, 3, $F0, 7, 0, 0, 0, 0);
      // neuen Sendername tmc abfragen
      goto ende;
    end;
Wal

Pumba 27. Apr 2008 10:40

Re: Comport und LED Lauflicht
 
Hallo Wal

Ja ich weiss dass ich mit
Delphi-Quellcode:
procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var i : WORD;
    c: char;
begin
for i := 1 to count do
begin
   c := ApdComPort1.GetChar;
   Memo1.Lines.Add('=> '+c);
   if c = #7 then MessageBeep(0)
     else if c in [#32..#126] then
      begin
       Buffer := Buffer + c;
      end;
end;
end;
den Comport abfrag was dieser empfängt vorher übergebe ich

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
ApdComPort1.Output :=Edit1.Text+#13;
Edit1.Clear;
end;
und diesen output frage ich ab, weshalb ich auch geschrieben habe das ich

keine ahnung habe wie man das Display anspricht
und bisher mit der COM nur Barcodescanner eingelesen habe


LG Pumba

Wal 27. Apr 2008 10:44

Re: Comport und LED Lauflicht
 
Habe im Kopf mal das Protokoll erstellt, kann also noch Fehler enthalten:

Delphi-Quellcode:
Const
   LedHeader = '$CST-ES';
   Address = ?; '? = Integerwert
   Version = ?; '? = Integerwert
   SignW = ?; '? = Integerwert
   SignH = ?; '? = Integerwert
   SignC = ?; '? = Integerwert
   Reserved := '00000';

function SchnuerePaket(Sendestring: String): String;
var
   Laenge: Integer;
   Highnibbel, Lownibbel: Byte;
   HighAddress, LowAddress: Byte;
   HighSignW, LowSignW: Byte;
   Checksumme: Integer;
   Check : String;
   iIndex := Integer;
begin
   Laenge := 2 + 1 + 2 + 1 + 1 + 5 + Length(Sendestring);

   Highnibbel:= Laenge div 256;
       Lownibbel:= Laenge mod 256;
   HighAddress:= Address div 256;
       LownAddress:= Address mod 256;
   HighSignW:= SignW div 256;
       LownSignW:= SignW mod 256;
   
   Check := Chr(HighAddress) + Chr(LowAddress) + Chr(Version)
      + Chr(HighSignW) + Chr(LowSignW) + Chr(SignH) + Chr(SignC) + Reserved + Sendestring;
   for iIndex := 1 to Length(Check) do
   begin
      Checksumme := Ord(MidStr(Check, iIndex ,1));
      if Checksumme >= 256 then Checksumme := Checksumme - 256;
   end;
   
   result := LedHeader + Chr(Highnibbel) + Chr(Lownibbel) + Check + Chr(Checksumme);
end;

procedure Senden;
begin
   ApdComPort1.PutString(SchnuerePacket('Hallo'));
end;
Wal

TanteEdit: Sehe gerade die Data Packets sind nochmal aufgegliedert, das mußt du noch mit einbeziehen.

Pumba 27. Apr 2008 10:57

Re: Comport und LED Lauflicht
 
Danke Wal

werde es morgen in der FA. mal testen

Pumba


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 Uhr.
Seite 1 von 2  1 2      

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