![]() |
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.
|
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. |
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. |
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 :)
|
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( ![]() ![]() |
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 ![]() 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. |
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. |
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.
|
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.
|
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:
wenn Du etwas schreiben musst :
procedure TCPOS.BaseSerial1RxChar(Sender: TObject; Count: Integer);
var s: AnsiString; begin BaseSerial1.ReadStr(s, Count); FInBuffer := FInBuffer + s; InterPretBuffer; end;
Delphi-Quellcode:
BaseSerial1.WriteStr(SendString);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 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