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 

Fraktionssammler



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!

12.10.2013, 16:52 (Dieser Beitrag wurde zuletzt bearbeitet: 12.10.2013 17:11 von Orbaxx.)
Beitrag #1

Orbaxx Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Sep 2013

2012SP1f4
2013
DE

13189
Deutschland
Fraktionssammler
Hallo liebe LVF-Gemeinde,

zuerst möchte ich mal ein DANKE an euch loswerden. Ich Grünschnabel habe durch euch schon einige Sachen in meinem Projekt lösen können, wie zum Beispiel die Kommunikation über serielle Schnittstellen oder die Konvertierung von Strings.

Jetzt zu meinem Projekt welches ich in LabVIEW 2012 SP1 f4 umsetze: lv12_img

Ich möchte mit Hilfe einer Relaiskarte die an COM1 angeschlossen ist und 2 KERN Waagen die an COM2 und COM3 angeschlossen sind einen Fraktionssammler schreiben der sich folgendermaßen verhalten soll:

Gefäß für die 1. Fraktion auf Waage 1 läuft bis zu einer bestimmten Gewichtsgrenze (als Testdatum 10g) voll und es wird dann ein Schlauchquetschventil über die Relaiskarte geschalten, sodass dann ein Gefäß für die 2. Fraktion auf Waage 2 bis zu einer neuen Gewichtsgrenze (auch als Test 10g) volllaufen kann. Das Ventil wird dann geschlossen sodass die 3. Fraktion in ein Gefäß läuft das sich wieder auf Waage 1 befindet (bis zur Gewichtsgrenze 30g). Ventil wird wieder geschalten sodass die 4. Fraktion in ein Gefäß das sich wieder auf Waage 2 befindet laufen kann (bis zur Gewichtsgrenze 50g).

Was bereits funktioniert ist die Kommunikation mit den Waagen (VISA, Befehl an Waage schicken Daten zu senden, zurückgelieferten String lesen und den String so manipulieren, dass ich daraus ein INT/DBL mache um Vergleichsoperationen durchführen zu können) und das Öffnen und Schließen des Ventils über die Relaiskarte.

In meinem VI hat es bisher immer nur geklappt die 1. Fraktion und die 2. Fraktion erfolgreich zu sammeln, die 3. und 4. Fraktion lassen sich nicht korrekt sammeln, weil leider die Abbruchbedingung der 1. und 2. Fraktion greifen und die 3 Fraktion bei 10g und die 4. Fraktion bei 10g endet.

Ich habe bei der Lösung meiner vorherigen Probleme immer wieder den Leitspruch "THINK DATAFLOW" gelesen aber irgendwie stell ich mich zu dumm an bzw. habe das Datenflussprinzip in LabVIEW noch nicht wirklich verinnerlicht... In meinen Büchern die ich hier vor mir zu liegen habe stand dazu auch ein treffendes Zitat: "Die Parallelität der Abarbeitung ist hier kein Segen, sondern ein "Fluch"." Confused

Erläuterungen zu den VIs & SubVIs:

Main.vi - Hier sollen die Berechnungen stattfinden die durch die Bedienfelder vorgegeben wurden und dann soll das Programm sequentiell abgearbeitet werden.

Waage1_auslesen.vi & Waage2_auslesen.vi - nutze ich als SubVI zum Senden von Befehlen an die Waagen und zum Empfangen der zurückgelieferten Strings, die Strings werden dann auch gleich so manipuliert, dass ich Zahlenwerte erhalte.

Waage1_tarieren.vi & Waage2_tarieren.vi - hier wird der Befehl zum Tarieren an die Waage gesendet

Relaiskarte_initialisieren.vi - Initialisiert die Relaiskarte

Relais_schalten.vi - Beinhaltet den Befehl zum Schalten des Relais an dem ein Ventil angeschlossen ist

Relais_schließen.vi - Beinhaltet den Befehl zum Schließen des Relais an dem ein Ventil angeschlossen ist

Meine Fragen:

Wie bekomme ich es hin, dass die 3. Fraktion und die 4. Fraktion nicht durch die Abbruchbedingung der 1. und 2. Fraktion unterbrochen wird? Denn eigentlich soll die 3. Fraktion bis 30g und die 4. Fraktion bis 50g laufen, das habe ich auch im Vergleichsoperator Größer? so eingebunden... Ich habe schon die Funktionen "Bedingte Deaktivierungsstruktur" oder "Diagrammdeaktivierungsstruktur" gesehen, könnten die bei meinem Problem zielführend sein? Oder muss ich eventuell eine Zeitgesteuerte Struktur in Betracht ziehen?

Eine andere aber nicht so wichtige Sache ist: Ich habe versucht mit dem Vergleichsoperator Gleich? diese Abfragen zu steuern aber wenn ich Gleich? benutze läuft irgendetwas schief und die Fraktion wird nicht bei 10g gestoppt sondern läuft fröhlich weiter. Habe aber extra darauf geachtet, dass die Werte vom selben Typ (DBL) sind. Wenn ich Größer? oder Kleiner? benutze klappt es aber... Hat das etwas mit der Funktion "Muster suchen" oder "Dezimal-String nach Zahl" in meinen SubVIs Waage1_auslesen.vi & Waage2_auslesen.vi zu tun?

Ich danke schon jetzt für die Mühe und etwaige Tipps zur Lösung bzw. Verbesserung meines VIs!!!

Einen freundlichen Gruß,

Orbaxx


0.0 .zip  MainLLB_lv_2012.zip (Größe: 84,03 KB / Downloads: 325)


EDIT: Eine Frage noch, die ich vergessen habe zu stellen: Kann man bei der Funktion "Muster suchen" in den regulären Ausdruck mehrere reguläre Ausdrücke suchen lassen? In meinem Fall ist es so, dass die Waage ja auch negative Werte anzeigen kann aber das umgehe ich aktuell weil ich im beim Muster suchen [0-9]+ angegeben habe um im String nur die Zahlenwerte suchen zu lassen. Das ist eigentlich auch zielführend aber wenn man das befüllte Gefäß von der Waage nimmt wird der eigentlich negative Wert als positiver Wert angezeigt und der würde ja den Programmablauf stören... Allerdings kann ich dann bestimmt den String nicht zu einer Zahl konvertieren wenn das "-"-Zeichen vorangestellt wäre oder?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.10.2013, 16:37
Beitrag #2

Orbaxx Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Sep 2013

2012SP1f4
2013
DE

13189
Deutschland
RE: Fraktionssammler
Hallo nochmal LVF-Gemeinde,

leider kann ich meinen Beitrag von gestern nicht mehr editieren, entschuldigt daher den Doppelpost.

Ich habe ein weiteres Problem entdeckt, wo ich nicht zur Lösung komme obwohl es sicherlich irgendwie gehen muss...

Wenn ich mein Main.vi laufen lasse werden "Fraktion 1: Gewicht in g" und "Fraktion 3: Gewicht in g" oder "Fraktion 2: Gewicht in g" und "Fraktion 4: Gewicht in g" immer zusammen angezeigt, siehe 1. Attachment "FPMainVI":

   

Das zugehörige BD sieht so aus, 2. Attachment "BDMainVI":

   

Ich habe gerade in meinen SubVIs "Waage1_auslesen" und "Waage2_auslesen" einfach jeweils ein weiteres numerisches Anzeigeelement hinzugefügt: "Fraktion 3: Gewicht in g" im SubVI "Waage1_auslesen", siehe 3. Attachment "BDWaage1_auslesen":

   

und in SubVI "Waage2_auslesen" analog dazu "Fraktion 4: Gewicht in g".

Leider verhält sich das MainVI wie vorher: Ich starte das Programm und mir wird auf dem FP unter "Fraktion 1: Gewicht in g" und "Fraktion 3: Gewicht in g" das gleiche angezeigt...

Demnach kommt es nie dazu, dass die 3. Fraktion bis 30g laufen kann sondern sie wird immer bei 10g durch die Abbruchbedingung für die 1. Fraktion unterbrochen...

Wie schaffe ich es, dass die 3. und 4. Fraktion jeweils eigenständig angesprochen werden können? Sowas müsste ich doch durch den Einsatz von lokalen oder globalen Variablen lösen können oder?

Oder kann ich vielleicht einfach Schalter hinter den Fraktionen setzen und diese nutzen um die jeweiligen Fraktionen anzusteuern? Also z.Bsp. Schalter hinter Fraktion 1 auf True setzen dann soll nur Fraktion 1 erfasst und unter "Fraktion 1: Gewicht in g" auf dem FP angezeigt werden und wenn Schalter hinter Fraktion 3 auf True gesetzt wird dann soll eben nur Fraktion 3 erfasst und unter "Fraktion 3: Gewicht in g" auf dem FP angezeigt werden...

Bitte gebt mir einen Tipp wie ich das umgehen kann!

Tausend Dank im Voraus,

Orbaxx!!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.10.2013, 17:09 (Dieser Beitrag wurde zuletzt bearbeitet: 13.10.2013 17:32 von GerdW.)
Beitrag #3

GerdW Online
______________
LVF-Team

Beiträge: 17.425
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Fraktionssammler
Hallo Orbaxx,

kann deine VIs mangels passender LV-Version nicht anschauen, aber die Bilder sind auch schon aussagekräftig:
Wann immer du Sequenzen wie im Bild anlegst, solltest du über das Konzept einer Statemachine nachdenken.

Dann wird es recht einfach, den gleichen State (z.B. Waage1 befüllen) mit einem Parameter (z.B. 10g oder 30g) aufzurufen...

Zitat:Leider verhält sich das MainVI wie vorher: Ich starte das Programm und mir wird auf dem FP unter "Fraktion 1: Gewicht in g" und "Fraktion 3: Gewicht in g" das gleiche angezeigt...
Was erwartest du, wenn du den selben Wert in zwei verschiedenen Indicators anzeigst?
Hier greift gleich der Spruch "THINK DATAFLOW"... Big Grin

Zitat:Kann man bei der Funktion "Muster suchen" in den regulären Ausdruck mehrere reguläre Ausdrücke suchen lassen? In meinem Fall ist es so, dass die Waage ja auch negative Werte anzeigen kann aber das umgehe ich aktuell weil ich im beim Muster suchen [0-9]+ angegeben habe um im String nur die Zahlenwerte suchen zu lassen.
1. Muster suchen kann nur einen RegEx suchen. Der RegEx kann aber durchaus komplizierter sein...
2. MusterSuchen ist hier vielleicht die falsche Funktion, ebenso wie "DezimalstringNachZahl". Ersteres hast du mit einem (noch) nicht korrekten RegEx versehen, zweiteres wandelt dir keine gebrochenen Zahlen...
3. Ich empfehle (fast) immer ScanFromString: Du kannst einen Offset vorgeben (Waagen liefern meist eine Rückmeldung mit fester Anzahl Zeichen vor dem Messwert) und du kannst einen passenden Formatcode vorgeben (hier wahrscheinlich "%.;%f"; evtl. auch gefolgt von einem "%s", um die Einheit abzufragen)!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.10.2013, 20:04 (Dieser Beitrag wurde zuletzt bearbeitet: 13.10.2013 20:05 von Y-P.)
Beitrag #4

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: Fraktionssammler

8.0 .llb  MainLLB.llb (Größe: 199,97 KB / Downloads: 303)


Gruß Markus

(13.10.2013 17:09 )GerdW schrieb:  kann deine VIs mangels passender LV-Version nicht anschauen, aber die Bilder sind auch schon aussagekräftig:

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.10.2013, 09:16 (Dieser Beitrag wurde zuletzt bearbeitet: 14.10.2013 09:17 von GerdW.)
Beitrag #5

GerdW Online
______________
LVF-Team

Beiträge: 17.425
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Fraktionssammler
Danke Markus!

Hallo Orbaxx,

zu deinen VIs:
- Das WaageLesen könnte so aussehen:
   
