AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Waagenwerte über com-Schnittstelle einlesen
Thema durchsuchen
Ansicht
Themen-Optionen

Waagenwerte über com-Schnittstelle einlesen

Ein Thema von Carsten1812 · begonnen am 20. Okt 2011 · letzter Beitrag vom 27. Okt 2011
Antwort Antwort
Carsten1812

Registriert seit: 20. Okt 2011
27 Beiträge
 
Delphi 7 Personal
 
#1

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 06:50
Also jetzt nochmal von Anfang an.
Ich möchte mit meinem Delphi Programm den Waagenwert dieser Siemens Siwarex Waage über den TTY Ausgang auslesen und anzeigen(Link). Ich muss auch zwischen PC und Waage diesen Konverter (Link) haben (habe ja jetzt gelernt das ich den eigentlich schonmal vernachlässigen kann) Der Konverter wird aber per USB-Kabel an meinem PC angeschlossen (com7 habe ich an den Konverter gegeben) kann auch nich über Ethernet oder was anderes gehen, da das Gerät schon so aufgebaut ist.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 07:59
In dem Handbuch stehen ja zumindest schonmal die 9600 baud fest. Die Parität etc. kannst Du über die Kontrollsoftware einstellen, kannst also nur Du nachsehen/ändern.

Dann brauchst Du evtl. noch das Handbuch, nämlich das der von Haus aus unterstützten Anzeige. Sieht nach einem sehr einfachen Protokoll aus, musst ein paar Escape/$-Sequenzen beachten und bekommst sonst einfach Messwerte.

Also: geh hin, nimm Dir eine frische Instanz der COM-Port-Komponente, die Du eingerichtet hast, setze 9600 baud und alle weitere Eigenschaften der Verbindung entsprechend Deiner Konfiguration, versuche per Code den Port zu öffnen und dumpe Dir erstmal alles, was Du per Receive-Event bekommst. Dann werte Escape-Sequenzen aus, die das Bild sonst stören würden.
  Mit Zitat antworten Zitat
Carsten1812

Registriert seit: 20. Okt 2011
27 Beiträge
 
Delphi 7 Personal
 
#3

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 09:45
Die Com-Port-Komponente habe ich in dem Programm aufgerufen und habe die Einstellungen so gewählt wie in dem Gerätemanager.
9600 baud, Data bits 8, und Stop bits 1.
Also ich habe jetzt schonmal einen ähnlichen Quellcode den ich schreiben muss gefunden und auf mich abgewandelt.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ComPort1: TComPort;
    Edit1: TEdit;
    procedure FormActivate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  hcomm : THandle;
  COM_enum : integer;

implementation

{$R *.dfm}

procedure usbset_data(hcomm : Thandle);
begin
EscapeCommFunction(hcomm,SETDTR); // DTR auf HIGH setzen
sleep(0);
end;

procedure usbres_data(hcomm : Thandle);
begin
EscapeCommFunction(hcomm,CLRDTR); // DTR auf LOW setzen
sleep(0);
end;

// Liefert Ergebnis von Handshake-Signalen der COM zurück
function GetInCount(hcomm : Thandle):DWORD;
var com_status : DWORD;
begin
 Result := 0;
   if hcomm <> INVALID_HANDLE_VALUE then
        begin
         GetCommModemStatus(hcomm,com_status);
         Result := com_status;
        end;
end;

// handle für COM holen
function gethdc_comport(xcom:word):Thandle;stdcall;export;
var hcomm : Thandle;
begin
if (xcom = 7) then
hcomm:=CreateFile('COM7',GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);
gethdc_comport := Thandle(hcomm);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
 hcomm := gethdc_comport(7);
 COM_enum := 7;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  closeHandle(hcomm);
  close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//Wenn ich diesen Button drücke möchte ich den aktuellen Waagenwert in das edit1 übergeben
end;

end.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 09:49
Du hast jetzt eine ComPort Kompo, und nutzt diese nicht. Statt dessen hast du Code irgendwo ausm Netz kopiert, der die nackte WinAPI nutzt Wenn ich mir bewusst mache, dass es einige gibt, die so "programmieren", und das für die Industrie, dann wird mir echt übel. Wie wäre es denn mal damit, einen Blick in die Doku von TComPort zu werfen, hm? Da sind auch fast sicher Beispiele bei.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Carsten1812

Registriert seit: 20. Okt 2011
27 Beiträge
 
Delphi 7 Personal
 
#5

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 10:03
Keine angst, das ist nich für die Industrie und ich will so auch eigentlich nicht programmieren. Das Problem ist nur das es relativ schnell fertig sein muss.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 10:19
schmeiss' eine TComport Komponente auf Dein Form/Datenmodul, stelle die Parameter ein, führe beim Programmstart BaseSerial1.Connected := true; aus

hänge an OnRxChar einen Code in der Art:
Delphi-Quellcode:
procedure TCPOS.BaseSerial1RxChar(Sender: TObject; Count: Integer);
var
  s: AnsiString;
begin
  BaseSerial1.ReadStr(s, Count);
  FInBuffer := FInBuffer + s;
  InterPretBuffer;
end;
wenn Du etwas schreiben musst :

BaseSerial1.WriteStr(SendString);
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Carsten1812

Registriert seit: 20. Okt 2011
27 Beiträge
 
Delphi 7 Personal
 
#7

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 10:51
schmeiss' eine TComport Komponente auf Dein Form/Datenmodul, stelle die Parameter ein, führe beim Programmstart BaseSerial1.Connected := true; aus

hänge an OnRxChar einen Code in der Art:
Delphi-Quellcode:
procedure TCPOS.BaseSerial1RxChar(Sender: TObject; Count: Integer);
var
  s: AnsiString;
begin
  BaseSerial1.ReadStr(s, Count);
  FInBuffer := FInBuffer + s;
  InterPretBuffer;
end;
wenn Du etwas schreiben musst :

BaseSerial1.WriteStr(SendString);
also ich hatte das grade mal probiert so einzubauen.
ich bekomme da aber die fehlermeldung [Fehler] Unit1.pas(31): Undefinierter Bezeichner: 'BaseSerial1'
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz