<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tutorial Archive - CETONI GmbH</title>
	<atom:link href="https://cetoni.com/de/category/software/tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>https://cetoni.com/de/category/software/tutorial/</link>
	<description>Automatisierungs- und Mikrofluidiklösungen für das Labor</description>
	<lastBuildDate>Mon, 06 Nov 2023 10:37:30 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://cetoni.com/wp-content/uploads/2020/12/cropped-favicon-32x32.png</url>
	<title>Tutorial Archive - CETONI GmbH</title>
	<link>https://cetoni.com/de/category/software/tutorial/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Tutorial: Flussprofilgenerierung mit QmixElements (CETONI Elements) &#8211; Teil 2</title>
		<link>https://cetoni.com/de/tutorial-flussprofilgenerierung-mit-qmixelements-teil-2/</link>
		
		<dc:creator><![CDATA[CETONI]]></dc:creator>
		<pubDate>Mon, 20 Apr 2020 07:45:30 +0000</pubDate>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">https://cobomation.de/?p=2302</guid>

					<description><![CDATA[<p>Der Beitrag <a href="https://cetoni.com/de/tutorial-flussprofilgenerierung-mit-qmixelements-teil-2/">Tutorial: Flussprofilgenerierung mit QmixElements (CETONI Elements) &#8211; Teil 2</a> erschien zuerst auf <a href="https://cetoni.com/de/">CETONI GmbH</a>.</p>
]]></description>
										<content:encoded><![CDATA[
		<div id="fws_69bf2e5461d3d"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row top-level"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<p>Im zweiten Teil des Tutorials erfahren Sie, wie Sie mit Hilfe von JavaScript Funktionen sinusförmige Flussprofile erzeugen können. Dafür ändern Sie das Script aus dem ersten Teil so ab, dass statt eines Sägezahnprofils ein Sinusprofil erzeugt wird. Bevor Sie mit diesem zweiten Teil starten, <a href="https://cetoni.com/de/tutorial-flussprofilgenerierung-mit-qmixelements-teil-1/">können Sie hier</a> den ersten Teil des Tutorials lesen.</p>
<p><span style="color: #4393e9;"><strong>Wichtig</strong></span><br />
Für dieses Tutorial benötigen Sie die QmixElements Version v20191121 oder eine neuere Version. Wenn Sie noch eine ältere Version verwenden, aktualisieren Sie bitte auf die aktuellste QmixElements Version.</p>
<p><a href="#">Aktuelle QmixElements Version</a></p>
<h3>Vorbereitung</h3>
<p>Konfigurieren Sie Ihr System, wie im ersten Teil des Tutorials beschrieben und stellen Sie dann die Verbindung zu Ihren Geräten her. Wenn Sie nicht über entsprechende Geräte verfügen, können Sie das Tutorial auch gern mit simulierten Geräten nachvollziehen. Das QmixElements Projekt mit simulierten Geräten und dem im ersten Tutorial erstellten Script können Sie hier herunterladen.</p>
<p>Öffnen Sie nun das Script <strong>Tutorial_Sawtooth_Profile.qsc</strong>, welches Sie im ersten Teil des Tutorials erstellt haben und speichern Sie dieses dann unter einem neuen Namen ab. Sie sollten dann das folgende Programm in Scripteditor sehen.</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter wp-image-2304 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_FinalSawtoothScript.png" alt="" width="536" height="526" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_FinalSawtoothScript.png 536w, https://cetoni.com/wp-content/uploads/Flowprofile_FinalSawtoothScript-300x294.png 300w" sizes="(max-width: 536px) 100vw, 536px" /></p>
<h3>Teil 2 &#8211; Script zur Generierung eines Sinusprofils</h3>
<p>Ziel dieses Scripts soll es sein, mit einer Pumpe ein Flussprofil in Form eines Sinus von 0 bis zur definierten Zielflussrate zu generieren und mit der zweiten Pumpe den Fluss der ersten Pumpe so zu ergänzen, dass die Summe der beiden Flüsse zu einem konstanten Fluss mit einer definierten Flussrate führt.</p>
<p>Zur Erzeugung des Profils muss die Flussrate der Pumpe schrittweise so verändert werden, dass im zeitlichen Verlauf ein Sinus-Profil entsteht. Die Anzahl der Schritte zur Erzeugung des Sinus-Profils, d.h. die Auflösung, soll auf 100 Schritte für einen Sinus festgelegt werden. In dem bisherigen Sägezahn-Script hatten Sie die Anzahl der Schritte auf 20 festgelegt. Ändern Sie deshalb den Wert der Variable <strong>$GradientSteps</strong> auf 100.</p>
<h3><img decoding="async" class="aligncenter wp-image-2306 size-full" src="https://cetoni.de/wp-content/uploads/ChangeGradientSteps.gif" alt="" width="1024" height="320" /></h3>
<h3>Auflösung (Schrittanzahl) für ein Sinusprofil anpassen</h3>
<p>Löschen Sie nun die beiden <strong>Generate Flow</strong> Funktionen, wie in der Abbildung unten dargestellt. Markieren Sie dafür beide Funktionen und löschen Sie diese anschließend über das Kontextmenü (rechte Maustaste) oder durch Drücken der <strong>Entfernen Taste</strong>.</p>
<p><img decoding="async" class="aligncenter wp-image-2308 size-full" src="https://cetoni.de/wp-content/uploads/DeleteFlowFunctions.png" alt="" width="925" height="284" srcset="https://cetoni.com/wp-content/uploads/DeleteFlowFunctions.png 925w, https://cetoni.com/wp-content/uploads/DeleteFlowFunctions-300x92.png 300w, https://cetoni.com/wp-content/uploads/DeleteFlowFunctions-768x236.png 768w" sizes="(max-width: 925px) 100vw, 925px" /><br />
Fügen Sie nun eine neue Variable vor die beiden vorhandenen Variablen in die Zählschleife (Counting Loop) ein. Nennen Sie die Variable <strong>$Sinus</strong> und wählen Sie im <strong>Type</strong> Feld <strong>JavaScript Expression</strong> aus.</p>
<p><img decoding="async" class="aligncenter wp-image-2310 size-full" src="https://cetoni.de/wp-content/uploads/InsertGenerateFlowFunctions.gif" alt="" width="952" height="376" /><br />
Die<strong> $Sinus</strong> Variable dient dazu, die Berechnung des Sinus-Wertes für die weitere Bearbeitung zu speichern. Für die Berechnung des Sinus Wertes, verwenden Sie die JavaScript Funktion <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin" target="_blank" rel="noopener">Math.sin()</a> zusammen mit der Konstante <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI" target="_blank" rel="noopener">Math.PI.</a> In das Eingabefeld für den JavaScript Ausdruck geben Sie Folgendes ein:</p>
<p style="text-align: center;"><strong>Math.sin</strong>(2 * <strong>Math.PI</strong> / (<strong>$GradientSteps</strong> &#8211; 1) * <strong>$i</strong>)</p>
<p>Der Schleifenzähler <strong>$i</strong> läuft von 0 bis zur Anzahl der <strong>$GradientSteps</strong> &#8211; 1. Zur Berechnung des aktuellen Sinuswertes wird die Periode 2π durch die Anzahl die Schritte &#8211; 1 geteilt und dann mit dem aktuellen Schritt <strong>$i</strong> multipliziert.</p>
<p><img decoding="async" class="aligncenter wp-image-2312 size-full" src="https://cetoni.de/wp-content/uploads/EnterSinusCalculation.png" alt="" width="1024" height="313" srcset="https://cetoni.com/wp-content/uploads/EnterSinusCalculation.png 1024w, https://cetoni.com/wp-content/uploads/EnterSinusCalculation-300x92.png 300w, https://cetoni.com/wp-content/uploads/EnterSinusCalculation-768x235.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /><br />
Um den berechneten Wert der <strong>$Sinus</strong> Variable zu überprüfen, können Sie deren Wert im grafischen Logger anzeigen lassen. Dafür haben Sie im ersten Teil des Tutorials bereits den virtuellen I/O-Kanal <strong>Script Value 1</strong> erstellt und zum grafischen Logger hinzugefügt. Fügen Sie nun die Funktion <strong>Write Device Property</strong> <span style="color: #4393e9;">❶</span> in das Script ein. Konfigurieren Sie die Funktion dann so, wie in der Abbildung unten dargestellt.</p>
<p><img decoding="async" class="alignleft wp-image-2332 size-medium" src="https://cetoni.de/wp-content/uploads/SinusWriteDeviceProperty-300x107.png" alt="" width="300" height="107" srcset="https://cetoni.com/wp-content/uploads/SinusWriteDeviceProperty-300x107.png 300w, https://cetoni.com/wp-content/uploads/SinusWriteDeviceProperty-768x273.png 768w, https://cetoni.com/wp-content/uploads/SinusWriteDeviceProperty.png 1024w" sizes="(max-width: 300px) 100vw, 300px" /><br />
In das Feld <strong>Value to be written</strong> <span style="color: #4393e9;">❷</span> tragen Sie den Variablennamen <strong>$Sinus</strong> ein. Im Bereich <strong>Device Property</strong> <span style="color: #4393e9;">❸</span> wählen Sie im Feld <strong>Device</strong> den virtuellen Kanal <strong>Script Value 1</strong>. Im Feld <strong>Property</strong> wählen Sie die dann die Eigenschaft <strong>ActualValu</strong>e. Die Funktion können Sie dann so lesen:</p>
<p style="text-align: center;">Schreibe den Wert der Variablen <strong>$Sinus</strong> in die Eigenschaft <strong>ActualValue</strong> des virtuellen Kanals <strong>Script Value 1</strong></p>
<p>Löschen Sie jetzt alle Daten aus dem grafischen Logger und aktivieren Sie die automatische Skalierung. Starten Sie nun Ihr Script. Wenn Sie alles richtig eingegeben haben, sollten Sie sehen, wie im grafischen Logger die folgende Sinusfunktion generiert wird:</p>
<p><img decoding="async" class="aligncenter wp-image-2316 size-full" src="https://cetoni.de/wp-content/uploads/PlotLoggerVirtualChannelSinus.png" alt="" width="1076" height="241" srcset="https://cetoni.com/wp-content/uploads/PlotLoggerVirtualChannelSinus.png 1076w, https://cetoni.com/wp-content/uploads/PlotLoggerVirtualChannelSinus-300x67.png 300w, https://cetoni.com/wp-content/uploads/PlotLoggerVirtualChannelSinus-1024x229.png 1024w, https://cetoni.com/wp-content/uploads/PlotLoggerVirtualChannelSinus-768x172.png 768w" sizes="(max-width: 1076px) 100vw, 1076px" /><br />
Der Sinus oszilliert wie erwartet zwischen 1 und -1. Für das sinusförmige Flussprofil welches generiert werden soll, soll die Flussrate zwischen 0 und der Zielflussrate oszillieren. In einem ersten Schritt soll der Sinuswert dafür so angepasst werden, dass er zwischen 0 und 1 oszilliert. Dies können Sie erreichen, indem Sie den Sinus auf der Y-Achse um 1 nach oben verschieben und dann die Amplitude halbieren. Zur Speicherung des neuen Wertes, verwenden wir die bereits vorhandene Variable <strong>$Flow1</strong> <span style="color: #4393e9;">❶</span>. Dies kann nun so berechnet werden:</p>
<p style="text-align: center;"><span style="color: #4393e9;">❷</span> <strong>$Flow1</strong> = (<strong>$Sinus</strong> + 1) / 2</p>
<p><img decoding="async" class="aligncenter wp-image-2318 size-full" src="https://cetoni.de/wp-content/uploads/ShiftAdjustSinus.png" alt="" width="1024" height="313" srcset="https://cetoni.com/wp-content/uploads/ShiftAdjustSinus.png 1024w, https://cetoni.com/wp-content/uploads/ShiftAdjustSinus-300x92.png 300w, https://cetoni.com/wp-content/uploads/ShiftAdjustSinus-768x235.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /><br />
Ändern Sie nun die <strong>Write Device Property</strong> Funktion so ab, dass nicht mehr der Wert der Variable <strong>$Sinus</strong> sondern der Wert der Variable <strong>$Flow1</strong> ausgegeben wird. Löschen Sie dann den grafischen Logger und aktivieren Sie wieder die automatische Skalierung. Sie sollten nun folgende Funktion im grafischen Logger sehen &#8211; eine Sinusfunktion, die zwischen 0 und 1 oszilliert:</p>
<p><img decoding="async" class="aligncenter wp-image-2320 size-full" src="https://cetoni.de/wp-content/uploads/PlotLoggerVirtualChannelSinus2.png" alt="" width="1075" height="246" srcset="https://cetoni.com/wp-content/uploads/PlotLoggerVirtualChannelSinus2.png 1075w, https://cetoni.com/wp-content/uploads/PlotLoggerVirtualChannelSinus2-300x69.png 300w, https://cetoni.com/wp-content/uploads/PlotLoggerVirtualChannelSinus2-1024x234.png 1024w, https://cetoni.com/wp-content/uploads/PlotLoggerVirtualChannelSinus2-768x176.png 768w" sizes="(max-width: 1075px) 100vw, 1075px" /><br />
Um den Sinus zwischen 0 und der Zielflussrate oszillieren zu lassen, müssen Sie jetzt lediglich noch mit der Zielflussrate <strong>$TargetFlow</strong> multiplizieren. Erweitern Sie die Berechnung der Variable <strong>$Flow1</strong> um diesen Schritt:</p>
<p style="text-align: center;"><strong>$Flow1</strong> = (<strong>$Sinus</strong> + 1) / 2 *<strong> $TargetFlow</strong></p>
<p>Die Flussrate <strong>$Flow1</strong> wird nun sinusförmig zwischen 0 und der Zielflussrate oszillieren. Die Flussrate <strong>$Flow2</strong> der zweiten Pumpe soll die erste Flussrate so ergänzen, das ein konstanter Fluss mit gleichbleibender Flussrate <strong>$TargetFlow</strong> entsteht. Deshalb können Sie in der Variable <strong>$Flow2</strong> die Flussrate der zweiten Pumpe wie folgt berechnen</p>
<p style="text-align: center;"><strong>$Flow2</strong> = $TargetFlow &#8211; $Flow1</p>
<p>Fügen Sie nun vor die Write <strong>Device Property</strong> Funktion zwei <strong>Generate Flow</strong> Funktionen ein und löschen Sie anschließend die <strong>Write Device Property</strong> Funktion, da diese nicht mehr benötigt wird.</p>
<p><img decoding="async" class="aligncenter wp-image-2322 size-full" src="https://cetoni.de/wp-content/uploads/InsertGenerateFlowFunctions-1.gif" alt="" width="952" height="376" /><br />
Das Script sollte nun wie in der Abbildung unten aussehen <span style="color: #4393e9;">❶</span>. Konfigurieren Sie die beiden <strong>Generate Flow</strong> Funktionen so, dass die erste Pumpe mit der Flussrate <strong>$Flow1</strong><span style="color: #4393e9;"> ❷</span> gestartet wird und die zweite Pumpe mit der Flussrate <strong>$Flow2</strong> (siehe Abbildung unten). Achten Sie darauf, dass die Option <strong>Run to completion</strong> <span style="color: #4393e9;">❸</span> deaktiviert ist.</p>
<p><img decoding="async" class="aligncenter wp-image-2324 size-full" src="https://cetoni.de/wp-content/uploads/GenerateFlowSinus-1.png" alt="" width="917" height="359" srcset="https://cetoni.com/wp-content/uploads/GenerateFlowSinus-1.png 917w, https://cetoni.com/wp-content/uploads/GenerateFlowSinus-1-300x117.png 300w, https://cetoni.com/wp-content/uploads/GenerateFlowSinus-1-768x301.png 768w" sizes="(max-width: 917px) 100vw, 917px" /><br />
Löschen Sie jetzt erneut alle Daten aus dem grafischen Logger und aktivieren Sie die automatische Skalierung. Überprüfen Sie vor dem Scriptstart, dass die Spritzen der beiden Pumpen aufgezogen sind. Starten Sie dann Ihr Script. Wenn Sie alles richtig eingegeben haben, sollten Sie sehen, wie im grafischen Logger die folgenden Flussprofile generiert werden:</p>
<p><img decoding="async" class="aligncenter wp-image-2326 size-full" src="https://cetoni.de/wp-content/uploads/SinusFlowProfile.png" alt="" width="1096" height="249" srcset="https://cetoni.com/wp-content/uploads/SinusFlowProfile.png 1096w, https://cetoni.com/wp-content/uploads/SinusFlowProfile-300x68.png 300w, https://cetoni.com/wp-content/uploads/SinusFlowProfile-1024x233.png 1024w, https://cetoni.com/wp-content/uploads/SinusFlowProfile-768x174.png 768w" sizes="(max-width: 1096px) 100vw, 1096px" /><br />
Sie haben nun die Grundlagen erlernt, wie Sie in den Scriptfunktionen JavaScript verwenden können &#8211; z.B. um mathematische Berechnung durchzuführen. Wenden Sie das Erlernte an, indem Sie z.B. ein Script programmieren, dass zwei sinusförmige Flüsse erzeugt, bei dem der Sinus des zweiten Flusses die doppelte Periodendauer vom Sinus des ersten Flusses hat. Nutzen Sie den grafischen Logger, um die Ergebnisse zu überprüfen.</p>
<p>Im dritten Teil des Tutorials erfahren Sie, wie Sie das Script um eine Initialisierungsroutine erweitern, welche die Spritzen aufzieht und erhalten Tipps, welche Möglichkeiten es gibt, die Lesbarkeit Ihres Scriptes zu verbessern und Ihr Script zu dokumentieren.</p>
<p>Das QmixElements Projekt mit simulierten Geräten und dem im ersten und zweiten Teil des Tutorials erstellten Scripten können Sie <a href="https://cetoni.de/downloads/Flowprofiles.qpr" target="_blank" rel="noopener">hier herunterladen</a>.</p>
</div>




			</div> 
		</div>
	</div> 
</div></div>
<p>Der Beitrag <a href="https://cetoni.com/de/tutorial-flussprofilgenerierung-mit-qmixelements-teil-2/">Tutorial: Flussprofilgenerierung mit QmixElements (CETONI Elements) &#8211; Teil 2</a> erschien zuerst auf <a href="https://cetoni.com/de/">CETONI GmbH</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tutorial Flussprofilgenerierung mit QmixElements (CETONI Elements)- Teil 1</title>
		<link>https://cetoni.com/de/tutorial-flussprofilgenerierung-mit-qmixelements-teil-1/</link>
		
		<dc:creator><![CDATA[CETONI]]></dc:creator>
		<pubDate>Wed, 20 Nov 2019 11:48:18 +0000</pubDate>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">https://cobomation.de/?p=2412</guid>

					<description><![CDATA[<p>Der Beitrag <a href="https://cetoni.com/de/tutorial-flussprofilgenerierung-mit-qmixelements-teil-1/">Tutorial Flussprofilgenerierung mit QmixElements (CETONI Elements)- Teil 1</a> erschien zuerst auf <a href="https://cetoni.com/de/">CETONI GmbH</a>.</p>
]]></description>
										<content:encoded><![CDATA[
		<div id="fws_69bf2e5465068"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<p>Die QmixElements Software verfügt über ein leistungsfähiges Script-System, um Prozesse und Abläufe schnell und einfach zu automatisieren. Sie erhalten im Rahmen dieses Tutorials einen Einblick und viele nützliche Hinweise zu einigen erweiterten Techniken, wie z.B. den Einsatz von Variablen, die Verwendung von JavaScript und die Nutzung von virtuellen Kanälen für die Aufzeichnung von Werten im grafischen Logger.</p>
<p>Im Rahmen des Tutorials erstellen Sie zwei Scripte, in denen auf Basis mathematischer Funktionen Flussgradienten bzw. Flussprofile generiert werden.</p>
<h3>Vorbereitung</h3>
<p>Bevor Sie mit der Programmierung der Scripte beginnen können, müssen Sie Ihr System konfigurieren. Wenn Sie nicht über entsprechende Geräte verfügen, können Sie das Tutorial auch gern mit simulierten Geräten nachvollziehen. Das QmixElements Projekt mit simulierten Geräten und dem im Tutorial erstellten Script können Sie hier herunterladen.</p>
<p><span style="color: #4393e9;"><strong>Wichtig</strong></span><br />
Für dieses Tutorial benötigen Sie die QmixElements Version v20191121 oder eine neuere Version. Wenn Sie noch eine ältere Version verwenden, aktualisieren Sie bitte auf die aktuellste QmixElements Version.</p>
<p>Aktuelle QmixElements Version</p>
<p>Für dieses Tutorial haben wir zwei Nemesys Niederdruck Spritzenpumpen mit 5 ml Glasspritzen <span style="color: #4393e9;">❶</span> verwendet. Sie können das Tutorial auch gern mit anderen Nemesys Spritzenpumpen oder Spritzen durchführen, müssen aber dann ggf. die Flussraten anpassen. Damit während der Generierung der Flussprofile die Ventile automatisch geschaltet werden, aktivieren Sie die Ventilautomatik für beide Pumpen <span style="color: #4393e9;">❷</span>. Als Einheit für die Flussrate konfigurieren Sie bitte <strong>ml/min</strong> <span style="color: #4393e9;">❸</span>.</p>
<p><img decoding="async" class="aligncenter wp-image-2416 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_Configuration.png" alt="" width="993" height="559" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_Configuration.png 993w, https://cetoni.com/wp-content/uploads/Flowprofile_Configuration-300x169.png 300w, https://cetoni.com/wp-content/uploads/Flowprofile_Configuration-768x432.png 768w" sizes="(max-width: 993px) 100vw, 993px" /></p>
<p>Um berechnete Werte aus dem Script grafisch visualisieren zu können, erstellen Sie in der Liste der I/O Kanäle einen virtuellen Kanal <span style="color: #4393e9;">❹</span>. Ein virtueller Kanal ist ein I/O Kanal, der für die Eingabe und Ausgabe von Werten verwendet werden kann.</p>
<p>Damit die generierten Flussprofile grafische in Echtzeit aufgezeichnet und visualisiert werden können, verwenden Sie den grafischen Logger und konfigurieren ihn entsprechend der Abbildung unten. Es soll von beiden Pumpen die aktuelle Flussrate und von dem virtuellen Kanal der aktuellen Wert angezeigt werden <span style="color: #4393e9;">❶</span>. Als <strong>Log Intervall</strong> <span style="color: #4393e9;">❷</span> stellen Sie einen Wert von 0,1 Sekunden ein. Jetzt können Sie mit der Programmierung des ersten Scripts starten.</p>
<h3><img decoding="async" class="aligncenter wp-image-2434 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_Loggerconfig.png" alt="" width="916" height="411" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_Loggerconfig.png 916w, https://cetoni.com/wp-content/uploads/Flowprofile_Loggerconfig-300x135.png 300w, https://cetoni.com/wp-content/uploads/Flowprofile_Loggerconfig-768x345.png 768w" sizes="(max-width: 916px) 100vw, 916px" /></h3>
<h3>Teil 1 &#8211; Script zur Generierung eines Sägezahnprofils</h3>
<p>Ziel dieses Scripts soll es sein, mit einer Pumpe ein Flussprofil in Form eines Sägezahns zu generieren und mit der zweiten Pumpe den Fluss der ersten Pumpe so zu ergänzen, dass die Summe der beiden Flüsse zu einem konstanten Fluss mit einer definierten Flussrate führt.</p>
<p><img decoding="async" class="aligncenter wp-image-2440 size-full" src="https://cetoni.de/wp-content/uploads/sawtooth_function.png" alt="" width="617" height="233" srcset="https://cetoni.com/wp-content/uploads/sawtooth_function.png 617w, https://cetoni.com/wp-content/uploads/sawtooth_function-300x113.png 300w" sizes="(max-width: 617px) 100vw, 617px" /></p>
<p>Den Sägezahn generieren Sie, indem Sie die Flussrate schrittweise in einem festen Intervall von 0 bis zur gewünschten Zielflussrate erhöhen. D.h. für das Script lassen sich die folgenden Parameter identifizieren:</p>
<ul>
<li>Anzahl der Schritte für einen einzelnen Sägezahn (<strong>$GradientSteps</strong>)</li>
<li>Dauer eines Schrittes in Millisekunden (<strong>$StepDuration</strong>)</li>
<li>Zielflussrate (<strong>$TargetFlow</strong>)</li>
</ul>
<p>Für diese Parameter legen Sie in Ihrem Script drei Variablen an. So können Sie die Parameter später schnell und einfach an einer Stelle ändern, ohne ständig durch das komplette Script navigieren zu müssen. Für jede Variable vergeben Sie einen aussagekräftigen und eindeutigen Namen.</p>
<p><img decoding="async" class="aligncenter wp-image-2436 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_Variables.png" alt="" width="517" height="176" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_Variables.png 517w, https://cetoni.com/wp-content/uploads/Flowprofile_Variables-300x102.png 300w" sizes="(max-width: 517px) 100vw, 517px" /></p>
<p>Für den Gradient verwenden Sie 20 Schritte (<strong>$GradientSteps = 20</strong>) mit einer Dauer von je 100 Millisekunden (<strong>$StepDuration = 100</strong>). Die Auflösung von 100 ms ist für viele Anwendungen eine hinreichend schnelle Zeitbasis. Diese Werte können Sie später jederzeit ändern. Für die Zielflussrate können Sie einen festen Wert eingeben, oder Sie berechnen die Zielflussrate auf Basis der maximalen Flussrate der ersten Pumpe. Dafür können Sie in das JavaScript Feld die Geräteeigenschaft (<strong>Insert device property</strong>) für die maximale Flussrate der Pumpe einfügen und für Berechnungen verwenden. In diesem Beispiel wollen wir mit einem Zehntel der Maximalflussrate dosieren und teilen diese deshalb einfach durch 10. Sie können aber auch gern andere Werte oder eigene Berechnungen verwenden.</p>
<p style="text-align: center;"><strong>$TargetFlow</strong> = $neMESYS_Low_Pressure_1.MaxFlow / 10</p>
<p>Um einen einzelnen Sägezahn zu erzeugen, benötigen Sie nun eine Zählschleife (<strong>Counting Loop</strong>) <span style="color: #4393e9;">❶</span>. Für eine Zählschleife können zwei Parameter konfiguriert werden: die Anzahl der Schleifendurchläufe (<strong>Loop Cycles</strong>) <span style="color: #4393e9;">❷</span> und der Name der Variable, in die der Zählerwert für den aktuellen Schleifendurchlauf gespeichert wird <span style="color: #4393e9;">❸</span>. Das Eingabfeld für die Loop Cycles <span style="color: #4393e9;">❷</span> ist mit einem orangefarbenen V markiert, d.h. Sie können in diesem Eingabefeld Variablen verwenden. Sie können an dieser Stelle also einfach die vorher definierte Variable <strong>$GradientSteps</strong> eintragen.</p>
<p><img decoding="async" class="aligncenter wp-image-2418 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_CountingLoop.png" alt="" width="918" height="240" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_CountingLoop.png 918w, https://cetoni.com/wp-content/uploads/Flowprofile_CountingLoop-300x78.png 300w, https://cetoni.com/wp-content/uploads/Flowprofile_CountingLoop-768x201.png 768w" sizes="(max-width: 918px) 100vw, 918px" /></p>
<p>Innerhalb der Schleife können Sie nun die Flussrate für die erste Pumpe berechnen und in einer Variablen speichern. Der Schleifenzähler <strong>$i</strong> nimmt bei den 20 Schleifendurchläufen die Werte 0 – 19 an. Die Flussrate können Sie deshalb mit der folgenden Formel berechnen:</p>
<p style="text-align: center;"><span style="color: #4393e9;">❶</span> <strong>$Flow1</strong> = $TargetFlow / ($GradientSteps &#8211; 1) * $i</p>
<p>D.h. die Flussrate ist im ersten Schleifendurchlauf 0 und erreicht im letzten Durchlauf den Wert <strong>$TargetFlow</strong>. Die Summe der Flussraten beider Pumpen soll den Wert <strong>$TargetFlow</strong> ergeben. Deshalb können Sie in einer zweiten Variablen die Flussrate der zweiten Pumpe wie folgt berechnen:</p>
<p style="text-align: center;"><span style="color: #4393e9;">❷</span> <strong>$Flow2</strong> = $TargetFlow &#8211; $Flow1</p>
<p><img decoding="async" class="aligncenter wp-image-2428 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_FlowVariables.png" alt="" width="847" height="309" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_FlowVariables.png 847w, https://cetoni.com/wp-content/uploads/Flowprofile_FlowVariables-300x109.png 300w, https://cetoni.com/wp-content/uploads/Flowprofile_FlowVariables-768x280.png 768w" sizes="(max-width: 847px) 100vw, 847px" /></p>
<p>Diese beiden Werte können Sie nun verwenden, um mit der Funktion <strong>Generate Flow</strong> <span style="color: #4393e9;">❶</span> die Dosierung der beiden Pumpen zu starten. Zur Konfiguration der Generate Flow Funktion wählen Sie einfach die entsprechende Pumpe aus und tragen im <strong>Feld Flow</strong> <span style="color: #4393e9;">❷</span> den berechneten Wert <strong>$Flow1</strong> oder <strong>$Flow2</strong> ein. Wichtig ist, dass hier die Einheit für die Flussrate auf den gleichen Wert eingestellt wird, wie er für die Pumpe konfiguriert wurde – in diesem Fall <strong>ml/min</strong> <span style="color: #4393e9;">❸</span>. Die Checkbox <strong>Run to completion</strong> <span style="color: #4393e9;">❹</span> müssen Sie deaktivieren. Ist dieses Feld aktiv, dann wird die nächste Funktion erst gestartet, wenn die Pumpe die Dosierung beendet hat. Im Fall der Generate Flow Funktion wäre das dann, wenn die Pumpe vollständig aufgezogen oder vollständig entleert ist. Da dies hier nicht erwünscht ist, sondern das Script sofort fortgesetzt werden soll, deaktivieren Sie das Feld.</p>
<p><img decoding="async" class="aligncenter wp-image-2430 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_GenerateFlow.png" alt="" width="850" height="280" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_GenerateFlow.png 850w, https://cetoni.com/wp-content/uploads/Flowprofile_GenerateFlow-300x99.png 300w, https://cetoni.com/wp-content/uploads/Flowprofile_GenerateFlow-768x253.png 768w" sizes="(max-width: 850px) 100vw, 850px" /></p>
<p>Um die gewünschte Schrittdauer für jeden Schleifendurchlauf zu erreichen, fügen Sie nun noch eine <strong>Delay</strong> Funktion <span style="color: #4393e9;">❶</span> als letzte Funktion in die Schleife ein. Im Konfigurationsbereich der Funktion im Eingabefeld <strong>Milliseconds</strong> <span style="color: #4393e9;">❷</span> können Sie direkt die Variable<strong> $StepDuratio</strong>n eintragen. Die Delay Funktion verzögert die weitere Scriptausführung für die konfigurierte Zeitdauer.</p>
<p><img decoding="async" class="aligncenter wp-image-2420 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_Delay.png" alt="" width="1001" height="241" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_Delay.png 1001w, https://cetoni.com/wp-content/uploads/Flowprofile_Delay-300x72.png 300w, https://cetoni.com/wp-content/uploads/Flowprofile_Delay-768x185.png 768w" sizes="(max-width: 1001px) 100vw, 1001px" /></p>
<p>Am Ende Ihres kurzen Scripts fügen Sie jetzt die Funktion <strong>Stop All Pumps</strong> <span style="color: #4393e9;">❶</span> ein, um alle Pumpen zu stoppen. Um die Aufzeichnung der Flussraten im grafischen Logger mit dem Scriptablauf zu synchronisieren, fügen Sie anschließend noch die Funktion zum Start des Loggers (<strong>Start Plot Logger</strong>) <span style="color: #4393e9;">❷</span> vor der Zählschleife ein und die Funktion zum Stoppen der Aufzeichnung (<strong>Stop Plot Logger</strong>)<span style="color: #4393e9;"> ❸</span> am Ende des Scripts.</p>
<p><img decoding="async" class="aligncenter wp-image-2426 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_FirstTestRun.png" alt="" width="535" height="280" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_FirstTestRun.png 535w, https://cetoni.com/wp-content/uploads/Flowprofile_FirstTestRun-300x157.png 300w" sizes="(max-width: 535px) 100vw, 535px" /></p>
<p>Wenn Sie Ihre Spritzen komplett gefüllt haben, können Sie jetzt den ersten Testlauf starten. Wenn das Script fehlerfrei durchgelaufen ist, sollten Sie im grafischen Logger das folgende Bild sehen.</p>
<p><img decoding="async" class="aligncenter wp-image-2424 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_FirstTestRun_Graph.png" alt="" width="926" height="260" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_FirstTestRun_Graph.png 926w, https://cetoni.com/wp-content/uploads/Flowprofile_FirstTestRun_Graph-300x84.png 300w, https://cetoni.com/wp-content/uploads/Flowprofile_FirstTestRun_Graph-768x216.png 768w" sizes="(max-width: 926px) 100vw, 926px" /></p>
<p>Im nächsten Schritt erweitern Sie das Script so, dass die Erzeugung des Sägezahns zyklisch wiederholt wird, bis der Anwender die Taste <strong>Request Script Stop</strong> <span style="color: #4393e9;"><strong>❶</strong></span> drückt. Fügen Sie dafür eine anfangsgeprüfte Schleife (<strong>Conditional Loop</strong>)<span style="color: #4393e9;"> ❷</span> vor die Sägezahnschleife ein. Wechseln Sie im Konfigurationsbereich der Funktion in den JavaScript Bereich <span style="color: #4393e9;">❸</span> und geben Sie dort folgende Bedingung ein:</p>
<p style="text-align: center;"><span style="color: #4393e9;">❹</span> <strong>$StopRequested</strong> == false</p>
<p>Das bedeutet, diese Schleife wird ständig wiederholt, so lange die Bedingung erfüllt ist, d.h. so lange die globale Variable <strong>$StopRequested</strong> den Wert false hat. Die Variable <strong>$StopRequested</strong> ist eine globale Scriptvariable die immer vorhanden ist. Nach dem Start des Scripts hat diese Variable stets den Wert false. Erst wenn der Anwender die Schaltfläche <strong>Request Script Stop</strong> <span style="color: #4393e9;">❶</span> drückt, wird der Wert der Variable auf true gesetzt.</p>
<p><img decoding="async" class="aligncenter wp-image-2414 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_ConditionalLoop.png" alt="" width="817" height="251" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_ConditionalLoop.png 817w, https://cetoni.com/wp-content/uploads/Flowprofile_ConditionalLoop-300x92.png 300w, https://cetoni.com/wp-content/uploads/Flowprofile_ConditionalLoop-768x236.png 768w" sizes="(max-width: 817px) 100vw, 817px" /></p>
<p>Jetzt können Sie die Sägezahnschleife in den Conditional Loop einfügen. Klicken Sie dafür die Zählschleife (<strong>Counting Loop</strong>) <span style="color: #4393e9;">❺</span> an und ziehen Sie diese auf den <strong>Conditional Loop</strong> <span style="color: #4393e9;">❷</span>. Die Zählschleife wird damit in den Conditional Loop eingefügt. Starten Sie das Script nun erneut. Die Erzeugung des Sägezahns wird jetzt so lange wiederholt, bis Sie die Schaltfläche <strong>Request Script Stop</strong><span style="color: #4393e9;"> ❶</span> drücken.</p>
<p>Drücken Sie nach einigen Zyklen die <strong>Request Script Stop</strong> <span style="color: #4393e9;">❶</span> Schaltfläche um das Script zu beenden. Wenn das Script fehlerfrei durchgelaufen ist, sollten Sie im grafischen Logger das folgende Bild sehen.</p>
<p><img decoding="async" class="aligncenter wp-image-2432 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_GraphLog.png" alt="" width="963" height="258" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_GraphLog.png 963w, https://cetoni.com/wp-content/uploads/Flowprofile_GraphLog-300x80.png 300w, https://cetoni.com/wp-content/uploads/Flowprofile_GraphLog-768x206.png 768w" sizes="(max-width: 963px) 100vw, 963px" /></p>
<p>Damit ist Ihr Flussprofil Script fast fertig. Um die Übersichtlichkeit noch ein wenig zu verbessern, können Sie die Variablen, die Sie am Anfang des Scriptes deklariert haben, in einer Variablengruppe (<strong>Variable Declarations</strong>) zusammenfassen. Fügen Sie dafür eine <strong>Variable Declarations</strong> Funktion als erste Funktion in das Script ein. Markieren Sie anschließend alle Variablen. Klicken Sie dafür die erste <strong>Create Variable</strong> Funktion an und klicken Sie dann mit gedrückter Umschalttaste auf die letzte <strong>Create Variable</strong> Funktion &#8211; so wie Sie auch mehrere Dateien im Dateiexplorer markieren würden.</p>
<p>Anschließend können Sie alle markierten Variablen mit der Maus in die Variablengruppe verschieben. Damit haben Sie die Variablen gruppiert und die Übersichtlichkeit und Lesbarkeit des Scripts verbessert. Außerdem ist es nun leichter, diese Gruppe von Variablen an eine andere Position zu verschieben. Ihr Script sollte nun so aussehen:</p>
<p><img decoding="async" class="aligncenter wp-image-2422 size-full" src="https://cetoni.de/wp-content/uploads/Flowprofile_FinalSawtoothScript-1.png" alt="" width="536" height="526" srcset="https://cetoni.com/wp-content/uploads/Flowprofile_FinalSawtoothScript-1.png 536w, https://cetoni.com/wp-content/uploads/Flowprofile_FinalSawtoothScript-1-300x294.png 300w" sizes="(max-width: 536px) 100vw, 536px" /></p>
<p>Im zweiten Teil des Tutorials erfahren Sie, wie Sie das Script so ändern, dass mit Hilfe von JavaScript Funktionen sinusförmige Flussprofile erzeugt werden können. Zusätzlich erweitern Sie das Script um eine Initialisierungsroutine, welche die Spritzen aufzieht und lernen, wie Sie berechnete Werte mit Hilfe von virtuellen I/O Kanälen im grafischen Logger aufzeichnen können. Abschließend erhalten Sie dann noch Tipps, welche Möglichkeiten es gibt, die Lesbarkeit Ihres Scriptes zu verbessern und Ihr Script zu dokumentieren.</p>
<p>Das QmixElements Projekt mit simulierten Geräten und dem im Tutorial erstellten Script können Sie <a href="https://cetoni.de/downloads/Flowprofiles.qpr" target="_blank" rel="noopener">hier herunterladen</a>.</p>
</div>




			</div> 
		</div>
	</div> 
</div></div>
<p>Der Beitrag <a href="https://cetoni.com/de/tutorial-flussprofilgenerierung-mit-qmixelements-teil-1/">Tutorial Flussprofilgenerierung mit QmixElements (CETONI Elements)- Teil 1</a> erschien zuerst auf <a href="https://cetoni.com/de/">CETONI GmbH</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
