Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dymo USB Waage ansteuern (https://www.delphipraxis.net/200079-dymo-usb-waage-ansteuern.html)

jacky213 17. Mär 2019 21:27

Dymo USB Waage ansteuern
 
Hallo, ich bins mal wieder ;D

ich habe mir eine Waage mit USB Schnittstelle gekauft und darauf gehofft das Gewicht mittels eigenem Programm auszulesen. Tja falsch gedacht. Es gibt sogar ein fertiges Tool welches Open Source ist und sogar mit Delphi realisiert worden ist, allerdings läuft das ganze über eine Jedi Komponente die ich nicht installiert bekomme ohne 100000 Fehler beim Kompilieren.

Schaut euch das ganze mal an, vielleicht kommt ihr darauf wie ich es doch realisieren kann.

LINK

jaenicke 17. Mär 2019 21:47

AW: Dymo USB Waage ansteuern
 
Zitat:

Zitat von jacky213 (Beitrag 1427943)
allerdings läuft das ganze über eine Jedi Komponente die ich nicht installiert bekomme ohne 100000 Fehler beim Kompilieren.

Hast du die JEDIs denn hier ausgecheckt?
https://github.com/project-jedi/jcl
https://github.com/project-jedi/jvcl
Der Installer sollte dann die JCL und JVCL (in der Reihenfolge ausführen) einfach installieren können.

jacky213 17. Mär 2019 22:26

AW: Dymo USB Waage ansteuern
 
Wie muss ich da genau vorgehen?

jaenicke 17. Mär 2019 22:40

AW: Dymo USB Waage ansteuern
 
Die beiden Repositories z.B. mit Hilfe von TortoiseGit auschecken und dann darin jeweils jcl\install.bat und dann jvcl\install.bat ausführen und den Anweisungen folgen.

jacky213 18. Mär 2019 01:53

AW: Dymo USB Waage ansteuern
 
Läuft, vielen Dank

jacky213 18. Mär 2019 14:34

AW: Dymo USB Waage ansteuern
 
Hab soweit alles am laufen, sobald ich allerdings mein fertiges Programm auf den Zielrechner bringe, wird ein Fehler beim starten der Anwendung angezeigt "Device cannot be identified"

Während meiner Recherche bin ich auf einen Beitrag auf GitHub gestoßen LINK

Im verlauf der Diskussion kommt der Autor darauf das es an der Verwendung der JvHidControllerClass liegt.

Delphi-Quellcode:
@Steadyspike thanks a lot! It was a bug in the JVCL library (JvHidControllerClass) for Delphi...

in the constructor

constructor TJvHidDeviceController.Create(AOwner: TComponent; AOnHidCtlDeviceCreateError: JvHidDeviceCreateError; AOnDeviceChange: TNotifyEvent);

the two lines

SetOnDeviceChange(AOnDeviceChange);
FOnDeviceCreateError := AOnHidCtlDeviceCreateError;

are in the wrong order.
FOnDeviceCreateError must be set first.
I worked around by calling the constructor in two steps:

FHidCntrl := TJvHidDeviceController.Create(Self, DoOnDeviceCreateError, Nill);
FHidCntrl.OnDeviceChange := DoOnDeviceChange;
Den entsprechenden Eintrag im Constructor habe ich gefunden und die werte wie beschrieben miteinander getauscht, allerdings weist er am ende des Beitrags auch daraufhin, dass er besagten Constructor in zwei schritten aufruft.

Wie ist das gemeint und wie kann ich dies Bewerkstelligen.

Schokohase 18. Mär 2019 14:47

AW: Dymo USB Waage ansteuern
 
Das steht doch da, was er gemacht hat:
Delphi-Quellcode:
// Workaround
FHidCntrl := TJvHidDeviceController.Create(Self, DoOnDeviceCreateError, Nil);
FHidCntrl.OnDeviceChange := DoOnDeviceChange;
und vorher stand da (was aber eben nicht funktionierte):
Delphi-Quellcode:
// alte Version
FHidCntrl := TJvHidDeviceController.Create(Self, DoOnDeviceCreateError, DoOnDeviceChange);

jacky213 18. Mär 2019 14:56

AW: Dymo USB Waage ansteuern
 
wo finde ich diesen Aufruf den?

Schokohase 18. Mär 2019 15:04

AW: Dymo USB Waage ansteuern
 
Zitat:

Zitat von jacky213 (Beitrag 1428017)
wo finde ich diesen Aufruf den?

Wenn du die Komponente auf deine Form geklatscht hast: so nirgends

jacky213 18. Mär 2019 15:19

AW: Dymo USB Waage ansteuern
 
Ich habe die Komponente auf meiner Form, kannst du mir bitte ein Konkretes Beispiel machen?

Hier ist der gesamte Code meiner Anwendung:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Buttons, Vcl.ExtCtrls,
  JvComponentBase, JvHidControllerClass, Vcl.StdCtrls;

type
  TfrmMain = class(TForm)
    DC1: TJvHidDeviceController;
    wpan: TPanel;
    Button1: TButton;
    procedure DC1Arrival(HidDev: TJvHidDevice);
    procedure DC1DeviceData(HidDev: TJvHidDevice; ReportID: Byte;
      const Data: Pointer; Size: Word);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmMain: TfrmMain;
  ReceivedData : Array[0..5] of Byte;
  HIDDevice: TJvHidDevice;
  gram : boolean;
  division : boolean;
const
  VendorID = $0922;
  ProductID = $8000;

implementation

{$R *.dfm}

procedure TfrmMain.DC1Arrival(HidDev: TJvHidDevice);
begin
if ((HidDev.Attributes.VendorID = VendorID) AND
    (HidDev.Attributes.ProductID > ProductID)) then
  begin
    HIDDevice := HidDev;
    HIDDevice.CheckOut;
  end;
end;

procedure TfrmMain.DC1DeviceData(HidDev: TJvHidDevice;
  ReportID: Byte; const Data: Pointer; Size: Word);
  var raw_weight : integer;
  var raw_weight_oz : real;
begin
  CopyMemory(@ReceivedData, Data, Size);
  raw_weight := ReceivedData[3] + ReceivedData[4] * 256;
  if(raw_weight > 0) then
    begin
      if (ReceivedData[1] = 2) then  //grams
      begin
        wpan.Caption := IntToStr(raw_weight)+' g';
        gram := true;
      end;
      if (ReceivedData[1] = 11) then //oz
      begin
        raw_weight_oz := raw_weight*0.1;
        wpan.Caption := FloatToStr(raw_weight_oz)+' oz';
        gram := false;
      end;
   end
   else
     begin
       wpan.Caption := '0 g';
     end;

  end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 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