Programmierung _____________________________________ _________________________________________________________________________ ___________________ ___________________ ___________________ COMOS Platform Programmierung Bedienhandbuch 09/2011 A5E03638266-01 Marken 1 .NET-Komponeten für COMOS 2 Entwicklung mit Visual Basic 6 in COMOS 3 Side-by-Side-Konfiguration mit Manifesten 4 WinCC 5 ControlProperties 6 3D-Symbole erzeugen und einbinden 7 Icon-Spezifikationen 8 Andere Komponenten 9
72
Embed
COMOS 4 - cache.industry.siemens.com · Rechtliche Hinweise Rechtliche Hinweise Warnhinweiskonzept Dieses Handbuch enthält Hinweise, die Sie zu Ihrer persönlichen Sicherheit sowie
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
� �Programmierung
___________________
___________________
___________________
___________________
___________________
___________________
___________________
___________________
___________________
COMOS
Platform Programmierung
Bedienhandbuch
09/2011 A5E03638266-01
Marken 1
.NET-Komponeten für COMOS
2
Entwicklung mit Visual Basic 6 in COMOS
3
Side-by-Side-Konfiguration mit Manifesten
4
WinCC 5
ControlProperties 6
3D-Symbole erzeugen und einbinden
7
Icon-Spezifikationen 8
Andere Komponenten 9
Rechtliche Hinweise
Rechtliche Hinweise Warnhinweiskonzept
Dieses Handbuch enthält Hinweise, die Sie zu Ihrer persönlichen Sicherheit sowie zur Vermeidung von Sachschäden beachten müssen. Die Hinweise zu Ihrer persönlichen Sicherheit sind durch ein Warndreieck hervorgehoben, Hinweise zu alleinigen Sachschäden stehen ohne Warndreieck. Je nach Gefährdungsstufe werden die Warnhinweise in abnehmender Reihenfolge wie folgt dargestellt.
GEFAHR bedeutet, dass Tod oder schwere Körperverletzung eintreten wird, wenn die entsprechenden Vorsichtsmaßnahmen nicht getroffen werden.
WARNUNG bedeutet, dass Tod oder schwere Körperverletzung eintreten kann, wenn die entsprechenden Vorsichtsmaßnahmen nicht getroffen werden.
VORSICHT mit Warndreieck bedeutet, dass eine leichte Körperverletzung eintreten kann, wenn die entsprechenden Vorsichtsmaßnahmen nicht getroffen werden.
VORSICHT ohne Warndreieck bedeutet, dass Sachschaden eintreten kann, wenn die entsprechenden Vorsichtsmaßnahmen nicht getroffen werden.
ACHTUNG bedeutet, dass ein unerwünschtes Ergebnis oder Zustand eintreten kann, wenn der entsprechende Hinweis nicht beachtet wird.
Beim Auftreten mehrerer Gefährdungsstufen wird immer der Warnhinweis zur jeweils höchsten Stufe verwendet. Wenn in einem Warnhinweis mit dem Warndreieck vor Personenschäden gewarnt wird, dann kann im selben Warnhinweis zusätzlich eine Warnung vor Sachschäden angefügt sein.
Qualifiziertes Personal Das zu dieser Dokumentation zugehörige Produkt/System darf nur von für die jeweilige Aufgabenstellung qualifiziertem Personal gehandhabt werden unter Beachtung der für die jeweilige Aufgabenstellung zugehörigen Dokumentation, insbesondere der darin enthaltenen Sicherheits- und Warnhinweise. Qualifiziertes Personal ist auf Grund seiner Ausbildung und Erfahrung befähigt, im Umgang mit diesen Produkten/Systemen Risiken zu erkennen und mögliche Gefährdungen zu vermeiden.
Bestimmungsgemäßer Gebrauch von Siemens-Produkten Beachten Sie Folgendes:
WARNUNG Siemens-Produkte dürfen nur für die im Katalog und in der zugehörigen technischen Dokumentation vorgesehenen Einsatzfälle verwendet werden. Falls Fremdprodukte und -komponenten zum Einsatz kommen, müssen diese von Siemens empfohlen bzw. zugelassen sein. Der einwandfreie und sichere Betrieb der Produkte setzt sachgemäßen Transport, sachgemäße Lagerung, Aufstellung, Montage, Installation, Inbetriebnahme, Bedienung und Instandhaltung voraus. Die zulässigen Umgebungsbedingungen müssen eingehalten werden. Hinweise in den zugehörigen Dokumentationen müssen beachtet werden.
Marken Alle mit dem Schutzrechtsvermerk ® gekennzeichneten Bezeichnungen sind eingetragene Marken der Siemens AG. Die übrigen Bezeichnungen in dieser Schrift können Marken sein, deren Benutzung durch Dritte für deren Zwecke die Rechte der Inhaber verletzen kann.
Haftungsausschluss Wir haben den Inhalt der Druckschrift auf Übereinstimmung mit der beschriebenen Hard- und Software geprüft. Dennoch können Abweichungen nicht ausgeschlossen werden, so dass wir für die vollständige Übereinstimmung keine Gewähr übernehmen. Die Angaben in dieser Druckschrift werden regelmäßig überprüft, notwendige Korrekturen sind in den nachfolgenden Auflagen enthalten.
Siemens AG Industry Sector Postfach 48 48 90026 NÜRNBERG DEUTSCHLAND
2 .NET-Komponeten für COMOS ................................................................................................................. 7
2.1 .NET-Komponente für GUI.............................................................................................................7 2.1.1 Control für die Applikation bekannt machen ..................................................................................7 2.1.2 Voraussetzungen für ein .NET-Control in COMOS .......................................................................8 2.1.3 Anwendung ..................................................................................................................................11
2.2 .NET-Komponenten für Dokumente ............................................................................................11 2.2.1 Control für die Applikation bekannt machen ................................................................................11 2.2.2 Voraussetzungen für ein .NET-Control in Dokumenten ..............................................................12 2.2.3 Anwendung ..................................................................................................................................13
3 Entwicklung mit Visual Basic 6 in COMOS .............................................................................................. 15
9.3 ComosTGeneratorJobs............................................................................................................... 71 9.3.1 Class NextString und Class RunValues...................................................................................... 71
.NET-Komponeten für COMOS 22.1 .NET-Komponente für GUI
.NET-Komponenten können sowohl als PlugIns als auch als Oberflächen für Device und CDevice eingesetzt werden. Mit anderen Worten: Es gibt keinen Unterschied mehr zwischen PlugIns und den Registerkarten "Eigenschaften".
2.1.1 Control für die Applikation bekannt machen
Main.xml Das verwendete Control muss der COMOS-Applikation bekannt sein. Dazu erzeugt man einen Eintrag in Main.xml, siehe dazu das Handbuch "COMOS starten".
<Tool>-Eintrag Für jedes Control muss mindestens ein <Tool>-Eintrag vorhanden sein.
ID-Angabe am CDevice Soll das Control mittels Doppelklick eines Objektes gestartet werden, muss man den Wert aus <Tool id> am CDevice eintragen.
1. Öffnen Sie in den Eigenschaften eines Stammobjekts die Registerkarte "System".
2. Klicken Sie auf die Schaltfläche "ControlTyp (ProgID) definieren zur Bestimmung des Eigenschaftenfensters".
3. Tragen Sie im Feld "ProgID des Steuerelements" den Wert aus <Tool id> ein.
Für die alten COM-Komponenten wurde hier die ProgID eingetragen. Für die .NET-Komponenten muss es <Tool id> sein, da die ProgID nicht ausreicht. Zusätzlich zur ProgID benötigt man noch weitere Informationen, mindestens noch den AssemblyName. Diese zusätzlichen Informationen werden aus <Tool id> entnommen.
2.1.2 Voraussetzungen für ein .NET-Control in COMOS
Außerdem ist auch System.Windows.Controls.UserControl zulässig.
Alternativ kann auch System.Windows.Forms.UserControl eingesetzt werden. Das ist allerdings nicht empfehlenswert, weil ein Forms-Control letztendlich in <WindowsFormsHost .../> gehostet wird. Damit ist die direkte Verwendung von System.Windows.Controls.UserControl schneller, logischer und stabiler.
Kommunikation von .NET und COMOS-Controls Um mit der COMOS-Welt besser kommunizieren zu können, kann das Control zwei public Properties besitzen: Workset und ItemObjects. Sie werden per Reflection vom System erkannt und entsprechend gesetzt: public Plt.IComosDWorkset Workset { get; set; } public object ItemObjects // hier ItemObjects vom Type: IComosDCollection oder IComosDBaseObejct oder VBA.Collection { get; set; }
.NET-Komponeten für COMOS 2.1 .NET-Komponente für GUI
Die bessere und elegantere Variante besteht darin, das Interface Comos.Controls.IComosControl (Comos.Controls.dll) zu implementieren. namespace Comos.Controls { public interface IComosControl { Plt.IComosDWorkset Workset { get; set; } Plt.IComosDGeneralCollection Objects { get; set; } string Parameters { get; set; } IContainer ControlContainer { get; set; } void OnExecuted(ExecutedRoutedEventArgs e); void OnCanExecute(CanExecuteRoutedEventArgs e); void OnPreviewExecuted(ExecutedRoutedEventArgs e); }
Wenn nötig kann auch System.IDisposable implementiert werden.
Das originale Control wird in einem Container untergebracht, der das OkAbort-Control beinhaltet und die Undostate-Verwaltung erledigt. Man hat Zugriff auf den Container, womit man die Buttons und eventuell die Undostate-Verwaltung ein- oder ausschaltet: public interface IContainer { object Child { get; set; } bool UndoStateAdministration { get; set; } //default true void InitButton(StandardButtons button, string caption, Visibility visibility); object UIFParent { get; } void Close(); }
OnExecuted, OnCanExecute, OnPreviewExecuted sind an RoutedUICommand von WPF angelehnt. Damit werden die Button-Aktionen gesteuert sowie die Commands von CloseUIForm und ProjectOrWOChange. Aber im Gegensatz zu WPF kann man Executed und PreviewExecuted bearbeiten. Üblicherweise wird bei WPF-RoutedUICommand, wenn PreviewExecuted bearbeitet wird, kein Executed geworfen, und zwar unabhängig von e.Handled.
In COMOS-Container werden die Commands wie folgt abgearbeitet: //. . . Comos.Controls.IComosControl ctrl; CanExecuteRoutedEventArgs e; ExecutedRoutedEventArgs ee; //. . . ctrl.OnCanExecute(e); if (e.CanExecute) { ctrl.OnPreviewExecuted(ee); if (!ee.Handled) ctrl.OnExecuted(ee); }
.NET-Komponeten für COMOS 2.1 .NET-Komponente für GUI
Ausnahme bei Abarbeitung von ProjectOrWOChange Bei der Abarbeitung von ProjectOrWOChange wird OnExecuted unabhängig von ee.Handled aufgerufen. Im Vergleich zu den anderen Commands bezieht sich ProjectOrWOChange nicht nur auf ein einzelnes Control, sondern eventuell auf mehrere Controls. Deswegen darf die angefangene Aktion nicht von einem Control abgebrochen werden. Beim OnCanExecute ist dagegen die Aktion noch nicht zu Stande gekommen, deswegen kann man die Ausführung noch stoppen.
Grundsätzlich ist ProjectOrWOChange nur für solche Controls interessant, die auch nach einem Projektwechsel noch vorhanden sein sollen. Standardmäßig werden alle Controls beim Projektwechseln geschlossen. Wenn ein Control nach einem Projektwechsel weiterhin vorhanden sein soll, ist außerdem folgender Eintrag erforderlich: <Tool> <... autoClose="false">.
Starten von Controls im Code Im Code kann man die Controls so starten (z.B. im Objekt-Debugger): Set WS = a.Workset ToolID = "@NETWPFControl" ' als 'PlugIn' starten Set AppComd = WS.Globals.AppCommand AppComd.Execute "ExecuteMenuByID", ToolID ' als 'Eigenschaften' starten: Set App = WS.Globals.Application App.ShowPropertiesOnMdiChild a, false, "", "CONTROLTYPE", ToolID
.NET-Komponeten für COMOS 2.2 .NET-Komponenten für Dokumente
2.1.3 Anwendung Das Ergebnis könnte beispielweise so aussehen:
Beispiel COMOS-Menü, Eintrag "Hilfe > International > NET-Example_GUI"
2.2 .NET-Komponenten für Dokumente .NET-Komponenten können auch für Dokumente verwendet werden. Dazu werden die .NET-Komponenten in den Dokumententypen als Programm angegeben. Bei einem Doppelklick auf das jeweilige Dokument wird die Komponente geöffnet.
2.2.1 Control für die Applikation bekannt machen
Main.xml Das verwendete Control muss der COMOS-Applikation bekannt sein. Dazu erzeugt man einen Eintrag in Main.xml ein, siehe dazu das Handbuch "COMOS starten".
<Tool>-Eintrag Für jedes Control muss mindestens ein <Tool>-Eintrag vorhanden sein.
Dokumententyp anlegen Es muss ein Dokumententyp angelegt werden, der als Programmname den Wert aus <Tool id> erhält:
Für die alten COM-Komponenten wurde hier die ProgID eingetragen. Für die NET-Komponenten muss es <Tool id> sein, da die ProgID nicht ausreicht. Zusätzlich zur ProgID benötigt man noch weitere Informationen, mindestens noch den AssemblyName. Diese zusätzlichen Informationen werden aus <Tool id> entnommen.
2.2.2 Voraussetzungen für ein .NET-Control in Dokumenten
Außerdem ist auch System.Windows.Controls.UserControl zulässig.
Alternativ kann auch System.Windows.Forms.UserControl eingesetzt werden. Das ist allerdings nicht empfehlenswert, weil ein Forms-Control letztendlich in <WindowsFormsHost .../> gehostet wird. Damit ist die direkte Verwendung von System.Windows.Controls.UserControl schneller, logischer und stabiler.
Weitere Informationen Siehe ansonsten Voraussetzungen für ein .NET-Control in COMOS (Seite 8).
.NET-Komponeten für COMOS 2.2 .NET-Komponenten für Dokumente
2.2.3 Anwendung Auf der Basis des neuen Dokumententyps kann wie gewohnt ein Dokument angelegt werden. Beim Doppelklick öffnet sich die gewünschte Oberfläche.
Ausschlüsse Aus technischen Gründen wird momentan nur das Öffnen eines Dokumentes unterstützt.
Drucken, Revisionieren usw. ist noch nicht möglich.
Beispiel COMOS-Menü, Eintrag "Hilfe > International > NET-Example_Doc"
.NET-Komponeten für COMOS 2.2 .NET-Komponenten für Dokumente
Entwicklung mit Visual Basic 6 in COMOS 33.1 Empfehlung
Komponenten in Visual Basic 6 werden in COMOS nur aus Kompatibilitätsgründen unterstützt. Verwenden Sie für Neuentwicklungen die .NET-Technik.
Siehe auch .NET-Komponeten für COMOS (Seite 7)
3.2 Technische Voraussetzungen Wenn Sie COMOS installieren, läuft COMOS in der Regel ohne Registrierung der COM-Komponenten und verwendet stattdessen die Side-by-Side-Technologie von Windows. Da Visual Basic die Side-by-Side-Technologie nicht unterstützt, müssen Sie Entwicklungen in Visual Basic unter COMOS 9.0 mit registrierter COMOS 9.0 durchführen.
Voraussetzungen Folgende Voraussetzungen sind für die Visual Basic-Entwicklung notwendig:
● Die COM-Komponenten von COMOS müssen registriert sein.
● Die Typelibs von COMOS müssen registriert sein.
● Visual Basic-Dateien müssen im Verzeichnis "Bin" von COMOS liegen.
Siehe auch COM-Komponenten registrieren (Seite 16)
Typelibs registrieren (Seite 16)
Visual Basic-Dateien in das Verzeichnis "Bin" kopieren (Seite 18)
Entwicklung mit Visual Basic 6 in COMOS 3.2 Technische Voraussetzungen
Voraussetzung Damit die Registrierung funktioniert, verwenden Sie die Datei "ComosRegister.dll" in der Version 1,0,0,1 und registrieren Sie diese. Die Datei finden Sie im folgenden Verzeichnis:
"<Installationsverzeichnis von COMOS>\updatecenter"
Vorgehen Um die COM-Komponenten zu registrieren, gehen Sie folgendermaßen vor:
1. Öffnen Sie im Installationsverzeichnis von COMOS den Ordner "Bin".
2. Um alle COM-Komponenten im Verzeichnis "OCX" und "ComosX.ocx" zu registrieren, führen Sie die Datei "ComosReg.exe" aus.
Ergebnis Die COM-Komponenten sind registriert.
3.2.2 Typelibs registrieren
Voraussetzung Die Script-Datei "RegTLB.bat", mit der Sie die Typelibs von COMOS registrieren, setzt voraus, dass das Laufwerk R gemappt ist. Die Script-Datei finden Sie im folgenden Verzeichnis:
"<Installationsverzeichnis von COMOS>\Current\Bin\DeveloperReg"
Vorgehen Um das Laufwerk R zu mappen, gehen Sie folgendermaßen vor:
1. Rufen Sie die Kommandozeile auf.
2. Führen Sie in der Kommandozeile folgende Zeile aus:
Subst R: <Installationsverzeichnis von COMOS>
Ergebnis Das Laufwerk R ist gemappt.
Entwicklung mit Visual Basic 6 in COMOS 3.2 Technische Voraussetzungen
3.2.3 Visual Basic-Dateien in das Verzeichnis "Bin" kopieren
Voraussetzung Sie verwenden Visual Basic 6.0 SP6.
Vorgehen Um Visual Basic-Dateien in das Verzeichnis "Bin" zu kopieren, gehen Sie folgendermaßen vor:
1. Rufen Sie das Installationsverzeichnis von Visual Basic auf.
2. Kopieren Sie die folgenden Dateien in das Verzeichnis "<COMOS Installationsverzeichnis>\Current\Bin":
– "C2.exe"
– "CVPACK.exe"
– "LINK.exe"
– "MSDIS110.dll"
– "MSPDB60.dll"
– "VB6.exe"
– "VB6.olb"
– "VB6DEBUG.dll"
– "VB6EXT.olb"
– "VB6IDE.dll"
– "VBA6.dll"
– "VBAEXE6.lib"
Die Dateien "VB6.exe.config" und "VB6.exe.Manifest" müssen ebenfalls vorhanden sein. In der Regel werden diese beiden Dateien bei der Installation von COMOS mit installiert.
Hinweis
Öffnen Sie die VBP-Datei nicht, indem Sie im Explorer die VBP-Datei doppelklicken. Das hat zur Folge, dass Sie die falsche Datei "VB6.exe" verwenden oder die Funktion ändern, die per Doppelklick definiert ist.
Entwicklung mit Visual Basic 6 in COMOS 3.3 Visual Basic-Komponenten debuggen
Voraussetzung Alle Komponenten sind auf dem Versionsstand COMOS 9.0.
Empfehlung Um Probleme mit Zugriffsrechten zu vermeiden, entwickeln Sie auf Ihrem lokalen Rechner.
Vorgehen Um die Visual Basic-Komponenten zu debuggen, gehen Sie folgendermaßen vor:
1. Führen Sie im Verzeichnis "<Installationsverzeichnis von COMOS>\Current\Bin" die Datei "VB6.exe" aus.
2. Öffnen Sie das Projekt "ComosDebug", das im folgenden Verzeichnis liegt:
"<Installationsverzeichnis von COMOS>\Current\Bin\ComosDebug"
3. Fügen Sie das umgestellte VB6-Projekt hinzu.
4. Starten Sie das Projekt.
Ergebnis COMOS wird geöffnet und Sie haben die Möglichkeit in Visual Basic zu debuggen.
Hinweis Debug-Modus
Die Events von .NET-Komponenten werden im Debug-Modus nicht alle und nicht immer berücksichtigt.
3.4 Testen von Visual Basic-Komponenten Sie haben die Möglichkeit neu kompilierte Komponenten zu testen, indem Sie die kompilierte Datei in das COMOS-Installationsverzeichnis kopieren.
Entwicklung mit Visual Basic 6 in COMOS 3.4 Testen von Visual Basic-Komponenten
Wenn Sie eine ältere COMOS Version als 9.0 verwenden, ist der konventionelle Weg über die Registrierung der COM-Komponenten erforderlich, beispielsweise über "RegSvr32".
Alternative ab Windows XP SP2 Ab Windows XP SP2 haben Sie alternativ die Möglichkeit, eine COM-Komponente durch die Side-By-Side-Konfiguration zu kopieren und die COM-Komponente ohne Registrierung zu verwenden. Kopieren Sie die COM-Komponente in dasselbe Verzeichnis, in dem die EXE-Datei liegt.
4.1 Manifeste Für die Side-By-Side-Konfiguration fügen Sie der EXE-Datei ein Manifest hinzu.
Definition Das Manifest ist eine XML-Datei, die Angaben über die Vorbedingungen enthält, die eine EXE-Anwendung zur Ausführung benötigt. Diese Datei enthält die Angaben zur COM-Registrierung. Das sind in der Regel die Angaben, die in der Windows Registry stehen. Deshalb kann die Anwendung ausgeführt werden, auch wenn die COM-Komponenten nicht registriert sind.
Speichern der Manifeste Sie haben die Möglichkeit Manifeste in EXE-Dateien als externe Dateien mit folgendem Dateinamen zu speichern:
<Name der EXE-Anwendung>.manifest
Alternativ haben Sie die Möglichkeit die Manifeste in den Programmressourcen als Ressource einzubetten.
COM-Assemblies In COMOS sind für die COM-Assemblies die Manifeste als externe Dateien gespeichert. Der Ordner "Bin" enthält eine Manifest-Datei mit den COM-Typen für die jeweilige EXE-Datei.
Side-by-Side-Konfiguration mit Manifesten 4.1 Manifeste
Einschränkungen Im Zusammenhang mit der Side-By-Side-Konfiguration gelten folgende Einschränkungen:
● Da die COM-Programme in COMOS 9.0 nicht mehr in der Windows Registry registriert werden, erhalten die Programme eine Manifest-Datei über die die COM-Typen nur lokal über die jeweilige EXE bekannt gemacht werden. Deshalb gibt es im Ordner "Bin" zu jeder EXE-Datei auch eine exe.manifest-Datei.
● Alle ausgelieferten COM-Assemblies von COMOS (OCXs und DLL-Dateien) werden standardmäßig nicht mehr über "RegSvr32" in der Windows Registry registriert. Stattdessen sind alle Informationen über die Assemblies in der Datei "ComosOcx.manifest" gespeichert.
● Über ein Manifest kann nur ab der entsprechenden Verzeichnisebene auf Verweise und auf darunter liegende Verzeichnisse zugegriffen werden. Die entsprechende Verzeichnisebene ist in der Regel das Verzeichnis "Bin".
Das Verzeichnis "OCX" befindet sich im Ordner "Bin".
● Das Side-By-Side-Verfahren ist nicht für Entwicklungsmaschinen geeignet, sondern nur für die Anwendung auf den Rechnern der Benutzer. Auf dem Entwicklungsrechner ist eine Registrierung weiterhin erforderlich.
Externe Programme Für externe Programme, die über COM auf COMOS im Side-By-Side-Verfahren zugreifen, gelten folgende Regeln:
● Alle externen Programme, sowohl COM als auch .NET, müssen im Ordner "Bin" der lokalen Installation von COMOS gespeichert werden. Kopieren Sie beispielsweise das Programm "CustomComosExtension.exe" in folgendes Verzeichnis: "<Installationspfad von COMOS >\Current\Bin"
● Alle .NET-DLL-Dateien, die aus COM sichtbar sind (technisch: COM-Visible), müssen im Ordner "Bin" gespeichert werden.
● Erstellen Sie eine passende Manifest-Datei, damit von der externen Datei "CustomComosExtension.exe" per COM-Interop auf COMOS-Objekte zugegriffen werden kann.
Side-by-Side-Konfiguration mit Manifesten 4.2 Erstellung und Aktualisierung von Manifesten für COM-Komponenten
4.2 Erstellung und Aktualisierung von Manifesten für COM-Komponenten
Überblick Wenn Sie eine COM-Komponente in eine Manifest-Datei aufnehmen möchten oder bei Schnittstellenänderungen eine Anpassung einer Manifest-Datei erfolgt, haben Sie die Möglichkeit das Programm "Comos.ManifestMaker.exe" dafür zu verwenden.
Beispiel Sie verwenden eine COM-DLL-Datei, beispielsweise eine DLL-Datei in Visual Basic, die "CustomComosExtension.dll" heißt. In der Kommandozeile oder in einer Script-Datei fügen Sie die folgende Zeile hinzu und führen diese aus:
Knoten File Im Knoten File finden Sie Informationen über die Komponente. Diesen Knoten fügen Sie folgendermaßen in die Datei "ComosCustomizeOcx.manifest" ein:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="ComosCustomizeOcx" version="1.0.0.0" type="win32" /> <!-- ************************************************************* --> <!-- ** ComosCustomizeOcx.manifest ** --> <!-- ** ** --> <!-- ** References to additional Assemblies or OCX Components ** --> <!-- ** ** --> <!-- ** please insert here manifest information for own ** --> <!-- ** components, that exist only at specific customer ** --> <!-- ** installation ** --> <!-- ************************************************************* --> <file name="Custom\MyCustomComosExtension.dll"> <typelib tlbid="{B7FFF897-DA01-4b88-AD41-F75CF213FE9C}" version="1.8" helpdir="" /> <comClass description="MyCustomComosExtension" progid="CustomComosExtension.HelperClass1" clsid="{69DAA847-D481-446E-967B-2DE3EFBBB672}" tlbid="{B7FFF897-DA01-4b88-AD41-F75CF213FE9C}" /> <comClass description="MyCustomComosExtension" progid="CustomComosExtension.HelperClass2" clsid="{9F40C2F3-96D4-40cf-83B9-6D85DDE8E0E9}" tlbid="{B7FFF897-DA01-4b88-AD41-F75CF213FE9C}" /> </file> </assembly>
In diesem Beispiel ist die Datei "MyCustomComosExtension.dll" im Unterverzeichnis "Custom" des Ordners "Bin" gespeichert. Deshalb wird das Attribut Name vom Knoten File entsprechend angepasst.
Side-by-Side-Konfiguration mit Manifesten 4.3 Manifeste für .NET-Assemblies erstellen und aktualisieren
4.3 Manifeste für .NET-Assemblies erstellen und aktualisieren
Vorgehen Um Manifeste für .NET-Assemblies zu erstellen und zu aktualisieren, gehen Sie folgendermaßen vor:
1. Verwenden Sie über die Befehlszeile das Werkzeug "Comos.ManifestMaker.exe".
2. Rufen Sie die Kommandozeile auf.
3. Geben Sie in die Kommandozeile folgende Zeile ein:
"<Installationsverzeichnis con COMOS>\PTV001_Vega\Bin\COMOS.ManifestMaker.exe" -type:DOTNET -filename:C:\Custom\ComosCustom.dll –output:C:\Custom
4. Führen Sie Ihre Eingaben aus.
Ergebnis Die generierte Manifest-Datei wird im Verzeichnis "Custom" gespeichert.
Hinweis
Achten Sie darauf, dass Manifest-Dateien, die Sie mit "mt.exe" erstellen, immer im gleichen Verzeichnis liegen, wie die in der Manifest-Datei zugewiesene Komponente.
Empfehlung Betten Sie bei einer .NET-Assembly (Anwendung oder Bibliothek) das Manifest in die endgültige Binärdatei ein.
Siehe auch Manifest in .NET-Assembly einbetten (Seite 26)
Side-by-Side-Konfiguration mit Manifesten 4.4 Manifest in .NET-Assembly einbetten
Voraussetzung Um ein Manifest in eine .NET-Assembly einzubetten, verwenden Sie die Parameter autoembed und mtpath.
Vorgehen Um ein Manifest in eine .NET-Assembly einzubetten, gehen Sie folgendermaßen vor:
Hinweis
Um Manifest-Dateien in .NET-Assemblies einzubetten, benötigen Sie das Programm "mt.exe" von Microsoft. Dieses Programm ist ein Bestandteil von Windows SDK ab Windows Vista oder von Visual Studio .NET SDK ab Visual Studio .NET 2005. Sie haben die Möglichkeit die SDKs kostenlos von der Microsoft-Homepage herunterzuladen.
1. Öffnen Sie die Eingabeaufforderung mit Zugriff auf das Verzeichnis, in dem die Datei "mt.exe" gespeichert ist.
2. Führen Sie für die Assembly folgenden Befehl aus:
Im folgenden Beispiel wird zunächst der String dimensioniert (char ASString[250]) und dann einen Variable vorbereitet, in der die COMOS SystemUIDs abgelegt werden können (char SystemUID[20]).
WinCC-spezifische Einstellungen Es folgen WinCC-spezifische Einstellungen: der if-else-Block dient zur Fehlersuche.
Hinweis
Die UIDs sind nur Beispiele. In Ihrer Datenbank werden andere UIDs existieren.
In der if-Zeile ist eine andere UID als in den beiden folgenden else-Zeilen (sonst würde der ganze if-else-Block ja keinen Sinn machen). Bei realen Daten wird man sicher tausende, wenn nicht sogar zehntausende Objekte (zum Beispiel Signale) verwalten, da ergeben if-else-Schleifen keinen Sinn mehr und müssen durch entsprechend fortgeschrittene Fehlerabfänger ersetzt werden.
Danach wird der String zusammengesetzt, der in der ersten Zeile dimensioniert wurde ("strcpy").
Erlaubte Parameter und Schalter Siehe Handbuch "COMOS starten", Stichwort "Parameter".
Die dort beschriebenen Schalter können jeweils an den String angehängt werden ("strcat").
Programmbeispiel Der in "ASString" gespeicherte String wird dann an den Befehl "ProgramExecute" übergeben. ProgramExecute findet in dem String als erstes den Aufruf von XIF und führt dieses dann mit den folgenden Parametern aus. { char ASString[250] ; char SystemUID[20]; if (GetTagBit("U2") == 1) strcpy( SystemUID, "/ID: C1D45BO8U7 " ); else if (GetTagBit("Fehler") == 1) strcpy( SystemUID, "/ID: A1D9VBO5U7 " ); else strcpy( SystemUID, "/ID: A1D9VBO5U7 " ); strcpy( ASString, "C:\\Programme\\COMOS\\Bin\\XIF.exe " ); strcat( ASString, "/DB: ACCESS ");
ControlProperties 66.1 Zugriff auf Property CtrlProperty über Lib.Sui
Controlproperties können mittels einer Konstante per Script gesetzt werden. Alternativ kann der Controlproperties-String zerlegt und wieder zusammengefügt werden.
Beispiel Schreibzugriff a.workset.lib.sui.CtrlProperty (27,a) = 0...'27 = Left a.workset.lib.sui.CtrlProperty (28,a) = 0...'28 = Top a.workset.lib.sui.CtrlProperty (29,a) = 20...'29 = Right a.workset.lib.sui.CtrlProperty (30,a) = 5...'30 = Bottom
Beispiel Lesezugriff cp=0...'0 = LabelSize Output a.workset.lib.sui.CtrlProperty (cp,a)
6.2 Massenbearbeitung von ControlProperties über Objektabfragen
Vorgehen ● Standardabfrage für Attribute anlegen.
● Abfrage aus xml-Datei laden (Beispiel: QueryControlProperties.xml; siehe das COMOS-Installationsverzeichnis, Unterordner Help\ Deutsch\ Sonstige Dokumentation\ ControlProperties Beispiele XML.zip).
● Weitere Spalten für gewünschte Properties hinzufügen:
– Unter Optionen, Spaltenbearbeitung Spalte kopieren,
– umbenennen,
– ggf. nummerisch umstellen,
– unter Eigenschaften in Scripten 'Wertberechnung' und 'Objekt per Wert' jeweils die Konstante cp für die Property auf gewünschten Wert ändern (s. Tabelle).
● Spalten für ControlProperties sind editierbar.
● Um ControlProperties von CSpecification an BackPointer zu übergeben, ebenfalls eine Abfrage aus einer XML-Datei laden (Beispiel: ControlPropertiesToBackPointer.xml; siehe das COMOS-Installationsverzeichnis, Unterordner Help\ Deutsch\ Sonstige Dokumentation\ ControlProperties Beispiele XML.zip). Konstanten cpX (s. Tabelle) für die Properties im Script von Aktionsblock ändern.
Legende zur Zuordnungsliste (Spalten) A = Edit E = Excel I = Repeater M = Query B = Border F = Check J = Memo N = FOpen C = Button G = Image K = Memo_rtf O = Link D = Label H = Signature L = Date P = List
Name A B C C E F G H I J K L M N O P 29 Right + + + + + + + + + + + + + + + 30 Bottom + + + + + + + + + + + + + + + 31 CaptionVisible + 32 Mode + 33 ExecuteValue + 34 LabelFontStrikethrough + + + + + + + + + + 35 ButtonStyle +
ControlProperties 6.4 Zuordnung ControlProperties zu SuiControls
Dieses Kapitel beschreibt, wie man 3D-Symbole mittels VisualBasic erzeugt, in einer dll ablegt und in COMOS für Viper verfügbar macht.
7.2 VB-Projekt anlegen
Vorbereitung Zunächst wird ein neues VB-Projekt erzeugt.
Modul und Interface deklarieren
Nun können die 3D-Zeichenprozeduren erstellt und parallel dazu die entsprechenden COMOS-Stammobjekte angelegt werden.
Ist dieser Vorgang beendet, erstellt man die dll-Datei des Projektes und legt diese im COMOS-Installationsverzeichnis "\<COMOS> \ OCX \ GL" ab. Abschließend wird die neue Datei in diesem Verzeichnis registriert (öffnen mit WINNT\system32\regsvr32.exe).
3D-Symbole erzeugen und einbinden 7.3 Anlegen eines COMOS 3D-Stammobjektes
Einleitung Jedes Stammobjekt, das in COMOS-Viper platziert wird, muss eine Registerkarte namens "GD" besitzen. Auf dieser Karte werden alle für die 3D-Ansicht wichtigen Attribute aufgeführt.
Für alle 3D-relevanten Attribute gilt: Registerkarte "Verknüpfung". "3D-Modus": Ein.
Bereits bestehende Attribute sind in der Auslieferungsdatenbank im Pfad "@Viper > @Y > @3D > @PP > 01 GD Registerkarte". Hier bereits bestehende Attribute sollten bei neuen Objekten wiederverwendet werden. Attribute deren Name "VC" + Zahl lautet, müssen unbedingt aus diesem Verzeichnis verwendet werden. Diese Attribute beschreiben Anschlüsse, auf die aus COMOS direkt zugegriffen wird.
Attribute für jedes 3D-Bauteil ● "VGEO GeoTyp":
Beinhaltet den Zeichenprozeduraufruf in der Form: (Dateiname der cls-Datei ohne "Objects") + "." + Zeichenfunktionsname
● Unerlässliche Attribute speziell für jedes Rohrleitungs-Bauteil:
– "VPCL Rohrklasse": Legt die Rohrklasse eines Objektes fest.
– "VFCD Funktionscode": Ordnet das Objekt einer Gruppe von ähnlichen Objekten zu. Dient zur Rohrklassenabbildung und der Identifizierung eines Objekttyps im Code.
Optionale Attribute ● "LAYER Ebene":
Legt eine Gruppe von Objekten fest, die gemeinsam ein- und ausgeblendet werden.
● "VCOL Farbe": Legt die Farbe des Objektes fest.
● "VR01 AR-Code": Bestimmt den Status eines Objektes beim Routen. Ist dieses Attribut nicht vorhanden, wird das Bauteil vom Router berücksichtigt.
● "VSUI Editierbare Attribute": Beinhaltet durch Komma getrennt, die Namen aller Attribute, die in der 3D-Oberfläche angezeigt werden, wenn das entsprechende Objekt selektiert ist. Hier muss der D3-Modus nicht gesetzt werden, da dieses Attribut auch außerhalb des Viper Moduls verwendet werden kann.
3D-Symbole erzeugen und einbinden 7.4 Anlegen der Zeichenprozeduren
7.4 Anlegen der Zeichenprozeduren Definition einer Prozedur mit sprechendem Name (z.B. Box als Prozedurname für einen Quader). Zusätzlich sollte jede Zeichenfunktion mit einem ErrorHandler ausgestattet sein:
Deklaration der Variablen und Einlesen der Attributwerte von der GD-Registerkarte mit dem Befehl Geo.Value ("Attributname").
3D-Symbole erzeugen und einbinden 7.4 Anlegen der Zeichenprozeduren
Die Zeichenfunktion wird in COMOS mehrmals aufgerufen, wobei jedes Mal ein oder mehrere Teile des Symbols gezeichnet oder aktualisiert werden. Deshalb unterscheidet man mit Geo.GeometrieMode den Status des aktuellen Prozeduraufrufs. Es existieren, wie man unten sehen kann, 7 unterschiedliche Zustände, die man jeweils in einer If-Abfrage definiert. Nicht benötigte GeometrieModes müssen in der Prozedur nicht definiert werden.
3D-Symbole erzeugen und einbinden 7.5 Vordefinierte Zeichenfunktionen
Nun Zeichnet man die Form des Symbols in der If-Schleife mit dem Ausdruck Geo.GeometrieMode.GenerateGeometrie.
7.5 Vordefinierte Zeichenfunktionen
7.5.1 Einleitung Die eingezeichneten Koordinatenachsen geben den Nullpunkt und die Orientierung des Bauteils an (grün: x-Achse, gelb: y-Achse, blau: z-Achse).
3D-Symbole erzeugen und einbinden 7.5 Vordefinierte Zeichenfunktionen
Funktion Geo.ExzCylinder BaseRadius As Double, TopRadius As Double, Height As Double, Offset As Double, [Top As Boolean=Wahr], [Bottom As Boolean=Wahr]
3D-Symbole erzeugen und einbinden 7.5 Vordefinierte Zeichenfunktionen
Funktion Geo.TorusArcSegment SmallRadius As Double, BigRadius As Double, [StartAngleForBigRadius As Double], [AngleForBigRadius As Double], [StartAngleForSmallRadius As Double], [AngleForSmallRadius As Double=360]
Gezeichnete Außenfläche wird mit StartAngleForBigRadius und AngleForBigRadius beeinflusst:
3D-Symbole erzeugen und einbinden 7.5 Vordefinierte Zeichenfunktionen
Funktion Geo.ExzPyramide Width As Double, Depth As Double, Height AS Double, [TopWidth As Double], [TopDepth As Double], [OffsetX As Double], [OffsetY As Double]
OffsetX und OffsetY beschreiben den Versatz der Deckelfläche gegenüber der Bodenfläche entlang der X- und Y-Achse.
3D-Symbole erzeugen und einbinden 7.5 Vordefinierte Zeichenfunktionen
Funktion Geo.TorusArc1 SmallRadius As Double, BigRadius As Double, [StartAngle As Double], [Angle As Double = 360], [ReducedSmallRadius As Double = -1], [NumberOfSegments As Long = -1]
7.5.25 OpenGL-Funktionen
Navigieren im 3D-Raum Zusätzlich stehen von OpenGL abgeleitete Funktionen zum Navigieren im 3D-Raum zur Verfügung:
● Rotation um beliebige Achse Geo.Rotate
AngleDegree As Double,
X AS Double,
Y As Double,
Z As Double
● Rotation um bestimmte Objektachse
– Geo.RotateX
AngleDegree As Double
– Geo.RotateY
AngleDegree As Double
– Geo.RotateZ
AngleDegree As Double
3D-Symbole erzeugen und einbinden 7.5 Vordefinierte Zeichenfunktionen
● Verschiebung relativ zur aktuellen Position Geo.Move
X As Double,
Y As Double,
Z As Double
● Aktuelle Position merken Geo.PushMatrix
● Zu gemerkter Position zurückkehren Geo.PopMatrix
● Zum absoluten Nullpunkt zurückkehren Geo.LoadIdentity
● Die Position der angegeben Matrix wird eingenommen Geo.LoadMatrix m As MATRIX3D
7.5.26 Anschlüsse erzeugen
Symbole mit Konnektoren verbinden (allgemein) Um das neu erzeugte Symbol mit anderen Symbolen verbinden zu können, muss man es mit Konnektor ausstatten. Das funktioniert analog zum Zeichnen der Grundform, in der oben genannten If-Schleife. Man bewegt sich also im Raum an die Stelle an der der Konnektor am Symbol platziert wird, richtet sich aus (Befehle siehe oben) und zeichnet den Konnektor mit dem Funktionsaufruf: Geo.GeoConnector (Index As Long, [ConnectorClass As eConnectorClass=ConnectorClass_General] As I3Dconnector)
Der Index des Konnektors muss >0 sein. In diesem Zusammenhang werden 6 Konnektorklassen, die jeweils unterschiedliche Eigenschaften haben, unterschieden:
● ConnectorClass_VesselNozzle (für Behälter und Kolonnen)
Besondere Angaben für ConnectorClass_Pipe Bitte beachten: Erzeugt man Konnektoren vom Typ ConnectorClass_Pipe, so muss man darauf achten, dass diese Konnektoren Informationen über ihre Nennweite, Nenndruck und Anschlussart erhalten müssen:
● VC11, VC12 und VC13 müssen an jedem Objekt mit Konnektoren vom Typ ConnectorClass_Pipe auf der Registerkarte "GD" vorhanden sein.
3D-Symbole erzeugen und einbinden 7.5 Vordefinierte Zeichenfunktionen
Des Weiteren kann man (optional) folgende Attribute anlegen, um den neuen Konnektor zu definieren:
● "VC" + Konnektorindex + "1" für Nennweite
● "VC" + Konnektorindex + "2" für Nenndruck
● "VC" + Konnektorindex + "3" für Anschlussart
Ist eins dieser Attribute nicht vorhanden, wird schrittweise versucht auf Attribute mit kleinerem Konnektorindex zuzugreifen.
Hat ein Konnektor dieses Typs die Anschlussart "geflanscht", so wird die Flanschfläche automatisch gezeichnet. Das funktioniert nur wenn für diesen Konnektor ein Nenndruck ausgewählt wurde.
Beispiel:
Das Attribut "VC11" ist auf der Registerkarte "GD" vorhanden. Legt man nun einen Konnektor vom Typ ConnectorClass_Pipe mit Index 4 an, so passiert folgendes:
Da "VC41" nicht vorhanden ist wird versucht erst auf "VC31" und dann auf "VC21" zuzugreifen. Da diese beiden Attribute auch nicht vorhanden sind, wird der Wert schließlich aus dem Attribut "VC11" ausgelesen.
3D-Symbole erzeugen und einbinden 7.5 Vordefinierte Zeichenfunktionen
7.5.27 Bemaßungen (Grabs) Anschließend können Sie im Modus Geo.GeometrieMode.GenerateGrabs, einem Attribut zugeordnet, eine Bemaßung definieren. Es ist somit möglich ein Objekt im 3D-Plan online anzupassen.
7.5.28 Anfasser (SnapPoints) Modus Geo.GeometrieMode.GenerateSnapPoints definiert zusätzliche Anfasser.
7.5.29 Expertenfunktionen Folgend Expertenfunktionen sind verfügbar:
● Geo.GeometrieMode.GenerateOutlines
● Geo.GeometrieMode.GenerateCenterLines
Geo.GeometrieMode.GenerateCenterLines Modus Geo.GeometrieMode.GenerateOutlines definiert zusätzliche Außenlinien. Implementierung in diesem Modus sollten vermieden werden, da es zu fundamentalen Fehlern kommen kann.
3D-Symbole erzeugen und einbinden 7.5 Vordefinierte Zeichenfunktionen
Geo.GeometrieMode.GenerateCenterLines Modus Geo.GeometrieMode.GenerateCenterLines definiert zusätzliche Linien. Implementierung in diesem Modus sollten vermieden werden, da es zu fundamentalen Fehlern kommen kann.
3D-Symbole erzeugen und einbinden 7.5 Vordefinierte Zeichenfunktionen
Icon-Spezifikationen 8Technische Spezifikationen für Icons
● 72 dpi
● RGB 8-bit
● 16x16 Nur Icons in der Größe von 16x16 werden offiziell unterstützt. Alle anderen Formate werden nicht an jeder Stelle in COMOS korrekt dargestellt.
● Skalierung: Ab COMOS 8.2 gilt: die Seitenverhältnisse werden nicht automatisch beibehalten. Stattdessen entscheidet die verwendende Stelle in COMOS, wie das Bild dargestellt wird.
● Hintergrund: Transparent Aus Interoperabilitätsgründen (wegen VB) muss die PicturesLibrary beim konvertieren zwischen den beiden Welten (COM und .NET) eine Farbe als transparent markieren. Hierbei hält sich PicturesLibrary an den Standard von Microsoft und nimmt dafür die Farbe des unteren linken Pixels des Bildes (es sei denn der ist Schwarz). Wer also ein Bild erstellt oder eins in der Datenbank findet, welches nur eine Farbe hat und diese auch auf dem unteren linken Pixel gesetzt ist, darf sich nicht wundern wenn er dann kein Bild mehr sieht bzw. diese Farbe in dem Bild fehlt.
Document: Function CreateDWG ( x1 as Double, y1 as Double, x2 as Double, y2 as Double ) as Object
CreateDWG erzeugt einen Platzhalter (= Rechteck) für eine DWG/DXF-Datei auf dem Report. Die Parameter sind die Koordinaten des Platzhalters. Als Rückgabewert wird von der Klasse ReportDWG ein Objekt geliefert. An diesem Objekt wird mit der Eigenschaft FileName die anzuzeigende AutoCAD-Datei bestimmt.
Man kann CreateDWG überall dort verwenden, wo man Zugriff auf ComosReportDocument hat (also auf die Klasse Document von Report.ocx). In Reportvorlagen ist das bei allen platzierten Objekten der Fall, die in den Eigenschaften eine Registerkarte Script besitzen.
Set MyDwg = ReportDocument.CreateDWG(x1, y1, x2, y2)
MyDWG.FileName = "xyz.dwg"
9.2 UseSpecs.dll Liefert mittels der Funktion GetUseSpecifications alle Verwendungen. Damit ist diese Funktion das scripttechnische Gegenstück zur Registerkarte "Verwendung".
GetUseSpecifications Function GetUseSpecifications(ByVal Spec As IComosDSpecification, ByVal ObjType As ObjectType, ByVal DocType As DocumentType, ByVal ProjType As ProjectType, ByVal Inherit As Boolean) As IComosDCollection Spec: ObjType: DocType: ProjType: Inherit:
Option DocumentType ("Berücks. Dokumente") 0: Keine
1: Vorlagen
2: Planung
3: Alle
Option ProjectType ("Projekt") 0: Aktuelles
1: Alle
Beispiel 1 Das folgende Beispiel liefert alle Verwendungen des Attributs "CurrentSpec", dabei werden nur Stammobjekte, Dokumentenvorlagen im aktuellen Projekt berücksichtigt.
Außerdem findet eine Auswertung mit geerbten Objekten statt (True-Parameter). Set UseSpesDLL = CreateObject("ComosUseSpecs.UseSpecs") If Not UseSpesDLL Is Nothing Then Set SpecCol = UseSpesDLL.GetUseSpecifications (CurrentSpec, 1, 1, 0, True) End If
Beispiel 2 Ausgabe eines Attributes im Objektdebugger. 'CurrentSpec ist dann z.B. das gedraggte Objekt im Editfeld "A" => UseSpesDLL.GetUseSpecifications (A, 1, 1, .... Output "SpecCol.Count = " + cstr(SpecCol.Count) For i = 1 To SpecCol.Count Output SpecCol.item(i).systemfullname Next