INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Online-Messwertaufnahme über RS232



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

19.08.2006, 00:59
Beitrag #1

SchwindelInside Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 77
Registriert seit: Dec 2005

2012 pro
2005
EN


Deutschland
Online-Messwertaufnahme über RS232
<div align="left">Wunderschönen Abend,

ich habe eine Precitec CHR 150-N Sensor-Steuerung in dem die Signale vom Sensor digitalisiert werden.
Die digitalisierten Messwerte werden mit 115200 Baud über die RS232 an meinen Omniputer geschickt.
Ich habe eine Messrate von 1000 Hz eingestellt. Außerdem werden nach meinen Einstellungen jeweils 20 Messwerte ein und der selben Messgröße noch vor dem Absenden zu einem Mittelwert zusammengefasst, sodass die effektive Rate der gesendeten Messwerte nur noch 50 Hz betragen sollte. Die Messwerte werden als Datenpaketen über die RS232 verschickt. Die Datenpakete enthalten 2 verschiedene Messwerte, bestehend aus jeweils 5 Ziffern als ASCII-Zeichen, getrennt durch ein Komma. Also in der Form 12345,54321 . Zwischen jedem Datenpaket wird eine Wagenrücklauf und ein Zeilenvorschub (CRLF) gesendet. Das hab ich bei VISA konfigurieren als Abschlusszeichen angegeben.
Im Instr-Eigenschaftsknoten werden soviele Bytes auf dem Port angezeigt wie die Größe des Puffers angezeigt wurde also standartmäßig 4096. Aufgrund des Abschlusszeichens werden nur 13 Bytes einschließlich Abschlusszeichen gelesen. Das ist auch gut und so.
Die Messwerte kann ich auf dem LCD-Display der Sensorsteuerung sehen. Sobald ich die Probe aus dem Messbereich nehme, wird der Messwert "0". Deshalb sehe ich ob die richtigen Werte in meinem VI ankommen die auch gerade vom Sensor gemessen werden. Dies ist aber leider nicht der Fall. Und da liegt mein Problem.:
Offensichtlich liest Das VI das Datenpaket, das als nächstes im Puffer rumhängt. Ich möchte aber immer das Datenpaket auslesen, das gerade eben vom Sensor gekommen ist. Am besten wäre es dabei aber wenn im Dauerbetrieb alle Messwerte erfasst werden. Das sollte bei einer effektiven Messrate von 50 Hz und 13 Byte pro Datenpaket auf einem 500 Mhz P3 mit WinXP doch möglich sein. Oder? Ich möchte die Messrate auch nicht noch weiter reduziern, da das auch die Genauigkeit und Auflösung meiner Messung beinträchtigt. Die Puffergröße möchte ich auch nicht reduzieren, ich ja auch verschieden Steuerbefehle an die Sensor-Steuerung senden möchte und die Antworten darauf auslesen möchte. Diese sind zum Teil um einiges größer als ein Datenpaket. Ich muss dazu sagen, das zur gleichen Zeit noch kontinuierlich 8-Bit Signale über eine zweite seriellen Schnittstelle von einem anderen Gerät mit 9600 Baud ausgelesen werden. Das könnte zusätzliche Rechenleistung beanspruchen. Die Signale brauche ich aber für die richtige Beendigung des Messvorgangs.
Ob mein VI es nun schafft alle Messwerte online zu verarbeiten oder nicht, wie bekomme ich eine zum Sensor synchrone Messwertaufnahme hin?
Gibt es eine Möglichkeit den Puffer jedesmal zu löschen nach dem ein Datenpaket ausgelesen wurde?
Ich habe darüber hinaus die Möglichkeit zur Synchronisierung die Messung zu starten in dem ich einen Steuerbefehl sende. Die Antwort darauf wird immer mit "readyCRLF" abgeschlossen. Dannach sendet der Sensor sofort wieder Datenpakete. Oder ich sende den Befehl zur Fortsetzung der Messung. Dann sendet er auch sofort wieder ein neues Datenpaket.
Im Übrigen möchte ich nicht all das in einem einzigen VI realisieren. Das VI für die Initialisierung und Konfiguration der seriellen Schnittstelle soll möglichst nur einmal beim Start der Anwendung aufgerufen werden. Wenn ich die Messung starte soll das VI ablaufen, dass die Synchronisationsbefehl sendet. Dannach sollen bis zum Abbruch alle Messwerte verarbeitet, im Diagramm angezeigt und in einen Array gespeichert werden. Das VIs für die beiden letztgenannten Funktionen spar ich mir hier, da die an sich bei mir funktionieren.
Die Abruchbedingung für die Beendigung der Messwertaufnahme soll, wenn es möglich ist, von einen anderen VI aus erfolgen, das aber nicht von dem Mess-VI selbst augerufen wird. Ich habe gelesen das soetwas über Objekt-Referenzen möglich ist. Ich stelle mir das wie eine Art Pointer in C++ oder Pascal vor. richtig? Das wäre eine tolle Sache aber ich komme damit in LV noch nicht so ganz klar. Der Abbruch soll allerdings nicht durch ein Bedienelement ausgelöst werden, sondern durch das interne Setzen einer Variable. Ich möchte auch möglichst vermeiden zusätzlichen Speicher für globale Variablen zu reservieren und Rechenleistung für deren Setzen innerhalb einer Schleife zu beanspruchen. Wenn ich eine Referenz an ein SubVI übergebe weiß LV nicht welcehen Datentyp der referezierte Wert hat und zeigt deshalb eine fehlerhafte Verbindung zum Eigenschaftsknoten an.
Wie kann ich das nun alles realisieren?
Ich wäre sehr dankbar, wenn mir jemand helfen könnte.

eine traumhafte Nacht wünsch ich
SchwindelInside


Sonstige .vi  Sensor_initialisieren.vi (Größe: 23,8 KB / Downloads: 377)


Sonstige .vi  Sensorempfaenger.vi (Größe: 30,78 KB / Downloads: 328)


Sonstige .vi  Sensormesstart.vi (Größe: 21,04 KB / Downloads: 331)

</div>
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
19.08.2006, 09:29 (Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2006 09:41 von Lucki.)
Beitrag #2

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Online-Messwertaufnahme über RS232

Akzeptierte Lösung

Ich habe jetzt nicht Zeit und Muse, mich in Dein Prog richtig hineinzuversetzen, aber es ist so viel klar, daß Dein Problem mit Meldern oder Queues ideal zu lösen ist. Der formale Unterschied zwischen Melder und Queue ist gering, es sind praktisch die gleichen Funktionen, und ich würde Dir Melder empfehlen, wenn Du es schaffst jeden Messwert zu verarbeiten bevor der nächste kommt.
Du schlägst zwei Fliegen mit einer Klappe:
1) Das Problem des Bufferlöschens nach Lesen der Daten sowie das der Synchronisierung.
2) Das Problem des Beendens von selbständig laufenden SUB-Vi. Das funktioniert so, daß, wenn man z.B. im Haupt-Vi den Melder freigibt (rücksetzt), im Sub-VI der Melder beim Lesen/Schreiben einen Fehler ausgibt. Diese Fehlermeldung benutzt man dann einfach zum Beenden des Sub-Vi.

Noch 2 Tips:
a) Die Melder in Haupt- und Sub.VI müssen überhaupt nicht über irgendwelche Anschlüsse, Referenzen oder dergl. verbunden sein, sie sind automatisch verbunden, wenn sie nur den gleichen Namen haben (und man sich dabei nicht verschreibt).
b) Sub-VIs sollten, wenn sie selbständig im Dauerbetrieb in einer Schleife arbeiten sollen, keinen Ausgangsanschluß haben. Denn dann wartet das Haupt-VI, bis die Daten aus dem Anschluß kommen, was aber wegen des Dauerbetriebes erst beim Beenden des SUB.VI der Fall sein würde.

