\section{Kommunikation zwischen .NET/C\# und CORBA}
\label{sec:csharpcorba}

Das HMI\footnote{Human Machine Interface} der TRUMPF Lasersteuerung wurde mit dem portable .NET Framework dotgnu \cite{dotgnu} in C\# entwickelt \cite{dotgnutrumpf}. Da die dotgnu .NET Implementation deutlich perfomanter ist, als Mono  \cite{mono}, ist dotgnu f\"ur embedded Systeme besser geeignet. Die Echtzeitprozesse der Lasersteuerung sind in C implementiert. Die Kommunikation zwischen HMI und Echtzeitprozessen l\"auft momentan entweder \"uber eine mySQL \cite{mysql} Datenbank, oder es wird \"uber Sockets kommuniziert.

Eine elegantere L\"osung w\"are eine Kommunikation via CORBA \cite{corbaspec} zwischen HMI und Echtzeitsteuerung. Gleichzeitig w\"urde somit eine Fernsteuerung des Lasers \"uber Ethernet erm\"oglicht.

Im Microsoft .NET Framework \cite{msnet} ist keine CORBA Anbindung integriert. Um von C\#\ aus mit CORBA Objekten zu kommunizieren gibt es zwei Ans\"atze: Ein in C\#\ programmierter ORB und die Erweiterung der .NET Remoting Schnittstelle \cite{netremoting} um das Internet Inter Orb Protokol (IIOP).

Diese L\"osungen sind momentan auf dem Markt verf\"ugbar:

\begin{description}
\item[C\#TIDorb:] C\# ORB des Morfeo-Projekts \cite{morfeo}, gegr\"undet vom spanischen Ministerium f\"ur Industrie, Tourismus und Verkehr. Entwicklung abgeschlossen, aber noch nicht freigegeben.
\item[J-Integra Espresso] kommerzielles Produkt f\"ur Microsoft .NET und Mono. Verbindet .NET Remoting mit J2EE und CORBA. Developer Licence \$399 USD. \cite{espresso}
\item[IIOP.NET:] openSource Projekt f\"ur Microsoft .NET und Mono verf\"ugbar. Verbindet .NET Remoting mit J2EE und CORBA \cite{iiop}.
\item[RemotingCORBA:] openSource Projekt, zur Erweiterung der .NET Remoting Schnittstelle um das IIOP Protokol. F\"ur Microsoft .NET und Mono verf\"ugbar, allerdings seit 2003 nicht mehr gewartet \cite{remcorba}.
\end{description}

Die frei verf\"ugbaren Tools wurden genauer untersucht, auch hinsichtlich Ihrer Lauff\"ahigkeit im dotgnu portable .NET Framework.

\subsection{IIOP.NET}
\label{sec:IIOP.NET}

IIOP.NET \cite{iiop} ist ein openSource (LGPL) Projekt der Elca Informatique SE in Kooperation mit der ETH Z\"urich. Es erm\"oglicht eine nahtlose Interoperation zwischen verschiedenen verteilten Objekten (.NET, CORBA und J2EE). Ein IDLToCLSCompiler \"ubersetzt ein IDL-Interface in eine C\# Library. Wird die eigene Applikation gegen diese Library gelinkt, so stehen s\"amtliche Interfacemethoden als entsprechende Funktionsaufrufe zur Verf\"ugung.

IIOP.NET funktioniert mit dem Microsoft .NET Framework und Mono. Dotgnu wird zur Zeit nicht unterst\"utzt. Aus diesem Grund habe ich versucht IIOP.NET von Mono nach dotgnu zu portieren. Hierzu wurden die Makefiles an den dotgnu Compiler angepasst und der IDLToCLSCompiler \"ubersetzt. Bei der Anwendung des IDLToCLSCompilers wird bei der ersten Klasse, welche in dotgnu noch nicht implementiert ist, eine NotImplementedException geworfen und die weitere Ausf\"uhrung abgebrochen:

\begin{lstlisting}
ilrun IDLToCLSCompiler.exe bench ../versuch1/bench.idl 
exception encountered: System.NotImplementedException: Read
        at System.Xml.Schema.XmlSchema.Read(Stream, ValidationEventHandler) in ./Schema/XmlSchema.cs:57
        at Ch.Elca.Iiop.IdlCompiler.Action.CompilerMappingPlugin..ctor()
        at Ch.Elca.Iiop.IdlCompiler.Action.CompilerMappingPlugin..cctor()
        at Ch.Elca.Iiop.IdlCompiler.IDLToCLS.AddCustomMappings(IList)
        at Ch.Elca.Iiop.IdlCompiler.IDLToCLS.Setup(String[])
        at Ch.Elca.Iiop.IdlCompiler.IDLToCLS..ctor(String[])
        at Ch.Elca.Iiop.IdlCompiler.IDLToCLS.Main(String[])
\end{lstlisting}

Auf \cite{pnetstate} kann der aktuelle Status der vom dotgnu Projekt implementierten .NET Klassen eingesehen werden. Hinzu kommen die Klassen und Methoden aus dem ml-pnet Paket (aus Mono \"ubernommener Code).  

Der Befehl

\begin{lstlisting}
mono --trace=all-program IDLToCLSCompiler.exe bench ../versuch1/bench.idl | grep ENTER: | sed 's!.*ENTER:!!' | sed 's!(wrapper.*)!!' | uniq
\end{lstlisting}

gibt alle API Aufrufe zur Laufzeit aus. Es konnte somit festgestellt werden, dass noch weitere Klassen und Methoden in der dotgnu .NET Implementierung fehlen. Beispielsweise:
\begin{itemize}
\item Microsoft.CSharp.CSharpCodeProvider
\item System.Runtime.Serialization
\end{itemize}

Eine Implementierung im zeitlichen Rahmen dieser Diplomarbeit ist nicht m\"oglich.

Trotzdem wird im Kapitel \ref{sec:demo} eine Applikation mit IIOP.NET, Mono und ACE/TAO erstellt, da der IIOP.NET Ansatz sehr gut ist, gewartet wird und die fehlenden Klassen und Methoden in dotgnu implementiert werden k\"onnen.

\subsection{RemotingCORBA}
Auch f\"ur den Einsatz von RemotingCORBA fehlen unter dotgnu noch einige Klassen und Methoden. Mit Mono kann auf gehostete Objekte zugegriffen werden, jedoch ist ein Hosten von Objekten aus Mono nicht m\"oglich. Au\ss erdem wird das Projekt seit 2003 nicht mehr gewartet. Der Einsatz von RemotingCORBA kann somit nicht empfohlen werden.

\subsection{J-Integra Espresso}
Da dieses Produkt als closedSource vertrieben wird, kann nicht gepr\"uft werden, ob diese IIOP Anbindung problemloser unter dotgnu zu betreiben w\"are. Zur Anbindung des HMI kommt IIOP.NET eher in Frage, da IIOP.NET die selbe Funktionalit\"at liefert, auf dotgnu portierbar ist und frei, als openSource, verf\"ugbar ist.

\subsection{\"Uberpr\"ufung der Machbarkeit}
\label{sec:demoapp}

Ob eine Kommunikation zwischen .NET Remoting und CORBA momentan vern\"unftig implementiert und genutzt werden kann, soll mit der Entwicklung einer Demoapplikation untersucht werden.

Abbildung \ref{img:iiopdemo}: Der Benutzer soll mit Hilfe einer C\#, GTK\# Oberfl\"ache die Darstellung eines der drei Programme (blink, flash, move) auf dem digitalen Ausgang einer CPX ansto\ss en. Diese C\# Applikation \"ubermittelt einer C++ Applikation, welches Programm dargestellt werden soll. Die C++ Applikation generiert das gew\"ahlte Programm in Form von Prozessabbildern, welche zu einem bestimmten Zeitpunkt via RTCORBA \cite{rtcorbaspec} an eine, f\"ur die Ausgabe des Prozessabbildes verantwortliche, Applikation \"ubermittelt werden. Wurden alle genrierten Prozessabbilde versendet, wird auf der grafischen Oberfl\"ache als Best\"atigung der gew\"ahlte Modus angezeigt.

Die beschriebene Applikation konnte erfolgreich implementiert werden. Als .NET Plattform wurde Mono \cite{mono} eingesetzt, da es die .NET Spezifikation vollst\"andiger implementiert als dotgnu. Als Br\"ucke zwischen .NET Remoting und CORBA \cite{corbaspec} wurde IIOP.NET benutzt. Als CORBA Distribution wurde ACE/TAO \cite{taohp} eingesetzt. Zur Visualisierung werden die GTK\# Libraries verwendet.

\begin{figure}
\begin{center}
\includegraphics[width=0.8\textwidth]{./img/iiopdemo.jpg}
\label{img:iiopdemo}
\caption{Schema: Machbarkeitsstudie C\#\ - CORBA Kommunikation}
\end{center}
\hrule
\end{figure}

Obwohl das IIOP.NET Projekt momentan kaum dokumentiert ist, sollte es anhand der in Kapitel \ref{sec:impldemo1} beschriebenen Implementierung dieser Applikation m\"oglich sein, auch schnell eigene Projekte zu erstellen.
