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

Waagenwerte über com-Schnittstelle einlesen

Ein Thema von Carsten1812 · begonnen am 20. Okt 2011 · letzter Beitrag vom 27. Okt 2011
Antwort Antwort
Seite 3 von 8     123 45     Letzte » 
Medium

Registriert seit: 23. Jan 2008
3.624 Beiträge
 
Delphi 2007 Enterprise
 
#21

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 20. Okt 2011, 16:22
Das ist doch völlig egal, da der Treiber PC-Seitig einen einfachen COM-Port emuliert. Für dich sieht das so aus, als wäre die Waage direkt angeschlossen. Anderenfalls wären solche Konverter kaum sinnvoll einsetzbar.
"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
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.020 Beiträge
 
Delphi XE2 Professional
 
#22

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 20. Okt 2011, 19:38
Den Konverter kannst du ignorieren, dich interessiert nur die Com-Schnittstelle im PC.

Edit: Letzte Seite übersehen, Medium hat es ja schon erwähnt.

Hab gerade den Link gesehen, du sprichst ja von einer S7-Baugruppe mit TTY-Ausgang für Siebert-Anzeigen. Da wird es wahrscheinlich kompliziert, hab jetzt nicht weiter gesucht. Vielleicht solltest du mal versuchen die empfangenen Daten mitzuschreiben. Hört sich für mich im Moment wie ein spezielles Protokoll zwischen Siemens und Siebert an.

Erläutere doch mal dein Vorhaben, wenn die S7-300/400 (falls es eine ist) nämlich eine Ethernetkarte (CP oder PN-CPU) hat, dann ist es auch über Ethernet möglich an die Gewichtswerte zu kommen und brauchst nicht die serielle Schnittstelle. Mit LibNoDave lässt sich das schnell verwirklichen.

Das soll aber nur ein Vorschlag sein, du kannst natürlich auch den seriellen Weg weiter verfolgen.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es

Geändert von divBy0 (20. Okt 2011 um 19:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MGC
MGC

Registriert seit: 15. Mai 2008
Ort: Helsa
106 Beiträge
 
Turbo Delphi für Win32
 
#23

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 20. Okt 2011, 22:36
Also, so viel Drumherum haben wir bei uns an der Arbeit für das Auslesen unserer Waage nicht benötigt. Vielleicht liegt es auch daran, dass es sich dabei um eine Sartorius Waage handelt, die nur eine Textzeile über den COM-Port, respektive USB-Port als Port COM3 schießt.
Wir mussten im Gerätemanager einfach die Eigenschaften des COM-Ports wie folgt einstellen: Baudrate: 9600 Bit/s; Datenbits: 8; Patität: keine; StoppBits: 1; Flusssteuerung: keine.
Schließlich haben wir den entsprechenden COM-Port wie eine Datei geöffnet und somit unser Programm in einen Empfangsmodus versetzt. Sobald nun der Wiegende an der Waage auf die "Print-Taste" gedrückt hat wurde das Resultat als Zeichenkette übertragen und wir mussten nur noch das Empfangene in eine Variable Speichern, die wir dann auswerten konnten. Am Ende durfte nicht vergessen werden die "Datei" wieder zu schließen, also dem Computer mitzuteilen das er nicht weiterhin in Empfangsbereitschaft verweilen soll, ansonsten hats mächtig gekracht, wenn man das Programm geschlossen hat (Die Waage musste dann kurz vom Stromnetz genommen werden, damit sie wieder von aussen her ansprech war).
Bei der Arbeit direkt mit dem COM-Port 1 oder 2 (also kein USB) war jedoch wichtig, das es bei der Übertragung zu Wartezeiten von bis zu 10 Sekunden kommen konnte, bis auch das letzte Zeichen angekommen ist. Hier haben wir einen Timer verwendet der immer wieder prüft, ob der volle Datensatz (also die erwartetete Zeichenkette) vollständig angekommen ist.
Diese Vorgehensweise hat sich wunderbar bewährt, in Delphi genauso wie in der Excel VBA.
Marc
Programmieren ist wie Chemie:
1. Wenn man alles einfach nur zusammenschmeisst kommt es zu unerwarteten Reaktionen.
2. Wenn es plötzlich anfängt zu qualmen, muss man eben noch mal von vorn anfangen.

Geändert von MGC (20. Okt 2011 um 22:40 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.624 Beiträge
 
Delphi 2007 Enterprise
 
#24

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 00:07
Hach, endlich mal alles Namen und Bezeichnungen, die mir aus dem Alltag bekannt sind Vorhin war noch die Rede davon, dass ein (emulierter) COM 7 bereits eingerichtet wäre. Wenn es jedoch darum geht, Wägedaten aus der SPS zu lesen (SIWAERX oder wat auch immer), dann befinden wir uns auf einem völlig anderen Blatt Papier. Ich glaub, an dieser Stelle haben wir hier genug Verwirrung erreicht, so dass es echt nicht ganz verkehrt wäre, wenn du mal gaaaaanz genau sagst, was genau existiert, woran wie angeschlossen ist, und was von wem wo installiert wurde, und was dies bewirkt hat. Vorausgesetzt, du hast nicht wie eingangs verstanden einfach eine Waage, die via COM Daten ausspuckt, die aber über einen einfachen Konverter+COM-Emulationstreiber am PC hängt - was ich nach wie vor vermute, aber divBy0 hat mich jetzt verunsichert
"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
 
#25

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 07: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
656 Beiträge
 
FreePascal / Lazarus
 
#26

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 08: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
 
#27

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 10: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.624 Beiträge
 
Delphi 2007 Enterprise
 
#28

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 10: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
 
#29

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 11: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
 
#30

AW: Waagenwerte über com-Schnittstelle einlesen

  Alt 21. Okt 2011, 11: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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 00:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf