Kithara »Serial Toolkit«
Das »Serial Toolkit« erlaubt die Programmierung von vielfältigen Kommunikationsaufgaben vor allem im industriellen Umfeld.
Es stehen zwei verschiedene Betriebsarten bereit: Entweder unter Nutzung von Betriebssystem-Funktionen, wodurch alle im System bekannten COM-Schnittstellen unterstützt werden. Oder durch direkte Ansteuerung der UART-Hardware, was die echtzeitfähige Behandlung aller Schnittstellen-Ereignisse ermöglicht. Das API beider Betriebsarten ist ähnlich.
Das »Serial Toolkit« findet sein Anwendungsgebiet immer dann, wenn Kommunikationsprotokolle für die serielle Schnittstelle des PCs zu entwickeln sind. Mit dem Fokus auf eine einfache Anwendbarkeit sind die verschiedenen Szenarien mit sehr kurzer Einarbeitungszeit umsetzbar. Es erlaubt die Programmierung nahezu beliebiger, auch komplexer Kommunikationsaufgaben in industriellen Lösungen, die in hardwarenahen und zeitkritischen Anwendungen benötigt werden.
Zur Erzielung der Echtzeitfähigkeit wird die gesamte Kommunikation hocheffizient auf der Kernel-Ebene realisiert, wodurch die zeitlich genaue Reaktion auf alle Schnittstellen-Ereignisse und die direkte Beeinflussung der Hardware möglich werden.
Um das zu erreichen, wird dem Programmierer der Zugang zur Kernel-Ebene eröffnet. Er bleibt dennoch innerhalb seiner gewohnten Entwicklungsumgebung für C/C++ oder Delphi, um jegliche industrielle Kommunikationsprotokolle realisieren zu können.
- Schnelle und flexible Reaktion auf eintreffende Daten und Ereignisse
- Direkte Ansteuerung der Handshake-Leitungen
- Handler für alle Ereignisse, z.B. Byte-Handler, LSR-, MSR-Change, Break, Error
- Alle Schnittstellen mit Betriebssystem-Unterstützung nutzbar
- Erkennung von "transmit empty" (z.B. für RS485-Richtungsumschaltung)
- Automatische RS485-Richtungsumschaltung programmierbar
- Endlos-Modus für direktes Senden aus Anwender-Puffer und andere spezielle Szenarien
- Automatische Timeout-Überwachung
- Dynamische Initialisierung einschl. Baudraten-Umschaltung
- Senden und Empfangen auf der Anwendungs- oder Kernel-Ebene
- Echtzeit-Reaktion auf jedes einzelne Zeichen möglich
- Benachrichtigung bei Übertragungsfehlern, Timeout, Abbruch etc.
- Benachrichtigung bei Modem-State- oder Line-State-Änderung
- UART-Hardware-Unterstützung von 16550 bis 16950
- Nutzung der Kernel-Ebene unterstützt C/C++ oder Delphi (Win32 native)
- Unterstützt die folgenden Betriebssysteme: Windows 7, Vista, Server 2003, XP, 2000 und NT
- Beschreibung
- Eigenschaften
- Beispiele
- FAQ
- Hardware
Das Base Module ist die Grundlage der gesamten »RealTime Suite«.
Erzeugen Sie alle benötigten Ressourcen, die zum Beispiel für die Kommunikation zwischen Anwendung und Kernel-Ebene sorgen!
Das Base Module stellt Funktionen zur Verwaltung des Kernel-Treibers bereit. Die »RealTime Suite« kann dabei von mehreren Programmen gleichzeitig verwendet werden.
Das Base Module enthält Funktionen zur Erzeugung und Verwaltung folgender Ressourcen:
- Shared Memory
- Daten- und Message-Pipes für schnellen Datenaustausch
- Event-Objekte
- CallBack-Funktionen
- Threads
- Quick-Mutexe
Im Base Module befinden sich mehrere Funktionen, die dem Absetzen von Meldungen an den »Kernel Tracer« dienen. Das erleichtert die Fehlersuche und ist auch für Profiling-Aufgaben einsetzbar.
Beachten Sie auch das Kernel Module, das weitere allgemein gültige Funktionen bereitstellt und für den Zugang zur Kernel-Ebene unverzichtbar ist.
Das Base Module ist immer erforderlich.
- Allgemeine Funktionen
- Öffnen/Schließen des Kernels
- Versionskontrolle, Treiber-Konfiguration
- Threads
- Erzeugen von Threads
- Ermitteln/Setzen beliebiger Stufen der absoluten Thread-Priorität
- Shared Memory
- Shared Memory speziell für Datenaustausch
- geschützt vor Festplatten-Auslagerung (fest im Speicher)
- mehrere Bereiche mit jeweils bis zu über 60 MByte
- Pipes
- Lock-freie und schnelle Daten- und Message-Pipes
- ermöglicht komfortablen und synchronisierten Datenaustausch in beliebiger Richtung zwischen Kernel und Anwendung
- keine weitere Synchronisation benötigt (auch auf Multi-Core-CPUs)
- Signalisierung
- Event-Objekte: Setzen, Rücksetzen und Pulsen aktiviert Anwendungs-Thread
- Callback-Ausführung von Anwendercode auf Kernel- oder Anwendungsebene
- Versenden von Windows-Messages
- Quick-Mutexe
- Schnelle Synchronisation ("Mutex" = Mutual Exclusion)
- Multiprozessortauglich
- Device-Information
- Ermittlung der Geräteinformationen von PCI-, USB-, COM-, HID-Devices etc.
- Debug-Unterstützung
- Absetzen formatierter Text-Meldungen von der Kernel-Ebene aus
- Kompatibel zum »Kernel Tracer« für Profiling und Fehlersuche
Das Base Module stellt vielfältige Werkzeuge bereit, z.B. Shared Memory für den Datenaustausch zwischen Anwendung und Kernel:
err = KS_createSharedMem(
&pAppPtr, // Application-Adresse
&pSysPtr, // Systemadresse des Speichers
"MySharedMem", // Global gültiger Name
40 * MegaBytes, // Länge in Bytes
0); // Flags, hier 0
Zur Vereinfachung für regelmäßigen Datenaustausch ist eine Daten-Pipe ideal, die intern ebenfalls auf Shared Memory basiert:
err = KS_createPipe(
&hPipe, // Adresse des Pipe-Handles
"MyValuePipe", // Name der Pipe
2, // Datengröße (z.B. Messwerte)
1000000, // max. Anzahl Datenelemente
NULL, // reserviert
0); // Flags, hier 0
Nun kann z.B. der Kernel ermittelte Messwerte in der Pipe ablegen:
err = KS_putPipe(
hPipe, // Pipe-Handle
valueBuffer, // Zeiger auf Datenpuffer
valueCount, // Anzahl der Messwerte
NULL, // hier nicht benutzt
0); // Flags, hier 0
Die Anwendung kann nun die Messwerte aus der Pipe lesen:
err = KS_getPipe(
hPipe, // Pipe-Handle
buffer, // Zeiger auf Datenpuffer
bufferSize, // max. Größe des Puffers
&filledSize, // wieviel Werte gelesen?
0); // Flags, hier 0
Daten mit variabler Länge (z.B. Messages) lassen sich optimal mit einer Message-Pipe verarbeiten. Diese ist sehr ähnlich zu verwenden.
- Welche Voraussetzungen müssen allgemein erfüllt sein?
- Unterstützung von Single- oder Dual-Core-, Multi-Core-CPUs, Hyperthreading, SMP etc.
- Unterstützung von Standard-PIC oder APIC, ACPI
- optimal ist ein moderner Dual-/Quad-Core-PC (mit APIC + ACPI)
- Unterstützung von Windows 2000, Windows XP (Embedded), Windows Server 2003, Windows Vista (x86)
- Programmierung der Kernel-Ebene in C/C++ und Delphi (Win32)
- Welche Besonderheiten ergeben sich beim Umgang mit Shared Memory?
- wird nicht auf die Festplatte ausgelagert und ist daher immer verfügbar (auch innerhalb der RealTime-Umgebung)
- ist sowohl von der Anwendungsebene als auch vom Kernel aus ansprechbar
- ist nur einmalig vorhanden und kann daher auch dem Datenaustausch zwischen verschiedenen Anwendungen dienen (es ist jedoch in jedem Programm einmal KS_createSharedMem zu rufen)
- ist anfangs mit 0 initialisiert – durch einen Zähler lässt sich ermitteln, ob der Speicher bereits zuvor von anderen Programmen verwendet wurde
- Zugriffe auf den Speicher sind nicht automatisch synchronisiert (für synchronisierten Zugriff empfehlen wir Daten- und Message-Pipes)
- 32-Bit-CPU
- max. 8 logische Prozessoren (Chips * Kerne * Threads), darüber auf Anfrage
Echtzeitfähigkeit wird nur auf der Kernel-Ebene erzielt.
Bringen Sie Ihren Anwendercode auf die Kernel-Ebene und schaffen Sie sich dadurch den Zutritt zur Echtzeit-Welt unter Windows!
Benötigt werden hierzu C/C++-Compiler oder das Entwicklungstool Delphi (Win32), um nativen x86-Code erzeugen zu können. Beachten Sie jedoch, dass z.B. auch die .NET-Umgebung mit C# unterstützt wird, indem eine native C++- oder Delphi-DLL für den Kernel-Zugang sorgt. Entsprechende sofort compilierbare Projekte befinden sich in jeder Software-Lieferung.
Es gibt zwei verschiedene Wege, um Ihren Anwendercode auf die Kernel-Ebene zu bringen:
- Befehlsweise Relozierung einer Callback-Funktion und ihrer Subroutinen in den Kernel-Adressraum
- Laden einer DLL direkt auf die Kernel-Ebene
Während die erste Methode für kleinere Projekte durchaus Vorteile besitzt, bietet die zweite Variante wesentlich mehr Möglichkeiten und erlaubt z.B. auch die einfachere Erzeugung von Debug-Meldungen, die sich im »Kernel Tracer« für Fehlersuche und Optimierung auswerten lassen.
Außerdem realisieren Sie damit komplexe Steuerungsanwendungen, deren grafische Oberfläche z.B. mit Java oder C#.NET erstellt wird, während nur die zeitkritischen Code-Teile der DLL im Kernel-Modus laufen.
Das Kernel Module ist Voraussetzung, um Anwendercode auf der Kernel-Ebene ausführen zu können.
- Relokation von Callback-Funktionen und deren Subroutinen
- Direktes Laden einer DLL in den Kernel
- DLL zu erstellen mit C/C++ oder Delphi (Win32)
- Callback-Funktionen werden direkt in Interrupt Service Routine (ISR) oder im Echtzeit-Timer-Kontext ausgeführt
- Alle wichtigen Funktionen der »RealTime Suite« auch von der Kernel-Ebene aus aufrufbar, z.B.:
- I/O-Port-Zugriffe
- Zugriffe auf physischen Speicher
- Zeitmessung, genaue Kurzzeitverzögerung
- Senden und Empfangen bei Daten- und Message-Pipes
- Senden und Empfangen bei seriellen Schnittstellen
- Senden und Empfangen bei Ethernet-Controllern
- EtherCAT-Datenaustausch
- Setzen, Rücksetzen, Pulsen von Events
- Ereignisse von Kernel-Ebene: Events und Windows-Messages
- Schneller Datenaustausch zwischen Anwendung und Kernel über Shared Memory oder lock-freie Daten- und Message-Pipes
Angenommen, Ihre Callback-Funktion für den Echtzeit-Timer sieht so aus:
int __stdcall myTimerCallback(
void* pArgs, // Adresse der Referenzdaten
void* pContext); // Adresse der Kontextdaten
Es gibt nun zwei Wege, um den Anwendercode auf die Kernel-Ebene zu bekommen:
err = KS_createCallBack(
&hCallBack, // Adresse des Handles
myTimerCallback, // Adresse der Funktion
pSysAddrOfMyData, // Referenzparameter
KSF_KERNEL_EXEC, // auf der Kernel-Ebene!
0); // Anwendungspriorität, hier 0
Auf diese Weise wird die Funktion in den Kernel-Speicher geladen.
Alternativ lässt sich eine ganze DLL in den Kernel laden:
err = KS_loadKernel(
&hKernel, // Adresse des Handles
"mykernel.dll", // Dateiname der Kernel-DLL
"myInitFunction", // Name der Init-Routine
pArgs, // Referenzparameter
KSF_KERNEL_EXEC); // Flags, in Kernel laden
Einmal in den Kernel geladen, kann nun ganz ähnlich ein Kernel-Callback erzeugt werden:
err = KS_createKernelCallBack(
&hCallBack, // Adresse des Handles
hKernel, // Kernel-Handle
"myTimerCallback", // Name der Funktion
pSysAddrOfMyData, // Referenzparameter
KSF_KERNEL_EXEC, // auf der Kernel-Ebene!
0); // Anwendungspriorität, hier 0
Die Callback-Handles lassen sich nun als Timer oder Interrupt-Handler anmelden oder z.B. zur Echtzeit-Signalisierung bei eintreffenden Ethernet-Frames.
Hinweis: Vollständige Projekte, die eine Rahmenanwendung in einer der Sprachen C++, C# oder Delphi sowie eine in den Kernel geladene DLL in C++ oder Delphi enthalten, sind Bestandteil jeder Software-Lieferung.
- Wie kann der Kernel mit der Anwendung kommunizieren?
- Shared-Memory-Bereiche für nicht synchronisierten Datenaustausch
- Daten- und Message-Pipes basierend auf Shared Memory (Lock-frei, daher sind die lesende und die schreibende Seite gegeneinander synchronisiert)
- Kernel kann Event-Objekte setzen, um Anwendungs-Threads zu aktivieren
- Anwendungsebene kann die Ausführung von Funktionen im Kernel auslösen
- Windows-Messages
- Wie lässt sich Code für die Kernel-Ebene debuggen?
- Anwendercode lässt sich innerhalb der Entwicklungsumgebung debuggen:
- Callback-Funktion wird durch spezielles Flag auf der Anwendungsebene ausgeführt
- Kernel-DLL wird durch spezielles Flag auf die Anwendungsebene geladen
- Shared Memory, Events, Zugriffe auf I/O-Ports und physischen Speicher etc. sind in beiden Kontexten verwendbar
Keine speziellen Hardware-Anforderungen
Das IoPort Module ermöglicht den Zugriff auf I/O-Register des Computers.
Greifen Sie mit dem IoPort Module auf die I/O-Ports des Computers direkt aus der Anwendung heraus zu!
Sowohl bei eingebauten Hardware-Baugruppen als auch Mezzanin- und PC-Einsteckkarten erfolgt die Ansteuerung in den meisten Fällen mittels Zugriffen auf die I/O-Register von Controllern. Hierfür stehen Funktionen für 8-, 16- und 32-Bit-Zugriffe zur Verfügung.
Das IoPort Module ist auch erforderlich, um die Hardware-Ressourcen (z.B. Speicheradressen oder Interrupt-Leitungen) zu ermitteln, die vom Plug&Play-Manager von Windows dynamisch zugewiesen wurden.
Mit dem Begriff "I/O-Ports" sind hier übrigens nicht COM-Ports oder LPT-Ports gemeint, sondern die insgesamt 65536 über I/O-Maschinenbefehle ansprechbaren I/O-Adressen des Systems. Damit lassen sich natürlich auch die I/O-Register der COM- und LPT-Controller ansprechen.
Ergänzen Sie Ihren Custom Driver um das Memory Module, wenn die Hardware, die Sie ansprechen wollen, einen Speicherzugriff bietet.
- I/O-Port-Zugriffe
- Freigabe des Direktzugriffs auf I/O-Ports möglich
- I/O-Zugriffe aus Anwendungsprogramm ohne Kontextwechsel möglich
- Zugriffsschutz des Betriebssystems auf andere als die freigegebenen Adressen weiterhin intakt und aktiv
- Nur eigene Anwendung erhält Zugriff auf Adressen
- Keine Beeinträchtigung des Systems
- Funktionen für direkten und indirekten I/O-Zugriff
- 8-, 16- und 32-Bit-Zugriffe, lesend oder schreibend
- Funktionen kompatibel zu (unter DOS) bekannten C-Makros
- Ressourcen-Ermittlung
- Ermittlung der vom Plug&Play-Manager zugewiesenen Ressourcen (Basisadressen, IRQs)
- Lesen und Schreiben des PCI-Konfigurationsblockes
Wenn der direkte I/O-Port-Zugriff genutzt werden soll, ist zunächst der I/O-Bereich für den Direktzugriff freizuschalten:
err = KS_enableIoRange(
myBaseAddress, // Basisadresse der Hardware
8, // Anzahl der I/O-Register
KSF_SIZE_8_BIT); // Flags, hier byte-weise
Nun können die freigegebenen Hardware-Register direkt adressiert werden:
byte value = KS_inpb(
myBaseAddress + 2); // Adresse, 1 Byte lesen
... // Byte auswerten
KS_outpb(
myBaseAddress + 4, // Adresse, 1 Byte schreiben
value); // Byte schreiben
Wenn die I/O-Basisadresse einer PCI-Karte vom Plug&Play-Manager dynamisch vergeben wurde, kann diese ganz leicht ermittelt werden, indem entweder alle PCI-Baugruppen durchsucht werden, bis die gewünschte (anhand Vendor- und Device-ID) gefunden wird:
err = KS_getBusData(
&pciData, // Adresse der PCI-Struktur
busNumber, // Bus-Nummer
slotNumber, // Gerätenummer und Funktion
0); // Flags, hier 0
if (pciData.vendorID == XXXX && pciData.deviceID == YYYY)
...
Oder es wird sofort die gewünschte ID-Kombination gesucht:
err = KS_getRessourceInfo(
"PCI\\VENxxxx&DEVyyyy", // ID-Kombination
&resourceInfo); // Adresse der Resourcen-Info
Die erhaltenen Datenstrukturen enthalten nun die benötigten Angaben über Interrupt-Leitung und benutzte I/O- oder Speicher-Basisadressen.
- Wie können die vom PCI-Plug&Play dynamisch zugewiesenen Ressourcen ermittelt werden?
- entweder mit 'KS_getBusData': Iterieren über alle im System befindlichen PCI-Geräte, bis anhand der Parameter (Vendor-Id, Device-Id, etc.) das gesuchte Gerät gefunden wurde
- oder mit 'KS_getResourceInfoEx': Übergabe der Parameter des gesuchten Gerätes und Auswertung der beschreibende Datenstruktur
- mit 'KS_getResourceInfo' lassen sich auch die Daten anderer Schnittstellen ermitteln, z.B. serielle ("COM") oder parallele ("LPT") Schnittstellen, Netzwerkkarten ("NET") für das Packet Module sowie USB-Geräte ("USB")
Keine speziellen Hardware-Anforderungen
Das Serial Module bietet serielle Kommunikation in Echtzeit.
Realisieren Sie umfassende serielle Kommunikationsprotokolle unter Windows!
Das Serial Module unterstützt zwei verschiedene Betriebsarten: Entweder serielle Kommunikation über alle COM-Schnittstellen des PCs ohne Echtzeit oder serielle Kommunikation in Echtzeit und direkte Hardware-Ansteuerung über UART-16550 oder höher.
Mit dem Serial Module lassen sich Kommunikations-Anwendungen für die seriellen COM-Schnittstellen auf einfache Weise realisieren. Gegenüber dem Windows-API ist es einfacher, zwischen verschiedenen Arten der Signalisierung zu unterscheiden: Blockierung des Aufrufers bis zum Abschluss des Sende- oder Empfangsauftrages, Signalisierung durch Callback oder Event – ein Konzept, das auch in anderen Modulen zu finden ist.
In der Echtzeit-Betriebsart erlaubt das Serial Module die Realisierung nahezu beliebiger, auch komplexer industrieller Kommunikationsprotokolle. Durch Einsatz eines effizienten Kernel-Treibers wird die zeitlich genaue Reaktion auf alle Schnittstellen-Ereignisse und die direkte Beeinflussung der Hardware auf der Kernel-Ebene möglich. Das API beider Betriebsarten ist ansonsten identisch.
Für die Erzeugung sogenannter "virtueller COM-Ports" beachten Sie auch das Device Module, über das vorhandene ("Legacy"-)Anwendungen völlig transparent auf nicht vorhandene serielle Schnittstellen zugreifen können.
Erfordert das Kernel Module.
- Serielle Kommunikation über alle COM-Schnittstellen des PCs über Windows-Mechanismen oder in Echtzeit durch UART-Hardware-Unterstützung von 16450 bis 16950
- Flexible Reaktion auf eintreffende Daten und Ereignisse durch Blockierung, Callback oder Event
- Auflisten aller COM-Schnittstellen im PC (im Base Module)
- Schnelle Reaktion auf eintreffende Daten und Ereignisse
- Direkte Ansteuerung der Handshake-Leitungen
- Handler für alle Ereignisse, z.B. Byte-Handler, LSR-, MSR-Change, Break, Error
- Erkennung von "transmit empty" (z.B. für RS485-Richtungsumschaltung oder 9-Bit-Modus)
- Automatische RS485-Richtungsumschaltung programmierbar
- Endlos-Modus für direktes Senden aus Anwender-Puffer und andere spezielle Szenarien
- Automatische Timeout-Überwachung zuschaltbar
- Automatische Leitungsfehler-Überwachung programmierbar
- Maximale Baudrate detektierbar
- Senden und Empfang sind voneinander unabhängig
- Empfangene Daten werden automatisch im Hintergrund gepuffert
- Überbrückung des Empfangs über mehrere Sekunden
- Liste der unterstützten Zusatzkarten hier
- Unterstützung weiterer Karten kostengünstig zu implementieren
Verwenden Sie folgende Funktion, um alle COM-Ports aufzulisten:
err = KS_enumDevices(
"COM", // nach COM-Ports suchen
i, // Zähler, mit 0 beginnend
portNameBuf, // Puffer für COM-Port-Namen
0); // Flags, hier 0
Die Schnittstelle lässt sich dann wie folgt öffnen:
KSResourceInfoEx info;
err = KS_openSerialPort(
&hPort, // Adresse des Handles
portNameBuf, // Name des Ports (z.B. "COM1")
"9600,n,8,1", // Initialisierung
KSF_KERNEL_EXEC); // Kernel-Implementierung
So senden wir Daten, z.B. eine Messwertanforderung an eine Gerät:
err = KS_xmitPort(
hPort, // Port-Handle
NULL, // Signalisierung (Post Mode)
message, // Pufferadresse
0, // Länge, zu senden (auto)
NULL, // Länge, gesendet
KSF_DONT_WAIT); // Flags: ohne Blockierung
Jederzeit lässt sich ermitteln, wie viele Zeichen bereits empfangen wurden:
err = KS_getPortState(
hPort, // Port-Handle
&state, // Adresse der Status-Struktur
0); // Flags: here 0
printf("Es wurden %d Zeichen empfangen.\n", state.recvAvail);
Der Empfang kann folgendermaßen aussehen (im Wait-Mode auf der Anwendungsebene):
err = KS_recvPort(
hPort, // Port-Handle
NULL, // Signalisierung (Wait Mode)
pBuffer, // Adresse des Datenpuffers
state.recvAvail, // Länge, zu empfangen
&received, // Länge, empfangen
KSF_USE_TIMEOUTS); // Flags: Timeout-Überwachung
- Was ist die "normale" Betriebsart des Serial Modules?
- Flag KSF_USER_EXEC beim Öffnen des Ports
- basiert auf Windows-Treibermechanismen
- unterstützt alle COM-Schnittstellen im System (auch "virtuelle Schnittstellen", z.B. USB-nach-COM-Adapter)
- keine Echtzeit
- Was zeichnet die Kernel-Betriebsart aus?
- Flag KSF_KERNEL_EXEC beim Öffnen des Ports
- Hardware wird mit speziellem Treiber direkt angesteuert
- erfordert UART-16550-kompatible Hardware
- Reaktion auf alle Schnittstellen-Ereignisse innerhalb der Interrupt-Service-Routine
- Welche sind die Voraussetzungen für den Kernel-Modus?
- Schnittstellen-Hardware kompatibel zum UART-16550
- Ressourcen (Interrupt und I/O-Basisadresse) ermittelbar
- entweder eingebaute COM-Ports oder unterstützte Zusatzkarten
- Unterstützung weiterer Karten kostengünstig zu implementieren
- Werden auch höhere Baudraten unterstützt?
- ja, höhere Standard-Baudraten werden automatisch erkannt
- spezielle Baudraten lassen sich vorgeben
- wir realisieren gerne in Ihrem Auftrag eine Erweiterung des Treibers
Das Serial Module erfordert im Kernel-Modus spezielle Hardware.
Um eine hohe Reaktionsfähigkeit zu erreichen, muss der langsame Windows-Treiber der seriellen Schnittstelle ersetzt werden. Aus diesem Grund werden nur bestimmte serielle Schnittstellenbaugruppen unterstützt. Diese Einschränkung gilt nur im Kernel-Modus, da hier eine UART-16550-kompatible Hardware angesprochen werden muss. Dazu gehören:
Standard-Schnittstellen
- Alle im PC eingebauten RS232-Schnittstellen, solche auf ISA-PnP-Karten, PC-Card-Module (PCMCIA 16-Bit)
PCI-Bus
- MOXA: IndustIo CP-132 (2xSER, RS-422/485)
- MOXA: IndustIo CP-114 (4xSER, RS-422/485)
- MOXA: SmartIo C104H/PCI (4xSER)
- MOXA: SmartIo C168H/PCI (8xSER)
- ADDI-DATA: APCI-73xx (1xSER)
- ADDI-DATA: APCI-74xx (2xSER)
- ADDI-DATA: APCI-75xx (4xSER)
- Brainboxes: PCI 4 Port Serial Card (z.B. CC-268) (4xSER)
- TCL: DataBooster (4xSER/8xSER) (über IoPort-Zugriff)
- SUNIX: 4088A/4089A (2xSER,2xPAR)
- LINDY: 70585 (2xSER)
- LINDY: 70616 (2xSER,2xPAR)
- EXSYS: EX-41051 (1xSER)
- EXSYS: EX-41052 (2xSER)
- Wiesemann & Theis: 13812 (2*SER, RS-232, 1kV isolated)
CardBus 32-Bit
- QUATECH: Serial I/O PC Card SSP-100 (1xSER)
- SOCKET: Serial I/O PC Card (1xSER)
Wenn Sie Fragen zur Hardware-Unterstützung haben, kontaktieren Sie uns! Die Unterstützung anderer externer Schnittstellen lässt sich in der Regel leicht hinzufügen. Falls Sie die Funktionstüchtigkeit mit anderen Einsteckkarten getestet haben, würden wir uns über eine entsprechende Information sehr freuen.
Plattformen
Echtzeitfähigkeit wird nur auf der Kernel-Ebene erzielt. Dazu werden C/C++ oder Delphi (Win32) benötigt. Dennoch unterstützt die »RealTime Suite« verschiedene Plattformen, wie z.B. auch die .NET-Umgebung:
- C++Builder (Borland/CodeGear) mit VCL-Oberfläche
- Microsoft Visual C++ 6 mit MFC-Oberfläche
- Visual Studio 2005/2008 C++ mit MFC-Oberfläche
- Delphi (Object Pascal) Win32 mit VCL-Oberfläche
- Visual Studio 2005 C# mit WPF-Oberfläche
Die Lösung besteht darin, den zeitkritischen Code in eine DLL zu verlagern, die mit den Funktionen der »RealTime Suite« direkt auf die Kernel-Ebene geladen wird und dadurch in den Echtzeit-Kontext gelangt.
Sofort verwendbare Programmgerüste für die genannten Plattformen befinden sich in jeder Software-Lieferung.
Systemvoraussetzungen
Die Produkte der »RealTime Suite« unterstützen eine breite Palette von Hardware- und Software-Kombinationen:
- CPU: AMD (ab Athlon) oder Intel (ab Pentium 2)
- Single- oder Multi-Core, Hyperthreading, SMP mit insgesamt bis zu 8 CPU-Kernen (darüber auf Anfrage)
- ACPI (Advanced Control and Power Interface) unterstützt, (A)PIC (Advanced Programmable Interrupt Controller) unterstützt (einige Funktionen erfordern APIC-PC)
- Betriebssystem: Windows 2000 (bis SP4), Windows XP (bis SP3), Windows Server 2003 (bis SP1), Windows Vista (SP1), Betrieb bei neueren Service Packs ohne Gewähr
- Compiler für Kernel-Ebene: Microsoft: Visual C++/Visual Studio, CodeGear (Borland): C++Builder, Delphi Win32
Bei Fragen zur Systemunterstützung kontaktieren Sie uns bitte!


