Delphi-PRAXiS
Seite 3 von 8     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Waagenwerte über com-Schnittstelle einlesen (https://www.delphipraxis.net/163885-waagenwerte-ueber-com-schnittstelle-einlesen.html)

Medium 20. Okt 2011 15:22

AW: Waagenwerte über com-Schnittstelle einlesen
 
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.

divBy0 20. Okt 2011 18:38

AW: Waagenwerte über com-Schnittstelle einlesen
 
Den Konverter kannst du ignorieren, dich interessiert nur die Com-Schnittstelle im PC.

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

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. :wink:

Das soll aber nur ein Vorschlag sein, du kannst natürlich auch den seriellen Weg weiter verfolgen.

MGC 20. Okt 2011 21:36

AW: Waagenwerte über com-Schnittstelle einlesen
 
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.

Medium 20. Okt 2011 23:07

AW: Waagenwerte über com-Schnittstelle einlesen
 
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 :)

Carsten1812 21. Okt 2011 06:50

AW: Waagenwerte über com-Schnittstelle einlesen
 
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.

CCRDude 21. Okt 2011 07:59

AW: Waagenwerte über com-Schnittstelle einlesen
 
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.

Carsten1812 21. Okt 2011 09:45

AW: Waagenwerte über com-Schnittstelle einlesen
 
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.

Medium 21. Okt 2011 09:49

AW: Waagenwerte über com-Schnittstelle einlesen
 
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.

Carsten1812 21. Okt 2011 10:03

AW: Waagenwerte über com-Schnittstelle einlesen
 
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.

Bummi 21. Okt 2011 10:19

AW: Waagenwerte über com-Schnittstelle einlesen
 
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 :

Delphi-Quellcode:
BaseSerial1.WriteStr(SendString);


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.
Seite 3 von 8     123 45     Letzte »    

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