- Du brauchst auch nur ein "WaageLesen" (statt Waage1 und Waage2), wenn du den COM-Port als Parameter übergibst...
- Das gleiche gilt für WaageTara: Übergebe den COM-Port als Parameter und du brauchst nur eine Funktion für beide Waagen...
- WaageLesen und WaageTara unterscheiden sich auch nur um einen Parameter, könnte man also auch zusammenfassen...
- "RelaisSchalten", "RelaisSchließen" und "RK INIT" unterscheiden sich auch alle nur durch einen einzigen Parameter, also auch hier: eine Funktion reicht aus...
- Benutze den ErrorCluster, um DATAFLOW zu erzwingen, dann brauchst du die Sequenzstruktur nicht mehr!
- Es gibt eine Funktion "-1", warum nutzt du die nicht?

Zitat:Demnach kommt es nie dazu, dass die 3. Fraktion bis 30g laufen kann sondern sie wird immer bei 10g durch die Abbruchbedingung für die 1. Fraktion unterbrochen...
Könnte das an deinen Testbedingungen liegen? Hast du das schon mal mit Highlight-Debugging und Sonden getestet?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.10.2013, 21:02
Beitrag #6

Orbaxx Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Sep 2013

2012SP1f4
2013
DE

13189
Deutschland
RE: Fraktionssammler
Hallo Markus, hallo GerdW,

vielen Dank, dass ihr euch meinem Problem annehmt. Ich habe gestern abend im Labor noch das Projekt als 2011er Version gespeichert und gerade zu Hause versucht die LLB daraus zu erstellen. Das hat nicht funktioniert... Deshalb vielen Dank Markus für das Downgrade!

Danke für deine Tipps GerdW, ich werde morgen im Labor versuchen das WaageLesen neu umzusetzen und die Relaisfunktionen zusammenzufassen. Das mit dem ErrorCluster: Ist damit gemeint, dass ich einfach meine SubVI's als "SubVI mit Fehlerbehandlung" erstelle, sodass ich dann Fehlereingang und Fehlerausgang habe um diese zum "Durchschleifen" zu nutzen?

Die Funktion "-1" habe ich leider übersehen, das werde ich auch anpassen. (Mich hat die Fülle an Funktionen und Elementen im ersten Moment eh erschlagen :-D)

Die Kern Waagen liefern wenn ich den "w"-Befehl schicke immer im folgenden Format zurück:

Bei negativem Gewicht in \-Code-Ansicht: \s-\s\s\s\s\s\s\s\s\s1\sg\s\s\r\n ergibt in normaler Anzeige „- 1 g “ oder
bei positivem Gewicht in \-Code-Ansicht: \s\s\s\s\s\s\s\s\s\s\s0\sg\s\s\r\n ergibt in normaler Anzeige „ 0 g “

Also es ist so, dass immer 11 Zeichen vor dem Gewicht stehen. Ich teste das mit ScanFromString!

Zu den Testbedingungen: Die müssten soweit ok sein. Ich hab einfach falsch strukturiert und das mit dem selben Wert in den verschiedenen Indicators falsch gemacht. War ein sinnfreier Versuch ;-) Dachte es seien dann durch unterschiedliche Benennung unterschiedliche Variablen. Muss mehr dataflowthinken ;-)

Danke schonmal soweit,

Orbaxx
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.10.2013, 06:57
Beitrag #7

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: Fraktionssammler
Bestimmt steht's irgendwann genau so im Duden. Big Grin

Gruß Markus

(14.10.2013 21:02 )Orbaxx schrieb:  dataflowthinken ;-)

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.10.2013, 08:27
Beitrag #8

GerdW Online
______________
LVF-Team

Beiträge: 17.425
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Fraktionssammler
Hallo Orbaxx,

Zitat:dass ich einfach meine SubVI's als "SubVI mit Fehlerbehandlung" erstelle, sodass ich dann Fehlereingang und Fehlerausgang habe um diese zum "Durchschleifen" zu nutzen?
Du weißt schon, dass man Controls/Indicators mit dem Anschlussfeld ("ConnectorPane") verknüpfen kann, um einem VI Ein- und ausgänge zu verpassen? So kann man auch selbst ErrorCluster auf das FP ("Frontpanel") legen und selbst verknüpfen...

Zitat:Die Kern Waagen liefern...
Wer hat denn dieses Format verbrochen? Variable Anzahl Leerzeichen zwischen Vorzeichen und Wert...
Quick&Dirty-Lösung:
   

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: