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

<channel>
	<title>Sternico: Inside</title>
	<atom:link href="http://blog.sternico.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sternico.de</link>
	<description>Sternico Blog</description>
	<pubDate>Mon, 05 Jul 2010 02:11:01 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Sternico MAT mit Windows Azure</title>
		<link>http://blog.sternico.de/2010/06/sternico-mat-mit-windows-azure/</link>
		<comments>http://blog.sternico.de/2010/06/sternico-mat-mit-windows-azure/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 13:31:35 +0000</pubDate>
		<dc:creator>Christian Klinge</dc:creator>
		
		<category><![CDATA[Nicht kategorisiert]]></category>

		<guid isPermaLink="false">http://blog.sternico.de/?p=105</guid>
		<description><![CDATA[Die Firma Sternico hat mit der Software Plattform CoMaP und dem Modul MAT eine Software entwickelt, die sich ideal für eine Portierung auf Windows Azure eignet. In diesem Artikel werden zunächst CoMaP und MAT vorgestellt. Im Anschluss wird kurz auf Windows Azure eingegangen und zum Schluss wird eine Implementierungsmöglichkeit von CoMaP und MAT auf Windows [...]]]></description>
			<content:encoded><![CDATA[<p>Die Firma Sternico hat mit der Software Plattform CoMaP und dem Modul MAT eine Software entwickelt, die sich ideal für eine Portierung auf Windows Azure eignet. In diesem Artikel werden zunächst CoMaP und MAT vorgestellt. Im Anschluss wird kurz auf Windows Azure eingegangen und zum Schluss wird eine Implementierungsmöglichkeit von CoMaP und MAT auf Windows Azure Basis erläutert und die Vorteile, die sich daraus ergeben, dargestellt.</p>
<p><span id="more-105"></span></p>
<p>Damit schließt sich dieser Artikel an die <a href="http://blogs.msdn.com/b/softwarehersteller/archive/2010/05/17/die-msdn-blog-parade-geht-in-die-zweite-runde-mitmachen-und-gewinnen.aspx">MSDN-Blogparade </a>an.</p>
<h4>CoMaP (Coorperated Management Platform)</h4>
<p>Die Corporate Management Platform (CoMaP) ist eine Softwareapplikation zur Unterstützung der Prozesse und Aufgaben im industriellen Projektgeschäft. Die Plattform CoMaP beinhaltet unterschiedliche Module, die jeweils spezifische Funktionalitäten und Prozesse aus dem Projektgeschäft abdecken. Je nach Anforderung können diese Module beliebig kombiniert werden.</p>
<p>CoMaP selbst verwaltet für seine Module die zentralen Basisdaten wie beispielsweise die Projekte, die Benutzer und die Abteilungen des Unternehmens. Diese Daten können entweder in CoMaP durch die Benutzer eingegeben und gepflegt oder automatisiert mit übergeordneten Systemen wie beispielsweise SAP abgeglichen werden.</p>
<h4>MAT (Manufacturer Acceptances Tool)</h4>
<p>
	Das Manufacturer Acceptances Tool (MAT) ist eine Software, die bei Abnahmen und Qualitätskontrollen in projektbasierten Produktionsprozessen zum Einsatz kommt.<br />
	MAT ist das erste Modul, das auf CoMaP aufsetzt. Weitere Module sind bereits in der Entwicklung, zum Beispiel das Modul WPC (Work Package Controlling)
</p>
<p>
	Somit erreichen Sie Ihre unternehmerischen Ziele Reduktion von Fertigungskosten und Sicherung einer hohen Qualität.<br />
	MAT bildet die gesamte Prozesskette von Mangelaufnahme, -behebung, -analyse und Maßnahmencontrolling ab. Hierdurch entsteht, wie in der Abbildung  dargestellt, ein geschlossener Kreislauf, der einen kontinuierlichen Verbesserungsprozess fördert.
</p>
<p style="text-align: center;"><img src="http://blog.sternico.de/wp-content/uploads/2010/06/mat_process.png" alt="MAT Prozess" /></p>
<p>
	In sämtlichen Prozessschritten können die aufgenommenen Daten durch Fotos, Dateianhänge und textuelle Beschreibungen ergänzt werden.
</p>
<h4>Technischer Aufbau von CoMap/MAT</h4>
<p>Das Softwaresystem ist in einer 3 tier Architektur entwickelt wurden. Dies hat den Vorteil, dass die Datenhaltung, die Datenverarbeitung und die Datenvisualisierung klar voneinander getrennt sind.<br />
Durch die 3-Schichten  Architektur ist eine effektive Lastenverteilung bei großem Datenaufkommen gewährleistet.</p>
<p>Die Kommunikation zwischen der Anwendungsschicht und der Darstellungsschicht erfolgt mittels WCF (Windows Communication Foundation) welche über eine verschlüsselte https-Verbindung mit dem Client kommuniziert.<br />
Die Anwendungsschicht ist auf einem Microsoft Internet Information Server (MS IIS) gehostet, der die Zentrale Verwaltung und Aufbereitung der übernimmt.</p>
<p>Die Benutzeroberflächen der Windowsclients sind mit dem Windows Presentation Foundation (WPF) Framework entwickelt wurden.<br />
Die Mobilen Clients greifen auf das Windows Mobile Compact Framework zu.</p>
<p>Als Datenbank sind Microsoft SQL Server sowie Oracle SQL Server einsetzbar.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/mat_architektur_big.png" target="_blank"><br />
	<img class="alignnone size-medium wp-image-69" src="http://blog.sternico.de/wp-content/uploads/2010/06/mat_architektur.png" alt="MAT Architektur" /><br />
</a></p>
<h4>Windows Azure</h4>
<p>Windows Azure ist die Cloud Computing Plattform von Microsoft. Windows Azure erlaubt es Unternehmen und IT-Dienstleistern sowie Softwareherstellern den Zugriff auf Speicherplatz, Webdienste und Webanwendungen.<br />
Durch die hohe Verfügbarkeit der Microsoft Rechenzentren ist gewährleistet, dass Sie immer Zugriff auf Ihre Daten haben.</p>
<p>Ein weiterer Vorteil von Windows Azure ist, dass es einfach und unkompliziert möglich ist, zusätzliche Rechenleistung hinzuzufügen, falls die Anforderungen sich vergrößern. Dadurch passt sich die Rechenleistung von Windows Azure exakt an die Kundenspezifischen Anforderungen an.</p>
<p>Durch das standardisierte Hostingmodell von Microsoft Azure können Anwendungen und Dienste problemlos zur Verfügung gestellt werden, ohne dass man sich selbst um das Hosting, Serververfügbarkeit, Skalierung, etc. kümmern muss. Außerdem kann man somit auf die Erfahrung und Zuverlässigkeit von Microsoft bauen.</p>
<h4>MAT auf Windows Azure</h4>
<p>Da MAT auch eine mobile Datenerfassung über Smartphones /Portable PC&#8217;s via UMTS und WLAN unterstützt, bietet sich ein zuverlässiges und performantes  System wie Windows Azure an. Da bei der Mangelerfassung bei der industriellen Fertigung enorm viele Daten anfallen ist es möglich die Rechenleistung des Datenbankservers dynamisch anzupassen um auch für die Zukunft gerüstet zu sein.</p>
<p>Ferner bietet Microsoft SQL Azure einen cloudbasierten relationalen Datenbankservice, der auf Microsoft SQL Server Technologien aufbaut. Da Microsoft SQL Azure Transactions unterstütz ist die Datenvollständigkeit und die Datenkonsistenz auch bei schlechter Mobilfunkverbindung des MAT-Clients gewährleistet.</p>
<p>Bei der Mangelaufnahme in der industriellen Fertigung kommt es nicht selten vor, dass die Mängel an verschiedenen Standorten aufgenommen werden. Daher ist es auch für eine gute Mangelverfolgung sowie ein gutes Reporting vorteilhaft, wenn die Daten zentral gehalten werden. Durch das Hosting bei Microsoft werden somit Redundanzen vermieden.</p>
<h4>Stichworte</h4>
<p>C#, WPF, WCF, .NET, UMTS, SQL, MAT, CoMaP, Windows Azure</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sternico.de/2010/06/sternico-mat-mit-windows-azure/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Aufbau einer Tooldatenbank im Rahmen einer Toolharmonisierung</title>
		<link>http://blog.sternico.de/2010/06/aufbau-einer-tooldatenbank-im-rahmen-einer-toolharmonisierung/</link>
		<comments>http://blog.sternico.de/2010/06/aufbau-einer-tooldatenbank-im-rahmen-einer-toolharmonisierung/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 10:37:09 +0000</pubDate>
		<dc:creator>Christian Wirthsmann</dc:creator>
		
		<category><![CDATA[Projekte &amp; Referenzen]]></category>

		<guid isPermaLink="false">http://blog.sternico.de/?p=103</guid>
		<description><![CDATA[Die Siemens AG Transportation Systems Braunschweig schafft eine strukturierte und homogene Softwarelandschaft mit Hilfe einer Tooldatenbank und automatisierten Email-Prozessen.
Projektbeschreibung
Bei der Siemens AG Transportation Systems Braunschweig wird im Rahmen des Projekts &#8220;Toolharmonisierung&#8221; eine strukturierte und homogene Softwarelandschaft geschaffen. Ziel der Toolharmonisierung ist es, für sämtliche Prozesse und Anwendungsfälle einheitliche Softwareprodukte bzw. Tools zu definieren.Für die technische [...]]]></description>
			<content:encoded><![CDATA[<p>Die Siemens AG Transportation Systems Braunschweig schafft eine strukturierte und homogene Softwarelandschaft mit Hilfe einer Tooldatenbank und automatisierten Email-Prozessen.<span id="more-103"></span></p>
<p><strong>Projektbeschreibung<br />
</strong>Bei der Siemens AG Transportation Systems Braunschweig wird im Rahmen des Projekts &#8220;Toolharmonisierung&#8221; eine strukturierte und homogene Softwarelandschaft geschaffen. Ziel der Toolharmonisierung ist es, für sämtliche Prozesse und Anwendungsfälle einheitliche Softwareprodukte bzw. Tools zu definieren.Für die technische Unterstützung des Projekts wurde das Teilprojekt &#8220;Tooldatenbank&#8221; geschaffen, für das die Sternico die Teilprojektleitung übernommen hat und die Umsetzung sowie Betreuung durchführt.</p>
<p>Das Teilprojekt umfasst die Datenbank selbst, sowie Clientapplikationen mit deren Hilfe Projektmitglieder die Softwareinstallationen am Standort Braunschweig einsehen, strukturieren und bewerten können. Über ein Intranetportal werden bestimmte Teile dieser Informationen den Mitarbeitern des Standorts ebenfalls zur Verfügung gestellt. Als weitere Kernfunktionalität wurde ein anonymer und automatisierter Email-Prozess implementiert, der Anwender darauf hinweist, bestimmte Softwareinstallationen zu migrieren oder zu deinstallieren.</p>
<p>Dieser Email-Prozess basiert auf den Daten der Tooldatenbank und der durch das Projektteam darin vorgenommenen Strukturierung.Die Tooldatenbank basiert auf einem Microsoft SQL Server 2005 und verwaltet ca. 10.000 Geräte mit knapp einer Million installierten Programmen. Für tägliche Serviceroutinen und Datenschnittstellen wurden SQL Server Integrated Services (SSIS) verwendet. Serverseitige Routinen wurden in T-SQL- und C#- &#8220;Stored Procedures&#8221; und &#8220;User Defined Functions&#8221; realisiert. Bei den Clientanwendungen handelt es sich um .NET 2.0 Anwendungen, die in C# entwickelt wurden.</p>
<p>Das Webfrontend wurde mittels Adobe ColdFusion umgesetzt und in das vorliegende Content Management System integriert.  Das Projekt Toolharmonisierung führte zu einer deutlichen Senkung der IT-Kosten, da Ausfallzeiten von Arbeitsplatzrechnern und Aufwände durch die IT-Hotline reduziert, Arbeitszeiten aufgrund von einheitlichen Formaten verkürzt und Synergien durch Vereinheitlichung von Prozessen erzielt wurden. Neben der Kostensenkung trägt die Toolharmonisierung zudem erheblich zu einer Verbesserung der IT-Sicherheit bei.</p>
<p><strong>Stichworte<br />
</strong>.NET, C#, SSIS SQL Server 2005, Stored Procedures, ColdFusion,<br />
Content Management</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sternico.de/2010/06/aufbau-einer-tooldatenbank-im-rahmen-einer-toolharmonisierung/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Senkung der Energiekosten durch bedarfsgerechtes Schalten</title>
		<link>http://blog.sternico.de/2010/06/senkung-der-energiekosten-durch-bedarfsgerechtes-schalten/</link>
		<comments>http://blog.sternico.de/2010/06/senkung-der-energiekosten-durch-bedarfsgerechtes-schalten/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 10:35:06 +0000</pubDate>
		<dc:creator>Christian Wirthsmann</dc:creator>
		
		<category><![CDATA[Projekte &amp; Referenzen]]></category>

		<guid isPermaLink="false">http://blog.sternico.de/?p=102</guid>
		<description><![CDATA[Bei der MAN Nutzfahrzeuge AG in Salzgitter werden Verbraucher über ein zentrales Automatisierungssystem bedarfsgerecht geschaltet. Störmeldungen von Anlagen werden über das gleiche System zentral gesammelt und individuell weitergeleitet.
Projektbeschreibung
Die MAN Nutzfahrzeuge AG und die NEOMAN Bus GmbH beschäftigen am Standort Salzgitter ca. 3000 Mitarbeiter. Der Standort erstreckt sich über eine Fläche von ca. 700.000 m². Um [...]]]></description>
			<content:encoded><![CDATA[<p>Bei der MAN Nutzfahrzeuge AG in Salzgitter werden Verbraucher über ein zentrales Automatisierungssystem bedarfsgerecht geschaltet. Störmeldungen von Anlagen werden über das gleiche System zentral gesammelt und individuell weitergeleitet.<span id="more-102"></span></p>
<p><strong>Projektbeschreibung<br />
</strong>Die MAN Nutzfahrzeuge AG und die NEOMAN Bus GmbH beschäftigen am Standort Salzgitter ca. 3000 Mitarbeiter. Der Standort erstreckt sich über eine Fläche von ca. 700.000 m². Um die Energiekosten des Standorts zu senken, wurde ein System zum zentralen sowie zeit- und bedarfsgesteuerten Schalten der Außen- und Hallenbeleuchtung, Großanlagen, Ventilatoren, Pumpen, Kompressoren und Heizungen geschaffen. Das hierfür aufgebaute Netzwerk wurde zudem für die Bereitstellung eines flächendeckenden  Systems zur Übermittlung von Störmeldungen genutzt.Kern des Systems bilden eine Siemens Simatic S7-400 SPS sowie ein Simatic WinCC Rechner. Über die Oberfläche des WinCC Programms können beliebige Zeitpläne angelegt und Ein- und Ausschaltzeiten definiert werden. An diese Zeitpläne können anschließend Verbraucher gekoppelt werden.</p>
<p>Die vorgenommenen Einstellungen werden in den korrespondierenden Datenbausteinen der S7-400 SPS abgelegt. Die Schaltung der Verbraucher entsprechend den Schaltzeiten erfolgt durch die SPS und wird über Profibus an die angeschlossene Peripherie bzw. die Verbraucher übermittelt.<br />
Die Übermittlung von Störmeldungen einzelner Anlagen erfolgt ebenfalls über diese Peripherie und wird im WinCC System angezeigt.Über den Simatic WinCC WebNavigator wird die Oberfläche des WinCC Programms im MAN Intranet bereitgestellt, so dass berechtigte Personen die Schaltzeiten für die eigene Abteilung eigenständig verändern oder bei Bedarf bestimmte Verbraucher gezielt ein- oder ausschalten können.Um die eintreffenden Störmeldungen gezielt und zeitnah an den zuständigen Techniker weiterleiten zu können, werden diese über den Sternico &#8220;Adex Messenger&#8221; individuell per SMS an das jeweilige Handy und als Bildschirmmeldung an den jeweiligen PC verschickt. Im Gesamtprojekt realisierte die Sternico die SPS Programmierung in STEP7, die Erstellung des WinCC Programms, die Parametrierung des WinCC WebNavigators sowie die Programmierung der .NET-Anwendung &#8220;Adex Messenger&#8221;. Die Installation der Hardware erfolgte durch MAN.</p>
<p>Durch die bedarfsgerechte Schaltung von Energieverbrauchern konnte die MAN Nutzfahrzeuge AG ihre Energiekosten senken. Eine weitere Kostenoptimierung entstand durch die deutliche Reduktion von Ausfallzeiten in der Produktion aufgrund des Störmeldesystems.</p>
<p><strong>Stichworte<br />
</strong>SIMATIC, S7, STEP7, WinCC, WebNavigator, Profibus, .NET, C#, GSM, Handy, Messenger, Energieversorgung, Verbraucher, Adex</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sternico.de/2010/06/senkung-der-energiekosten-durch-bedarfsgerechtes-schalten/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Zentrale Softwareplattform für die unternehmensweite Durchführung von Abnahmen</title>
		<link>http://blog.sternico.de/2010/06/zentrale-softwareplattform-fur-die-unternehmensweite-durchfuhrung-von-abnahmen/</link>
		<comments>http://blog.sternico.de/2010/06/zentrale-softwareplattform-fur-die-unternehmensweite-durchfuhrung-von-abnahmen/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 10:26:51 +0000</pubDate>
		<dc:creator>Christian Wirthsmann</dc:creator>
		
		<category><![CDATA[Projekte &amp; Referenzen]]></category>

		<guid isPermaLink="false">http://blog.sternico.de/?p=101</guid>
		<description><![CDATA[Bei der Alstom Transport Deutschland GmbH in Salzgitter werden Abnahmeprozesse mittels einer Softwareplattform durchgeführt und überwacht. Die Ergebnisse werden in einer zentralen Datenbank gespeichert und ausgewertet.
Projektbeschreibung
Für den Standort Salzgitter der Alstom Transport Deutschland GmbH wurde eine zentrale Softwareplattform für die Durchführung von Abnahmen entwickelt. Der Standort Salzgitter ist im Alstom-Konzern das internationale Kompetenzzentrum für Regionaltriebzüge [...]]]></description>
			<content:encoded><![CDATA[<p class="bodytext">Bei der Alstom Transport Deutschland GmbH in Salzgitter werden Abnahmeprozesse mittels einer Softwareplattform durchgeführt und überwacht. Die Ergebnisse werden in einer zentralen Datenbank gespeichert und ausgewertet.<span id="more-101"></span></p>
<p><strong>Projektbeschreibung<br />
</strong>Für den Standort Salzgitter der Alstom Transport Deutschland GmbH wurde eine zentrale Softwareplattform für die Durchführung von Abnahmen entwickelt. Der Standort Salzgitter ist im Alstom-Konzern das internationale Kompetenzzentrum für Regionaltriebzüge und Regionalstadtbahnen sowie Produktionsstätte für Drehgestelle und Güterwagen.</p>
<p>Bei der Abwicklung eines Projekts stellen Abnahmen bzw. Qualitätskontrollen einen zentralen Bestandteil dar. Innerhalb der Fertigung sollen sie sicherstellen, dass Mängel frühzeitig erkannt und somit zeitnah im Prozess behoben werden können. Um die Durchführung der Abnahmen zu standardisieren und die Ergebnisse zentral verwalten zu können, wurde bei Alstom eine datenbankbasierte Softwareplattform eingeführt. Die Ziele, die mit dieser Anwendung erreicht werden konnten sind:</p>
<ul>
<li>Eine strukturierte Durchführung von Abnahmen bzw. Aufnahme von Mängeln.</li>
<li>Eine Dokumentation und Klassifizierung von Mängeln.</li>
<li>Die prozesssichere Behebung der Mängel in der Fertigung.</li>
<li>Eine Permanente Kontrolle über die einzelnen Abnahmestatus sowie den Fortschritt der Mangelbehebung.</li>
<li>Prozessverbesserungen durch Analysen und den hieraus resultierenden Maßnahmen.</li>
</ul>
<p class="bodytext">Die Plattform besitzt eine mehrschichtige Architektur und wurde auf Basis des .NET Frameworks 3.5 realisiert. Im Mittelpunkt steht die Serveranwendung, in der sämtliche Prozesse der Business Logik abgebildet sind. Die Serveranwendung steuert den sicheren Zugriff auf die Daten, gewährleistet die Konsistenz und führt automatisierte Workflows aus. Die Datenhaltung erfolgt in einer Oracle Datenbank 10g.</p>
<p>Als Clients stehen zwei unterschiedliche Applikationen zur Verfügung. Ein Windows .NET Client, der über die ClickOnce Technologie verteilt wird, ermöglicht die Nutzung sämtlicher Funktionalitäten. Die Oberfläche wurde vollständig mittels der Windows Presentation Foundation realisiert. Bei der zweiten Client Applikation handelt sich um einen Windows Mobile Client für Smartphones, der auf die Funktionalitäten Mangelaufnahme und Mangelbehebung beschränkt ist. Die Kommunikation beider Clients mit der Serveranwendung erfolgt mittels der Windows Communication Foundation auf Basis von Webservices.</p>
<p class="bodytext">
<p class="bodytext">
<p><strong>Stichworte<br />
</strong>.NET 3.5, C#, WPF, WCF, .NET Compact Framework, Windows Mobile, Oracle Datenbankserver 10g, Visual Studio 2008, ClickOnce</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sternico.de/2010/06/zentrale-softwareplattform-fur-die-unternehmensweite-durchfuhrung-von-abnahmen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>HowTo: Sicherung und Wiederherstellung von Datenbausteinen</title>
		<link>http://blog.sternico.de/2010/06/howto-sicherung-und-wiederherstellung-von-datenbausteinen/</link>
		<comments>http://blog.sternico.de/2010/06/howto-sicherung-und-wiederherstellung-von-datenbausteinen/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 15:40:44 +0000</pubDate>
		<dc:creator>Dominique Römer</dc:creator>
		
		<category><![CDATA[ADEX]]></category>

		<category><![CDATA[Automatisierung]]></category>

		<category><![CDATA[Simatic S7]]></category>

		<category><![CDATA[Workshops]]></category>

		<guid isPermaLink="false">http://blog.sternico.de/?p=100</guid>
		<description><![CDATA[In diesem Artikel wird beschrieben, wie man komplette Datenbausteine aus einer Simatic S7 SPS einfach und schnell mit Hilfe des ADEX Excelisers sichert und wiederherstellt.
Vorraussetzung
Grundsätzlich werden drei Dinge vorausgesetzt:

Eine ethernetfähige Simatic S7-300/400 SPS,
Der Sternico ADEX Exceliser (Professional Lizenz)
Microsoft Excel (2000 oder höher).

Die Software Sternico ADEX Exceliser kann unter folgendem Link heruntergeladen werden: ADEX Exceliser 2010
Der [...]]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel wird beschrieben, wie man komplette Datenbausteine aus einer Simatic S7 SPS einfach und schnell mit Hilfe des ADEX Excelisers sichert und wiederherstellt.<span id="more-100"></span></p>
<p><strong>Vorraussetzung</strong><br />
Grundsätzlich werden drei Dinge vorausgesetzt:</p>
<ul>
<li>Eine ethernetfähige Simatic S7-300/400 SPS,</li>
<li>Der Sternico ADEX Exceliser (Professional Lizenz)</li>
<li>Microsoft Excel (2000 oder höher).</li>
</ul>
<p>Die Software Sternico ADEX Exceliser kann unter folgendem Link heruntergeladen werden: <a href="http://download.sternico.de/products/adex/adex_exceliser/AdexExceliserSetup.V4.1.zip">ADEX Exceliser 2010</a></p>
<p>Der ADEX Exceliser kann im Demo-Modus ohne zeitliche Begrenzung getestet werden. In der Demo-Version können allerdings nur Datenbausteine gesichert werden. Das Wiederherstellen von Daten ist nur in der Professional-Version möglich, die über das Kundenportal erworben werden kann.</p>
<p><strong>1. Neuen Vorgang im ADEX Exceliser erstellen </strong><br />
Zur Datensicherung eines Datenbausteins wird über das Menü „Vorgang“ und den Menüeintrag „Neu“ im ADEX Exceliser ein neuer Vorgang erstellt. Da Daten aus einer SPS-ausgelesen werden sollen, muss als Richtung „Upload (SPS=&gt;Excel)“ eingestellt werden. Neben einem eindeutigen Vorgangsnamen müssen die Verbindungsdaten zur SPS und der Datenbaustein mit den auszulesenden Prozessdaten angegeben werden. In der nachfolgenden Abbildung ist die Konfiguration eines Vorgangs beispielhaft dargestellt.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_2_sps_einstellungen.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 1: SPS-Einstellungen im ADEX Exceliser" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_2_sps_einstellungen_300x217.png" alt="Ampelstatus" width="300" height="217" /></a><br />
<em>Abbildung 1: SPS-Einstellungen im ADEX Exceliser</em></p>
<p>Bei der Eingabe der Verbindungsdaten muss beachtet werden, dass beim „Slot“ der Slot der CPU gemeint ist, aus der die Daten ausgelesen werden sollen.</p>
<p><strong>3. Datenbaustein mit Fertigungsdaten aus Step 7 importieren</strong><br />
Im nächsten Schritt müssen die Variablendefinitionen aus dem zu sichernden Datenbaustein im ADEX Exceliser unter „Felddefinitionen“ eingetragen werden. Dazu muss zunächst der entsprechende Baustein im SIMATIC Manager geöffnet und alle gewünschten Zeilen selektiert werden. Zur Auswahl der Zeilen muss auf die Adresse „0.0“ geklickt, die Shift-Taste gedrückt und die „Pfeil nach unten“ Taste so lange gedrückt werden, bis alle gewünschten Zeilen markiert sind. Anschließend muss die Tastenkombination „Strg+c“ gedrückt werden um die Daten in die Zwischenablage zu kopieren.</p>
<p>Falls der ADEX Exceliser nicht auf demselben Computer wie der SIMATIC Manager läuft, müssen die Daten in eine Textdatei zwischengespeichert werden. Dazu muss der Windows Text Editor (siehe Windows Startmenü „Start“ =&gt; „Programme“ =&gt; „Zubehör“) gestartet werden und die Daten durch „Strg+v“ eingefügt werden. Die Datei muss an einem, für den ADEX Exceliser erreichbaren, Ort gespeichert werden.</p>
<p>Jetzt können die Daten in den ADEX Exceliser importiert werden. Für die reine Datensicherung können die voreingestellten Einstellungen  unter &#8220;Felddefinition einlesen&#8221; übernommen werden. Die zuvor exportierten Variablen können über die Schaltflächen „Aus Datei lesen“ oder „Aus Zwischenablage lesen“ importiert werden, sodass alle Variablen des zu sichernden Datenbausteins analog zur Abbildung 2 im ADEX Exceliser aufgelistet werden.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_2_felddefinition.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 2: Felddefinition im ADEX Exceliser" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_2_felddefinition_300x215.png" alt="Ampelstatus" width="300" height="215" /></a><br />
<em>Abbildung 2: Felddefinition im ADEX Exceliser</em></p>
<p><strong>4. Konfiguration der Sicherungsdatei</strong><br />
Der Vorgang ist jetzt prinzipiell soweit konfiguriert, dass die gewünschten Daten aus der SPS ausgelesen werden können. Allerdings wurde noch nicht konfiguriert, wohin die Daten gesichert werden sollen. Die dazu entsprechenden Parameter werden unter der Registerkarte „SPS =&gt; Excel“ eingestellt, die in der nachfolgenden Abbildung dargestellt ist.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_2_datenausgabe.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 3: Konfiguration der Datenausgabe im ADEX Exceliser" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_2_datenausgabe_300x215.png" alt="Ampelstatus" width="300" height="215" /></a><br />
<em>Abbildung 3: Konfiguration der Datenausgabe im ADEX Exceliser</em></p>
<p>In dieser Ansicht muss nur das Feld &#8220;Speichern unter&#8221; angepasst werden. Dort wird die Excel- oder CSV-Datei angegeben, welche die Daten des zu sichernden Datenbausteins aufnehmen soll. Die aktuellen Einstellungen müssen anschließend mit der Schaltfläche „OK“ im unteren Bereich des Dialogfensters gespeichert werden.</p>
<p>Der Vorgang kann jetzt im Hauptfenster des ADEX Excelisers ausgewählt und über die Schaltfläche „Ausführen“ in der Menüleiste des Hauptfensters gestartet werden. Nach jeder Prozessausführung sollten die Daten des zu sichernden Datenbausteins in der angegebenen Sicherungs-Datei vorliegen.</p>
<p><strong>5. Konfiguration des Wiederherstellungsprozesses</strong><br />
Um die gesicherten Daten in den entsprechenden Datenbaustein zurückschreiben zu können, wird ein &#8220;Download&#8221;-Vorgang im ADEX Exceliser benötigt. Da dieser Vorgang die gleichen Verbindungsdaten und Felddefinitionen wie der sichernde Vorgang verwenden muss, ist es ratsam, diesen als Vorlage zu verwenden. Dazu muss der Vorgang im Hauptmenü des ADEX Excelisers selektiert und über das Menü &#8220;Vorgang&#8221;=&gt;&#8221;Duplizieren&#8221; kopiert werden. In der Ansicht SPS-Einstellungen muss nun ein eindeutiger Name und die Richtung &#8220;Download (Excel=&gt;SPS)&#8221; eingetragen werden. Die Einstellungen sind in der nachfolgenden Abbildung beispielhaft dargestellt.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_2_sps_einstellungen2.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 4: SPS-Einstellungen für den Wiederherstellungs-Vorgang im ADEX Exceliser" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_2_sps_einstellungen2_300x215.png" alt="Ampelstatus" width="300" height="215" /></a><br />
<em>Abbildung 4: SPS-Einstellungen für den Wiederherstellungs-Vorgang im ADEX Exceliser</em></p>
<p>Für den Wiederherstellungsvorgang muss abschließend nur noch die Quelldatei unter der Ansicht &#8220;Excel=&gt;SPS&#8221; eingestellt werden. Hier sollte die in Abschnitt 5 angegebenen Sicherungsdatei eingetragen werden. In den darunterliegenden Eingabefeldern können gegebenenfalls noch die Bits für ein Handshakeverfahren angegeben werden, wodurch ein Überschreiben der Daten während der Verwendung des Datenbausteins durch die SPS verhindert wird. Die einzelnen Felder werden im Folgenden kurz beschrieben:</p>
<p><em>Sendeanfrage:</em> Bit wird vor jedem Schreibversuch durch den ADEX Exceliser auf 1 gesetzt.</p>
<p><em>Sendefreigabe:</em> Bit wird von der SPS auf 1 gesetzt, falls Daten geschrieben werden dürfen.</p>
<p><em>Senden abgeschlossen:</em> Bit wird vom ADEX Exceliser gesetzt, sobald das Senden abgeschlossen ist.</p>
<p><em>Senden abgelehnt:</em> Bit wird von der SPS gesetzt, falls das Senden zum aktuellen Zeitpunkt nicht möglich ist.</p>
<p><em>Senden Fehler:</em> Bit wird vom ADEX Exceliser gesetzt, falls beim Übertragen der Daten in die SPS ein Fehler aufgetreten ist.</p>
<p>In jedes dieser Felder können wahlweise Merkerbits (beispielsweise &#8220;p#m99.1 bool&#8221; für den Merker 99.1) oder Bitvariablen in Datenbausteinen (beispielsweise &#8220;p#db99.dbx0.1 bool&#8221; für eine boolsche Variable an der Adresse 0.1 im Datenbaustein 99) verwendet werden. Anschließend müssen die aktuellen Einstellungen mit der Schaltfläche „OK“ im unteren Bereich des Dialogfensters gespeichert werden.</p>
<p>Jetzt können die Daten im Datenbaustein der SPS über den neu erstellten &#8220;Download&#8221;-Vorgang wiederhergestellt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sternico.de/2010/06/howto-sicherung-und-wiederherstellung-von-datenbausteinen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>HowTo: Fertigungsdaten mit dem ADEX Exceliser auslesen und automatisch drucken</title>
		<link>http://blog.sternico.de/2010/06/howto-fertigungsdaten-mit-dem-adex-exceliser-auslesen-und-automatisch-drucken/</link>
		<comments>http://blog.sternico.de/2010/06/howto-fertigungsdaten-mit-dem-adex-exceliser-auslesen-und-automatisch-drucken/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 11:19:45 +0000</pubDate>
		<dc:creator>Dominique Römer</dc:creator>
		
		<category><![CDATA[ADEX]]></category>

		<category><![CDATA[Automatisierung]]></category>

		<category><![CDATA[Simatic S7]]></category>

		<category><![CDATA[Workshops]]></category>

		<guid isPermaLink="false">http://blog.sternico.de/?p=98</guid>
		<description><![CDATA[In diesem Artikel  werden die einzelnen Schritte zur automatischen Protokollierung von Prozessdaten aus einer Simatic S7 SPS mit Hilfe des ADEX Excelisers und Microsoft Excel anhand eines Beispiels näher erläutert.
Problemstellung
Eine Maschine fertigt Werkstücke, die jeweils über eine Seriennummer identifiziert werden können. Während der Fertigung der einzelnen Werkstücke werden automatisierte Tests und Messungen durchgeführt. Die [...]]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel  werden die einzelnen Schritte zur automatischen Protokollierung von Prozessdaten aus einer Simatic S7 SPS mit Hilfe des ADEX Excelisers und Microsoft Excel anhand eines Beispiels näher erläutert.<span id="more-98"></span></p>
<p><strong>Problemstellung</strong><br />
Eine Maschine fertigt Werkstücke, die jeweils über eine Seriennummer identifiziert werden können. Während der Fertigung der einzelnen Werkstücke werden automatisierte Tests und Messungen durchgeführt. Die Fertigstellung eines Werkstückes wird von der SPS durch Setzen eines Bits signalisiert. Daraufhin sollen alle erfassten Daten automatisch aus dem Datenbaustein ausgelesen und als formatiertes Protokoll ausgedruckt werden. Erst nach dem erfolgreichen Druck und dem Setzen eines Handshake-Bits soll die Fertigung fortgesetzt werden.</p>
<p><strong>Die Lösung</strong><br />
Zur Lösung des Problems werden grundsätzlich drei Dinge benötigt:</p>
<ul>
<li>Eine ethernetfähige Simatic S7-300/400 SPS,</li>
<li>Der Sternico ADEX Exceliser (Standard oder Professional Lizenz)</li>
<li>Microsoft Excel (2000 oder höher).</li>
</ul>
<p>Die Software Sternico ADEX Exceliser kann unter folgendem Link heruntergeladen werden: <a href="http://download.sternico.de/products/adex/adex_exceliser/AdexExceliserSetup.V4.1.zip">ADEX Exceliser 2010</a></p>
<p>Der ADEX Exceliser kann im Demo-Modus ohne zeitliche Begrenzung getestet und - falls gewünscht - über das Kundenportal erworben werden.</p>
<p><strong>1.  Protokollvorlage mit Microsoft Excel erstellen</strong><br />
Zunächst muss die Vorlage für den automatischen Bericht in Microsoft Excel erstellt werden. In Abbildung 1 ist die hier verwendete Vorlage dargestellt. Die Beispielvorlage kann über den unten stehenden Link heruntergeladen werden:<br />
<a href="http://blog.sternico.de/wp-content/uploads/2010/06/Report_Template.xls">Excel-Vorlage zum Beispiel</a></p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_excel_template.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 1: Excel-Vorlage für den automatischen Report" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_excel_template_300x229.png" alt="Ampelstatus" width="300" height="229" /></a><br />
<em>Abbildung 1: Excel-Vorlage für den automatischen Report</em></p>
<p>Die Vorlage besteht aus einem Anzeigebereich für die Seriennummer des Werkstücks, einer Tabelle mit den Messwerten, deren Ober- und Untergrenzen und einer Bewertung der Messwerte in Abhängigkeit der jeweiligen Grenzen. Zusätzlich werden die Messwerte in einem Diagramm dargestellt. In dieser Vorlage müssen zur Erstellung eines Berichts nur noch die Felder B3 – für die Seriennummer des Werkstücks - und B6 bis B10  - für die Messwerte 1 bis 5 - eingetragen werden.</p>
<p><strong>2. Neuen Vorgang im ADEX Exceliser erstellen</strong><br />
Zur Erstellung des gewünschten Berichts wird über das Menü „Vorgang“ und den Menüeintrag „Neu“ im ADEX Exceliser ein neuer Vorgang erstellt. Da Daten aus einer SPS-ausgelesen werden sollen, muss als Richtung „Upload (SPS =&gt; Excel)“ eingestellt werden. Neben einem eindeutigen Vorgangsnamen müssen die Verbindungsdaten zur SPS und der Datenbaustein mit den auszulesenden Prozessdaten angegeben werden. Für das vorliegende Beispiel ist die Konfiguration des Vorgangs unter Abbildung 2 beispielhaft dargestellt.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_sps_instellungen.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 2: SPS-Einstellungen im ADEX Exceliser" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_sps_instellungen_300x215.png" alt="Ampelstatus" width="300" height="215" /></a><br />
<em>Abbildung 2: SPS-Einstellungen im ADEX Exceliser</em></p>
<p>Bei der Eingabe der Verbindungsdaten muss beachtet werden, dass beim „Slot“ der Slot der CPU gemeint ist, aus der die Daten ausgelesen werden sollen.</p>
<p><strong>3. Datenbaustein mit Fertigungsdaten aus Step 7 importieren</strong><br />
Im nächsten Schritt müssen die Variablendefinitionen aus dem gewünschten Datenbaustein im ADEX Exceliser unter „Felddefinitionen“ eingetragen werden. Diese Daten können entweder manuell eingetragen werden oder aus Step 7 importiert werden. An dieser Stelle wird der Datenimport veranschaulicht, auch wenn für das vorliegende Beispiel lediglich 6 Variablen im Baustein definiert wurden.</p>
<p>Zunächst wird die Bausteindefinition aus Step 7 in eine Textdatei exportiert. Dazu muss der entsprechende Baustein im SIMATIC Manager geöffnet und alle gewünschten Zeilen selektiert werden. Zur Auswahl der Zeilen muss auf die Adresse „0.0“ geklickt, die Shift-Taste gedrückt und die „Pfeil nach unten“ Taste so lange gedrückt werden, bis alle gewünschten Zeilen markiert sind. Anschließend muss die Tastenkombination „Strg+c“ gedrückt werden um die Daten in die Zwischenablage zu kopieren.</p>
<p>Falls der ADEX Exceliser nicht auf demselben Computer wie der SIMATIC Manager läuft, müssen die Daten in eine Textdatei zwischengespeichert werden. Dazu muss der Windows Text Editor (siehe Windows Startmenü „Start“ =&gt; „Programme“ =&gt; „Zubehör“) gestartet werden und die Daten durch „Strg+v“ eingefügt werden. Die Datei muss an einem, für den ADEX Exceliser erreichbaren, Ort gespeichert werden.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_db_textfile.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 3: Beispiel-Datenbaustein als Textdatei" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_db_textfile_300x98.png" alt="Ampelstatus" width="300" height="98" /></a><br />
<em>Abbildung 3: Beispiel-Datenbaustein als Textdatei</em></p>
<p>Jetzt können die Daten in den ADEX Exceliser importiert werden. Um möglichst viele Variablen des Datenbausteins automatisch mit der entsprechenden Excel-Zelle zu verbinden, ist es für das vorliegende Beispiel ratsam, im Feld „Start bei“ die Zelle B5 als Startzelle einzutragen und alle Daten „als Spalte“ anzuordnen. Anschließend können die zuvor exportierten Variablen über die Schaltflächen „Aus Datei lesen“ oder „Aus Zwischenablage lesen“ importiert werden. Abschließend muss nur noch die XLS-Zelle der Seriennummer auf „B3“ geändert werden, sodass die unter Abbildung 4 abgebildete Felddefinition für den Vorgang im ADEX Exceliser vorliegt.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_felddefinition.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 4: Felddefinition im ADEX Exceliser" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_felddefinition_300x215.png" alt="Ampelstatus" width="300" height="215" /></a><br />
<em>Abbildung 4: Felddefinition im ADEX Exceliser</em></p>
<p><strong>4. Konfiguration der Protokolldateien</strong><br />
Der Vorgang ist jetzt prinzipiell soweit konfiguriert, dass die gewünschten Daten aus der SPS ausgelesen werden können. Allerdings wurde noch nicht konfiguriert, wie und wohin die Daten ausgegeben werden sollen. Die dazu entsprechenden Parameter werden unter der Registerkarte „SPS =&gt; Excel“ eingestellt, die in der nachfolgenden Abbildung dargestellt ist.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_datenausgabe.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 5: Konfiguration der Datenausgabe im ADEX Exceliser" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_datenausgabe_300x168.png" alt="Ampelstatus" width="300" height="168" /></a><br />
<em>Abbildung 5: Konfiguration der Datenausgabe im ADEX Exceliser</em></p>
<p>Unter „XLS-Template“ muss die in Schritt 1 erstellte Excel-Vorlage eingetragen werden. In dem darunter liegenden Feld muss die Ausgabedatei des Vorgangs, hier der gewünschte Report, eingetragen werden. In dem Dateinamen können auch variable Bestandteile enthalten sein. Für den hier automatisch generierten Bericht bietet sich zum Beispiel die Seriennummer an, die aus der SPS als Feld „Seriennummer“ (siehe Felddefinition) ausgelesen wird. Zur Verwendung einer Variablen als Namensbestandteil, muss der Variablenname in geschweiften Klammern gesetzt und unter „Speichern unter:“ an der gewünschten Position eingetragen werden. So erzeugt der ADEX Exceliser für den Pfad „c:\Temp\Report_{Seriennummer}.xls“ für jedes Werkstück genau einen Report, beispielsweise „Report_4711.xls“ für das Werkstück mit der Seriennummer „4711“.</p>
<p>Neben den Variablennamen aus der Registerkarte „Felddefinition“ können auch Zeitstempel als Namensbestandteil, beispielsweise „{$Date}“ für das aktuelle Datum, eingetragen werden. Eine vollständige Auflistung möglicher Variablen kann dem Handbuch des ADEX Excelisers entnommen werden.</p>
<p>Abschließend muss auf dieser Registerkarte nur noch die Auswahlbox „Automatisch drucken“ ausgewählt werden, damit der Bericht vom ADEX Exceliser automatisch ausgedruckt wird. Der Druckvorgang wird dabei immer auf dem Standarddrucker ausgeführt.</p>
<p>Der erstellte Vorgang ist jetzt bereit für einen ersten optionalen Test. Die aktuellen Einstellungen müssen mit der Schaltfläche „OK“ im unteren Bereich des Dialogfensters gespeichert werden. Anschließend muss der Vorgang im Hauptfenster des ADEX Excelisers ausgewählt und über die Schaltfläche „Ausführen“ in der Menüleiste des Hauptfensters gestartet werden. Jetzt sollte der Bericht im Zielverzeichnis als Excel-Datei vorliegen und über den Standarddrucker ausgedruckt worden sein. Das Ergebnis sollte, je nach aktuell vorliegenden Messwerten, analog zu Abbildung 6 aussehen.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_report.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 6: Der fertige Beispiel-Bericht" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_report_300x206.png" alt="Ampelstatus" width="300" height="206" /></a><br />
<em>Abbildung 6: Der fertige Beispiel-Bericht</em></p>
<p>Anschließend muss der Vorgang zur Konfiguration der automatischen Ausführung wieder mit Hilfe eines Doppelklicks geöffnet werden.</p>
<p><strong>5. Konfiguration der automatischen Ausführung</strong><br />
Der Vorgang muss noch zur automatischen Ausführung konfiguriert werden, damit die Berichte nach der Signalisierung durch die SPS automatisch generiert werden. Dazu muss die Registerkarte „Automatische Ausführung“ geöffnet werden. Bei der Auslösungsart muss für das vorliegende Beispiel das „Handshake-Verfahren“ ausgewählt werden.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_automatic_mode.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 7 - Konfiguration der automatischen Ausführung" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_automatic_mode_300x168.png" alt="Ampelstatus" width="300" height="168" /></a><br />
<em>Abbildung 7 - Konfiguration der automatischen Ausführung</em></p>
<p>Im Feld „Auslösungsvariable“ wird die Variable der SPS eingetragen, die die Ausführung des Vorgangs signalisiert. Die Variablen können als Pointer gemäß der nachfolgenden Tabelle definiert werden:</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_datentyp_tabelle.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 2: SPS-Einstellungen im ADEX Exceliser" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_datentyp_tabelle_400x75.png" alt="Ampelstatus" width="400" height="75" /></a><br />
<em>Tabelle 1: Beispielhafte Variablendeklaration im ADEX Exceliser</em></p>
<p>Im Feld „Auslösungswert“ wird der Wert der Auslösungsvariablen angegeben, der vorliegen muss, damit der ADEX Exceliser den Vorgang automatisch ausführt. In der darunterliegenden Tabelle können auf die gleiche Weise beliebig viele Quittungsvariablen definiert werden, die vom ADEX Exceliser nach der erfolgreichen Vorgangsausführung in der SPS gesetzt werden. Zum Speichern der vorgenommenen Einstellungen muss die Taste „OK“ betätigt werden.</p>
<p>Jetzt ist der Vorgang auch für die automatische Ausführung vollständig konfiguriert. Die automatische Ausführung des Vorgangs wird über die Schaltfläche „Automatik Ein“ im Hauptmenü des ADEX Excelisers gestartet. Alle Vorgänge, die sich im Automatik-Modus befinden, werden in der Prozessübersicht mit dem Zusatz „(Automatik)“ gekennzeichnet.</p>
<p><strong>6. Automatischer Start</strong><br />
Falls Vorgänge automatisch beim Neustart des Rechners ausgeführt werden sollen, muss der automatische Start im ADEX Exceliser aktiviert werden. Dazu muss die automatische Ausführung der gewünschten Vorgänge über die Schaltfläche „Automatik Ein“ in der Menüleiste des ADEX Excelisers gestartet werden. Dabei können auch mehrere Prozesse gleichzeitig aktiviert werden. Nachdem alle Vorgänge in den Automatik-Betrieb versetzt wurden, beenden wir die Anwendung. Anschließend muss die darauf erscheinende Rückfrage, ob die aktuell im Automatik-Modus befindlichen Vorgänge beim nächsten Start automatisch gestartet werden sollen, mit „Ja“ bestätigt werden. Jetzt werden alle zuvor ausgewählten Vorgänge bei jedem Start des ADEX Excelisers im Automatik-Modus gestartet, bis der Modus für die einzelnen Vorgänge über die Schaltfläche „Automatik Aus“ beendet wird.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_automatic_start.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Abbildung 8 - Rückfrage zum automatischen Start von Vorgängen" src="http://blog.sternico.de/wp-content/uploads/2010/06/howto_adex_1_automatic_start_300x187.png" alt="Ampelstatus" width="300" height="187" /></a><br />
<em>Abbildung 8 - Rückfrage zum automatischen Start von Vorgängen</em></p>
<p>Damit der ADEX Exceliser nach einem Neustart des Computers automatisch gestartet wird, muss das Programm in den Autostart von Windows eingetragen werden. Dazu muss eine Verknüpfung vom ADEX Exceliser im Windows Startmenü („Start“=&gt; „Programme“=&gt; „Sternico ADEX“ =&gt; „ADEX Exceliser“) in das Autostart-Menü („Start“ =&gt; „Autostart“) gezogen werden. Hierdurch wird bei jedem Systemstart automatisch der ADEX Exceliser gestartet (sofern für das Betriebssystem die automatische Anmeldung aktiviert ist) und der Vorgang zur Generierung von Berichten ausgeführt.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sternico.de/2010/06/howto-fertigungsdaten-mit-dem-adex-exceliser-auslesen-und-automatisch-drucken/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pocket PC / Windows Mobile feiert seinen 10. Geburtstag</title>
		<link>http://blog.sternico.de/2010/04/pocket-pc-windows-mobile-feiert-seinen-10-geburtstag/</link>
		<comments>http://blog.sternico.de/2010/04/pocket-pc-windows-mobile-feiert-seinen-10-geburtstag/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 16:58:54 +0000</pubDate>
		<dc:creator>Werner Mager</dc:creator>
		
		<category><![CDATA[Windows Mobile]]></category>

		<guid isPermaLink="false">http://blog.sternico.de/?p=97</guid>
		<description><![CDATA[Es gibt einen Grund zu feiern! Windows Mobile wird 10 Jahre alt  


Auch wenn die Konkurenz wie iPhone oder Android hochgelobt wird und sich bei der breiten Masse hoher Beliebtheit erfreut, ist und bleibt Windows Mobile das einzig ernstzunehmende Betriebssystem für mobile Business-Anwendungen im Windows Server Umfeld. Aus diesem Grund gratulieren wir und wünschen [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt einen Grund zu feiern! Windows Mobile wird 10 Jahre alt <img src='http://blog.sternico.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.mobivents.com/component/content/article/3-windows-phone/4-10-geburtstag-windows-mobile" target="_blank"><img src="http://blog.sternico.de/wp-content/uploads/2010/04/10JahreWMLogo.png" alt="" /></a></p>
<p><span id="more-97"></span><br />
Auch wenn die Konkurenz wie iPhone oder Android hochgelobt wird und sich bei der breiten Masse hoher Beliebtheit erfreut, ist und bleibt Windows Mobile das einzig ernstzunehmende Betriebssystem für mobile Business-Anwendungen im Windows Server Umfeld. Aus diesem Grund gratulieren wir und wünschen alles Gute für die nächsten 10 Jahre!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sternico.de/2010/04/pocket-pc-windows-mobile-feiert-seinen-10-geburtstag/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DataGridView Special 1: Anschauliche Daten - numerische Spalten auf Images abbilden</title>
		<link>http://blog.sternico.de/2010/03/datagridview-special-1-anschauliche-daten-numerische-spalten-auf-images-abbilden/</link>
		<comments>http://blog.sternico.de/2010/03/datagridview-special-1-anschauliche-daten-numerische-spalten-auf-images-abbilden/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 19:06:45 +0000</pubDate>
		<dc:creator>Werner Mager</dc:creator>
		
		<category><![CDATA[ADO.Net]]></category>

		<category><![CDATA[SQL Server]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://blog.sternico.de/?p=95</guid>
		<description><![CDATA[In diesem Special möchte auf ein paar Tricks und Kniffe eingehen, mit denen man aus dem Standard-Control DataGridView noch mehr herausholen kann. Im ersten Teil wird gezeigt, wie numerische Spalten clientseitig auf Images abgebildet werden können. Ganz nebenbei wird in die Benutzung von ADO.Net, SQL-Serverdateien und typisierten Datasets eingeführt.
In Datenbanken werden Attribute in der Regel [...]]]></description>
			<content:encoded><![CDATA[<p>In diesem Special möchte auf ein paar Tricks und Kniffe eingehen, mit denen man aus dem Standard-Control DataGridView noch mehr herausholen kann. Im ersten Teil wird gezeigt, wie numerische Spalten clientseitig auf Images abgebildet werden können. Ganz nebenbei wird in die Benutzung von ADO.Net, SQL-Serverdateien und typisierten Datasets eingeführt.</p>
<p>In Datenbanken werden Attribute in der Regel numerisch gespeichert. Ein Ampelstatus kann beispielsweise auf Rot=0, Gelb=1 und Grün = 2 abgebildet werden.  In einer netten Windowsanwendung wollen User jedoch statt der Zahlen eine grafische Darstellung. In diesem Artikel wird aufgezeigt, wie dies mit einem DataGridView möglich ist, ohne dass die Bilder in der Datenbank abgelegt werden müssen.<span id="more-95"></span></p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_anwendung.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Ampelstatus" src="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_anwendung-300x218.png" alt="Ampelstatus" width="300" height="218" /></a></p>
<p><strong>Die Cruz mit der Image-Spalte</strong><br />
Auf den ersten Blick scheint die eingangs beschriebene Situation gar nicht so kompliziert zu sein. In einem DataGridView können Spalten vom Typ &#8220;DataGridViewImageColumn&#8221; angelegt werden.<br />
Aber ab hier beginnen die Probleme.  Die neu angelegte Spalte erwartet eine Datenquelle, die Objekte vom Typ &#8220;Image&#8221; bereitstellt. Eine Anbindung an eine Datenquelle mit numerischen Werten oder gar mit String-basierten Schlüsseleinträgen ist nicht vorgesehen. Auch die naheliegende Möglichkeit,  eine ImageList  anzufügen, sucht man vergebens. </p>
<p><strong>Der Trick mit dem Expression-Attribut</strong><br />
Es gibt aber doch einen relativ kompakten und zugleich performanten Weg, wie man die Daten clientseitig auf Images abbilden kann.  Der Trick hierbei ist, eine weitere Tabelle in das Dataset hinzuzufügen, durch die die Schlüssel-Image Zuordnung realisiert wird. Die clientseitige Tabelle, an die das DataGridView gebunden wird, muss um eine Spalte mit dem Datentyp Image erweitert werden. Diese wird jedoch nicht aus der Datenbank gefüllt, sondern über eine Relation mit der Schlüssel-Image Tabelle verknüpft.  Über das Attribut &#8220;Expression&#8221; erfolgt schließlich die Verknüpfung. Soweit zur Theorie, die Praxis folgt sogleich.</p>
<p><strong>Ampelstatus als praktisches Beispiel</strong><br />
In einem kleinen Beispiel soll das Vorgehen verdeutlicht werden. Dabei kommen ausschließlich typisierte Datasets zum Einsatz, das Vorgehen lässt sich aber natürlich auch auf  untypisierte Daten übertragen. Als Ausgangsbasis dient ein Visual Studio Projekt, das z.B. &#8220;DataGridViewSpecialPart1&#8243; heißen könnte. Dabei ist es wichtig, dass das Visual Studio mit Administratorrechten gestartet wird. Unter Windows Vista und Windows 7 muss das Visual Studio durch einen Rechtsklick und &#8220;Als Administrator starten&#8230;&#8221; aufgerufen werden. </p>
<p><strong>Eine SQL Datenbank anlegen</strong><br />
Für unser Beispiel wird die Datenbank als mdf gespeichert und bei Bedarf in den SQL-Server eingeklingt. Dies ist die optimale Lösung für Entwicklung. Parktischer Weise bring Visual Studio bereits den SQL Server Express mit, so dass neben einer Standardinstallation von Visual Studio 2008 keine weitere Software benötigt wird, um dieses Beispiel nachzuvollziehen zu können. Es kann natürlich statt der dateibasierten (&#8221;attached&#8221;) Datenbank eine &#8220;normale&#8221; Datenbank eingebunden werden.<br />
Mit folgenden einfachen Schritten wird die Datenbank direkt aus dem Visual Studio heraus angelegt:</p>
<ul>
<li>Menu Daten => neue Datenquelle zufügen.  &#8220;Datenbank&#8221; auswählen</li>
<li>Im &#8220;Assistent zum Konfigurieren von Datenquellen&#8221; auf &#8220;Neue Verbindung&#8221; klicken</li>
<li>&#8220;Microsoft SQL Server-Datenbankdatei&#8221; auswählen</li>
<li>Als Name der Datenbankdatei z.B. &#8220;DataGridViewSpecialPart1&#8243; angeben.</li>
</ul>
<p>Mit dem Klick auf &#8220;OK&#8221; wird die Datei angelegt und in den lokalen SQL-Server eingehängt und man landet wieder im &#8220;Assistent zum Konfigurieren von Datenquellen&#8221;.  Jetzt sind eigentlich nur noch ein paar Standard-Abfragen zu bestätigen, bei denen eigentlich keine weiteren Änderungen nötig sind:</p>
<ul>
<li>Nach dem Klick auf &#8220;Weiter&#8221; und man wird gefragt, ob die Datenbankdatei im Visual Studio Projekt gespeichert werden soll. Hier sollte &#8220;ja&#8221; gewählt werden, damit alles beisammen ist.
<li>Schließlich kommt noch die Frage, wo der Connectstring gespeichert werden soll, aber auch hier empfiehlt es sich, die Standardeinstellungen beizubehalten.
<li>Die letzte Maske schließlich dient dazu, ein DataSet in dem Projekt anzulegen. Dies ist die Clientseitige Entsprechung zu unserer Datenbank. Hier einfach auf &#8220;Fertigstellen&#8221; klicken.
</ul>
<p>Für alle, die sich in diesem Endlos-Wizard verirrt haben sollten, habe ich ein Walk Through in Form von Screenshots vorbereitet:<br />
<a href="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_neuedatenquelle.html" target="_blank">Walk Through Neue Datenquelle</a></p>
<p>Im Projektmappen-Explorer erscheinen nun zwei neue Elemente in unserem Projekt: </p>
<ul>
<li>DataGridViewSpecialPart1.mdf : Die Serverseitige SQL-Datenbank</li>
<li>DataGridViewSpecialPart1DataSet.xsd : Die Clientseitige Entsprechung der Datenbank</li>
</ul>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_projmitdb.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Projektmappen-Explorer mit Datenbank" src="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_projmitdb-300x205.png" alt="Projektmappen-Explorer mit Datenbank" width="300" height="205" /></a></p>
<p><strong>Eine einfache Datenbank: Projektverwaltung</strong><br />
Für unser Beispiel benötigen wir nur eine Tabelle, die &#8220;Projects&#8221; heißen soll. Jede Zeile wird dabei ein Projekt repräsentieren.  Diese Tabelle muss zunächst Serverseitig angelegt werden. Dazu wird ein Doppelklick auf die &#8220;DataGridViewSpecialPart1.mdf&#8221; gemacht, und der Server-Explorer öffnet sich. Im Baum ist der Knoten &#8220;Tabellen&#8221; auszuwählen, dann ein Rechtsklick &#8220;Neue Tabelle hinzufügen&#8221;.<br />
Die Tabelle soll nun drei Spalten IDProject, Name und Status erhalten:</p>
<p><img class="alignnone size-medium wp-image-69" title="Die Tabelle Projects" src="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_table_projects.png" alt="Die Tabelle Projects" width="402" height="117" /></p>
<p>Die Spalte IDProjekt wird als Primärschlüssel markiert und in den Eigenschaften der Spalte unter &#8220;Identitätsspezifikation&#8221; wird &#8220;(Ist Identity)&#8221;  auf &#8220;ja&#8221; gesetzt. Dadurch wird die ID der einzelnen Projekte automatisch hochgezählt.</p>
<p><img class="alignnone size-medium wp-image-69" title="Identitätsspezifikation" src="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_identity.png" alt="Identitätsspezifikation" width="348" height="77" /></p>
<p>Wird nun auf &#8220;Speichern&#8221; geklickt, fragt Visual Studio, wie die Tabelle heißen soll, und wir können ihr nun den Namen &#8220;Projects&#8221; geben.</p>
<p><strong>Das Ado.Net Gegenstück : ein (typsiertes) DataSet</strong><br />
Die im vorherigen Schritt angelegte Datenbank wird in der Ado.Net Welt durch ein typisiertes DataSet repräsentiert.  Typisiert bedeutet dabei, dass für jede Datenbank und jede Tabelle eine spezielle Klasse (abgeleitet von DataSet und DataTable) angelegt wird, die genau an den Aufbau der Datenbank angepasst ist. Beim Programmieren muss man dann gar nicht mehr über den Aufbau einzelner Tabellen nachdenken, über IntelliSense kann man direkt auf Eigenschaften zugreifen, die den einzelnen Spalten zugeordnet sind. Aber genug der Theorie, denn die Praxis ist ganz einfach:</p>
<ul>
<li>Über einen Doppelklick wird das &#8220;DataGridViewSpecialPart1DataSet.xsd&#8221; geöffnet.</li>
<li>Aus dem Serverexplorer wird nun die Tabelle &#8220;Projects&#8221; in das DataSet gezogen.</li>
</ul>
<p><img class="alignnone size-medium wp-image-69" title="Automatisch generierte lokale Tabelle" src="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_ado_table_projects.png" alt="Automatisch generierte lokale Tabelle" width="191" height="134" /></p>
<p>In den folgenden Schritten wird im Dataset eine zusätzliche (lokale) Tabelle angelegt, die die Images aufnehmen wird. Über eine Relation werden diese mit den Daten aus der Datenbank verknüpft und im DataGridView angezeigt.</p>
<p><strong>Eine Tabelle voll Bilder</strong><br />
In dem Designer wird nun zunächst eine weitere Tabelle &#8220;StatusImages&#8221; angelegt. Dies kann z.B. durch Drag &#038; Drop einer DataTable aus der Toolbox auf das DataSet erfolgen. Diese Tabelle existiert somit nur innerhalb der Anwendung (Clientseitig) und nicht in der Datenbank.<br />
Über einen Rechtsklick werden der DataTable die zwei Spalten IDStatus und ImageValue zugefügt:</p>
<p><img class="alignnone size-medium wp-image-69" title="Lokale Tabelle StatusImages" src="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_ado_table_statusimages.png" alt="Lokale Tabelle StatusImages" width="150" height="67" /></p>
<p>In dem Eigenschaften-Fenster muss für die Spalten noch jeweils der Datentyp festgelegt werden. Hier ist für IDStatus int32 zu wählen, und für ImageValue ist System.Drawing.Bitmap einzugeben. Die IDStatus-Spalte ist zudem als Primärschlüssel zu definieren, dies geht über einen Rechtsklick.<br />
Die Eigenschaft &#8220;DataType&#8221; wird dabei über das Eigenschaften-Fenster festgelegt.<br />
Die Bilder für die Tabelle werden in den Projekt-Resourcen abgelegt. Diese finden sich im Projektmappen-Explorer unter Properties/Resources.resx.<br />
In den Resourcen wird links oben auf die Ansicht &#8220;Bilder&#8221; gewechselt und die drei Bilder per Copy &#038; Paste eingefügt.</p>
<p><strong>Die lieben Verwandten: Relations</strong><br />
Nun muss die Tabelle StatusImages noch mit der Tabelle Projects verbunden werden. Dazu wird im Designer eine Relation hinzugefügt (z.B. aus der Toolbox auswählen). Die Tabelle &#8220;StatusImages&#8221; wird als Übergeordnete Tabelle ausgewählt, die Tabelle &#8220;Projects&#8221; als Untergeordnete Tabelle.</p>
<p><a href="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_relation.png" target="_blank"><img class="alignnone size-medium wp-image-69" title="Relation" src="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_relation-300x287.png" alt="Relation" width="300" height="287" /></a></p>
<p>Im DataSet erscheint die Relation nun als Verbindung zwischen den Tabellen:</p>
<p><img class="alignnone size-medium wp-image-69" title="Relation zwischen den Tabellen" src="http://blog.sternico.de/wp-content/uploads/2010/02/dgvsp1_ado_relation.png" alt="Relation zwischen den Tabellen" width="424" height="145" /></p>
<p>Bleibt die Frage, wie die Bilder in die clientseitige Tabelle Projects kommen. Hierzu wird ein bisschen Magic benötigt. Zuerst fügen wir eine weitere Spalte &#8220;StatusImage&#8221; mit dem Datentyp System.Drawing.Bitmap  an die Tabelle an. Die Tabelle Projects enthält nun sowohl an die Datenbank gebundene spalten als auch eine ungebundene Spalte. Damit in dieser die Bilder zu dem jeweiligen Status erscheinen, wird die Eigenschaft &#8220;Expression&#8221; benutzt. Hier wird folgender Text eingegeben:<br />
Parent(StatusImages_Projects).ImageValue<br />
In der Klammer steht dabei der Name der Relation, über die die verbundene Tabelle erreicht werden kann. Mit dem Punkt wird schließlich die gewünschte Spalte in der verbundenen Tabelle adressiert. Hierbei müssen die Datentypen natürlich passen.</p>
<p><strong>Visualisieren des DataSets</strong><br />
Schließlich muss das DataGridView noch auf das Formular gebracht werden. Dazu ist jedoch nicht die Toolbox zu verwenden, sondern aus der Lasche Datenquellen wird einfach die gesamte Tabelle &#8220;Projects&#8221; auf das Formular gezogen. Der Designer legt dabei automatisch ein DataGridView an. Dieses wird über die Funktion &#8220;Im übergeordneten Container andocken&#8221; zum Füllen des Fensters gebracht.<br />
Als letzten Schritt sind noch drei Zeilen Code in die Datei Form1.cs zu schreiben, um die Bilder aus den Resourcen in die Tabelle &#8220;StatusImage&#8221; zu übertragen:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #0600FF;">using</span> <span style="color: #008080;">DataGridViewSpecialPart1.Properties</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">public</span> Form1<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            InitializeComponent<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dataGridViewSpecial1DataSet.<span style="color: #0000FF;">StatusImages</span>.<span style="color: #0000FF;">AddStatusImagesRow</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">0</span>, Resources.<span style="color: #0000FF;">red</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dataGridViewSpecial1DataSet.<span style="color: #0000FF;">StatusImages</span>.<span style="color: #0000FF;">AddStatusImagesRow</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">1</span>, Resources.<span style="color: #0000FF;">yellow</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dataGridViewSpecial1DataSet.<span style="color: #0000FF;">StatusImages</span>.<span style="color: #0000FF;">AddStatusImagesRow</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">2</span>, Resources.<span style="color: #0000FF;">green</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><strong>Zu guter Letzt</strong><br />
Damit ist unser Projekt auch schon fertig. Daten, die in die Anwendung eingeben werden, werden nun direkt in der SQL-Datenbank gespeichert. Wird der Wert in der Spalte &#8220;Status&#8221; geändert, erscheint automatisch das passende Bild in der letzten Spalte. Natürlich lässt sich das hier vorgestellte Verfahren auch auf lokale DataSets anwenden, ohne dass eine Datenbank verwendet werden muss.</p>
<p>Wie immer stelle ich an dieser Stelle das komplette Projekt zum Download bereit:<br />
<a href='http://blog.sternico.de/wp-content/uploads/2010/02/DataGridViewSpecialPart1.zip'>Visual Studio Pojekt &#8220;DataGridViewSpecialPart1&#8243;</a></p>
<p>Ich freue mich schon auf die nächsten Specials, in denen ich euch noch ein paar mehr Tricks aus der ADO.Net Welt verraten werde.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sternico.de/2010/03/datagridview-special-1-anschauliche-daten-numerische-spalten-auf-images-abbilden/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Workshop UserControls Part 3: Events im Griff – Mouse- und Focus-Events sinnvoll implementiert</title>
		<link>http://blog.sternico.de/2009/08/workshop-usercontrols-part-3-events-im-griff-%e2%80%93-mouse-und-focus-events-sinnvoll-implementiert/</link>
		<comments>http://blog.sternico.de/2009/08/workshop-usercontrols-part-3-events-im-griff-%e2%80%93-mouse-und-focus-events-sinnvoll-implementiert/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 09:46:31 +0000</pubDate>
		<dc:creator>Werner Mager</dc:creator>
		
		<category><![CDATA[.NET Themen]]></category>

		<category><![CDATA[Software Entwicklung]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<category><![CDATA[Workshops]]></category>

		<guid isPermaLink="false">http://blog.sternico.de/?p=93</guid>
		<description><![CDATA[Im dritten Teil werde ich noch tiefer auf Events eingehen. Dabei stehen die Mouse- und Focus-Events im Vordergrund, da diese Events sich zunächst nicht wie erwartet verhalten. Dabei können die hier vorgestellten Verfahren aber auch auf andere Events übertragen werden. Als praktisches Beispiel wird das UserControl &#8220;SomeButton&#8221; aus den vorherigen Artikeln um ein Highlighting bei [...]]]></description>
			<content:encoded><![CDATA[<p>Im dritten Teil werde ich noch tiefer auf Events eingehen. Dabei stehen die Mouse- und Focus-Events im Vordergrund, da diese Events sich zunächst nicht wie erwartet verhalten. Dabei können die hier vorgestellten Verfahren aber auch auf andere Events übertragen werden. Als praktisches Beispiel wird das UserControl &#8220;SomeButton&#8221; aus den vorherigen Artikeln um ein Highlighting bei Mausberührung und Fokuserhalt erweitert.<span id="more-93"></span></p>
<p><strong>Ein echtes Highlight&#8230;</strong><br />
Das Highlighting das in diesem Artikel realisiert werden soll, hebt unser UserControl bei Mausberührung und Fokuserhalt hervor:</p>
<p><img src="http://blog.sternico.de/wp-content/uploads/2009/08/button_with_highlight.png" alt="" title="Das UserConrol mit Highlighting" width="268" height="250" class="alignnone size-medium wp-image-91" /></p>
<p>Um dies zu realisieren werden im folgenden zunächst die Mouse-Events behandelt.</p>
<p><strong>Mouse-Events</strong><br />
Unser Usercontrol hat bereits Mouse-Events, die es von der Klasse ContainerControl geerbt hat. Diese beziehen sich jedoch nur auf die Fläche des Controls, die nicht durch untergeordnete Controls belegt ist. In unserem Beispiel erhalten wir kein MouseMove-Event, wenn sich die Maus über den farbigen Panels befindet. Um dieses Verhalten zu erreichen, müssen von allen untergeordneten Controls die gewünschten Events eingesammelt und auf unser Control übertragen werden. Dies geschieht, in dem im Eventhandler die zugehörige Funktion (gleicher Name wie Event, nur mit „On“) aufgerufen wird:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #0600FF;">Public</span> panel1_MouseMove<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">Object</span> sender, EventArgs e<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span>
    OnMouseMove<span style="color: #000000;">&#40;</span>e<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><strong>Sonderfall MouseLeave und MouseEnter</strong><br />
Nicht ganz unproblematisch sind hierbei jedoch die MouseLeave und MouseEnter Events. Dadurch dass sich die untergeordneten Controls innerhalb unseres UserControls befinden, führt eine Mausbewegung von z.B. dem Panel ausgehend hin zu unbelegtem Bereich im Control zu einer Folge von MouseLeave- und MouseEnter-Events, obwohl die Maus nie unser UserControl verlassen hat.</p>
<p><strong>Focus-Behandlung</strong><br />
Auch bei der Behandlung der Focus-Events kann es zu unerwünschten Effekten kommen. Ein nicht ganz einfacher Fall ist z.B. wenn das Contrrol untergeordnete Controls besitzt, die selbst einen Focus erhalten können, wie z.B. Textboxen.  Erhält diese den Focus, so verliert das UserControl selbst den Fokus, obwohl sich dieser ja noch innerhalb des Controls befindet (nur eben auf einem untergeordneten Control). Um dieses Problem zu vermeiden, sollte für alle untergeordneten UserControls die Eigenschaft „enabled“ auf false gesetzt werden, wenn diese keine Interaktion mit dem User durchführen müssen.</p>
<p><strong>Praktisches Beispiel</strong><br />
An Hand von dem schon in den vorherigen Artikeln vorgestelltem UserControl soll nun die vorgestellte Problematik veranschaulicht werden.  Damit man auch was sieht, wird dazu zunächst eine Eigenschaft „Highlighted“ zugefügt, die die Schrift auf „Fett“ stellt. Zusätzlich erhält die Property ein Browsable-Attribut mit dem Parameter false, so dass die Property nicht im Visual Studio Designer angezeigt wird.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #FF0000;">bool</span> highlight <span style="color: #008000;">=</span> false<span style="color: #008000;">;</span>
&nbsp;
<span style="color: #000000;">&#91;</span>Browsable<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">false</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">bool</span> Highlight
<span style="color: #000000;">&#123;</span>
    get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> highlight<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
    set <span style="color: #000000;">&#123;</span>
        highlight <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span>
        <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Font</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Font<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Font</span>,highlight<span style="color: #008000;">?</span>FontStyle.<span style="color: #0000FF;">Bold</span><span style="color: #008000;">:</span>FontStyle.<span style="color: #0000FF;">Regular</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Diese Eigenschaft soll nun automatisch gesetzt werden, wenn die Maus über unser UserControl bewegt wird oder wenn das Control den Fokus erhält. Dazu werden zunächst im Designer die Events MouseEnter, MouseLeave, Enter und Leave aboniert und wie folgt implementiert:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #0600FF;">void</span> RegisterEvents<span style="color: #000000;">&#40;</span>Control parent<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Control child <span style="color: #0600FF;">in</span> parent.<span style="color: #0000FF;">Controls</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        child.<span style="color: #0000FF;">Click</span> <span style="color: #008000;">+=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System</span>.<span style="color: #0000FF;">EventHandler</span><span style="color: #000000;">&#40;</span>child_Click<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        child.<span style="color: #0000FF;">MouseMove</span> <span style="color: #008000;">+=</span> <span style="color: #008000;">new</span> MouseEventHandler<span style="color: #000000;">&#40;</span>child_MouseMove<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        child.<span style="color: #0000FF;">MouseEnter</span> <span style="color: #008000;">+=</span> <span style="color: #008000;">new</span> EventHandler<span style="color: #000000;">&#40;</span>child_MouseEnter<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        child.<span style="color: #0000FF;">MouseLeave</span> <span style="color: #008000;">+=</span> <span style="color: #008000;">new</span> EventHandler<span style="color: #000000;">&#40;</span>child_MouseLeave<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        RegisterEvents<span style="color: #000000;">&#40;</span>child<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">void</span> child_MouseLeave<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, EventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    OnMouseLeave<span style="color: #000000;">&#40;</span>e<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">void</span> child_MouseEnter<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, EventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    OnMouseEnter<span style="color: #000000;">&#40;</span>e<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">void</span> child_MouseMove<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, MouseEventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    OnMouseMove<span style="color: #000000;">&#40;</span>e<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">void</span> child_Click<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, <span style="color: #000000;">System</span>.<span style="color: #0000FF;">EventArgs</span> e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    OnClick<span style="color: #000000;">&#40;</span>e<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Beim Ausführen des Codes wird deutlich, dass die Events nur auf die Hintergrundfläche des Controls reagieren. Bewegt man die Maus in den Grenzbereich zum farbigen Rechteck, kommt es sogar zu einem sehr unschönen Flimmern.</p>
<p><strong>MouseEnter und MouseLeave: Auf richtige Verschaltung kommt es an</strong><br />
Wie schon erwähnt wird für die MouseEnter und MouseLeave Events eine Sonderbehandlung benötigt. Diese wird durch ein Überschreiben der OnMouseEnter und OnMouseLeave Methoden realisiert. In diesen muss eine Zustandsvariable eingeführt und die Mausposition muss ausgewertet werden.  In der Zustandsvariablen  wird gespeichert, ob sich die Maus bereits innerhalb des Controls befindet. In diesem Fall wird kein neuer MouseEnter-Event ausgelöst.  Beim MouseLeave wird die Mausposition überprüft. Nur wenn sich die Maus tatsächlich außerhalb des Controls befindet, wird der MouseLeave Event ausgeführt:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #008080; font-style: italic;">// This flag indicates if the mouse was inside the control</span>
<span style="color: #FF0000;">bool</span> inside <span style="color: #008000;">=</span> false<span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> OnMouseEnter<span style="color: #000000;">&#40;</span>EventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">// Check if mouse was already in control. </span>
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #008000;">!</span>inside<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        inside <span style="color: #008000;">=</span> true<span style="color: #008000;">;</span>
        <span style="color: #0600FF;">base</span>.<span style="color: #0000FF;">OnMouseEnter</span><span style="color: #000000;">&#40;</span>e<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> OnMouseLeave<span style="color: #000000;">&#40;</span>EventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">// Check mouse coordinates</span>
    Point mouseCoordinates <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Parent</span>.<span style="color: #0000FF;">PointToClient</span><span style="color: #000000;">&#40;</span>MousePosition<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Call base method only if mouse really left control</span>
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #008000;">!</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Bounds</span>.<span style="color: #0000FF;">Contains</span><span style="color: #000000;">&#40;</span>mouseCoordinates<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        inside <span style="color: #008000;">=</span> false<span style="color: #008000;">;</span>
        <span style="color: #0600FF;">base</span>.<span style="color: #0000FF;">OnMouseLeave</span><span style="color: #000000;">&#40;</span>e<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><strong>Zu guter Letzt</strong><br />
Mit dem dritten Teil endet mein Workshop über Usercontrols zunächst. Das heißt aber nicht, dass ich nicht noch mehr coole Ideen und Tricks zum Thema UserControls habe. Die verrate ich aber nur, wenn ich auch mal nen Kommentar zu meinen Workshops bekomme <img src='http://blog.sternico.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Also haut in die Tasten und schreibt was Ihr denkt oder zu was Ihr gerne noch mehr lesen würdet.</p>
<p>So, und wie immer gibt es an dieser Stelle das komplette Projekt zum Download:</p>
<p><a href='http://blog.sternico.de/wp-content/uploads/2009/08/UserControlWorkshopPart3.zip'>Visual Studio Pojekt &#8220;UserControlworkShopPart2&#8243;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sternico.de/2009/08/workshop-usercontrols-part-3-events-im-griff-%e2%80%93-mouse-und-focus-events-sinnvoll-implementiert/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Meine drei Top Entwicklungstools</title>
		<link>http://blog.sternico.de/2009/06/meine-drei-top-entwicklungstools/</link>
		<comments>http://blog.sternico.de/2009/06/meine-drei-top-entwicklungstools/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 21:50:05 +0000</pubDate>
		<dc:creator>Werner Mager</dc:creator>
		
		<category><![CDATA[.NET Themen]]></category>

		<category><![CDATA[Software Entwicklung]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://blog.sternico.de/?p=92</guid>
		<description><![CDATA[Mit diesem Blog-Artikel schließe ich mich der MSDN-Blogparade an und möchte ich die drei von mir am meisten genutzten Entwicklungswerkzeuge vorstellen:
MS Visual Studio 2008
MS SQL Server / SQL Server Management Studio
Red Gate .Net Reflector

MS Visual Studio 2008
MS Visual Studio ist defacto die Standard-Entwicklungsumgebung zur Realisierung von Windows Anwendungen.
Ich benutze das Visual Studio schon seit der [...]]]></description>
			<content:encoded><![CDATA[<p>Mit diesem Blog-Artikel schließe ich mich der <a href="http://blogs.msdn.com/softwarehersteller/archive/2009/05/06/msdn-blog-parade-was-sind-ihre-lieblings-entwickler-tools-mitmachen-und-gewinnen.aspx" target="_blank">MSDN-Blogparade</a> an und möchte ich die drei von mir am meisten genutzten Entwicklungswerkzeuge vorstellen:</p>
<li>MS Visual Studio 2008</li>
<li>MS SQL Server / SQL Server Management Studio</li>
<li>Red Gate .Net Reflector</li>
<p><span id="more-92"></span></p>
<p><strong>MS Visual Studio 2008</strong><br />
MS Visual Studio ist defacto die Standard-Entwicklungsumgebung zur Realisierung von Windows Anwendungen.<br />
Ich benutze das Visual Studio schon seit der Version 2003 und bin sehr zufrieden mit den Möglichkeiten, die einem geboten werden. Ich habe viel Java programmiert und mich dadurch sehr schnell in C# zurecht gefunden. Die Unterstützung durch die Visual Studio IDE ist sehr umfassend und z.B. der Designer für Windows Anwendungen ermöglicht es einem, ansprechende Oberflächen zusammen zu klicken und einfache Datenbankanbindungen zu realisieren. Mehr zu Fakten und zur Geschichte des Visual Studios kann z.B. bei Wikipedia nach gelesen werden: <a href="http://de.wikipedia.org/wiki/Microsoft_Visual_Studio#Version_.NET" target="_blank">Microsoft Visual Studio</a><br />
Seit geraumer Zeit bietet Microsoft auch kostenlose Varianten des Visual Studios an, die &#8220;Express&#8221;-Editionen. Für alle, die nur Windows Anwendungen oder Webanwendungen realisieren wollen genügt diese völlig. Mit dieser Version dürfen sogar kommerzielle Projekte realisert werden. Die Professional Variante bietet darüber hinaus einen größeren Funktionsumfang und ermöglicht es beispielsweise auch, Anwendungen für Windows Mobile Geräte zu schreiben.<br />
Wer das Visual Studio also noch nicht kennt, sollte sich einfach mal die Expressversion herunterladen und ausprobieren:<br />
<a href="http://www.microsoft.com/germany/Express/" target="_blank">Microsoft Visual Studio 2008 Express Editions</a></p>
<p><strong>MS SQL Server / MS SQL Server Management Studio</strong><br />
Der MS SQL Server ist eine relationale Datenbank die sich - Hersteller-bedingt - optimal in die Microsoft Windows Landschaft integriert. Mehr zum MS SQL Server kann z.B. direkt bei <a href="http://www.microsoft.com/sql" target="_blank">Microsoft</a> oder auch bei <a href="http://de.wikipedia.org/wiki/Microsoft_SQL_Server" target="_blank">Wikipedia</a> nachgelesen werden.<br />
Das Microsoft SQL Server Management Studio wird zusammen mit dem MS SQL Server ausgeliefert. Es ist das Zentrale Werkzeug zur Verwaltung des SQL Servers und zur Entwicklung und zum Test von Sql-Abfragen (Queries). Man kann es von der MS SQL-Server Installations-DVD aus auf dem Entwicklungsrechner installieren. Die älteren Versionen (bsp. 2003) basierten auf die Windows MMC. Ab Version 2005 basiert das SQL Server Management Studio auf die Umgebung des Visual Studios.<br />
Auch vom SQL Server und vom SQL Server Management Studio kann eine Express Version bezogen werden:<br />
<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=de&amp;FamilyID=58ce885d-508b-45c8-9fd3-118edd8e6fff" target="_blank">Downloaddetails: Microsoft SQL Server Management Studio Express</a><br />
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&amp;displaylang=de target=">Downloaddetails: Microsoft SQL Server Management Studio Express</a></p>
<p><strong>Red Gate .Net Reflector</strong><br />
Jeder der Programme auf Basis des Microsoft .Net Frameworks realisiert sollte sich bewußt sein, dass sein Programm-Code in <a href="http://de.wikipedia.org/wiki/Common_Language_Infrastructure" target="_blank">CLI-Code</a> übersetzt wird, was neben vielen Vorteilen auch wieder den Nachteil hat, dass der Code sehr leicht decompiliert werden kann. Wie einfach das geht, kann jeder mit dem Tool <a href="http://www.red-gate.com/products/reflector/index.htm" target="_blank">&#8220;.Net Reflector&#8221;</a> ausprobieren, das kostenlos von Red Gate bezogen werden kann. Dieses Tool ist einer der mächtigsten <a href="http://de.wikipedia.org/wiki/Decompiler" target="_blank">Decompiler</a> für .Net Dieses Tool stellt damit ein absolutes Must-Have für .Net Entwickler dar, wobei natürlich beachtet werden muß, dass das Decompileren vieler Programme in deren Nutzungsbedingungen ausgenommen ist. Diese Einschränkung ist jedoch nicht uneingeschränkt gültig, wie z.B. <a href="http://de.wikipedia.org/wiki/Reverse_Engineering" target="_blank">hier</a> bei Wikipedia erläutert wird. Bleibt also nur die Schlussfolgerung zu ziehen, dass wer seinen Quellcode wirkungsvoll schützen möchte auf <a href="http://de.wikipedia.org/wiki/Obfuscator">Obfuscator</a> wie z.B. den im Visual Studio enthaltenen &#8220;Dotfuscator Community Edition&#8221; zurückgreifen sollte.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sternico.de/2009/06/meine-drei-top-entwicklungstools/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
