Allgemeines
Nachfolgende Abbildung, entnommen aus dem CIFX API Manual (cifX API), zeigt die Standard-Sequenz zum Starten der Bus-Kommunikation, einschließlich vorausgehender Konfiguration des Protokoll-Stacks.
Die Konfiguration selbst ist abhängig vom eingesetzten Protokoll-Stack und wird hier daher nicht genauer präzisiert.
Handles & Channels
Die oben gezeigte Abbildung stellt die Standard-Sequenz zum Starten der Bus-Kommunikation dar. Im ersten Schritt muss der Treiber über xDriverOpen() (0) geladen und der Channel mittels xChannelOpen() (1) geöffnet werden.
Beide Funktionen generieren Handles die im weiteren Verlauf der Applikation benötigt werden.
Die Handles müssen also zur Laufzeit der Anwendung erhalten bleiben, allerdings auch vor dem Beenden der Applikation über die jeweiligen Close-Funktionen (4 & 5) beendet werden.
Der Channel-Handle der durch xChannelOpen() erzeugt wird, verweist auf die Start-Adresse von Channel[n] auf dem Dual-Port-Memorys (DPM).
Ein Channel dient als Zugangspunkt für die Kommunikation über den Protokoll-Stack. Eine genaue Beschreibung über die verschiedenen Abschnitte des DPM befindet im Dual-port memory interface Manual.
Cyclic Data-Transfer
Ist der Bus auf ON geschaltet, können über die verschiedenen Mechanismen die Prozessdaten abgerufen bzw. gesendet werden, siehe Abschnitt (A). Die einfachste und empfohlene Methode ist die Verwendung der xChannelIORead()- und xChannelIOWrite-Funktionen.
Sie übernehmen die korrekte Adressierung am DPM und die Einhaltung der Handshakes. Jeder Channel des DPM verfügt dafür über je eine Prozessdaten-Area für Eingangs- und Ausgangs-Daten.
Die Prozessdaten werden stets als Byte-Array organisiert und als solche in den Funktions-Parametern übergeben. Mittels des Offset- und Length-Parameter kann das Prozess-Image frei adressiert werden.
Die Interpretation des Byte-Streams liegt in der Verantwortung der Applikation. Eine Funktion zur Übergabe anderer Datentypen gibt es nicht.
Communication States
Auf dem DPM im so genannten Common Status Block sowie Common Control Block sind verschiedene Zustands-Automaten definiert die über den aktuellen Status des Geräts sowie des Bus-Stacks abbilden.
Die „Change of State“ sowie das „Communication State" Register informieren über aktuelle Zustände des Device bzw. ermöglichen die Einflussnahme durch die Applikation.
Genauere Informationen können dem Dual-port memory interface Manual entnommen werden. Der einfachste Weg die nötigen Flags zu triggern bzw. abzufragen ist die Verwendung der Funktionen xChannelHostState() (2) sowie der xChannelBusState() (3).
Das aktivieren des Buses über die xChannelBusState()-Funktion unterliegt einer gewissen zeitlichen Verzögerung. Für den Aufruf der Funktion sollte also ein ausreichend großer Timeout anberaumt werden. Sollte die Funktionen den Fehler 0x800C0021 „COM-flag not set“ zurückgeben, bedeutet dies jedoch nicht zwangsläufig einen Fehlschlag.
Da der Prozess im Hintergrund weiterläuft, kann der Bus zu einem späteren Zeitpunkt noch aktiviert werden.
Hinweis: Wird während dieses Vorgangs eine xChannelIO-Funktion oder erneut xChannelBusState() aufgerufen wird diese sich mit dem oben genannten Fehler zurückmelden.
Bei wiederholten Aufrufen wird die Funktion den Status „OK“ und korrekte Nutzdaten zurückliefern sobald der Bus online ist.
Stack-Configuration
Grundsätzlich gibt es verschiedene Wege die Konfiguration des Protokoll-Stacks durchzuführen. Die Konfiguration selbst ist Protokollabhängig und wird daher in der Illustration nicht genauer präzisiert. Wird die Konfiguration mittels Datei Download durchgeführt (u. A. Sycon.NET) kann der Abschnitt (B) ignoriert werden.
Sycon.NET - "Start of bus communication"
Die meisten COMSOL Produkte (z.B: CIFX oder netrHOST) erlauben einen automatischen Start der Kommunikation, sobald das Gerät dazu bereit ist.
Dies hängt jedoch von der Konfiguration des Start of bus communication Flags ab.
Applikativ wird dieses Flag über die Konfigurations-Pakete der Protokoll-API festgelegt. Alternativ kann die Einstellung auch über ein DTM (SYCON.net) durchgeführt werden.