Allgemeines
Nachfolgende Abbildung, entnommen von Seite 102 der CifX-API Dokumentation, 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 Abbildung zeigt die Standard-Sequenz zum Starten der Bus-Kommunikation. 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 so genannten 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 sich auf Seite 11 des DPM-Manuals.
Cyclic Data-Transfer
Ist der Bus online kann über die verschiedenen Mechanismen die Prozess-Daten 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 Prozess-Daten-Area für Eingangs- und Ausgangs-Daten.
Die Prozess-Daten 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 zum übergeben 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 so genannten „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 auf den Seiten 100 und 102 des DPM-Manuals 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 Protokoll-Unabhä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"
Grundsätzlich erlaubt die CifX-Karte auch einen automatischen Start der Kommunikation sobald die Karte startet. 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 DTM (Sycon.NET) durchgeführt werden.
References
- cifX-API: cifX API (Revision 6)
- netX Dual-Port-Memoy Interface DPM: Dual-port memory manual (Revision 15)