AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dymo USB Waage ansteuern

Ein Thema von jacky213 · begonnen am 17. Mär 2019 · letzter Beitrag vom 18. Mär 2019
Antwort Antwort
Seite 1 von 2  1 2      
jacky213

Registriert seit: 2. Mär 2011
146 Beiträge
 
#1

Dymo USB Waage ansteuern

  Alt 17. Mär 2019, 22:27
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.588 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Dymo USB Waage ansteuern

  Alt 17. Mär 2019, 22:47
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
jacky213

Registriert seit: 2. Mär 2011
146 Beiträge
 
#3

AW: Dymo USB Waage ansteuern

  Alt 17. Mär 2019, 23:26
Wie muss ich da genau vorgehen?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.588 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Dymo USB Waage ansteuern

  Alt 17. Mär 2019, 23:40
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
jacky213

Registriert seit: 2. Mär 2011
146 Beiträge
 
#5

AW: Dymo USB Waage ansteuern

  Alt 18. Mär 2019, 02:53
Läuft, vielen Dank
  Mit Zitat antworten Zitat
jacky213

Registriert seit: 2. Mär 2011
146 Beiträge
 
#6

AW: Dymo USB Waage ansteuern

  Alt 18. Mär 2019, 15:34
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.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#7

AW: Dymo USB Waage ansteuern

  Alt 18. Mär 2019, 15:47
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);
  Mit Zitat antworten Zitat
jacky213

Registriert seit: 2. Mär 2011
146 Beiträge
 
#8

AW: Dymo USB Waage ansteuern

  Alt 18. Mär 2019, 15:56
wo finde ich diesen Aufruf den?
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#9

AW: Dymo USB Waage ansteuern

  Alt 18. Mär 2019, 16:04
wo finde ich diesen Aufruf den?
Wenn du die Komponente auf deine Form geklatscht hast: so nirgends
  Mit Zitat antworten Zitat
jacky213

Registriert seit: 2. Mär 2011
146 Beiträge
 
#10

AW: Dymo USB Waage ansteuern

  Alt 18. Mär 2019, 16:19
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 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