Ich habe mal ein einfachstes Beispiel gemacht, an dem Du sehen kannst, wie kinderleicht das ist. Der Datenfluß ist hier von Haupt-VI zu SUB-VI, aber das ist ohne jegliche Bedeutung, umgekehrt funtkioniert das genau so. (Man beachte, daß das SubVi überhaupt keinen äußeren Anschluß hat)


Angehängte Datei(en)
Sonstige .vi  Haupt.vi (Größe: 10,9 KB / Downloads: 274)

Sonstige .vi  Sub.vi (Größe: 14,49 KB / Downloads: 254)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2006, 10:27
Beitrag #3

SchwindelInside Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 77
Registriert seit: Dec 2005

2012 pro
2005
EN


Deutschland
Online-Messwertaufnahme über RS232
' schrieb:Ich habe jetzt nicht Zeit und Muse, mich in Dein Prog richtig hineinzuversetzen, aber es ist so viel klar, daß Dein Problem mit Meldern oder Queues ideal zu lösen ist. Der formale Unterschied zwischen Melder und Queue ist gering, es sind praktisch die gleichen Funktionen, und ich würde Dir Melder empfehlen, wenn Du es schaffst jeden Messwert zu verarbeiten bevor der nächste kommt.
Du schlägst zwei Fliegen mit einer Klappe:
1) Das Problem des Bufferlöschens nach Lesen der Daten sowie das der Synchronisierung.
2) Das Problem des Beendens von selbständig laufenden SUB-Vi. Das funktioniert so, daß, wenn man z.B. im Haupt-Vi den Melder freigibt (rücksetzt), im Sub-VI der Melder beim Lesen/Schreiben einen Fehler ausgibt. Diese Fehlermeldung benutzt man dann einfach zum Beenden des Sub-Vi.

Noch 2 Tips:
a) Die Melder in Haupt- und Sub.VI müssen überhaupt nicht über irgendwelche Anschlüsse, Referenzen oder dergl. verbunden sein, sie sind automatisch verbunden, wenn sie nur den gleichen Namen haben (und man sich dabei nicht verschreibt).
b) Sub-VIs sollten, wenn sie selbständig im Dauerbetrieb in einer Schleife arbeiten sollen, keinen Ausgangsanschluß haben. Denn dann wartet das Haupt-VI, bis die Daten aus dem Anschluß kommen, was aber wegen des Dauerbetriebes erst beim Beenden des SUB.VI der Fall sein würde.

Ich habe mal ein einfachstes Beispiel gemacht, an dem Du sehen kannst, wie kinderleicht das ist. Der Datenfluß ist hier von Haupt-VI zu SUB-VI, aber das ist ohne jegliche Bedeutung, umgekehrt funtkioniert das genau so. (Man beachte, daß das SubVi überhaupt keinen äußeren Anschluß hat)

Vielen Dank Lucki für die Anwort.
Die Beispiele sind äußerst lehr- und hilfreich. Das könnte mein Prog wesentlich effizienter machen.
Das mit der Komunikation zwischen Haupt- und SubVi und wie ich mit den Meldern synchronisiere glaube ich verstanden zu haben. Nur eines gibt mir zu denken: Wie kann ich mit Hilfe der Melder den VISA-Puffer löschen? Ob mit oder ohne Melder, wie genau mache ich das?
Vielen Dank

einen schönen Tag wünsch ich
SchwindelInside
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2006, 12:35
Beitrag #4

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Online-Messwertaufnahme über RS232
' schrieb:Wie kann ich mit Hilfe der Melder den VISA-Puffer löschen? Ob mit oder ohne Melder, wie genau mache ich das?
Tur mir leid, wenn ich Dir das beantworten will, müßte ich mich ganz von vorn mit VISA beschäftigen, da ich in meinem ganzen bisherigen LV-Leben immer nur mit Meßkarten von NI zu tun hatte. Es wird aber doch hoffentlich jemand anderes geben, der diese Frage sofort beantworten kann?

Allerdings: Die Frage befremdet micht etwas. Die Inhalt eines Puffers wird doch normalerweise durch dessen Auslesen gelöscht. Wieso geht das bei einem VISA-Puffer nicht? Wenn ich nur löschen will, muß ich also alles auslesen und dann alles wegwerfen. Geht das hier nicht?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2006, 23:05
Beitrag #5

SchwindelInside Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 77
Registriert seit: Dec 2005

2012 pro
2005
EN


Deutschland
Online-Messwertaufnahme über RS232
' schrieb:Tur mir leid, wenn ich Dir das beantworten will, müßte ich mich ganz von vorn mit VISA beschäftigen, da ich in meinem ganzen bisherigen LV-Leben immer nur mit Meßkarten von NI zu tun hatte. Es wird aber doch hoffentlich jemand anderes geben, der diese Frage sofort beantworten kann?

Allerdings: Die Frage befremdet micht etwas. Die Inhalt eines Puffers wird doch normalerweise durch dessen Auslesen gelöscht. Wieso geht das bei einem VISA-Puffer nicht? Wenn ich nur löschen will, muß ich also alles auslesen und dann alles wegwerfen. Geht das hier nicht?

Das sollte theoretisch schon so sein. Ich hab aber festgestellt, dass selbst wenn ich alle Zeichen auslese, die am Port Schlange stehen, muss ich die Auslese-Routine noch 2 mal aufrufen, bis es auf Veränderungen der Messung am Sensor offensichtlich reagiert. Im Dauerbetrieb ist das bei mir allem Anschein nach ein Computer-Performance-Problem im Simulationsmodus. Wenn das Programm einfach schnell genug alle Befehle und Daten bearbeitet sollte das kein Problem sein. Ich hoffe das löst sich, wenn ich das ganze Programm kompiliert habe. Aber dazu muss es erst mal richtig funktionieren. Ich muss ohnehin noch viel hinsichtlich des Resourcenbedarfs optimieren.
Vielen Dank nochmal für die Hilfe.

schönen Abend noch
SchwindelInside
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.08.2006, 19:08
Beitrag #6

SchwindelInside Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 77
Registriert seit: Dec 2005

2012 pro
2005
EN


Deutschland
Online-Messwertaufnahme über RS232

Akzeptierte Lösung

<div align="left">
' schrieb:Wunderschönen Abend,

Gibt es eine Möglichkeit den Puffer jedesmal zu löschen nach dem ein Datenpaket ausgelesen wurde?

da hätte ich auch gleich drauf kommen können.: Es gibt in der Palette VISA eine einfache Funktion namens VISA-Clear, die genau das macht.

Schönen Abend noch
</div>
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Servomex Messwerte auslesen über RS232/RS485 Chefkoch 6 9.399 18.07.2016 13:54
Letzter Beitrag: jg
  problem mit LF (0x0A) über RS232 klaus_at 7 6.570 20.11.2013 13:34
Letzter Beitrag: klaus_at
  Labview-Kommunikation mit Jumo über RS232 redhand 35 34.984 28.10.2013 09:45
Letzter Beitrag: GerdW
  Keithley K2000 über RS232 auslesen Alpenpower 6 14.158 09.09.2013 07:55
Letzter Beitrag: GerdW
  Kraftprüfmaschine von Zick/Roell über RS232 steuern 1johleh 24 34.113 20.12.2012 19:31
Letzter Beitrag: Tobi2012
  Keine Daten kommen an vom Hameg 8115 über VISA RS232 USB fsg4u 3 5.933 09.08.2012 14:33
Letzter Beitrag: fsg4u

Gehe zu: