<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kdsachse</id>
	<title>RadioWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kdsachse"/>
	<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Spezial:Beitr%C3%A4ge/Kdsachse"/>
	<updated>2026-04-25T13:08:22Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Aktuelle_Ereignisse&amp;diff=2926</id>
		<title>Aktuelle Ereignisse</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Aktuelle_Ereignisse&amp;diff=2926"/>
		<updated>2011-10-18T18:43:08Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Ab Revisionsphase im Sommer/Herbst 2009&#039;&#039;&#039;&#039;&#039; hgz, and, uku, kds &lt;br /&gt;
*Diese Seite gilt zukünftig als Logbuch anstelle der Papierform &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |&#039;&#039;&#039;2009&#039;&#039;&#039;&lt;br /&gt;
 |colspan=7 |&lt;br /&gt;
|[[ August 09|8 ]]&lt;br /&gt;
 |[[ September 09|9 ]]&lt;br /&gt;
 |[[ Oktober 09|10 ]]&lt;br /&gt;
 |[[November 09|11 ]]&lt;br /&gt;
 |[[Dezember 09|12]]&lt;br /&gt;
 |&#039;&#039;&#039;2010&#039;&#039;&#039; &lt;br /&gt;
 |[[Januar 10|1]]&lt;br /&gt;
 |[[Februar 10|2]]&lt;br /&gt;
 |[[März 10|3]]&lt;br /&gt;
 |[[April 10|4]]&lt;br /&gt;
 |[[Mai 10|5]]&lt;br /&gt;
 |[[Juni 10|6]]&lt;br /&gt;
 |[[Juli 10|7]]&lt;br /&gt;
 |[[August 10|8]]&lt;br /&gt;
 |[[September 10|9]]&lt;br /&gt;
 |[[Oktober 10|10]]&lt;br /&gt;
 |[[November 10|11]]&lt;br /&gt;
 |[[Dezember 10|12]]&lt;br /&gt;
 |&#039;&#039;&#039;2011&#039;&#039;&#039; &lt;br /&gt;
 |[[Januar 11|1]]&lt;br /&gt;
 |[[Februar 11|2]]&lt;br /&gt;
 |[[März 11|3]]&lt;br /&gt;
 |[[April 11|4]]&lt;br /&gt;
 |Mai 11|5&lt;br /&gt;
 |[[Juni 11|6]]&lt;br /&gt;
 |[[Juli 11|7]]&lt;br /&gt;
 |[[August 11|8]]&lt;br /&gt;
 |[[September 11|9]]&lt;br /&gt;
 |Oktober 11|10&lt;br /&gt;
 |November 11|11&lt;br /&gt;
 |Dezember 11|12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Oktober 11&#039;&#039;&#039;&lt;br /&gt;
Zustand des RT ist undefiniert rt_ref ist nicht anwendbar&amp;lt;br&amp;gt;&lt;br /&gt;
@Andreas kannst Du etwas dazu sagen ?&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Benutzer_Diskussion:Kdsachse&amp;diff=2925</id>
		<title>Benutzer Diskussion:Kdsachse</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Benutzer_Diskussion:Kdsachse&amp;diff=2925"/>
		<updated>2011-10-18T18:21:35Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: Drehgeber&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Hallo Kollegen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Am 15.10.2011 eröffnete mir Andreas, das die Drehgeber wohl kein langes Leben mehr haben werden.&lt;br /&gt;
&lt;br /&gt;
Aus diesem Grunde zitiere ich hier mal aus einer eMail von Dr. Michael Heber:&lt;br /&gt;
&lt;br /&gt;
======================================================================================================================================================================&lt;br /&gt;
www.siko.de&lt;br /&gt;
Winkelkodierer WV36M/SSI&lt;br /&gt;
Winkelkodierer WV36M/CAN&lt;br /&gt;
Magnetisch absoluter Multiturn Drehgeber WV36M/SSI - batterielos, mit SSI Schnittstelle. Der WV36M/SSI ist dank doppelter Kugellager, kleiner Bauform und verschleißfreiem magnetischen Messprinzip auch für Positionieraufgaben in mechanisch anspruchvollen Umgebungen bestens geeignet.&lt;br /&gt;
 &lt;br /&gt;
Merkmale&lt;br /&gt;
■kompakte Bauform (36.5 mm Durchmesser)&lt;br /&gt;
■Schnittstelle SSI&lt;br /&gt;
■Schutzart IP64&lt;br /&gt;
■Multiturn ohne Batterie&lt;br /&gt;
■Doppelte Kugellager&lt;br /&gt;
■13 bit Multiturn (8192 Umdrehungen)&lt;br /&gt;
■12 bit Singleturn (4096 Schritte)&lt;br /&gt;
 &lt;br /&gt;
Absolutgeber AV58M&lt;br /&gt;
Der Drehgeber AV58M mit &amp;quot;Teach-in-Funktion&amp;quot; ist ein magnetischer Absolutwertgeber mit analogem Ausgang. Der Drehgeber kann über zwei an der Rückseite befindlichen Taster sowie über zwei externe Eingänge, vom Benutzer selbst, auf den gewünschten Messbereich eingestellt werden. Das Gerät verfügt über eine batterielose Multiturntechnologie.&lt;br /&gt;
Merkmale&lt;br /&gt;
■Absoluter Analoggeber&lt;br /&gt;
■Auflösung 4096&lt;br /&gt;
■bis -40°C Arbeitstemperatur&lt;br /&gt;
■Spannungs- (0-10V) oder Stromausgang (4-20mA)&lt;br /&gt;
■programmierbarer Messbereich über teach-in Funktion mit Tastenfunktion oder externe Eingänge&lt;br /&gt;
 &lt;br /&gt;
 http://www.rls.si/default.asp?prod=encoders&amp;amp;lang=german&amp;amp;gclid=CIizkZ3H5aoCFRk03wodd3Jk9w&lt;br /&gt;
 &lt;br /&gt;
 http://www.baumer.com/motion/absolute-drehgeber.html?gclid=CI-Ih5vH5aoCFRsu3wody2Lcbw&lt;br /&gt;
 &lt;br /&gt;
 http://www.baumer.com/sensor/magnetische-sensoren/magnetische-winkel-messende-sensoren.html&lt;br /&gt;
&lt;br /&gt;
======================================================================================================================================================================&lt;br /&gt;
&lt;br /&gt;
Grüße&lt;br /&gt;
&lt;br /&gt;
KDS&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Aktuelle_Ereignisse&amp;diff=2799</id>
		<title>Aktuelle Ereignisse</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Aktuelle_Ereignisse&amp;diff=2799"/>
		<updated>2011-04-06T21:13:23Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: /* Sprünge an Geber Azimut 6. April */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Ab Revisionsphase im Sommer/Herbst 2009&#039;&#039;&#039;&#039;&#039; hgz, and, uku &lt;br /&gt;
*Diese Seite gilt zukünftig als Logbuch anstelle der Papierform &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |&#039;&#039;&#039;2009&#039;&#039;&#039;&lt;br /&gt;
 |colspan=7 |&lt;br /&gt;
|[[ August 09|8 ]]&lt;br /&gt;
 |[[ September 09|9 ]]&lt;br /&gt;
 |[[ Oktober 09|10 ]]&lt;br /&gt;
 |[[November 09|11 ]]&lt;br /&gt;
 |[[Dezember 09|12]]&lt;br /&gt;
 |&#039;&#039;&#039;2010&#039;&#039;&#039; &lt;br /&gt;
 |[[Januar 10|1]]&lt;br /&gt;
 |[[Februar 10|2]]&lt;br /&gt;
 |[[März 10|3]]&lt;br /&gt;
 |[[April 10|4]]&lt;br /&gt;
 |[[Mai 10|5]]&lt;br /&gt;
 |[[Juni 10|6]]&lt;br /&gt;
 |[[Juli 10|7]]&lt;br /&gt;
 |[[August 10|8]]&lt;br /&gt;
 |[[September 10|9]]&lt;br /&gt;
 |[[Oktober 10|10]]&lt;br /&gt;
 |[[November 10|11]]&lt;br /&gt;
 |[[Dezember 10|12]]&lt;br /&gt;
 |&#039;&#039;&#039;2011&#039;&#039;&#039; &lt;br /&gt;
 |[[Januar 11|1]]&lt;br /&gt;
 |[[Februar 11|2]]&lt;br /&gt;
 |[[März 11|3]]&lt;br /&gt;
 |April 11|4&lt;br /&gt;
 |Mai 11|5&lt;br /&gt;
 |Juni 11|6&lt;br /&gt;
 |Juli 11|7&lt;br /&gt;
 |August 11|8&lt;br /&gt;
 |September 11|9&lt;br /&gt;
 |Oktober 11|10&lt;br /&gt;
 |November 11|11&lt;br /&gt;
 |Dezember 11|12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;April 11&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==3./4.April==&lt;br /&gt;
&lt;br /&gt;
* Andreas hat den VV wieder mit den korrekten Spulen versehen und in funktionsfähigen Zustand gebracht. Feed sollte jetzt wieder voll einsatzfähig sein.&lt;br /&gt;
* Die Referenzumschaltung wird ab jetzt von einem FTDI-USB-Controller erledigt. Die Software (Datataker) wurde entsprechend angepasst und ins svn-repo eingecheckt. Damit alle Benutzer Zugriffsrechte für das USB-Device haben, wurde eine entsprechende udev-rule definiert (siehe Dokumentation im Sourcecode in radio/daq/atmel/datataker.cpp).&lt;br /&gt;
* Firmware für den ADC z.Zt. geflasht mit der aktuellen Version aus dem Repo. Diese benutzt einen schnelleren Moving-Average-Algorithmus, arbeitet jedoch bislang noch fehlerhaft (Stufen in den Messdaten in Vielfachen von 16 counts). Messungen sollten jedoch dessen ungeachtet bis zur Korrektur der Firmware trotzdem gemacht werden.&lt;br /&gt;
* Andreas hat die Kontakte des El-Motors gereinigt und festgezogen. Seither sind keine Aussetzer beim Fahren in El mehr beobachtet worden.&lt;br /&gt;
* Messungen mit aktueller Konfiguration hocherwünscht (Sonne, Horizont und Radioquellen)!&lt;br /&gt;
&lt;br /&gt;
Nachtrag: erneute massive Verbindungsabbrüche beim Fahren in El beobachtet. V.a. beim Parken ist der Kontrollverlust reproduzierbar. Das dann in allen Achsen unkontrolliert fahrende RT konnte nur durch Notabschaltung des Radioiden gestoppt werden. Dadurch ist das RT momentan in der Endlage blockiert und muß manuell aus dieser bewegt werden. (hgz) -Nachtrag zum Nachtrag: Nach Start Radioid aus Endlage Nord remote gefahren --[[Benutzer:Ulli|Ulli]] 07:54, 4. Apr. 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sonnentransit 6. April ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Bild:Sun transit06042010.png|Transit mit Seitenkeulen, Hub nach Umbau deutlich verbessert&lt;br /&gt;
Bild:Sum transit06042010.png|Zur Wiederholgenauigkeit einer Messung am gleichen Tag, Referenzposition angepasst&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprünge an Geber Azimut 6. April ==&lt;br /&gt;
&lt;br /&gt;
Beim Fahren im Bereich um 180° Az (nicht aber an dieser Grenze) springt der Geber nicht nachvollziehbar auf Nullposition. Fahrversuche eingestellt. Neustart Radioid nicht hilfreich.&lt;br /&gt;
&lt;br /&gt;
Ergänzung von KDS:&lt;br /&gt;
&lt;br /&gt;
der Bewegungszustand des RT (Videostream) und die Ausgabe von rt_ref vermitteln den Eindruck, &#039;&#039;&#039;das RT sei vom radioid getrennt&#039;&#039;&#039;. Habe Andreas via skype gebeten, dies zu prüfen.&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Aktuelle_Ereignisse&amp;diff=2780</id>
		<title>Aktuelle Ereignisse</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Aktuelle_Ereignisse&amp;diff=2780"/>
		<updated>2011-03-29T10:04:44Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: /* März 23 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Ab Revisionsphase im Sommer/Herbst 2009&#039;&#039;&#039;&#039;&#039; hgz, and, uku &lt;br /&gt;
*Diese Seite gilt zukünftig als Logbuch anstelle der Papierform &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |&#039;&#039;&#039;2009&#039;&#039;&#039;&lt;br /&gt;
 |colspan=7 |&lt;br /&gt;
|[[ August 09|8 ]]&lt;br /&gt;
 |[[ September 09|9 ]]&lt;br /&gt;
 |[[ Oktober 09|10 ]]&lt;br /&gt;
 |[[November 09|11 ]]&lt;br /&gt;
 |[[Dezember 09|12]]&lt;br /&gt;
 |&#039;&#039;&#039;2010&#039;&#039;&#039; &lt;br /&gt;
 |[[Januar 10|1]]&lt;br /&gt;
 |[[Februar 10|2]]&lt;br /&gt;
 |[[März 10|3]]&lt;br /&gt;
 |[[April 10|4]]&lt;br /&gt;
 |[[Mai 10|5]]&lt;br /&gt;
 |[[Juni 10|6]]&lt;br /&gt;
 |[[Juli 10|7]]&lt;br /&gt;
 |[[August 10|8]]&lt;br /&gt;
 |[[September 10|9]]&lt;br /&gt;
 |[[Oktober 10|10]]&lt;br /&gt;
 |[[November 10|11]]&lt;br /&gt;
 |[[Dezember 10|12]]&lt;br /&gt;
 |&#039;&#039;&#039;2011&#039;&#039;&#039; &lt;br /&gt;
 |[[Januar 11|1]]&lt;br /&gt;
 |[[Februar 11|2]]&lt;br /&gt;
 |[[März 11|3]]&lt;br /&gt;
 |April 11|4&lt;br /&gt;
 |Mai 11|5&lt;br /&gt;
 |Juni 11|6&lt;br /&gt;
 |Juli 11|7&lt;br /&gt;
 |August 11|8&lt;br /&gt;
 |September 11|9&lt;br /&gt;
 |Oktober 11|10&lt;br /&gt;
 |November 11|11&lt;br /&gt;
 |Dezember 11|12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== März 11 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14. März&#039;&#039;&#039; Verkabelungsarbeiten am Radioteleskop. LX200 daher von ratsche -d nicht sichtbar. (KDS 14.3.2011 12:02) Bitte Ulli , Andreas und Hans-Georg, wenn Ihr fertig seid, dann tragt das hier ein. Grüße KDS&lt;br /&gt;
&lt;br /&gt;
== März 23 ==&lt;br /&gt;
&lt;br /&gt;
Beim Versuch endlich mal das nach den Kabelverlegearbeiten nötigen Az-Endlagencheck (das RT in beide Az-Endlagen fahren und kontrollieren, ob die Kabel im RT-Fuss irgendwo klemmen) sind mir vor Ort einige Dinge übel aufgestossen. &lt;br /&gt;
1. Beim Frühjahrsputz im Vereinsraum hat jemand den Radioiden mitsamt Computertisch so kräftig gegen den Kabelkanal an der Wand geschoben, dass mindestens das DVI-Monitorkabel jetzt zerknickt ist und eventuell die Grafikkarte auch Schaden genommen hat. Zumindest kommt nur noch Flimmermüll auf dem Monitor. Wenn der lokale Radioidarbeitsplatz wieder benutzt werden soll, muss ein neues DVI-Kabel besorgt werden. Kostenpunkt ca. 10€&lt;br /&gt;
&lt;br /&gt;
2. Werden immer mehr Netzkabel und Verteilerkabel an die Steckdose des Radioden gesteckt. Irgendwann wirds mindestens unübersichtlich, wenn nicht gar elektrisch bedenklich. Bitte immer drauf achten und fremdes Gerassel (zBsp Canon-Akkuladegeräte und Telefonstromversorgung) einfach abziehen.&lt;br /&gt;
&lt;br /&gt;
3. Irgendwelche Kids haben einige Hände voll Sand/Split in die RT-Schüssel geworfen, wer Lust hat kann ja mal die Webcamaufzeichnungen durchgehen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Verlegen des neuen Feed-Spannungsversorgungskabel in den Kabelkanal ist leider das RS485-Kabel etwas zurück in den Kanal gerutscht und lässt sich nicht mehr auf die ursprüngliche Länge herausziehen. Ich habe es nun provisorisch angestoppelt, so kann das RT wieder bis in beide Az-Endlagen ohne Kabelabriss fahren. Im Feed ist momentan keine Empfangstechnik eingebaut, da noch Lötarbeiten für die neue Spannungsversorgung nötig sind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und ich habe mal das Prellen des Anemometers aufgenommen:   [[file:Prellen1.bmp|100px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== März 25 ==&lt;br /&gt;
&lt;br /&gt;
Ergänzug von KDS: Am 25.3.2011 habe ich festgestellt, dass der radioid nicht per Netzwerk erreichbar ist. Eine Überprüfung am 26.3.2011 durch Markus ergab, daß möglicherweise das Mainboard des radioid tot ist. Auffällig sind hier nahezu gleichzeitige Ausfälle anderer Sensoren die in der Nacht am 24/25.3.2011 auftraten. Markus hat dankenswerterweise ein neues MB herausgegeben (Anbau, Tisch des radioid). Ich selbst möchte den Austausch des MB nicht vornehmen, da mir hierfür die notwendige Routine verlorengegangen ist , dies mit vetretbarem Aufwand zu erledigen. Daher meine Bitte an Andreas, dies zu prüfen und ggf. das MB zu tauschen. Danke schon voraus an Andreas&lt;br /&gt;
&lt;br /&gt;
KDS&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=M%C3%A4rz_11&amp;diff=2774</id>
		<title>März 11</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=M%C3%A4rz_11&amp;diff=2774"/>
		<updated>2011-03-15T11:25:41Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== März 11 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14. März&#039;&#039;&#039; Verkabelungsarbeiten am Radioteleskop. LX200 daher von ratsched nicht sichtbar. (KDS 14.3.2011 12:02)&lt;br /&gt;
Bitte Ulli , Andreas und Hans-Georg, wenn Ihr fertig seid, dann tragt das hier ein. Grüße KDS&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=M%C3%A4rz_11&amp;diff=2773</id>
		<title>März 11</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=M%C3%A4rz_11&amp;diff=2773"/>
		<updated>2011-03-15T11:08:04Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== März 11 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14. März&#039;&#039;&#039; Verkabelungsarbeiten am Radioteleskop. LX200 daher von ratsched nicht sichtbar. (KDS 14.3.2011 12:02)&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Aktuelle_Ereignisse&amp;diff=2772</id>
		<title>Aktuelle Ereignisse</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Aktuelle_Ereignisse&amp;diff=2772"/>
		<updated>2011-03-15T11:07:33Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Ab Revisionsphase im Sommer/Herbst 2009&#039;&#039;&#039;&#039;&#039; hgz, and, uku &lt;br /&gt;
*Diese Seite gilt zukünftig als Logbuch anstelle der Papierform &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |&#039;&#039;&#039;2009&#039;&#039;&#039;&lt;br /&gt;
 |colspan=7 |&lt;br /&gt;
|[[ August 09|8 ]]&lt;br /&gt;
 |[[ September 09|9 ]]&lt;br /&gt;
 |[[ Oktober 09|10 ]]&lt;br /&gt;
 |[[November 09|11 ]]&lt;br /&gt;
 |[[Dezember 09|12]]&lt;br /&gt;
 |&#039;&#039;&#039;2010&#039;&#039;&#039; &lt;br /&gt;
 |[[Januar 10|1]]&lt;br /&gt;
 |[[Februar 10|2]]&lt;br /&gt;
 |[[März 10|3]]&lt;br /&gt;
 |[[April 10|4]]&lt;br /&gt;
 |[[Mai 10|5]]&lt;br /&gt;
 |[[Juni 10|6]]&lt;br /&gt;
 |[[Juli 10|7]]&lt;br /&gt;
 |[[August 10|8]]&lt;br /&gt;
 |[[September 10|9]]&lt;br /&gt;
 |[[Oktober 10|10]]&lt;br /&gt;
 |[[November 10|11]]&lt;br /&gt;
 |[[Dezember 10|12]]&lt;br /&gt;
 |&#039;&#039;&#039;2011&#039;&#039;&#039; &lt;br /&gt;
 |[[Januar 11|1]]&lt;br /&gt;
 |[[Februar 11|2]]&lt;br /&gt;
 |[[März 11|3]]&lt;br /&gt;
 |April 11|4&lt;br /&gt;
 |Mai 11|5&lt;br /&gt;
 |Juni 11|6&lt;br /&gt;
 |Juli 11|7&lt;br /&gt;
 |August 11|8&lt;br /&gt;
 |September 11|9&lt;br /&gt;
 |Oktober 11|10&lt;br /&gt;
 |November 11|11&lt;br /&gt;
 |Dezember 11|12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;April 11&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Neue_seite_erzwingen&amp;diff=2771</id>
		<title>Neue seite erzwingen</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Neue_seite_erzwingen&amp;diff=2771"/>
		<updated>2011-03-15T11:04:00Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: hat „Neue seite erzwingen“ nach „März 11“ verschoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[März 11]]&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=M%C3%A4rz_11&amp;diff=2770</id>
		<title>März 11</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=M%C3%A4rz_11&amp;diff=2770"/>
		<updated>2011-03-15T11:04:00Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: hat „Neue seite erzwingen“ nach „März 11“ verschoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== März 11 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14. März&#039;&#039;&#039; Verkabelungsarbeiten am Radioteleskop. LX200 daher vopn ratsched nicht sichtbar. (KDS 14.3.2011 12:02)&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=M%C3%A4rz_11&amp;diff=2769</id>
		<title>März 11</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=M%C3%A4rz_11&amp;diff=2769"/>
		<updated>2011-03-15T11:02:21Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: Die Seite wurde neu angelegt: „== März 11 ==  &amp;#039;&amp;#039;&amp;#039;14. März&amp;#039;&amp;#039;&amp;#039; Verkabelungsarbeiten am Radioteleskop. LX200 daher vopn ratsched nicht sichtbar. (KDS 14.3.2011 12:02)“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== März 11 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;14. März&#039;&#039;&#039; Verkabelungsarbeiten am Radioteleskop. LX200 daher vopn ratsched nicht sichtbar. (KDS 14.3.2011 12:02)&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Anleitungen/Tutorials&amp;diff=2746</id>
		<title>Anleitungen/Tutorials</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Anleitungen/Tutorials&amp;diff=2746"/>
		<updated>2011-03-02T19:40:03Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: /* Server-Prozess */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Benutzung der Datenaquisitions-Tools =&lt;br /&gt;
&lt;br /&gt;
Beispiel für Aufruf datataker:&lt;br /&gt;
  bin/datataker /dev/ttyS5&lt;br /&gt;
&lt;br /&gt;
Obige Zeile verbindet sich mit dem ADC und gibt die Daten mit Timestamp auf &#039;&#039;stdout&#039;&#039; aus.&lt;br /&gt;
&lt;br /&gt;
Um den Zusammenhang zwischen gemessenen Intensitäten und Koordinaten auszugeben ist&lt;br /&gt;
&lt;br /&gt;
  macros/acquire&lt;br /&gt;
&lt;br /&gt;
aufzurufen. Dieses Script gibt in dieser Reihenfolge folgende Werte auf &#039;&#039;stdout&#039;&#039; aus:&lt;br /&gt;
timestamp ADC-Wert Azimut Höhe Stunde Deklination Controllertemperatur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  macros/acquire_ref&lt;br /&gt;
&lt;br /&gt;
erweitert die Ausgabe von macros/acquire um eine weitere Spalte&lt;br /&gt;
&lt;br /&gt;
per default wird hier 19 mal der feed gemessen und danach 1 mal den Referenzkanal&lt;br /&gt;
Es gibt hier noch 3 wichtige (Stellungs)Parameter&lt;br /&gt;
*1. Averaging Anzahl default:100&lt;br /&gt;
*2. Verhältnis Signalwerte Referenzwerte default :20 heisst 19 Signal 1 Referenz&lt;br /&gt;
*3. Gesamtzahl der auszugebenden Werte default :-1 (endlos)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Steuerung von Messungen =&lt;br /&gt;
&lt;br /&gt;
== Steuerung über bash-Skripte ==&lt;br /&gt;
&lt;br /&gt;
Das ist die flexibelste Art, Messungen auszuführen. Für die verschiedenen Aufgaben stehen im repo-tree im Unterverzeichnis [https://rm-radeberg.dyndns.org/trac/browser/trunk/macros macros/] (zusätzlich zu den reinen DAQ-Skripten, s.o.) folgende Steuerskripte zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;rt_scan_hor&#039;&#039;&#039; ... Messung in äquidistantem Grid in Horizontalkoordinaten (mind. 5 Parameter benötigt, s. Usage-Hilfe bei Aufruf ohne Parameter)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;rt_scan_equ&#039;&#039;&#039; ... Messung in äquidistantem Grid in Äquatorialkoordinaten (mind. 5 Parameter benötigt, s. Usage-Hilfe bei Aufruf ohne Parameter)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Steuerung über Task Scheduler &amp;quot;RATSCHE&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Das sollte ab Januar 2011 die verbindliche (einzige) Möglichkeit von Messungen sein, da hier Kollisionen ausgeschlossen sind.&lt;br /&gt;
&lt;br /&gt;
=== Server-Prozess ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Radioiden muß eine Instanz von &#039;&#039;&#039;ratsche&#039;&#039;&#039; im Servermodus laufen, der Daemon-Prozess ist folgendermassen zu starten:&lt;br /&gt;
  ratsche -d -x /home/hgz/svnlocal/hgz/macros&lt;br /&gt;
  &#039;&#039;&#039;(Im Moment ist offenbar das hier angegebene Verzeichnis sowie der aktuell laufende Serverprozess defekt !)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Argument zum Parameter -x ist der Ort der ausführbaren Makros, wie z.b. &#039;&#039;&#039;rt_scan_equ&#039;&#039;&#039;, es muß also nicht unbedingt genau obige Zeile sein, wichtig ist nur das Macro-Verzeichnis irgendeiner lokalen Kopie des SVN-Repos (im obigen Fall meine lokale Arbeitskopie) anzugeben.&lt;br /&gt;
&lt;br /&gt;
In Zukunft (irgendwann Jan-März) werde ich ein Start-Skript für den Radioiden schreiben, das automatisch den ratsche-daemon startet, dann haben wir eine Sorge weniger. Bis dahin bitte nach Neustart Radioid obige Zeile einmalig ausführen (wenn der Daemon bereits läuft wird jedoch keine zweite Instanz gestartet, der Aufruf gibt dann eine entsprechende Info-Meldung aus).&lt;br /&gt;
&lt;br /&gt;
Eine Bemerkung von KDS: Bitte überprüft mit:&lt;br /&gt;
  ps ax | grep -i ratsche&lt;br /&gt;
ob eine ratsche -d läuft und startet ggf. o.a. Kommandozeile den ratsche Server.&lt;br /&gt;
&lt;br /&gt;
Im Moment baut Andreas dieses Kommando in init.d ein&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Serverprozess schreibt mehr oder weniger detaillierte Ausgaben (je nach beim Start angegebenen Verbosity-Level) in das System-Logfile. Diese können von allen Benutzern mit folgendem Befehl begutachtet werden:&lt;br /&gt;
 tail -f -n 1000 /var/log/messages | grep ratsche&lt;br /&gt;
Der Output sieht dann beispielsweise so aus:&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: starting RT task scheduler server&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: using message queue 0x0000000a&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: using executable path /home/hgz/svnlocal/hgz/macros/&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: found 1 zombie message(s) in queue...deleting&lt;br /&gt;
 Jan 23 11:50:00 Radioid ratsche[18528]: starting EquScan task with id=0 (pid 20342)&lt;br /&gt;
&lt;br /&gt;
=== Benutzung von &#039;&#039;&#039;RATSCHE&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Zum Zugriff auf den Taskmanager gibt es das systemweit bekannte tool &#039;&#039;&#039;ratsche&#039;&#039;&#039; (Option -h für Kommandozeilen-Hilfe und Auflistung aller verfügbarer Optionen). Hier nur eine kurze Beschreibung der wichtigsten Optionen:&lt;br /&gt;
&lt;br /&gt;
  ratsche -l&lt;br /&gt;
&lt;br /&gt;
listet alle definierten Tasks auf. Die Bedeutung der einzelnen Werte ist aus dem ebenfalls ausgegebenen Header ersichtlich.&lt;br /&gt;
&lt;br /&gt;
  ratsche -a &amp;lt;tasklist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fügt die in der datei &amp;lt;tasklist&amp;gt; definierten Tasks hinzu. Eine Beispieldatei ist zu finden im SVN-Repo in [https://rm-radeberg.dyndns.org/trac/browser/trunk/macros/dummy_task macros/dummy_task]. Am besten man legt sich eine lokale Kopie dieser Datei an, so dass es bei Veränderung dieser nicht zu SVN-Konflikten kommt, z.B. mit&lt;br /&gt;
  cp dummy_task tasklist&lt;br /&gt;
Die Datei &#039;&#039;&#039;tasklist&#039;&#039;&#039; ist dann beliebig editierbar. für alle möglichen Task-Typen ist mind. ein Beispiel angegeben. Wenn der Task von &#039;&#039;&#039;ratsche&#039;&#039;&#039; übernommen werden soll, muß natürlich die entsprechende Zeile auskommentiert sein, i.e. das führende &amp;quot;#&amp;quot; zu entfernen. Das genaue Spaltenformat ist in der Beispieldatei erläutert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Momentan werden die Werte von Priority und Alt-Period noch nicht berücksichtigt. Wird in Zukunft noch implementiert (ist auf meiner ToDo-Liste irgendwo mittendrin ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Benutzung des Subversion (SVN) Repositories =&lt;br /&gt;
&lt;br /&gt;
seit Anfang März 2010 lagert das Software-Repository auf Roberts Server. Eine Übersicht über die Struktur des Repositorys ist erreichbar über &lt;br /&gt;
file:///.../svnlocal/hgzlib/html/index.html in einem Browser, aber nur wenn man vorher die doxygen-Dokumentation mittels &#039;&#039;doxygen&#039;&#039; in diesem Verzeichnis erstellt hat.&lt;br /&gt;
Der Code kann auch durch ein [http://trac.edgewall.org/ Trac]-Webinterface angeschaut werden: &lt;br /&gt;
&lt;br /&gt;
[https://rm-radeberg.dyndns.org/trac/browser/trunk https://rm-radeberg.dyndns.org/trac/browser/trunk]&lt;br /&gt;
&lt;br /&gt;
(login und pw sind identisch mit dem Wiki-account)&lt;br /&gt;
&lt;br /&gt;
Zum Auschecken der Repos in eine lokale Arbeitskopie kann entweder obige url benutzt werden, oder aber folgende Quelle, die auch Änderungen im Repository zuläßt (der https-Kanal ist read only, bzw. sollte es sein):&lt;br /&gt;
&lt;br /&gt;
   svn co svn+ssh://svn@rm-radeberg.dyndns.org/var/svn/hgz/trunk ~/svnlocal&lt;br /&gt;
&lt;br /&gt;
Passwort ist bei [[Benutzer:Hgz|Hgz]] oder [[Benutzer:penner|Penner]] zu erfragen. Zusätzlich kann man sich noch durch Schlüsselaustausch und einem ssh-Agenten das lästige Eintippen des Passworts sparen (siehe unten).&lt;br /&gt;
&lt;br /&gt;
Existiert bereits eine lokale Arbeitskopie (vom vorhergehenden Repository) ist es möglich, diesem die neue Adresse durch folgenden Befehl (im Hauptpfad der lok. Kopie, z.b. svnlocal/) mitzuteilen:&lt;br /&gt;
&lt;br /&gt;
   svn switch --relocate svn+ssh://svnuser@141.30.85.175/home/hgz/svnrep/trunk svn+ssh://svn@rm-radeberg.dyndns.org/var/svn/hgz/trunk&lt;br /&gt;
&lt;br /&gt;
der commit-befähigte user heißt also jetzt svn (pw wie schon erwähnt erfragen). Das soll sich mittelfristig ändern, nämlich dann wenn das Repo endgültig auf dem Perseiden beheimatet wird. Dann wird jeder, der etwas in das Repo einchecken möchte einen Account haben, so dass der Urheber eines Commits auch automatisch im Log erkennbar ist. Andererseits wird nicht jeder auf Perseid registrierte User Schreibzugriff auf das SVN-Repo besitzen. Eine Registrierung (in Form einer mündlichen Absichtserklärung) ist vorzugsweise bei penner und Rücksprache mit [[Benutzer:Hgz|Hgz]] vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
=== Zugriff auf das svn-Repository durch ssh-Schlüssel ===&lt;br /&gt;
&lt;br /&gt;
einen passwortlosen Zugriff auf das svn-Repository kann man durch Austausch eines vertraulichen Schlüssels erreichen. Dieser kann von [[Benutzer:Hgz|Hgz]] bezogen werden. Zum Aktivieren des Schlüssels (nehmen wir an, er heißt &#039;&#039;svnkey&#039;&#039;) sollte man ihn zuerst an einem geeigneten Ort, wie z.B. $(HOME)/.ssh deponieren. Danach kann er dem ssh-Agenten bekannt gemacht werden mit:&lt;br /&gt;
  ssh-add ~/.ssh/svnkey&lt;br /&gt;
Zum Kontrollieren, ob der Schlüssel geladen wurde, oder um sich die Liste bereits geladener Schlüssel anzusehen ist folgender Befehl nützlich:&lt;br /&gt;
  ssh-add -l&lt;br /&gt;
&lt;br /&gt;
Das bisher beschriebene Verfahren muß jedesmal wiederholt werden, wenn eine neue Konsole gestartet wird. Um den Schlüssel permanent in einer interaktiven Shell (das ist diejenige, die an dem Rechner gestartet wird, an dem man auch sitzt) bekannt zu machen, genügt es, obige Zeile in seine .bashrc (d.h. im eigenen Home-Verzeichnis) anzufügen, also&lt;br /&gt;
&lt;br /&gt;
  ...&lt;br /&gt;
  ssh-add ~/.ssh/svnkey&lt;br /&gt;
&lt;br /&gt;
dann sollte an einem Rechner, auf dem eine grafische Benutzeroberfläche läuft, keine Passwortabfrage mehr beim Zugriff auf das svn-Repo erscheinen.&lt;br /&gt;
&lt;br /&gt;
Anders verhält sich das bei entferntem Zugriff auf einen Rechner, z.b. über ssh-login. Dort wird standardmäßig eine Login-Shell gestartet (vgl. interaktive Shell, s.o.), die üblicherweise keine Instanz eines ssh-Agenten initiiert.&lt;br /&gt;
  &lt;br /&gt;
Hier gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
1.Möglichkeit (empfohlen): man installiert das paket keychain (sofern in den Distributionsquellen vorhanden) und überläßt diesem Programm dann das Starten des ssh-Agenten und Laden des Schlüssels. Dazu muß, analog zu obiger Vorgehensweise, in .profile oder in .bashrc in seinem Home-Verzeichnis (im Prinzip ist es egal, in welcher) nur der Aufruf von keychain mit dem Schlüssel als Argument erfolgen.&lt;br /&gt;
&lt;br /&gt;
2.Möglichkeit: man fügt folgende Zeilen an seine .profile an:&lt;br /&gt;
&lt;br /&gt;
 # start up ssh-agent&lt;br /&gt;
 SSH_ENV=&amp;quot;$HOME/.ssh/environment&amp;quot;&lt;br /&gt;
 function start_agent {&lt;br /&gt;
     echo &amp;quot;Initialising new SSH agent...&amp;quot;&lt;br /&gt;
     /usr/bin/ssh-agent | sed &#039;s/^echo/#echo/&#039; &amp;gt; &amp;quot;${SSH_ENV}&amp;quot;&lt;br /&gt;
     echo succeeded&lt;br /&gt;
     chmod 600 &amp;quot;${SSH_ENV}&amp;quot;&lt;br /&gt;
     . &amp;quot;${SSH_ENV}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
     /usr/bin/ssh-add ~/.ssh/svnkey;&lt;br /&gt;
 }&lt;br /&gt;
 # Source SSH settings, if applicable&lt;br /&gt;
 if [ -f &amp;quot;${SSH_ENV}&amp;quot; ]; then&lt;br /&gt;
     . &amp;quot;${SSH_ENV}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
     #ps ${SSH_AGENT_PID} doesn&#039;t work under cywgin&lt;br /&gt;
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ &amp;gt; /dev/null || {&lt;br /&gt;
         start_agent;&lt;br /&gt;
     }&lt;br /&gt;
 else&lt;br /&gt;
     start_agent;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist hier, dass der Schlüssel, welcher geladen werden soll, hier mit angegeben ist (9. Zeile). Der Name muß entsprechend dem tatsächlichen Namen des Schlüssels angepaßt werden.&lt;br /&gt;
In jeder zukünftig geöffneten Shell wird nun automatisch der Schlüssel geladen, so dass eine Passwortabfrage bei Zugriff auf svn umgangen (im positiven und auch sicheren Sinn) wird.&lt;br /&gt;
Um die Änderungen auch in der aktiven Shell anzuwenden, kann man außerdem noch den Inhalt der veränderten .profile erneut ausführen lassen mit:&lt;br /&gt;
  source ~/.profile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Remote-Mounten der Datenpartition durch sshfs =&lt;br /&gt;
&lt;br /&gt;
Zum Mounten von Ordnern fremder Rechner auf dem lokalen Computer über ssh ist das tool sshfs ganz hilfreich. Es setzt auf dem FUSE-Dateisystem-Konzept auf, der Benutzer muß daher Mitglied der Gruppe &amp;quot;fuse&amp;quot; auf dem lokalen Rechner sein.&lt;br /&gt;
&lt;br /&gt;
Als erstes sollte man sicherstellen, dass sshfs installiert ist, und es ggf. über den Paketmanager installieren, z.b.&lt;br /&gt;
 sudo zypper install sshfs&lt;br /&gt;
Danach noch (z.b. über YaST-&amp;gt;Benutzer und Gruppen) den eigenen Benutzer zur Gruppe &#039;&#039;fuse&#039;&#039; hinzufügen.&lt;br /&gt;
&lt;br /&gt;
nun kann man ein Verzeichnis anlegen, in das das Filesystem des entfernten Rechners hingemountet wird:&lt;br /&gt;
 mkdir sshfs/radioid&lt;br /&gt;
&lt;br /&gt;
das mounten geschieht über:&lt;br /&gt;
 sshfs radioid:/daten ~/sshfs/radioid/&lt;br /&gt;
&lt;br /&gt;
dann sollte der Ordner /daten des radioiden in dem Verzeichnis sshfs/radioid gemountet sein. Der Hostname (in diesem fall radioid:/) muß natürlich dem System bekannt sein. Am besten man benutzt den Alias wie auch beim ssh-Login. Dann muß man auch kein PW eingeben.&lt;br /&gt;
&lt;br /&gt;
Noch ein Tip: Ich habe das Mounten von nicht-lokalen Verzeichnissen komfortabel in &#039;&#039;gkrellm&#039;&#039; integriert. Dazu muß man einfach bei &#039;&#039;Configuration-&amp;gt;File System&#039;&#039; ein neues primäres FS hinzufügen (s. Screenshot).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Bild:Gkrellm sshfs mount.png|Konfiguration sshfs-mount in gkrellm&lt;br /&gt;
Bild:Gkrellm sshfs mount2.png|Einbindung des Radioiden über sshfs-mount in gkrellm&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Anleitungen/Tutorials&amp;diff=2743</id>
		<title>Anleitungen/Tutorials</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Anleitungen/Tutorials&amp;diff=2743"/>
		<updated>2011-02-16T21:58:28Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: /* Server-Prozess */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Benutzung der Datenaquisitions-Tools =&lt;br /&gt;
&lt;br /&gt;
Beispiel für Aufruf datataker:&lt;br /&gt;
  bin/datataker /dev/ttyS5&lt;br /&gt;
&lt;br /&gt;
Obige Zeile verbindet sich mit dem ADC und gibt die Daten mit Timestamp auf &#039;&#039;stdout&#039;&#039; aus.&lt;br /&gt;
&lt;br /&gt;
Um den Zusammenhang zwischen gemessenen Intensitäten und Koordinaten auszugeben ist&lt;br /&gt;
&lt;br /&gt;
  macros/acquire&lt;br /&gt;
&lt;br /&gt;
aufzurufen. Dieses Script gibt in dieser Reihenfolge folgende Werte auf &#039;&#039;stdout&#039;&#039; aus:&lt;br /&gt;
timestamp ADC-Wert Azimut Höhe Stunde Deklination Controllertemperatur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  macros/acquire_ref&lt;br /&gt;
&lt;br /&gt;
erweitert die Ausgabe von macros/acquire um eine weitere Spalte&lt;br /&gt;
&lt;br /&gt;
per default wird hier 19 mal der feed gemessen und danach 1 mal den Referenzkanal&lt;br /&gt;
Es gibt hier noch 3 wichtige (Stellungs)Parameter&lt;br /&gt;
*1. Averaging Anzahl default:100&lt;br /&gt;
*2. Verhältnis Signalwerte Referenzwerte default :20 heisst 19 Signal 1 Referenz&lt;br /&gt;
*3. Gesamtzahl der auszugebenden Werte default :-1 (endlos)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Steuerung von Messungen =&lt;br /&gt;
&lt;br /&gt;
== Steuerung über bash-Skripte ==&lt;br /&gt;
&lt;br /&gt;
Das ist die flexibelste Art, Messungen auszuführen. Für die verschiedenen Aufgaben stehen im repo-tree im Unterverzeichnis [https://rm-radeberg.dyndns.org/trac/browser/trunk/macros macros/] (zusätzlich zu den reinen DAQ-Skripten, s.o.) folgende Steuerskripte zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;rt_scan_hor&#039;&#039;&#039; ... Messung in äquidistantem Grid in Horizontalkoordinaten (mind. 5 Parameter benötigt, s. Usage-Hilfe bei Aufruf ohne Parameter)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;rt_scan_equ&#039;&#039;&#039; ... Messung in äquidistantem Grid in Äquatorialkoordinaten (mind. 5 Parameter benötigt, s. Usage-Hilfe bei Aufruf ohne Parameter)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Steuerung über Task Scheduler &amp;quot;RATSCHE&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Das sollte ab Januar 2011 die verbindliche (einzige) Möglichkeit von Messungen sein, da hier Kollisionen ausgeschlossen sind.&lt;br /&gt;
&lt;br /&gt;
=== Server-Prozess ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Radioiden muß eine Instanz von &#039;&#039;&#039;ratsche&#039;&#039;&#039; im Servermodus laufen, der Daemon-Prozess ist folgendermassen zu starten:&lt;br /&gt;
  ratsche -d -x /home/hgz/svnlocal/hgz/macros&lt;br /&gt;
Das Argument zum Parameter -x ist der Ort der ausführbaren Makros, wie z.b. &#039;&#039;&#039;rt_scan_equ&#039;&#039;&#039;, es muß also nicht unbedingt genau obige Zeile sein, wichtig ist nur das Macro-Verzeichnis irgendeiner lokalen Kopie des SVN-Repos (im obigen Fall meine lokale Arbeitskopie) anzugeben.&lt;br /&gt;
&lt;br /&gt;
In Zukunft (irgendwann Jan-März) werde ich ein Start-Skript für den Radioiden schreiben, das automatisch den ratsche-daemon startet, dann haben wir eine Sorge weniger. Bis dahin bitte nach Neustart Radioid obige Zeile einmalig ausführen (wenn der Daemon bereits läuft wird jedoch keine zweite Instanz gestartet, der Aufruf gibt dann eine entsprechende Info-Meldung aus).&lt;br /&gt;
&lt;br /&gt;
Eine Bemerkung von KDS: Bitte überprüft mit:&lt;br /&gt;
  ps ax | grep -i ratsche&lt;br /&gt;
ob eine ratsche -d läuft und startet ggf. o.a. Kommandozeile den ratsche Server.&lt;br /&gt;
&lt;br /&gt;
Im Moment baut Andreas dieses Kommando in init.d ein&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Serverprozess schreibt mehr oder weniger detaillierte Ausgaben (je nach beim Start angegebenen Verbosity-Level) in das System-Logfile. Diese können von allen Benutzern mit folgendem Befehl begutachtet werden:&lt;br /&gt;
 tail -f -n 1000 /var/log/messages | grep ratsche&lt;br /&gt;
Der Output sieht dann beispielsweise so aus:&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: starting RT task scheduler server&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: using message queue 0x0000000a&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: using executable path /home/hgz/svnlocal/hgz/macros/&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: found 1 zombie message(s) in queue...deleting&lt;br /&gt;
 Jan 23 11:50:00 Radioid ratsche[18528]: starting EquScan task with id=0 (pid 20342)&lt;br /&gt;
&lt;br /&gt;
=== Benutzung von &#039;&#039;&#039;RATSCHE&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Zum Zugriff auf den Taskmanager gibt es das systemweit bekannte tool &#039;&#039;&#039;ratsche&#039;&#039;&#039; (Option -h für Kommandozeilen-Hilfe und Auflistung aller verfügbarer Optionen). Hier nur eine kurze Beschreibung der wichtigsten Optionen:&lt;br /&gt;
&lt;br /&gt;
  ratsche -l&lt;br /&gt;
&lt;br /&gt;
listet alle definierten Tasks auf. Die Bedeutung der einzelnen Werte ist aus dem ebenfalls ausgegebenen Header ersichtlich.&lt;br /&gt;
&lt;br /&gt;
  ratsche -a &amp;lt;tasklist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fügt die in der datei &amp;lt;tasklist&amp;gt; definierten Tasks hinzu. Eine Beispieldatei ist zu finden im SVN-Repo in [https://rm-radeberg.dyndns.org/trac/browser/trunk/macros/dummy_task macros/dummy_task]. Am besten man legt sich eine lokale Kopie dieser Datei an, so dass es bei Veränderung dieser nicht zu SVN-Konflikten kommt, z.B. mit&lt;br /&gt;
  cp dummy_task tasklist&lt;br /&gt;
Die Datei &#039;&#039;&#039;tasklist&#039;&#039;&#039; ist dann beliebig editierbar. für alle möglichen Task-Typen ist mind. ein Beispiel angegeben. Wenn der Task von &#039;&#039;&#039;ratsche&#039;&#039;&#039; übernommen werden soll, muß natürlich die entsprechende Zeile auskommentiert sein, i.e. das führende &amp;quot;#&amp;quot; zu entfernen. Das genaue Spaltenformat ist in der Beispieldatei erläutert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Momentan werden die Werte von Priority und Alt-Period noch nicht berücksichtigt. Wird in Zukunft noch implementiert (ist auf meiner ToDo-Liste irgendwo mittendrin ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Benutzung des Subversion (SVN) Repositories =&lt;br /&gt;
&lt;br /&gt;
seit Anfang März 2010 lagert das Software-Repository auf Roberts Server. Eine Übersicht über die Struktur des Repositorys ist erreichbar über &lt;br /&gt;
file:///.../svnlocal/hgzlib/html/index.html in einem Browser, aber nur wenn man vorher die doxygen-Dokumentation mittels &#039;&#039;doxygen&#039;&#039; in diesem Verzeichnis erstellt hat.&lt;br /&gt;
Der Code kann auch durch ein [http://trac.edgewall.org/ Trac]-Webinterface angeschaut werden: &lt;br /&gt;
&lt;br /&gt;
[https://rm-radeberg.dyndns.org/trac/browser/trunk https://rm-radeberg.dyndns.org/trac/browser/trunk]&lt;br /&gt;
&lt;br /&gt;
(login und pw sind identisch mit dem Wiki-account)&lt;br /&gt;
&lt;br /&gt;
Zum Auschecken der Repos in eine lokale Arbeitskopie kann entweder obige url benutzt werden, oder aber folgende Quelle, die auch Änderungen im Repository zuläßt (der https-Kanal ist read only, bzw. sollte es sein):&lt;br /&gt;
&lt;br /&gt;
   svn co svn+ssh://svn@rm-radeberg.dyndns.org/var/svn/hgz/trunk ~/svnlocal&lt;br /&gt;
&lt;br /&gt;
Passwort ist bei [[Benutzer:Hgz|Hgz]] oder [[Benutzer:penner|Penner]] zu erfragen. Zusätzlich kann man sich noch durch Schlüsselaustausch und einem ssh-Agenten das lästige Eintippen des Passworts sparen (siehe unten).&lt;br /&gt;
&lt;br /&gt;
Existiert bereits eine lokale Arbeitskopie (vom vorhergehenden Repository) ist es möglich, diesem die neue Adresse durch folgenden Befehl (im Hauptpfad der lok. Kopie, z.b. svnlocal/) mitzuteilen:&lt;br /&gt;
&lt;br /&gt;
   svn switch --relocate svn+ssh://svnuser@141.30.85.175/home/hgz/svnrep/trunk svn+ssh://svn@rm-radeberg.dyndns.org/var/svn/hgz/trunk&lt;br /&gt;
&lt;br /&gt;
der commit-befähigte user heißt also jetzt svn (pw wie schon erwähnt erfragen). Das soll sich mittelfristig ändern, nämlich dann wenn das Repo endgültig auf dem Perseiden beheimatet wird. Dann wird jeder, der etwas in das Repo einchecken möchte einen Account haben, so dass der Urheber eines Commits auch automatisch im Log erkennbar ist. Andererseits wird nicht jeder auf Perseid registrierte User Schreibzugriff auf das SVN-Repo besitzen. Eine Registrierung (in Form einer mündlichen Absichtserklärung) ist vorzugsweise bei penner und Rücksprache mit [[Benutzer:Hgz|Hgz]] vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
=== Zugriff auf das svn-Repository durch ssh-Schlüssel ===&lt;br /&gt;
&lt;br /&gt;
einen passwortlosen Zugriff auf das svn-Repository kann man durch Austausch eines vertraulichen Schlüssels erreichen. Dieser kann von [[Benutzer:Hgz|Hgz]] bezogen werden. Zum Aktivieren des Schlüssels (nehmen wir an, er heißt &#039;&#039;svnkey&#039;&#039;) sollte man ihn zuerst an einem geeigneten Ort, wie z.B. $(HOME)/.ssh deponieren. Danach kann er dem ssh-Agenten bekannt gemacht werden mit:&lt;br /&gt;
  ssh-add ~/.ssh/svnkey&lt;br /&gt;
Zum Kontrollieren, ob der Schlüssel geladen wurde, oder um sich die Liste bereits geladener Schlüssel anzusehen ist folgender Befehl nützlich:&lt;br /&gt;
  ssh-add -l&lt;br /&gt;
&lt;br /&gt;
Das bisher beschriebene Verfahren muß jedesmal wiederholt werden, wenn eine neue Konsole gestartet wird. Um den Schlüssel permanent in einer interaktiven Shell (das ist diejenige, die an dem Rechner gestartet wird, an dem man auch sitzt) bekannt zu machen, genügt es, obige Zeile in seine .bashrc (d.h. im eigenen Home-Verzeichnis) anzufügen, also&lt;br /&gt;
&lt;br /&gt;
  ...&lt;br /&gt;
  ssh-add ~/.ssh/svnkey&lt;br /&gt;
&lt;br /&gt;
dann sollte an einem Rechner, auf dem eine grafische Benutzeroberfläche läuft, keine Passwortabfrage mehr beim Zugriff auf das svn-Repo erscheinen.&lt;br /&gt;
&lt;br /&gt;
Anders verhält sich das bei entferntem Zugriff auf einen Rechner, z.b. über ssh-login. Dort wird standardmäßig eine Login-Shell gestartet (vgl. interaktive Shell, s.o.), die üblicherweise keine Instanz eines ssh-Agenten initiiert.&lt;br /&gt;
  &lt;br /&gt;
Hier gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
1.Möglichkeit (empfohlen): man installiert das paket keychain (sofern in den Distributionsquellen vorhanden) und überläßt diesem Programm dann das Starten des ssh-Agenten und Laden des Schlüssels. Dazu muß, analog zu obiger Vorgehensweise, in .profile oder in .bashrc in seinem Home-Verzeichnis (im Prinzip ist es egal, in welcher) nur der Aufruf von keychain mit dem Schlüssel als Argument erfolgen.&lt;br /&gt;
&lt;br /&gt;
2.Möglichkeit: man fügt folgende Zeilen an seine .profile an:&lt;br /&gt;
&lt;br /&gt;
 # start up ssh-agent&lt;br /&gt;
 SSH_ENV=&amp;quot;$HOME/.ssh/environment&amp;quot;&lt;br /&gt;
 function start_agent {&lt;br /&gt;
     echo &amp;quot;Initialising new SSH agent...&amp;quot;&lt;br /&gt;
     /usr/bin/ssh-agent | sed &#039;s/^echo/#echo/&#039; &amp;gt; &amp;quot;${SSH_ENV}&amp;quot;&lt;br /&gt;
     echo succeeded&lt;br /&gt;
     chmod 600 &amp;quot;${SSH_ENV}&amp;quot;&lt;br /&gt;
     . &amp;quot;${SSH_ENV}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
     /usr/bin/ssh-add ~/.ssh/svnkey;&lt;br /&gt;
 }&lt;br /&gt;
 # Source SSH settings, if applicable&lt;br /&gt;
 if [ -f &amp;quot;${SSH_ENV}&amp;quot; ]; then&lt;br /&gt;
     . &amp;quot;${SSH_ENV}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
     #ps ${SSH_AGENT_PID} doesn&#039;t work under cywgin&lt;br /&gt;
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ &amp;gt; /dev/null || {&lt;br /&gt;
         start_agent;&lt;br /&gt;
     }&lt;br /&gt;
 else&lt;br /&gt;
     start_agent;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist hier, dass der Schlüssel, welcher geladen werden soll, hier mit angegeben ist (9. Zeile). Der Name muß entsprechend dem tatsächlichen Namen des Schlüssels angepaßt werden.&lt;br /&gt;
In jeder zukünftig geöffneten Shell wird nun automatisch der Schlüssel geladen, so dass eine Passwortabfrage bei Zugriff auf svn umgangen (im positiven und auch sicheren Sinn) wird.&lt;br /&gt;
Um die Änderungen auch in der aktiven Shell anzuwenden, kann man außerdem noch den Inhalt der veränderten .profile erneut ausführen lassen mit:&lt;br /&gt;
  source ~/.profile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Remote-Mounten der Datenpartition durch sshfs =&lt;br /&gt;
&lt;br /&gt;
Zum Mounten von Ordnern fremder Rechner auf dem lokalen Computer über ssh ist das tool sshfs ganz hilfreich. Es setzt auf dem FUSE-Dateisystem-Konzept auf, der Benutzer muß daher Mitglied der Gruppe &amp;quot;fuse&amp;quot; auf dem lokalen Rechner sein.&lt;br /&gt;
&lt;br /&gt;
Als erstes sollte man sicherstellen, dass sshfs installiert ist, und es ggf. über den Paketmanager installieren, z.b.&lt;br /&gt;
 sudo zypper install sshfs&lt;br /&gt;
Danach noch (z.b. über YaST-&amp;gt;Benutzer und Gruppen) den eigenen Benutzer zur Gruppe &#039;&#039;fuse&#039;&#039; hinzufügen.&lt;br /&gt;
&lt;br /&gt;
nun kann man ein Verzeichnis anlegen, in das das Filesystem des entfernten Rechners hingemountet wird:&lt;br /&gt;
 mkdir sshfs/radioid&lt;br /&gt;
&lt;br /&gt;
das mounten geschieht über:&lt;br /&gt;
 sshfs radioid:/daten ~/sshfs/radioid/&lt;br /&gt;
&lt;br /&gt;
dann sollte der Ordner /daten des radioiden in dem Verzeichnis sshfs/radioid gemountet sein. Der Hostname (in diesem fall radioid:/) muß natürlich dem System bekannt sein. Am besten man benutzt den Alias wie auch beim ssh-Login. Dann muß man auch kein PW eingeben.&lt;br /&gt;
&lt;br /&gt;
Noch ein Tip: Ich habe das Mounten von nicht-lokalen Verzeichnissen komfortabel in &#039;&#039;gkrellm&#039;&#039; integriert. Dazu muß man einfach bei &#039;&#039;Configuration-&amp;gt;File System&#039;&#039; ein neues primäres FS hinzufügen (s. Screenshot).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Bild:Gkrellm sshfs mount.png|Konfiguration sshfs-mount in gkrellm&lt;br /&gt;
Bild:Gkrellm sshfs mount2.png|Einbindung des Radioiden über sshfs-mount in gkrellm&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Anleitungen/Tutorials&amp;diff=2742</id>
		<title>Anleitungen/Tutorials</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Anleitungen/Tutorials&amp;diff=2742"/>
		<updated>2011-02-16T21:58:00Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: /* Server-Prozess */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Benutzung der Datenaquisitions-Tools =&lt;br /&gt;
&lt;br /&gt;
Beispiel für Aufruf datataker:&lt;br /&gt;
  bin/datataker /dev/ttyS5&lt;br /&gt;
&lt;br /&gt;
Obige Zeile verbindet sich mit dem ADC und gibt die Daten mit Timestamp auf &#039;&#039;stdout&#039;&#039; aus.&lt;br /&gt;
&lt;br /&gt;
Um den Zusammenhang zwischen gemessenen Intensitäten und Koordinaten auszugeben ist&lt;br /&gt;
&lt;br /&gt;
  macros/acquire&lt;br /&gt;
&lt;br /&gt;
aufzurufen. Dieses Script gibt in dieser Reihenfolge folgende Werte auf &#039;&#039;stdout&#039;&#039; aus:&lt;br /&gt;
timestamp ADC-Wert Azimut Höhe Stunde Deklination Controllertemperatur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  macros/acquire_ref&lt;br /&gt;
&lt;br /&gt;
erweitert die Ausgabe von macros/acquire um eine weitere Spalte&lt;br /&gt;
&lt;br /&gt;
per default wird hier 19 mal der feed gemessen und danach 1 mal den Referenzkanal&lt;br /&gt;
Es gibt hier noch 3 wichtige (Stellungs)Parameter&lt;br /&gt;
*1. Averaging Anzahl default:100&lt;br /&gt;
*2. Verhältnis Signalwerte Referenzwerte default :20 heisst 19 Signal 1 Referenz&lt;br /&gt;
*3. Gesamtzahl der auszugebenden Werte default :-1 (endlos)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Steuerung von Messungen =&lt;br /&gt;
&lt;br /&gt;
== Steuerung über bash-Skripte ==&lt;br /&gt;
&lt;br /&gt;
Das ist die flexibelste Art, Messungen auszuführen. Für die verschiedenen Aufgaben stehen im repo-tree im Unterverzeichnis [https://rm-radeberg.dyndns.org/trac/browser/trunk/macros macros/] (zusätzlich zu den reinen DAQ-Skripten, s.o.) folgende Steuerskripte zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;rt_scan_hor&#039;&#039;&#039; ... Messung in äquidistantem Grid in Horizontalkoordinaten (mind. 5 Parameter benötigt, s. Usage-Hilfe bei Aufruf ohne Parameter)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;rt_scan_equ&#039;&#039;&#039; ... Messung in äquidistantem Grid in Äquatorialkoordinaten (mind. 5 Parameter benötigt, s. Usage-Hilfe bei Aufruf ohne Parameter)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Steuerung über Task Scheduler &amp;quot;RATSCHE&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Das sollte ab Januar 2011 die verbindliche (einzige) Möglichkeit von Messungen sein, da hier Kollisionen ausgeschlossen sind.&lt;br /&gt;
&lt;br /&gt;
=== Server-Prozess ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Radioiden muß eine Instanz von &#039;&#039;&#039;ratsche&#039;&#039;&#039; im Servermodus laufen, der Daemon-Prozess ist folgendermassen zu starten:&lt;br /&gt;
  ratsche -d -x /home/hgz/svnlocal/hgz/macros&lt;br /&gt;
Das Argument zum Parameter -x ist der Ort der ausführbaren Makros, wie z.b. &#039;&#039;&#039;rt_scan_equ&#039;&#039;&#039;, es muß also nicht unbedingt genau obige Zeile sein, wichtig ist nur das Macro-Verzeichnis irgendeiner lokalen Kopie des SVN-Repos (im obigen Fall meine lokale Arbeitskopie) anzugeben.&lt;br /&gt;
&lt;br /&gt;
In Zukunft (irgendwann Jan-März) werde ich ein Start-Skript für den Radioiden schreiben, das automatisch den ratsche-daemon startet, dann haben wir eine Sorge weniger. Bis dahin bitte nach Neustart Radioid obige Zeile einmalig ausführen (wenn der Daemon bereits läuft wird jedoch keine zweite Instanz gestartet, der Aufruf gibt dann eine entsprechende Info-Meldung aus).&lt;br /&gt;
&lt;br /&gt;
Eine Bemerkung von KDS: Bitte überprüft mit:&lt;br /&gt;
  ps ax | grep -i ratsche&lt;br /&gt;
ob eine ratsche -d läuft und startet ggf. o.a. Kommandozeile den ratsche Server.&lt;br /&gt;
&lt;br /&gt;
Im Momnet baut Andreas dieses Kommando in init.d ein&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Serverprozess schreibt mehr oder weniger detaillierte Ausgaben (je nach beim Start angegebenen Verbosity-Level) in das System-Logfile. Diese können von allen Benutzern mit folgendem Befehl begutachtet werden:&lt;br /&gt;
 tail -f -n 1000 /var/log/messages | grep ratsche&lt;br /&gt;
Der Output sieht dann beispielsweise so aus:&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: starting RT task scheduler server&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: using message queue 0x0000000a&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: using executable path /home/hgz/svnlocal/hgz/macros/&lt;br /&gt;
 Jan 23 11:39:09 Radioid ratsche[18528]: found 1 zombie message(s) in queue...deleting&lt;br /&gt;
 Jan 23 11:50:00 Radioid ratsche[18528]: starting EquScan task with id=0 (pid 20342)&lt;br /&gt;
&lt;br /&gt;
=== Benutzung von &#039;&#039;&#039;RATSCHE&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Zum Zugriff auf den Taskmanager gibt es das systemweit bekannte tool &#039;&#039;&#039;ratsche&#039;&#039;&#039; (Option -h für Kommandozeilen-Hilfe und Auflistung aller verfügbarer Optionen). Hier nur eine kurze Beschreibung der wichtigsten Optionen:&lt;br /&gt;
&lt;br /&gt;
  ratsche -l&lt;br /&gt;
&lt;br /&gt;
listet alle definierten Tasks auf. Die Bedeutung der einzelnen Werte ist aus dem ebenfalls ausgegebenen Header ersichtlich.&lt;br /&gt;
&lt;br /&gt;
  ratsche -a &amp;lt;tasklist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fügt die in der datei &amp;lt;tasklist&amp;gt; definierten Tasks hinzu. Eine Beispieldatei ist zu finden im SVN-Repo in [https://rm-radeberg.dyndns.org/trac/browser/trunk/macros/dummy_task macros/dummy_task]. Am besten man legt sich eine lokale Kopie dieser Datei an, so dass es bei Veränderung dieser nicht zu SVN-Konflikten kommt, z.B. mit&lt;br /&gt;
  cp dummy_task tasklist&lt;br /&gt;
Die Datei &#039;&#039;&#039;tasklist&#039;&#039;&#039; ist dann beliebig editierbar. für alle möglichen Task-Typen ist mind. ein Beispiel angegeben. Wenn der Task von &#039;&#039;&#039;ratsche&#039;&#039;&#039; übernommen werden soll, muß natürlich die entsprechende Zeile auskommentiert sein, i.e. das führende &amp;quot;#&amp;quot; zu entfernen. Das genaue Spaltenformat ist in der Beispieldatei erläutert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Momentan werden die Werte von Priority und Alt-Period noch nicht berücksichtigt. Wird in Zukunft noch implementiert (ist auf meiner ToDo-Liste irgendwo mittendrin ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Benutzung des Subversion (SVN) Repositories =&lt;br /&gt;
&lt;br /&gt;
seit Anfang März 2010 lagert das Software-Repository auf Roberts Server. Eine Übersicht über die Struktur des Repositorys ist erreichbar über &lt;br /&gt;
file:///.../svnlocal/hgzlib/html/index.html in einem Browser, aber nur wenn man vorher die doxygen-Dokumentation mittels &#039;&#039;doxygen&#039;&#039; in diesem Verzeichnis erstellt hat.&lt;br /&gt;
Der Code kann auch durch ein [http://trac.edgewall.org/ Trac]-Webinterface angeschaut werden: &lt;br /&gt;
&lt;br /&gt;
[https://rm-radeberg.dyndns.org/trac/browser/trunk https://rm-radeberg.dyndns.org/trac/browser/trunk]&lt;br /&gt;
&lt;br /&gt;
(login und pw sind identisch mit dem Wiki-account)&lt;br /&gt;
&lt;br /&gt;
Zum Auschecken der Repos in eine lokale Arbeitskopie kann entweder obige url benutzt werden, oder aber folgende Quelle, die auch Änderungen im Repository zuläßt (der https-Kanal ist read only, bzw. sollte es sein):&lt;br /&gt;
&lt;br /&gt;
   svn co svn+ssh://svn@rm-radeberg.dyndns.org/var/svn/hgz/trunk ~/svnlocal&lt;br /&gt;
&lt;br /&gt;
Passwort ist bei [[Benutzer:Hgz|Hgz]] oder [[Benutzer:penner|Penner]] zu erfragen. Zusätzlich kann man sich noch durch Schlüsselaustausch und einem ssh-Agenten das lästige Eintippen des Passworts sparen (siehe unten).&lt;br /&gt;
&lt;br /&gt;
Existiert bereits eine lokale Arbeitskopie (vom vorhergehenden Repository) ist es möglich, diesem die neue Adresse durch folgenden Befehl (im Hauptpfad der lok. Kopie, z.b. svnlocal/) mitzuteilen:&lt;br /&gt;
&lt;br /&gt;
   svn switch --relocate svn+ssh://svnuser@141.30.85.175/home/hgz/svnrep/trunk svn+ssh://svn@rm-radeberg.dyndns.org/var/svn/hgz/trunk&lt;br /&gt;
&lt;br /&gt;
der commit-befähigte user heißt also jetzt svn (pw wie schon erwähnt erfragen). Das soll sich mittelfristig ändern, nämlich dann wenn das Repo endgültig auf dem Perseiden beheimatet wird. Dann wird jeder, der etwas in das Repo einchecken möchte einen Account haben, so dass der Urheber eines Commits auch automatisch im Log erkennbar ist. Andererseits wird nicht jeder auf Perseid registrierte User Schreibzugriff auf das SVN-Repo besitzen. Eine Registrierung (in Form einer mündlichen Absichtserklärung) ist vorzugsweise bei penner und Rücksprache mit [[Benutzer:Hgz|Hgz]] vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
=== Zugriff auf das svn-Repository durch ssh-Schlüssel ===&lt;br /&gt;
&lt;br /&gt;
einen passwortlosen Zugriff auf das svn-Repository kann man durch Austausch eines vertraulichen Schlüssels erreichen. Dieser kann von [[Benutzer:Hgz|Hgz]] bezogen werden. Zum Aktivieren des Schlüssels (nehmen wir an, er heißt &#039;&#039;svnkey&#039;&#039;) sollte man ihn zuerst an einem geeigneten Ort, wie z.B. $(HOME)/.ssh deponieren. Danach kann er dem ssh-Agenten bekannt gemacht werden mit:&lt;br /&gt;
  ssh-add ~/.ssh/svnkey&lt;br /&gt;
Zum Kontrollieren, ob der Schlüssel geladen wurde, oder um sich die Liste bereits geladener Schlüssel anzusehen ist folgender Befehl nützlich:&lt;br /&gt;
  ssh-add -l&lt;br /&gt;
&lt;br /&gt;
Das bisher beschriebene Verfahren muß jedesmal wiederholt werden, wenn eine neue Konsole gestartet wird. Um den Schlüssel permanent in einer interaktiven Shell (das ist diejenige, die an dem Rechner gestartet wird, an dem man auch sitzt) bekannt zu machen, genügt es, obige Zeile in seine .bashrc (d.h. im eigenen Home-Verzeichnis) anzufügen, also&lt;br /&gt;
&lt;br /&gt;
  ...&lt;br /&gt;
  ssh-add ~/.ssh/svnkey&lt;br /&gt;
&lt;br /&gt;
dann sollte an einem Rechner, auf dem eine grafische Benutzeroberfläche läuft, keine Passwortabfrage mehr beim Zugriff auf das svn-Repo erscheinen.&lt;br /&gt;
&lt;br /&gt;
Anders verhält sich das bei entferntem Zugriff auf einen Rechner, z.b. über ssh-login. Dort wird standardmäßig eine Login-Shell gestartet (vgl. interaktive Shell, s.o.), die üblicherweise keine Instanz eines ssh-Agenten initiiert.&lt;br /&gt;
  &lt;br /&gt;
Hier gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
1.Möglichkeit (empfohlen): man installiert das paket keychain (sofern in den Distributionsquellen vorhanden) und überläßt diesem Programm dann das Starten des ssh-Agenten und Laden des Schlüssels. Dazu muß, analog zu obiger Vorgehensweise, in .profile oder in .bashrc in seinem Home-Verzeichnis (im Prinzip ist es egal, in welcher) nur der Aufruf von keychain mit dem Schlüssel als Argument erfolgen.&lt;br /&gt;
&lt;br /&gt;
2.Möglichkeit: man fügt folgende Zeilen an seine .profile an:&lt;br /&gt;
&lt;br /&gt;
 # start up ssh-agent&lt;br /&gt;
 SSH_ENV=&amp;quot;$HOME/.ssh/environment&amp;quot;&lt;br /&gt;
 function start_agent {&lt;br /&gt;
     echo &amp;quot;Initialising new SSH agent...&amp;quot;&lt;br /&gt;
     /usr/bin/ssh-agent | sed &#039;s/^echo/#echo/&#039; &amp;gt; &amp;quot;${SSH_ENV}&amp;quot;&lt;br /&gt;
     echo succeeded&lt;br /&gt;
     chmod 600 &amp;quot;${SSH_ENV}&amp;quot;&lt;br /&gt;
     . &amp;quot;${SSH_ENV}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
     /usr/bin/ssh-add ~/.ssh/svnkey;&lt;br /&gt;
 }&lt;br /&gt;
 # Source SSH settings, if applicable&lt;br /&gt;
 if [ -f &amp;quot;${SSH_ENV}&amp;quot; ]; then&lt;br /&gt;
     . &amp;quot;${SSH_ENV}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
     #ps ${SSH_AGENT_PID} doesn&#039;t work under cywgin&lt;br /&gt;
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ &amp;gt; /dev/null || {&lt;br /&gt;
         start_agent;&lt;br /&gt;
     }&lt;br /&gt;
 else&lt;br /&gt;
     start_agent;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist hier, dass der Schlüssel, welcher geladen werden soll, hier mit angegeben ist (9. Zeile). Der Name muß entsprechend dem tatsächlichen Namen des Schlüssels angepaßt werden.&lt;br /&gt;
In jeder zukünftig geöffneten Shell wird nun automatisch der Schlüssel geladen, so dass eine Passwortabfrage bei Zugriff auf svn umgangen (im positiven und auch sicheren Sinn) wird.&lt;br /&gt;
Um die Änderungen auch in der aktiven Shell anzuwenden, kann man außerdem noch den Inhalt der veränderten .profile erneut ausführen lassen mit:&lt;br /&gt;
  source ~/.profile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Remote-Mounten der Datenpartition durch sshfs =&lt;br /&gt;
&lt;br /&gt;
Zum Mounten von Ordnern fremder Rechner auf dem lokalen Computer über ssh ist das tool sshfs ganz hilfreich. Es setzt auf dem FUSE-Dateisystem-Konzept auf, der Benutzer muß daher Mitglied der Gruppe &amp;quot;fuse&amp;quot; auf dem lokalen Rechner sein.&lt;br /&gt;
&lt;br /&gt;
Als erstes sollte man sicherstellen, dass sshfs installiert ist, und es ggf. über den Paketmanager installieren, z.b.&lt;br /&gt;
 sudo zypper install sshfs&lt;br /&gt;
Danach noch (z.b. über YaST-&amp;gt;Benutzer und Gruppen) den eigenen Benutzer zur Gruppe &#039;&#039;fuse&#039;&#039; hinzufügen.&lt;br /&gt;
&lt;br /&gt;
nun kann man ein Verzeichnis anlegen, in das das Filesystem des entfernten Rechners hingemountet wird:&lt;br /&gt;
 mkdir sshfs/radioid&lt;br /&gt;
&lt;br /&gt;
das mounten geschieht über:&lt;br /&gt;
 sshfs radioid:/daten ~/sshfs/radioid/&lt;br /&gt;
&lt;br /&gt;
dann sollte der Ordner /daten des radioiden in dem Verzeichnis sshfs/radioid gemountet sein. Der Hostname (in diesem fall radioid:/) muß natürlich dem System bekannt sein. Am besten man benutzt den Alias wie auch beim ssh-Login. Dann muß man auch kein PW eingeben.&lt;br /&gt;
&lt;br /&gt;
Noch ein Tip: Ich habe das Mounten von nicht-lokalen Verzeichnissen komfortabel in &#039;&#039;gkrellm&#039;&#039; integriert. Dazu muß man einfach bei &#039;&#039;Configuration-&amp;gt;File System&#039;&#039; ein neues primäres FS hinzufügen (s. Screenshot).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Bild:Gkrellm sshfs mount.png|Konfiguration sshfs-mount in gkrellm&lt;br /&gt;
Bild:Gkrellm sshfs mount2.png|Einbindung des Radioiden über sshfs-mount in gkrellm&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Daten_Auslesen&amp;diff=2492</id>
		<title>Daten Auslesen</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Daten_Auslesen&amp;diff=2492"/>
		<updated>2010-11-19T21:11:41Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: /* Roh-Datenformat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Paralleles Auslesen von diversen Sensoren und Zusammenbauen der Daten=&lt;br /&gt;
== Rohdatenspeicherung ==&lt;br /&gt;
Soweit ich verstanden habe, besteht die Aufgabe darin, den AD-Wandler mit einer Frequenz im Bereich 1 kHz und die Koordinaten mit einer Frequenz im Bereich 10 Hz auszulesen. Evtl. kommen auch mal noch weitere Sensoren hinzu. Die Weiterverarbeitung soll in Form von n-Tupeln (Zeitstempel; AD-Wert; Koordinaten) erfolgen. Das Ganze soll auch unter Belastung des Rechners noch zuverlässig erfolgen. Die Speicherung der Rohdaten erfolgt dabei sinnvollerweise nicht als n-Tupel, sondern in einem Raster der Art:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;(t_{n,0},ad_{n,0},c_{n,0});\, (t_1,ad_1);\, (t_2,ad_2);\, ... (t_{n,i},ad_{n,i},c_{n,i});\, (t_{n+1},ad_{n+1});\, ... &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n=k*i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Koordinaten werden also nur aller k Zeitschritte auch wirklich ausgelesen und aufgeschrieben. Aus solch einem File kann für die Weiterverarbeitung wieder eine Liste mit kompletten n-Tupen erstellt werden. Dabei kann man die Koordinaten zwischen den Stützstellen interpolieren oder man lässt sie einfach konstant bis zum nächsten Messpunkt. Evtl. würde eine von beiden Varianten irgendwelche Statistiken stören. Die Rohdaten verursachen so weniger Last beim Schreiben und belegen weniger Speicherplatz als wenn immer ganze n-Tupel geschrieben werden müssten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Roh-Datenformat&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Die bei der Messung der integralen Signalintensität im 1420MHz-Band am Detektorausgang gesampelten Daten werden im AVR-ADC-Board zunächst in einem Ringpuffer einem gleitenden Mittel unterzogen. Jeweils ein über RS232 aquirierter Messwert ist also schon ein Mittel über eine (einstellbare) Puffergröße (16-32768) und somit auch mit einer Zeitkonstanten behaftet. Dieser Messwert soll zusammen mit einem Zeitstempel im ASCII-Format abgelegt werden. Zusätzlich werden die äquatorialen Koordinaten benötigt und eine Information, ob das Signal der Antenne oder dem Referenzkanal entstammt.&lt;br /&gt;
&lt;br /&gt;
Enthalten sein müssen:&lt;br /&gt;
&lt;br /&gt;
* Zeitstempel, Format: yyyy/MM/dd hh:mm:ss.s&lt;br /&gt;
* Äquatorialkoordinaten (RA/Dec), Format: HH.h DD.d&lt;br /&gt;
* Messwert in ADC-Counts, floating-point&lt;br /&gt;
* Schalterstatus Referenz (0 oder 1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daneben sollte ein weiterer, davon unabhängiger Prozess alle Sensorenwerte und andere periphere Daten in regelmäßigen Zeitabständen in einer Log-Datei speichern. Dazu gehören diverse Temperaturen, Spannungen, Ströme, andere Umweltsensoren und evtl. INDI-RT-spezifische Werte, wie Motorgeschwindigkeiten o.ä. aber auch Observablen des Steuerrechners, wie z.b. die aktuelle Präzision der ntp-gesteuerten Systemuhr. Die Identifikation und ggf. Korrelation zu den Hauptdaten erfolgt wieder durch Vergabe eines eindeutigen Zeitstempels.&lt;br /&gt;
Bsp.:&lt;br /&gt;
  #date time temp1 temp2 windsensor IMot1 IMot2 U1 U2 U3 U4 ntp-err&lt;br /&gt;
  2010/04/19 23:25:11.765235000 28.5 43.1 15 0 3.5 11.8 5.1 24.6 0.25 2.3&lt;br /&gt;
&lt;br /&gt;
Beispiel für Aufruf datataker:&lt;br /&gt;
  bin/datataker /dev/ttyS5&lt;br /&gt;
&lt;br /&gt;
Obige Zeile konnekted mit dem ADC und gibt die Daten mit timestamp auf stdout aus.&lt;br /&gt;
&lt;br /&gt;
Um den Zusammenhang zwischen gemessenen Intensitäten und Koordinaten auszugeben ist&lt;br /&gt;
&lt;br /&gt;
  macros/acquire&lt;br /&gt;
&lt;br /&gt;
aufzurufen. Dieses Script gibt in dieser Reihenfolge folgende Werte auf stdout aus:&lt;br /&gt;
timestamp ADC-Wert Azimut Höhe Stunde Deklination Controlertemperatur&lt;br /&gt;
&lt;br /&gt;
  macros/acquire_ref&lt;br /&gt;
&lt;br /&gt;
erweitert die Ausgabe von macros/acquire um eine weitere Spalte&lt;br /&gt;
&lt;br /&gt;
per default wird hier 19 mal der feed gemessen und danach 1 mal den Referenzkanal&lt;br /&gt;
Es gibt hier noch 3 wichtige (Stellungs)Parameter&lt;br /&gt;
1. Averaging Anzahl default:100&lt;br /&gt;
2. Verhältnis Signalwerte Referenzwerte default :20 heisst 19 Signal 1 Referenz&lt;br /&gt;
3. Gesamtzahl der auszugebenden Werte default :-1 (endlos)&lt;br /&gt;
&lt;br /&gt;
== Datenaufnahme ==&lt;br /&gt;
Um eine möglichst jitterarme Datenaufnahme zu gewährleisten scheint es sinvoll, die einzelnen Sensoren in jeweils einen eigenen Prozess oder Thread zu packen. Dann kann der sich in aller Genauigkeit um seinen Sensor kümmern und wird hoffentlich vom Betriebssystem richtig mit Zeitscheiben versorgt. Dabei benötigt man allerdings eine gemeinsame Zeitbasis mit ausreichender Genauigkeit.&lt;br /&gt;
&lt;br /&gt;
In [[Daten_Auswerten#Einzelwerte]] steht etwas von einem Ringpuffer der im DA vorhanden sei und dessen eigenständiger Messwertaufnahme in eben diesen Ringpuffer. Wie funktioniert das denn eigentlich?&lt;br /&gt;
&lt;br /&gt;
Ich stelle mir den prinzipiellen Ablauf so vor:&lt;br /&gt;
# zentrale Instanz übergibt Details wie Samplefrequenz, ... und den Startzeitpunkt an einzelne Messprozesse.&lt;br /&gt;
# Messprozesse warten auf Startzeitpunkt und legen dann los&lt;br /&gt;
# Messprozesse messen vor sich hin, in persönlichen großen Ringpuffer.&lt;br /&gt;
# zentrale Instanz holt sich ab und an aus den Ringpuffern die Daten die sie haben will und schreibt sie in ein File&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Prozesse ==&lt;br /&gt;
Die Kommunikation könnte man über Pipes, Fifos, Shared-Memory, Message-Queues, TCP (Sockets) machen, im Prinzip auch mit MPI.&lt;br /&gt;
&lt;br /&gt;
* MPI ist Mist, weil man dann immer ein MPI-System braucht&lt;br /&gt;
* Message Queues sind im Prinzip cool, praktisch aber viel zu kurz und für zu kleine Datenmengen gedacht (10 Messages a 8kB ist Standard unter Linux). Dafür soll das halt sehr schnell sein (im L1-Cache bleiben etc).&lt;br /&gt;
* Pipes, Fifos ist halt ein bisschen fummelig. TCP keine Ahnung&lt;br /&gt;
* SHMem ist eigentlich ziemlich ok. Man muss natürlich von Hand synchronisieren. Das ist eigentlich auch kein Ding weiter. Wenn man einmal Zugriff auf den gemeinsamen Speicherbereich hat, sollte das nicht schwieriger sein als mit OpenMP (s.u.).&lt;br /&gt;
&lt;br /&gt;
*[http://www.ecst.csuchico.edu/~beej/guide/ipc/mq.html Message Queues]&lt;br /&gt;
*[http://kirkwylie.blogspot.com/2008/10/posix-message-queues-useful-but-limited.html POSIX Message in Linux]&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Threads ==&lt;br /&gt;
Nachteil ist, dass die einzelnen Ausleseprozesse nicht gegeneinander geschützt sind. &lt;br /&gt;
=== OpenMP ===&lt;br /&gt;
Dafür gibt es die nahezu triviale Variante mit OpenMP. Der geringe Aufwand könnte die eher theoretischen Nachteile durchaus wieder wettmachen, finde ich.&lt;br /&gt;
Ich stelle mit das ungefähr so vor:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;omp.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int showAction; &lt;br /&gt;
 &lt;br /&gt;
 /* Das ist eine etwas missbräuchliche aber immer noch sehr einfache Verwendung&lt;br /&gt;
   von OpenMP zur Arbeit mit Threads. Auf alle Fälle ist es schön&lt;br /&gt;
   einfach. Evtl. müssen die Jobs das Lesen nicht in einer critical Section&lt;br /&gt;
   machen aber es wird hier nichts schaden.&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 int job1(void)&lt;br /&gt;
 {&lt;br /&gt;
  for(;;)&lt;br /&gt;
  {&lt;br /&gt;
 #pragma  critical&lt;br /&gt;
   int sAct=showAction;&lt;br /&gt;
   if (sAct&amp;amp;1) cout &amp;lt;&amp;lt; &amp;quot;1&amp;quot;;&lt;br /&gt;
   cout.flush();&lt;br /&gt;
   usleep(5000); // nominell 5 ms&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int job2(void)&lt;br /&gt;
 {&lt;br /&gt;
  for(;;)&lt;br /&gt;
  {&lt;br /&gt;
   #pragma  critical&lt;br /&gt;
   int sAct=showAction;&lt;br /&gt;
   if (sAct&amp;amp;2) cout &amp;lt;&amp;lt; &amp;quot;2&amp;quot;;&lt;br /&gt;
   cout.flush();&lt;br /&gt;
   usleep(5000); // 5 ms&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int job3(void)&lt;br /&gt;
 {&lt;br /&gt;
  for(;;)&lt;br /&gt;
  {&lt;br /&gt;
   #pragma  critical&lt;br /&gt;
   int sAct=showAction;&lt;br /&gt;
   if (sAct&amp;amp;4) cout &amp;lt;&amp;lt; &amp;quot;3&amp;quot;;&lt;br /&gt;
   cout.flush();&lt;br /&gt;
   usleep(5000); // 5 ms&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
  int nthreads, tid;&lt;br /&gt;
  omp_set_nested(1);&lt;br /&gt;
 &lt;br /&gt;
 /* Fork a team of threads with each thread having a private tid variable */&lt;br /&gt;
 #pragma omp parallel private(tid) num_threads (4)&lt;br /&gt;
   {&lt;br /&gt;
 &lt;br /&gt;
   /* Obtain and print thread id */&lt;br /&gt;
   tid = omp_get_thread_num();&lt;br /&gt;
   printf(&amp;quot;Hello World from thread = %d\n&amp;quot;, tid);&lt;br /&gt;
   switch (tid)&lt;br /&gt;
   {&lt;br /&gt;
    case 1: job1(); break;&lt;br /&gt;
    case 2: job2(); break;&lt;br /&gt;
    case 3: job3(); break;&lt;br /&gt;
   }&lt;br /&gt;
   /* Only master thread does this */&lt;br /&gt;
   if (tid == 0)&lt;br /&gt;
   {&lt;br /&gt;
    nthreads = omp_get_num_threads();&lt;br /&gt;
    printf(&amp;quot;Number of threads = %d\n&amp;quot;, nthreads);&lt;br /&gt;
   }&lt;br /&gt;
   for(;;) // master thread verteilt die aufgaben&lt;br /&gt;
   {&lt;br /&gt;
 #pragma critical&lt;br /&gt;
    showAction=rand();&lt;br /&gt;
    usleep(100000); // nominell 100 ms&lt;br /&gt;
   }&lt;br /&gt;
  }  /* All threads join master thread and terminate */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* [http://cclh61.chm.tu-dresden.de/edv/manuals/xlc5/compiler/ref/ruompcrt.htm critical section]&lt;br /&gt;
&lt;br /&gt;
== Synchronisation ==&lt;br /&gt;
Mit den Pragmas von OpenMP kann man eine Synchronisation erreichen. Ein Thread wartet auf andere Threads, ich würde denken aktiv. Für Zwecke des Datensampelns sind die meisten Threads fast immer in Wartestellung. OpenMP bietet die Möglichkeit, Locks zu setzen. Darauf aufbauend könnte man eine sinnvolle Datenübergabe bauen und dazwischen die Threads schlafen legen.&lt;br /&gt;
Das stelle ich mir so vor:&lt;br /&gt;
&lt;br /&gt;
= Systemtechnik und Zeitkonstanten =&lt;br /&gt;
&lt;br /&gt;
== Kompendium der Usage ==&lt;br /&gt;
&lt;br /&gt;
* Vergesslichkeit etc. zu bekämpfen ...&lt;br /&gt;
** Allanplot: root # .L allanplot.C++ # allenplot()   ... tatsächlich mit e, nicht a&lt;br /&gt;
** Macros: (zB) &lt;br /&gt;
*** &amp;lt;makro&amp;gt;.C (zuvor &amp;lt;file&amp;gt; einsetzen): # root -l &amp;lt;makro&amp;gt;.C &lt;br /&gt;
*** &#039;&#039;&#039;oder&#039;&#039;&#039; # root -&amp;gt; .x &amp;lt;makro.C&lt;br /&gt;
** 2dfft siehe Changeset  497 for  trunk&lt;br /&gt;
&lt;br /&gt;
== Verfahren bei zeitkonstanten Signalen ==&lt;br /&gt;
&lt;br /&gt;
Vorbehaltlich einer grafischen Darstellung. Die Einzelschritte sind für eine rise time gerechnet, die eine Amplitude von 90% auf der Flanke ergibt [[http://de.wikipedia.org/wiki/Anstiegs-_und_Abfallzeit]]. Keine Totzeiten eingerechnet.&lt;br /&gt;
&lt;br /&gt;
* analoge Tiefpassfilterung resp. Integration im Detektor: &amp;lt;math&amp;gt;\tau_{Det}&amp;lt;/math&amp;gt;&lt;br /&gt;
** 400ns für einen Anstieg von 10% auf 90% gem. Datenblatt AD8307 &lt;br /&gt;
&lt;br /&gt;
* zeit- und wertdiskrete Tiefpassfilterung im Analog-Digital-Konverter (ADC): &amp;lt;math&amp;gt;\tau_{ADC}&amp;lt;/math&amp;gt;&lt;br /&gt;
** Der ADC sampelt mit 20kHz, d.h. der Puffer ist in 50ms einmal durchgeschoben, je nach Firmware kann sich ein Faktor 2 oder gar 4 zu diesem Wert ergeben. Also 10...200ms &lt;br /&gt;
&lt;br /&gt;
* zeit- und wertdiskrete Tiefpassfilterung (resp. Integration) per Software (precision:double): &amp;lt;math&amp;gt;\tau_{SW}&amp;lt;/math&amp;gt;&lt;br /&gt;
** (Beispiel). 50 Samples von 2,5 Dauer eines Timestamps, sind (hier) 75s&lt;br /&gt;
&lt;br /&gt;
Die 0,9-Zeitkonstante ergibt sich hier zu &amp;lt;math&amp;gt;\sqrt{\tau_{Det}^2+\tau_{ADC}^2+\tau_{SW}^2}\approx76s&amp;lt;/math&amp;gt;. Es ist ersichtlich dass die Zeitkonstante via Suche nach dem rms-Minimum ganz überwiegend von der Software bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
* Der Schwenk zum nächsten Punkt dauert ebenfalls mehrere Sekunden, sind hier alles in allem 80s.&lt;br /&gt;
&lt;br /&gt;
* Unterstellt man einmal, dass &lt;br /&gt;
** die 5° breite &amp;quot;ideale&amp;quot; Keule mit 3dB Abfall in 1/5-Schritten noch akzeptable Werte bringt (sind 1°) und&lt;br /&gt;
** ein 1h in RA / 15° in Dec grosses Feld interessiert, so wären &lt;br /&gt;
** für diesen Scan 5h anzusetzen.&lt;br /&gt;
** ideale Wetterbedingungen vorausgesetzt&lt;br /&gt;
&lt;br /&gt;
* Abhängig von der Deklination der Quelle sind hier Zu- und Abschläge möglich. Horizontprobleme, Messungen unter 30° Elevation sind in der Regel wertlos oder nicht möglich.&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Daten_Auslesen&amp;diff=2491</id>
		<title>Daten Auslesen</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Daten_Auslesen&amp;diff=2491"/>
		<updated>2010-11-19T21:00:51Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: /* Roh-Datenformat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Paralleles Auslesen von diversen Sensoren und Zusammenbauen der Daten=&lt;br /&gt;
== Rohdatenspeicherung ==&lt;br /&gt;
Soweit ich verstanden habe, besteht die Aufgabe darin, den AD-Wandler mit einer Frequenz im Bereich 1 kHz und die Koordinaten mit einer Frequenz im Bereich 10 Hz auszulesen. Evtl. kommen auch mal noch weitere Sensoren hinzu. Die Weiterverarbeitung soll in Form von n-Tupeln (Zeitstempel; AD-Wert; Koordinaten) erfolgen. Das Ganze soll auch unter Belastung des Rechners noch zuverlässig erfolgen. Die Speicherung der Rohdaten erfolgt dabei sinnvollerweise nicht als n-Tupel, sondern in einem Raster der Art:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;(t_{n,0},ad_{n,0},c_{n,0});\, (t_1,ad_1);\, (t_2,ad_2);\, ... (t_{n,i},ad_{n,i},c_{n,i});\, (t_{n+1},ad_{n+1});\, ... &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n=k*i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Koordinaten werden also nur aller k Zeitschritte auch wirklich ausgelesen und aufgeschrieben. Aus solch einem File kann für die Weiterverarbeitung wieder eine Liste mit kompletten n-Tupen erstellt werden. Dabei kann man die Koordinaten zwischen den Stützstellen interpolieren oder man lässt sie einfach konstant bis zum nächsten Messpunkt. Evtl. würde eine von beiden Varianten irgendwelche Statistiken stören. Die Rohdaten verursachen so weniger Last beim Schreiben und belegen weniger Speicherplatz als wenn immer ganze n-Tupel geschrieben werden müssten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Roh-Datenformat&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Die bei der Messung der integralen Signalintensität im 1420MHz-Band am Detektorausgang gesampelten Daten werden im AVR-ADC-Board zunächst in einem Ringpuffer einem gleitenden Mittel unterzogen. Jeweils ein über RS232 aquirierter Messwert ist also schon ein Mittel über eine (einstellbare) Puffergröße (16-32768) und somit auch mit einer Zeitkonstanten behaftet. Dieser Messwert soll zusammen mit einem Zeitstempel im ASCII-Format abgelegt werden. Zusätzlich werden die äquatorialen Koordinaten benötigt und eine Information, ob das Signal der Antenne oder dem Referenzkanal entstammt.&lt;br /&gt;
&lt;br /&gt;
Enthalten sein müssen:&lt;br /&gt;
&lt;br /&gt;
* Zeitstempel, Format: yyyy/MM/dd hh:mm:ss.s&lt;br /&gt;
* Äquatorialkoordinaten (RA/Dec), Format: HH.h DD.d&lt;br /&gt;
* Messwert in ADC-Counts, floating-point&lt;br /&gt;
* Schalterstatus Referenz (0 oder 1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daneben sollte ein weiterer, davon unabhängiger Prozess alle Sensorenwerte und andere periphere Daten in regelmäßigen Zeitabständen in einer Log-Datei speichern. Dazu gehören diverse Temperaturen, Spannungen, Ströme, andere Umweltsensoren und evtl. INDI-RT-spezifische Werte, wie Motorgeschwindigkeiten o.ä. aber auch Observablen des Steuerrechners, wie z.b. die aktuelle Präzision der ntp-gesteuerten Systemuhr. Die Identifikation und ggf. Korrelation zu den Hauptdaten erfolgt wieder durch Vergabe eines eindeutigen Zeitstempels.&lt;br /&gt;
Bsp.:&lt;br /&gt;
  #date time temp1 temp2 windsensor IMot1 IMot2 U1 U2 U3 U4 ntp-err&lt;br /&gt;
  2010/04/19 23:25:11.765235000 28.5 43.1 15 0 3.5 11.8 5.1 24.6 0.25 2.3&lt;br /&gt;
&lt;br /&gt;
Beispiel für Aufruf datataker:&lt;br /&gt;
  bin/datataker /dev/ttyS5&lt;br /&gt;
&lt;br /&gt;
Obige Zeile konnekted mit dem ADC und gibt die Daten mit timestamp auf stdout aus.&lt;br /&gt;
&lt;br /&gt;
Um den Zusammenhang zwischen gemessenen Intensitäten und Koordinaten auszugeben ist&lt;br /&gt;
&lt;br /&gt;
  macros/acquire&lt;br /&gt;
&lt;br /&gt;
aufzurufen. Dieses Script gibt in dieser Reihenfolge folgende Werte auf stdout aus:&lt;br /&gt;
timestamp ADC-Wert Azimut Höhe Stunde Deklination Controlertemperatur&lt;br /&gt;
&lt;br /&gt;
== Datenaufnahme ==&lt;br /&gt;
Um eine möglichst jitterarme Datenaufnahme zu gewährleisten scheint es sinvoll, die einzelnen Sensoren in jeweils einen eigenen Prozess oder Thread zu packen. Dann kann der sich in aller Genauigkeit um seinen Sensor kümmern und wird hoffentlich vom Betriebssystem richtig mit Zeitscheiben versorgt. Dabei benötigt man allerdings eine gemeinsame Zeitbasis mit ausreichender Genauigkeit.&lt;br /&gt;
&lt;br /&gt;
In [[Daten_Auswerten#Einzelwerte]] steht etwas von einem Ringpuffer der im DA vorhanden sei und dessen eigenständiger Messwertaufnahme in eben diesen Ringpuffer. Wie funktioniert das denn eigentlich?&lt;br /&gt;
&lt;br /&gt;
Ich stelle mir den prinzipiellen Ablauf so vor:&lt;br /&gt;
# zentrale Instanz übergibt Details wie Samplefrequenz, ... und den Startzeitpunkt an einzelne Messprozesse.&lt;br /&gt;
# Messprozesse warten auf Startzeitpunkt und legen dann los&lt;br /&gt;
# Messprozesse messen vor sich hin, in persönlichen großen Ringpuffer.&lt;br /&gt;
# zentrale Instanz holt sich ab und an aus den Ringpuffern die Daten die sie haben will und schreibt sie in ein File&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Prozesse ==&lt;br /&gt;
Die Kommunikation könnte man über Pipes, Fifos, Shared-Memory, Message-Queues, TCP (Sockets) machen, im Prinzip auch mit MPI.&lt;br /&gt;
&lt;br /&gt;
* MPI ist Mist, weil man dann immer ein MPI-System braucht&lt;br /&gt;
* Message Queues sind im Prinzip cool, praktisch aber viel zu kurz und für zu kleine Datenmengen gedacht (10 Messages a 8kB ist Standard unter Linux). Dafür soll das halt sehr schnell sein (im L1-Cache bleiben etc).&lt;br /&gt;
* Pipes, Fifos ist halt ein bisschen fummelig. TCP keine Ahnung&lt;br /&gt;
* SHMem ist eigentlich ziemlich ok. Man muss natürlich von Hand synchronisieren. Das ist eigentlich auch kein Ding weiter. Wenn man einmal Zugriff auf den gemeinsamen Speicherbereich hat, sollte das nicht schwieriger sein als mit OpenMP (s.u.).&lt;br /&gt;
&lt;br /&gt;
*[http://www.ecst.csuchico.edu/~beej/guide/ipc/mq.html Message Queues]&lt;br /&gt;
*[http://kirkwylie.blogspot.com/2008/10/posix-message-queues-useful-but-limited.html POSIX Message in Linux]&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Threads ==&lt;br /&gt;
Nachteil ist, dass die einzelnen Ausleseprozesse nicht gegeneinander geschützt sind. &lt;br /&gt;
=== OpenMP ===&lt;br /&gt;
Dafür gibt es die nahezu triviale Variante mit OpenMP. Der geringe Aufwand könnte die eher theoretischen Nachteile durchaus wieder wettmachen, finde ich.&lt;br /&gt;
Ich stelle mit das ungefähr so vor:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;omp.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int showAction; &lt;br /&gt;
 &lt;br /&gt;
 /* Das ist eine etwas missbräuchliche aber immer noch sehr einfache Verwendung&lt;br /&gt;
   von OpenMP zur Arbeit mit Threads. Auf alle Fälle ist es schön&lt;br /&gt;
   einfach. Evtl. müssen die Jobs das Lesen nicht in einer critical Section&lt;br /&gt;
   machen aber es wird hier nichts schaden.&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 int job1(void)&lt;br /&gt;
 {&lt;br /&gt;
  for(;;)&lt;br /&gt;
  {&lt;br /&gt;
 #pragma  critical&lt;br /&gt;
   int sAct=showAction;&lt;br /&gt;
   if (sAct&amp;amp;1) cout &amp;lt;&amp;lt; &amp;quot;1&amp;quot;;&lt;br /&gt;
   cout.flush();&lt;br /&gt;
   usleep(5000); // nominell 5 ms&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int job2(void)&lt;br /&gt;
 {&lt;br /&gt;
  for(;;)&lt;br /&gt;
  {&lt;br /&gt;
   #pragma  critical&lt;br /&gt;
   int sAct=showAction;&lt;br /&gt;
   if (sAct&amp;amp;2) cout &amp;lt;&amp;lt; &amp;quot;2&amp;quot;;&lt;br /&gt;
   cout.flush();&lt;br /&gt;
   usleep(5000); // 5 ms&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int job3(void)&lt;br /&gt;
 {&lt;br /&gt;
  for(;;)&lt;br /&gt;
  {&lt;br /&gt;
   #pragma  critical&lt;br /&gt;
   int sAct=showAction;&lt;br /&gt;
   if (sAct&amp;amp;4) cout &amp;lt;&amp;lt; &amp;quot;3&amp;quot;;&lt;br /&gt;
   cout.flush();&lt;br /&gt;
   usleep(5000); // 5 ms&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
  int nthreads, tid;&lt;br /&gt;
  omp_set_nested(1);&lt;br /&gt;
 &lt;br /&gt;
 /* Fork a team of threads with each thread having a private tid variable */&lt;br /&gt;
 #pragma omp parallel private(tid) num_threads (4)&lt;br /&gt;
   {&lt;br /&gt;
 &lt;br /&gt;
   /* Obtain and print thread id */&lt;br /&gt;
   tid = omp_get_thread_num();&lt;br /&gt;
   printf(&amp;quot;Hello World from thread = %d\n&amp;quot;, tid);&lt;br /&gt;
   switch (tid)&lt;br /&gt;
   {&lt;br /&gt;
    case 1: job1(); break;&lt;br /&gt;
    case 2: job2(); break;&lt;br /&gt;
    case 3: job3(); break;&lt;br /&gt;
   }&lt;br /&gt;
   /* Only master thread does this */&lt;br /&gt;
   if (tid == 0)&lt;br /&gt;
   {&lt;br /&gt;
    nthreads = omp_get_num_threads();&lt;br /&gt;
    printf(&amp;quot;Number of threads = %d\n&amp;quot;, nthreads);&lt;br /&gt;
   }&lt;br /&gt;
   for(;;) // master thread verteilt die aufgaben&lt;br /&gt;
   {&lt;br /&gt;
 #pragma critical&lt;br /&gt;
    showAction=rand();&lt;br /&gt;
    usleep(100000); // nominell 100 ms&lt;br /&gt;
   }&lt;br /&gt;
  }  /* All threads join master thread and terminate */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* [http://cclh61.chm.tu-dresden.de/edv/manuals/xlc5/compiler/ref/ruompcrt.htm critical section]&lt;br /&gt;
&lt;br /&gt;
== Synchronisation ==&lt;br /&gt;
Mit den Pragmas von OpenMP kann man eine Synchronisation erreichen. Ein Thread wartet auf andere Threads, ich würde denken aktiv. Für Zwecke des Datensampelns sind die meisten Threads fast immer in Wartestellung. OpenMP bietet die Möglichkeit, Locks zu setzen. Darauf aufbauend könnte man eine sinnvolle Datenübergabe bauen und dazwischen die Threads schlafen legen.&lt;br /&gt;
Das stelle ich mir so vor:&lt;br /&gt;
&lt;br /&gt;
= Systemtechnik und Zeitkonstanten =&lt;br /&gt;
&lt;br /&gt;
== Kompendium der Usage ==&lt;br /&gt;
&lt;br /&gt;
* Vergesslichkeit etc. zu bekämpfen ...&lt;br /&gt;
** Allanplot: root # .L allanplot.C++ # allenplot()   ... tatsächlich mit e, nicht a&lt;br /&gt;
** Macros: (zB) &lt;br /&gt;
*** &amp;lt;makro&amp;gt;.C (zuvor &amp;lt;file&amp;gt; einsetzen): # root -l &amp;lt;makro&amp;gt;.C &lt;br /&gt;
*** &#039;&#039;&#039;oder&#039;&#039;&#039; # root -&amp;gt; .x &amp;lt;makro.C&lt;br /&gt;
** 2dfft siehe Changeset  497 for  trunk&lt;br /&gt;
&lt;br /&gt;
== Verfahren bei zeitkonstanten Signalen ==&lt;br /&gt;
&lt;br /&gt;
Vorbehaltlich einer grafischen Darstellung. Die Einzelschritte sind für eine rise time gerechnet, die eine Amplitude von 90% auf der Flanke ergibt [[http://de.wikipedia.org/wiki/Anstiegs-_und_Abfallzeit]]. Keine Totzeiten eingerechnet.&lt;br /&gt;
&lt;br /&gt;
* analoge Tiefpassfilterung resp. Integration im Detektor: &amp;lt;math&amp;gt;\tau_{Det}&amp;lt;/math&amp;gt;&lt;br /&gt;
** 400ns für einen Anstieg von 10% auf 90% gem. Datenblatt AD8307 &lt;br /&gt;
&lt;br /&gt;
* zeit- und wertdiskrete Tiefpassfilterung im Analog-Digital-Konverter (ADC): &amp;lt;math&amp;gt;\tau_{ADC}&amp;lt;/math&amp;gt;&lt;br /&gt;
** Der ADC sampelt mit 20kHz, d.h. der Puffer ist in 50ms einmal durchgeschoben, je nach Firmware kann sich ein Faktor 2 oder gar 4 zu diesem Wert ergeben. Also 10...200ms &lt;br /&gt;
&lt;br /&gt;
* zeit- und wertdiskrete Tiefpassfilterung (resp. Integration) per Software (precision:double): &amp;lt;math&amp;gt;\tau_{SW}&amp;lt;/math&amp;gt;&lt;br /&gt;
** (Beispiel). 50 Samples von 2,5 Dauer eines Timestamps, sind (hier) 75s&lt;br /&gt;
&lt;br /&gt;
Die 0,9-Zeitkonstante ergibt sich hier zu &amp;lt;math&amp;gt;\sqrt{\tau_{Det}^2+\tau_{ADC}^2+\tau_{SW}^2}\approx76s&amp;lt;/math&amp;gt;. Es ist ersichtlich dass die Zeitkonstante via Suche nach dem rms-Minimum ganz überwiegend von der Software bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
* Der Schwenk zum nächsten Punkt dauert ebenfalls mehrere Sekunden, sind hier alles in allem 80s.&lt;br /&gt;
&lt;br /&gt;
* Unterstellt man einmal, dass &lt;br /&gt;
** die 5° breite &amp;quot;ideale&amp;quot; Keule mit 3dB Abfall in 1/5-Schritten noch akzeptable Werte bringt (sind 1°) und&lt;br /&gt;
** ein 1h in RA / 15° in Dec grosses Feld interessiert, so wären &lt;br /&gt;
** für diesen Scan 5h anzusetzen.&lt;br /&gt;
** ideale Wetterbedingungen vorausgesetzt&lt;br /&gt;
&lt;br /&gt;
* Abhängig von der Deklination der Quelle sind hier Zu- und Abschläge möglich. Horizontprobleme, Messungen unter 30° Elevation sind in der Regel wertlos oder nicht möglich.&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
	<entry>
		<id>https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Daten_Auslesen&amp;diff=2490</id>
		<title>Daten Auslesen</title>
		<link rel="alternate" type="text/html" href="https://radioastronomie.sternwarte-radebeul.de/radiowiki/index.php?title=Daten_Auslesen&amp;diff=2490"/>
		<updated>2010-11-19T20:42:51Z</updated>

		<summary type="html">&lt;p&gt;Kdsachse: /* Roh-Datenformat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Paralleles Auslesen von diversen Sensoren und Zusammenbauen der Daten=&lt;br /&gt;
== Rohdatenspeicherung ==&lt;br /&gt;
Soweit ich verstanden habe, besteht die Aufgabe darin, den AD-Wandler mit einer Frequenz im Bereich 1 kHz und die Koordinaten mit einer Frequenz im Bereich 10 Hz auszulesen. Evtl. kommen auch mal noch weitere Sensoren hinzu. Die Weiterverarbeitung soll in Form von n-Tupeln (Zeitstempel; AD-Wert; Koordinaten) erfolgen. Das Ganze soll auch unter Belastung des Rechners noch zuverlässig erfolgen. Die Speicherung der Rohdaten erfolgt dabei sinnvollerweise nicht als n-Tupel, sondern in einem Raster der Art:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;(t_{n,0},ad_{n,0},c_{n,0});\, (t_1,ad_1);\, (t_2,ad_2);\, ... (t_{n,i},ad_{n,i},c_{n,i});\, (t_{n+1},ad_{n+1});\, ... &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n=k*i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Koordinaten werden also nur aller k Zeitschritte auch wirklich ausgelesen und aufgeschrieben. Aus solch einem File kann für die Weiterverarbeitung wieder eine Liste mit kompletten n-Tupen erstellt werden. Dabei kann man die Koordinaten zwischen den Stützstellen interpolieren oder man lässt sie einfach konstant bis zum nächsten Messpunkt. Evtl. würde eine von beiden Varianten irgendwelche Statistiken stören. Die Rohdaten verursachen so weniger Last beim Schreiben und belegen weniger Speicherplatz als wenn immer ganze n-Tupel geschrieben werden müssten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Roh-Datenformat&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Die bei der Messung der integralen Signalintensität im 1420MHz-Band am Detektorausgang gesampelten Daten werden im AVR-ADC-Board zunächst in einem Ringpuffer einem gleitenden Mittel unterzogen. Jeweils ein über RS232 aquirierter Messwert ist also schon ein Mittel über eine (einstellbare) Puffergröße (16-32768) und somit auch mit einer Zeitkonstanten behaftet. Dieser Messwert soll zusammen mit einem Zeitstempel im ASCII-Format abgelegt werden. Zusätzlich werden die äquatorialen Koordinaten benötigt und eine Information, ob das Signal der Antenne oder dem Referenzkanal entstammt.&lt;br /&gt;
&lt;br /&gt;
Enthalten sein müssen:&lt;br /&gt;
&lt;br /&gt;
* Zeitstempel, Format: yyyy/MM/dd hh:mm:ss.s&lt;br /&gt;
* Äquatorialkoordinaten (RA/Dec), Format: HH.h DD.d&lt;br /&gt;
* Messwert in ADC-Counts, floating-point&lt;br /&gt;
* Schalterstatus Referenz (0 oder 1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daneben sollte ein weiterer, davon unabhängiger Prozess alle Sensorenwerte und andere periphere Daten in regelmäßigen Zeitabständen in einer Log-Datei speichern. Dazu gehören diverse Temperaturen, Spannungen, Ströme, andere Umweltsensoren und evtl. INDI-RT-spezifische Werte, wie Motorgeschwindigkeiten o.ä. aber auch Observablen des Steuerrechners, wie z.b. die aktuelle Präzision der ntp-gesteuerten Systemuhr. Die Identifikation und ggf. Korrelation zu den Hauptdaten erfolgt wieder durch Vergabe eines eindeutigen Zeitstempels.&lt;br /&gt;
Bsp.:&lt;br /&gt;
  #date time temp1 temp2 windsensor IMot1 IMot2 U1 U2 U3 U4 ntp-err&lt;br /&gt;
  2010/04/19 23:25:11.765235000 28.5 43.1 15 0 3.5 11.8 5.1 24.6 0.25 2.3&lt;br /&gt;
&lt;br /&gt;
Beispiel für Aufruf datataker:&lt;br /&gt;
  ./datataker /dev/ttyS5&lt;br /&gt;
&lt;br /&gt;
Obige Zeile konnekted mit dem ADC und gibt die Daten mit timestamp auf stdout aus.&lt;br /&gt;
&lt;br /&gt;
== Datenaufnahme ==&lt;br /&gt;
Um eine möglichst jitterarme Datenaufnahme zu gewährleisten scheint es sinvoll, die einzelnen Sensoren in jeweils einen eigenen Prozess oder Thread zu packen. Dann kann der sich in aller Genauigkeit um seinen Sensor kümmern und wird hoffentlich vom Betriebssystem richtig mit Zeitscheiben versorgt. Dabei benötigt man allerdings eine gemeinsame Zeitbasis mit ausreichender Genauigkeit.&lt;br /&gt;
&lt;br /&gt;
In [[Daten_Auswerten#Einzelwerte]] steht etwas von einem Ringpuffer der im DA vorhanden sei und dessen eigenständiger Messwertaufnahme in eben diesen Ringpuffer. Wie funktioniert das denn eigentlich?&lt;br /&gt;
&lt;br /&gt;
Ich stelle mir den prinzipiellen Ablauf so vor:&lt;br /&gt;
# zentrale Instanz übergibt Details wie Samplefrequenz, ... und den Startzeitpunkt an einzelne Messprozesse.&lt;br /&gt;
# Messprozesse warten auf Startzeitpunkt und legen dann los&lt;br /&gt;
# Messprozesse messen vor sich hin, in persönlichen großen Ringpuffer.&lt;br /&gt;
# zentrale Instanz holt sich ab und an aus den Ringpuffern die Daten die sie haben will und schreibt sie in ein File&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Prozesse ==&lt;br /&gt;
Die Kommunikation könnte man über Pipes, Fifos, Shared-Memory, Message-Queues, TCP (Sockets) machen, im Prinzip auch mit MPI.&lt;br /&gt;
&lt;br /&gt;
* MPI ist Mist, weil man dann immer ein MPI-System braucht&lt;br /&gt;
* Message Queues sind im Prinzip cool, praktisch aber viel zu kurz und für zu kleine Datenmengen gedacht (10 Messages a 8kB ist Standard unter Linux). Dafür soll das halt sehr schnell sein (im L1-Cache bleiben etc).&lt;br /&gt;
* Pipes, Fifos ist halt ein bisschen fummelig. TCP keine Ahnung&lt;br /&gt;
* SHMem ist eigentlich ziemlich ok. Man muss natürlich von Hand synchronisieren. Das ist eigentlich auch kein Ding weiter. Wenn man einmal Zugriff auf den gemeinsamen Speicherbereich hat, sollte das nicht schwieriger sein als mit OpenMP (s.u.).&lt;br /&gt;
&lt;br /&gt;
*[http://www.ecst.csuchico.edu/~beej/guide/ipc/mq.html Message Queues]&lt;br /&gt;
*[http://kirkwylie.blogspot.com/2008/10/posix-message-queues-useful-but-limited.html POSIX Message in Linux]&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Threads ==&lt;br /&gt;
Nachteil ist, dass die einzelnen Ausleseprozesse nicht gegeneinander geschützt sind. &lt;br /&gt;
=== OpenMP ===&lt;br /&gt;
Dafür gibt es die nahezu triviale Variante mit OpenMP. Der geringe Aufwand könnte die eher theoretischen Nachteile durchaus wieder wettmachen, finde ich.&lt;br /&gt;
Ich stelle mit das ungefähr so vor:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;omp.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int showAction; &lt;br /&gt;
 &lt;br /&gt;
 /* Das ist eine etwas missbräuchliche aber immer noch sehr einfache Verwendung&lt;br /&gt;
   von OpenMP zur Arbeit mit Threads. Auf alle Fälle ist es schön&lt;br /&gt;
   einfach. Evtl. müssen die Jobs das Lesen nicht in einer critical Section&lt;br /&gt;
   machen aber es wird hier nichts schaden.&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 int job1(void)&lt;br /&gt;
 {&lt;br /&gt;
  for(;;)&lt;br /&gt;
  {&lt;br /&gt;
 #pragma  critical&lt;br /&gt;
   int sAct=showAction;&lt;br /&gt;
   if (sAct&amp;amp;1) cout &amp;lt;&amp;lt; &amp;quot;1&amp;quot;;&lt;br /&gt;
   cout.flush();&lt;br /&gt;
   usleep(5000); // nominell 5 ms&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int job2(void)&lt;br /&gt;
 {&lt;br /&gt;
  for(;;)&lt;br /&gt;
  {&lt;br /&gt;
   #pragma  critical&lt;br /&gt;
   int sAct=showAction;&lt;br /&gt;
   if (sAct&amp;amp;2) cout &amp;lt;&amp;lt; &amp;quot;2&amp;quot;;&lt;br /&gt;
   cout.flush();&lt;br /&gt;
   usleep(5000); // 5 ms&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int job3(void)&lt;br /&gt;
 {&lt;br /&gt;
  for(;;)&lt;br /&gt;
  {&lt;br /&gt;
   #pragma  critical&lt;br /&gt;
   int sAct=showAction;&lt;br /&gt;
   if (sAct&amp;amp;4) cout &amp;lt;&amp;lt; &amp;quot;3&amp;quot;;&lt;br /&gt;
   cout.flush();&lt;br /&gt;
   usleep(5000); // 5 ms&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
  int nthreads, tid;&lt;br /&gt;
  omp_set_nested(1);&lt;br /&gt;
 &lt;br /&gt;
 /* Fork a team of threads with each thread having a private tid variable */&lt;br /&gt;
 #pragma omp parallel private(tid) num_threads (4)&lt;br /&gt;
   {&lt;br /&gt;
 &lt;br /&gt;
   /* Obtain and print thread id */&lt;br /&gt;
   tid = omp_get_thread_num();&lt;br /&gt;
   printf(&amp;quot;Hello World from thread = %d\n&amp;quot;, tid);&lt;br /&gt;
   switch (tid)&lt;br /&gt;
   {&lt;br /&gt;
    case 1: job1(); break;&lt;br /&gt;
    case 2: job2(); break;&lt;br /&gt;
    case 3: job3(); break;&lt;br /&gt;
   }&lt;br /&gt;
   /* Only master thread does this */&lt;br /&gt;
   if (tid == 0)&lt;br /&gt;
   {&lt;br /&gt;
    nthreads = omp_get_num_threads();&lt;br /&gt;
    printf(&amp;quot;Number of threads = %d\n&amp;quot;, nthreads);&lt;br /&gt;
   }&lt;br /&gt;
   for(;;) // master thread verteilt die aufgaben&lt;br /&gt;
   {&lt;br /&gt;
 #pragma critical&lt;br /&gt;
    showAction=rand();&lt;br /&gt;
    usleep(100000); // nominell 100 ms&lt;br /&gt;
   }&lt;br /&gt;
  }  /* All threads join master thread and terminate */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* [http://cclh61.chm.tu-dresden.de/edv/manuals/xlc5/compiler/ref/ruompcrt.htm critical section]&lt;br /&gt;
&lt;br /&gt;
== Synchronisation ==&lt;br /&gt;
Mit den Pragmas von OpenMP kann man eine Synchronisation erreichen. Ein Thread wartet auf andere Threads, ich würde denken aktiv. Für Zwecke des Datensampelns sind die meisten Threads fast immer in Wartestellung. OpenMP bietet die Möglichkeit, Locks zu setzen. Darauf aufbauend könnte man eine sinnvolle Datenübergabe bauen und dazwischen die Threads schlafen legen.&lt;br /&gt;
Das stelle ich mir so vor:&lt;br /&gt;
&lt;br /&gt;
= Systemtechnik und Zeitkonstanten =&lt;br /&gt;
&lt;br /&gt;
== Kompendium der Usage ==&lt;br /&gt;
&lt;br /&gt;
* Vergesslichkeit etc. zu bekämpfen ...&lt;br /&gt;
** Allanplot: root # .L allanplot.C++ # allenplot()   ... tatsächlich mit e, nicht a&lt;br /&gt;
** Macros: (zB) &lt;br /&gt;
*** &amp;lt;makro&amp;gt;.C (zuvor &amp;lt;file&amp;gt; einsetzen): # root -l &amp;lt;makro&amp;gt;.C &lt;br /&gt;
*** &#039;&#039;&#039;oder&#039;&#039;&#039; # root -&amp;gt; .x &amp;lt;makro.C&lt;br /&gt;
** 2dfft siehe Changeset  497 for  trunk&lt;br /&gt;
&lt;br /&gt;
== Verfahren bei zeitkonstanten Signalen ==&lt;br /&gt;
&lt;br /&gt;
Vorbehaltlich einer grafischen Darstellung. Die Einzelschritte sind für eine rise time gerechnet, die eine Amplitude von 90% auf der Flanke ergibt [[http://de.wikipedia.org/wiki/Anstiegs-_und_Abfallzeit]]. Keine Totzeiten eingerechnet.&lt;br /&gt;
&lt;br /&gt;
* analoge Tiefpassfilterung resp. Integration im Detektor: &amp;lt;math&amp;gt;\tau_{Det}&amp;lt;/math&amp;gt;&lt;br /&gt;
** 400ns für einen Anstieg von 10% auf 90% gem. Datenblatt AD8307 &lt;br /&gt;
&lt;br /&gt;
* zeit- und wertdiskrete Tiefpassfilterung im Analog-Digital-Konverter (ADC): &amp;lt;math&amp;gt;\tau_{ADC}&amp;lt;/math&amp;gt;&lt;br /&gt;
** Der ADC sampelt mit 20kHz, d.h. der Puffer ist in 50ms einmal durchgeschoben, je nach Firmware kann sich ein Faktor 2 oder gar 4 zu diesem Wert ergeben. Also 10...200ms &lt;br /&gt;
&lt;br /&gt;
* zeit- und wertdiskrete Tiefpassfilterung (resp. Integration) per Software (precision:double): &amp;lt;math&amp;gt;\tau_{SW}&amp;lt;/math&amp;gt;&lt;br /&gt;
** (Beispiel). 50 Samples von 2,5 Dauer eines Timestamps, sind (hier) 75s&lt;br /&gt;
&lt;br /&gt;
Die 0,9-Zeitkonstante ergibt sich hier zu &amp;lt;math&amp;gt;\sqrt{\tau_{Det}^2+\tau_{ADC}^2+\tau_{SW}^2}\approx76s&amp;lt;/math&amp;gt;. Es ist ersichtlich dass die Zeitkonstante via Suche nach dem rms-Minimum ganz überwiegend von der Software bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
* Der Schwenk zum nächsten Punkt dauert ebenfalls mehrere Sekunden, sind hier alles in allem 80s.&lt;br /&gt;
&lt;br /&gt;
* Unterstellt man einmal, dass &lt;br /&gt;
** die 5° breite &amp;quot;ideale&amp;quot; Keule mit 3dB Abfall in 1/5-Schritten noch akzeptable Werte bringt (sind 1°) und&lt;br /&gt;
** ein 1h in RA / 15° in Dec grosses Feld interessiert, so wären &lt;br /&gt;
** für diesen Scan 5h anzusetzen.&lt;br /&gt;
** ideale Wetterbedingungen vorausgesetzt&lt;br /&gt;
&lt;br /&gt;
* Abhängig von der Deklination der Quelle sind hier Zu- und Abschläge möglich. Horizontprobleme, Messungen unter 30° Elevation sind in der Regel wertlos oder nicht möglich.&lt;/div&gt;</summary>
		<author><name>Kdsachse</name></author>
	</entry>
</feed>