Controller S320 Handbuch - Übersicht

Online-Dokumentation

Controller S320 Handbuch

Version 6

TetraTec GmbH
Gewerbestr. 8
71144 Steinenbronn
Deutschland / Germany
Telefon: +49 (0)7157 / 5387-0
Fax: +49 (0)7157 / 5387-10
Homepage von TetraTec www.tetratec.de
email an TetraTec info@tetratec.de

TetraTec® ist eingetragenes Warenzeichen der TetraTec Instruments GmbH.

1.1. Achtung! Unbedingt lesen!

Bitte lesen Sie dieses Handbuch vor der Inbetriebnahme des Controller S320 genau durch.

Beachten Sie insbesondere das Kapitel "Bestimmungsgemäßer Einsatz, Sicherheitshinweise". Bei Schäden, die durch Nichtbeachten des Handbuches verursacht werden, erlischt der Garantieanspruch. Für Folgeschäden, die daraus resultieren, übernehmen wir keine Haftung.

Das vorliegende Handbuch dient zur Beschreibung des Controller S320 und dessen Funktionen. Die Beschreibungen in diesem Handbuch stellen jedoch keine zugesicherten Eigenschaften im rechtlichen Sinne oder im Sinne der Produkthaftung dar. Die Autoren behalten sich das Recht vor, an der Software und am Handbuch Änderungen vorzunehmen, ohne Verpflichtung diese Änderungen irgendeiner Person bekanntzugeben. Es wird keine Garantie für die Richtigkeit des Inhalts dieses Handbuchs übernommen. Da sich Fehler trotz aller Bemühungen nie vollständig vermeiden lassen, sind wir für Hinweise jederzeit dankbar. Wir nehmen in diesem Handbuch auf geschützte Warenzeichen Bezug, die innerhalb des laufenden Textes nicht explizit als solche gekennzeichnet sind. Aus dem Fehlen einer Kennzeichnung kann also nicht geschlossen werden, daß der entsprechende Name frei von Rechten Dritter ist.

1.2. Einleitung

Überblick Controller S320

Der Controller S320 ist ein frei programmierbares Meßgerät im Schalttafelgehäuse.

Der Controller S320 basiert auf einem modernen, äußerst leistungsfähigen digitalen Signalprozessor mit einer Wortbreite von 32 bit. Ähnlich dem Coprozessor in einem PC ist dieser Signalprozessor in der Lage, Fließpunktzahlen direkt und damit mit großer Geschwindigkeit zu verarbeiten.

Auf der einen Seite stößt der Controller S320 damit in Leistungsbereiche vor, die bisher hochspezialisierten Sonderlösungen oder Prozeßrechnern vorbehalten waren: Beispielsweise lassen sich Regelungen mit Abtastraten von wenigen Millisekunden realisieren und gleichzeitig Eingangswerte aus physikalischen Gleichungen berechnen.

Auf der anderen Seite vereinfacht sich die Arbeit des Programmierers: Er braucht sich in der Regel um die Verabeitungsgeschwindigkeit seines Programms keine Gedanken zu machen - zeitaufwendige Skalierung der Zahlendarstellung ist ebenso überflüssig wie fehlerträchtige Laufzeitoptimierung. Die Daten werden einfach in ihrer physikalischen Einheit verarbeitet - 10,0 Volt werden nicht als 4096 Schritte verarbeitet. Beim Lesen des Wandlers erhält man direkt den physikalischen Wert.

Der Controller S320 verfügt über eine Ethernet-Schnittstelle sowie eine Implementation des TCP/IP Protokolls. Die Netzerksschnittstelle ermöglicht einen einfachen Datenaustausch mit Standard PCs, entweder über das lokale Netzwerk oder über das Internet.

Drei serielle Schnittstellen nach RS232 bzw. RS485 erlauben die Kommunikation mit der Außenwelt. Weiterhin ist eine Echtzeituhr sowie ein batteriegepufferter Datenspeicher enthalten. Moderne Flash-Speichertechnologie nimmt Programme, Daten und Systemroutinen auf.

Der Controller S320 wird vom PC aus wahlweise über das Netzwerk, oder über eine serielle Linkschnittstelle programmiert. Zur Programmierung wird eine Pascal ähnliche Hochsprache verwendet, die einfach zu erlernen und anzuwenden ist. Programmerstellung und Übertragung der Daten erfolgen auf dem PC. Neben den für eine Hochsprache selbstverständlichen Funktionen wie mathematische Berechnungen und Textmanipulation enthält die Entwicklungsumgebung eine Vielzahl vorgefertigter Funktionen wie z.B. Linearisierungen, Reglerroutinen, Bestimmung von Stoffwerten. Hierdurch lassen sich auch komplexe Meßtechnikaufgaben rasch und zuverlässig realisieren.

Eine Vielzahl von Demo-Programmen erläutern die Programmierung und lassen sich leicht für eigene Anwendungen modifizieren.

Die Folienfrontplatte enthält drei 6-stellige LED-Anzeigen sowie zusätzlich drei 4-stellige Textdisplays, die z.B. zum Anzeigen der physikalischen Einheit verwendet werden können. Über fünf Folientasten können Tastatureingaben vorgenommen werden. Das Basisgerät wird mit 24 Volt versorgt und enthält standardmäßig jeweils acht digitale Ein- und Ausgänge mit 24 Volt-Pegeln zur einfachen Kommunikation mit einer SPS oder zum Schalten von Magnetventilen, Schützen und ähnlichem.

Über fünf Steckplätze mit auswechselbaren Slotkarten werden Sensoren angeschlossen und in der Regel auch versorgt, so daß eine separate Geberspeisung nicht erforderlich ist. Slotkarten existieren zur Messung von Strom, Spannung, Druck, Kraft, Winkel, Frequenz usw., zur Ausgabe von Ergebnissen über analoge oder digitale Signale oder zur Erweiterung der digitalen Ein- und Ausgänge.

Meßtechnik - die Welt des Controller S320

Meßtechnik ist die Welt der analogen Signale. Größen wie Druck oder Temperatur sind mit Sensoren zu erfassen, zu verarbeiten und weiterzuleiten.

Meßtechnik - die Welt des Controller S320 Die freie Programmierung in einer Pascal ähnlichen Hochsprache ermöglicht es, analoge Signale in ihrer mathematischen Abbildung als Fließpunktzahl direkt z.B. in Bar oder Milliampere zu verarbeiten. Neben den Grundrechenarten sind Funktionsberechnungen wie Sinus, Wurzelbildung, Logarithmus usw. bereits in der Programmiersprache enthalten. Speicherprogrammierbare Steuerungen (SPS) eignen sich traditionell eher zur Verarbeitung digitaler Signale wie Schalter oder Relais. Der Controller S320 stellt die ideale Ergänzung für meß- und regeltechnische Aufgaben dar.

Durch die in der Frontplatte integrierten Displays zur Meßwert- und Einheitenanzeige sowie der Tasten können z.B. auch Sollwerte oder Prozeßzeiten eingestellt werden, so daß häufig auf separate Bedienkonsolen ganz verzichtet werden kann. Zum Umgang mit digitalen Signalen verfügt der Controller S320 über SPS-kompatible Ein- und Ausgänge. Hiermit können z.B. Relais oder Ventile direkt angesteuert oder Eingangssignale abgefragt werden. Zur Kommunikation sind drei serielle Schnittstellen nach RS232 bzw. RS485 eingebaut, auf die vom Programm aus zugegriffen werden kann. Auf diese Weise können Meßergebnisse übergeben und Steuerbefehle angenommen werden.

Der große Speicherbereich ermöglicht die Aufzeichnung und Auswertung komplexer Vorgänge auch über längere Zeiträume. Relevante Daten wie Sollwerte, Reglerparameter oder ähnliches lassen sich im batteriegepufferten Speicher oder im Flash-ROM netzausfallsicher ablegen. Integrierte Timer oder die Echtzeituhr können für Aufgaben genutzt werden, bei denen die Einhaltung bestimmter Zeiten erforderlich ist.

Die flexible Anpassung des Controllers S320 an die jeweilige Aufgabe oder den gewünschten Sensortyp erfolgt durch auswechselbare Slotkarten.

Der Controller S320 besticht durch ein hervorragendes Preis/Leistungsverhältnis.

1.3. Systemaufbau

Stromversorgung

Der Controller S320 wird mit einer Spannung von 24 Volt DC versorgt. Die Versorgungsspannung wird an der mit SUPPLY beschrifteten Buchse angeschlossen. Die Versorgungsspannung kann zwischen 18 Volt und 28 Volt liegen. Die Versorgungsspannung ist von der Gerätemasse galvanisch getrennt. Der mit PE bezeichnete Anschluß wird am Schutzleiter angeschlossen und ist mit der Gerätemasse verbunden. Hiermit wird der Potentialbezug für Sensorik und serielle Schnittstellen hergestellt. Die Leistungsaufnahme beträgt ca. 8 Watt zuzüglich der Leistung der digitalen Ausgänge.

Displays und Tasten

Numerische Werte können frontseitig an drei 6-stelligen LED-Anzeigen mit 10 mm Ziffernhöhe angezeigt werden. Texte, z.B. Einheiten wie bar oder mbar, können auf den drei vierstelligen Textdisplays angezeigt werden. Texte und Ziffern werden aus Spell durch einfache Befehle an die Displays übertragen.

Die fünf Tasten der Frontplatte enthalten die Funktionen F1, F2, F3, Up und Down. Die drei Funktionstasten dienen z.B. zum Umschalten von Meßbereichen, zum Umschalten von Soll- bzw. Istwert oder auch zum Ändern der physikalischen Einheit, etwa Umschalten von bar nach PSI. Die beiden Tasten UP und DOWN dienen z.B. zum Editieren von Werten wie Sollwerten oder Reglerparameter.

Digitale Ein- und Ausgänge

Das Basisgerät Controller S320 enthält standardmäßig 8 digitale Eingänge sowie 8 digitale Ausgänge. Bei größerem I/O-Bedarf kann die Anzahl digitaler Ports durch Slotkarten TYP400 und entsprechende Module erweitert werden.

Die digitalen Ein- und Ausgänge sind SPS-kompatibel (24 Volt-Pegel, plusschaltend) und werden von der 24 Volt Stromversorgung des Controllers S320 mitversorgt. Von der Gerätemasse (PE) sind diese Leitungen, wie die Versorgungsspannung, galvanisch getrennt.

Die digitalen Ausgänge können jeder mit 500 mA belastet werden, was für kleinere Schütze oder Ventile ausreicht. Die Ausgänge sind kurzschlußfest und gegen induktive Lasten bis zu einer Abschaltenergie von 5 mJ geschützt. Selbstverständlich ist es jedoch immer empfehlenswert, induktive Lasten wie üblich durch Freilaufdioden oder entsprechende Schutzbeschaltung zu sichern. Die digitalen Eingänge nehmen einen Strom von ca. 5 mA auf.

Auswechselbare Slotkarten

Der Controller S320 kann durch steckbare Slotkarten an die verschiedenen Meßaufgaben angepaßt werden. Slotkarten sind für zahlreiche Aufgaben verfügbar: Messen von Sensordaten, analoge Ausgänge, Inkrementalgeber, Frequenzmessung, Frequenzausgabe usw. .

Die Slotkarten versorgen in der Regel auch den Sensor selbst, so daß zusätzliche Stromversorgungen und Verdrahtungsaufwand, wie bei den meisten PC-Einsteckkarten üblich, entfallen. Der Controller S320 erzeugt durch einen internen DC/DC-Wandler eine von der Versorgungsspannung galvanisch getrennte 24 Volt Hilfsspannung mit einer Belastbarkeit von ca. 200 mA, so daß auch Stromschleifen direkt versorgt werden können.

Zum Auswechseln der Slotkarten muß die Rückwand entfernt werden. Bitte stellen Sie sicher, daß die eingesetzten Slotkarten mit den in der Konfigurationsdatei enthaltenen Parametern übereinstimmen. Vermeiden Sie es hierbei, die Prozessorplatine zu entfernen, da sonst der Inhalt von Uhr und Speicher verlorengeht.

Detaillierte Angaben zu den Slotkarten enthalten die entsprechenden Kapitel.

TYP100 2 x AnalogIn | TYP101 2 x AnalogIn True RMS | TYP110 2 x AnalogIn
TYP120 4 x AnalogIn 0..10V | TYP200 2 x AnalogOut | TYP220 4 x AnalogOut 0..10V
TYP310 1 x AnalogIn + 1 x AnalogOut | TYP400 Busmodul | TYP500 2 x Inkrementalgeber
TYP510 2 x Counter/Freq. | TYP520 2 x Pulse / PWM |

Netzwerksschnittstelle

Die eingebaute 10 MBit Ethernet-Schnittstelle mit Twisted Pair (RJ45) Anschluss (Eth0) erlaubt einen Datenaustausch mit allen Gegenstellen, die das Internet Protokoll TCP/IP "sprechen". Über einen im Betriebssystem des Controller S320 eingebauten Webserver können von Benutzerprogrammen generierte Webseiten mit jedem handelsüblichen Web Browser abgerufen werden.

Serielle Schnittstellen

Zur Kommunikation mit anderen Geräten enthält der Controller S320 eine frei verfügbare RS232 Schnittstelle (SER0) sowie zwei RS485 Schnittstellen (SER1 und SER2) im Halbduplexbetrieb. Die vierte serielle Schnittstelle (LINK) dient ausschließlich zur Kommunikation mit dem Terminalprogramm des PC. Die RS232 Schnittstelle ist mit einer 9-poligen DSUB-Buchse ausgerüstet und kann direkt über ein 1:1 Kabel an einen PC angeschlossen werden. Sie kann zum Beispiel zur Meßwertweitergabe genutzt werden. Über die Programmierung des Controllers lassen sich nahezu beliebige Übertragungen realisieren.

Echtzeituhr

Der Controller S320 verfügt über eine Echtzeituhr, die über einen kleinen Akkumulator versorgt wird. Während des Betriebes wird der Akkumulator ständig geladen, im ausgeschalteten Zustand bleibt die Uhrzeit ca. 3 Monate erhalten. Aus Spell lassen sich Datum, Uhrzeit, Wochentag usw. abfragen und entsprechend verwenden. Die Uhr kann über die Entwicklungsumgebung oder direkt aus dem Spell-Programm gestellt werden. Als Zubehör ist eine Funkuhr zum Empfang und zur Auswertung des von der Physikalisch-Technischen-Bundesanstalt ausgestrahlten 'amtlichen' Zeitsignales erhältlich. Mit deren Hilfe kann die interne Echtzeituhr automatisch und permanent nachgestellt werden.

Kontinuierliche Vorgänge wie z.B. Abtastraten für Regelkreise werden im Controller S320 durch Timer realisiert. Hier sind Auflösungen im Millisekundenbereich möglich.

Speicher

Das Betriebssystem des Controller S320, das Anwenderprogramm sowie sämtliche Programmquellen und evtl. Dokumentationsdateien sind in einem netzausfallsicheren Flash-ROM gespeichert. Innerhalb von Spell erlaubt das Schlüsselwort ROMPSERISTENT direktes Speichern von Parametern oder Meßergebnissen im Flash-ROM. Ab Version 4 steht Ihnen auch ein Dateisystem zur Verfügung in dem Sie eigene Dateien speichern können. Nähere Informationen zum Dateisystem finden sie in den Kapiteln S320 Filesystem und Dateien und Verzeichnisse .

Der Controller S320 enthält je nach Ausführung mindestens 1024 kByte Hauptspeicher zur Programmausführung. Der Prozessor greift auf diesen Hauptspeicher ohne Waitstates zu.

Ein schneller netzausfallsgesicherter Speicherbereich nimmt ca. 32 kByte Daten auf. Hier können Reglerparameter, Prozeßzeiten oder auch akkumulierte Betriebsstunden abgelegt werden. In Spell wird dieser Speicherbereich über das Schlüsselwort RAMPERSISTENT angesprochen.

Link-Verbindung zum PC

Die Datenübertragung zwischen PC und Controller S320 erfolgt über die Entwicklungsumgebung. Die Funktionen des Terminalprogramms sind im Kapitel Programmierumgebung näher erläutert.

Um eine Link-Verbindung mit dem S320 herzustellen haben Sie 2 Möglichkeiten:

RS232 Verbindung:

Die mit LINK bezeichnete Buchse dient ausschließlich zur Kommunikation mit dem Terminalprogramm auf dem PC. Die Link-Schnittstelle arbeitet nach RS232 standardmäßig mit einer Geschwindigkeit von 38400 Baud und Hardware-Handshake (RTS/CTS).

Das erforderliche Verbindungskabel 'LINK2' ist im Lieferumfang enthalten.
Die Belegung und der Anschluß der Link-Schnittstelle ist im Kapitel Technische Daten beschrieben.

Netzwerkverbindung:

Dazu verbinden Sie einfach den S320 Controller mit Ihrem lokalen Netzwerk. Nähere Information finden Sie im Kapitel Technische Daten beschrieben.

Datenspeicherung

Im Flash-ROM des Controllers S320 werden sämtliche Programmquellen sowie eventuelle Dokumentationsdaten netzausfallsicher gespeichert.

Es ist daher möglich, den vollständigen Programminhalt eines in Betrieb befindlichen Gerätes auch noch nach Jahren abzurufen, ggf. zu modifizieren und wieder neu einzuspielen.

Hierdurch ist das Gerät völlig unabhängig von externen Programmquellen. Selbstverständlich ist es jedoch immer empfehlenswert, Sicherungskopien anzulegen und an einem geeigneten Ort zu verwahren.

1.4. Entwicklungswerkzeuge

Zur rationellen Programmentwicklung steht eine leistungsfähige graphische Entwicklungsumgebung für den PC zur Verfügung. Die Programmierumgebung übernimmt die Kommunikation mit dem Controller S320 über eine serielle Schnittstelle am PC. Ein Verbindungskabel ist im Lieferumfang enthalten und wird am Controller S320 an der mit LINK bezeichneten Buchse angeschlossen.

Innerhalb der Programmierumgebung werden die Programme für den Controller S320 erstellt, übersetzt und auf den Controller S320 übertragen. Weiterhin kann der Controller S320 hiermit gestartet und angehalten werden. Zusätzliche Dienste wie zum Beispiel das Stellen der Systemuhr oder das Rücklesen der Programmquellen werden ebenfalls innerhalb der Programmierumgebung zur Verfügung gestellt.

Die integrierte Programmierumgebung enthält viele nützliche Funktionen, die die tägliche Arbeit vereinfachen. Unter anderem:

einfache Steuerung des Arbeitsablaufs durch Maus und Drag&Drop
Launchpad zum direkten Auslösen der wichtigsten Funktionen
Mehrfach-Fenstertechnik - so haben Sie alles wichtige im Blick
Integriertes ASCII-Terminal zur Kommunikation über eine beiliebige (zweite) serielle Schnittstelle
Automatisches Scannen der Quelltexte und Auflistung der enthaltenen Bibliotheken
projektübergreifende Suchfunktion für Texte ('grep')
Unterstützung bei der Kalibrierung von analogen Slotkarten
Darstellung von Messwerten als Kennlinien oder als XY-Diagramme

... und vieles weitere mehr. Die Programmierumgebung ist im entsprechenden Kapitel beschrieben.

1.5. Programmierung

Ähnlich einer SPS kann der Controller S320 völlig frei programmiert werden. Als Programmiersprache wird die Sprache SPELL verwendet. SPELL lehnt sich eng an die bekannte und weitverbreitete Sprache PASCAL an.

Die Sprache ist einfach anzuwenden, eignet sich auch für komplexere Aufgaben und erzeugt im Vergleich zu bekannten Interpretersprachen effizienten Programmcode. Des weiteren erlaubt die Sprache durch ihre strengen syntaktischen Regeln eine weitreichende Fehlerprüfung bereits während des Übersetzens.

Im Vergleich zu Standard-Pascal nach ISO 7185 enthält die im Controller S320 implementierte Sprache einige Modifikationen, Erweiterungen und auch Kürzungen, die dazu dienen dem Einsatzgebiet, den besonderen Merkmalen und der Leistungsfähigkeit des Controller S320 in höchstem Maße gerecht zu werden. Die Unterschiede zu Standard-Pascal sind in den entsprechenden Kapiteln beschrieben bzw. im laufenden Text als solche gekennzeichnet.

Zur Einführung dient ein erstes Spellprogramm, das eine Spannung und einen Strom über AD-Wandler einliest, die Leistung berechnet und alle drei Größen mit Einheiten anzeigt.

Programmbeispiel, voll lauffähig
PROGRAM ElektrischeLeistungBerechnen;  {Erstes Programm   }

INCLUDE "STDLIB";                      {Standardfunktionen}

VAR Spannung
: FLOAT;           {Variablendekl.
}
Strom           : FLOAT;
Leistung        : FLOAT;
chaSpannung     : PortHandle;
{Wandler           }
chaStrom        : Porthandle;

BEGIN                                  {Hauptprogramm     }
  chaSpannung := OpenPort("Spannung"); {Wandler anmelden  }
  chaStrom    := OpenPort("Strom");
  ShowString(TopRight,  "Volt");       {Einheiten anzeigen}
  ShowString(MidRight,  "Amp ");
  ShowString(BotRight,  "Watt");

  REPEAT
{Schleife          }
Spannung := AnalogIn(chaSpannung); {Spannung lesen    }
Strom    := AnalogIn(chaStrom);    {Strom
lesen       }
Leistung := Spannung * Strom;      {Leistung berechnen}

ShowFloat(TopLeft,Spannung,4,2);   {Spannung anzeigen }
ShowFloat(MidLeft,Strom,4,2);      {Strom anzeigen
}
ShowFloat(BotLeft,Leistung,4,2);   {Leistung anzeigen }
UNTIL False;
{endlose Schleife  }
END.
{Programmende      }

Analoge und digitale Wandler werden in der Gerätekonfiguration mit Namen gekennzeichnet und können bereits so skaliert werden, daß unmittelbar die physikalischen Werte gelesen werden. Mittels der Funktion OpenPort wird dem Kanal entsprechend seines Namens eine Kanalnummer erteilt. Über diese Kanalnummer wird der Port angesprochen, hier mit AnalogIn.

Die Funktionen ShowFloat bzw. ShowString dienen zur Ausgabe der Ergebnisse auf die jeweiligen Displays. Im Falle von ShowFloat wird hier die Fließpunktzahl mit vier Vorkomma- und zwei Nachkommastellen angezeigt.

1.6. Bibliotheken

Über die INCLUDE-Anweisung werden Bibliotheken eingebunden. Eine zentrale Bibliothek ist die Bibliothek STDLIB. Diese Bibliothek stellt zentrale Funktion wie z.B. die Displayausgabe oder das Ansprechen der Hardware zur Verfügung.

Für weitere, in der Paxis häufig auftretende Aufgaben sind ebenfalls Bibliotheken im Lieferumfang enthalten.

So finden sich Funktionen für regelungstechnische Anwendungen z.B. in der Bibliothek REGEL. Funktionen zum Linearisieren von Messwerten enthält die Bibliothek LIN oder die Bibliothek POL. Beim Bestimmen von Stoffeigenschaften von Gasen hilft die Bibliothek GAS weiter. Eine aussagekräftige Lauftextanzeige auf den Textdisplays kann mittels Funktionen der Bibliothek LAUFTEXT erzeugt werden. Beim Umrechnen von einer physikalischen Einheit in eine andere lohnt sich ein Blick in die Bibliothek UNITCON.

1.7. Anwendungsbeispiele Controller S320

Durchflußmeßtechnik

Bei der Durchflußmessung von gasförmigen Medien müssen in der Regel Betriebszustände wie Absolutdruck, Temperatur, Wirkdruck am Meßaufnehmer und bei genaueren Messungen auch Werte wie die Feuchte des Mediums erfaßt werden. Einen Wert für die tatsächlich strömende Gasmenge erhält man durch mathematische Aufbereitung der von den Sensoren gelieferten Rohdaten mittels Gasgesetzen oder ähnlicher Berechnungsverfahren. Durch vorgefertigte Bibliotheken zur Bestimmung von Stoffeigenschaften, zur Sensorlinearisierung usw. sind Berechnungen und Umrechnungen in Massenstrom, Volumenstrom, Normvolumenstrom usw. mit dem Controller S320 leicht zu realisieren.

Beispiele: Messung nach der Druckdifferenzmethode wie Blendenmessung, Messung mit Laminar Flow Elementen usw.; Messung mit thermisch arbeitenden Massedurchflußmessern usw.

Regelungstechnik

Durch die hohe Rechenleistung des Controllers S320 sind auch komplexe Regelungen nach klassischen Verfahren (PID-Regler) oder auch Zustandsregelungen leicht zu implementieren. Berücksichtigung von Kennlinien, mehrschleifige Regelkreise, Reglerumschaltung usw. sind einfach zu programmieren. Für Standardstrukturen (z.B. PI- oder PID-Regler) existieren vorgefertigte Bibliotheksroutinen.

Beispiele: Prozeßregelungen, Hydraulikregelungen usw.

SPS-Steuerungen

Mit dem Controller S320 können Sensordaten ausgewertet und in aufbereiteter Form z.B. digital einer SPS zur Verfügung gestellt werden.

Gerätesteuerung

Steuerung von Meßgeräten wie z.B. Leckmeßgeräte, Druckcontroller usw.

Anlagensteuerung

Kombinierte Messung und Steuerung bei Industrieanlagen wie Kompressorsteuerungen, Betriebszeiterfassung usw.

Montageplätze

Bei der Realisierung von Montageplätzen, bei denen Meß- und Prüfschritte erforderlich sind (z.B. Druckschaltermontage), können Prüfungen bzw. Einstellungen und Handlingaufgaben (z.B. Adaption) durch den Controller S320 übernommen werden.

1.8 Inbetriebnahme

Detaillierte technische Daten siehe auch Technische Daten Basisgerät und technische Daten der Slotkarten.

HINWEIS: Die im folgenden genannten Hinweise gelten ausschließlich für den Fall, daß Sie den Controller S320 als eigenständiges Gerät und nicht als Bestandteil eines Meßsystems, einer Anlage o.ä. erworben haben und das Gerät nicht bereits für eine spezielle Aufgabe konfiguriert oder programmiert worden ist. In diesen Fällen wenden Sie sich hinsichtlich Anschluß oder Programmierung an Ihren Lieferanten.

Im Lieferumfang des Controllers S320 sind enthalten:

- Dieses Handbuch (auf Datenträger).
- Der Controller S320 (Basisgerät).
- Slotkarten je nach Auftrag, evtl. bereits im Basisgerät eingebaut.
- Datenträger mit der Software
- Ein Kabel zur Linkverbindung mit einem PC
- Zwei Befestigungsspangen zur Frontplattenmontage

In dieser Reihenfolge sollten Sie vorgehen:

- | Lesen Sie dieses Handbuch. Es enthält wichtige Hinweise für Anschluß und Inbetriebnahme.
- | Installieren Sie die Software wie im Kapitel "Programmierumgebung" beschrieben auf Ihrem PC. Viele der Beispielprogramme enthalten Beispiele, bei denen keine spezielle Slotkarte benötigt wird und für die keine besondere Gerätekonfiguration benötigt wird. Machen Sie sich mit der Programmierung des Controllers S320 anhand des Handbuches und der Beispielprogramme vertraut.
- | Stellen Sie die Linkverbindung zwischen Controller S320 und Ihrem PC her. Einzelheiten entnehmen Sie bitte dem Kapitel "Aufbau der Linkverbindung".
- | Schließen Sie den Controller S320 an eine 24 Volt Versorgung an. Einzelheiten hierzu entnehmen Sie bitte dem Kapitel "Technische Daten".
- | Compilieren Sie eines der Beispielprogramme, welche auf dem Basisgerät ohne zusätzliche Slotkarten laufen, z.B. das Uhrenprogramm und übertragen Sie es in den Controller S320. Übertragen Sie die zugehörige Konfigurationsdatei. Nach dem Programmstart läuft das Programm.
- | Für den Anschluß von Sensoren oder digitalen Ein/Ausgängen benötigen Sie neben der entsprechenden Slotkarte eine Konfigurationsdatei. Zu den jeweiligen Beispielprogrammen finden sich die entsprechenden Konfigurationsdateien. Einige Beispielprogramme setzten eine bestimmte Slotkartenbelegung voraus und sind daher nur mit entsprechender Hardware ausführbar.
- | Weitere Beispielprogramme behandeln Funktionen wie Signalbearbeitung, Kommunikation über die seriellen Schnittstellen usw. oder komplette Anwendungen.

Die Programmierung des Controllers S320 und der Umgang mit dem Gerät bereiten erfahrungsgemäß keine Schwierigkeiten. Falls Fragen auftauchen, konsultieren Sie bitte zunächst das Handbuch. Erst dann sollten Sie sich an Ihren Lieferanten oder an den Hersteller wenden.

Der industrielle Einsatz des Controllers S320 benötigt eine ähnliche Vorbereitung wie der Einsatz einer speicherprogrammierbaren Steuerung. Auch hier sollten Sie sich Kanallisten anfertigen und den Programmablauf zuvor planen.

Die Vorteile des Controller S320 im Umgang mit analogen Signalen, die einfache Bedienung, der günstige Preis und die enorme Verarbeitungsgeschwindigkeit wird auch Sie sicherlich begeistern!

Bestimmungsgemäßer Einsatz, Sicherheitshinweise

Beim Einsatz des Controller S320 sind ähnliche Überlegungen zu berücksichtigen wie beim Einsatz einer (kleinen) speicherprogrammierbaren Steuerung.

Bei Mißachtung der folgenden Hinweise kann Lebensgefahr bestehen:
Der Controller S320 ist nicht für die Anwendung an Menschen oder Tieren zugelassen. Der Controller S320 gehört auch nicht in Kinderhände!
Setzen Sie den Controller S320 nicht für sicherheitsrelevante Aufgaben ein. Sie müssen JEDERZEIT damit rechnen, daß Fehlfunktionen auftreten und unerwünschte bzw. undefinierte Vorgänge ausgelöst werden können. Beispielsweise dürfen Notausschaltungen, Zweihandverriegelungen, Türüberwachungen oder ähnliche sicherheitsrelevante Steuer- oder Regelvorgänge mit dem Controller S320 NICHT realisiert werden.
Der Controller S320 wurde für den Umgang mit analogen Signalen konzipiert. Bei der Verdrahtung von analogen Signalleitungen ist i.a. mehr Sorgfalt erforderlich als bei reinen digitalen Steuersignalen.
Stellen Sie sicher, daß die Umgebungsbedingungen eingehalten werden. Insbesondere dürfen die Lüftungsbohrungen nicht verdeckt werden, und für ausreichende Wärmeabfuhr z.B. im Schaltschrank ist zu sorgen.
Stellen Sie sicher, daß die elektrischen Werte wie in diesem Handbuch beschrieben (Versorgungsspannung, Belastbarkeit von Ausgängen usw.) auch im laufenden Betrieb eingehalten werden. Der Controller S320 ist mit dem Schutzleiter zu verbinden. An allen Anschlüssen des Controller S320 dürfen nur Spannungen angelegt werden, die bezüglich Schutzleiter ein Potential von < 35 Volt haben. Weitere Geräte können an den Anschlüssen des Controller S320 nicht geerdet werden.
Beim Umgang mit Produkten, die mit elektrischer Spannung in Berührung kommen, müssen die gültigen nationalen Vorschriften beachtet werden. In Deutschland sei besonders auf folgende Vorschriften hingewiesen: VDE0100, VDE0550/0551, VDE0700, VDE0711 und VDE0860.
Wenn anzunehmen ist, daß ein gefahrloser Betrieb nicht mehr möglich ist, so ist der Controller S320 außer Betrieb zu setzen und gegen unbeabsichtigten Betrieb zu sichern. Es ist anzunehmen, daß ein gefahrloser Betrieb nicht mehr möglich ist, wenn
der Controller S320 sichtbare Beschädigungen aufweist,
der Controller S320 nicht mehr funktioniert,
eine Lagerung unter ungünstigen Verhältnissen stattgefunden hat,
der Controller S320 im Betrieb sehr warm wird oder
schwere Transportbeanspruchung nicht auszuschließen ist.
Im übrigen unterliegt die Einhaltung von Bau- und Sicherheitsvorschriften aller Art dem Anwender / Käufer.

Übereinstimmung mit Vorschriften

Der Controller S320 erfüllt alle Anforderungen an die elektromagnetische Verträglichkeit ohne zusätzliches Metallgehäuse und mit praxisgerecht angeschlossenen Daten- und Meßleitungen in den jeweils strengeren Teilen:

Störaussendung

Die Norm EN 50 081-1. (Elektromagnetische Verträglichkeit (EMV), Fachgrundnorm Störaussendung, Teil 1: Wohnbereich, Geschäfts- und Gewerbebereiche sowie Kleinbetriebe) wird in vollem Umfang erfüllt.

Störfestigkeit

Die Norm EN 61000-6-2 (Elektromagnetische Verträglichkeit (EMV), Fachgrundnorm Störfestigkeit, Teil 2: Industriebereich) wird in vollem Umfang erfüllt.

Die entsprechenden Prüfungen wurden durch ein akkreditiertes Prüflabor durchgeführt. Es wird der Vollständigkeit halber darauf hingewiesen, daß komplette Geräte nicht automatisch den EMV-Normen entsprechen, auch wenn sie ausschließlich aus einzelnen, den EMV-Normen entsprechenden Teilkomponenten bestehen.

Gehäusemerkmale

Das für den Controller S320 verwendete Gehäuse ist selbstverlöschend - nichttropfend und entspricht der Brandschutzklasse UL94V1. Die Durchschlagfestigkeit beträgt nach DIN 53481 250 kV/cm. Der spezifische Widerstand beträgt > 1015 Ohm. Die Wassseraufnahme liegt nach ASTM D 570 bei nur 0,07 Prozent. Die Formbeständigkeit nach Vicat (B) beträgt 150 Grad Celsius.

Schutzart

Ein ordnungsgemäß in eine Frontplatte eingebauter Controller S320 erfüllt frontseitig die Schutzart IP54. Geräterückseitig oder im nicht eingebauten Zustand wird die Schutzart IP20 erfüllt.

1.9 Bestellhinweise

Bitte benutzen Sie zur Bestellung einzelner Teile aus dem Controller S320 Programm folgende Bestellcodes:

Artikel | Code
Controller S320 Basisgerät. Lieferumfang: Controller S320 Basisgerät, Handbuch, Kabel LINK2 zur Linkverbindung, Satz Befestigungsklammern KLK, Software. | S320
Slotkarte TYP100: 2 x Analogeingang Präzise Sigma-Delta-Wandler mit variabler Filterfrequenz. Eingang Instrumentenverstärker für Spannung, Strom (20mA) und PT100. Präzise Geberspeisung 5V, 10V, 15V, 24V und 1mA für PT100. | TYP100
Slotkarte TYP101: 2 x Analogeingang für Wechselspannung Analoger Eingang für Wechselspannung mit TrueRMS-Convertern. AC und DC Kopplung wählbar. Präzise Sigma-Delta-Wandler mit variabler Filterfrequenz. Eingang Instrumentenverstärker für Spannung. Geberspeisung 24V zuschaltbar. | TYP101
Slotkarte TYP110: 2 x Analogeingang Präzise integrierende Wandler mit 20ms bzw. 16.66 ms Integrationszeit über eine Netzperiode. Eingang Instrumentenverstärker für Spannung, Strom (20mA) und PT100. Präzise Geberspeisung 5V, 10V, 15V, 24V und 1mA für PT100. | TYP110
Slotkarte TYP120: 4 x Analogeingang 4-kanalige Flash-AD-Wandler mit 12 bit Auflösung und einem Eingangsspannungsbereich von 0..10 Volt. Massebezogener Eingang. | TYP120
Slotkarte TYP200: 2 x Analogausgang Präzise Sigma-Delta-Wandler. Ausgang Spannung oder Strom (20mA). Geberspeisung 24V. | TYP200
Slotkarte TYP220: 4 x Analogausgang 4-kanalige Flash-DA-Wandler mit 12 bit Auflösung und einem Ausgangsspannungsbereich von 0..10 Volt. | TYP220
Slotkarte TYP310: 1 x Analogeingang, 1 x Analogausgang Präziser Flash-AD-Wandler. Eingang Instrumentenverstärker für Spannung, Strom (20mA) und PT100. Präzise Geberspeisung 5V, 10V, 15V, 24V und 1mA für PT100. Präziser Flash-DA-Wandler. Ausgang Spannung oder Strom (20mA). Geberspeisung 24V. | TYP310
Slotkarte TYP400: Erweiterung Digitalein- und Digitalausgang Slotkarte zur Erweiterung der digitalen Ein-Ausgänge über Erweiterungsmodule MOD-Baureihe. Busfähig bis zu 8 Module. | TYP400
Erweiterungsmodul MOD410 16 x DE-Modul mit 16 digitalen Eingängen für Hutschienenmontage. Baubreite 35 mm. Versorgung 24 Volt. Zustandsanzeige durch Leuchtdioden. | MOD410
Erweiterungsmodul MOD412 16 x DE-Modul mit 16 digitalen Eingängen für 19" Montage. 3 HE x 7 TE x 70 mm. Versorgung 24 Volt. Zustandsanzeige durch Leuchtdioden. | MOD412
Erweiterungsmodul MOD420 16 x DA-Modul mit 16 digitalen Ausgängen jeweils 500mA für Hutschienenmontage. Baubreite 35 mm. Versorgung 24 Volt. Zustandsanzeige durch Leuchtdioden. | MOD420
Erweiterungsmodul MOD422 16 x DA-Modul mit 16 digitalen Ausgängen jeweils 500mA für 19" Montage. 3 HE x 7 TE x 70 mm. Versorgung 24 Volt. Zustandsanzeige durch Leuchtdioden. | MOD422
Erweiterungsmodul MOD430 8 x DE und 8 x DA-Modul mit 8 digitalen Eingängen und 8 digitalen Ausgängen (500mA) für Hutschienenmontage. Baubreite 35 mm. Versorgung 24 Volt. Zustandsanzeige. | MOD430
Erweiterungsmodul MOD432 8 x DE und 8 x DA-Modul mit 8 digitalen Eingängen und 8 digitalen Ausgängen (500mA) für 19" Montage. 3 HE x 7 TE x 70 mm. Versorgung 24 Volt. Zustandsanzeige. | MOD432
Slotkarte TYP500: 2 x Eingang für Inkrementalgeber Zwei Eingänge für Inkrementalgeber. Frequenzmessung an Kanal B. Reziprokes Frequenzmeßverfahren mit 100ns Auflösung. Galvanisch getrennte Eingänge über Optokoppler, Geberspeisung 5 Volt bzw. 24 Volt. | TYP500
Slotkarte TYP510: 2 x Eingang für Zähler/Frequenzmessung Zwei Eingänge zum Zählen bzw. zur Frequenz- und Tastverhältnismessung. Reziprokes Frequenzmeßverfahren mit 20ns Auflösung. Kaskadierung für Inkrementalgeber. Galvanisch getrennte Eingänge über Optokoppler, Geberspeisung 5 Volt bzw. 24 Volt. | TYP510
Slotkarte TYP520: 2 x Ausgang Frequenz und PWM Zwei Ausgänge variable Frequenz und variables Tastverhältnis. | TYP520
Diagnoseadapter LEDIG wird bei den digitalen Anschlüssen des Basisgerätes zwischengesteckt und zeigt die Zustände der digitalen Signale durch Leuchtdioden an. Über einen 8-poligen DIL-Schalter können die digitalen Eingänge betätigt werden (Oder-Verknüpfung). | LEDIG
Busadapter T485 Busadapter zum einfachen Anschluß von RS485 Feldbusverdrahtungen über Schraubklemmen. Montage auf Hutschiene, Terminierung durch DIL-Schalter. Inkl. 2 Meter FCC68-4 poliges Kabel zum Anschluß an die RS485-Schnittstellen des Controller S320. | T485
DCF77-Funkuhr DCF77-Funkuhr zum Anschluß an die serielle Schnittstelle Ser0 | DCF77
LINK2-Kabel für Linkverbindung, 2 Meter | LINK2
LINK7-Kabel für Linkverbindung, 7 Meter | LINK7
DSA25/9 DSUB-Adapter für 25 polige DSUB-Stecker | DSA25/9
DSK9/2 Verbindungskabel seriell 9-polig, 2 Meter | DSK9/2
DSK9/7 Verbindungskabel seriell 9-polig, 7 Meter | DSK9/7
ST8 - Anschlußstecker 8-polig | ST8
ST4 - Anschlußstecker 4-polig | ST4
ST3 - Anschlußstecker 3-polig | ST3
SS3 - Anschlußstecker 3-polig für SUPPLY-Buchse | SS3
KLK - Befestigungsklammer kurz, Satz mit zwei Stück | KLK
KLL - Befestigungsklammer lang, Satz mit zwei Stück | KLL
DIF - Dichtrahmen für Frontplattenausschnitt | DIF
NAD01 - Tischnetzteil 24 Volt Leistung 30 Watt. Eingang 90-260 VAC. Supply-Stecker. | NAD01
NAD02 - Netzteil 24 Volt Hutschienenmontage Leistung 30 Watt. Eingang 90-260 VAC. | NAD02

Schlußbemerkungen

Mit dem Controller S320 halten Sie ein Werkzeug in Händen, mit dem eine Vielzahl von Problemstellungen aus dem Bereich der Meßtechnik schnell, elegant und preiswert gelöst werden können.

Wenn aus 'technischer Sicht' ein Rechner gefordert, aus 'kaufmännischer Sicht' aber nur eine kleine SPS möglich ist, schließen Sie mit dem Controller S320 problemlos diese Lücke.

Als OEM-Gerät kann der Controller S320 z.B. in meßtechnische Geräte oder Anlagen eingeplant werden. Die aufwendige und nicht immer risikolose Eigenentwicklung einer spezifischen Steuerung kann mit dem Controller S320 vermieden werden.

Der Controller S320 wurde auf Basis modernster Hard- und Software entwickelt. In Konzeption und Realisierung des Controller S320 sind Erfahrungen aus dem industriellen Anlagenbau von vielen Jahren eingeflossen.

Für die weitere Entwicklung sind wir an Ihren Anregungen oder auch Kritik interessiert. Bitte zögern Sie nicht, uns anzusprechen. Als in Deutschland ansässiger Entwickler und Hersteller des Controller S320 können wir rasch und flexibel auf Kundenwünsche reagieren. So könnten z.B. kundenspezifische Einsteckkarten für bestimmte Aufgaben oder spezielle Programmfunktionen realisiert werden.

Auch bei Fragen zu bestimmten Anwendungsfällen sollten Sie uns ansprechen.

Wir beraten Sie gerne.

Ihr TetraTec Team.

weiter zu den technischen Daten


Controller S320 Handbuch - Technische Daten

 2. Technische Daten

Dieses Kapitel beschreibt die Hardware des Controller S320 Basisgerätes, der auswechselbaren Slotkarten und der korrekten Konfiguration und Kalibrierung der analogen und digitalen Signale.

Der Controller S320 - ein frei programmierbares Messgerät der Extraklasse

Slotkarte Typ100 Slotkarte Typ120 Slotkarte Typ220 Slotkarte Typ510

Der Controller S320 ist als offenes System konzipiert und vollkommen flexibel und modular aufgebaut - damit läßt sich das Gerät für praktisch jede denkbare Aufgabe einsetzen. Drei zentrale Schritte sind hierfür erforderlich:

1. Auswahl von Slotkarten und Installation im Controller S320 Basisgerät.

2. Festlegen der Gerätekonfiguration

3. Erstellen der Anwendungssoftware

2.1 Technische Daten Basisgerät

Dieser Abschnitt beschreibt die wesentlichen technischen Daten des Controller S320 Basisgerätes wie Stromversorgung, Displays und Tasten, Schnittstellenbelegungen usw.

Allgemeine Technische Daten
Gehäuse: | DIN 43700 Schalttafeleinbaugehäuse
Frontmaße: | 96 x 96 mm
Schalttafelausschnitt: | 92 x 92 mm
Montage: | von vorne
Gesamtlänge ohne Stecker: | ca. 165 mm
Überstand Frontrahmen: | ca. 8 mm
Einbautiefe mit Stecker: | ca. 185 mm
Befestigung: | durch zwei rückwärtige Befestigungsspangen
Versorgung: | 18 - 28 Volt DC
Leistungsaufnahme: | ca. 8 Watt zzgl. Leistung Digitalausgänge
Verpolungsschutz: | Transildiode 33 Volt
Überspannungsschutz: | Transildiode 33 Volt
Potentialbezug Versorgung: | im Gerät potentialfrei, muß über Versorgung hergestellt werden
Potentialbezug E/A digital: | Versorgungsspannung
Potentialbezug Gerätemasse: | über Buchse PE an Schutzleiter anzuschließen
Potentialbezug Geberspeisung: | Gerätemasse bzw. PE
Potentialbezug E/A analog: | Gerätemasse bzw. PE
Belastbarkeit Digitalausgang: | 24 V plusschaltend, max. 500 mA pro Kanal Dauerstrom, kurzschlußfest (Strombegrenzung typ. 1500 mA), gegen ind. Lasten bis 5 mJ geschützt.
Stromaufnahme Digitaleingang: | 24 V, plusschaltend, ca. 5 mA
Betriebstemperatur: | 0 °C bis 45 °C
max. Anzahl Slotkarten: | 5 (Slot 0 bis Slot 4)
Anzahl Tasten: | 5 (F1, F2, F3, Up, Down)
Anzahl Siebensegmentdisplays: | 3, jeweils 6-stellig
Anzahl Textdisplays: | 3, jeweils 4-stellig
Ethernet-Schnittstelle: | 1 (Eth 0), RJ45-Buchse, 8-polig
RS232-Schnittstellen: | 1 (Ser 0), DSUB-Buchse 9-polig
RS485-Schnittstellen: | 2 (Ser 1 und Ser 2), FCC68-Buchse, 4-polig
LinkVerbindung zum PC | FCC68-Buchse, 6-polig, (RS232)

Anschlußbelegung

Die Rückseite des Controller S320 und die Beschreibung der Anschlüsse.

Der Controller S320 von hinten.

Stromversorgung: Die Stromversorgung von 24V DC wird an der mit SUPPLY bezeichneten, 3-poligen Buchse an den Anschlüssen 0V und 24V angeschlossen. 0V ist der Minus-Anschluß, 24V ist der Plus-Anschluß. Der Plus-Anschluß liegt von der Rückseite betrachtet rechts außen. Die 24Volt Stromversorgung ist im Controller S320 von PE galvanisch getrennt, da die Erdung dieser Steuerspannung in der Regel an zentraler Stelle im Schaltschrank zu erfolgen hat.

Schutzleiter: Der Schutzleiter wird an der mit SUPPLY bezeichneten, 3-poligen Buchse am Anschluß PE angeschlossen. Hiermit wird der definierte Potentialbezug der internen Gerätemasse sowie die mit GND bezeichneten Masseanschlüsse der Slotkarten hergestellt.

Digital-Out: Die acht digitalen Ausgänge des Controller S320 schalten die 24V-Versorgungsspannung der SUPPLY-Buchse über Halbleiterschalter mit 500 mA Belastbarkeit an den entsprechenden Ausgang. Von der Gerätemasse (PE) sind die Ausgänge über Optokoppler galvanisch getrennt. Die Ausgänge sind plusschaltend analog zu einer SPS. Ein Schütz auf Kanal 3 ist demnach an Digital-Out/Pin 3 und 0V anzuschließen. Der auf der 24V-Klemme der SUPPLY Buchse fließende Strom setzt sich aus dem Versorgungsstrom des Controller S320 von ca. 0,35 Ampere plus dem Strom aller 8 digitalen Ausgänge zusammen.

Digital-In: Die acht digitalen Eingänge beziehen sich auf die 0V Klemme der SUPPLY-Buchse und werden mit 24V, also plusschaltend, angesteuert. Pro Kanal fließt ein Strom von ca. 5 mA. Die Eingänge sind von der Gerätemasse (PE) galvanisch getrennt.

Link: An der Linkbuchse wird die Verbindung zur Programmierung des Controller S320 angeschlossen. Der Controller S320 benötigt für die Link-Verbindung folgende fünf Leitungen:

Signal auf PC-Seite | TXD | RXD | RTS | CTS | GND | DSR | DTR
Signal Controller S320-Seite | RXD | TXD | CTS | RTS | GND |  |
9-pol DSUB am PC | 3 | 2 | 7 | 8 | 5 | 6 | 4
25-pol DSUB am PC | 2 | 3 | 4 | 5 | 7 | 6 | 20
6-pol Link-Buchse am Controller | 1 | 4 | 5 | 3 | 6 |  |

HINWEIS: DSR und DTR sind im DSUB-Stecker zu brücken. Bei Sicht auf die Rückseite des Controllers S320 ist die Reihenfolge der 6-poligen FCC68-Linkbuchse von links nach rechts wie folgt: 1-2-3-4-5-6.

HINWEIS: Einige handelsübliche Adapter 25/9-polig DSUB enthalten nicht alle erforderlichen Verbindungen. Dies betrifft insbesondere Adapter, die mit der Maus geliefert werden!

HINWEIS: Bei leistungsschwachen PC oder bei älteren Geräten, die nicht mit einer sog. FiFo-Uart (16550) ausgerüstet sind kann der PC bei einer Übertragungsgeschwindigkeit von 38400 Baud überfordert sein. In einem solchen Fall können Sie die Geschwindigkeit der Linkverbindung temporär durch Betätigen von Tastenkombinationen während des Einschaltvorganges des Controllers S320 wie folgt herabsetzen: F1+F2: 4800 Baud, F1: 9600 Baud, F2: 19200 Baud. Bei leistungsstarken PC's kann die Übertragungsgeschwindigkeit durch F3 auf 57600 Baud erhöht werden. Durch den Autobaud-Mechanismus im Terminalprogramm stellt sich dieses automatisch auf die eingestellte Baudrate ein, siehe auch Abschnitt Programmierumgebung.

Die Programmierumgebung unterstützt die Schnittstellen COM1, COM2, COM3 und COM4 Ihres PC. Die meisten PC verfügen nur über die ersten beiden Schnittstellen, zudem ist die Schnittstelle COM1 oft durch die Maus belegt.

Alle seriellen COMx Schnittstellen des PC enthalten eine (männliche) Stiftleiste in 9-poliger oder in 25-poliger Ausführung. Das mitgelieferte Standardverbindungskabel ist 9-polig. Falls an Ihrem PC ein 25-poliger Anschluß vorhanden ist, benötigen Sie den Adapter 'DSA25/9'.

Ser0: Über diese Buchse kann eine serielle Verbindung nach RS232 abgewickelt werden.

Die serielle Schnittstelle Ser0 arbeitet nach RS232 Nullmodembelegung:

Pin an Ser0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Buchse S320 | - | TXD | RXD | DSR | GND | DTR | CTS | RTS | -
Stiftleiste PC 9pol | CD | RXD | TXD | DTR | GND | DSR | RTS | CTS | -

Die Schnittstelle Ser0 ist am Controller S320 als 9-polige DSUB-Buchsenleiste ausgeführt. Bei Verwendung einer 9-poligen 1:1 DSUB-Verlängerung zur 9-poligen Stiftleiste des PC ergibt sich die notwendige Nullmodemverbindung. DTR und DSR sind im Controller S320 gebrückt. CD ist beim Controller S320 nicht belegt. Bei 25-poligen Stiftleisten am PC ist ein Adapter DSA25/9 erforderlich, Umsetzung entsprechend Beschreibung der Link-Schnittstelle.

HINWEIS: Einige handelsübliche Adapter 25/9-polig DSUB enthalten nicht alle erforderlichen Verbindungen. Dies betrifft insbesondere Adapter, die mit der Maus geliefert werden!

Ser1 und Ser2: Die seriellen Schnittstellen Ser1 und Ser2 arbeiten nach RS485 und sind wie folgt belegt:

Pin an Ser1 oder Ser2 | 1 | 2 | 3 | 4
Signal | GND (100 Ohm) | A | B | 5V (100 Ohm)

Bei Sicht auf die Rückseite des Controllers S320 ist die Reihenfolge der 4-poligen FCC68-Buchse von links nach rechts wie folgt: 1-2-3-4.

HINWEIS: Durch die seriellen Schnittstellen stellen Sie eine galvanische Verbindung (Massepotential) zur Gegenstelle her, in der Regel ein PC. Da die interne Masse des Controllers S320 über den PE-Anschluß mit dem Schutzleiter verbunden ist bzw. verbunden werden muß und die Gegenstelle durch den Netzanschluß üblicherweise auch auf Schutzleiterpotential liegt, spielt dies in der Regel keine Rolle. Sollten jedoch die Gegenstelle und der Controller S320 unterschiedliche Massepotentiale aufweisen, benötigen Sie eine galvanische Trennung der seriellen Schnittstelle. Entsprechende Geräte zur Einschleifung in serielle Schnittstellen sind im Fachhandel bzw. über den Hersteller zu beziehen.

Falls z.B. mehrere Controller S320 über RS485 miteinander kommunizieren sollen, werden die Geräte mit einer Verbindung 1:1 verbunden (A-A, B-B). Die beiden Endgeräte sind nach obigem Schema zu terminieren. Zur Erleichterung der Installation kann der Busadapter T485 eingesetzt werden.

HINWEIS: Bei einer korrekten Feldbusverdrahtung mit Terminierung läßt sich, solange kein Bustransfer abgewickelt wird, zwischen A und PE eine Spannung von ca. 2.8 Volt und zwischen B und PE eine Spannung von ca. 2.1 Volt messen.

Es ist sicherzustellen, daß die kommunizierenden Geräte untereinander einen einwandfreien Potentialausgleich aufweisen. Der Schirm ist mindestens an einer Stelle des gesamten Segmentes auf Schutzleiterpotential (PE) zu legen.

Ein gesendetes Datenpacket wird von allen an diesem Bus angeschlossenen Geräten empfangen, insbesondere auch vom sendenden Gerät. Das sendende Gerät kann durch Vergleich der Datenpakete (Gesendet - Empfangen) feststellen, ob das Datenpaket ordnungsgemäß abgesetzt werden konnte. Das vom Sender empfangene Datenpaket ist nicht identisch, falls z.B. durch ein anderes Gerät zum gleichen Zeitpunkt ein Datenpaket abgesetzt wurde.

Da der Controller S320 zwei serielle RS485 Schnittstellen besitzt, kann ein solcher Buskonflikt vermieden werden, indem die Geräte verkettet werden. (Empfangen auf Ser1 und Senden auf Ser2.) Bei dieser Ring-Topologie liegt in jedem Bussegment nur ein Sender, deshalb treten keine Buskonflikte auf. Allerdings ist bei Ausfall eines Bindegliedes (z.B. durch Ausfall der Stromversorgung) der komplette Bustransfer unterbrochen.

HINWEIS: Bitte achten Sie beim Anschluß von seriellen Schnittstellen auf evtl. Potentialunterschiede, vgl. Kapitel "Serielle Schnittstellen".

Eth0: Anschluß für das 10 MBit Ethernet Netzwerk. Die Schnittstelle ist wie folgt belegt:

Pin an Eth0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
Bezeichnung | TPO+ | TPO- | TPI+ | N.C. | N.C. | TPI- | N.C. | N.C.
Signal | Analog | Analog | Analog | - | - | Analog | - | -

Slot0 bis Slot4: Steckplätze für verschiedene Slotkarten. Die Slotkarten stellen neben den Ein- bzw. Ausgangsanschlüssen in der Regel auch Anschlüsse für GND und SUP zur Verfügung. GND ist die interne Gerätemasse und damit mit PE verbunden. SUP ist je nach Karte bzw. Einstellung eine Hilfsspannung zur Geberspeisung. SUP wird intern über DC/DC-Wandler erzeugt, bezieht sich auf die Gerätemasse und ist damit ebenfalls von der Versorgungsspannung galvanisch getrennt.

Schema Bezugspotentiale

Das folgende Schema verdeutlicht noch einmal die Bezugspotentiale der einzelnen Signale mit der galvanischen Trennung durch DC/DC-Converter bzw. Optokoppler. Dargestellt ist auch ein externer Potentialbezug der Versorgungsspannung, der meist an zentraler Stelle im Schaltschrank vorgesehen wird.

2.2. Technische Daten Slotkarten

Durch die auswechselbaren Slotkarten wird der Controller S320 an die Aufgabe angepaßt.
TYP100 2 x AnalogIn | TYP101 2 x AnalogIn True RMS | TYP110 2 x AnalogIn
TYP120 4 x AnalogIn 0..10V | TYP200 2 x AnalogOut | TYP220 4 x AnalogOut 0..10V
TYP310 1 x AnalogIn + 1 x AnalogOut | TYP400 Busmodul | TYP500 2 x Inkrementalgeber
TYP510 2 x Counter/Freq. | TYP520 2 x Pulse / PWM |

HINWEIS: Nicht im Gerät installierte Steckkarten, sind äußerst empfindlich gegenüber elektrostatischen Entladungen. Beachten Sie daher die einschlägigen Handhabungsvorschriften für elektrostatisch gefährdete Bauteile. Unter keinen Umständen dürfen Slotkarten im laufenden Betrieb eingesetzt oder entfernt werden!

Anschlußtechniken analoger Signale

Im folgenden werden die Anschlußtechniken der wichtigsten Sensoren und Signale kurz erläutert.

Die analogen Eingänge des Controller S320 sind in der Regel mit vier Anschlüssen ausgerüstet. Ein Instrumentenverstärker verstärkt die Spannungsdifferenz zwischen +IN und -IN.

An der Buchse SUP liegt eine in der Regel einstellbare, präzise Spannung bzw. Konstantstrom zur Geberspeisung. Die Buchse GND ist intern mit der Gerätemasse und dem Anschluß PE verbunden und liegt demnach auf Schutzerde.

Prinzipschaltbild analoge Anschlüsse:

Ein Instrumentenverstärker verstärkt die Spannungsdifferenz zwischen dem positiven Eingang +IN und dem negativen Eingang -IN um einen festen Faktor >1.0. Die Verstärkung wird durch den Widerstand RG bestimmt. Im Gegensatz zum normalen Differenzverstärker fließen auf den Eingängen praktisch keine Ströme, die Eingangsimpedanz liegt im GigaOhm-Bereich. Ein Instrumentenverstärker kann nur dann korrekt arbeiten, wenn beide Eingänge +IN und -IN im Gleichtaktbereich des Verstärkers liegen. Beim Controller S320 werden die Instrumentenverstärker auf den analogen Eingangskarten mit einer von der Versorgungsspannung galvanisch getrennten Spannung von +24 Volt bzw. -5 Volt relativ zum Schutzleiteranschluß PE versorgt. Der Gleichtaktbereich erstreckt sich damit von ca. -3 Volt bis ca. +22 Volt bezogen auf PE.

In der Regel ist durch Potentialausgleich zwischen Analogsignalquelle und analogem Eingang des Controller S320 dafür zu sorgen, daß die Eingangssignale innerhalb des Gleichtaktbereiches liegen.

Dieser Potentialausgleich ist ist z.B. dann nicht gegeben, wenn eine batteriebetriebene oder vom Netz galvanisch getrennte analoge Signalquelle nur an den Anschlüssen +IN und -IN angeschlossen wird. Die 'Ausgangsmasse' der Signalquelle kann z.B. durch statische Aufladung weit über den Gleichtaktbereich des Instrumentenverstärkers hinaus 'floaten'. Die sehr hohe Eingangsimpedanz des Instrumentenverstärkers bildet in diesem Fall keinen Potentialausgleich - korrekte Messungen sind nicht möglich. Der Potentialausgleich läßt sich in diesem Fall leicht durch eine Brücke oder einen Widerstand zwischen -IN und GND des analogen Einganges herstellen.

Schließt man dagegen eine potentialbehaftete analoge Signalquelle (wie z.B. die analogen Ausgänge des Controllers S320) an einen Eingang an, sollte nur +IN und -IN beschaltet werden. Da die potentialbehaftete analoge Signalquelle eben durch ihren Potentialbezug stets innerhalb des Gleichtaktbereiches bleibt, würde eine zusätzliche Brücke zwischen -IN und GND eine sogenannte Masseschleife zur Folge haben, die zu unkontrollierten Ausgleichsströmen und damit zu unerwünschten Effekten führen könnte. Bei Speisung von Sensoren durch die interne Geberspeisung ergibt sich selbstverständlich 'automatisch' der erforderliche Potentialausgleich.

Potentialausgleichsleitungen sollten stets sternförmig angelegt sein. So bleibt gewährleistet, daß auf den Leitungen nur die Ausgleichsströme, nicht jedoch eingekoppelte 'Brummströme' oder gar Anteile von der Stromversorgung der Geräte fließen können.

Bei Strommessungen (z.B. 4..20mA) wird auf den Slotkarten in der Regel ein Widerstand von 47 Ohm parallel zum Eingang geschaltet. Der Widerstand bewirkt bei einem Strom von 4..20mA z.B. einen Spannungsabfall von ca. 0.2 .. 1.0 Volt. Dieser Spannungsabfall wird wie beim normalen Spannungseingang vom Instrumentenverstärker verstärkt und dem Analog-Digital-Wandler (ADC) zugeführt. Selbstverständlich benötigt auch ein Stromeingang einen definierten Potentialbezug.

In Anlehnung an die allgemeine Praxis wird empfohlen, den Schirm einer Analogsignalleitung einseitig an GND anzuschließen. Als Verbindungsleitungen sollten, soweit möglich, solche mit verdrillten Aderpaaren eingesetzt werden, wobei die Paarung +IN und -IN sowie SUP und GND lautet.

Brückensensor

Verbreiteter Sensortyp für Druck, Kraft, Moment usw. ohne eingebaute Elektronik. Eine physikalische Kraft beeinflußt die Widerstände der Meßbrücke und erzeugt so eine Spanungsdifferenz zwischen positivem und negativem Eingang.

Die Brücke wird mit einer präzisen Konstantspannung (meistens 10.00 Volt) versorgt. Die Spannungsdifferenz der Brücke wird ausgewertet, sie liegt je nach Typ bei 100 mV oder darunter. Dies ist eine klassische Anwendung eines Instrumentenverstärkers, da die Eingänge im Beispiel statisch bei ca. 5 Volt liegen, das eigentliche Nutzsignal jedoch aus der Differenz der beiden Spannungen auszuwerten ist.

PT100 Temperatursensor, Vierleiteranschluß

Preiswerter und doch genauer Temperatursensor. PT100-Temperaturaufnehmer messen stets die absolute Temperatur bezogen auf den Nullpunkt bei 0° Kelvin. Der PT100-Sensor weist bei 0°C einen Widerstand von 100 Ohm auf. Er wird von einem Konstantstrom von 1.00 mA gespeist, so daß bei 0°C eine Spannungsdifferenz von 100 mV gemessen wird. Die Widerstandsänderung über der Temperatur entspricht der Platinkurve und ist nach IEC751 genormt. Der Eingang kann durch Anlegen von Referenzwiderständen, z.B. 100 Ohm und 150 Ohm kalibriert werden. Die Umrechnung in Temperatur erfolgt durch eine Spell-Funktion, die in den Bibliotheken enthalten ist. In der Vierleiterversion werden Fehlmessungen durch Spannungsabfälle in den Zuleitungen vermieden.

PT100 Temperatursensor, Zweileiteranschluß

Im Vergleich zum Vierleiteranschluß wird beim Zweileiteranschluß eine Fehlmessung durch (temperaturabhängige) Spannungsabfälle auf den Zuleitungen nicht vermieden.

Thermoelemente

Thermoelemente sind relativ messende Temperaturaufnehmer, die auf Grund von unterschiedlichen Metallpaarungen sogenannte Thermospannungen im Millivolt-Bereich erzeugen. Thermoelemente benötigen stets eine Vergleichsstellenkompensation. Elektronisch wird diese Vergleichstemperatur meist durch einen PT100 in der Auswerteelektronik gemessen. Thermoelemente lassen sich nicht direkt am Controller S320 anschließen, da die Vergleichsstellenkompensation standardmäßig nicht auf den Slotkarten enthalten ist.

Eine einfache Möglichkeit für den Anschluß von Thermoelementen bieten sich mit sogenannten 'Kopftransmittern' an. Dies sind recht preiswerte elektronische Umsetzer von Thermoelementsignalen auf Einheitssignale wie z.B. 4..20mA, wie sie z.B. bei Temperaturaufnehmern im Anschlußkopf eingebaut werden.

Sensor mit 0..20mA, Dreidrahtanschluß

Sensoren mit Stromausgang 0 bis 20 mA werden üblicherweise in Dreidrahttechnik angeschlossen. Der große Vorteil der Stromübertragung ist die Unempfindlichkeit gegenüber veränderlichen Widerständen der Zuleitung wie Kabel oder Stecker. Der Sensor wird meistens mit 24 Volt versorgt. Der Eingang des Controller S320 wandelt den Strom über einen internen Widerstand (meistens 50 Ohm, dies entspricht 1.0 Volt bei 20 mA) wieder in eine Spannung, die entsprechend verstärkt wird. Im Falle eines Vierdrahtanschlußes wird der -IN-Eingang nicht auf Controllerseite, sondern am Sensor auf GND gelegt.

Sensor mit 4..20mA, Zweileiteranschluß

Sensoren mit 4..20mA Stromausgang werden in der Regel in Zweileitertechnik angeschlossen. Der Mindeststrom von 4 mA versorgt in diesem Fall die Elektronik im Sensor. Ein Unterschreiten des Mindeststromes von 4 mA kann zur Drahtbrucherkennung genutzt werden.

Der Anschluß erfolgt zweckmäßigerweise wie nachfolgend abgebildet. Bezüglich GND wird die Meßspannung vom Widerstand RI im Bereich 0.2 .. 1.0 Volt erzeugt.

Sensor mit 4..20mA, Zweileiteranschluß, alt. Variante

Folgende Anschlußvariante mit einem externen Widerstand RE erzeugt ein leicht meßbares Spannungssignal im Bereich von 1..5 Volt zwischen GND und -IN. Zusätzlich bewirkt der Widerstand einen gewissen Schutz gegen Kurzschlüsse in der Zweidrahtleitung. Im übrigen verringert sich die Verlustleistung und damit die Eigenerwärmung im Sensor. Voraussetzung ist jedoch, daß der Sensor bei einer Versorgung mit 24 Volt eine Bürde von 290 Ohm zuläßt.

Sensor mit 4..20mA, Zweileiteranschluß, weitere Variante

Nicht empfohlen, aber grundsätzlich möglich, ist folgende Anschlußvariante eines 4..20mA Zweileitersensors. Der Sensor liegt hier im 'Massezweig'. Da der Widerstand RI direkt an der Versorgung von 24 Volt angeschlossen ist würde ohne Dioden die Meßspannung bezogen auf GND am Eingang -IN zwischen 23.8 Volt (4mA) und 23.0 Volt (20 mA) liegen. Die Spannung am Eingang +IN liegt immer bei 24 Volt bezogen auf GND. Ohne Dioden liegen daher beide Eingänge außerhalb des Gleichtaktbereiches des Instrumentenverstärkers. Eine korrekte Messung ist nicht möglich. Durch Siliziumdioden wird ein Spannungsabfall von ca. 2.0 Volt bezüglich 24 Volt erzeugt. Hierdurch liegen die Eingänge wieder im Gleichtaktbereich.

An Stelle der Dioden kann evtl. auch ein Widerstand RE (siehe oben) von mindestens 500 Ohm zwischen SUP und +IN eingesetzt werden. Der Sensor muß dann mit einer Bürde > 550 Ohm bei 24 Volt arbeiten können.

Analoger Spannungsausgang, massebezogen

Bei Geräten mit analogem Spannungsausgang ist zu unterscheiden, ob der Ausgang massebezogen (d.h. Schutzleiterpotential) oder potentialfrei ist. Ist der Ausgang massebezogen und ist sichergestellt, daß die Massedifferenz zuzüglich Nutzsignal zwischen Controller S320 und externem Gerät innerhalb des Gleichtaktbereiches des Instrumentenverstärkers liegt, kann das Gerät wie beschrieben angeschlossen werden.

Analoger Spannungsausgang, potentialfrei

Externe Geräte mit potentialfreiem Ausgang müssen auf Schutzleiterpotential gelegt werden. Dies kann am Anschluß des Controller S320 erfolgen oder durch einen separaten Schutzleiteranschluß. Das Gerät kann vom Controller S320 versorgt werden oder durch ein fremdes, potentialfreies Netzteil, beispielsweise ein Steckernetzteil. Selbstverständlich kann ein externes Gerät am GND-Anschluß des Controller S320 entsprechend den einschlägigen Vorschriften nicht 'geerdet' werden.

Analoger Stromausgang mit Stromquelle, massebez.

Ist der Ausgang massebezogen mit eigener Stromquelle und ist sichergestellt, daß die Massedifferenz zuzüglich Nutzsignal zwischen Controller S320 und externem Gerät innerhalb des Gleichtaktbereiches des Instrumentenverstärkers liegt, kann das Gerät wie unten dargestellt angeschlossen werden.

Analoger Stromausgang mit Stromsenke, massebez.

Ist der analoge Ausgang massebezogen und als Stromsenke ausgeführt, benötigt man für die Stromschleife eine Geberspeisung, die die Geräte in der Regel selbst zur Verfügung stellen. Über einen externen Widerstand RE bei Geberspannung von mehr als 22 Volt stellt man sicher, daß der Gleichtaktbereich des Instrumentenverstärkers nicht verlassen wird.

Analoger Stromausgang, potentialfrei

Bei Geräten mit potentialfreiem Stromausgang versorgt man die Stromschleife am einfachsten mit der internen Geberspeisung des Controller S320 (vgl. Sensor 4..20mA, Zweileiteranschluß).

Übersicht Slotkarten für analoge Signale

Nachfolgende Tabelle enthält die relevanten Daten der im folgenden beschriebenen analogen Slotkarten:

Analoge Eingänge:

Parameter | TYP10x 1 | TYP110 | TYP120 | TYP310
Anzahl analoge Eingänge | 2 | 2 | 4 | 1
Auflösung der Hardware | 24 bit | 18 bit | 12 bit | 14 bit
typ. stabil bei 0..10 V Eingang 2 | 18 bit 3 | 15 bit | 12 bit | 12 bit
Wandlungsverfahren | SigDelta | MultiSlope | Flash | Flash
Skalierung 4 | B | B | U | B
typ. Temperaturverhalten | 50 ppm/K | 50 ppm/K | 50 ppm/K | 50 ppm/K
typ. Wandlungszeit | 1-100ms 5 | 65 ms 6 | 15 µs | 10 µs
Eingangsimpedanz | > 1GOhm | > 1GOhm | > 1GOhm | > 1GOhm
Instrumentenverstärker | ja | ja | nein | ja
Geberspeisung | ja | ja | nein | ja

1: TYP100 für Gleichspannungen, TYP101 für Wechselspannungen
2: typ. Anzahl 'nicht rauschender' Bits
3: ca. 18 bit bei 100ms Wandlungszeit, ca. 10 bit bei 1 ms Wandlungszeit
4: B: Eingang arbeitet stets bipolar , U: Eingang arbeitet stets positiv (Unipolar)
5: Je nach Filter-Parameter der Konfigurationsdatei
6: Meßzeit je nach Reject-Parameter 16,67ms (60Hz) bzw. 20ms (50Hz)

Analoge Ausgänge:

Parameter | TYP200 | TYP220 | TYP310
Anzahl analoge Ausgänge | 2 | 4 | 1
Auflösung der Hardware | 16 bit | 12 bit | 14 bit
Wandlungsverfahren | SigDelta | Flash | Flash
Skalierung 1 | B, U | U | B, U
Ausgangsvarianten | V, mA 2 | V | V, mA
typ. Wandlungszeit | 3 ms | 15 µs | 10 µs
typ. Temperaturverhalten | 50 ppm/K 3 | 50 ppm/K | 50 ppm/K

1: B: Bipolar, U: Unipolar
2: Je nach Skalierung des Ausgangs
3: V: Spannungsausgang, mA: Stromausgang, je nach Skalierung des Ausgangs

Standardeinstellungen analoge Signale

Die analogen Slotkarten sind ab Werk wie folgt kalibriert:

Analoge Eingänge: | 0 bis +10 Volt Eingang 0.0 bis 10.0 interne Darstellung keine Geberspeisung
Analoge Ausgänge: | 0 bis +10 Volt Ausgang 0.0 bis 1.0 interne Darstellung keine Geberspeisung

Die Slotkarten können leicht selbst auf andere Werte abgeglichen werden. Die Vorgehensweise wird bei den jeweiligen Slotkarten bzw. im Kapitel 'Konfiguration der Hardware' beschrieben.

Sondereinstellungen analoge Signale

Slotkarten werden optional auch ab Werk auf den gewünschten Bereich, Geberspeisung und interne Darstellung justiert. Möglich sind hierbei alle bei der jeweiligen Karte genannten Kombinationen. Hierfür werden die genauen Daten zusammen mit dem Auftrag benötigt.

In einigen Fällen können auch 'exotische' Bereiche mit den Slotkarten abgedeckt werden.

Beispiele hierfür wären +/- 120 mV, 0 bis 7.5 Volt, -2.5 bis 10 Volt, 0 bis 20 Volt, Geberspeisung 0.1 mA für PT1000, Geberspeisung 12 Volt usw. Oft lassen sich solche Bereiche durch Sonderbestückung bzw. Austausch von Komponenten realisieren. Auch dieser Service wird optional ab Werk angeboten.

Kodierung der Slotkarten

Sie können die Stecker der Slotkarten und die der digitalen Ein- und Ausgänge mit Kodierstiften kodieren.

Codierung der Schraub-Steckklemmen

weiter zu der Slotkarte Typ100


Controller S320 Handbuch - Slotkarte Typ100

 2.3. TYP100: 2 x Analogeingang

Die Slotkarte TYP100 enthält zwei voneinander unabhängige analoge Eingänge mit präzisen AD-Wandlern nach dem Sigma-Delta-Verfahren.

Die TYP100-Karte ist die Standardwahl zum Messen analoger Signale. Die im Gerät nutzbare Auflösung bei 10 Hz Eingangsfilter liegt bei 1 : 200.000 und besser. Der Wandler verfügt über eine Auflösung von 24 bit.

Die Wandlungszeit kann durch Verändern der Filterfrequenz nach Bedarf angepaßt werden, wobei die nutzbare Auflösung mit steigender Wandlungszeit (Signalintegration) verbessert wird. Die Wandlungszeit errechnet sich aus dem Reziprokwert der eingestellten Filterfrequenz.

Die Eingangsstufe wird durch einen Instrumentenverstärker gebildet, dessen Verstärkung über einen Widerstand RGx eingestellt werden kann. Die Grenzfrequenz sowie ggf. eine zusätzliche Vorverstärkung sind einstellbar.

Analoger Eingang: Differenzeingang mit einem Gleichtaktbereich von -3 Volt bis +22 Volt bezogen auf GND. Die Vorverstärkung G durch den Instrumentenverstärker INA kann durch den Widerstand RGx nach der Gleichung RGx = 49K4/(G-1) bestimmt werden. Der Wandler arbeitet bipolar im Bereich von -2.5 Volt bis 2.5 Volt. Durch Setzen von SWx8 wird vor dem Wandler eine Spannungsteilung auf 23.25 Prozent erzwungen. Durch Setzen von SWx7 wird parallel zum Eingang ein Widerstand von 47 Ohm zur Strommessung geschaltet.

In der folgenden Tabelle sind die geeigneten Widerstände RGx (es wird immer der nächstgrößere Widerstand der E24 Reihe verwendet) und die Schalterstellungen für SWx7 und SWx8 sowie Richtwerte für Gain und Offset für die Standardeingangssignale aufgeführt. Der genaue Abgleich des Eingangs erfolgt über die Parameter GAIN und OFFSET in der Konfigurationsdatei. Die Angaben für Gain und Offset sind kein Ersatz für eine genaue Kalibrierung. Unvermeidbare Toleranzen bei den Widerständen der Slotkarte werden erst durch die Kalibrierung ausgeglichen.

 |  |  |  |  | normiert unipolar 0..+1 |  | normiert bipolar -1..+1 |  | Wert wie Eingangssignal
Eingangssignal |  | RGx | SWx7 | SWx8 | Gain | Offset | Gain | Offset | Gain | Offset
0 .. +10 | Volt | - | OFF | ON | 1,00 | 0,00 |  |  | 10,00 | 0,00
0 .. +5 | Volt | 47k0 | OFF | ON | 1,00 | 0,00 |  |  | 5,00 | 0,00
-2 .. +2 | Volt | 240k | OFF | OFF |  |  | 1,00 | 0,00 | 2,00 | 0,00
-1 .. +1 | Volt | 36k0 | OFF | OFF |  |  | 1,00 | 0,00 | 1,00 | 0,00
-500 .. +500 | mV | 13k0 | OFF | OFF |  |  | 1,00 | 0,00 | 0,50 | 0,00
-200 .. +200 | mV | 4k70 | OFF | OFF |  |  | 1,00 | 0,00 | 0,20 | 0,00
-100 .. +100 | mV | 2k20 | OFF | OFF |  |  | 1,00 | 0,00 | 0,10 | 0,00
0 .. +20 | mA | 33k0 | ON | OFF | 1,00 | 0,00 |  |  | 20,00 | 0,00
4 .. +20 | mA | 33k0 | ON | OFF | 1,25 | -0,20 |  |  | 20,00 | 0,00

Pt100 Sensoren werden mit einem Konstantstrom von 1mA versorgt. Dadurch entspricht der gemessene Wert in mV genau dem Widerstand des Sensors in Ohm. Dieser Wert X kann direkt an die Bibliotheksfunktion linPT100(X); der Datei Lin.spi übergeben werden, welche die entsprechende Temperatur in °Kelvin liefert. Der mögliche Meßbereich hängt von der Vorverstärkung durch den Widerstand RGx ab:

Pt100 Auslegung
Temperaturbereich | RGx | SWx7 | SWx8 | Eingangsspannung |  | Gain | Offset
.. ~ 15°C | 2k2 | OFF | OFF | 0 .. +107 | mV | 107,00 | 0,00
.. ~ 40°C | 2k4 | OFF | OFF | 0 .. +116 | mV | 116,00 | 0,00
.. ~ 75°C | 2k7 | OFF | OFF | 0 .. +130 | mV | 130,00 | 0,00
.. ~ 110°C | 3k0 | OFF | OFF | 0 .. +143 | mV | 143,00 | 0,00
.. ~ 145°C | 3k3 | OFF | OFF | 0 .. +157 | mV | 157,00 | 0,00
.. ~ 180°C | 3k6 | OFF | OFF | 0 .. +170 | mV | 170,00 | 0,00
.. ~ 215°C | 3k9 | OFF | OFF | 0 .. +183 | mV | 183,00 | 0,00

Geberspeisung: Die am Anschluß SUP anliegende Geberspeisung läßt sich nach folgender Tabelle einstellen und mit dem Trimmer PSUPx feinabgleichen:

Speisung | SWx1 | SWx2 | SWx3 | SWx4 | SWx5 | SWx6 | Belastbarkeit | PSUPx
keine | OFF | OFF | OFF | OFF | OFF | OFF |  |
5 Volt | OFF | ON | ON | ON | OFF | OFF | ca. 15 mA | ja
10 Volt | OFF | ON | ON | OFF | OFF | ON | ca. 15 mA | ja
15 Volt | OFF | ON | ON | OFF | ON | ON | ca. 15 mA | ja
24 Volt | ON | OFF | OFF | OFF | OFF | OFF | ca. 25 mA 1 | nein
1 mA | OFF | ON | OFF | ON | OFF | ON | 1 mA | ja

1: Die 24 Volt Versorgung ist im Gerät insgesamt mit ca. 200 mA belastbar. Falls sichergestellt ist, daß dieser Gesamtstrom nicht überschritten wird, kann über eine einzelne Slotkarte auch ein etwas höherer Strom entnommen werden.

HINWEIS: Schalter SWx1 und SWx2 dürfen nicht gleichzeitig auf ON gestellt werden!

Konfigurationsmöglichkeiten der TYP100-Slotkarte:

Syntax: | Port <val> {Name "<val>"; Gain <val>; Offset <val>; Filter <val>; PreGain <val>;};
Port | <val> ist die Kanalnummer für Port 0 oder 1, eine Integerzahl.
Name | <val> ist der Name des Ports, z.B. "Spannung", "Druck" usw.
Gain | <val> ist eine Fließpunktzahl, z.B. 10.12345.
Offset | <val> ist eine Fließpunktzahl, z.B. 0.12345.
Filter | Hiermit wird die Grenzfrequenz des Wandlers eingestellt. <val> ist eine Fließpunktzahl zwischen 10.0Hz und 1000.0Hz. Der genaue Wert der Grenzfrequenz wird entsprechend den Hardwaremöglichkeiten justiert.
PreGain | Die Vorverstärkung des Wandlers. <val> ist ein Integerwert aus folgenden Zahlen: 1, 2, 4, 8, 16, 32, 64 oder 128.

Konfigurationsbeispiel der TYP100-Slotkarte:

MODULE 100 { Port 0 { Name "Spannung";
                      Gain 10.76194576;
                      Offset 0.00147000;
                      Filter 10.0;
                      PreGain 1; };
             Port 1 { Name "Strom";
                      Gain 10.74436995;
                      Offset 0.00190000;
                      Filter 10.0;
                      PreGain 1; };
            } Slot 0;

weiter zur Slotkarte TYP101


Controller S320 Handbuch - Slotkarte Typ101

 2.4 TYP101: 2 x Analogeingang für Wechselspannung

Die Slotkarte TYP101 enthält zwei voneinander unabhängige TrueRMS analoge Eingänge mit präzisen AD-Wandlern nach dem Sigma-Delta-Verfahren.

Im Unterschied zur TYP100-Slotkarte ist jedem Eingang ein TrueRMS-Converter vorgeschaltet, der die Echt-Effektivwertmessung von Signalen zuläßt.

Der Eingang kann ähnlich einem Oszilloskop zwischen DC- bzw. AC-Kopplung umgeschaltet werden. Bei der DC-Kopplung werden Gleichspannungsanteile im Signal mitbewertet, bei der AC-Kopplung werden nur die Wechselspannungsanteile bewertet.

Die Slotkarte TYP101 verfügt eingangsseitig über einen Instrumentenverstärker, dessen Verstärkung über einen Widerstand RGx bestimmt werden kann. Eine 24V Geberspeisung kann zugeschaltet werden.

Mit der TYP101-Slotkarte können eine Reihe weiterer Meßwertgeber direkt am Controller S320 angeschlossen werden, für die normalerweise eine separate Signalaufbereitung erforderlich wäre.

Als Beispiele seien genannt: Tachogeber an Motoren, Brückensensoren mit AC-Speisung, Koppelzangen z.B. zur Messung von Motorströmen, PWM-Signale z.B. von Temperatursensoren, induktive Weggeber usw.

Analoger Eingang: Differenzeingang mit einem Gleichtaktbereich von -3 Volt bis +22 Volt bezogen auf GND. Die Vorverstärkung G durch den Instrumentenverstärker INA kann durch den Widerstand RGx nach der Gleichung RGx = 49K4/(G-1) bestimmt werden. Der Wandler arbeitet bipolar im Bereich von -2.5 Volt bis 2.5 Volt.

In der folgenden Tabelle sind die geeigneten Widerstände RGx (es wird immer der nächstgrößere Widerstand der E24 Reihe verwendet) und die Schalterstellungen für SW2 (Port0) und SW5 (Port1) sowie Richtwerte für Gain und Offset für die Standardeingangssignale aufgeführt. Der genaue Abgleich des Eingangs erfolgt über die Parameter GAIN und OFFSET in der Konfigurationsdatei. Die Angaben für Gain und Offset sind kein Ersatz für eine genaue Kalibrierung. Unvermeidbare Toleranzen bei den Widerständen der Slotkarte werden erst durch die Kalibrierung ausgeglichen.

 |  |  |  | normiert unipolar 0..+1 |  | normiert bipolar -1..+1 |  | Wert wie Eingangs- signal
Eingangssignal |  | RGx | SW2 / SW5 | Gain | Offset | Gain | Offset | Gain | Offset
0 .. +10 | Volt | - | ON | 1,00 | 0,00 |  |  | 10,00 | 0,00
0 .. +5 | Volt | 47k0 | ON | 1,00 | 0,00 |  |  | 5,00 | 0,00
-2 .. +2 | Volt | 240k | OFF |  |  | 1,00 | 0,00 | 2,00 | 0,00
-1 .. +1 | Volt | 36k0 | OFF |  |  | 1,00 | 0,00 | 1,00 | 0,00
-500 .. +500 | mV | 13k0 | OFF |  |  | 1,00 | 0,00 | 0,50 | 0,00
-200 .. +200 | mV | 4k70 | OFF |  |  | 1,00 | 0,00 | 0,20 | 0,00
-100 .. +100 | mV | 2k20 | OFF |  |  | 1,00 | 0,00 | 0,10 | 0,00

HINWEIS: Die Tabelle berücksichtigt Gleichspannungssignale! Die Signalverarbeitungsstufen arbeiten im Bereich -2.5 Volt bis 2.5 Volt und müssen selbstverständlich auch die Maximalwerte der Wechselspannung am Eingang verarbeiten können.

Der Effektivwert einer Wechselspannung ist von der Signalform abhängig. Bei einem Sinussignal von 1 Volt eff beträgt der Maximalwert z.B. 1.0 Volt x 1.4142 = 1.4142 Volt. Dies ist bei der Wahl des passenden Eingangsbereiches zu berücksichtigen.

Mit Schalter SW3 (Port0) bzw. SW6 (Port1) = ON wird eine DC-Kopplung erreicht. Ein Sinussignal mit 1 Volt eff könnte z.B mit einer Gleichspannung von 0.5 Volt überlagert sein. Bei DC-Kopplung wird das Gesamtsignal bewertet. Aktiviert man mit Schalter SW3 (Port0) bzw. SW6 (Port1) = OFF die AC-Kopplung erhält man als Ergebnis nur den AC-Anteil, also 1 Volt eff.

Es ist zu beachten, daß bei der Messung von überlagerten Signalen, immer die Maximalwerte der Summe aus DC-Anteil und AC-Anteil innerhalb des Arbeitsbereiches der Signalverarbeitungsstufen liegen müssen, selbst bei AC-Kopplung.

Geberspeisung: Am Anschluß SUP läßt sich durch SW1 (Port 0) bzw. SW4 (Port 1) eine 24 Volt Geberspeisung mit einer Belastbarkeit von ca. 25 mA zuschalten.

Effektivwertmessung, TrueRMS: In kurzen Worten ist der Effektivwert einer Wechselspannung der Wert, den eine Gleichspannung mit demselben Wert an einer ohmschen Last im Mittel als Leistung erzielen würde.

Bekanntlich besteht zwischen Leistung und Spannung einer Gleichspannung an einem ohmschen Widerstand ein quadratischer Zusammenhang. Dementsprechend werden bei der Effektivwertmessung größere Eingangsspannungen im Mittel stärker bewertet als kleine Eingangsspannungen. Weiterhin werden negative Spannungen positiv bewertet, da sie aufgrund des negativen Stromes ebenfalls eine positive Leistung erzielen würden. An das ohmsche Gesetz (U = R x I) und das Gesetz über elektrische Leistung (P = U x I) sei errinnert.

Die Genauigkeit und das Zeitverhalten einer TrueRMS-Umsetzung hängt unter anderem von folgenden Faktoren ab: Signalform, DC-Anteil und DC-Fehler, Crest-Faktor, Frequenz, Anstiegsgeschwindigkeit (Slew rate), Restwelligkeit und Zeitkonstante. Es würde den Rahmen dieses Handbuches sprengen, auf alle technischen Details einer Effektivwertumsetzung einzugehen. Für interessierte Leser sei auf die technische Beschreibung des verwendeten TrueRMS-Umsetzers (AD637) verwiesen.

Die Slotkarte TYP101 wird standardmäßig mit CAx = 0,47µF (Cav im Datenblatt) und CBx = 1,5µF (C2 im Datenblatt) bestückt. Das Filterdesign entspricht einem 1-poligen Sallen-Key Filter. Die entsprechenden Kondensatoren sind im Layout der Slotkarte TYP101 bezeichnet und können vom kundigen Anwender den eigenen Wünschen entsprechend angepaßt werden. Das Verhältnis der beiden Kondensatorwerte ( CBx = 3,3 x CAx ) sollte in etwa beibehalten werden. Bei der Standardbestückung beträgt die Restwelligkeit nach dem Filter bei 50Hz ca. 1% und bei 1000Hz ca. 0.05%. Die Zeitkonstante beläuft sich auf ca. 200 ms.

Die maximale Frequenz des Eingangssignales wird durch die Signalaufbereitung bestimmt. Je nach Signalform (Sinus, Rechteck usw.) liegt die maximal sinnvolle Eingangsfrequenz bei ca. 50 kHz.

Konfigurationsmöglichkeiten der TYP101-Slotkarte:

Syntax: | Port <val> {Name "<val>"; Gain <val>; Offset <val>; Filter <val>; PreGain <val>;};
Port | <val> ist die Kanalnummer für Port 0 oder 1, eine Integerzahl.
Name | <val> ist der Name des Ports, z.B. "Spannung", "Druck" usw.
Gain | <val> ist eine Fließpunktzahl, z.B. 10.12345.
Offset | <val> ist eine Fließpunktzahl, z.B. 0.12345.
Filter | Hiermit wird die Grenzfrequenz des Wandlers eingestellt. <val> ist eine Fließpunktzahl zwischen 10.0Hz und 1000.0Hz. Der genaue Wert der Grenzfrequenz wird entsprechend den Hardwaremöglichkeiten justiert.
PreGain | Die Vorverstärkung des Wandlers. <val> ist ein Integerwert aus folgenden Zahlen: 1, 2, 4, 8, 16, 32, 64 oder 128.

Konfigurationsbeispiel der TYP101-Slotkarte:

MODULE 101 { Port 0 { Name "Spannung";
                      Gain 10.76194576;
                      Offset 0.00147000;
                      Filter 10.0;
                      PreGain 1; };
             Port 1 { Name "Strom";
                      Gain 10.74436995;
                      Offset 0.00190000;
                      Filter 10.0;
                      PreGain 1; };
           } Slot 0;

weiter zur Slotkarte TYP110


Controller S320 Handbuch - Slotkarte Typ110

 2.5 TYP110: 2 x Analogeingang

Die Slotkarte TYP110 enthält zwei voneinander unabhängige analoge Eingänge mit präzisen AD-Wandlern.

Die Slotkarte TYP110 erreicht eine nutzbare Auflösung von etwa 1 : 50.000. Der Wandler verfügt über eine Auflösung von 18 bit. Bevorzugte Anwendung ist das Messen von Signalen, die von Netzbrumm gestört sind. Die Karte enthält integrierende Wandler über eine Netzperiode von 20 oder 16.67 ms. Es werden 16 Messungen / Sekunde durchgeführt.

Die Eingangsstufe wird durch einen Instrumentenverstärker gebildet, dessen Verstärkung über einen Widerstand RGx eingestellt werden kann.

Analoger Eingang: Differenzeingang mit einem Gleichtaktbereich von -3 Volt bis +22 Volt bezogen auf GND. Die Vorverstärkung G durch den Instrumentenverstärker INA kann durch den Widerstand RGx nach der Gleichung RGx = 49K4/(G-1) bestimmt werden. Der Wandler arbeitet bipolar im Bereich von -2.5 Volt bis 2.5 Volt. Durch Setzen von SWx8 wird vor dem Wandler eine Spannungsteilung auf 24.36 Prozent erzwungen. Durch Setzen von SWx7 wird parallel zum Eingang ein Widerstand von 47 Ohm zur Strommessung geschaltet.

In der folgenden Tabelle sind die geeigneten Widerstände RGx (es wird immer der nächstgrößere Widerstand der E24 Reihe verwendet) und die Schalterstellungen für SWx7 und SWx8 sowie Richtwerte für Gain und Offset für die Standardeingangssignale aufgeführt. Der genaue Abgleich des Eingangs erfolgt über die Parameter GAIN und OFFSET in der Konfigurationsdatei. Die Angaben für Gain und Offset sind kein Ersatz für eine genaue Kalibrierung. Unvermeidbare Toleranzen bei den Widerständen der Slotkarte werden erst durch die Kalibrierung ausgeglichen.

 |  |  |  |  | normiert unipolar 0..+1 |  | normiert bipolar -1..+1 |  | Wert wie Eingangssignal
Eingangssignal |  | RGx | SWx7 | SWx8 | Gain | Offset | Gain | Offset | Gain | Offset
0 .. + 0 | Volt | - | OFF | ON | 1,00 | 0,00 |  |  | 10,00 | 0,00
0 .. +5 | Volt | 47k0 | OFF | ON | 1,00 | 0,00 |  |  | 5,00 | 0,00
-2 .. +2 | Volt | 240k | OFF | OFF |  |  | 1,00 | 0,00 | 2,00 | 0,00
-1 .. +1 | Volt | 36k0 | OFF | OFF |  |  | 1,00 | 0,00 | 1,00 | 0,00
-500 .. 500 | mV | 13k0 | OFF | OFF |  |  | 1,00 | 0,00 | 0,50 | 0,00
-200 .. 200 | mV | 4k70 | OFF | OFF |  |  | 1,00 | 0,00 | 0,20 | 0,00
-100 .. 100 | mV | 2k20 | OFF | OFF |  |  | 1,00 | 0,00 | 0,10 | 0,00
0 .. +20 | mA | 33k0 | ON | OFF | 1,00 | 0,00 |  |  | 20,00 | 0,00
4 .. +20 | mA | 33k0 | ON | OFF | 1,25 | -0,20 |  |  | 20,00 | 0,00

Pt100 Sensoren werden mit einem Konstantstrom von 1mA versorgt. Dadurch entspricht der gemessene Wert in mV genau dem Widerstand des Sensors in Ohm. Dieser Wert X kann direkt an die Bibliotheksfunktion linPT100(X) der Datei Lin.spi übergeben werden, welche die entsprechende Temperatur in °Kelvin liefert. Der mögliche Meßbereich hängt von der Vorverstärkung durch den Widerstand RGx ab:

Pt100 Auslegung
Temperaturbereich | RGx | SWx7 | SWx8 | Eingangsspannung |  | Gain | Offset
.. ~ 15°C | 2k2 | OFF | OFF | 0 .. +107 | mV | 107,00 | 0,00
.. ~ 40°C | 2k4 | OFF | OFF | 0 .. +116 | mV | 116,00 | 0,00
.. ~ 75°C | 2k7 | OFF | OFF | 0 .. +130 | mV | 130,00 | 0,00
.. ~ 110°C | 3k0 | OFF | OFF | 0 .. +143 | mV | 143,00 | 0,00
.. ~ 145°C | 3k3 | OFF | OFF | 0 .. +157 | mV | 157,00 | 0,00
.. ~ 180°C | 3k6 | OFF | OFF | 0 .. +170 | mV | 170,00 | 0,00
.. ~ 215°C | 3k9 | OFF | OFF | 0 .. +183 | mV | 183,00 | 0,00

Geberspeisung: Die am Anschluß SUP anliegende Geberspeisung läßt sich nach folgender Tabelle einstellen und mit dem Trimmer PSUPx feinabgleichen:

Speisung | SWx1 | SWx2 | SWx3 | SWx4 | SWx5 | SWx6 | Belastbarkeit | PSUPx
keine | OFF | OFF | OFF | OFF | OFF | OFF |  |
5 Volt | OFF | ON | ON | ON | OFF | OFF | ca. 15 mA | ja
10 Volt | OFF | ON | ON | OFF | OFF | ON | ca. 15 mA | ja
15 Volt | OFF | ON | ON | OFF | ON | ON | ca. 15 mA | ja
24 Volt | ON | OFF | OFF | OFF | OFF | OFF | ca. 25 mA 1 | nein
1 mA | OFF | ON | OFF | ON | OFF | ON | 1 mA | ja

1: Die 24 Volt Versorgung ist im Gerät insgesamt mit ca. 200 mA belastbar. Falls sichergestellt ist, daß dieser Gesamtstrom nicht überschritten wird, kann über eine einzelne Slotkarte auch ein etwas höherer Strom entnommen werden.

HINWEIS: Schalter SWx1 und SWx2 dürfen nicht gleichzeitig auf ON gestellt werden!

Konfigurationsmöglichkeiten der TYP110-Slotkarte:

Syntax: | Port <val> {Name "<val>"; Gain <val>; Offset <val>; Reject <val>;};
Port | <val> ist die Kanalnummer für Port 0 oder 1, eine Integerzahl.
Name | <val> ist der Name des Ports, z.B. "Spannung", "Druck" usw.
Gain | <val> ist eine Fließpunktzahl, z.B. 10.12345.
Offset | <val> ist eine Fließpunktzahl, z.B. 0.12345.
Reject | Hiermit wird eingestellt, ob zur Unterdrückung von Netzbrumm über 50 Hz (20ms) oder 60 Hz (16.67ms) integriert werden soll. <val> ist eine Integerzahl, entweder 50 oder 60.

Konfigurationsbeispiel der TYP110-Slotkarte:

MODULE 110 { Port 0 { Name "Spannung";
                      Gain 10.76194576;
                      Offset 0.00147000;
                      Reject 50; };
             Port 1 { Name "Strom";
                      Gain 10.74436995;
                      Offset 0.00190000;
                      Reject 60; };
           } Slot 0;

weiter zur Slotkarte TYP120


Controller S320 Handbuch - Slotkarte Typ120

 2.6 TYP120: 4 x Analogeingang

Die Slotkarte TYP120 enthält vier voneinander unabhängige analoge Eingänge mit schnellen AD-Wandlern.

Die Auflösung der Wandler beträgt 12 bit, die Wandlungszeit ca. 15 µs. Die vier analogen Eingänge sind massebezogen, sehr hochohmig und arbeiten ausschließlich im Bereich 0..10 Volt.

Die Karte ist vorwiegend für den besonderen VA-Mode des Controller S320 vorgesehen, kann aber auch für allgemeine Aufgaben eingesetzt werden. Es ist hierbei zu beachten, daß die Eingänge auf maximale Geschwindigkeit mit einer Genauigkeit von < 1 Prozent ausgelegt sind.

Analoger Eingang: Massebezogener, sehr hochohmiger Eingang im Bereich 0 bis 10 Volt. Die Eingangskanäle liegen auf den Pins 1, 3, 5 und 7. Die zugehörigen Masseanschlüsse liegen auf den Pins 2, 4, 6 und 8. Auf Grund der hohen Eingangsimpedanz und internen Schutzdioden 'driften' unbeschaltete Eingänge in Richtung 10 Volt. Dieser Effekt kann durch externe Eingangwiderstände von z.B. 100K beseitigt werden. Die Einstellung einer Geberspeisung ist bei der TYP120-Slotkarte nicht möglich.

Konfigurationsmöglichkeiten der TYP120-Slotkarte:

Syntax: | Port <val> {Name "<val>"; Gain <val>; Offset <val>;};
Port | <val> ist die Kanalnummer für Port 0 oder 1, eine Integerzahl.
Name | <val> ist der Name des Ports, z.B. "Spannung", "Druck" usw.
Gain | <val> ist eine Fließpunktzahl, z.B. 10.12345.
Offset | <val> ist eine Fließpunktzahl, z.B. 0.12345.

Konfigurationsbeispiel der TYP120-Slotkarte:

MODULE 120 { Port 0 { Name "AI0";
                      Gain 10.0;
                      Offset 0.0; };
             Port 1 { Name "AI1";
                      Gain 10.0;
                      Offset 0.0; };
             Port 2 { Name "AI2";
                      Gain 10.0;
                      Offset 0.0; };
             Port 3 { Name "AI3";
                      Gain 10.0;
                      Offset 0.0; };
           } Slot 0;

weiter zur Slotkarte TYP200


Controller S320 Handbuch - Slotkarte Typ200

 2.7 TYP200: 2 x Analogausgang

Die Slotkarte TYP200 enthält zwei voneinander unabhängige analoge Ausgänge mit präzisen AD-Wandlern nach dem Sigma-Delta-Verfahren.

Die TYP200-Karte ist die Standardwahl zur Ausgabe analoger Signale. Die Wandler arbeiten mit einer Auflösung von 16 bit. Die Wandlungszeit beträgt ca. 3 ms.

Der Ausgang läßt sich auf übliche Spannungen oder Ströme einstellen.

Ausgang: Analoger Ausgang je nach Schalterstellung SWx. Spannungsausgang: Analogausgang an Anschluß 2 bezogen auf GND an Pin 3. Stromausgang: Stromquelle an Anschluß 2 mit 24 Volt Speisung.

Ausgang | SWx1 | SWx2 | SWx3 | SWx4 | SWx5 | SWx6 | SWx7 | SWx8
0 .. +1 V | ON | ON | OFF | ON | ON | ON | OFF | ON
-1 .. +1 V | ON | ON | OFF | ON | OFF | ON | OFF | OFF
0 .. +2 V | ON | ON | OFF | ON | OFF | ON | OFF | ON
-2 .. +2 V | ON | ON | OFF | ON | OFF | OFF | OFF | OFF
0 .. +2,5 V | ON | ON | OFF | ON | ON | ON | ON | ON
-2.5 .. +2.5 V | ON | ON | OFF | ON | OFF | ON | ON | OFF
0 .. +4 V | ON | ON | OFF | ON | OFF | OFF | OFF | ON
-0 .. +5 V | ON | ON | OFF | ON | OFF | ON | ON | ON
0 .. +10 V | ON | ON | OFF | ON | OFF | OFF | ON | ON
0 .. 20 mA | OFF | ON | ON | OFF | OFF | ON | OFF | ON
4 .. 20 mA | ON | OFF | ON | OFF | ON | ON | ON | ON
0 .. 24 mA | OFF | OFF | ON | OFF | ON | ON | ON | ON

HINWEIS: Schalter SWx3 und SWx4 dürfen nicht gleichzeitig auf ON gestellt werden !

Der genaue Abgleich des Ausgangs erfolgt über die Parameter GAIN und OFFSET in der Konfigurationsdatei. Die Slotkarten sind so konzipiert, daß der Ausgangsbereich den angegebenen Wert 'überdeckt'. Beispielsweise liefert der Analogausgang bei Einstellung 0 .. +10V einen Bereich von ca. -0.25V .. 10.25 V (bei Offset = 0.0 und Gain = 1.0). Die Richtwerte von Gain und Offset (ohne Berücksichtigung dieser 'Überdeckung') können der folgenden Tabelle entnommen werden:

Ausgangssignal |  | normiert unipolar 0..+1 |  | normiert bipolar: -1..+1 |  | Wert wie Ausgangssignal
 |  | Gain | Offset | Gain | Offset | Gain | Offset
0 .. +1 | Volt | 0,50 | 1,00 |  |  | 0,50 | 1,00
-1 .. +1 | Volt |  |  | 1,00 | 0,00 | 1,00 | 0,00
0 .. +2 | Volt | 0,50 | 1,00 | 0,00 | 0,00 | 1,00 | 1,00
-2 .. +2 | Volt |  |  | 1,00 | 0,00 | 2,00 | 0,00
0 .. +2,5 | Volt | 0,50 | 1,00 | 0,00 | 0,00 | 1,25 | 1,00
-2,5 .. +2,5 | Volt |  |  | 1,00 | 0,00 | 2,50 | 0,00
0 .. +4 | Volt | 0,50 | 1,00 |  |  | 2,00 | 1,00
0 .. +5 | Volt | 0,50 | 1,00 |  |  | 2,50 | 1,00
0 .. +10 | Volt | 0,50 | 1,00 |  |  | 5,00 | 1,00
0 .. +20 | mA | 0,50 | 1,00 |  |  | 10,00 | 1,00
4 .. +20 | mA | 0,50 | 1,00 |  |  | 8,00 | 1,50
0 .. +24 | mA | 0,50 | 1,00 |  |  | 12,00 | 1,00

Geberspeisung Ausgang: Am Anschluß 1 (SUP) läßt sich mit SPx = ON eine Geberspeisung von 24 V mit einer Belastbarkeit von ca. 25 mA für jeden Port getrennt anlegen. (Die 24 Volt Versorgung ist im Gerät insgesamt mit ca. 200 mA belastbar. Falls sichergestellt ist, daß dieser Gesamtstrom nicht überschritten wird, kann über eine einzelne Slotkarte auch ein etwas höherer Strom entnommen werden.)

Konfigurationsmöglichkeiten der TYP200-Slotkarte:

Syntax: | Port <val> {Name "<val>"; Gain <val>; Offset <val>;};
Port | <val> ist die Kanalnummer für Port 0 oder 1, eine Integerzahl.
Name | <val> ist der Name des Ports, z.B. "Spannung", "Druck" usw.
Gain | <val> ist eine Fließpunktzahl, z.B. 0.54321.
Offset | <val> ist eine Fließpunktzahl, z.B. 0.87654.

Konfigurationsbeispiel der TYP200-Slotkarte:

MODULE 200 { Port 0 { Name "Steuerspannung";
                      Gain 0.548061;
                      Offset 0.888446; };
             Port 1 { Name "Drehzahl";
                      Gain 0.548602;
                      Offset 0.889649; };
           } Slot 0;

weiter zur Slotkarte TYP220


Controller S320 Handbuch - Slotkarte Typ220

 2.8 TYP220: 4 x Analogausgang

Die Slotkarte TYP220 enthält vier voneinander unabhängige analoge Ausgänge mit schnellen DA-Wandlern.

Die Auflösung der Wandler beträgt 12 bit, die Wandlungszeit ca. 15 µs. Die vier analogen Ausgänge sind massebezogen, kurzschlußfest und arbeiten ausschließlich im Bereich 0..10 Volt.

Die Karte ist vorwiegend für den besonderen VA-Mode des Controller S320 vorgesehen, kann aber auch für allgemeine Aufgaben eingesetzt werden. Es ist hierbei zu beachten, daß die Ausgänge auf maximale Geschwindigkeit mit einer Genauigkeit von < 1 Prozent ausgelegt sind.

Analoger Ausgang: Massebezogener Ausgang im Bereich 0 bis 10 Volt. Die Ausgangskanäle liegen auf den Pins 1, 3, 5 und 7. Die zugehörigen Masseanschlüsse liegen auf den Pins 2, 4, 6 und 8. Die Ausgänge sind kurzschlußfest.

Konfigurationsmöglichkeiten der TYP220-Slotkarte:

Syntax: | Port <val> {Name "<val>"; Gain <val>; Offset <val>;};
Port | <val> ist die Kanalnummer für Port 0 oder 1, eine Integerzahl.
Name | <val> ist der Name des Ports, z.B. "Spannung", "Druck" usw.
Gain | <val> ist eine Fließpunktzahl, z.B. 10.12345.
Offset | <val> ist eine Fließpunktzahl, z.B. 0.12345.

Konfigurationsbeispiel der TYP220-Slotkarte:

MODULE 220 { Port 0 { Name "AO0";
                      Gain 10.0;
                      Offset 0.0; };
             Port 1 { Name "AO1";
                      Gain 10.0;
                      Offset 0.0; };
             Port 2 { Name "AO2";
                      Gain 10.0;
                      Offset 0.0; };
             Port 3 { Name "AO3";
                      Gain 10.0;
                      Offset 0.0; };
            } Slot 0;

weiter zur Slotkarte TYP300


Controller S320 Handbuch - Slotkarte Typ300

 2.9 TYP300: 1 x Analogeingang, 1 x Analogausgang

Die Slotkarte TYP300 enthält einen analogen Eingang und einen analogen Ausgang. Präzise Wandler nach Sigma-Delta-Verfahren, Mischform aus Slotkarte TYP100 und Slotkarte TYP200.

Produkt ist in Vorbereitung.

weiter zur Slotkarte TYP310


Controller S320 Handbuch - Slotkarte Typ310

 2.10 TYP310: 1 x Analogeingang, 1 x Analogausgang

Die Slotkarte TYP310 enthält einen analogen Eingang und einen analogen Ausgang. Flash-Wandler mit 14 bit Auflösung und einer Wandlungszeit von ca. 10µs.

Durch die hohe Wandlungsrate eignet sich die TYP310 Karte insbesondere zur Realisierung von Regelungsaufgaben mit Abtastraten im Bereich weniger Millisekunden.

Die Eingangsstufe des analogen Eingangs wird durch einen Instrumentenverstärker gebildet, dessen Verstärkung über einen Widerstand RG eingestellt werden kann. Der analoge Ausgang liefert übliche Spannungs- und Stromsignale.

Analoger Eingang: Differenzeingang mit einem Gleichtaktbereich von -3 Volt bis +22 Volt bezogen auf GND. Die Vorverstärkung G durch den Instrumentenverstärker INA kann durch den Widerstand RGx nach der Gleichung RGx = 49K4/(G-1) bestimmt werden. Der Wandler arbeitet bipolar im Bereich von -3.0 Volt bis 3.0 Volt. Durch Setzen von SWx8 wird vor dem Wandler eine Spannungsteilung auf 23.25 Prozent erzwungen. Durch Setzen von SWx7 wird parallel zum Eingang ein Widerstand von 47 Ohm zur Strommessung geschaltet.

In der folgenden Tabelle sind die geeigneten Widerstände RGx (es wird immer der nächstgrößere Widerstand der E24 Reihe verwendet) und die Schalterstellungen für SWx7 und SWx8 sowie Richtwerte für Gain und Offset für die Standardeingangssignale aufgeführt. Der genaue Abgleich des Eingangs erfolgt über die Parameter GAIN und OFFSET in der Konfigurationsdatei. Die Angaben für Gain und Offset sind kein Ersatz für eine genaue Kalibrierung. Unvermeidbare Toleranzen bei den Widerständen der Slotkarte werden erst durch die Kalibrierung ausgeglichen.

 |  |  |  |  | normiert unipolar 0..+1 |  | normiert bipolar -1..+1 |  | Wert wie Eingangssignal
Eingangssignal |  | RGx | SWx7 | SWx8 | Gain | Offset | Gain | Offset | Gain | Offset
0 .. +10 | Volt | - | OFF | ON | 1,00 | 0,00 |  |  | 10,00 | 0,00
0 .. +5 | Volt | 47k0 | OFF | ON | 1,00 | 0,00 |  |  | 5,00 | 0,00
-2 .. +2 | Volt | 240k | OFF | OFF |  |  | 1,00 | 0,00 | 2,00 | 0,00
-1 .. +1 | Volt | 36k0 | OFF | OFF |  |  | 1,00 | 0,00 | 1,00 | 0,00
-500 .. +500 | mV | 13k0 | OFF | OFF |  |  | 1,00 | 0,00 | 0,50 | 0,00
-200 .. +200 | mV | 4k70 | OFF | OFF |  |  | 1,00 | 0,00 | 0,20 | 0,00
-100 .. +100 | mV | 2k20 | OFF | OFF |  |  | 1,00 | 0,00 | 0,10 | 0,00
0 .. +20 | mA | 33k0 | ON | OFF | 1,00 | 0,00 |  |  | 20,00 | 0,00
4 .. +20 | mA | 33k0 | ON | OFF | 1,25 | -0,20 |  |  | 20,00 | 0,00

Geberspeisung Eingang: Die am Anschluß SUP anliegende Geberspeisung läßt sich nach folgender Tabelle einstellen und mit dem Trimmer PSUP feinabgleichen:

Speisung | SWx1 | SWx2 | SWx3 | SWx4 | SWx5 | SWx6 | Belastbarkeit | PSUP
keine | OFF | OFF | OFF | OFF | OFF | OFF |  |
5 Volt | OFF | ON | ON | ON | OFF | OFF | ca. 15 mA | ja
10 Volt | OFF | ON | ON | OFF | OFF | ON | ca. 15 mA | ja
15 Volt | OFF | ON | ON | OFF | ON | ON | ca. 15 mA | ja
24 Volt | ON | OFF | OFF | OFF | OFF | OFF | ca. 25 mA 1 | nein
1 mA | OFF | ON | OFF | ON | OFF | ON | 1 mA | ja

1: Die 24 Volt Versorgung ist im Gerät insgesamt mit ca. 200 mA belastbar. Falls sichergestellt ist, daß dieser Gesamtstrom nicht überschritten wird, kann über eine einzelne Slotkarte auch ein etwas höherer Strom entnommen werden.

HINWEIS: Schalter SWx1 und SWx2 dürfen nicht gleichzeitig auf ON gestellt werden!

Analoger Ausgang: Der analoge Ausgang liefert wahlweise Spannungen oder Ströme, die wie folgt eingestellt werden können:

Ausgang | SWx1 | SWx2 | SWx3 | SWx4 | SWx5 | SWx6 | SWx7 | SWx8
0 .. +1 V | sup | OFF | OFF | ON | ON | ON | OFF | ON
-1 .. +1 V | sup | OFF | OFF | ON | OFF | ON | OFF | OFF
0 .. +2 V | sup | OFF | OFF | ON | OFF | ON | OFF | ON
-2 .. +2 V | sup | OFF | OFF | ON | OFF | OFF | OFF | OFF
0 .. +2,5 V | sup | OFF | OFF | ON | ON | ON | ON | ON
-2.5 .. +2.5 V | sup | OFF | OFF | ON | OFF | ON | ON | OFF
0 .. +4 V | sup | OFF | OFF | ON | OFF | OFF | OFF | ON
0 .. +5 V | sup | OFF | OFF | ON | OFF | ON | ON | ON
0 .. +10 V | sup | OFF | OFF | ON | OFF | OFF | ON | ON
4 .. 20 mA | sup | ON | ON | OFF | OFF | ON | OFF | ON
0 .. 20 mA | sup | ON | OFF | OFF | ON | ON | ON | ON

Der genaue Abgleich des Ausgangs erfolgt über die Parameter GAIN und OFFSET in der Konfigurationsdatei. Die Slotkarten sind so konzipiert, daß der Ausgangsbereich den angegebenen Wert 'überdeckt'. Beispielsweise liefert der Analogausgang bei Einstellung 0 .. +10V einen Bereich von ca. -0.25V .. 10.25 V (bei Offset = 0.0 und Gain = 1.0). Die Richtwerte von Gain und Offset (ohne Berücksichtigung dieser 'Überdeckung') können der folgenden Tabelle entnommen werden:

Ausgangssignal |  | normiert unipolar 0..+1 |  | normiert bipolar: -1..+1 |  | Wert wie Ausgangssignal
 |  | Gain | Offset | Gain | Offset | Gain | Offset
0 .. +1 | Volt | 0,50 | 1,00 |  |  | 0,50 | 1,00
-1 .. +1 | Volt |  |  | 1,00 | 0,00 | 1,00 | 0,00
0 .. +2 | Volt | 0,50 | 1,00 | 1,00 | 0,00 | 1,00 | 1,00
-2 .. +2 | Volt |  |  | 1,00 | 0,00 | 2,00 | 0,00
0 .. +2,5 | Volt | 0,50 | 1,00 | 1,00 | 0,00 | 1,25 | 1,00
-2,5 .. +2,5 | Volt |  |  | 1,00 | 0,00 | 2,50 | 0,00
0 .. +4 | Volt | 0,50 | 1,00 |  |  | 2,00 | 1,00
0 .. +5 | Volt | 0,50 | 1,00 |  |  | 2,50 | 1,00
0 .. +10 | Volt | 0,50 | 1,00 |  |  | 5,00 | 1,00
0 .. +20 | mA | 0,50 | 1,00 |  |  | 10,00 | 1,00
4 .. +20 | mA | 0,50 | 1,00 |  |  | 8,00 | 1,50

Geberspeisung Ausgang: Am Anschluß SUP läßt sich mit SWx1 = ON eine Geberspeisung von 24 V mit einer Belastbarkeit von ca. 25 mA anlegen. (Die 24 Volt Versorgung ist im Gerät insgesamt mit ca. 200 mA belastbar. Falls sichergestellt ist, daß dieser Gesamtstrom nicht überschritten wird, kann über eine einzelne Slotkarte auch ein etwas höherer Strom entnommen werden.)

Konfigurationsmöglichkeiten der TYP310-Slotkarte:

Syntax: | Port <val> {Name "<val>"; Gain <val>; Offset <val>;};
Port | <val> ist die Kanalnummer für Port 0 oder 1, eine Integerzahl. Port 0 ist der analoge Eingang, Port 1 ist der analoge Ausgang.
Name | <val> ist der Name des Ports, z.B. "Spannung", "Druck" usw.
Gain | <val> ist eine Fließpunktzahl, z.B. 10.12345.
Offset | <val> ist eine Fließpunktzahl, z.B. 0.12345.

Konfigurationsbeispiel der TYP310-Slotkarte:

MODULE 310 { Port 0 { Name "Spannung";
                      Gain 10.76194576;
                      Offset 0.00147000; };
             Port 1 { Name "Strom";
                      Gain 10.74436995;
                      Offset 0.00190000; };
           } Slot 0;

weiter zur Slotkarte TYP400


Controller S320 Handbuch - Slotkarte Typ400

 2.11 TYP400: Erweiterung digitale Ein- und Ausgänge

Die Slotkarte TYP400 erweitert den Controller S320 um digitale Eingänge und digitale Ausgänge. Die Schaltstufen sind z.B. auf einem Hutschienenmodul zur Montage im Schaltschrank untergebracht. Die Verbindung zur Slotkarte TYP400 erfolgt über eine in den Modulen galvanisch getrennte Zweidrahtleitung. Die Slotkarte TYP400 ist busfähig, d.h. es können mehrere E/A-Module an einer Karte angeschlossen werden.

Erweiterungsmodule:

Kanäle | 16xDE | 8xDE | 16xDA | 8xDA | 8xDE / 8xDA
Erweiterungsmodul | MOD410 MOD412 | MOD414 | MOD420 MOD422 | MOD424 | MOD430 MOD432

Medium:

Die Verbindung zwischen Slotkarte und Modulen erfolgt über eine geschirmte, vorzugsweise verdrillte Zweidrahtleitung. Die Gesamtlänge des Bussegmentes kann je nach Kabeltyp bis zu 1000 Meter betragen. Die Datenübertragung erfolgt hardwareseitig über RS485 Schnittstellen. Eigene Microcontroller in den Modulen und auf der Buskarte wickeln das Softwareprotokoll für den Anwender völlig transparent ab.

Anschluß:

Der Anschluss erfolgt über die vierpoligen Schraub-Steckklemme. Der Anschluß A liegt auf Klemme 2, B liegt auf Klemme 3 und GND liegt auf Klemme 4. Am Anschluß 1 wird die Versorgungsspannung von 5 Volt (VCC) über einen 100 Ohm Widerstand zur Terminierung zur Verfügung gestellt.

Der auf älteren Karten noch vorhandene 3,5 mm Stereo-Klinkenstecker wird nicht mehr unterstützt.

Schirmung, Potentialausgleich

Der Schirm ist (mindestens) an einer Stelle des gesamten Segmentes auf GND bzw. Schutzleiterpotential zu legen. Desweiteren ist für einen einwandfreien Potentialausgleich zwischen Controller S320 und den Modulen zu sorgen.

Terminierung:

Der komplette Bus ist an jedem Ende nach folgendem Schema zu terminieren:

Die Terminierung erfolgt zweckmäßigerweise an der vierpoligen Schraub-Steckklemme, da hier das VCC-Signal zur Verfügung steht. Die Widerstände zur Terminierung liegen jedem Modul bzw. Slotkarte bei und sind wie üblich folgendermaßen farblich gekennzeichnet:

270 Ohm: | rot-violett-schwarz-schwarz-braun
120 Ohm: | braun-rot-schwarz-schwarz-braun
390 Ohm: | orange-weiß-schwarz-schwarz-braun

Organisation:

Jede Slotkarte vom TYP400 erlaubt den Anschluß von theoretisch 256 digitalen Eingängen und 256 digitalen Ausgängen über den Bus. Für den Spell-Programmierer sind diese Ports völlig transparent, d.h. die Ein- und Ausgänge werden wie die im Controller S320 selbst vorhandenen Ports durch die Funktion DigitalIn bzw. DigitalOut angesprochen. Es ist im Einzelfall lediglich darauf zu achten, daß die Zustände der Ports durch die Übertragung erst mit einer Verzögerung von einigen Millisekunden vom Programm aus verfügbar sind.

Die Slotkarte TYP400 unterstützt bis zu 8 Module mit bis zu jeweils 32 bit DE und 32 bit DA, wobei die Anzahl der von der Hardware realisierten Ports vom Typ des Erweiterungsmoduls abhängt. Die Moduladressen können durch entsprechende Codierschalter an den Erweiterungsmodulen eingestellt werden.

Die einzelnen Ports auf den Erweiterungsmodulen sind durch Subadressen byte-weise organisiert. So existieren für jedes Erweiterungsmodul 8 Subadressen, die jeweils 8 bit repräsentieren. Hierbei stehen die geraden Subadressen für Eingänge und die ungeraden Subadressen für Ausgänge. Die Subadressen sind in den Modulen fest verdrahtet und können vom Anwender nicht verändert werden.

Übersicht Organisation Slotkarte TYP400 Busmodul:

Adr | Sub 0 | Sub 1 | Sub 2 | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7
Modul 0 | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA
Modul 1 | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA
Modul 2 | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA
Modul 3 | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA
Modul 4 | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA
Modul 5 | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA
Modul 6 | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA
Modul 7 | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA | 8xDE | 8xDA

Beispiel:MOD410 MOD 420 MOD430

Beispiel Typ MOD430 an Slotkarte TYP400:

Das Erweiterungsmodul MOD430 verfügt über 8 digitale Eingänge (DE) und 8 digitale Ausgänge (DA). Es ist an einer Slotkarte TYP400 auf Slot 0 angeschlossen und mit dem Codierschalter als Modul mit Adresse 4 definiert. Die Subadressen Sub 0 und Sub 1 sind im Modul MOD430 fest verdrahtet.

In der Konfigurationsdatei wird MOD430 wie folgt eingetragen:

MODULE 400 {          Ü angeschlossen an Slotkarte Typ400
     Adr 04 {           Ü mit Codierschalter auf Adresse 4 eingestellt
       SubAdr 00 {         Ü 8 digitale Eingänge auf Subadresse 0
         Port 0 {Name "DE00";};   Ü Name des digitalen Eingangs Port 0
         Port 1 {Name "DE01";};
         Port 2 {Name "DE02";};
         Port 3 {Name "DE03";};
         Port 4 {Name "DE04";};
         Port 5 {Name "DE05";};
        Port 6 {Name "DE06";};
         Port 7 {Name "DE07";};
       };
       SubAdr 01 {         Ü 8 digitale Ausgänge auf Subadresse 1
         Port 0 {Name "DA00";};   Ü Name des digitalen Ausgangs Port 0
         Port 1 {Name "DA01";};
         Port 2 {Name "DA02";};
         Port 3 {Name "DA03";};
         Port 4 {Name "DA04";};
         Port 5 {Name "DA05";};
         Port 6 {Name "DA06";};
         Port 7 {Name "DA07";};
       };
     };
} SLOT 0;           Ü Slotkarte Typ400 auf Steckplatz Slot 0

Programmierung der TYP400-Slotkarte:

Soweit die an der TYP400-Slotkarte angeschlossenen Module beim Start und anschließendem Selbsttest des Controllers S320 mit Strom versorgt sind, eine Unterbrechung oder Störung der Busverbindung unwahrscheinlich ist und ein regelmäßiger Update der externen Ports durchgeführt wird, kann bei der Programmierung in der Regel auf eine besondere Fehlerbehandlung verzichtet werden.

In bestimmten Situationen kann es jedoch auf Grund der Zweidraht-Übertragung zu den Busmodulen der 400-Reihe zu Fehlersituationen kommen, die bei der Programmierung berücksichtigt werden können.

Die Slotkarte TYP400 und die angeschlossenen Busmodule kommunizieren kontinuierlich durch Austausch von Datenpaketen. Hierbei werden die Informationen der digitalen Eingänge der Busmodule ständig zur Slotkarte TYP400 übertragen und dort bis zu einem eventuellen Lesezugriff mittels DigitalIn zwischengespeichert. Digitale Ausgänge werden übertragen, sobald das Spell-Programm den Status eines Ausgangs mittels DigitalOut ändert.

Beim Programmstart stellt die Slotkarte TYP400 durch einen 'ModuleScan' fest, welche Module zu diesem Zeitpunkt angeschlossen sind. Das Ergebnis kann aus mehreren Gründen von der in der Konfigurationsdatei festgelegten Belegung abweichen.

Um unter Spell auf Fehlersituationen beim externen Bus reagieren zu können, sind drei verschiedene Mechanismen implementiert:

1. Signal SigHWFailure: Dieses Signal wird ausgelöst, wann immer ein Fehler bei der Übertragung von oder zum Modul aufgetreten ist. Das Signal wird bei jedem Zugriff auf ein zu diesem Zeitpunkt nicht verfügbares Modul auftreten oder aber auch sporadisch bei Datenübertragungsfehlern infolge Störungen der Busverbindung. Es ist zu beachten, daß dieses Signal innerhalb des Hauptprogrammes unmittelbar nach DigitalIn oder DigitalOut auftritt und Ergebnisse der Fehlersignalbehandlung innerhalb des Hauptprogrammes auch sofort ausgewertet werden können. Wird DigitalIn oder DigitalOut jedoch innerhalb eines Signales aufgerufen, kommt das Signal SigHWFailure erst nach Abschluß des aufrufenden Signales zum Zuge, ein eventuelles Ergebnis aus der Fehlersignalbehandlung steht daher innerhalb des aufrufenden Signales noch nicht zur Verfügung.

2. Funktion GetHardwareError: Mit dieser Funktion kann nach oder innerhalb eines SigHWFailure festgestellt werden, welches Modul bzw. welcher Port den Fehler verursacht hat.

3. Funktion ModuleInit: Diese Funktion ermöglicht das Reinitialisieren einer bestimmten Slotkarte. Bei der TYP400-Slotkarte wird dadurch ein erneuter ModuleScan ausgelöst, so daß mittlerweile eventuell wieder verfügbare Module mit in den Bustransfer aufgenommen werden können.

Im praktischen Betrieb sind eine Reihe von Fehlersituationen möglich, auf die im folgenden kurz eingegangen werden soll:

1. Module sind nicht richtig konfiguriert

Häufig sind Fehlermeldungen bei der Inbetriebnahme auf eine falsche Konfiguration der Busmodule zurückzuführen. Es ist insbesondere sicherzustellen, daß die an den Codierschaltern eingestellten Moduladressen mit denen der Konfigurationsdatei übereinstimmen. Insbesondere dürfen Moduladressen nicht mehrfach zugeordnet werden.

2. Modul wird nicht versorgt oder Busverbindung unterbrochen

Ein externes Modul ist zum Beispiel im Schaltschrank eines Druckluftkompressors installiert und wird dort lokal versorgt. Der Druckluftkompressor ist jedoch komplett abgeschaltet. Eine ähnliche Situation liegt vor, falls die Verbindung zum Modul unterbrochen ist. Beim Start des Controllers S320 kann das Modul in diesem Fall nicht erkannt werden, jeder Zugriff auf dieses Modul wird einen Fehler auslösen. Durch die zuvor beschriebenen Mechanismen kann das Spellprogramm die Fehlersituation erkennen und weitere Zugriffe auf dieses Modul vermeiden. Die Einbindung eines (nach Herstellung der Verbindung oder Einschalten des Kompressors) wieder verfügbaren Modules kann durch die Funktion ModuleInit erreicht werden.

3. Sporadische Störung der Busverbindung

Durch externe Einflüsse auf die Busverbindung kann der Datentransfer zwischen Slotkarte TYP400 und den Modulen gestört werden. Durch das Signal SigHWFailure lassen sich solche Störungen erkennen. Der Bustransfer läuft nach der Störung unverändert weiter, besondere Maßnahmen sind in der Regel nicht notwendig. Eventuell ist es sinnvoll, Befehle zum Setzen digitaler Ausgänge in einem solchen Fall zu wiederholen. Sporadische Störungen der Busverbindung sind bei ordnungsgemäßer Installation und Terminierung äußerst selten.

4. Fehlende oder falsche Terminierung

Fehlende oder falsche Terminierung führt zwangsläufig zu Fehlern bei der Datenübertragung bis hin zum völligen Abbruch der Kommunikation auf dem Bus. Sporadische, unzusammenhängende oder 'unerklärliche' Fehler sind häufig ein Indiz für fehlerhafte Terminierung.

weiter zum Modul MOD410

weiter zur Slotkarte TYP500


Controller S320 Handbuch - Slotkarte Typ400

 2.11.1 Erweiterungsmodul MOD410 16xDE
Nicht mehr lieferbar

Modul mit 16 digitalen Eingängen, 24 Volt plusschaltend. Hutschienenmontage.

Adr | Sub 0 | Sub 1 | Sub 2 | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7
Codierschalter 0..7 | 8xDE |  | 8xDE |  |  |  |  |

Das Erweiterungsmodul MOD410 benötigt auf der Hutschiene eine Baubreite von ca. 35 mm. Es wird mit einer Steuerspannung von 24 Volt versorgt und nimmt ohne Last einen Strom von ca. 150 mA auf. Die Eingänge sind über Schraubklemmen anzuschließen. Für den Busanschluß verfügt das Modul frontseitig über zwei Klinkenbuchsen 3,5 mm und eine vierpolige Schraub-Steckklemme. Der Status der Eingänge wird über Leuchtdioden angezeigt. Über einen rückwärtigen Codierschalter kann die Adresse von 0 bis 7 eingestellt werden. Die Buslogik ist von der 24V Versogungsspannung galvanisch getrennt und erhält ihren Potentialbezug über das Buskabel.

Erweiterungsmodul MOD410
Sub 2:

31: DE Port 0
32: DE Port 1
33: DE Port 2
34: DE Port 3
11: DE Port 4
12: DE Port 5
13: DE Port 6
14: DE Port 7

Sub 0:

21: DE Port 0
22: DE Port 1
23: DE Port 2
24: DE Port 3
41: DE Port 4
42: DE Port 5
43: DE Port 6
44: DE Port 7

15 und 35: Versorgung 24 V

25 und 45: Versorgung 0 V

HINWEIS: Der 0V-Anschluß der Versorgungsspannung ist extern mit Schutzleiterpotential zu verbinden.

Die digitalen Eingänge nehmen einen Strom von ca. 5 mA auf.

Konfigurationsmöglichkeiten des Erweiterungsmoduls MOD410

Syntax: | Adr <val> {SubAdr <val> {Port <val> {Name "<val>";};};};
Adr | <val> ist eine Integerzahl und entspricht der am Codierschalter eingestellten Adresse von 0 bis 7.
SubAdr | <val> ist eine Integerzahl und ist 0 bzw. 2 für die jeweils 8 Eingänge.
Port | <val> ist die Kanalnummer für Port 0 bis 7 für die jeweils 8 Eingänge.
Name | <val> ist der Name des Ports.

Konfigurationsbeispiel des Modul MOD410:

MODULE 400 {
     Adr 04 {
       SubAdr 00 {
         Port 0 {Name "DE40000";};
         Port 1 {Name "DE40001";};
         Port 2 {Name "DE40002";};
         Port 3 {Name "DE40003";};
         Port 4 {Name "DE40004";};
         Port 5 {Name "DE40005";};
         Port 6 {Name "DE40006";};
         Port 7 {Name "DE40007";};
       };
       SubAdr 02 {
         Port 0 {Name "DE40200";};
         Port 1 {Name "DE40201";};
         Port 2 {Name "DE40202";};
         Port 3 {Name "DE40203";};
         Port 4 {Name "DE40204";};
         Port 5 {Name "DE40205";};
         Port 6 {Name "DE40206";};
         Port 7 {Name "DE40207";};
       };
     };
} SLOT 0;

weiter zum Modul MOD412


Controller S320 Handbuch - Slotkarte Typ400

 2.11.2 Erweiterungsmodul MOD412 16xDE

Modul mit 16 digitalen Eingängen, 24 Volt plusschaltend. 19" Montage. Abmessungen: 3 HE x 7 TE x 70 mm.

Adr | Sub 0 | Sub 1 | Sub 2 | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7
Codierschalter 0..7 | 8xDE |  | 8xDE |  |  |  |  |

Das Modul benötigt eine interne Versorgungsspannung von 24 Volt und nimmt ohne Last einen Strom von ca.150 mA auf.

Über den Codierschalter kann die Adresse des Moduls von 0 - 7 eingestellt werden.

Der Bus wird über eine 4 vierpolige Schraub-Steckklemme angeschlossen. Über den Schalter "Term" kann der Bus terminiert werden. Die Terminierung ist atkiv wenn beide Schalter auf "On" und inaktiv wenn beide Schalter auf "Off" stehen. stehen. Bitte beachten Sie, daß nur beim jeweils letzten Modul das an den Bus angeschlossen ist, die Terminierung aktiviert ist.
Die Buslogik ist von der 24V Versorgungsspannung galvanisch getrennt und erhält ihren Potentialbezug über das Buskabel.

Die Eingänge werden über eine 10 polige Schraubklemme angeschlossen, an der ggfs. auch die Versorgungsspannung zur Verfügung steht (s. INT/EXT-Schalter). Der Status der Eingänge wird über Leuchtdioden angezeigt.

Die Stromaufnahme eines digitalen Eingängs beträgt ca. 5 mA.

INT/EXT Schalter:

In Stellung INT steht die interne Versorgungsspannung an den Klemmen 24V und 0V zu Verfügung und kann mit max. 500 mA belastet werden..

In Stellung EXT werden die Eingänge mit einer Spannung von 24V bezogen auf den Anschluss 0V angesteuert. Zwischen der internen Versorgungsspannung und der Ansteuerungspannung besteht keine galvanische Kopplung.

Konfigurationsmöglichkeiten des Erweiterungsmoduls MOD412

Syntax: | Adr <val> {SubAdr <val> {Port <val> {Name "<val>";};};};
Adr | <val> ist eine Integerzahl und entspricht der am Codierschalter eingestellten Adresse von 0 bis 7.
SubAdr | <val> ist eine Integerzahl und ist 0 bzw. 2 für die jeweils 8 Eingänge.
Port | <val> ist die Kanalnummer für Port 0 bis 7 für die jeweils 8 Eingänge.
Name | <val> ist der Name des Ports.

Konfigurationsbeispiel des Modul MOD412:

MODULE 400 {
     Adr 04 {
       SubAdr 00 {
         Port 0 {Name "DE40000";};
         Port 1 {Name "DE40001";};
         Port 2 {Name "DE40002";};
         Port 3 {Name "DE40003";};
         Port 4 {Name "DE40004";};
         Port 5 {Name "DE40005";};
         Port 6 {Name "DE40006";};
         Port 7 {Name "DE40007";};
       };
       SubAdr 02 {
         Port 0 {Name "DE40200";};
         Port 1 {Name "DE40201";};
         Port 2 {Name "DE40202";};
         Port 3 {Name "DE40203";};
         Port 4 {Name "DE40204";};
         Port 5 {Name "DE40205";};
         Port 6 {Name "DE40206";};
         Port 7 {Name "DE40207";};
       };
     };
} SLOT 0;

weiter zum Modul MOD414


Controller S320 Handbuch - Slotkarte Typ400

 2.11.3 Erweiterungsmodul MOD414 8xDE

Modul mit 8 digitalen Eingängen, 24 Volt plusschaltend. Hutschienenmontage.

Adr | Sub 0 | Sub 1 | Sub 2 | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7
Codierschalter 0..7 | 8xDE |  |  |  |  |  |  |

Über den Codierschalter kann die Adresse des Moduls von 0 - 7 eingestellt werden.

Das Modul benötigt eine interne Versorgungsspannung von 24 Volt (24V_LOG) und nimmt ohne Last einen Strom von ca.150 mA auf. Die interne Versorgung wird, wie der RS485-Bus, über eine 5 polige Schraub-Steckklemme angeschlossen. Die Buslogik ist von der 24V Versorgungsspannung galvanisch getrennt und erhält ihren Potentialbezug über das Buskabel.
Alternativ kann der Anschluss auch über die Steckverbinder die sich in der Hutschiene befinden angeschlossen werden. Beim Einsatz mehrerer Module entfällt damit zusätzlicher Verdrahtungsaufwand.

Über den Schalter "Term" kann der Bus terminiert werden. Die Terminierung ist atkiv wenn beide Schalter auf "On" und inaktiv wenn beide Schalter auf "Off" stehen. Bitte beachten Sie, daß nur beim jeweils letzten Modul das an den Bus angeschlossen ist, die Terminierung aktiviert ist.

Die Eingänge werden über zwei 4 polige Schraubklemmen angeschlossen, die sich an der Unterseite des Moduls befinden. Die Stromaufnahme eines digitalen Eingängs beträgt ca. 5 mA.

Die 24V Steuerspannung (24V_PWR) wird an der Schraubklemme an der Oberseite des Moduls angeschlossen. Zum einfachen Durchschleifen der Steuerspannung auf mehrere Module sind auf dieser Schraubklemme die Kontakte für 0V und +24V jeweils doppelt ausgeführt.

Zwischen der internen Versorgungsspannung und der Steuerungspannung besteht keine galvanische Kopplung.

Der Status der Eingänge sowie der Versorgungsspannungen wird über Leuchtdioden angezeigt.

Konfigurationsmöglichkeiten des Erweiterungsmoduls MOD414

Syntax: | Adr <val> {SubAdr <val> {Port <val> {Name "<val>";};};};
Adr | <val> ist eine Integerzahl und entspricht der am Codierschalter eingestellten Adresse von 0 bis 7.
SubAdr | <val> ist eine Integerzahl und ist hier 0.
Port | <val> ist die Kanalnummer für Port 0 bis 7 für die jeweils 8 Eingänge.
Name | <val> ist der Name des Ports.

Konfigurationsbeispiel des Modul MOD414:

MODULE 400 {
     Adr 04 {
       SubAdr 00 {
         Port 0 {Name "DE40000";};
         Port 1 {Name "DE40001";};
         Port 2 {Name "DE40002";};
         Port 3 {Name "DE40003";};
         Port 4 {Name "DE40004";};
         Port 5 {Name "DE40005";};
         Port 6 {Name "DE40006";};
         Port 7 {Name "DE40007";};
       };
    };
} SLOT 0;

weiter zum Modul MOD420


Controller S320 Handbuch - Slotkarte Typ400

 2.11.4 Erweiterungsmodul MOD420 16xDA
Nicht mehr lieferbar

Modul mit 16 digitalen Ausgängen, 24 Volt plusschaltend. Hutschienenmontage.

Adr | Sub 0 | Sub 1 | Sub 2 | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7
Codierschalter 0..7 |  | 8xDA |  | 8xDA |  |  |  |

Das Erweiterungsmodul MOD420 benötigt auf der Hutschiene eine Baubreite von ca. 35 mm. Es wird mit einer Steuerspannung von 24 Volt versorgt und nimmt ohne Last einen Strom von ca. 150 mA auf. Die Ausgänge sind über Schraubklemmen anzuschließen. Für den Busanschluß verfügt das Modul frontseitig über zwei Klinkenbuchsen 3,5 mm und eine vierpolige Schraub-Steckklemme. Der Status der Ausgänge wird über Leuchtdioden angezeigt. Über einen rückwärtigen Codierschalter kann die Adresse von 0 bis 7 eingestellt werden. Die Buslogik ist von der 24V Versogungsspannung galvanisch getrennt und erhält ihren Potentialbezug über das Buskabel.

Erweiterungsmodul MOD420
Sub 3:

31: DA Port 0
32: DA Port 1
33: DA Port 2
34: DA Port 3
11: DA Port 4
12: DA Port 5
13: DA Port 6
14: DA Port 7

Sub 1:

21: DA Port 0
22: DA Port 1
23: DA Port 2
24: DA Port 3
41: DA Port 4
42: DA Port 5
43: DA Port 6
44: DA Port 7

15 und 35: Versorgung 24 V

25 und 45: Versorgung 0 V

HINWEIS: Der 0V-Anschluß der Versorgungsspannung ist extern mit Schutzleiterpotential zu verbinden.

Die digitalen Ausgänge sind durch Halbleiterschalter realisiert und schalten die 24 V Versorgung auf die jeweilige Klemme. Die Summe aller Ausgangsströme darf 4 Ampere nicht überschreiten. Jeder Ausgang ist mit 500 mA belastbar, kurzschlußfest, und gegen induktive Lasten bis 5 mJ geschützt. Selbstverständlich ist es immer empfehlenswert, induktive Lasten mit Freilaufdioden oder vergleichbarer Schutzbeschaltung auszurüsten.

Konfigurationsmöglichkeiten des Erweiterungsmoduls MOD420

Syntax: | Adr <val> {SubAdr <val> {Port <val> {Name "<val>";};};};
Adr | <val> ist eine Integerzahl und entspricht der am Codierschalter eingestellten Adresse von 0 bis 7.
SubAdr | <val> ist eine Integerzahl und ist 1 bzw. 3 für die jeweils 8 Ausgänge.
Port | <val> ist die Kanalnummer für Port 0 bis 7 für die jeweils 8 Ausgänge.
Name | <val> ist der Name des Ports.

Konfigurationsbeispiel des Modul MOD420:

MODULE 400 {
     Adr 04 {
       SubAdr 01 {
         Port 0 {Name "DA40100";};
         Port 1 {Name "DA40101";};
         Port 2 {Name "DA40102";};
         Port 3 {Name "DA40103";};
         Port 4 {Name "DA40104";};
         Port 5 {Name "DA40105";};
         Port 6 {Name "DA40106";};
         Port 7 {Name "DA40107";};
       };
       SubAdr 03 {
         Port 0 {Name "DA40300";};
         Port 1 {Name "DA40301";};
         Port 2 {Name "DA40302";};
         Port 3 {Name "DA40303";};
         Port 4 {Name "DA40304";};
         Port 5 {Name "DA40305";};
         Port 6 {Name "DA40306";};
         Port 7 {Name "DA40307";};
       };
     };
} SLOT 0;

weiter zum Modul MOD422


Controller S320 Handbuch - Slotkarte Typ400

 2.11.5 Erweiterungsmodul MOD422 16xDA

Modul mit 16 digitalen Ausgängen, 24 Volt plusschaltend. 19" Montage. Abmessungen: 3 HE x 7 TE x 70 mm.

Adr | Sub 0 | Sub 1 | Sub 2 | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7
Codierschalter 0..7 |  | 8xDA |  | 8xDA |  |  |  |

Das Modul benötigt eine interne Versorgungsspannung von 24 Volt und nimmt ohne Last einen Strom von ca.150 mA auf.

Über den Codierschalter kann die Adresse des Moduls von 0 - 7 eingestellt werden.

Der Bus wird über eine 4 vierpolige Schraub-Steckklemme angeschlossen. Über den Schalter "Term" kann der Bus terminiert werden. Die Terminierung ist atkiv wenn beide Schalter auf "On" stehen. Bitte beachten Sie, daß nur beim letzten Modul das an den Bus angeschlossen ist, die Terminierung aktiviert ist.
Die Buslogik ist von der 24V Versorgungsspannung galvanisch getrennt und erhält ihren Potentialbezug über das Buskabel.

Die Ausgänge werden über eine 10 polige Schraubklemme angeschlossen.Der Status der Ausgänge wird über Leuchtdioden angezeigt.

Die digitalen Ausgänge sind durch Halbleiterschalter realisiert und schalten die 24V Versorgung (s. INT/EXT Schalter) auf die jeweilige Klemme. Jeder Ausgang ist mit 500 mA belastbar, kurzschlußfest, und gegen induktive Lasten bis 5 mJ geschützt. Selbstverständlich ist es immer empfehlenswert, induktive Lasten mit Freilaufdioden oder vergleichbarer Schutzbeschaltung auszurüsten.

INT/EXT Schalter:

In Stellung INT werden die Ausgänge über die interne Versorgungsspannung versorgt. Die Klemme 24V ist hier nicht belegt.

In Stellung EXT muss an den Klemmen 24V und 0V eine externe 24V Spannung angeschlossen werden, die dann über die Halbleiterschalter auf die Ausgänge geschaltet wird. Zwischen der internen und externen Spannungsversorgung besteht keine galvanische Koplung.

Konfigurationsmöglichkeiten des Erweiterungsmoduls MOD422

Syntax: | Adr <val> {SubAdr <val> {Port <val> {Name "<val>";};};};
Adr | <val> ist eine Integerzahl und entspricht der am Codierschalter eingestellten Adresse von 0 bis 7.
SubAdr | <val> ist eine Integerzahl und ist 1 bzw. 3 für die jeweils 8 Ausgänge.
Port | <val> ist die Kanalnummer für Port 0 bis 7 für die jeweils 8 Ausgänge.
Name | <val> ist der Name des Ports.

Konfigurationsbeispiel des Modul MOD422:

MODULE 400 {
     Adr 04 {
       SubAdr 01 {
         Port 0 {Name "DA40100";};
         Port 1 {Name "DA40101";};
         Port 2 {Name "DA40102";};
         Port 3 {Name "DA40103";};
         Port 4 {Name "DA40104";};
         Port 5 {Name "DA40105";};
         Port 6 {Name "DA40106";};
         Port 7 {Name "DA40107";};
       };
       SubAdr 03 {
         Port 0 {Name "DA40300";};
         Port 1 {Name "DA40301";};
         Port 2 {Name "DA40302";};
         Port 3 {Name "DA40303";};
         Port 4 {Name "DA40304";};
         Port 5 {Name "DA40305";};
         Port 6 {Name "DA40306";};
         Port 7 {Name "DA40307";};
       };
     };
} SLOT 0;

weiter zum Modul MOD424


Controller S320 Handbuch - Slotkarte Typ400

 2.11.6 Erweiterungs MOD424 8xDA

Modul mit 8 digitalen Ausgängen, 24 Volt plusschaltend. Hutschienenmontage.

Adr | Sub 0 | Sub 1 | Sub 2 | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7
Codierschalter 0..7 |  | 8xDA |  |  |  |  |  |

Über den Codierschalter kann die Adresse des Moduls von 0 - 7 eingestellt werden.

Das Modul benötigt eine interne Versorgungsspannung von 24 Volt (24V_LOG) und nimmt ohne Last einen Strom von ca.150 mA auf. Die interne Versorgung wird, wie der RS485-Bus, über eine 5 polige Schraub-Steckklemme angeschlossen. Die Buslogik ist von der 24V Versorgungsspannung galvanisch getrennt und erhält ihren Potentialbezug über das Buskabel.
Alternativ kann der Anschluss auch über die Steckverbinder die sich in der Hutschiene befinden angeschlossen werden. Beim Einsatz mehrerer Module entfällt damit zusätzlicher Verdrahtungsaufwand.

Über den Schalter "Term" kann der Bus terminiert werden. Die Terminierung ist atkiv wenn beide Schalter auf "On" und inaktiv wenn beide Schalter auf "Off" stehen. Bitte beachten Sie, daß nur beim jeweils letzten Modul das an den Bus angeschlossen ist, die Terminierung aktiviert ist.

Die Ausgänge werden über zwei 4 polige Schraubklemmen angeschlossen, die sich an der Unterseite des Moduls befinden. Die digitalen Ausgänge sind durch Halbleiterschalter realisiert und schalten die 24V Steuerspannung auf die jeweilige Klemme. Jeder Ausgang ist mit 500 mA belastbar, kurzschlußfest, und gegen induktive Lasten bis 5 mJ geschützt. Selbstverständlich ist es immer empfehlenswert, induktive Lasten mit Freilaufdioden oder vergleichbarer Schutzbeschaltung auszurüsten.

Die 24V Steuerspannung (24V_PWR) wird an der Schraubklemme an der Oberseite des Moduls angeschlossen. Zum einfachen Durchschleifen der Steuerspannung auf mehrere Module sind auf dieser Schraubklemme die Kontakte für 0V und +24V jeweils doppelt ausgeführt.

Zwischen der internen Versorgungsspannung und der Steuerungspannung besteht keine galvanische Kopplung.

Der Status der Ausgänge sowie der Versorgungsspannungen wird über Leuchtdioden angezeigt.

Konfigurationsmöglichkeiten des Erweiterungsmoduls MOD424

Syntax: | Adr <val> {SubAdr <val> {Port <val> {Name "<val>";};};};
Adr | <val> ist eine Integerzahl und entspricht der am Codierschalter eingestellten Adresse von 0 bis 7.
SubAdr | <val> ist eine Integerzahl und ist hier 1.
Port | <val> ist die Kanalnummer für Port 0 bis 7 für die jeweils 8 Ausgänge.
Name | <val> ist der Name des Ports.

Konfigurationsbeispiel des Modul MOD424:

MODULE 400 {
     Adr 04 {
       SubAdr 01 {
         Port 0 {Name "DA40100";};
         Port 1 {Name "DA40101";};
         Port 2 {Name "DA40102";};
         Port 3 {Name "DA40103";};
         Port 4 {Name "DA40104";};
         Port 5 {Name "DA40105";};
         Port 6 {Name "DA40106";};
         Port 7 {Name "DA40107";};
       };
     };
} SLOT 0;

weiter zum Modul MOD430


Controller S320 Handbuch - Slotkarte Typ400

 2.11.7 Erweiterungsmodul MOD430 8xDE und 8xDA
Nicht mehr lieferbar

Modul mit 8 digitalen Eingängen und 8 digitalen Ausgängen, 24 Volt plusschaltend. Hutschienenmontage.

Adr | Sub 0 | Sub 1 | Sub 2 | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7
Codierschalter 0..7 | 8xDE | 8xDA |  |  |  |  |  |

Das Erweiterungsmodul MOD430 benötigt auf der Hutschiene eine Baubreite von ca. 35 mm. Es wird mit einer Steuerspannung von 24 Volt versorgt und nimmt ohne Last einen Strom von ca. 150 mA auf. Die Ein- und Ausgänge sind über Schraubklemmen anzuschließen. Für den Busanschluß verfügt das Modul frontseitig über zwei Klinkenbuchsen 3,5 mm und eine vierpolige Schraub-Steckklemme. Der Status der Ein- und Ausgänge wird über Leuchtdioden angezeigt. Über einen rückwärtigen Codierschalter kann die Adresse von 0 bis 7 eingestellt werden. Die Buslogik ist von der 24V Versogungsspannung galvanisch getrennt und erhält ihren Potentialbezug über das Buskabel.

Erweiterungsmodul MOD430
Sub 1:

31: DA Port 0
32: DA Port 1
33: DA Port 2
34: DA Port 3
11: DA Port 4
12: DA Port 5
13: DA Port 6
14: DA Port 7

Sub 0:

21: DE Port 0
22: DE Port 1
23: DE Port 2
24: DE Port 3
41: DE Port 4
42: DE Port 5
43: DE Port 6
44: DE Port 7

15 und 35: Versorgung 24 V

25 und 45: Versorgung 0 V

HINWEIS: Der 0V-Anschluß der Versorgungsspannung ist extern mit Schutzleiterpotential zu verbinden.

Die digitalen Ausgänge sind durch Halbleiterschalter realisiert und schalten die 24 V Versorgung auf die jeweilige Klemme. Jeder Ausgang ist mit 500 mA belastbar, kurzschlußfest und gegen induktive Lasten bis 5 mJ geschützt. Selbstverständlich ist es immer empfehlenswert, induktive Lasten mit Freilaufdioden oder vergleichbarer Schutzbeschaltung auszurüsten.

Die digitalen Eingänge nehmen einen Strom von ca. 5 mA auf.

Konfigurationsmöglichkeiten des Erweiterungsmoduls MOD430

Syntax: | Adr <val> {SubAdr <val> {Port <val> {Name "<val>";};};};
Adr | <val> ist eine Integerzahl und entspricht der am Codierschalter eingestellten Adresse von 0 bis 7.
SubAdr | <val> ist eine Integerzahl und ist 0 für die 8 Eingänge und 1 für die 8 Ausgänge.
Port | <val> ist die Kanalnummer für Port 0 bis 7 für die Ein- bzw. Ausgänge.
Name | <val> ist der Name des Ports.

Konfigurationsbeispiel des Modul MOD430:

MODULE 400 {
     Adr 04 {
       SubAdr 00 {
         Port 0 {Name "DE00";};
         Port 1 {Name "DE01";};
         Port 2 {Name "DE02";};
         Port 3 {Name "DE03";};
         Port 4 {Name "DE04";};
         Port 5 {Name "DE05";};
         Port 6 {Name "DE06";};
         Port 7 {Name "DE07";};
       };
       SubAdr 01 {
         Port 0 {Name "DA00";};
         Port 1 {Name "DA01";};
         Port 2 {Name "DA02";};
         Port 3 {Name "DA03";};
         Port 4 {Name "DA04";};
         Port 5 {Name "DA05";};
         Port 6 {Name "DA06";};
         Port 7 {Name "DA07";};
       };
     };
} SLOT 0;

weiter zum Modul MOD432


Controller S320 Handbuch - Slotkarte Typ400

 2.11.8 Erweiterungsmodul MOD432 8xDE und 8xDA

Modul mit 8 digitalen Eingängen und 8 digitalen Ausgängen, 24 Volt plusschaltend. 19" Montage. Abmessungen: 3 HE x 7 TE x 70 mm.

Adr | Sub 0 | Sub 1 | Sub 2 | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7
Codierschalter 0..7 | 8xDE | 8xDA |  |  |  |  |  |

Das Modul benötigt eine interne Versorgungsspannung von 24 Volt und nimmt ohne Last einen Strom von ca.150 mA auf.

Über den Codierschalter kann die Adresse des Moduls von 0 - 7 eingestellt werden.

Der Bus wird über eine 4 vierpolige Schraub-Steckklemme angeschlossen. Über den Schalter "Term" kann der Bus terminiert werden. Die Terminierung ist atkiv wenn beide Schalter auf "On" stehen. Bitte beachten Sie, daß nur beim letzten Modul das an den Bus angeschlossen ist, die Terminierung aktiviert ist.
Die Buslogik ist von der 24V Versorgungsspannung galvanisch getrennt und erhält ihren Potentialbezug über das Buskabel.

Die Ein- und Ausgänge werden über eine 10 polige Schraubklemme angeschlossen, an der ggfs. auch die Versorgungsspannung zur Verfügung steht (s. INT/EXT Schalter). Der Status der Ein- und Ausgänge wird über Leuchtdioden angezeigt.

Die digitalen Ausgänge sind durch Halbleiterschalter realisiert und schalten die 24V Versorgung (s. INT/EXT Schalter) auf die jeweilige Klemme. Jeder Ausgang ist mit 500 mA belastbar, kurzschlußfest, und gegen induktive Lasten bis 5 mJ geschützt. Selbstverständlich ist es immer empfehlenswert, induktive Lasten mit Freilaufdioden oder vergleichbarer Schutzbeschaltung auszurüsten.

Die Stromaufnahme eines digitalen Eingängs beträgt ca. 5 mA.

INT/EXT Schalter:

In Stellung INT werden die Ausgänge über die interne Versorgungsspannung versorgt. Die Spannung steht zusätzlich an den Klemmen 24V und 0V der Eingänge zur Verfügung und kann mit max. 500 mA belastet werden.

In Stellung EXT muss an den Klemmen 24V und 0V der Ausgänge eine externe 24V Spannung angeschlossen werden, die dann über die Halbleiterschalter auf die Ausgänge geschaltet wird. Diese Spannung steht auch an den Klemmen 24V und 0V der Eingänge zur Verfügung und kann mit max. 500 mA belastet werden.
Die Eingänge werden mit einer Spannung von 24V bezogen auf den Anschluss 0V angesteuert.
Zwischen der internen und externen Spannungsversorgung besteht keine galvanische Koplung.

Die digitalen Ausgänge sind durch Halbleiterschalter realisiert und schalten die 24 V Versorgung auf die jeweilige Klemme. Jeder Ausgang ist mit 500 mA belastbar, kurzschlußfest und gegen induktive Lasten bis 5 mJ geschützt. Selbstverständlich ist es immer empfehlenswert, induktive Lasten mit Freilaufdioden oder vergleichbarer Schutzbeschaltung auszurüsten.

Die digitalen Eingänge nehmen einen Strom von ca. 5 mA auf.

Konfigurationsmöglichkeiten des Erweiterungsmoduls MOD432

Syntax: | Adr <val> {SubAdr <val> {Port <val> {Name "<val>";};};};
Adr | <val> ist eine Integerzahl und entspricht der am Codierschalter eingestellten Adresse von 0 bis 7.
SubAdr | <val> ist eine Integerzahl und ist 0 für die 8 Eingänge und 1 für die 8 Ausgänge.
Port | <val> ist die Kanalnummer für Port 0 bis 7 für die Ein- bzw. Ausgänge.
Name | <val> ist der Name des Ports.

Konfigurationsbeispiel des Modul MOD432:

MODULE 400 {
     Adr 04 {
       SubAdr 00 {
         Port 0 {Name "DE00";};
         Port 1 {Name "DE01";};
         Port 2 {Name "DE02";};
         Port 3 {Name "DE03";};
         Port 4 {Name "DE04";};
         Port 5 {Name "DE05";};
         Port 6 {Name "DE06";};
         Port 7 {Name "DE07";};
       };
       SubAdr 01 {
         Port 0 {Name "DA00";};
         Port 1 {Name "DA01";};
         Port 2 {Name "DA02";};
         Port 3 {Name "DA03";};
         Port 4 {Name "DA04";};
         Port 5 {Name "DA05";};
         Port 6 {Name "DA06";};
         Port 7 {Name "DA07";};
       };
     };
} SLOT 0;

weiter zur Slotkarte TYP500


Controller S320 Handbuch - Slotkarte Typ510

 2.12 TYP500: 2 x Eingang für Inkrementalgeber

Die Slotkarte TYP500 enthält zwei unabhängige Eingänge zum Anschluß von inkrementalen Winkelgebern (Spur A / Spur B) mit einer Zähltiefe von 24 Bit und einer maximalen Signalfrequenz von 500 kHz. Zusätzlich kann auch die Frequenz des Spur B - Signals gemessen werden.

Die Eingangsstufen sind über Optokoppler realisiert, so daß nahezu alle in der Praxis vorkommende Signalarten direkt angeschlossen werden können. Zur Geberversorgung werden 5V und 24V bereitgestellt.

Jedem Eingang sind logisch zwei Ports zugeordnet. Für den Eingang 1 sind dies Port 0 für das Zählen der Impulse und Port 1 für die Frequenzmessung. Für Eingang 2 sind dies entsprechend Port 2 - Zählen und 3 - Frequenz.

Folgende Betriebsarten sind möglich:

Port 0/2 |
1. | Inkrementalgeber: Vor-Rückwärtszählen von Inkrementalgeber-Impulsen. Die maximale Zählfrequenz liegt bei 500 kHz, die Zähltiefe beträgt 24 bit. An Port 1/3 kann parallel eine Frequenzmessung durchgeführt werden.
2. | Inkrementalgeber mit 4-fach Auswertung: Wie Inkrementalgeber, jedoch wird jeder Flankenwechsel des Gebers gezählt. Hierdurch ergibt sich eine vierfache Auflösung der Gebersignale.
Port 1/3 |
 | Frequenzmessung: Reziprokes Frequenzmeßverfahren. Über einen einstellbaren Vorteiler (2 bis 256) wird eine logische Zähldauer generiert, während der 10 MHz-Takt in einem 24 bit Zähler gezählt wird. Die Frequenz errechnet sich aus 5E6 * (Vorteiler / Zählerwert). Meßdauer und Auflösung lassen sich mit diesem Verfahren leicht an die Erfordernisse anpassen.

Eingänge: Die Eingänge der TYP500-Slotkarte sind mit Optokopplern ausgerüstet. Über Schalter können die Eingänge für verschiedene Geberausgänge konfiguriert werden. Zusätzlich wird eine 5V oder 24V Versorgung zur Geberspeisung bereitgestellt.

Die Eingangsstufe entspricht folgendem Schema:

HINWEIS: beim zweiten Eingang ist S1 durch S3 und S2 durch S4 zu ersetzen.

Beispiele für die Konfiguration:

Die drei wichtigsten in der Praxis vorkommenden Konfigurationen sind:

1. Aktive Ansteuerung der Spur A und B. Hierbei muss der Encoder mit einer externen Spannung versorgt werden. In diesem Falle ist der Encoder also vollständig galvanisch getrennt.

Schaltereinstellungen:

Spannung | S1 / S3 |  |  |  |  |  |  |  | S2 / S4
 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5
5V | OFF | OFF | OFF | ON | ON | ON | OFF | OFF | ON | OFF | ON | ON | OFF
24V | OFF | OFF | OFF | ON | ON | OFF | OFF | OFF | ON | OFF | OFF | ON | OFF

2. Schalten der Eingänge gegen Plus. Der Geber wird über die TYP500 Karte versorgt d.h., daß Encoder und S320 Controller nicht galvanisch getrennt sind.

Schaltereinstellungen:

Speisung | S1 / S3 |  |  |  |  |  |  |  | S2 / S4
 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5
5V | OFF | ON | ON | OFF | OFF | ON | OFF | ON | ON | OFF | ON | ON | ON
24V | ON | OFF | ON | OFF | OFF | OFF | OFF | ON | ON | OFF | OFF | ON | ON

3. Schalten der Eingänge gegen GND. Der Geber wird über die TYP500 Karte versorgt d.h., daß Encoder und S320 Controller nicht galvanisch getrennt sind.

Schaltereinstellungen:

Speisung | S1 / S3 |  |  |  |  |  |  |  | S2 / S4
 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5
5V | OFF | ON | OFF | ON | ON | ON | ON | OFF | OFF | ON | ON | OFF | ON
24V | ON | OFF | OFF | ON | ON | OFF | ON | OFF | OFF | ON | OFF | OFF | ON

Die Belastbarkeit der Geberspeisung beträgt ca. 50 mA bei 24V und ca. 20 mA bei 5V.

HINWEIS: Wenn Sie die Schalterstellungen anhand des obigen Schemas für Ihre speziellen Gegebenheiten selbst ermitteln, achten Sie bitte sehr genau darauf, daß keine unzulässigen Schalterstellungen existieren (z.B. Kurzschlüsse). Fehlerhafte Einstellungen können die TYP500 Karte dauerhaft zerstören!
Beispielsweise dürfen S1.1 und S1.2 bzw. S3.1 und S3.2 nicht gleichzeitig auf ON gestellt werden, da dies die beiden Speisespannungen kurzschliessen würde.

HINWEIS: Wird die Geberspeisung des Controller S320 verwendet, entfällt selbstverständlich die galvanische Trennung.

HINWEIS: Die eingebauten Vorwiderstände der LED des Optokopplers sind für die Ansteuerung mit 5V oder 24V dimensioniert. Eine Anpassung an andere Spannungen kann über eine externe Beschaltung erfolgen. Die LED im Optokoppler benötigt zum Schalten einen Strom von > 5 mA bis max. 10 mA, im ausgeschalteten Zustand muß der Strom < 0.25 mA sein. Die Diodenspannung bei 10 mA beträgt typ. 1.5 Volt.

HINWEIS: Einige Signalgeber (z.B. mechanische Schalter) können beim Schaltvorgang z.B. durch Prellen der Kontakte mehrere Impulse abgeben und damit zu unerwarteten Ergebnissen führen. Der Effekt läßt sich durch externe Maßnahmen wie RC-Glieder, Monoflops oder ähnliches verhindern.

HINWEIS: Die Optokoppler stellen eine galvanische Trennung im Sinne einer Funktionstrennung dar. Es ist nicht zulässig, die Eingänge mit Spannungspegeln > 50 V bezüglich PE-Anschluß des Controller S320 zu betreiben.

Erläuterung des reziproken Frequenzmeßverfahrens: Dieses Verfahren hat im Vergleich zum 'normalen' Verfahren (Anzahl Impulse während einer festen Zeit zählen) den Vorteil, daß es vor allem bei kleineren Frequenzen sehr viel schneller ein Ergebnis mit höherer Auflösung liefert.

Aus der zu messenden Frequenz wird über einen mittels PreScaler einstellbaren Zähler die Meßzeit erzeugt. Mögliche Werte für den PreScaler sind 2, 4, 8, 16, 32, 64, 128 und 256. Während des positiven Pegels dieses vorgeteilten Signales wird ein 10 MHz Takt in einem 24 bit Zähler gezählt. Die Frequenz errechnet sich aus 5E6 * (Vorteiler / Zählerwert). Die Meßzeit beim reziproken Meßverfahren ist demnach nicht fest, sondern bestimmt sich aus dem Wert für PreScaler und der tatsächlichen Eingangsfrequenz.

Die Werte werden nach folgenden Gleichungen ermittelt:

Meßzeit [s] | = PreScaler / Meßfrequenz [Hz]
Auflösung [Hz] | = Meßfrequenz [Hz] / (5E6 * Meßzeit [s])
Frequenz [Hz] | = 5E6 * (PreScaler / Counter)

Beispiel 1 KHz-Signal: Die Periodendauer dieses Signales beträgt 1 ms. Bei einem Vorteiler (PreScaler) von 256 beträgt die Meßzeit 256 ms. Während dieser Zeit werden im internen Zähler 10.000.000 * 0.5 * 0.256 = 1.280.000 Impulse gezählt. Die Auflösung beträgt damit 1.000 Hz / 1.280.000 = 0.000781 Hz. Beim 'normalen' Verfahren und 1 Sekunde Meßzeit würde die Auflösung 1 Hz (!) betragen.

Weitere Beispiele:

Signal [Hz] | PreScaler | Meßzeit [s] | Auflösung [Hz]
1 | 2 | 2,00000000 | 0,00000001
10 | 2 | 0,20000000 | 0,00000100
100 | 2 | 0,02000000 | 0,00010000
100 | 256 | 2,56000000 | 0,00000781
1.000 | 4 | 0,00400000 | 0,05000000
1.000 | 128 | 0,12800000 | 0,00156250
10.000 | 64 | 0,00640000 | 0,31250000
100.000 | 256 | 0,00256000 | 7,81250000
1.000.000 | 256 | 0,00025600 | 781,25000000

HINWEIS: Es dauert ca. 0.8 Sekunden, bis der 24 bit Zähler bei 10 MHz Takt überläuft bzw. das Ergebnis vom Controller S320 als Überlauf interpretiert wird. Bei einem PreScaler von 2 liegt die kleinste noch meßbare Frequenz demnach bei ca. 1.19 Hz.

In der Standardbibliothek stdlib.spi sind die Funktionen zur Kommunikation mit der Slotkarte TYP500 definiert. Die genaue Beschreibung der Befehle können im entsprechenden Kapitel nachgelesen werden.

Zähler werden mit CounterInit auf Null initialisiert und mit CounterRead ausgelesen.

Mit CounterSet können die Zähler auf einen Anfangswert gesetzt werden.

Die Funktion CounterEnable ermöglicht es Zähler zu Starten und zu Stoppen.

Frequenzmessungen werden mit FrequencyInit gestartet und mit FrequencyRead ausgewertet. Eine Funktion FrequencyMeas führt die Messung komplett in einem Schritt durch.

Konfigurationsmöglichkeiten der Slotkarte TYP500:

Syntax: | Port <val> {Name "<val>"; Mode <val>;};
Port | <val> ist die Kanalnummer für Port 0, 1, 2 oder 3, eine Integerzahl.
Name | <val> ist der Name des Ports, z.B. "Gaszaehler", "xAchse" usw.
Mode | <val> die Betriebsart des Kanals. Gültige Werte sind:
 | Port 0/2: |
 | "incrementalcounter" | - Inkrementalzähler
 | "incrementalcounter4x" | - Inkrementalzähler 4-fach
 | Port 1/3: |
 | "frequency" | - Frequenzmessung dies ist die einzig mögliche Einstellung für diese Ports, muss aber angegeben werden.

Konfigurationsbeispiel der TYP500-Slotkarte:

MODULE 500 { Port 0 { Name "CounterA";
                      Mode "incrementalcounter"; };
             Port 1 { Name "FrequencyA";
                      Mode "frequency"; };
             Port 2 { Name "CounterB";
                      Mode "incrementalcounter4x"; };
             Port 3 { Name "FrequencyB";
                      Mode "frequency"; };
           } Slot 0;

weiter zur Slotkarte TYP510


Controller S320 Handbuch - Slotkarte Typ510

 2.13 TYP510: 2 x Eingang zur Frequenzmessung

Die Slotkarte TYP510 läßt sich universell zum Zählen und Messen von digitalen Signalen einsetzen. Die Karte enthält zwei unabhängige Kanäle mit 32 bit Zähltiefe und einen internen 50 MHz Taktgenerator zur Frequenzmessung.

Die Eingangsstufen sind über Optokoppler realisiert, so daß nahezu alle in der Praxis vorkommenden Signalarten direkt angeschlossen werden können. Zur Geberversorgung werden 5V und 24V bereitgestellt.

HINWEIS: Die aktuelle Version TYP510 Rev.B ersetzt die Vorgänger Version 1:1, d.h. weder die Software noch die Konfigurationsdatei muss angepasst. Die neue Version hat jedoch geänderte und erweiterte Hardware-Einstellungen.

Folgende Betriebsarten sind möglich:

1. | Impulszählung: Zählen von Impulsen mit einer Zähltiefe von 32 bit und einer maximalen Frequenz von ca. 1 MHz.
2. | Inkrementalgeber: Vor-Rückwärtszählen von Inkrementalgeber-Impulsen. Diese Betriebsart ist nur auf Port 0 einstellbar, an Port 1 wird das um 90° phasenverschobene Signal zur Vor-Rückwärtserkennung angeschlossen. Die maximale Zählfrequenz liegt bei 50 kHz, die Zähltiefe beträgt 32 bit. Auf dem zweiten Kanal kann parallel z.B. eine Frequenzmessung oder eine Puls/Pausen-Verhältnismessung des Gebersignales durchgeführt werden.
3. | Inkrementalgeber mit 4-fach Auswertung: Wie Inkrementalgeber, jedoch wird jeder Flankenwechsel des Gebers gezählt. Hierdurch ergibt sich eine vierfache Auflösung der Gebersignale.
4. | Frequenzmessung: Reziprokes Frequenzmeßverfahren. Über einen einstellbaren Vorteiler (2 bis 256) wird eine logische Zähldauer generiert, während der ein 50 MHz-Takt in einem 32 bit Zähler gezählt wird. Die Frequenz errechnet sich aus 25E6 * (Vorteiler / Zählerwert). Meßdauer und Auflösung lassen sich mit diesem Verfahren leicht an die Erfordernisse anpassen.
5. | Puls/Pausen-Verhältnismessung: Ein 50 MHz-Takt wird in einem 32 bit Zähler nacheinander während der positiven oder negativen Flanke des Eingangssignales gezählt. Das Ergebnis errechnet sich aus dem Verhältnis der High-Flanke zur gesamten Impulsdauer. Die Bestimmung einer Impulsdauer ist in dieser Betriebsart ebenfalls möglich.

Eingang: Die Eingänge der TYP510-Slotkarte sind mit Optokopplern ausgerüstet. Eine 5 V oder 24 V Versorgung zur Geberspeisung wird bereitgestellt. Die Eingangsstufe entspricht folgendem Schema:

HINWEIS: beim zweiten Eingang (Port1) ist S1 durch S2 zu ersetzen.

Einstellungen:

 | Geberspeisung |  | Ansteuerspannung
S1 / S2: | 1 | 2 | 3
5V | OFF | ON | ON
24V | ON | OFF | OFF

HINWEIS: Die Belastbarkeit der Geberspeisung beträgt ca. 50 mA bei 24V und ca. 20 mA bei 5V.

HINWEIS: S1.1 und S1.2 bzw. S2.1 und S2.2 dürfen nicht gleichzeitig auf ON gestellt werden, da dies die beiden Speisespannungen kurzschliessen würde.

HINWEIS: Der Vorwiderstand des Optokopplers läßt sich mit S1.3 (Port0) bzw. S2.3 (Port1) an die vorliegende Eingangsspannung anpassen. Mit S1.3 bzw. S2.3 gleich ON eignet sich der Eingang mit 470 Ohm für 5 V TTL-Signale. Mit S1.3 bzw. S2.3 gleich OFF eignet sich der Eingang mit 3170 Ohm für 24 V Signale. Die LED im Optokoppler benötigt zum Schalten einen Strom von > 5 mA bis max. 10 mA, im ausgeschalteten Zustand muß der Strom < 0.25 mA sein. Die Diodenspannung bei 10 mA beträgt typ. 1.5 Volt.

Durch entsprechende externe Vorwiderstände läßt sich der Eingang leicht an andere Bedürfnisse anpassen. Durch den Optokoppler können sowohl 'plusschaltende' als auch 'masseschaltende' Signale angeschlossen werden. Wird die Geberspeisung des Controller S320 verwendet, entfällt selbstverständlich die galvanische Trennung. In diesem Fall wird bei 'plusschaltenden' Sensoren zwischen -IN und GND gebrückt, bei 'masseschaltenden' Sensoren von SUP nach +IN.

HINWEIS: Die Optokoppler stellen eine galvanische Trennung im Sinne einer Funktionstrennung dar. Es ist nicht zulässig, die Eingänge mit Spannungspegeln > 50 V bezüglich PE-Anschluß des Controller S320 zu betreiben.

Filter:

 | Analoger Signalfilter
S1 / S2: | 4 | 5 | 6
fg = 1.5 MHz | OFF | OFF | OFF
fg = 70 kHz | ON | OFF | OFF
fg = 700 Hz | OFF | ON | OFF
fg = 80 Hz | OFF | OFF | ON

 | Digitaler Signalfilter (nur Impulszählung)
S1 / S2: | 7 | 8
fg = 8 MHz | OFF | OFF
fg = 70 kHz | ON | OFF
fg = 8 kHz | OFF | ON
fg = 125Hz | ON | ON

Mit S1/2.4 bis S1/2.6 läßt sich ein Tiefpass zuschalten, der die maximale Eingangsfrequenz begrenzt. Dies kann bei Signalgebern mit geringer Frequenz und geringer Flankensteilheit (z.B. Durchlußmeßgeber) hilfreich sein, um mehrfache Impulse beim Flankenwechsel zu vermeiden.

HINWEIS: Einige Signalgeber (z.B. mechanische Schalter) können beim Schaltvorgang z.B. durch Prellen der Kontakte mehrere Impulse abgeben und damit zu unerwarteten Ergebnissen führen. Dieser Effekt läßt sich durch entsprechende Filtereinstellungen verhindern.

Erläuterung des reziproken Frequenzmeßverfahrens: Dieses Verfahren hat im Vergleich zum 'normalen' Verfahren (Anzahl Impulse während einer festen Zeit zählen) den Vorteil, daß es vor allem bei kleineren Frequenzen sehr viel schneller ein Ergebnis mit höherer Auflösung liefert.

Aus der zu messenden Frequenz wird über einen mittels PreScaler einstellbaren Zähler die Meßzeit erzeugt. Mögliche Werte für den PreScaler sind 2, 4, 8, 16, 32, 64, 128 und 256. Während des positiven Pegels dieses vorgeteilten Signales wird ein 50 MHz Takt in einem 32 bit Zähler gezählt. Die Frequenz errechnet sich aus 25E6 * (Vorteiler / Zählerwert). Die Meßzeit beim reziproken Meßverfahren ist demnach nicht fest, sondern bestimmt sich aus dem Wert für PreScaler und der tatsächlichen Eingangsfrequenz.

Die Werte werden nach folgenden Gleichungen ermittelt:

Meßzeit [s] | = PreScaler / Meßfrequenz [Hz]
Auflösung [Hz] | = Meßfrequenz [Hz] / (25E6 * Meßzeit [s])
Frequenz [Hz] | = 25E6 * (PreScaler / Counter)

Beispiel 1 KHz-Signal: Die Periodendauer dieses Signales beträgt 1 ms. Bei einem Vorteiler (PreScaler) von 256 beträgt die Meßzeit 256 ms. Während dieser Zeit werden im internen Zähler 50.000.000 * 0.5 * 0.256 = 6.400.000 Impulse gezählt. Die Auflösung beträgt damit 1.000 Hz / 6.400.000 = 0.000156 Hz. Beim 'normalen' Verfahren und 1 Sekunde Meßzeit würde die Auflösung 1 Hz (!) betragen.

Weitere Beispiele:

Signal [Hz] | PreScaler | Meßzeit [s] | Auflösung [Hz]
1 | 2 | 2,00000000 | 0,00000002
10 | 2 | 0,20000000 | 0,00000200
100 | 2 | 0,02000000 | 0,00020000
100 | 256 | 2,56000000 | 0,00000156
1.000 | 4 | 0,00400000 | 0,01000000
1.000 | 128 | 0,12800000 | 0,00031250
10.000 | 64 | 0,00640000 | 0,06250000
100.000 | 256 | 0,00256000 | 1,56250000
1.000.000 | 256 | 0,00025600 | 156,25000000

HINWEIS: Es dauert > 40 Sekunden, bis der 32 bit Zähler bei 50 MHz Takt überläuft bzw. das Ergebnis vom Controller S320 negativ interpretiert wird. Bei einem PreScaler von 2 liegt die kleinste noch meßbare Frequenz demnach bei ca. 0.05 Hz.

Erläuterung des Verfahrens zur Puls/Pausen-Verhältnismessung: Das Puls/Pausenverhältnis wird durch zweifache Zeitmessung der High- bzw. Low-Flanke bestimmt. Die Auflösung liegt in diesem Modus fest bei 20 Nanosekunden. Die reine Bestimmung der Impulsdauer ist mit dieser Betriebsart selbstverständlich ebenfalls möglich.

In der Standardbibliothek stdlib.spi sind die Funktionen zur Kommunikation mit der Slotkarte TYP510 definiert. Die genaue Beschreibung der Befehle können im entsprechenden Kapitel nachgelesen werden.

Zähler werden mit CounterInit auf Null initialisiert und mit CounterRead ausgelesen.

Frequenzmessungen werden mit FrequencyInit gestartet und mit FrequencyRead ausgewertet. Eine Funktion FrequencyMeas führt die Messung komplett in einem Schritt durch.

Puls/Pausen-Verhältnismessungen werden mit DutyCycleHighInit bzw. DutyCycleHighLowInit gestartet und mit DutyCycleRead ausgelesen. Eine Funktion DutyCycleMeas führt die Messung komplett in einem Schritt durch.

Konfigurationsmöglichkeiten der Slotkarte TYP510:

Syntax: | Port <val> {Name "<val>"; Mode <val>;};
Port | <val> ist die Kanalnummer für Port 0 oder 1, eine Integerzahl.
Name | <val> ist der Name des Ports, z.B. "Gaszaehler", "xAchse" usw.
Mode | <val> die Betriebsart des Kanals. Gültige Werte sind:
 | "impulsecounter" | - Impulszähler
 | "incrementalcounter" | - Inkrementalzähler (nur Port 0)
 | "incrementalcounter4x" | - Inkrementalzähler 4-fach (nur Port 0)
 | "frequency" | - Frequenzmessung
 | "dutycycle" | - Puls/Pausen-Verhältnismessung

Konfigurationsbeispiel der TYP510-Slotkarte:

MODULE 510 { Port 0 { Name "CounterA";
                      Mode "incrementalcounter4x"; };
             Port 1 { Name "CounterB";
                      Mode "frequency"; };
           } Slot 0;

weiter zur Slotkarte TYP520


Controller S320 Handbuch - Slotkarte Typ520

 2.14. TYP520: 2 x Frequenz und PWM-Ausgang

Die Slotkarte TYP520 enthält zwei Ausgänge zur Erzeugung von TTL-Signalen mit einstellbaren Frequenzen und einstellbaren Tastverhältnissen.

An den Ausgängen steht jeweils das Signal ( OUT ) bzw. dessen invertiertes Signal ( OUT/ ) zur Verfügung. Die beiden Kanäle können völlig unabhängig voneinander betrieben werden oder auch durch die Funktion 'StartSync' synchron gestartet werden. Weiterhin ist es möglich, den aktuellen Zustand des Ausganges rückzulesen. Bei Frequenzen < 200 Hz generiert die Slotkarte TYP520 ein Signal SigPWM. Hiermit ist es z.B. möglich, Messungen über analoge Eingangskarten mit dem erzeugten Takt zu synchronisieren.

Die Frequenz ist von ca. 0.1 Hz bis - sinnvoll - ca. 100 kHz einstellbar, das Tastverhältnis kann von 0 .. 1 entsprechend 0 .. 100 % eingestellt werden.

HINWEIS: Die Signalgenerierung erfolgt intern über mehrere Zähler und ist daher nicht stufenlos einstellbar. Die tatsächliche Frequenz bzw. das tatsächliche Tastverhältnis kann sich daher vom Vorgabewert geringfügig unterscheiden. Die exakte von der Karte eingestellte Frequenz bzw. die exakte Auflösung des Tastverhältnisses kann mit der Funktion PWMGetSettings in Erfahrung gebracht werden. Hierbei gilt insgesamt: Je höher die Frequenz, desto gröber ist die Stufung der Frequenzeinstellung und desto geringer ist die Auflösung des Tastverhältnisses.

HINWEIS: Die TTL-Signale an den Ausgängen sind 'reine' TTL-Signale (74HCT14) und als solche nur geeignet, innerhalb eines schützenden Gehäuses bei kurzer Leitungslänge ( < 1 Meter ) eingesetzt bzw. weitergeleitet zu werden. Im Zweifelsfall ist daher stets ein Koppelbaustein mit galvanischer Trennung vorzusehen.

In der Standardbibliothek stdlib.spi sind die Funktionen zur Kommunikation mit der Slotkarte TYP520 definiert. Die genaue Beschreibung der Befehle können im entsprechenden Kapitel nachgelesen werden.

Im wesentlichen werden über entsprechende Funktionen PWMSetFrequency bzw. PWMSetPulsewith die Frequenz und das Tastverhältnis vorgegeben. Die Takterzeugung wird mit PWMStart ausgelöst bzw. mit PWMStop angehalten. PWMStartSync started beide Kanäle der Slotkarte synchron.

Mit der Funktion PWMGetSettings kann ein Record generiert werden, aus dessen Daten wiederum die exakten von der Karte eingestellten Werte berechnet werden können. Details siehe in der Bibliothek stdlib.spi, Abschnitt Pulse und Frequenzen generieren. PWMGetState liefert den augenblicklichen Wert des Ausgangs.

Konfigurationsmöglichkeiten der Slotkarte TYP520:

Syntax: | Port <val> {Name "<val>"; StopState <val>;};
Port | <val> ist die Kanalnummer für Port 0 oder 1, eine Integerzahl.
Name | <val> ist der Name des Ports, z.B. "Ventil" usw.
StopState | <val> 0 oder 1, der Zustand, den der Ausgang im Stop-Zustand einnimmt.

Konfigurationsbeispiel der TYP520-Slotkarte:

MODULE 510 { Port 0 { Name "PWM0";
                      StopState 0; }
             Port 1 { Name "PWM1";
                      StopState 1; }
            } Slot 0

weiter zum Zubehör und zu den Ersatzteilen


Zubehör für den Controller S320

 2.15 Zubehör und Ersatzteile
Vollbild 800x600 ( 105 kByte)
 Sinnvolles Zubehör macht das Arbeiten einfach!

Die Auswahl reicht vom Netzteil für die schnelle Inbetriebnahme über Kabel, Stecker bis hin zum Diagnoseadapter.

Auch für die Verdrahtung eines RS485 Feldbus sind Anschlußadapter verfügbar.

Falls Sie eine 'atomgenaue' Uhrzeit benötigen - auch eine DCF77-Funkuhr steht zur Verfügung.

LEDIG - Diagnoseadapter für digitale Eingänge und Ausgänge

Der Diagnoseadapter LEDIG wird an der Rückseite des Controller S320 zwischengesteckt. Der Status der digitalen Ein- und Ausgänge wird durch LEDs angezeigt. Die digitalen Eingänge lassen sich durch eine DIL-Schalterreihe betätigen. DIL-Schalter und Eingang am Stecker sind durch Dioden ODER-verknüpft.

T485 - Adapter für RS485-Feldbusverdrahtungen

Der T485-Adapter kann den Anschluß von RS485 Feldbusverdrahtungen erleichtern. Der Adapter wird einfach auf eine Hutschiene aufgeschnappt. Ein mitgeliefertes Kabel mit 4-poligen FCC68-Steckern, 2 Meter lang, dient zur Verbindung zwischen Controller S320 und T485-Adapter. Die Feldbusleitung wird über Schraubklemmen angeschlossen.

Die beiden mit dem Erdungszeichen (PE-Anschluß) bezeichneten Klemmen sind mit Schutzerde und ggf. dem Schirm der Feldbusleitung zu verbinden. PE des T485-Adapters und PE des Controller S320 müssen untereinander verbunden sein. Zur Terminierung stellt man beide DIL-Schalter auf ON; beide DIL-Schalter in OFF-Stellung bedeutet: keine Terminierung. Die Signalleitungen A und B sind zum Controller S320 durchverbunden. Der T485-Adapter enthält zusätzlich noch Schutzdioden. Siehe auch Anschlußbelegung des Controller S320.

HINWEIS: Bei einer korrekten Feldbusverdrahtung mit Terminierung läßt sich zwischen A und PE eine Spannung von ca. 2.8 Volt und zwischen B und PE eine Spannung von ca. 2.1 Volt messen - solange kein Bustransfer abgewickelt wird.

DCF77 Funkuhr

Funkuhr zum Empfang und zur Auswertung des von der Physikalisch-Technischen-Bundesanstalt über den DCF77-Sender in Mainflingen bei Frankfurt/Main ausgestrahlten 'amtlichen' Zeitsignales.

Die DCF77-Funkuhr wird an der seriellen Schnittstelle Ser0 angeschlossen und von dieser auch mit Strom versorgt. Nach jedem korrekt empfangenen Zeitsignal (ohne Empfangsstörungen normalerweise einmal pro Minute) wird vom Betriebsystem ein Signal ausgelöst. Mittels einer entsprechenden Signalroutine kann dann die interne Uhr des Controller S320 kontinuierlich auf die 'amtliche' Zeit justiert werden.

Während des Betriebes muß die eingebaute Leuchtdiode grün leuchten und regelmäßig im Sekundentakt rot blinken. Selbstverständlich gelten auch hier die 'üblichen' Regeln beim Empfang des DCF77-Senders. Achten Sie darauf, die Funkuhr z.B. nicht innerhalb eines Schaltschrankes oder in der Nähe elektrischer Geräte wie Monitore, Frequenzumformer oder auch des Controller S320 selbst zu installieren. Die Kabellänge beträgt ca. 2 Meter. Als Verlängerungskabel eignet sich z.B. das Kabel DSK9/2 bzw. DSK9/7.

Montagematerial

KLK - Befestigungsklammer kurz, Satz mit zwei Stück

KLL - Befestigungsklammer lang, Satz mit zwei Stück

DIF - Dichtrahmen für Frontplattenausschnitt

Anschlußkabel

LINK2 - Kabel für Linkschnittstelle 2 Meter lang, ist im Lieferumfang enthalten. Eine Seite FCC68-6-polig, andere Seite DSUB Buchse 9-polig.

LINK7 - Kabel für Linkschnittstelle 7 Meter lang. Eine Seite FCC68-6-polig, andere Seite DSUB Buchse 9-polig.

DSA25/9 - Link-Adapter für 25-polige serielle PC-Anschlüsse. Eine Seite DSUB-Stift 9-polig, andere Seite DSUB-Buchse 25-polig.

DSK9/2 - Verbindungskabel seriell 9-polig 2 Meter lang. Eine Seite DSUB Buchse 9-polig, andere Seite DSUB-Stift 9-polig. Verbindung 1:1. Bei Anschluß zwischen PC und Controller S320, Ser0 ergibt sich die erforderliche Nullmodemverbindung.

DSK9/7 - Verbindungskabel seriell 9-polig 7 Meter lang. Eine Seite DSUB Buchse 9-polig, andere Seite DSUB-Stift 9-polig. Verbindung 1:1. Bei Anschluß zwischen PC und Controller S320, Ser0 ergibt sich die erforderliche Nullmodemverbindung.

Anschlußstecker

ST8 - 8poliger Anschlußstecker, z.B. für digitale Ein- oder Ausgänge

ST4 - 4poliger Anschlußstecker, z.B. für analoge Eingänge

ST3 - 3poliger Anschlußstecker, z.B. für analoge Ausgänge

SS3 - 3poliger Anschlußstecker speziell für den SUPPLY-Anschluß.

Netzteile

NAD01 - Tischnetzteil 24 Volt, 30 Watt Ausgang, Eingang 90-260VAC. Zur Versorgung des Controllers S320 z.B. während der Inbetriebnahme. Supply-Stecker.

NAD02 - Hutschienennetzteil 24 Volt, 30 Watt Ausgang zur Schaltschrankmontage. Eingang 90-260VAC. Zur festen Versorgung des Controllers S320 im Schaltschrank.

weiter zur Gerätekonfiguration


Konfiguration des Controller S320

 2.16 Konfiguration des Controller S320

Der Controller S320 wird durch eine editierbare Datei mit der Endung *.cfg konfiguriert. Hier werden alle hardwarespezifischen Einstellungen vorgenommen.

Grundsätzlich ist jedem analogen oder digitalen Port ein Name zuzuweisen. Dieser Name ist beliebig und darf bis zu 15 Zeichen lang sein.

Durch die Funktion OpenPort wird durch das Betriebssystem über diesen Namen ein 'Handle' erzeugt. Der Zugriff auf die Ports selbst erfolgt z.B. durch die Funktion AnalogIn unter Angabe des Handles.

Zugriffsbeispiel im Programm:

PROGRAM Zugriff;
INCLUDE "STDLIB";
INCLUDE "STDERR";
VAR
  hx  : PortHandle; {Das Handle des Kanals "Differenzdruck" }
  x   : FLOAT;      {Variable für den Differenzdruck        }

BEGIN
  hx  := OpenPort("Differenzdruck");
  x   := AnalogIn(chx);
END.

und der zugehörige Auszug aus der Konfigurationsdatei:

# TYP100 Analogeingang auf Slot 0
MODULE 100      { Port 0    { Name "Differenzdruck";
                              Gain 10.76194576;
                              Offset 0.00147000;
                              Filter 10.0;
                              PreGain 1; };
                  Port 1    { Name "NotUsed";
                              Gain 10.74436995;
                              Offset 0.00190000;
                              Filter 10.0;
                              PreGain 1; };
                } Slot 0;

HINWEIS: Beim Vergleich der Namen zwischen Spell-Programm und Konfigurationsdatei wird Gross/Kleinschreibung unterschieden.

Durch diese Namenskennung für jeden Port ist das Spell-Programm unabhängig von der tatsächlichen Belegung der Slotkarten. Änderung der Hardware (z.B. Slotkarte TYP110 anstelle von TYP100 zur Analogeingabe) betreffen nur die Konfigurationsdatei.

Weiterhin wird in der Konfigurationsdatei die physikalische Skalierung der Hardware vorgenommen und Offsetfehler bzw. Verstärkungsfehler der Wandlerkarte selbst sowie ggf. der angeschlossenen Sensorik ausgeglichen. Dies erfolgt durch die Parameter 'Gain' und 'Offset'. Analogeingänge liefern z.B. intern immer Werte von -1.0 bis +1.0 bei bipolaren Eingängen. Zu diesem internen Wert wird der Wert von Offset addiert. Das Ergebnis wird mit Gain multipliziert und im obigen Beispiel an die Variable x übergeben.

Wie die Parameter für Gain und Offset bestimmt werden, wird später in diesem Kapitel beschrieben.

Je nach Typ der Slotkarte existieren weitere Parameter für Filterkoeffizienten, Vorverstärkungen usw., die ebenfalls in der Konfigurationsdatei eingestellt werden können. Die Beschreibung dieser Parameter finden Sie im Kapitel über die jeweilige Slotkarte.

Auch die Parameter der seriellen Schnittstellen werden in der Konfigurationsdatei eingestellt.

Die Konfigurationsdatei

Die Konfigurationsdatei ist je nach Anwendungsfall verschieden, daher erfolgt hier die Beschreibung der Möglichkeiten anhand eines Beispiels.

Beispieldatei xxx.CFG:

# Konfigurationsdatei Controller S320
# Slot0 : TYP100
# Author : Sonja Müller
# Serielle Schnittstellen
SERIAL           {     Baud 9600;
                       Buffer 256;
                       Term 13;
                       Frame "8N1";
                       Protocol "STRING";
                       Handshake "None";
                 } Ser 0;

# Standard Digital I/O
MODULE 50       { Port 0     { Name "I00"; };
                  Port 1     { Name "I01"; };
                  Port 2     { Name "I02"; };
                  Port 3     { Name "I03"; };
                  ...
                  Port 8     { Name "O00"; };
                  Port 9     { Name "O01"; };
                  ...
                  Port 15    { Name "O07"; };

# TYP100 Analogeingang auf Slot 0
MODULE 100      { Port 0    { Name "Spannung";
                              Gain 10.76194576;
                              Offset 0.00147000;
                              Filter 10.0;
                              PreGain 1; };
                  Port 1    { Name "Strom";
                              Gain 10.74436995;
                              Offset 0.00190000;
                              Filter 10.0;
                              PreGain 1; };
                } Slot 0;

Prinzipielle Syntax der Konfigurationsdatei:

Kommentare beginnen mit einem führenden # und werden ignoriert. Dem Controller S320 ist nur die Hardware bekannt, die in der Konfigurationsdatei beschrieben ist. Zugriffe auf nicht oder falsch definierte Hardware erzeugen i.a. Laufzeitfehler.

Syntax: | KEY <nr> { <list> } <loc>;
KEY: | Schlüsselwort SERIAL oder MODULE. Mit SERIAL wird die serielle Schnittstelle des Controllers S320 eingestellt, MODULE definiert die Slotkarten bzw. die digitalen Ein-/Ausgänge des Basisgeräts.
<nr>: | Nur bei Modulen. Bei Slotkarten die Nummer der Slotkarte, beim TYP400 also z.B. die Nummer 400. Die digitalen Ein- und Ausgänge des Basisgerätes haben immer die Modulnummer 50.
<list>: | Die Parameterliste des jeweiligen Moduls, getrennt durch Semikola.
<loc>: | Der Steckplatz bzw. die Schnittstelle, denen die Parameter zugeordnet werden. Entweder Ser 0 bis Ser 2, Slot -1 (digitale Standard-E/A) oder Slot0 bis Slot 4.

Parameterliste serielle Schnittstellen:

Syntax: | Baud <val>; Buffer <val>; Term <val>;
Baud | Die Übertragungsgeschwindigkeit in Baud. <val> ist eine Integerzahl. Mögliche Werte: 300, 600, 1200, 4800, 9600, 19200, 38400. Der Parameter Baud muß angegeben werden, andernfalls kann die Schnittstelle nicht angesprochen werden.
Buffer | Die Größe der Puffer der seriellen Schnittstelle. <val> ist eine Integerzahl zwischen 256 und 4096. Der Parameter Buffer ist optional, die Default-Einstellung ist 256.
Term | Das zur Endekennung eines Strings verwendete Zeichen, üblicherweise ein Linefeed (LF = 10 = $0A) oder CarriageReturn (CR = 13 = $0D). Alternativ kann für besondere Kommunikationsanwendungen auch ein anderes Zeichen wie z.B. '>' verwendet werden. Der Parameter Term ist optional, der Default-Wert ist das Linefeed.
Frame | Die Schnittstellenparameter (Databits, Parität und Stopbits) in üblicher Schreibweise, z.B. "8N1". Mögliche Werte Databits: 5, 6, 7 oder 8. Mögliche Werte Parität: N (None), O (Odd), E (Even), S (Space) und M (Mark). Mögliche Werte Stopbits: 1 oder 2. Alternativ können auch die Parameter Databits <val>, Parity <val> und Stopbits <val> verwendet werden. Die Angaben sind optional, die Default-Einstellung ist 8 Datenbits, keine Parität und 1 Stopbit (8N1).
Protocol | Über die serielle Schnittstelle wird außer dem Standard String-Protokoll (PROTOCOL "String";) auch ein Byte-Protokoll unterstützt (PROTOCOL "Byte";). Die Zugriffsfunktionen auf die serielle Schnittstelle unterscheiden sich je nach Protokoll. Sie sind Bestandteil der Bibliothek stdlib.spi und werden im entsprechenden Kapitel eingeführt. Eine DCF-77-Funkuhr kann an die serielle Schnittstelle Ser0 angeschlossen werden. Die Funkuhr wird durch PROTOCOL "DCF77"; angemeldet, alle anderen Parameter wie Baud, Buffer usw. werden automatisch passend eingestellt.
Handshake | Das verwendete Handshakeverfahren bei der RS232-Schnittstelle Ser0. Mögliche Werte sind none bzw. "rts/cts". Bei "none" wird kein Handshake verwendet, "rts/cts" ermöglicht die Kommunikation mittels Hardware-Handshake. Hierbei ist sicherzustellen, daß die Gegenstelle (z.B. der PC) die entsprechenden Leitungen auch bedient. Die Angabe ist optional, die Default-Einstellung ist "none".

Zur sicheren Datenübertragung sollten serielle Schnittstellen nach RS232 vorzugsweise mit Hardware-Handshake betrieben werden. Hierbei müssen allerdings beide Teilnehmer die entsprechenden Signale RTS bzw. CTS korrekt bedienen. Beim Controller S320 ist zu beachten, daß das Gerät logischerweise nur dann Empfangsbereitschaft (RTS) signalisiert, falls die serielle Schnittstelle SER0 in der Konfigurationsdatei konfiguriert ist und das Spellprogramm läuft. Im Terminalmodus und während des Übertragens von Daten von und zum Controller S320 wird daher auch keine Empfangsbereitschaft signalisiert. Die Empfangsbereitschaft wird korrekterweise nach Programmende (z.B. auch nach einem Laufzeitfehler) zurückgenommen.

Die empfangenen Zeichen werden im internen Empfangspuffer zwischengespeichert. Nach Empfang des Terminatorzeichens im String-Modus (i.d.R. Linefeed), bzw. einem oder mehreren Zeichen im Byte-Modus wird das Signal SigSer0 ausgelöst. Alternativ bzw. zusätzlich kann über die Funktion ComAvail auch geprüft werden, ob komplette Informationen im Puffer vorliegen. Das Spellprogramm hat dafür zu sorgen, daß die Daten im Puffer über die Funktionen ComReceive bzw. ComBufReceive entgegengenommen werden. Erfolgt dies nicht, so wird bei gefülltem Puffer ebenfalls die Empfangsbereitschaft zurückgenommen.

Im Gegenzug unterbricht der Controller S320 das Senden von Daten über die serielle Schnittstelle, falls das empfangende Gerät (z.B. ein PC) seinerseits keine Empfangsbereitschaft signalisiert. Falls aus diesem Grund der Sendepuffer im Controller S320 gefüllt ist, wartet die Funktion ComSend bzw. ComBufSend bis wieder ausreichend Platz im Sendepuffer vorhanden ist. Dies kann zu unerwünschtem 'Hängen' des Spellprogrammes führen. Es ist daher zu empfehlen, Daten nur dann in den Sendepuffer zu stellen, falls zuvor geprüft wurde, ob diese auch im Sendepuffer aufgenommen werden kann (Funktionen: ComBufFree, ComBufferAvail).

Konfiguration der Hardware

Digitale Eingänge und Ausgänge des Basisgerätes

Die jeweils 8 digitalen Eingänge bzw. Ausgänge des Basisgerätes werden in der Konfigurationsdatei über das MODULE 50 auf Slot -1 angesprochen. Die Parameterliste ordnet den Ports Namen zu.

MODULE 50, Parameterliste:

Syntax: | Port <val> {Name "<val>";};
Port | Das Schlüsselwort Port leitet die Parameterliste ein. <val> ist die Kanalnummer: eine Integerzahl. Beim Modul 50 sind die Kanäle 0 bis 7 digitale Eingänge und die Kanäle 8 bis 15 digitale Ausgänge.
Name | Das Schlüsselwort Name dient der Zuordnung des Namens. <val> ist der Name des Ports, z.B. "Zylinder", "Hubtisch" o.ä.. Der Name darf bis zu 15 Zeichen lang sein. Groß/Kleinschreibung wird unterschieden.

Module bzw. Slotkarten

Je nach Slotkartentyp existieren unterschiedliche Parameterlisten, um spezielle Hardwaremöglichkeiten der entsprechenden Slotkarten zu nutzen. Die für die jeweilige Slotkarte gültige Parameterliste wird bei den Slotkarten beschrieben.

Beispiel: MODULE 100, Parameterliste:

Das Modul 100 (Slotkarte TYP100-Analogeingang) wird hier exemplarisch beschrieben. Die verschiedenen Konfigurationen sind bei den entsprechenden Slotkarten beschrieben.

Syntax: | Port <val> {Name "<val>"; Gain <val>; Offset <val>;
Port | Das Schlüsselwort Port leitet die Parameterliste ein. <val> ist die Kanalnummer: eine Integerzahl. Beim Modul 100 sind die Kanäle 0 und 1 analoge Eingänge.
Name | Das Schlüsselwort Name dient der Zuordnung des Namens. <val> ist der Name des Ports, z.B. "Spannung", "Druck" o.ä..
Gain | Die diesem Schlüsselwort folgende Fließpunktzahl dient als Verstärkung zum Skalieren bzw. Kalibrieren des analogen Eingangs.
Offset | Die diesem Schlüsselwort folgende Fließpunktzahl dient als Offsetwert zum Skalieren bzw. Kalibrieren des analogen Eingangs.

Diese vier Parameter sind Bestandteil aller Analogkarten-Konfigurationen. Die weiteren Parameter sind kartenspezifisch und unterscheiden sich von Typ zu Typ. Die Beschreibung der Besonderheiten des gewünschten Kartentyps finden Sie im entsprechenden Kapitel.

Gain und Offset

Die Skalierung und die Kalibrierung der analogen Hardware erfolgt durch die Parameter GAIN und OFFSET. Diese beiden Parameter ersetzen im Controller S320 die sonst unvermeidlichen Trimmer zum Abgleich der analogen Meßtechnik. Im Controller S320 wird, soweit möglich, auf Potentiometer oder Trimmer zum Abgleich der Hardware verzichtet, lediglich die Ausgänge zur Geberspeisung sind teilweise mit Trimmern ausgerüstet.

Die Parameter GAIN und OFFSET leisten jedoch wesentlich mehr als ihre analogen Pendants, da hiermit eine Skalierung direkt in die physikalische Einheit wie z.B. bar durchgeführt werden kann.

Mathematisch betrachtet bedeuten die im folgenden beschriebenen Vorgänge nichts anderes als die Auswertung einfacher Geradengleichungen. Zugegebenermaßen mag diese Vorgehensweise auf den ersten Blick etwas verwirrend erscheinen. Wer jedoch schon öfters mit Schraubendreher 'bewaffnet' einen Sensor unter der Decke einer Fertigungshalle oder eine Elektronikkarte tief im Innern eines 19"-Schrankes aufsuchen 'durfte', wird diese Vorgehensweise vermutlich bald zu schätzen lernen.

Grundsätzlich sollten Sie, bevor Sie mit präzisen Kalibrierungen beginnen, den Controller S320 und die angeschlossenen Sensoren etwa eine Stunde auf Betriebstemperatur warmlaufen lassen.

Die Basisgleichung für die analogen Eingänge lautet:

E = ( X + OFFSET ) * GAIN

E ist der physikalische Eingangswert bzw. der im Controller S320 dargestellte Zahlenwert. X ist der interne Wert aus der Wandlung im Bereich von -1.0 bis +1.0. OFFSET und GAIN sind die Werte der Konfigurationsdatei.

Bei analogen Ausgängen erfolgt die Skalierung in entgegengesetzter Richtung.

Die Basisgleichung für die analogen Ausgänge lautet:

X = ( A / GAIN ) - OFFSET

A ist der physikalische Ausgangswert bzw. der im Controller S320 dargestellte Zahlenwert. X ist der interne Wert im Bereich von -1.0 bis +1.0, der an den Wandler übergeben wird. OFFSET und GAIN sind die Werte der Konfigurationsdatei.

Schauen wir uns nun eine solche Meßkette im einzelnen an - hier exemplarisch von einem pneumatischen Druck bis hin zur Repäsentation als Zahl im Controller S320.

1. | Der zu messende Druck liegt zwischen -0.5 bar und 7.0 bar.
2. | Ein Sensor setzt diesen Bereich in ein elektrisches Signal von 4..20mA um.
3. | Der Strom wird über einen Widerstand von 50 Ohm geleitet und damit in eine Spannung von 0.2 Volt bis 1.0 Volt umgesetzt.
4. | Ein Instrumentenverstärker verstärkt das Spannungssignal um den Faktor 2.3. Das Meßsignal liegt nun zwischen 0.46 Volt und 2.3 Volt. Die Verstärkung wählt man sinnvollerweise etwas geringer als der theoretische Grenzwert (in diesem Fall 2.5), um auch die Endwerte sicher realisieren zu können.
5. | Ein AD-Wandler setzt eine Spannung zwischen -2.5 Volt bis + 2.5 Volt in eine dimensionslose Zahl X zwischen -1.0 und 1.0 um.
6. | Zu der dimensionslosen Zahl wird ein Offset addiert und mit einer Konstanten Gain multipliziert. Das Ergebnis repräsentiert nun einen Druck, dargestellt in Form einer Fließpunktzahl.

Grafisch läßt sich der Vorgang wie folgt darstellen:

In der Praxis ist nun jede der genannten Umsetzungen fehlerbehaftet. Auch der genaueste Drucksensor wird bei -0.5 bar nicht exakt 4.00000mA und bei 7.0 bar nicht exakt 20.00000mA liefern. Auch der Widerstand zur Strom/Spannungsumsetzung wird einen Fehler haben und die Verstärkung des Instrumentenverstärkers wird nicht exakt bei 2.30000 liegen.

Alle diese linearen Fehler lassen sich nun jedoch in der Stufe 6 (Gain- und Offset) kompensieren.

Falls Sie nichtlineare Kennlinien von Sensoren berücksichtigen wollen, haben Sie mit dem Controller S320 die Möglichkeit, jede beliebige mathematische Verknüpfung zwischen gemessenem Signal und interner Darstellung durchzuführen.

In der Bibliothek LIN.SPI sind für folgende Linearisierungsaufgaben bereits entsprechende Routinen vorbereitet:

- PT100 Linearisierung
- Polynome beliebiger Ordnung
- Lineare Interpolation mit einer beliebigen Anzahl von Stützstellen
- Spline Interpolation mit einer beliebigen Anzahl von Stützstellen.

Hat Ihr Sensor z.B. einen logarithmischen oder quadratischen 'Charakter' so läßt sich auch dies durch eine mathematische Umrechnung leicht korrigieren.

Noch ein Wort zu den Bereichsgrenzen: Analoge Ein- oder Ausgänge haben stets eine obere und untere Grenze. Ein Eingang, der von 0.0 bis 10.0 Volt konfiguriert ist, wird bei einem Eingangssignal > 10.0 Volt zwangsläufig einen Maximalwert liefern.

Kalibriert man nun 'genau' bei 10.0 Volt könnte es sein, daß der Wandler aufgrund interner Toleranzen bereits in seiner Begrenzung ist - das Ergebnis der Kalibrierung wäre nicht korrekt.

Aus diesem Grund wurde bei der Entwicklung der Slotkarten für den Controller S320 Wert darauf gelegt, daß soweit wie möglich alle Ein- und Ausgänge den eingestellten Bereich überdecken. Beispielsweise vermag eine TYP200-Karte bei Einstellung 0..10 Volt tatsächlich eine Ausgangsspannung von ca. -0.5 Volt bis 10.5 Volt zu liefern. Die Endwerte sind damit sicher abgedeckt, die notwendige Anpassung übernehmen die beiden Parameter Gain und Offset.

In der Betriebsart Stromausgang 4..20 mA z.B. einer TYP200 Slotkarte sind die Endwerte hingegen durch chipinterne Referenzen festgelegt und wie jedes Signal mit kleinen, aber meßbaren Fehlern behaftet. Falls die Endwerte exakt repräsentiert werden müssen, wäre eine Möglichkeit, den nächstgrößeren Bereich einzustellen, hier z.B 0..24 mA. Die Endwerte 4mA und 20mA liegen damit sicher im Arbeitsbereich des Ausgangs.

Ist die Begrenzung des Ausgangs nur bei der Kalibbrierung störend, weil z.B. der Ausgang nicht 20.0000mA sondern 19.9998mA liefert, ist es zu empfehlen, die Kalibrierung nicht direkt an den Endwerten durchzuführen. Beispielsweise könnte man die Kalibrierung bei 4.5mA und bei 19.5mA durchführen. Der Arbeitsbereich ist in diesem Fall korrekt kalibriert. Die Fehler an den physikalischen Endwerten bleiben selbstverständlich erhalten, was sich durch ein 'Abknicken' der Kennlinie äußert.

Kalibrieren mit der Entwicklungsumgebung

Mit dem Menüpunkt Config > Calibrate Analog Port unterstützt Sie die Entwicklungsumgebung beim Kalibrieren von analogen Ein- und Ausgängen und berechnet neue Werte für Gain und Offset.

Analoge Eingänge: Es erscheint links eine Auswahlliste der in Ihrer Konfigurationsdatei definierten analogen Eingänge. Wählen Sie hier den zu kalibrierenden Eingang aus. Im folgenden Dialog werden die aktuellen Werte für Gain und Offset angezeigt. Geben Sie bei "Upper setpoint" und bei "Lower setpoint" die Werte ein, die Sie dann als oberes bzw. unteres Meßsignal am Eingang anlegen wollen.

Im folgenden Dialog wird nun kontinuierlich der aktuelle Meßwert am Eingang angezeigt. Legen Sie ein Eingangssignal entsprechend des oberen Wertes an und übernehmen Sie das Ergebnis mit "Set upper". Führen Sie den gleichen Schritt für das untere Meßsignal durch. Mit "Weiter" berechnet die Entwicklungsumgebung nun die neuen Werte für Gain und Offset. Tragen Sie diese Werte in Ihre Konfigurationsdatei ein und übertragen Sie diese auf den Controller S320. Sie können Ihre Kalibrierung durch den Menüpunkt "Config/Test I/O" überprüfen.

Analoge Ausgänge: Es erscheint rechts eine Auswahlliste der in Ihrer Konfigurationsdatei definierten analogen Ausgänge. Wählen Sie hier den zu kalibrierenden Ausgang aus. Im folgenden Dialog werden die aktuellen Werte für Gain und Offset angezeigt. Geben Sie bei "Upper Logical Signal Range" und bei "Lower Logical Signal Range" die Werte ein, die Sie in Ihrem Programm mit der Funktion AnalogOut an den Wandler übergeben wollen. Überprüfen Sie anhand der Ausgangsgleichung X=(A/GAIN)-OFFSET, ob der intern an den Wandler übergebene Wert sowohl beim oberen Wert für A als auch beim unteren Wert für A zwischen -1.0 und +1.0 bei bipolaren Wandlern und zwischen 0.0 und +1.0 bei unipolaren Wandlern liegt. Falls Sie bei der Eingabe eine Fehlermeldung erhalten, überprüfen Sie die aktuellen Werte für Gain und Offset entsprechend dem Kapitel "Analoge Ausgänge zum ersten Mal kalibrieren" und stellen Sie geeignete Werte in der Konfigurationsdatei ein.

Geben Sie bei "Upper Physical Signal Range" und bei "Lower Physical Signal Range" die Werte ein, die Sie später am Ausgang messen wollen. Im folgenden Dialog können Sie nun mit den Menüpunkten "Set Upper" bzw. "Set Lower" den Ausgang setzen. Tragen Sie die gemessenen Werte in die entsprechenden Felder für "Upper Value" bzw. "Lower Value" ein. Fahren Sie mit "Weiter" mit dem nächsten Schritt fort. Die Entwicklungsumgebung berechnet nun die neuen Werte für Gain und Offset. Tragen Sie diese Werte in Ihre Konfigurationsdatei ein und übertragen Sie diese auf den Controller S320. Sie können Ihre Kalibrierung durch den Menüpunkt "Config/Test I/O" überprüfen.

Analoge Eingänge zum ersten Mal kalibrieren

Die Kalibrierung der Meßkette für analoge Eingänge erfolgt in folgenden Schritten:

1. | OFFSET = 0.0 und GAIN = 1.0 in der Konfigurationsdatei einstellen.
2. | Eingangsbereich, Vorverstärkung und ggf. Geberspeisung auf der Slotkarte entsprechend der Aufgabe einstellen. Weitere Informationen hierzu finden sich unter der Beschreibung der Slotkarten bzw. der Unterlagen zum Sensor usw.. Stellen Sie insbesondere auch sicher, daß der gewählte Eingangsbereich vom Wandler auch abgedeckt wird, d.h. daß der Wandler nicht in Begrenzung geht. Dies wäre zum Beispiel der Fall, falls der Eingang auf 0..5 Volt konfiguriert ist und Sie versuchen, ein Signal 0..10 Volt zu messen bzw. zu skalieren.
3. | Ein Meßsignal Eu im unteren Eingangsbereich anlegen, z.B. 4 mA bei einem Stromeingang 4 bis 20 mA. Bei Unterstützung der Kalibrierung durch die Entwicklungsumgebung geben Sie diesen Wert bei "Lower Physical Signal Range" und den oberen Wert Eo bei "Upper Physical Signal Range" ein. Ergebnis der Wandlung Xu ablesen, hier z.B. 0.12345. Die Ausgabe des Wertes kann durch ein Spell-Programm erfolgen oder Sie übernehmen diesen unteren Wert mit der Funktion "Set Lower".
4. | Ein Meßsignal Eo im oberen Eingangsbereich anlegen, z.B. 20 mA. Ergebnis der Wandlung Xo ablesen, hier z.B. 1.0543. Im Terminalprogramm übernehmen Sie den angezeigten Wert mit "Set Upper".
5. | Wert für OFFSET und GAIN nach folgenden Gleichungen berechnen oder vom Terminalprogramm durch "Weiter" berechnen lassen: GAIN = (Eo - Eu) / (Xo -Xu) OFFSET = (Eu * Xo - Eo * Eu) Gain = 17.18822 (in diesem Beispiel) OFFSET = 0.10927 HINWEIS: Die Gleichungen können in dieser Form selbstverständlich nur angewendet werden, falls die vom Wandler gelieferten Istwerte auch angezeigt und nicht durch weitere Umrechnungen beeinflußt werden.
6. | Werte für OFFSET und GAIN in der Konfigurationsdatei einstellen und in den Controller S320 übertragen. Nach einem Neustart des Programms erhalten Sie bei einem Eingangssignal von 4 mA den numerischen Wert 4.0, bei einem Eingangssignal von 20 mA den numerischen Wert 20.0.
7. | Analog können Sie beliebig jede physikalische Einheit zuordnen. Bei einem Drucksensor, der z.B. einen Druck von 0 bis 10 bar auf 4 bis 20 mbar abbildet, legen Sie ein elektrisches Signal von 4 mA an den Eingang und setzen Eu = 0.0 (bar) in obiger Gleichung ein. Danach 20 mA anlegen und Eo = 10.0 (bar) setzen. Alternativ können Sie selbstverständlich auch den Drucksensor anschließen und Kalibrierdrücke von 0 bar bzw. 10 bar am Sensor einstellen. In diesem Fall werden auch Fehler des Sensors 'wegkalibriert'.

Analoge Eingänge nachkalibrieren

Falls bereits Werte für GAIN und OFFSET vorliegen und das Signal z.B. aufgrund eines Drifts des Sensors nachkalibriert werden soll, ist folgendes Verfahren anzuwenden:

1. | Ein Meßsignal Esu (Eingang Soll Unten) im unteren Eingangsbereich anlegen, z.B. 4 mA bei einem Stromeingang 4 bis 20 mA. Bei Unterstützung der Kalibrierung durch das Terminalprogram geben Sie diesen Wert bei "Lower Physical Signal Range" und den oberen Wert Eso bei "Upper Physical Signal Range" ein. Meßergebnis Eiu (Eingang Ist Unten) der Wandlung ablesen, hier z.B. 4.0880 mA. Im Terminalprogramm übernehmen Sie den angezeigten Wert mit "Set Lower".
2. | Ein Meßsignal Eso (Eingang Soll Oben) im oberen Eingangsbereich anlegen, z.B. 20 mA. Meßwert Eio (Eingang Ist Oben) ablesen, hier z.B. 19.8030 mA. Im Terminalprogramm übernehmen Sie den angezeigten Wert mit "Set Upper".
3. | Werte für OFFSETsoll und GAINsoll nach folgenden Gleichungen berechnen oder vom Terminalprogramm durch "Weiter" berechnen lassen, wobei für OFFSETist und GAINist die aktuellen Angaben der Konfigurationsdatei zu verwenden sind: GAINist = 17.18822180 (in diesem Beispiel) OFFSETist = 0.10926750 GAINsoll = ((Eso - Esu) / (Eio - Eiu)) * GAINist OFFSETsoll = (Eso / GAINsoll) - (Eio / GAINist) + OFFSETist GAINsoll = 17.5000 (in diesem Beispiel) OFFSETsoll = 0.1000 HINWEIS: Die Gleichungen können in dieser Form selbstverständlich nur angewendet werden, falls die vom Wandler gelieferten Istwerte auch angezeigt und nicht durch weitere Umrechnungen beeinflußt werden.
4. | Werte für OFFSETsoll und GAINsoll in der Konfigurationsdatei einstellen und in den Controller S320 übertragen. Nach einem Neustart des Programms erhalten Sie bei einem Eingangssignal von 4 mA wieder den numerischen Wert 4.0, bei einem Eingangssignal von 20 mA den numerischen Wert 20.0.
5. | Analog können Sie wie im vorherigen Abschnitt beschrieben auch jede physikalische Einheit zuordnen.
6. | Auch bei Nachkalibrierungen sollten Sie überprüfen, ob der Wandler nicht in Begrenzung geht. Insbesondere bei größeren Veränderungen von GAIN und OFFSET besteht diese Gefahr.

Analoge Ausgänge zum ersten Mal kalibrieren

Die Kalibrierung der Meßkette für analoge Ausgänge erfolgt in zwei Stufen:

Im ersten Schritt wird die Abbildungsvorschrift festgelegt, die die Funktion AnalogOut an den Wandler nach der Gleichung X=(A/GAIN)-OFFSET zu liefern hat.

1. | Ein im Controller S320 dargesteller Wert soll z.B. mit Au = 4.5 bar und Ao = 23.0 bar auf Xu = 0.0 bis Xo = 1.0 im Wandler abgebildet werden. Im ersten Schritt werden die Werte für GAIN und OFFSET nach folgenden Gleichungen berechnet: GAIN = (Ao - Au) / (Xo - Xu) OFFSET = Ao * ((Xo - Xu) / (Ao - Au)) - Xo GAIN = 18.500000 (in diesem Beispiel) OFFSET = 0.243243 Bitte beachten Sie, daß einige DA-Wandler (z.B. TYP200 und TYP310) bipolar arbeiten und einen Wert zwischen -1.0 .. +1.0 in ein unipolares Signal (z.B. 0..10V) umsetzen. Die Abbildung wäre dann mit Au = 4.5 bar und Ao = 23.0 bar nach Xu = -1.0 bis Xo = 1.0 vorzunehmen. GAIN = 9.250000 (in diesem Beispiel) OFFSET = 1.486486
2. | Werte für GAIN und OFFSET in der Konfigurationsdatei einstellen.
3. | Slotkarte hardwareseitig auf das gewünschte Ausgangssignal einstellen, z.B. 4mA bis 20mA. Weitere Einzelheiten entnehmen Sie bitte der Beschreibung der jeweiligen Slotkarte.

Im zweiten Schritt wird der Ausgang nun physikalisch abgeglichen. Dies wird im folgenden Kapitel 'Analoge Ausgänge nachkalibrieren' beschrieben.

Analoge Ausgänge nachkalibrieren

Analoge Ausgänge können Sie in folgender Reihenfolge nachkalibrieren:

1. | Einen Wert Ao im oberen Bereich an den Wandler geben, z.B. den Wert Ao = 23bar, bei dem ein Ausgangsstrom von (Ausgang Soll Oben) Aso = 20 mA geliefert werden soll. Tatsächlichen Ausgangsstrom (Ausgang Ist Oben) Aio messen, hier z. B. 20.331 mA. Bei Unterstützung der Kalibrierung durch die Entwicklungsumgebung geben Sie im ersten Dialog zunächst die gewünschten Werte wie folgt vor:
 | "Upper logical" = Ao = 23 "Lower logical" = Au = 4.5 | "Upper physical" = Aso = 20 "Lower physical" = Asu = 4
 | Bestätigen Sie mit F10, hierbei wird überprüft, ob die aus den logischen Grenzen Ao und Au errechneten Werte X = (A / GAINist) - OFFSETist, die an den Wandler übergeben werden, im Bereich zwischen -1 .. +1 liegen.
 | Im folgenden Dialog setzen Sie den Ausgang mit "Set Upper" auf den Wert Ao. Messen Sie den tatsächlichen Wert, hier z.B. 20.331 mA und tragen Sie das Ergebnis im oberen Feld "Upper Value" ein.
2. | Einen Wert Au im unteren Bereich an den Wandler geben, z.B. den Wert Au = 4.5 bar, bei dem ein Ausgangsstrom von (Ausgang Soll Unten) Asu = 4 mA geliefert werden soll. Tatsächlichen Ausgangsstrom (Ausgang Ist Unten) Aiu messen, hier z. B. 4.131 mA. Bei Unterstürzung der Kalibrierung durch die Entwicklungsumgebung setzen Sie den Ausgang mit "Set Lower" auf den Wert Au. Messen Sie den tatsächlichen Wert, hier z.B. 4.131 mA und tragen Sie das Ergebnis im unteren Feld "Lower Value" ein.
3. | Neue Werte für GAINsoll und OFFSETsoll nach folgenden Gleichungen berechnen oder durch das Temrinalprogramm mit "Weiter" berechnen lassen: Die Istwerte für OFFSETist und GAINist der Konfigurationsdatei sind z.B.: GAINist = 18.500000 OFFSETist = 0.243243 Die Gleichung: GAINsoll = ((Aio - Aiu) / (Aso - Asu)) * GAINist OFFSETsoll = OFFSETist+((Asu - Aiu) * Ao - (Aso - Aio) * Au) * (1 / GAINsoll - 1 / GAINist) / (Asu - Aiu - Aso + Aio) führen zum Beispiel zu: GAINsoll = 18.73125 OFFSETsoll = 0.2483267
4. | Neue Werte für GAINsoll und OFFSETsoll in der Konfigurationsdatei angeben und zum Controller S320 übertragen. Nach einem Neustart des Programms erhalten Sie bei einem Eingangssignal von 23 bar den Ausgangswert 20 mA und bei einem Eingangssignal von 4.5 bar den Ausgangswert 4 mA.
5. | Auch bei Nachkalibrierungen sollten Sie überprüfen, ob der Wandler nicht in Begrenzung geht. Insbesondere bei größeren Veränderungen von GAIN und OFFSET besteht diese Gefahr.

weiter zur Programmierumgebung


Controller S320 Handbuch - Programmierumgebung

 3. Programmierumgebung des Controller S320

Zur Programmierung des Controller S320 werden die im Lieferumfang enthaltenen Softwarewerkzeuge benutzt.

Nach dem Einlegen der CD startet automatisch ein Installationsprogramm, bei dem Sie aus drei Optionen auswählen können.

1. Installation der Entwicklungsoberfläche auf Ihren PC
2. Die TetraTec Web-Seiten offline direkt von der CD in Ihrem Browser darstellen.
3. Übersicht über Neuerungen.

Sollte das Installationsprogramm nicht automatisch starten, öffnen Sie bitte den Ordner für Ihr CD-Laufwerk und starten Sie installs320.exe durch Doppelklicken.

3.1 Die Entwicklungsoberfläche

Zur rationellen Programmentwicklung steht eine leistungsfähige graphische Entwicklungsumgebung für den PC zur Verfügung. Die Programmierumgebung übernimmt die Kommunikation mit dem Controller S320 über eine serielle Schnittstelle am PC oder über eine Netzwerkverbindung.
Ein Verbindungskabel für die serielle LINK Verbindung ist im Lieferumfang enthalten und wird am Controller S320 an der mit LINK bezeichneten Buchse angeschlossen. Zum Anschluss an ein Netzwerk wird ein normales Netzwerkkabel benötigt.

Innerhalb der Programmierumgebung werden die Programme für den Controller S320 erstellt, übersetzt und auf den Controller S320 übertragen. Weiterhin kann der Controller S320 hiermit gestartet und angehalten werden. Zusätzliche Dienste wie zum Beispiel das Stellen der Systemuhr oder das Rücklesen der Programmquellen werden ebenfalls innerhalb der Programmierumgebung zur Verfügung gestellt.

Innerhalb des Hauptfensters sind sämtliche Einstellungen mittels den üblichen Menüs zu erreichen. Die für die tägliche Praxis wichtigsten Aktionen können rasch über die Funktionen des S320 Launchpads erreicht werden, das beliebig auf dem Bildschirm plaziert werden kann.

Jedes einzelne Teilfenster durch den Befehl Options > Float Selected oder Float Current innerhalb des Launchpads abgesetzt und ebenfalls beliebig auf dem Bildschirm positioniert werden. So sehen Sie auch bei komplexen Projekten alles wichtige auf einen Blick.

Für die Programmentwicklung können Sie innerhalb des Hauptfensters folgende Teilfenster aktivieren:

3.1.1 Build

In diesem Fenster erfolgt die eigentliche Programmentwicklung.

Hier werden alle Quelldateien aus denen das ausführbare Programm kompiliert und gelinkt wird angezeigt. Dieses Fenster besteht im wesentlichen aus 2 Teilen. Im oberen Bereich wird die Datei-Liste aller Quelldateien angezeigt und im unteren Bereich ist die Datei-Anzeige in der der Inhalt der Dateien angezeigt wird.

Datei-Liste:

Der wesentliche Vorteil dieser Anzeige ist, daß Sie jederzeit alle Dateien die von Ihrem Projekt benutzt werden sehen und Sie direkten Zugriff auf die Dateien haben.

Die Dateisymbole werden in verschiedenen Farben dargestellt. Dateien im aktuellen Verzeichnis sind blau, alle anderen Dateien sind gelb. Eine Datei die nur gelesen werden kann wird rot dargestellt.

HINWEIS: Nach der Installation der Include-Dateien oder auch der Demo-Dateien von CD wird in der Regel automatisch das Attribut 'schreibgeschützt' gesetzt und die Dateien daher rot dargestellt. Falls die Dateien geändert werden sollen muss zunächst die Dateieigenschaft 'schreibgeschützt' deaktiviert werden.

Falls eine Datei nicht gefunden wurde, wird ein Fragezeichen dargestellt. Wenn Sie eine solche Datei selektieren erscheint folgender Dialog wo Sie gefragt werden wie mit dieser Datei verfahren werden soll.

Hier gibt es zwei Such-Möglichkeiten die im wesentlichen identisch sind. Der Unterschied besteht darin, daß im einen Fall der Pfad spezifisch für das aktuelle Projekt ist und im anderen Fall der Pfad global (siehe Global Settings) , also auch für andere Projekte übernommen wird. Wenn Sie sicher sind, dass die Datei noch nicht existiert, z.B. weil Sie eine neue Include Anweisung in Ihr Projekt eingefügt haben (siehe Beispiel Programm), klicken Sie auf "Create a New File". Damit wird eine neue Datei erzeugt die nur eine Kommentarzeile mit dem Namen der Datei enthält. Falls Sie sich nicht sicher sind was Sie mit dieser Datei machen sollen können Sie die Aktion abbrechen.

Datei-Anzeige:

In diesem Fenster sehen Sie normalerweise den Inhalt der ausgewählten Datei. In diesem Fenster können Sie mit den Cursor Tasten blättern und sich die Datei ansehen. Änderungen der Datei können in diesem Fenster nicht vorgenommen werden. Zum Ändern der Datei können Sie einen Editor Ihrer Wahl benutzen (siehe Global Settings um die Default Einstellung zu ändern) . Um den Editor zu öffnen klicken Sie einfach in das Anzeige Fenster oder doppel klicken Sie direkt auf die Datei in der Datei-Liste. Ein einfacher Klick auf eine Datei in der Datei-Liste zeigt deren Inhalt in der Datei-Anzeige an.

Der Name und der Pfad der Datei die aktuell im Anzeige Fenster angezeigt wird, steht in der oberen Statuszeile des Fensters.

Im Anzeige Fenster werden aber noch mehr Informationen angezeigt. Nachdem Sie ein Programm geschrieben haben (es ist kein Problem falls Sie noch nicht damit begonnen haben. Folgen Sie einfach dem Beispiel Programm das etwas später beschrieben wird) werden Sie das ausführbare Programm erzeugen. Das können Sie tun indem Sie das Symbol mit Hammer und Schraubendreher aus der Symbolleiste anklicken oder über das Hauptmenü Build -> Make. Wenn das Programm erfolgreich übersetzt werden konnte, erscheint in der Statuszeile die Meldung "Compiled ok". Im Anzeige Fenster sehen eine Statstik über den Speicherbedarf Ihrer Anwendung. (Diese Statistik zeigt Ihnen den Speicherbedarf für den Code, die Daten, die Konstanten sowie RAM/ROM persistente Daten an.) Glückwunsch.

Haben Sie jedoch ein neues Programm geschrieben und einen kleinen Fehler übersehen, wird nun dieser Fehler in der Datei-Anzeige angezeigt. In der Datei-Listen Anzeige erhalten Sie genaue Informationen über die Art und Stelle des Fehlers. Es wird immer nur ein Fehler angezeigt, da der Compiler beim ersten Fehler abbricht. Falls der Compiler noch Warnungen ausgibt kann die Liste auch länger sein. Wenn Sie nun die Warnungen anklicken wird der entsprechende
Programmcode in der Datei-Anzeige angezeigt. Ein Doppelklick auf den Fehler in der Fehlerliste öffnet die Datei im Editor (und falls Ihr Editor es unterstützt, siehe Global Settings, wird auch direkt auf die fehlerhafte Zeile positioniert)

Zu guter letzt, kann in der Datei-Anzeige auch das Code- oder Assembler-Listing, das über Build -> Make Assembler Listing oder Build -> Make Code Listing erzeugt wird, angezeigt werden. Diese Dateien können jedoch sehr schnell zu groß werden um noch in diesem Fenster dargestellt zu werden (die maximale Dateigröße beträgt ca. 65000 Zeichen). Trotzdem können Sie mit einem Doppelklick in das Fenster Ihren Editor öffnen. (Dabei müssen Sie darauf achten, dass der Editor nicht das Windows eigene "notepad" ist, da dieser Editor ebenfalls nur Dateien kleiner als 65000 Zeichen öffnen kann). Der aktuelle Zustand der spx Datei kann jederzeit in der Statuszeile des Hauptfensters kontrolliert werden.

Refresh Kommando:

Die Struktur Ihres Programms wird direkt den Quelldateien entnommen. Wenn Sie eine andere Datei einfügen wollen müssen Sie die Datei in der diese Datei eingefügt werden soll editieren und eine Include Anweisung z.B.: INCLUDE "newfile" einfügen. Natürlich würde es zuviel Rechenleistung kosten, alle Quelldateien ständig auf Änderungen zu überprüfen um die Datei-Liste zu aktualisieren. Daher haben Sie die Möglichkeit über das Build->Refresh Kommando manuell zu aktualisieren. Eine weitere Möglichkeit für die Änderung der Struktur Ihres Programms ist, daß Sie z.B. einen neuen projektspezifischen Pfad hinzugefügt haben. Auch hier können Sie wieder über Build ->Refresh oder über das Symbol in der Symbolleiste die Anzeige aktualisieren.

Projektspezifische Pfade ermöglichen es Ihnen Ihr Projekt hierarchisch zu strukturieren. Wenn Sie verschiedene Programme entwickeln, werden Sie schnell sehen, daß der Code aus dem einen Programm auch für ein anderes Programm verwendet werden kann. Andererseits ist dieser Code aber nicht so generell, daß Sie ihn in jedem Projekt verwenden können und somit den Include-Pfad nicht als Standard Include Pfad setzen wollen (siehe Global Settings). Oberhalb der Dateiliste sehen Sie einen blauen Balken mit dem Text "Projekt specific Paths". Dort wird in Klammern angezeigt wie viele Pfade spezifisch zu diesem Projekt definiert sind. Es gibt immer mindestens einen solchen Pfad nämlich der Pfad in dem Ihre spc Datei steht. Links neben dem Balken sehen Sie einen kleine Pfeil. Wenn sie diesen Pfeil anklicken wird die komplette Pfadliste angezeigt. Hier können Sie Pfade hinzufügen, ändern oder auch löschen.

Explorer Kommando:

Das Explorer Kommando des Menüs bzw. aus der Symbolleiste öffnet den Explorer des Betriebssystems im aktuellen Arbeitsverzeichnis. So haben Sie Ihre bekannte Umgebung für Dateioperationen, also z.B. Kopieren und Löschen von Dateien. Das Anlegen von Dateien für Ihr Projekt führen Sie am besten wie im Beispiel Programm beschrieben durch.

Grep Kommando:

Mit diesem Kommando können Sie Ihre Spell Quellen nach Texten durchsuchen. Dieser Text wird dann in allen Dateien auch den Include Dateien gesucht. Wenn Sie einen bestimmten Code Abschnitt suchen ober zuviele Treffer in Kommentaren haben, können Sie mit dem Schalter "Skip Comments" das Suchen auf den reinen Code beschränken.

Die anderen Optionen sind "Local Files only" die die Suche auf die Dateien im aktuellen Arbeitsverzeichnis beschränkt (z.B. das Homeverzeichnis Ihrer aktuellen spc Datei), über "Ignore case" können Sie entscheiden ob bei der Suche Gross-/Kleinschreibung unterschieden werden soll. Normalerweise bleibt diese Einstellung unverändert, da Spell selbst auch keine Unterscheidung zwischen Gross- und Kleinschreibung vornimmt.

Nach einer Suche erhalten Sie eine Liste mit allen Übereinstimmungen. Ein Doppelklick öffnet die enstprechende Datei und falls Ihr Editor es unterstützt, siehe Global Settings, wird auch direkt auf die entsprechende Zeile positioniert.

Copy files Kommando:

Wenn Sie ein komplexes Projekt kopieren wollen, kann es sehr aufwendig sein alle Dateien einzeln zu kopieren. Daher bietet Ihnane das S320 Programm das Kommando Build->Copy Files. Diese Kommando öffnet einen Browser der Ihnen die Auswahl des Zielverzeichnisses ermöglicht. Wenn Sie ein Verzeichnis ausgewählt haben werden alle Dateien Ihres aktuellen Projekts (inklusive aller Dateien in Unterverzichnissen) in dieses Verzeichnis kopiert. Dabei geht die hierarchische Struktur des Projekts verloren.
Anmerkung: spp-Bibliotheken werden als Teil des Systems betrachtet und daher weder angezeigt noch kopiert.

3.1.2 Exec

In diesem Fenster wird der Aufbau der compilierten spx-Datei angezeigt. Auch können die in der spx-Datei enthaltenen Programmquellen hier wieder entpackt werden. Desweiteren kann die bei einem Laufzeitfehler vom Fehlerhandler gelieferte Fehlernummer aufgelöst werden. Nach Eingabe der Fehlernummer wird die Fehlerzeile, die den Laufzeitfehler ausgelöst hat, angezeigt.

3.1.3 Config

In diesem Fenster sehen Sie die Hardware Konfiguration des S320 Controllers. Die Konfigurationsdatei hat die Endung *.cfg. Ein Doppelklick in der Datei-Anzeige öffnet die Datei zum editieren.
Die möglichen Aktionen für die Konfiguration sind: Senden, Herunterladen sowie die Prüfung auf Fehler (Debug Configuration).

Im Config Menü finden Sie noch einige weitere Aktionen die die Konfiguration betreffen:

Test I/O:

Der Menü-Punkt Config->Test I/O ermöglicht Ihnen die gleichzeitige Kontrolle aller Analog- und Digitalsignale.

Calibrate Analog Port:

Der Menü-Punkt Config->Calibrate Analog port startet einen Assistenten der Sie Schritt für Schritt bei der Kalibrierung unterstützt:

  1. Auswahl des Anschlusses:
    Der erste Schritt ist die Auswahl des Anschlusses den Sie kalibrieren wollen. Sie sehen die Liste der Anschlüsse die in der aktuellen Konfiguration definiert sind. Durch anklicken des entsprechenden Buttons entscheiden Sie ob Sie einen Analog Ein- oder Ausgang kalibrieren wollen. Danach können Sie den Anschluss auswählen.
  2. Auswahl des Signal Bereichs:
In diesem Fenster sehen Sie die aktuelle Konfiguration. Diese Anzeige ist nur zur Kontrolle und hat für die weitere Kalibrierung keine Bedeutung.

Sie müssen nun den physikalischen Bereich für die Kalirierung, z.B, 0.0 für die untere und 10.0 für die obere Grenze für den Signal Bereich 0 - 10 Volt angeben.

Falls Sie einen Eingang kalibrieren, z.B. für einen Drucksensor, können Sie direkt den Druckbereich angeben., also z.B. 0 und 10 bar Absolutdruck. Natürlich gibt es hier eine Vielzahl von Einstellungen entsprechend der Vielfalt der verschiedenen Drucksensoren.

Falls Sie einen Ausgang kalibrieren wollen haben Sie mehr Einstellmöglichkeiten. Der physikalische Signal Bereich korrespondiert zum erwarteten Ausgangssignal, entweder in Volt (z.B. 0..10 Volt) oder in mA (z.B. 4..20 mA). Ein zweites Wertepaar definiert den Bereich, der programmintern den Ausgangswert repräsentiert. Dieser Wert kann identisch sein also z.B. 0..10 Ausgabewert entspricht 0..10 Volt. Oft ist es aber einfacher mit einem normierten Wert von 0..1 zu arbeiten, so daß das Programm unabhängig vom physikalischen Ausgabebereich ist.

  3. Bestimmen des akuellen Bereichs:
    Bei der Kalibrierung eines Eingangs müssen Sie dem Programm nun mitteilen, welcher Messwert welchem Einganswert entspricht, D.h. Sie brauchen eine externe Referenz. Beim Kalibrieren eines Ausgangs unterscheidet sich das Vorgehen wesetlich:

    Zur Bestimmung des Eingangswerts schliessen Sie eine externes Signal (z.B. von einem Signal Generator) an den Eingang an. Verändern Sie nun den Eingangswert so, daß er dem phyikalischen Wert aus Punkt 2 entspricht. Dann drücken Sie den Button "Set Upper" um den aktuellen Eingangswert (wird oben im Fenster angezeigt) als oberen Wert zu übernehmen. Für den unteren Wert verfahren Sie entprechend und kommen dann zu Punkt 4.

    Zur Bestimmung des Ausgangswerts brauchen Sie ein externes Volt- oder Amperemeter. Schliessen dieses an den Analogausgang an. Drücken Sie nun den Button "Set Upper" und lesen Sie den Wert auf Ihrem Messgerät ab. Diesen Wert müssen Sie im Eingabefeld "Upper Range" eintragen. Dann drücken Sie den Button "Set Lower" und tragen Sie wiederum den angezeigten Wert im Eingabefeld "Lower Range" ein. Danach gehts weiter mit Punkt 4.

  4. Ergebnis der Kalibrierung:
In der Anschluss Combo Box können Sie sich alle Anschlüsse ansehen, die Sie seit dem Starten des Assistenten neu kalibriert haben. Im Gain und Offset Fenster sehen Sie die neuen Konfigurationswerte.

Der Button "Calibrate another Port" bringt Sie zurück zu Punkt 1. Die Werte der vorherigen Kalibrierung werden natürlich zwischengespeichert. Wenn Sie wollen, daß die Konfiguration beim Beenden des Assistenten automatisch gespeichert wird klicken Sie "Modify Configuration File" an.

Achtung: dabei wird die Datei die in Ihrem S320 Controller gespeichert ist geändert! Achten Sie darauf, daß diese Dateien kompatibel sind oder machen Sie die Änderungen manuell.

3.1.4 SystemMsg

Hier werden Systemmeldungen vom Controller S320, die z.B. nach dem Boot-Vorgang gesendet werden, angezeigt. Auch nach einem Laufzeitfehler lohnt sich ein Blick auf dieses Fenster.

3.1.5 UserMsg

Innerhalb dieses Fensters können Sie mit dem Controller S320 über die Link-Schnittstelle kommunizieren. Diese Nachrichten eignen sich hervorragend für Debug-Zwecke. In der Programmierumgebung stehen für die Kommunikation unter anderem die Funktionen 'TermSendMsg' und 'TermReceiveMsg' zur Verfügung. Ein kleines Beispielprogramm 'DemoTermSer0' erläutert den Umgang mit den Benutzer-Nachrichten.

3.1.6 CommMsg

Im Unterschied zu UserMsg arbeitet dieses Fenster mit einer zweiten Verbindung zum S320 Controller. Diese Verbindung kann entweder eine serielle oder eine Netzwerkverbindung sein. Die Einstellung dieser Verbindung finden Sie unter GlobalSettings->Comm. Dieses Fenster stellt im Prinzip ein unabhängiges kleines ASCII-Terminalprogramm zur Verfügung, das Sie auch für andere Anwendungen benutzen können.

Wenn Sie z.B. mit der seriellen Schnittstelle Ser0 am Controller S320 kommuniziert wollen. Verbinden Sie die zweite COMx Schnittstelle am PC über ein 1:1-Kabel DSK9/2 mit der Schnittstelle Ser0 am Controller S320. Das Beispielprogramm 'DemoTermSer0' benutzt ebenfalls die Schnittstelle Ser0.

3.1.7 Graph

Der Controller S320 kann - nicht zuletzt aus rein mechanischen Erwägungen heraus - keinerlei grafischen Elemente darstellen oder visualisieren. Dennoch ist es oft von Vorteil, Messwerte grafisch anzeigen zu können. Ab der Version 3 gibt es nun die Möglichkeit, Messwerte des Controllers S320 ohne weitere Zusatzgeräte direkt innerhalb der Entwicklungsumgebung darzustellen.

Bei der Darstellung der Messwerte haben Sie die Wahl zwischen 'Kennlinienschreiber' und 'YX-Plotter'. Die Demoprogramme 'DemoGraph' und 'DemoPlot' verdeutlichen die Vorgehensweise. Der Datenaustausch erfolgt über die Linkschnittstelle.

Kennlinienschreiber:

Die darzustellenden Werte - dies können Messwerte oder auch berechnete Werte sein - werden vom Controller über einige vordefinierte Befehle via Linkschnittstelle an die Entwicklungsumgebung gesendet und von dieser grafisch dargestellt.

Eine Variante ist der populäre Kennlinienschreiber. In der Controller S320 Version arbeitet der Schreiber mit bis zu 6 Kanälen in verschiedenen Farben. Die zusätzlichen Programmfunktionen des Kennlinienschreibers können mit wenig Aufwand in eigenen Programmen implementiert werden. Die Vorgehensweise für den Kennlinienschreiber wird im Programmbeispiel 'DemoGraph' ausführlich erläutert.

Und so testen Sie die Funktion Kennlinienschreiber:

1. Laden Sie die Datei 'DemoGraph.spc' und 'DemoGraph.cfg' in die Entwicklungsumgebung.
2. Compilieren Sie die spc-Datei, z.B. mit Ctrl+M.
3. Überspielen Sie die spx-Datei, z.B. mit Exec > Send Executable
4. Überspielen Sie die cfg-Datei, z.B. mit Config > Send Config
5. Starten Sie das Programm, z.B. mit F9
6. Öffnen Sie das Teilfenster Graph
7. Starten Sie die Ausgabe mit Enable Graph
8. Nach jedem Enable Graph bzw. Disable Graph wechselt die Darstellung von horizontal nach vertikal.
9. Mit List View können Sie die der Grafik zu Grunde liegenden Zahlen mitverfolgen bzw. mit Graph View wieder auf die Grafik zurückschalten.

Plottfunktion:

Mit der Plottfunktion wird der bekannte XY-Plotter vom Controller S320 innerhalb der Entwicklungsumgebung simuliert. Die Vorgehensweise ist ähnlich wie bei der zuvor beschriebenen Funktion Kennlinienschreiber. Auch hierfür steht ein Beispielprogramm "DemoPlot" zur Verfügung, das den Umgang mit den Plottfunktionen erläutert. Das Beispielprogramm zeichnet konzentrische Quadrate in verschiedenen Farben.

Und so testen Sie die Plotfunktion:

1. Laden Sie die Datei 'DemoPlot.spc' und 'DemoPlot.cfg' in die Entwicklungsumgebung.
2. Compilieren Sie die spc-Datei, z.B. mit Ctrl+M.
3. Überspielen Sie die spx-Datei, z.B. mit Exec > Send Executable
4. Überspielen Sie die cfg-Datei, z.B. mit Config > Send Config
5. Starten Sie das Programm, z.B. mit F9
6. Öffnen Sie das Teilfenster Graph
7. Starten Sie die Ausgabe mit Enable Graph

3.1.8 Statuszeile

In der Statuszeile wird der Status der Link-Verbindung, der Comm-Verbindung des integrierten Terminalprogrammes und der Status des compilierten Codes dargestellt.

3.1.9 Launchpad

Duch das Launchpad sind alle wichtigen Direktbefehle ohne Menüaufrufe verfügbar. Das Launchpad können Sie durch Klicken auf den blauen Pin vom Hauptfenster ab- und wieder ansetzen bzw. durch die Option Options->Launchpad ein- bzw. ausschalten. Mit dem Button 'Float Current' kann das aktuelle Teilfenster beliebig auf dem Bildschirm positioniert werden.
Ganz oben in diesem Fenter sehen Sie die Version des Controllers. Diese Version ist natürlich nur gültig wenn auch eine Link-Verbindung zum S320 Controller besteht. Wenn sie Offline arbeiten wird hier die Version angezeigt die Sie unter Global Settings->Misc einstellen können.
Mit den Buttons Connect Link bzw. Connect Comm können Sie die Verbindungen aufbauen oder schließen. Durch Klicken auf das Icon können Sie den Verbindungstyp zwischen Seriell und Netzwerk umschalten.
Das Launchpad erlaubt auch direkten Zugriff auf die Konfiguration cfg, auf die Programmquellen spc und auf den compilierten Code spx. Durch Klicken auf ein Feld wird direkt das zugehörige Teilfenster aktiviert. Dateien können Sie hier auch per Drag&Drop laden. Die Funktion der Direktbefehle werden durch eingeblendete Hilfetexte erläutert.

3.1.10 Netzwerk Konfiguration

Der S320 Controller ab Version 4 hat auch eine Netzwerkschnittstelle.
Die Controller Konfiguration finden Sie unter System->Network_Configuration. Zur Konfiguration muss eine Linkverbindung zum Controller bestehen.

Die Einstellungen im einzelnen:

  • General
Hier können Sie die IP-Adresse und die Netzmaske des Controller-Interfaces einstellen. Falls Sie einen Nameserver haben, können Sie diesen ebenfalls hier eintragen.
Ausserdem können Sie hier die Netzwerkschnitstelle aktivieren bzw. deaktivieren.
  • Routing
In diesem Fenster können Sie bis zu 5 statische Routen eingeben
  • Syslog
Um Meldungen des Controllers an einen anderen Rechner zu senden, können Sie hier den Syslog konfigurieren. Um dies zu nutzen baruchen Sie einen Rechner der diesen Dienst zu Verfügung stellt.
  • HTTP
Der Controller kann auch einen kleinen HTTP-Server zur Verfügung stellen. Damit haben Sie die Möglichkeit auf Daten die auf dem Controller abgelegt sind über Ihren Web-Browser zuzugreifen. An dieser Stelle geben Sie an wieviele gleichzeitige Verbindungen Sie zulassen wollen.
3.1.11 S320 Filesystem

Der S320 Controller ab Version 4 bietet Ihnen ein Filesystem auf dem Sie Daten speichern können.
Mit S320File->Explore starten Sie den Explorer. Auf der linken Seite sehen Sie die Dateien die auf Ihrem Rechner und auf der rechten Seite die Dateien die auf dem Controller gespeichert sind. Über die Buttons oberhalb der Dateilisten können Sie die Verzeichnisse wechseln. Auf dem Controller existieren fest die Verzeichnisse "www" und "dat". Im "www" Verzeichnis können Sie die Daten ablegen die über den HTTP-Server erreichbar sein sollen. Das "dat" Verzeichnis ist gedacht als allgemeines Datenverzeichnis.
Um Dateien zu kopieren müssen Sie diese zunächst markieren. Mit dem ">>" Button werden Dateien zum Controller übertragen oder mit dem "<<" Button vom Controller auf Ihren Rechner kopiert. In beiden Fenstern steht Ihnen über die rechte Maustaste ein Kontext-Menü zur Verfügung über das Sie Dateien umbenennen oder löschen können.
Wenn Sie Dateien zum Controller übertragen, werden diese zunächst im RAM des Controllers gespeichert, da das Übertragen in das interne ROM nicht sehr schnell ist. Über den Button "Flush" werden die Dateien in das interne ROM übertragen. (Wo eine Datei aktuell gespeichert ist sehen Sie im Controller Fenster in der Spalte "Loc."). Diese Funktion wird automatisch aufgerufen wenn Sie Änderungen gemacht haben und den Explorer verlassen oder wenn Sie mehrere Dateien übertragen und der interne RAM Puffer nicht mehr ausreicht alle Dateien zu halten.

3.2 Konfiguration der Oberfläche (Global Settings)

Die Software wird für die meisten Systeme bereits passend vom Installationsprogramm eingerichtet. In einigen Fällen kann es erforderlich sein, für die Schnittstellen oder abweichende Einstellungen zu konfigurieren. Aufruf des Konfigurationsmenü durch Options->Global_Settings

Kontrollieren Sie bitte in jedem Fall die Einstellung für die Link-Schnittstelle im Hauptmenü: Options->Global_Settings->Link.

Ab Version 4 des S320 Terminal Programms (s320.exe) werden die Einstellungen in einer INI-Datei gespeichert und nicht mehr in der Registry.
Bei der Installation werden Sie gefragt ob alle Benutzer mit denselben Einstellungen arbeiten sollen oder ob jeder Benutzer eigene Einstellungen haben soll.
Wenn alle Benutzer mit denselben Einstellungen arbeiten sollen wird die INI-Datei im S320-Programmverzeichnis angelegt. In diesem Fall ist darauf zu achten, daß alle Benutzer auch Schreibrechte in diesem Verzeichniss besitzen, da Änderungen sonst nicht gespeichert werden können.
Wenn jeder Benutzer eigene Einstellungen haben soll wird beim ersten Start des Programms (pro Benutzer) im Pfad %APPDATA%\Tetratec\S320 die Datei s320term.ini angelegt. Wenn die INI-Datei vom Programm neu angelegt wird erhalten Sie eine entsprechende Meldung.
Das Programm sucht beim Start immer zuerst ob eine benutzerspezifische INI-Datei vorhanden ist. Wenn Sie bei der Installation die Benutzung einer globalen INI-Datei ausgewählt haben, können Sie nachträglich durch anlegen des Verzeichnisses %APPDATA%\Tetratec\S320 und kopieren der globalen INI-Datei in dieses Verzeichnis für einzelne Benutzer auch benutzerspezifische Einstellungen ermöglichen.

HINWEIS: APPDATA ist ab Windows 2000 eine Umgebungsvariable in der der Pfad für benutzerspezifische Programmdaten steht. Sollten Sie noch mit Windows NT 4.0 arbeiten ist die Variable USERPROFILE zu verwenden.

Die einzelnen Einstellungen im Detail:

  • Editor
Hier stellen Sie den Editor Ihrer Wahl ein. Standardmässig ist hier das 'Notepad' eingetragen, das mit dem Windows System mitgeliefert wird. Der beste Editor ist natrlich der mit dem Sie sich am besten auskennen. Fall Sie sich noch nicht entschieden haben, empfehlen wir Ihnen 'UltraEdit'. Für diesen Editor können wir Ihnen eine kostenlose Erweiterung für 'Syntax Highlighting' für spell anbieten. Der Editor selber ist jedoch nicht kostenlos (und leider auch nicht von TetraTec).
Die Argumente dienen dazu beim Editor-Aufruf die zu öffnende Datei und (falls von Editor unterstützt) die Zeilennummer auf die plaziert werden soll zu übergeben. Da der Aufruf von Editor zu Editor unterschiedlich ist, köennen Sie hier die Kommandozeile angeben. Es existieren zwei Schlüsselworte für den Dateiamen und für die Zeilennummer:

%FILE wird duch den Dateiname ersetzt
%LINE wird durch die Zeilennummer ersetzt

alle anderen Zeichen werden unverändert übernommen. Der korrekte Aufruf für UltraEdit ist demnach:

"%FILE/%LINE"

und für den Notepad, da dieser Editor keine Zeilenummer akzeptiert:

%FILE

HINWEIS: Diese Einstellungen haben sich in der Version 4 des S320 Programms grundlegend geändert.

  • Include
Hier geben Sie die Standard Include Pfade an.

Da sich die Include Dateien bei den Controller Versionen 3 und 4 wesentlich unterscheiden müssen diese hier für jede Version eingeben.

Der Compiler durchsucht die Pfade in der Reihenfolge: 1. aktuelles Verzeichnis, 2. Projekt-Verzeichnisse, 3. Standard Verzeichnisse. Die Standard Verzeichnisse werden in der reihenfolge durchsucht wie sie hier angebenen sind. Mt den Pfeil-Buttons können Sie die Reihenfolge ändern. Um neue Verzeichnisse hinzzufügen können Sie den "Browse-Button" benutzen. oder den Pfad direkt in der Eingabezeile eingeben. Anmerkung: der eingegebene Pfad wird nicht durch Ok
zum direkten verlassen des Menüs, sondern nur durch klicken des Add-Buttons übernommen.

  • Compiler
Das S320 Programm ruft einen externen Compiler auf. Hier können sie das Compiler -Verzeichnis und den Dateinamen des Compilers angeben. Da auch hier unterschiedliche Versionen für die unterschiedlichen Versionen existiere, müssen Sie diese einzeln angeben. Der Button "CheckVersion" erlaubt Ihnen die Version des eingegebenen Compilers abzufragen.

Die Compiler Optionen ermöglichen es Ihnen zu bestimmen, ob die Quellen mit dem ausführbaren Code zusammengepackt und im S320 Crontroller gespeichert werden. So haben Sie selbst nach Jahren die passenden Quellen zu Ihrem Programm. Die 3 Warnstufen ermöglichen es Ihnen zu entscheiden wie genau Ihr Code geprüft wird. Wir empfehlen immer die höchste Warnustufe zu benutzen, ausser es gibt gute Gründe dies nicht zu tun.

  • Listing
Die Listing Option betrifft das Kommando: Build->Make Assembler Listing und bestimmt den Umfang der Informationen die Sie erhalten.
  • Comm
Hier stellen Sie die Verbindungs-Parameter für das Kommunikations-Fenster "CommMsg" ein. Dies ist ein konventionelles ASCII-Terminal.

Ab Controller Version 4 können Sie entscheiden ob dies eine Netzwerk-Verbindung oder eine serielle Verbindung über das Ser0 Interface ist. Über den "Radio Button" RS232 bzw. Network können Sie die Standard Einstellung bestimmen. Diese Einstellung kann sehr einfach über das "LaunchPad" geändert werden.

RS 232 Verbindung:

Der COM port ist der serielle Anschluss Ihres PCs den Sie für die Verbindung mit dem S320 Controller verwenden.

Die Baudrate, der Parameter "frame", das Hardware Handshake und der "termination character" muss mit der Konfiguration Ihres S320 Controllers übereinstimmen.

Die Baudrate ist die Übertragungsgeschwindigkeit. Die Standard-Einstellung des S320 Controllers ist 9600 baud.

Die Interface Parameter (Daten Bits, Parity, Stop Bits) sind in der allgemein üblichen Form angegeben, z.B.: 8N1. Mögliche Werte für Daten Bist sind 5, 6, 7, oder 8. Mögliche Werte für Parity sind; N (None), O (Odd), E (Even) und M (Mark). Mögliche Werte für StopBits sind 1 oder 2. Die Standard Einstellung des Controllers sind 8 Daten Bits, kein Parity und 1 StopBit (8N1). "RTS/CTS" ist das Hardware Handshake Protokoll für das RS232 Interface für das Ser0 Interfcace das im Controller standardmässig ausgeschaltet ist.

Der "termination value" ist des ASCII Code der als Ende Kennung eines daten Pakets verwendet wird.
Dies ist normalerweise ein "line feed" (LF = 10 = $0A) oder ein "carriage return" (CR = 13 = $0D). Alternativ können Sie hier jedes andere Zeichen z.B. ">" für spezielle Kommunikations-Protokolle angeben. Die Standard-Einstellung ist "carriage return": 13. Diese Einstellung ist natürlich nur sinnvoll bei ASCII- und nicht bei Binär-Protokollen (Beachten sie auch das Kapitel: Serielles Interface der
Bibliotheks-Beschreibung)

Netzwerk Verbindung:

Im Feld "Name" oder "IP" können Sie den Hostnamen oder die IP-Adresse des Controllers mit dem Sie eine Verbindung aufbauen möchten angeben. Das Port Feld zeigt den IP-Port über den der Controller Verbindungen annimmt. Der "Ping-Button" ermöglicht Ihnen zu prüfen ob der Controller erreichbar ist.

Allgemeine Einstellungen:

Über die Option "Local echo" können Sie entscheiden ob die gesendeten Daten auch im Terminal Fenster ausgegeben werden sollen.

Der Parameter "delay per line in milliseconds" ist für Datei Übertragungen interessant. Damit können Sie die Übertragungsgeschwindigkeit reduzieren um dem S320 Controller Zeit zu geben die empfangenen Daten zu verarbeiten. Ob dies nötig ist hängt davon ab wie die SOftware auf dem Controller progammiert ist. Normalerweise stört ein Verzögerung von ein paar Millisekunden nicht.

  • Link
Hier befinden sich die Einstellungen für die Verbindung mit Ihrem PC und der Link Schnittstelle des S320 Controllers, d.h. der Programmier- und Kontrollverbindung zum S320Controller. Sollten Sie keine Verbindung zu Ihrem S320 Controller bekommen, z.B. über Connect->Link Connect oder Ctrl+L
ist dies die Stelle die Sire kontrollieren müssen.

Wie schon bei den Comm Einstellungen können Sie auch hier wählen ob Sie die Verbindung über das RS232 Interface oder über das Netzwek herstellen wollen.

RS 232 Verbindung:

Der COM-Port ist der serielle Anschluss Ihres PCs den Sie für die "link" Verbindung mit dem S320 Controller benutzen.

Die Baudrate ist die Übertragungsgeschwindigkeit, die Standardeinstelling des S320 Controllers ist 38400 baud

Netzwerk Verbindung:

Im Feld "Name" oder "IP" können Sie den Hostnamen oder die IP-Adresse des Controllers mit dem Sie eine Verbindung aufbauen möchten angeben. Das Port Feld zeigt den IP-Port über den der Controller Verbindungen annimmt. Der "Ping-Button" ermöglicht Ihnen zu prüfen ob der Controller erreichbar ist.

Allgemeine Einstellungen:

Der Parameter "boot autpmatically after the transfer of a new operating system" bestimmt ob der Controoler nach der Übertragung eines neuen Betirebssystems neu gestartet wird. Da Sie immer zur Aktivierung eines neuen Betriebssystems den Controller neu starten müssen, lassen Sie diese Option am besten aktiviert.

  • Misc
Hier können Sie die Version angeben die benutzt werden soll wenn Sie keine Verbindung zum Controller haben. Ausserdem können hier der Font z.B. für die Terminal Ausgaben, sowie das Flag das das Verhalten des Kommandos "Build->Copy Files" bzgl. der Standard Bibliotheken bestimmt geändert werden.
  • Graph
Präsentation und Skalierung der Achsen der Graph - und Plot-Funktion können hier eingestellt werden.
  • Manual
Pfad zu den lokalen html-Dateien des Controller S320 Handbuches.

3.3 Aufbau der Linkverbindung

Es gibt verschiedene Möglichkeiten eine Linkverbindung mit Ihrem S320 Controller herzustellen. Controller Version 3 unterstützt nur die serielle Verbindung. Controller Version 4 unterstützt sowohl die serielle als auch eine Netzwerk Verbindung.

Serielle Verbindung:
Hardwareseitig benötigen Sie für die Verbindung Controller S320 Linkschnittstelle zu einer funktionierenden seriellen COMx-Schnittstelle Ihres PC das im Lieferumfang enthaltene Linkkabel LINK. Technische Daten zur Linkschnittstelle finden Sie im Kapitel Technische Daten.

Netzwerk Verbidung:
Verbinden Sie einfach Ihren Controller mit Ihrem internen Netzwerk.

Zum Aufbau der Linkverbindung betätigen Sie im Launchpad den Button Connect Link oder Ctrl+L oder den Menüpunkt Connect->Link Connect. Überprüfen Sie ggf. die Einstellungen im Menü Options->Global Settings->Link. Viele Menüpunkte sind erst nach einem korrekten Aufbau der Linkverbindung sinnvoll und damit verfügbar. Sie können die Linkverbindung z.B. durch Connect->Link Check bzw. Ctrl+Shift+L oder auch mittels Command->Get System Info testen.

Mit dem AutoBaud Mechanismus im Menü Connect->Link Autobaud bzw Ctrl+A wird die aktuell am Controller S320 eingestellte Baudrate der Linkschnittstelle automatisch ermittelt. Die Standardeinstellung ist 38400 Baud.

HINWEIS: Falls die Linkverbindung nicht erwartungsgemäß aufgebaut wird ist eine mögliche Ursache das kontinuierliche Senden von Daten des Controller S320 an den PC über die Funktion TermSendMsg. In diesem Fall kann die serielle Schnittstelle nicht initialisiert werden. Abhilfe: Controller S320 neu starten und bis zum Ende des Selbsttestes die Tasten Up und Down gleichzeitig gedrückt halten. Das Spell-Programm wird dann nicht gestartet.

3.4 Aufbau der seriellen Verbindung

Auch hier gibt es verschiedene Möglichkeiten eine Comm-Verbindung mit Ihrem S320 Controller herzustellen. Controller Version 3 unterstützt nur die serielle Verbindung. Controller Version 4 unterstützt sowohl die serielle als auch Netzwerk Verbindungen.

Serielle Verbindung:
Für die Verbindung von der seriellen Schnittstelle Ser0 am Controller S320 zu einer funktionierenden seriellen COMx-Schnittstelle Ihres PC benötigen Sie ein 9-poliges 1:1 Kabel wie z.B. das Kabel DSK9/2. Technische Daten zur seriellen Schnittstele Ser0 finden Sie im Kapitel Technische Daten. Zum Aufbau der Verbindung betätigen Sie im Launchpad den Button Connect Comm oder Ctrl+S oder den Menüpunkt Connect->Comm->Connect. Überprüfen Sie ggf. die Einstellungen im Menü Options->Global Settings->Comm. Sie können die Verbindung z.B. dadurch testen, dass Sie auf dem Controller S320 das Beispielprogramm 'DemoTermSer0' aufspielen und im Teilfenster CommMsg in der Editierzeile eine Zeichenkette mit abschliessendem Return eingeben.

Netzwerk Verbindung:
Hierzu muss Ihr Controller mit Ihrem internen Netzwerk verbunden sein. Zum Aufbau der Verbindung betätigen Sie im Launchpad den Button Connect Comm oder Ctrl+S oder den Menüpunkt Connect->Comm->Connect. Überprüfen Sie ggf. die Einstellungen im Menü Options->Global Settings->Comm. Sie können die Verbindung z.B. dadurch testen, dass Sie auf dem Controller S320 das Beispielprogramm 'DemSock' aufspielen und im Teilfenster CommMsg in der Editierzeile den Befehl 'HELP' mit abschliessendem Return eingeben.

3.5 Ablauf der Programmierung

Der Controller S320 benötigt zum Betrieb zwei Dateien - die lauffähige spx-Datei und die cfg-Konfigurationsdatei. Anhand des Uhrenprogramms 'Demo05' wird die grundsätzliche Vorgehensweise beschrieben.

Bitte informieren Sie sich vorab bezüglich elektrischem Anschluss und Inbetriebnahme, Installation der Software und Aufbau der Linkverbindung an Hand der entsprechenden Kapiteln im diesem Handbuch.

1. Öffnen Sie mittels File > Open > spc oder per Drag&Drop auf das Launchpad das Uhrenprogramm Demo05.spc. Im Teilfenster Build erscheint der Quellcode des Programmes sowie eine Liste der eingebundenen Bibliotheken.

2. Öffnen Sie mittels File > Open > cfg oder per Drag&Drop auf das Launchpad die Konfigurationsdatei Demo05.cfg des Uhrenprogramms Demo05.spc. Diese Datei wurde vermutlich (wegen der Namensgleichheit) bereits beim Laden der spc-Datei mit geladen.

3. Klicken Sie nun im Teilfenster Build oder im Launchpad auf des Editor-Symbol oder Doppelklicken Sie auf das Symbol Demo05.spc. Die Quelldatei wird nun in Ihrem Editor geöffnet und könnte bearbeitet werden.

HINWEIS: Nach der Installation der Include-Dateien oder auch der Demo-Dateien von CD wird in der Regel automatisch das Attribut 'schreibgeschützt' gesetzt und die Dateien daher rot dargestellt. Falls die Dateien geändert werden sollen muss zunächst die Dateieigenschaft 'schreibgeschützt' deaktiviert werden.

4. Schliessen Sie den Editor und compilieren Sie das Program durch Build > Make oder durch Ctrl+M oder durch den Direktbefehl im Launchpad. Eine lauffähige spx-Datei wird erzeugt und Sie sehen das Ergebnis der Compilierung im Teilfenster Build. Wurde beim Compilieren ein Fehler festgestellt wird keine spx-Datei erzeugt - statt dessen erscheint die beanstandete Fehlerzeile ebenfalls im Teilfenster Build.

5. Übertragen Sie die spx-Datei mittels Exec > Send Executable oder durch den Direktbefehl im Launchpad auf den Controller S320.

6. Übertragen Sie die cfg-Datei mittelsConfig > Send Config oder durch den Direktbefehl im Launchpad auf den Controller S320.

7. Starten Sie das Programm auf dem Controller S320 nun durch Command > Start Program oder durch F9 oder durch den Direktbefehl im Launchpad. Es erscheint eine Digitaluhr.

Bis ein Programm Ihren Vorstellungen entspricht werden sicherlich mehrere Entwicklungszyklen erforderlich sein, die sich teilweise aus der hier beschriebenen Abfolge zusammensetzen werden.

3.6 Kommunikation mit dem Controller S320

Für die Kommunikation zwischen Controller S320 und Ihrem PC sind im wesentlichen die beiden folgenden Möglichkeiten zu unterscheiden:

Linkschnittstelle: Die Linkverbindung ist das zentrale Bindeglied zwischen Controller S320 und Ihrem PC während der Entwicklung der Anwendung. Über diese Schnittstelle erfolgt das Übertragen und das Rücklesen von Programm- und Konfigurationsdateien. Im Teilfenster SystemMsg können die vom Controller S320 erzeugten Systemmeldungen mitverfolgt werden. Im Teilfenster UserMsg können Sie über die Linkverbindung mit Ihrem Programm auf dem Controller S320 kommunizieren. Die Linkverbindung ist unter anderem auch für folgende Systemfunktionen erforderlich: Update des Betriebssystems mit Command > Send Operating System, Übertragen von Grafik- oder Plotdaten, Abrufen von Systeminformationen mit Command > Get System Info, Stellen der Uhr mit Command > Set Time, Löschen und Übertragen der peristenten Daten mit Command > Delete Persistent Data, Testen der analogen und digitalen Anschlüsse mit Config > Test I/O, Kalibrieren von Slotkarten mit Config > Calibrate Analog Port und einigem mehr.

Serielle RS232 Schnittstelle Ser0: Die serielle Schnittstelle Ser0 am Controller S320 ist für die Kommunikation mit einem PC im laufenden Betrieb vorgesehen. Über diese Schnittstelle kann das Anwenderprogramm Daten übermitteln, es können Einstellungen vorgenommen werden oder Parameter ausgetauscht werden. Während der Entwicklungsphase oder zum Einrichten des Systems kann über das Teilfenster CommMsg mit dem Controller S320 direkt kommuniziert werden.

Die dritte Möglichkeit, die beiden seriellen RS485 Schnittstellen Ser1 und Ser2 des Controllers S320 sind ebenfalls für den laufenden Betrieb zum Datenaustausch vorgesehen. Da ein PC üblicherweise nicht über eine RS485 Schnittstelle verfügt können diese innerhalb der Entwicklungsumgebung nicht direkt angesprochen werden.

3.7 Lokalisieren von Compilerfehlern

Im Teilfenster Build übersetzen Sie Ihr Programm durch Build > Make oder Ctrl+M oder durch den Direktbefehl im Launchpad. Falls Ihr Programm fehlerfrei übersetzt werden konnte erhalten Sie eine Meldung mit einigen Daten zum Speicherverbrauch.

Bei einem Syntaxfehler bricht der Compiler den Vorgang ab und zeigt Ihnen die Programmzeile, die den Fehler enthält. Korrigieren Sie Ihr Programm mit dem Editor, speichern Sie es und compilieren Sie es erneut. Bei einem Compiler-Fehler wird keine neue spx-Datei erzeugt und in der Statuszeile erkennen Sie die Warnung SPX Not Up To Date.

Im Gegenzug zu den Syntaxfehlern, bei denen keine spx-Datei erzeugt wird, gibt der Compiler auch Warnungen aus, um möglichen Programmfehlern vorzubeugen. In diesem Fall wird eine spx-Datei erzeugt. Beispielsweise wird gewarnt, falls eine Variable verwendet wird, bevor der Variable ein Wert zugewiesen wurde. Das Programm ist in diesem Fall syntaktisch korrekt und lauffähig. Warnungen lassen sich durch die Einstellung eines bestimmten Warnlevels in Options > Global Settings > Compiler unterdrücken. Dies ist gelegentlich während der Programmentwicklung hilfreich. Ein fertiggestelltes Programm sollte jedoch auch bei Warnlevel 3 ( High) keine Warnungen mehr produzieren.

w3 Function <Name> is never called
Die benutzerdefinierte Funktion wird nie aufgerufen.

w2 Parameter <Name> is never used
Der übergebene Parameter wird in der Funktion nie benutzt.

w3 Variable <Name> is declared but never used
Die Variable mit dem angegebenen Namen wird zwar deklariert, aber nicht benutzt.

w1 Use of <Name> before initialization
Die Variable wird benutzt, bevor eine Zuweisung erfolgt ist. Der Wert der Variable ist zu diesem Zeitpunkt undefiniert.

w1 Value assigned to variable <Name> is never used
Der Variable wird zwar etwas zugewiesen, sie wird aber im folgenden nicht weiter benutzt.

w3 Constant <Name> is declared but never used
Die Konstante ist zwar deklariert, wird aber nicht benutzt.

w2 Reference parameter <Name> was not changed
Es wurde eine Variable als Referenz-Parameter an eine Funktion übergeben, diese Variable wird aber von der Funktion nicht verändert. Eine Deklaration als Wert-Parameter wäre in diesem Fall sinnvoller.

w2 Low and high border of range are equal
Die zwei Grenzen eines Range Ausdrucks (in einem CASE-Label) sind gleich.

w1 Low border of range is greater than high border
Die untere Grenze des Range Ausdrucks (in einem CASE-Label) ist größer als die obere. Die Marke kann daher nie angesprungen werden.

w2 Unreachable code
Es wurde Code entdeckt, der nie ausgeführt wird. Dies kann z.B. durch falsch plazierte RETURN Anweisungen geschehen.

w1 Function may return without a value
Die Funktion soll einen Wert zurückgeben, kann jedoch ohne Rückgabewert beendet werden.

w1 Floating point underflow
Eine Fließkomma-Operation erzeugt eine Zahl, die zu klein ist, um sie mit der verfügbaren Genauigkeit darzustellen.

w1 Partial loss of floating point precision
Eine Fließkomma-Operation kann nicht mehr genau berechnet werden, weil das Argument an den Grenzen des Wertebereichs für das verwendete Verfahren liegt.

w3 { found inside a comment
Eine Kommentarklammer { wurde innerhalb eines Kommentares gefunden

w3 Condition is always true
Diese Bedingung ist immer wahr.

3.8 Lokalisieren von Laufzeitfehlern

Laufzeitfehler sind Fehler, die im laufenden Betrieb auftreten und zum Abbruch des Programmes führen. Ein populäres Beispiel ist die Division durch Null oder auch der Zugriff auf ein Element eines Feldes ausserhalb der Felddimensionen.

Sofern der Controller S320 zum Zeitpunkt des Laufzeitfehlers via Linkverbindung mit der Programmierumgebung verbunden ist wird der Fehler über die Systemmeldung SystemMsg gemeldet. Die Entwicklungsumgebung lokalisiert dann nach Meldung automatisch die betreffende Stelle im Quellcode, die den Fehler verursacht hat. Die Passwort-Abfrage können Sie ignorieren bzw. mit OK bestätigen, sofern kein Passwort vereinbart wurde. Zum Testen dieser Fehlerlokalisierung können Sie das Beispielprogramm Demo03 verwenden - hier wird absichlich ein Laufzeitfehler durch Division durch Null provoziert.

Arbeitet der Controller S320 'offline' (d.h. das Gerät ist nicht mit der Entwicklungsumgebung verbunden) wird der Laufzeitfehler durch einen Fehlerhandler abgefangen, den Sie z.B. durch Einbinden der Bibliothek stderr.spi oder eines eigenen Fehlerhandlers immer in Ihren Programmen mitführen sollten. Im Falle von stderr.spi erscheint im obersten Display der Fehlercode, im mittleren Display die Fehleradresse. Laden Sie nun das auf dem Controller S320 laufende Programm in die Entwicklungsumgebung und geben Sie die Fehleradresse im Teilfenster Exec bei Error Address und drücken Sie den Button Find Address. Wieder wird die den Fehler auslösende Programmzeile angezeigt.

Die möglichen vordefinierten Laufzeitfehler sind im Rahmen der Biliotheken beschrieben.

3.9 Rücklesen von Daten

Die im Controller S320 hinterlegten Programme, Konfigurationsdateien und auch ein Abbild des persistenten Speicherbereiches können Sie jederzeit wieder in Ihre Programmierumgebung zurücklesen und weiter bearbeiten.

Mit Exec > Retrieve Code lesen Sie die Programmquellen aus dem Controller S320 zurück. Natürlich darf hierzu beim compilieren die Compilerfunktion Options > Global Settings > Compiler > Include Source Code nicht deaktiviert gewesen sein. Eine mögliche Passwortabfrage können Sie ignorieren bzw. mit OK bestätigen, falls kein Passwort vereinbart war. Mit Unpack Sources speichern Sie die Quelldateien in einem Verzeichnis Ihrer Wahl.

Mit Config > Retreive Config können Sie die Konfigurationsdatei zurücklesen und bei Bedarf mittels File > Save As speichern.

Mit Command > Retreive Persistent Data können Sie ein Abbild des persistenten ( = Netzausfall gesicherten Speicherblocks im Flashrom) zurücklesen. Mit Command > Delete Persistent Data löschen Sie den persistenten, d.h. batteriegepufferten Datenbereich sowie den in Spell verfügbaren Speicherbereich des Flash-ROM. Nach dem nächsten Programmstart wird dieser Datenbereich wieder mit den in den Programmquellen vereinbarten Werten initialisiert. Der ROM-persistente Datenbereich im Controller S320 kann mit Command > Send Persistent Data komplett durch ein Abbild von der Festplatte ersetzt bzw. mit Command > Retrieve Persistent Data komplett als Datei auf die Festplatte des PC kopiert werden. Es handelt sich hier um ein direktes Speicherabbild des Bereiches im Flash-ROM. Dieses enthält keine Zuordnung zu den in Spell definierten Variablen! Diese Funktionen eignen sich damit vorwiegend zum Duplizieren von Betriebsparametern auf Geräte mit identischen Programmen bzw. Variablendefinitionen.

3.10 Konfiguration der Hardware

Innerhalb des Menüs Config übertragen Sie mit Config > Send Config oder mit dem Direktbefehl des Launchpads die cfg-Datei in den Controller S320. Mit Debug Configuration wird überprüft, ob die Syntax der Datei korrekt ist.

Über die Konfigurationsdatei erfolgt die Zuordnung zwischen Spell-Programm und der Hardware des Controller S320 wie Schnittstellen und Slotkarten.

Die Konfigurationsdatei kann - ähnlich wie das Spell Programm selbst - mit dem Editor bearbeitet werden. Im Kapitel Konfigurationsdatei sowie bei den einzelnen Slotkarten finden Sie Beispiele, die sich gut als Kopiervorlage eignen und für die eigenen Belange zusammengestellt bzw. angepasst werden können. Eine zumindestens leere Konfigurationsdatei ist im übrigen immer notwendig, auch dann, wenn das Programm gar keine Hardware benutzt.

Um aktuell konfigurierte digitale oder analoge Ports zu testen können Sie den Menüpunkt Config > Test I/O verwenden.

3.11 Kalibrieren von Slotkarten

Die Entwicklungsumgebung unterstützt Sie bei der Kalibrierung bzw. Nachkalibrierung von Slotkarten mit dem Menü Config > Calibrate Analog Ports. Ergebnis sind neue Parameter für Gain und Offset, die in der Konfigurationsdatei eingetragen und auf den Controller S320 überspielt werden.

Zum Kalibrieren eines analogen Einganges benötigen Sie ein Gerät zum Erzeugen des erforderlichen Signales sowie ein Referenzmeßgerät um das Signal parallel mit der gewünschten Genauigkeit messen zu können.

Zum Kalibrieren eines analogen Ausganges benötigen Sie lediglich ein Referenzmessgerät mit der gewünschten Genauigkeit.

3.12. Konfigurationsfehler

Der Controller S320 überprüft nach jedem Programmstart bei einigen Slotkartentypen die Übereinstimmung von konfigurierter und tatsächlich vorhandener Belegung. Bei Konfigurationsfehlern wird das Programm nicht gestartet, es erscheint die Fehlermeldung 'S/P' in Verbindung mit der Nummer des beanstandeten Slots/Ports und der Nummer des erwarteten Slotkartentyps.

Stellen Sie in einem soclhen Fall sicher, dass die in der Konfigurationsdatei definierte Hardware auch mit der im Controller S320 tatsächlich übereinstimmt.

3.13. Systemfehler

Systemfehler sind Fehler in der Laufzeitumgebung, in externen Funktionen oder Fehler beim Ansprechen der Hardware. Systemfehler sollten mit wenigen Ausnahmen nicht auftreten. Systemfehler werden folgendermaßen angezeigt: Im linken oberen Display steht die Fehlernummer, im oberen rechten Display das Wort 'Sys'. Im mittleren linken Display steht die Adresse als hexadezimale Zahl und rechts daneben die Kennung 'Adr'. In der untersten Zeile wird eventuell ein zusätzlicher Hinweis 'Info' angegeben.

Die Systemfehler haben folgende Bedeutung:

1: Interner Programmfehler
2: Fehler im Flash-ROM
3: Speicher für Spell-Programm und Stack nicht ausreichend
4: Fehler in der Hardware
5: Unbekannte Slotkarte
6: Unbekannter Interrupt durch Slotkarten
7: Heap fehlerhaft
8: Ungültige Konfigurationsdaten
9: Nicht genug Speicher
10: Ungültige Daten
11: Filesystem fehlerhaft
12: Unerwarteter Trap
Falls ein Systemfehler nicht auf eine fehlerhafte Konfiguration zurückzuführen ist, benötigen wir zur Fehlerbeseitigung folgende Informationen:
· Fehlernummer und -adresse sowie ggf. die zusätzliche Information 'Info'
· die Version des Betriebssystems
· die Version Ihres Compilers
· Ihre Programmquellen *.SPC, *.SPI und *.CFG sowie
· die Belegung der Steckplätze

HINWEIS: Bei Auftreten eines Systemfehlers läßt sich der Controller S320 nicht mehr über die Entwicklungsumgebung bedienen und muß durch Entfernen der Versorgungsspannung rückgesetzt werden. Falls der Fehler durch das Spellprogramm oder durch eine fehlerhafte Gerätekonfiguration ausgelöst wurde, können Sie einen Neustart des gespeicherten Spellprogrammes durch gleichzeitiges Drücken der Tasten Up und Down bis zum Abschluß des Selbsttestes verhindern.

HINWEIS: Der Systemfehler 2 (Fehler im Flash-ROM) tritt zwangsläufig auf, falls Sie die Funktion LoadRomPersistent oder SaveRomPersistent zeitgleich z.B. innerhalb eine Signales und z.B. innerhalb des Hauptprogrammes aufrufen.

HINWEIS: Der Systemfehler 4 deutet auf eine fehlerhafte Slotkartenbelegung hin. Bei den meisten Slotkarten ist das Boot-Verhalten unkritisch. Aus technischen Gründen kann ein Systemfehler 4 insbesondere bei einer falsch konfigurierten TYP310-Slotkarte auftreten. Abhilfe: Starten Sie den Controller und halten Sie bis zum Abschluß des Selbsttestes die Tasten < und > gedrückt. Überspielen Sie eine gültige Konfigurationsdatei bzw. installieren Sie die Slotkarten korrekt.

3.14. NTSPC - Der Compiler

Der Compiler ist seit der Version 3 vollständig in die Entwicklungsoberfläche integriert und wird z.B durch den Direktbefehl im Launchpad aufgerufen.

Der folgende Abschnitt ist daher nur dann von Interesse, falls der Compiler eigenständig eingesetzt werden soll.

Rein technisch ist der Compiler wie in früheren Versionen ein Komandozeilenprogramm, das auch ohne die Entwicklungsoberfläche verwendet werden kann. Der Compiler wird durch den Befehl NTSPC <flags> <filename> aufgerufen.

Der Compiler erzeugt aus den Programmquellen *.SPC und den Bibliotheken *.SPI das im Controller S320 lauffähige Programm *.SPX. Auf Wunsch kann ein Listing *.SPL oder ein Assemblerlisting *.SPA erzeugt werden.

Folgende Compiler-Optionen können mit Hilfe von Flags eingestellt werden:

Syntax: NTSPC [flags] file[.spc]

Wobei die Flags folgende Bedeutung haben:

-a[x]    Ausgabe eines Assembler-Listings mit x
         d: Gibt einen Dump des Datensegments in das Listing ein.
         i: Kombination von Assembler listing und Source code.
-c[x]    Datenkomprimierung mit x
         c: ausführbares Code-Segment komprimieren
         d: ausführbares Datensegment komprimieren
         m: weitere Daten komprimieren
         s: Quellen komprimieren
-h, -?   Hilfe
-I<Pfad> Ausgabe eines Suchpfades für Include-Dateien
-l       Ausgabe eines Listings
-q       Ausführbares File erzeugen
-s       Quellen in die SPX-Datei einbinden (notw. für Rücklesen)
-S       Startmeldungen unterdrücken
-v       zusätzliche Informationen mitteilen
-V       nur Versionsnummer mitteilen
-wN      Warnings-Level N setzen, x = max., - = keine Warnungen

Flags werden durch Zufügen eines '-' Zeichens negiert, z.B. -s-bedeutet: Quellen nicht in SPX-Datei einbinden.

Die Standardeinstellung ist: -a- -c -I. -l- -q -s -S- -v -wx

Beispiel: NTSPC -Ic:\S320 Demo00

Hinweise zur Suchpfadangabe

Nach dem Schalter -I, mit dem ein Suchpfad für Includedateien angegeben wird, kann mehr als ein Verzeichnis angegeben werden: die Verzeichnisse werden dann durch ';' getrennt. Alternativ kann auch -I mehrfach verwendet werden. Gesucht wird immer zuerst im aktuellen Verzeichnis, dann in den mit -I angegebenen Verzeichnissen in der Reihenfolge, in der sie angegeben wurden. Die Namen der Include-Files können auch relative Pfad-Elemente tragen, bei der Compiler-Anweisung:

ntspc -IDirA\DirB;DirA main

wobei das Programm 'main' die Include-Anweisung:

INCLUDE "DirC\STDLIB.spi"

enthält, wird in den Verzeichnissen:

DirC

DirA\DirB\DirC

DirA\DirC

in dieser Reihenfolge gesucht.

3.15. Betriebsystem

Das Betriebsystem ist die zentrale Software des Controller S320 und erledigt vergleichbare Aufgaben wie das Betriebsystem Ihres PC. Auch das Betriebsystem des Controller S320 kann 'upgedatet' werden.

In den Versionen <= 3.xx ist der Name der Betriebssystemdatei SPELLOS.BIN.

Ab Version 4 gilt folgende Konvention:
S320V400.BIN: Erste ausgelieferte Version
S320V401.BIN: Erste korrigierte Version der Version 4.0
S320V402.BIN: Zweite korrigierte Version der Version 4.0
usw.

Command > Send Operating System ersetzt das Betriebssystem durch eine neue Version. Dies kann zur Erweiterung externer Funktionen oder zu Updatezwecken erforderlich sein. Bitte beachten Sie, daß nach dem Übertragen des neuen Betriebssystems der Controller S320 durch Aus- und Wiedereinschalten der Versorgungsspannung oder durch die Funktion Command > Boot the Controller rückgesetzt werden muß, um das neue Betriebssystem zu laden. Dieser Vorgang lässt sich in Options > Global Settings > Link automatisch ausführen.

Ob ein Update möglich ist hängt von der vorhandenen Hardware und dem aktuell installierten Betriebssystem ab. Nähere Informationen erhalten Sie beim Hersteller.

HINWEIS - nur gültig für Versionen <= 3.xx:
Beim Überspielen eines neuen Betriebssystems werden auch das Spellprogramm einschließlich Quellen, der persistente Datenspeicher sowie die Konfigurationsdatei gelöscht. Falls Sie die im Controller S320 abgelegten Dateien benötigen, müssen diese VOR dem Überspielen des neuen Betriebssystems rückgelesen werden. Command > Boot the Controller setzt den Controller S320 zurück und aktiviert damit ein ggf. neues Betriebssystem.

HINWEIS: Bitte achten Sie darauf, daß weder der Controller S320 noch Ihr PC während des Überspielens eines neuen Betriebssystems z.B. durch Stromausfall unterbrochen wird. Der Inhalt des Flash-ROMs muß zeitweilig gelöscht werden. Bei Unterbrechung während dieses Vorgangs kann der Controller S320 nicht mehr richtig starten. Bitte senden Sie in einem solchen Fall die CPU-Platine oder das Gerät zum Hersteller, es wird in der Regel am selben Tag mit neuem Betriebssystem wieder zum Versand gebracht.

Beim Update des Betriebssystemes sollten Sie wie folgt vorgehen:

Sichern Sie soweit erforderlich die Daten auf dem Controller S320 mit Ihrer DERZEITIGEN Entwicklungssoftware auf Ihre Festplatte. (Befehle Exec > Retrieve Code bzw. Config > Retrieve Config.)

Überspielen Sie das NEUE Betriebssystem mit Ihrer DERZEITIGEN Entwicklungssoftware.

Setzen Sie den Controller durch Unterbrechen der Versorgungsspannung zurück.

Beenden Sie Ihre DERZEITIGE Entwicklungssoftware und installieren Sie die NEUEN Versionen von Entwicklungssoftware, Compiler und die Bibliotheken.

Übersetzen Sie Ihre Programme mit dem NEUEN Compiler und den NEUEN Bibliotheken.

Starten Sie die NEUE Entwicklungsumgebung.

Überspielen Sie Ihr NEU übersetztes Programm UND die Konfigurationsdatei auf den Controller S320 und starten Sie es.

Verwenden Sie ältere Versionen nicht mehr.

weiter zur Programmiersprache


Controller S320 Handbuch - Programmiersprache

 4. Programmiersprache des Controller S320

Die Programmiersprache für den Controller S320 ist eine Pascalvariante, welche speziell an die Anforderungen des Gerätes angepaßt wurde. Die wesentlichen Sprachmerkmale sind mit Pascal identisch. Sie besitzt damit die wichtigen Vorzüge von Pascal:

Weite Verbreitung
Einfaches Erlernen und Implementieren
Effizienter Objektcode

Die nachfolgenden Kapitel zu Pascal bzw. Spell vermitteln eine Übersicht über Sprachumfang und Möglichkeiten der Programmierung. Zum Erlernen des Programmierens sind sie nur bedingt geeignet. Falls Sie nicht über einschlägige Erfahrung im Umgang mit Programmiersprachen wie Pascal oder C verfügen, empfehlen wir Ihnen, sich vorab mit der Sprache Pascal vertraut zu machen. Zum Erlernen der Sprache existiert eine Vielzahl guter Lehrbücher.

4.1. Sprachelemente

Zum Sprachumfang dieses Pascaldialektes zählen Buchstaben, Ziffern, Operatoren und Schlüsselwörter. Des weiteren sind zahlreiche Bezeichner vordefiniert. Einige wurden von Standard-Pascal (ISO7185) übernommen, andere wurden hinzugefügt, um den speziellen Anforderungen des Controllers S320 gerecht zu werden. In diesem Kapitel soll nur ihre Aufzählung erfolgen. Die komplette Beschreibung folgt an geeigneter Stelle.

Spezialsymbole

Der gegenüber Pascal etwas modifizierte Symbolumfang von Spell ist im folgenden dargestellt:

+ | - | * | / | % | ** | :=
< | <= | = | >= | > | <> |
( | ) | [ | ] | { | } |
? | " | . | , | : | ; |

Schlüsselwörter

Die folgenden Symbole sind als Schlüsselwörter definiert:

AND | ATTRIBUTE | BEGIN | BIND
BITAND | BITNOT | BITOR | BITXOR
BREAK | CASE | CONFIG | CONST
CONTINUE | DO | DOWNTO | ELSE
END | EXTERNAL | FOR | FORWARD
FROM | FUNCTION | HALT | IF
IGNORE | INCLUDE | NOT | OF
OR | PACK | PROGRAM | RAMPERSISTENT
RECORD | REPEAT | RETURN | ROMPERSISTENT
SHL | SHR | SIGNAL | STATIC
STEP | THEN | TO | TYPE
UNTIL | VAR | WHILE | XOR

Diese dürfen in keinem anderen als dem für sie vorgesehenen Zusammenhang verwendet werden.

Bezeichner

Bezeichner (Namen für Konstanten, Variablen, Datentypen und Funktionen) werden aus Buchstaben und Ziffern gebildet. Sie sind nicht in der Länge beschränkt. Alle Zeichen eines Bezeichners sind signifikant, wobei Groß-/Kleinschreibung nicht berücksichtigt wird.

Die von Spell vordefinierten Bezeichner sind:

Typen: | INTEGER, FLOAT, BOOLEAN, STRING, CHAR
Konstanten: | True, False, MaxInt, MinInt, Pi, e
Funktionen: | Integer, Float, Char,Min, Max,Inc, Dec,Fract, Trunc,Sin, Cos, Tan, Asin, Acos, Atan, Abs, Ln, Log, Sqrt, Sqr,Sign, Hvs, Odd, ord, SizeOf, Low, High

Diese Bezeichner können vom Programmierer durch eine Neuvereinbarung neu definiert werden, wovon jedoch dringend abgeraten wird, da dadurch die vorgegebene Definition außer Kraft gesetzt wird.

(Die Funktionen werden in den Unterkapiteln "Grunddatentypen" beschrieben).

Weitere Funktionen enthält die Standardbibliothek "StdLib.SPI". Ihre Aufzählung erfolgt im entsprechenden Kapitel.

Zahlen

Zahlen werden in der üblichen Form dargestellt, d.h.:

ganze Zahlen (Integer) mit und ohne Vorzeichen, mit und ohne führende Nullen,

Dezimalzahlen (Float) in Festpunkt- oder Gleitpunktdarstellung, mit und ohne Vorzeichen. Sie werden durch die Angabe der Dezimalstelle (gekennzeichnet durch Punkt, Angabe einer vorausgehenden und nachfolgender Ziffer ist zwingend) und/oder durch die Zufügung eines Exponenten (dargestellt durch ein vorangestelltes "E").

Zeichen

Zeichenkonstanten (Char) werden in einfache Anführungszeichen eingeschlossen: 'C'.

Zeichenketten

Zeichenketten (String) werden in doppelte Anführungszeichen eingeschlossen, z.B. "eine Zeichenkette". Sie sind eine Folge von Zeichen mit einem abschließenden Nullzeichen.

Kommentar

Als Kommentar wird jeder beliebige, in geschweifte Klammern eingeschlossene Text erkannt. Er kann an beliebiger Stelle im Programmcode zur Verdeutlichung stehen. Der Inhalt wird vom Compiler ab der öffnenden Klammer { bis zum Auftreten der schließenden Klammer } ignoriert. Daraus folgt, daß Kommentare nicht verschachtelt auftreten dürfen, d.h. ein Kommentar in einem Kommentar ist unzulässig. Außerdem ist zu beachten, daß der Kommentar als Trennzeichen behandelt wird.

Trennzeichen

Trennzeichen stehen zwischen den Spell-Symbolen. Als Trennzeichen dienen Leerzeichen, Zeilenenden und Kommentare.

4.2. Programmaufbau

Das Programm wird Anweisung für Anweisung abgearbeitet. Eine Anweisung wird durch ein Semikolon begrenzt. Die maximale Länge sind 256 Zeichen.

Jedes Programm beginnt mit dem Programmkopf. Er hat die Form:

PROGRAM Name;

und benennt das Programm. Darauf folgt der Vereinbarungsteil. Er enthält Definitionen von Konstanten und Typen, die Einführung weiterer benützter Dateien sowie die Deklarationen von Variablen.

Werden aus der Spelldatei Funktionen aufgerufen, welche in anderen Dateien implementiert sind, z.B. in Bibliotheken, so müssen diese Dateien dem Compiler angekündigt werden. Dies geschieht durch INCLUDE-Anweisungen:

INCLUDE "Dateiname";

Ein Dateiname besteht i.a. aus dem Namen und der Dateinamenserweiterung .XXX (sog. Suffix). Das Standardsuffix für Spellbibliotheken lautet: 'SPI'. Wird in der obigen Anweisung nur der Name ohne Suffix angegeben, werden automatisch die Dateien 'Name.SPI' gesucht. Die obere Anweisung entspricht also der kompletten Schreibweise:

INCLUDE "Dateiname.SPI";

Manche im Lieferumfang enthaltene Bibliotheken liegen in maschinenlesbarer Form vor. Diese Dateien haben das Suffix ".spp" und werden direkt von der zugehörigen Header-Datei (*.spi) mit dem folgenden Kommando eingebunden:

BIND "modul" FROM "package";

Dabei sind teilweise mehrere Module in einem "Package" zusammengefaßt. Diese Syntax wird der Vollständigkeit halber erwähnt, hat jedoch für den Anwender keine weitere Bedeutung, da er bei Verwendung einer solchen Bibliothek nur die Header-Datei über die übliche Include-Anweisung einzubinden hat. Es ist jedoch darauf zu achten, dass zum übersetzen auch die Package-Datei in einem der Compiler-Suchpfade vorhanden sein muss.

Die folgende Anweisung, eine Direktive für den Compiler, erlaubt es, beliebige Dateien z.B. zur Dokumentation automatisch mit auf den Controller S320 zu übertragen:

PACK "Dateiname.Doc";

Sie stehen dadurch jederzeit, abrufbar durch die Entwicklungsumgebung, zu Servicezwecken zur Verfügung.

Falls innerhalb der INCLUDE oder PACK-Anweisung Pfade benötigt werden ist das Trennzeichen \ doppelt auszuführen. Beispiel:

INCLUDE "C:\\S320\\STDLIB.SPI"

Alternativ kann auch das Trennzeichen / verwendet werden. So ist die folgende Anweisung äquivalent zu der vorhergehenden:

INCLUDE "C:/S320/STDLIB"

(Zur Erinnerung: Das für Spellbibliotheken definierte Standardsuffix ".SPI" muß in der Include-Anweisung nicht angegeben werden.)

Mit dem Schlüsselwort CONFIG kann eine Konfigurations-Sektion eingeleitet werden. Hier ist es möglich, diverse Einstellungen in der Programmumgebung des Controllers vorzunehmen.

CONFIG
    Stacksize = $1000;
    RestartOnError = False;

Mit dem Parameter Stacksize kann die Größe des verwendeten Stacks für das Spellprogramm eingestellt werden. Der Default-Wert für den Programm Stack ist $1000 Worte, der für den Signalhandler Stack $800 Worte. Bei zu geringer Stackgröße bricht das Programm mit dem Systemfehler 3 (Stackoverflow) ab. Mit dem Parameter RestartOnError wird das Verhalten nach Auslösen eines Laufzeitfehlers (z.B. Division durch Null) eingestellt. Mögliche Werte sind True oder False, der Default-Wert ist False. Bei RestartOnError = True wird das Spellprogramm automatisch erneut gestartet; dies kann bei unbeaufsichtigtem Betrieb sinnvoll sein. Ein kontinuierlicher Neustart auf Grund eines Laufzeitfehlers kann durch gleichzeitiges Drücken der Tasten Up und Down abgebrochen werden.

Mit Hilfe der Compiler-Direktiven ist ab der Version 3 eine bedingte Compilierung realisierbar. Es kann hiermit gesteuert werden, ob bestimmte Teile eines Programms übersetzt werden oder nicht.

#if Const_Ausdruck
Das folgende Programmstück wird nur kompiliert, wenn der Wert von Const_Ausdruck = TRUE ist.

#ifdef Bezeichner
Das folgende Programmstück wird nur kompiliert, wenn der Bezeichner bis zu dieser Direktive vereinbart wurde.
Alternative Formulierung mit der Compile-Time-Funktion: #if Defined (Bezeichner)

#ifndef Bezeichner
Das folgende Programmstück wird nur kompiliert, wenn der Bezeichner bis zu dieser Direktive NICHT vereinbart wurde.
Alternative Formulierung mit der Compile-Time-Funktion: #if NOT Defined (Bezeichner)

#elseif Const_Ausdruck
Das folgende Programmstück wird nur kompiliert, wenn keine vorangehende konditionale Direktive auf gleichem Niveau ausgewählt wurde, und der Wert von Const_Ausdruck = TRUE ist.

#else
Das folgende Programmstück wird nur kompiliert, wenn keine vorangehende konditionale Direktive auf gleichem Niveau ausgewählt wurde.

#endif
Diese Direktive ist erforderlich nach jedem bedingt zu kompilierenden Programmabschnitt und schließt eine Kette von konditionalen Direktiven ab.

Darüberhinaus kann der Kompiliervorgang mit einer benutzerdefinierten Fehlermeldung abgebrochen werden:
#error ("Benutzerfehlerangabe");

Oder die Kompilierung kann fortgesetzt werden, jedoch eine Warnung beim Übersetzen provoziert werden:
#warning ("Benutzer-Warnung");

Optionen können mit Hilfe der pragma-Direktive ausgewählt werden, derzeit sind über #pragma alle Optionen einstellbar, die auch mit der CONFIG Direktive einstellbar sind. z.B.
#pragma (StackSize, 16384);

Konstanten werden folgendermaßen vereinbart:

CONST KonstBezeichner: Datentyp = Wert;

Eine so definierte Konstante kann nicht verändert werden. Konstanten dürfen als Feldgrößen bei der Initialisierung von Arrays eingesetzt werden. Durch die explizite Deklaration des Datentyps ist eine Kombination mit anderen Variablen problemlos.

Auch Konstanten mit strukturierten Datentypen können vereinbart werden. Siehe dazu die entsprechenden Kapitel, in denen die strukturierten Datentypen beschrieben werden.

Typvereinbarungen haben die Form:

TYPE TypBezeichner= TypVereinbarung;

Sie werden vor allem eingesetzt, wenn mehrere Variablen vom gleichen strukturierten Datentyp (Record oder Array) sind. So können problemnah eigene Datentypen formuliert werden, z.B.:

TYPE Polynom = FLOAT[KonstDim];
TYPE Datum = RECORD
               Tag : INTEGER;
               Monat: INTEGER;
               Jahr: INTEGER;
             END;

Typvereinbarungen sind insbesondere geeignet, um fest definierte strukturierte Datentypen als Argument einer Funktion zu übergeben. Näheres hierzu findet sich im Abschnitt: 'Felder als Funktionsparameter'.

Alle im Programm verwendeten Variablen müssen eingangs deklariert werden. Dazu werden die neuen Bezeichner mit den für sie vorhergesehenen Datentypen verknüpft und, falls erforderlich, die Dimension vereinbart.

VAR
   VarBezeichner1: Datentyp;
   VarBezeichner2: Datentyp[VarDim];

Die Initialisierung der Variablen kann nach Wunsch direkt mit der Deklarierung durchgeführt werden (implizite Vereinbarung). Die Syntax ist identisch mit einer Konstantenvereinbarung:

VAR VarBezeichner3: Datentyp = Wert;

Das gilt ebenso für die Initialisierung von Variablen mit strukturierten Datentypen, welche in den entsprechenden Kapiteln beschrieben sind.

Der Controller S320 bietet zusätzlich die Möglichkeit, Variablen mit den Schlüsselwörtern RAMPERSISTENT oder ROMPERSISTENT zu vereinbaren.

Für die so deklarierten Variablen werden netzausfallsichere Kopien im batteriegepufferten RAM-Speicher (knapp 32 kByte) bzw. als Datei im Flash-ROM Dateisystem angelegt (maximal 192 kByte). Bei Programmstart wird kontrolliert, ob Daten in den persistenten Speichern vorhanden sind und ob diese zu den als persistent deklarierten Variablen passen. Ist dies der Fall, so werden automatisch diese Werte übernommen. Andernfalls werden den persistenten Daten die Initialisierungswerte zugewiesen.

Die Vereinbarungssyntax entspricht der für gewöhnliche Variablen, wobei jedoch (aus obigem Grund) die implizite Initialisierung zwingend erforderlich ist:

RAMPERSISTENT      PersDataBez1:INTEGER = 0;
                   PersDataBez2:Datentyp2 = WertVomTyp2 ;

ROMPERSISTENT      PersDataBez1:Datentyp1 = WertVomTyp1;
                   PersDataBez2:Datentyp2 = WertVomTyp1;

Das "Update" dieser Kopien erfolgt mit Hilfe der Funktionen:

SaveRAMPersistent();

SaveROMPersistent();

Diese Funktionen sind in der Standardbibliothek STDLIB.SPI enthalten und werden unter dem entsprechenden Kapitel beschrieben.

Die Reihenfolge der verschiedenen Vereinbarungsblöcke ist nicht festgelegt.

Jeder Vereinbarungsblock wird durch das einleitende Wortsymbol (INCLUDE, PACK, TYPE, CONST, VAR, ROMPERSISTENT, RAMPERSISTENT) eindeutig gekennzeichnet. Die beliebige Anordnung dieser Blöcke geht soweit, daß diese Symbole auch mehrfach auftreten können, so daß z.B. eine für weitere Dateien signifikante Konstante vor dem "Include"-Aufruf definiert werden kann, wohingegen weitere Konstanten erst an späterer, zentraler Stelle eingeführt werden.

Nach diesem Vereinbarungsteil folgen dann optional die im Hauptprogramm verwendeten Funktionen (soweit nicht in anderen Dateien realisiert) und schließlich die eigentliche Prozedur zwischen den Wortsymbolen:

BEGIN

END.

Dabei ist besonders auf den Punkt nach dem END zu achten, welcher das Ende des Hauptprogrammes signalisiert.

4.3. Datentypen

Die Datentypen wurden im wesentlichen von Pascal übernommen. Geringe Unterschiede entstanden durch die besondere Beachtung des Einsatzzwecks sowie der Effizienz des Controller S320.

Die Standarddatentypen lassen sich in Grunddatentypen (oder skalare Datentypen) und strukturierte Datentypen unterteilen.

Grunddatentypen

Die von Spell unterstützten skalaren Grunddatentypen sind ganze Zahlen (Integer), reale Zahlen (Float), Zeichen (Char) und logische Wahrheitswerte (Boolean). Eine automatische Typkonvertierung wird nicht durchgeführt; alle Konvertierungen müssen explizit angegeben werden. (Daher müssen auch bei Konstanten Typvereinbarungen durchgeführt werden.)

Integer

Der Datentyp Integer umfaßt die vom Controller darstellbaren ganzen Zahlen zwischen MinInt = -2147483648 und MaxInt = 2147483647. Eine Überschreitung dieses Zahlenbereiches, selbst in Zwischenergebnissen, führt zu einem Fehler (Overflow Error).

Auf dem definierten Zahlenbereich sind die arithmetischen Grundoperationen: Addition (+), Subtraktion (-), Multiplikation (*), Division (/) und Modulo(%) ausführbar. Bei der Division ist besonders zu beachten, daß es sich um eine ganzzahlige Division handelt, was im Standard-Pascal dem Operator "div" entspricht. Um das Ergebnis in realen Zahlen zu erhalten, müssen zuvor Zähler und Nenner konvertiert werden.

Neben diesen Operationen ergeben die folgenden Standardfunktionen ganzzahlige Ergebnisse (für die Parameter gilt: i: Integer-Typ, f: Float-Typ, b: Boolean-Typ, c: Char-Typ):

Abs (i)    - Absolutwert von i
Hvs (i)    - Heavyside-Funktion
Integer (f) - Typkonvertierung mit Runden (Fehler bei Überschreiten des Wertebereichs)
Min (i1,i2) - Gibt kleineren Wert der beiden Argumente zurück
Max (i1,i2) - Gibt größeren Wert der beiden Argumente zurück
Ord (b)    - Ordinalwert des Arguments (0 für FALSE oder 1 für TRUE)
Ord (c)    - Ordinalwert des Arguments (entspricht Code-Tabelle des Zeichens)
Sign (i)   - Signum Funktion (Rückgabewert: -1 , 0 oder 1)
Trunc (f)  - ganzzahliger Anteil von f
Dec(i1[,i2]) - Dekrementierung von i1 um 1 oder um i2, falls vorhanden
Inc(i1[,i2]) - Inkrementierung von i1 um 1 oder um i2, falls vorhanden

Die Vergleichsoperatoren zwischen zwei Zahlen vom Typ Integer liefern Ergebnisse vom Typ Boolean.

Die Funktionen: Abs, Min, Max, Hvs, Sign, Dec und Inc sind überladen und können ebenfalls für Argumente und Rückgabewerte des Typs Float angewendet werden.

Eine Sonderstellung haben die folgenden drei Funktionen, welche nicht nur Variable als Argument zulassen, sondern auch Typbezeichner:

SizeOf(a) | gibt die Größe des Arguments a in Worten zurück. Das Argument kann dabei ein Typ oder auch eine Variable (beliebigen Typs) sein. Auch komplexe Typen oder Variablen sind zulässig, es muß sich jedoch um existierende Typen handeln.
Low(a) | gibt die untere Grenze für den Index eines Arrays a zurück. Das Argument muß eine Variable vom Arraytyp oder ein Arraytyp oder ein benutzerdefinierter Typ mit einem Array als Grundtyp sein.
High(a) | gibt die obere Grenze für den Index eines Arrays a zurück. Das Argument muß eine Variable vom Arraytyp oder ein Arraytyp oder ein benutzerdefinierter Typ mit einem Array als Grundtyp sein.

Die Funktionen Low und High sind insbesondere im Umgang mit Funktionen mit offenen Arrays als Funktionsargumente bedeutend. Deren Benutzung wird an entsprechender Stelle beschrieben.

Bitmanipulationen

Ab der Version 3 werden auch Bit-Operationen unterstützt, welche auf Integerwerte angewandt werden können. Damit dienen die Integerwerte als Bit-Vektoren der Länge 32. Bei den Bit-Operationen werden Integer als vorzeichenlose Grössen behandelt, d.h. die Shifts schieben z.B. Nullen nach.

Fünf Compiler-Befehle erlauben die Manipulation einzelner Bits:

x BITAND y: Bitweises UND von x und y
x BITOR  y: Bitweises ODER von x und y
x BITXOR y: Bitweises exklusives ODER von x und y
BITNOT x: Einerkomplement von x
x SHL    y: Links-Shift von x um y Stellen
x SHR    y: Rechts-Shift von x um y Stellen

Darüberhinaus liefert die Include-Datei Bit.spi (benötigt das Package Bit.spp) Funktionen, um Bits gezielt zu setzen oder abzufragen.

FUNCTION SetBitAll (VAR i: INTEGER, Set: BOOLEAN);
Initialisiert alle Elemente eines Bitvektors "i" auf den Wert "Set". Für implizite Initialisierungen kann stattdessen die Konstante "BitFalseInit"
verwendet werden.

FUNCTION SetBit (VAR i: INTEGER, pos: INTEGER, Set: BOOLEAN); FORWARD;
Setzt das Element der Position "pos" eines Bitvektors "i" auf den Wert "Set".

FUNCTION GetBit (i: INTEGER, pos: INTEGER): BOOLEAN; FORWARD;
Gibt den Wert des Elements der Position "pos" eines Bitvektors "i" zurueck.

Zu Testzwecken kann das Bitmuster als Zeichenkette ausgegeben werden:
FUNCTION BitPattern (i: INTEGER): STRING; FORWARD;
Gibt das Bitmuster der Variable i als String aus 0 und 1 zurueck, wobei die Position 0 bis 31 von links nach recht gelesen wird.

Float

Der Datentyp Float umfaßt die realen Zahlen:

3.4038238E38 bis 5.8774717E-39,
0.0,
-5.8774724E-39 bis -3.4028236E38.

Die arithmetischen Grundoperationen +, -, * und / liefern reale Zahlen. Exponenten wird der Operator ** vorangestellt. Darüberhinaus stehen folgende Funktionen mit realem Ergebnis zur Verfügung:

Abs(f)    - Absolutwert
Float(i)  - Typkonvertierung
Hvs(f)    - Heavyside-Funktion
Sin(f)    - Sinus
Cos(f)    - Cosinus
Tan(f)    - Tangens
Asin(f)   - Arcus Sinus
Acos(f)   - Arcus Cosinus
Atan(f)   - Arcus Tangens
Ln(f)     - Natürlicher Logarithmus
Log(f)    - Logarithmus zur Basis 10
Sign(f)   - Signum (Rückgabewert: -1.0, 0.0, 1.0 abh. von Vorzeichen)
Sqr(f)    - Quadrat
Sqrt(f)   - Quadratwurzelfunktion
Fract(f)  - Liefert die Nachkommastellen zurück
Min(f1,f2)  - Gibt kleineren Wert der beiden Argumente zurück
Max(f1,f2)  - Gibt größeren Wert der beiden Argumente zurück
Dec(f1[,f2]) - Dekrementierung von f1 um 1 oder um f2, falls vorhanden
Inc(f1[,f2]) - Inkrementierung von f1 um 1 oder um f2, falls vorhanden

Die Funktionen: Abs, Min, Max, Hvs, Sign, Dec und Inc sind überladen und können ebenfalls für Argumente und Rückgabewerte des Typs Integer angewendet werden.

Die Vergleichsoperatoren ( < , <= , = , >= , > , <> ) sind ebenfalls auf Float-Zahlen anwendbar, wobei jedoch, wie üblich, Ungenauigkeiten bei den Operatoren "gleich" (=) und "ungleich" (<>) beachtet werden müssen.

Char

Der Wert einer CHAR-Größe wird durch Einschließen in einfache Anführungszeichen gekennzeichnet, z.B.:

CONST ALower : CHAR = 'a';

Im Zusammenhang mit der Zeichenverarbeitung serieller Schnittstellen und dort besonders im "Byte-Modus" ist dieser Typ von besonderer Bedeutung. Es stehen Funktionen zur Verfügung um eine CHAR-Größe sowohl nach Integer-Werten: ord(c)wie auch nach Zeichenketten (vgl. Kapitel "Die Standardbibliothek Stdlib.SPI") zu konvertieren. Die einzige Standardfunktion welche als Ergebnis einen Wert vom Typ CHAR liefert ist die Konvertierungsfunktion:

Char(i) liefert das dem Integer-Wert i zugeordnete Zeichen der ASCII-Code Tabelle als Char-Wert. Der Wert i muß im gültigen Bereich zwischen 1 und 255 liegen

Die Standardbibliothek bietet darüber hinaus noch einige andere Funktionen, welche diesen Typ zum geeigneten Instrument zur Analyse und Bearbeitung von Zeichenketten macht. Die Verbindung zu numerischen Werten kann z.B. dazu benutzt werden, um auf einfache Weise Prüfsummen zu seriell zu übertragenden Zeichenketten zu bilden.

Boolean

Operanden vom Typ Boolean nehmen entweder den Wert "True" oder "False" an. Sie werden durch die logischen Operatoren:

AND logische UND-Verknüpfung
OR  logische ODER-Verknüpfung
XOR exklusive ODER-Verknüpfung und
NOT Negation

komplettiert.

Als Standardfunktion mit booleschem Ergebnis liefert:

Result := Odd(i);

den Wert "True", wenn i (vom Typ Integer) ungerade ist und andernfalls den Wert "False".

Strukturierte Datentypen

Als "Strukturierte Datentypen" bezeichnet man Strukturen aus skalaren oder schon definierten weiteren strukturierten Datentypen, welche zu einem komplexen Datentyp zusammengefügt sind. Als "Array" ist ein Feld definiert, welches eine feste Anzahl von Komponenten desselben Datentyps umschließt, während der "Record" die Möglichkeit bietet, Komponenten verschiedener Datentypen zu einer Struktur zusammenzufassen.

Array

Arrays werden implizit in einer Variablendeklaration:

VAR Array: Datentyp[KonstDim];

oder mittels Typbezeichner:

TYPE Arraytyp = Datentyp[KonstDim];

VAR Array: Arraytyp;

zur Verfügung gestellt. KonstDim ist dabei ein fester, ganzzahliger Wert oder eine Konstante vom Typ Integer. Sie legt die Anzahl der Komponenten fest. Die Indizierung des Feldes liegt dann im Bereich von je einschließlich 0 bis (KonstDim-1). Der Datentyp der Komponenten ist beliebig. Neben den skalaren Typen sind ebenfalls strukturierte Datentypen möglich.

Ganzzahlige Ausdrücke in den Indexklammern [ ] werden vor dem Zugriff berechnet.

Ein Überschreiten der Indexgrenzen wird zur Compilationszeit erkannt, falls der Index ein konstanter Ausdruck ist. Im Falle eines Überschreitens durch einen variablen Indexausdruck erfolgt ein Programmabbruch (Range Error).

Wird ein Feld von Konstanten vereinbart, so muß der Inhalt des Feldes innerhalb einer Anweisung definiert werden. Das geschieht mit Hilfe der folgenden Syntax:

CONST Array: Datentyp[Dim]= ( Wert0, Wert1, ..., WertDim-1);

Dabei ist auf die korrekte Reihenfolge der Werte in der Zuweisungsklammer zu achten. Auf die gleiche Art können Variablenfelder initialisiert werden.

Diese Zuweisungsklammern sind nur innerhalb des Vereinbarungsteils eines Programms zulässig. Im Anweisungsteil, d.h. im eigentliche Programm müssen die Komponenten entweder einzeln zugewiesen werden:

Array[Index] := Value;

oder man kopiert ein komplettes Feld vom gleichen Typ:

Array1 := Array2;

Zweidimensionale Felder werden auf gleiche Art durch das Zufügen einer zweiten Indexklammer erzeugt:

VAR Array: Datentyp[KonstDim1][KonstDim2];

Die Initialisierung von zweidimensionalen Variablenfeldern bzw. die Vereinbarungen von zweidimensionalen Konstantenfeldern wird durch geschachtelte Zuweisungsklammern erreicht:

VAR Array: Datentyp[Dim1][Dim2]=
    ((Wert_0_0, Wert_0_1, ..., Wert_0_Dim2-1),
(Wert_1_0, Wert_1_1, ..., Wert_1_Dim2-1),
........
(Wert_Dim1-1_0,     ..., Wert_Dim1-1_Dim2-1) );

Das Objekt Array ist ein Feld aus Dim1 Feldern mit je Dim2 Werten des angegebenen Datentyps. Die Initialisierungsliste enthält Dim1 Werte entsprechend der ersten Dimension (Dim1 Zeilen). Jeder Initialisierungswert ist selbst eine Liste von Werten der zweiten Dimension (Dim2 Spalten). In anderen Worten wird die erste Werteliste(Wert_0_0, Wert_0_1, ..., Wert_0_Dim2-1)der ersten Zeile des Feldes Array zugewiesen, die zweite Liste der zweiten Zeile usw..

Record

Die Datenstruktur "Record" bietet die Möglichkeit, eine feste Anzahl von Komponenten, von welchen jede von beliebigem Typ sein darf, zu einem neuen, komplexen Datentyp zusammenzufassen.

Die allgemeine Typdefinition lautet:

TYPE Typbezeichner =RECORD
                      Feldliste
                    END;

Die Syntax der Vereinbarung wird an einem Beispiel der Include-Datei Stdlib.SPI veranschaulicht:

TYPE
  HardwareErrorDesc = RECORD
    Error : INTEGER;
    Handle : PortHandle;
    Slot : INTEGER;
    Port : INTEGER;
    Module : INTEGER;
  END;

Hier wird deutlich, wie Komponenten verschiedener Datentypen zu einem Record zusammengefaßt werden. Komponenten vom selben Typ können wie bei der Variablendeklaration als Liste deklariert werden. Auch zuvor vereinbarte strukturierte Datentypen sind als Komponententyp zulässig. So kann auch eine zuvor vereinbarte Record-Struktur selbst Komponente einer Recordstruktur sein.

Eine Variable wird dann in der bekannten Form deklariert:

VAR HWE : HardwareErrorDesc;

Der Zugriff auf einen gesamten Record ist nur für die Wertzuweisung einer zweiten Record-Variablen vom selben Typ zulässig. Ansonsten wird sinnvollerweise nur kompenentenweise auf die enthaltenen Variablen zugegriffen. Referenzen auf eine Record-komponente erfolgen durch den Punktoperator(.). Der erste Operand des .-Operators ist das Objekt, welches die Recordstruktur enthält. Der zweite Operand ist der Name der Komponente. Das Beispiel: HWE.Error bezieht sich also auf die Komponente Error welche in der obigen Variable HWE vom Record-Typ HardwareErrorDesc enthalten ist.

Das folgende Beispiel verdeutlicht die Handhabung:

VAR A,B:HardwareErrorDesc;           {Dekl.: A,B vom Typ HardwareErrorDesc}

BEGIN
  A.Error := ErrNone;             {Initialisierung komponentenweise}
  GetHardwareError(A);            {Feld über Standardfunktion besetzen}
  B := A;                         {Kopie erstellen}
  ShowInteger(TopLeft,A.Error,6); {Individueller Zugriff}
  .....
END.

Die implizite Initialisierung erfolgt ähnlich wie bei den Feldern, worauf nur zu achten ist, die Zuweisung in der der Typ-Definition entsprechenden Reihenfolge anzuordnen.

Genauso können auch Konstanten von Records angelegt werden. Durch eine Zuweisung einer solchen Konstanten ist eine einfache Initialisierung von Verbundtypen möglich.

String

Zeichenketten werden unter dem Datentyp "String" verarbeitet. Die Länge wird intern festgelegt. Während für Stringkonstanten die tatsächliche Länge der Zeichenkette im Speicher belegt wird, ist für Stringvariable eine fixe Länge von 127 Zeichen plus ein Zeichen für die Endekennung reserviert. Die Länge der Stringkonstanten ist dabei ebenfalls auf maximal 127 Zeichen begrenzt.

Die Zeichenkette wird durch ein führendes und ein abschließendes doppeltes Hochkomma gekennzeichnet. Die Vereinbarung einer Stringkonstante hat z.B. die Form:

CONST Stringbezeichner: STRING = "Eine Zeichenkette";

Das Zusammenfügen zweier Zeichenketten geschieht einfach mit Hilfe des '+' Operators:

VAR strA,strB: String;      {Deklaration: zwei Zeichenketten}
BEGIN
   strA   :="Controller ";  {erste Zeichenkette}
   strB   :="S320";         {zweite Zeichenkette}
   strC   :=strA+strB;      {Inhalt: Controller S320}
END.

Der Inhalt zweier Zeichenketten kann mit den Operatoren: '=' und '<>' verglichen werden.

Spezielle Funktionen zur Manipulation von Zeichenketten und Konvertierungsfunktionen sind in der Include-Datei "STDLIB.SPI" enthalten und werden im entsprechenden Kapitel behandelt.

Zur Repräsentation von speziellen Kontrollzeichen stehen sogenannte Escape-Sequenzen zur Verfügung, die aus einem Backslash ( \ ) gefolgt von einem weiteren Zeichen bestehen:

"\a"  Gong-Zeichen (Bell); entspricht dem ^G für Terminalprogramme
"\b"  Backspace
"\f"  Seitenvorschub (Formfeed)
"\n"  Zeilenendezeichen (Newline)
"\r"  Zeilenrücklauf (Carriage Return)
"\t"  horizontaler Tabulator (Tab)
"\v"  vertikaler Tabulator
"\""  Anführungszeichen (im Gegensatz zu Normalinterpretation als Stringende)
"\\"  das Backslash-Zeichen selbst

In einen String können beliebige Char-Zeichen eingefügt werden, mit Ausnahme der Endekennung: '\0', z.B.:

VAR S: STRING = "Hallo\$0D"; { = "Hallo\n" }

4.4. Anweisungen

Die Anweisungen sind die Programmbefehle. Sie bilden das eigentliche Programm.

Es gibt Anweisungen, die Aktionen auslösen (z.B. eine Wertzuweisung) und Anweisungen, welche lediglich den Programmablauf steuern (z.B. Schleifen).

Wertzuweisung

Durch die Wertzuweisung wird der Wert einer Konstanten, einer Variablen, einer Funktion oder eines Rechenausdrucks einer Variablen zugeordnet. Sie hat die Syntax:

Variable := Ausdruck;

Da keine automatischen Typkonvertierungen durchgeführt werden, müssen das Ergebnis des Ausdrucks und die Variable vom gleichen Typ sein. Dies ist auch bei Wertzuweisungen durch numerische Literale zu beachten. So gilt für eine Zahl mit Dezimalpunkt (Vor- und Nachkommastellen sind stets erforderlich) oder Exponentialzeichen (z.B. 1E2) der Datentyp FLOAT. Für eine Zahl ohne Dezimalpunkt und Exponentialzeichen gilt der Datentyp INTEGER.

Rechenausdrücke kombinieren konstante und/oder variable Operanden und Funktionsaufrufe mit Rückgabewert mittels Operatoren. Die Auswertung erfolgt von links nach rechts. Durch das Setzen von Klammern kann in gewohnter Weise die Ausführung gesteuert werden. Die implizite Operatorhierarchie ist im folgenden dargestellt:

- +           (unäres Minus/Plus: Vorzeichen)
NOT / BITNOT    (Boolesche- / Bit-Negation)
**           (Exponentialoperator)
* / %         (Multiplikationsoperatoren)
BITOR / BITXOR  (Bitweises Oder / Exklusiv Oder)
SHL / SHR     (Shiftoperationen)
= <> <= >= < > (Relationsoperatoren)
AND          (Boolesches Und)
OR / XOR      (Boolesches Oder / Exklusiv Oder)

I.a. wird jedoch geraten, die Auswertungspriorität explizit durch Klammern zu bestimmen.

Bei booleschen Ausdrücken müssen alle Teile wohldefiniert sein, da die Auswertung nicht nach Festliegen des Wahrheitswertes abgebrochen wird. (So ist es z.B. nicht möglich, die Gültigkeit des Index eines Feldes und einen logischen Ausdruck, der auf diesen Index des Feldes zugreift, in einem logischen Ausdruck zu verknüpfen.)

Bei der logischen Verknüpfung zweier Vergleiche müssen diese stets geklammert werden, da AND bzw. OR höhere Priorität als die Relationsoperatoren besitzen. Wenn festgestellt werden soll ob x zwischen 0 und 10 liegt, heißt der korrekte Ausdruck:

(x>0) AND (x<10)

In dem Ausdruck

x>0 AND x<10

würde dagegen versucht: 0 AND X auszuwerten.

Verbundanweisung

Die Verbundanweisung definiert einen Block, der vom Compiler zu einer (komplexen) Anweisung zusammengefaßt wird. Sie ist damit ein wesentliches Mittel zur Strukturierung von Programmen, da sie beliebige Programmsequenzen innerhalb einer strukturierten Anweisung (Bedingungen, Schleifen) ermöglicht, die nach der Syntax nur einfache Anweisungen beinhalten dürfen.

Die Syntax ist:

BEGIN
  Anweisung 1;
  Anweisung 2;
   .....
  Anweisung N;
END;

Das die letzte Anweisung abschließende Semikolon ist notwendig und wird nicht wie beim Standard-Pascal als Leeranweisung interpretiert.

Schleifen

Zur Verfügung stehen drei Schleifentypen. Die "FOR"-Anweisung realisiert Iterationen mit einer vorgegebenen Zahl von Wiederholungen. Die beiden Alternativen iterieren über eine unbestimmte Anzahl von Wiederholungen, wobei das Eintreten eines bestimmten Ereignisses als Abbruchbedingung dient. Während die "WHILE"-Anweisung das Ereignis vor der Ausführung des Schleifeninhaltes prüft ("abweisende Schleife"), erfolgt diese Prüfung bei der "REPEAT"-Anweisung am Ende der Schleife, wodurch eine einmalige Ausführung des Schleifeninhaltes erzwungen wird ("nicht-abweisende Schleife").

Zur Vereinfachung der Reaktion auf weitere Ereignisse innerhalb einer Schleife wurden die Befehle "BREAK" und "CONTINUE" als Erweiterung zu Standardpascal in Spell aufgenommen.

FOR-Anweisung

Die FOR-Anweisung hat die zwei möglichen Formen:

FOR Zaehler:=Startwert TO Endwert DO Anweisung
FOR Zaehler:=Startwert DOWNTO Endwert DO Anweisung

Zähler, Startwert und Endwert müssen vom Typ Integer sein. Start- und Endwert werden einmalig vor Ausführung der Schleife berechnet. Werden sie innerhalb der Schleife verändert, hat dies keinen Einfluß auf die Anzahl der Wiederholungen. Die Zählvariable darf innerhalb der Schleife nicht verändert werden.

Als Erweiterung zu Standard-Pascal können durch die folgende Formulierung auch Schrittweiten definiert werden:

FOR Zaehler:=Startwert TO Endwert STEP Ausdruck DO Anweisung

Der Ausdruck muß einen Wert vom Typ Integer liefern.

Die implizit ausgeführten Schrittweiten sind:

Form a) (mit "TO")     +1
Form b) ("DOWNTO")    - 1.

Sollten Start- und Endwert das gleiche Ergebnis liefern, wird der Schleifenausdruck genau einmal ausgeführt. Die Schleifenanweisung wird übersprungen, wenn die Auswertung der Grenzen Endwert < Startwert im Fall a) bzw. Endwert > Startwert im Fall b) ergibt.

Der Zähler ist nur innerhalb der Schleife definiert. Soll er außerhalb der Schleife weiterverwendet werden, ist er durch eine explizite Anweisung neu zu besetzen.

WHILE-Anweisung

Die Abbruchbedingung einer WHILE-Anweisung:

WHILE Bedingung DO Anweisung;

ist ein boolescher Ausdruck. Er wird zu Anfang jedes Iterationsschrittes ausgeführt. Ergibt die Auswertung der Bedingung den Wahrheitswert "FALSE" so wird das Programm nach Ende der WHILE-Anweisung fortgesetzt.

Diese Schleife wird als "abweisend" bezeichnet, da sie bei Nicht-Erfüllen der Bedingung komplett übersprungen wird.

REPEAT-Anweisung

Im Gegensatz zur WHILE-Anweisung wird mit der REPEAT-Anweisung eine "nicht-abweisende" Schleife realisiert, d.h. der Inhalt der Schleife wird, unabhängig von der Abbruchbedingung, mindestens einmal durchlaufen.

Die REPEAT-Anweisung hat die Syntax:

REPEAT
   Anweisung 1;
   Anweisung 2;
    ......
UNTIL Bedingung;

Im Unterschied zur WHILE-Anweisung kann die REPEAT-Anweisung theoretisch beliebig viele Anweisungen enthalten, da die Symbole REPEAT und UNTIL bereits eine Klammerung bewirken. Dadurch ist innerhalb dieser Schleife keine Klammerung mittels einer Verbundanweisung notwendig.

Die Bedingung, ebenfalls ein boolescher Ausdruck, wird nach jedem Iterationsschritt ausgewertet. Die Schleife wird wiederholt, wenn der Ausdruck den Wahrheitswert "FALSE" liefert. Bei Eintreten des Ereignisses "TRUE" wird die Programmausführung mit der folgenden Zeile fortgesetzt.

BREAK-Anweisung

Die BREAK-Anweisung erlaubt es, FOR, WHILE oder REPEAT-Schleifen vorzeitig zu unterbrechen. Bei geschachtelten Schleifen wird die jeweils innerste Schleife unterbrochen.

FOR i := 1 TO 10 DO BEGIN
IF i = 5 THEN BREAK;
END;

Die Schleife wird hier nicht für alle Werte der FOR-Anweisung ausgeführt, sondern wird sofort bei Eintreten des Ereignisses i=5 verlassen.

CONTINUE-Anweisung

Die CONTINUE-Anweisung bewirkt, daß der aktuelle Schleifendurchlauf einer FOR, WHILE oder REPEAT-Schleife beendet wird und die Schleife mit der nächsten Iteration fortgesetzt wird. Es wird also nicht die gesamte Schleife, sondern nur ein Durchlauf (Iteration) abgebrochen. Das Programm wird mit der folgenden Prüfbedingung der Schleife fortgesetzt.

i := 0;
REPEAT
inc(i);
IF odd(i) THEN CONTINUE;
ShowInteger(TopRight,i,4);
UNTIL i = 10;

Die CONTINUE-Anweisung bewirkt in diesem Beispiel, daß die ShowInteger-Anweisung bei ungeraden i übersprungen wird, d.h. nur gerade i werden angezeigt.

Alternativen

Häufig muß eine Anweisung nur bei Eintreten eines bestimmten Ereignisses ausgeführt werden oder, je nach Ereignis, eine von mehreren zur Auswahl stehenden Anweisungen ausgeführt werden. Beides wird mit Hilfe der Auswahlanweisungen realisiert. Für den ersten Fall steht die IF-Anweisung zur Verfügung. Der zweite Fall kann durch eine IF-ELSE-Bedingung oder durch eine CASE-Anweisung implementiert werden.

IF-Anweisung

Wie erwähnt kann die IF-Anweisung als "bedingte Anweisung" eingesetzt werden:

IF Bedingung THEN Anweisung;

oder zur Steuerung zwischen verschiedenen Anweisungen ("echte Alternative")

IF Bedingung THEN
   Anweisung 1
    ELSE
   Anweisung 2;

Als Bedingung dient wieder ein boolescher Ausdruck. Die Anweisung wird ausgeführt, wenn die Auswertung dieses Ausdrucks den Wert "TRUE" ergibt. Dann wird die Anweisung, die auf das Symbol "ELSE" folgt, ignoriert. Für den anderen Fall, in dem der Ausdruck den Wahrheitswert "FALSE" liefert, wird die folgende Anweisung übersprungen und, falls vorhanden, die ELSE-Anweisung ausgeführt.

HINWEIS: Bei geschachtelten IF-ELSE-Anweisungen ist zu beachten, daß jeder ELSE-Teil zu der vorausgehenden IF-Anweisung gehört, welche ihm am nächsten steht.

IF a=1 THEN
  IF b=1 THEN a:=2
  ELSE a:=3;

Das ELSE bezieht sich also auf die Bedingung b=1. In diesem Beispiel bleiben damit die Fälle a<>1 unberücksichtigt, die Anweisung wird komplett übersprungen. Andernfalls muß die Struktur mittels einer Verbundanweisung explizit definiert werden. Die Struktur welche die ELSE-Anweisung als Alternative zur ersten IF-Bedingung formuliert, lautet:

IF a=1 THEN BEGIN
  IF b=1 THEN a:=2;
END ELSE a:=3;

Dieses Beispiel legt nahe, daß es stets ratsam ist, explizite BEGIN-END Beziehungen zu formulieren und den Ablauf damit eindeutig und leicht nachvollziehbar festzulegen.

CASE-Anweisung

Mit der CASE-Anweisung erhält man ein Werkzeug, durch welches unübersichtlich verschachtelte IF-Anweisungen ersetzt werden können. Ihre Syntax lautet:

CASE Variable OF
    Marke1:   Anweisung 1;
    Marke2: Anweisung 2;
      .....
    MarkeN:   Anweisung N;
END;

Die Variable muß ein ordinaler Typ (Integer, Boolean oder Char) sein. Sie wird mit den Marken (Konstanten vom entsprechenden Typ) verglichen. Es wird diejenige Anweisung ausgeführt, deren zugehörige Marke mit dem Wert der Variable übereinstimmt. Ist keine passende Marke in der Liste enthalten, wird das Programm mit der Fehlermeldung "Illegal Case" abgebrochen. Um diesen Fehler zu vermeiden, kann die Liste durch einen "ELSE"-Befehl erweitert werden, der alle Fälle "auffängt", für die keine explizite Marke gefunden wird.

Diese Technik wird im folgenden Ausschnitt eines Programms deutlich. Es zeigt außerdem, wie die Anschaulichkeit des Programms durch das Verwenden von Konstanten verbessert werden kann:

PROGRAM Beispiel;
CONST   Warte:     INTEGER = 0; { Zustand Warte auf Impuls  }
        Ausfahren: INTEGER = 1; { Zustand Stempel ausfahren }
        Stempeln:  INTEGER = 2; { Zustand Stempeln          }
        Einfahren: INTEGER = 3; { Zustand Stempel einfahren }

VAR     Zustand:   INTEGER;     { Zustand des Systems       }

BEGIN
  Zustand := Warte;             { Initialisieren Zustand    }

  CASE Zustand OF
    Warte:      ....
    Ausfahren:  ....
    Stempeln:   ....
    Einfahren:  ....
    ELSE ErrTrigger(1000);      { Fehlerfunktionen          }
  END(Case)
        ....
END.

Soll dieselbe Anweisung beim Eintreten verschiedener Ereignisse ausgeführt werden, so können auch mehrere durch Kommata abgetrennte Marken angegeben werden, oder es werden zwei durch 2 Punkte getrennte Marken angegeben, worauf die zugehörige Anweisung für alle Marken innerhalb dieser beiden angegebenen (einschließlich) ausgeführt wird, z.B.:

CASE I OF
   0..3:     Anweisung1;  {Für alle Werte von I zwischen 0 & 3}
   4,6,8:    Anweisung2;  {Für I=4, I=6 oder I=8}
   5,7,9..12: Anweisung3;  {Schreibweisen auch kombinierbar}
END;

Ein doppeltes Auftreten einer Marke oder sich überlappende Bereiche werden vom Compiler als Fehler erkannt.

Falls möglich, werden durch Kommata getrennte Marken zu Bereichen zusammengesetzt (d.h. "1,2" wird als "1..2" übersetzt), was für kürzeren Code sorgt und zur Laufzeit effektiver ist.

4.5. Funktionen

Mit Hilfe von Funktionen können Blöcke zur logischen Unterteilung eines Programmes abgegrenzt werden. Die Funktion besteht, ähnlich wie das Hauptprogramm, aus einem Vereinbarungs- und einem Anweisungsteil. Die im Vereinbarungsteil eingeführten Größen besitzen lokale Gültigkeit, d.h. sie sind nur innerhalb dieser Funktion bekannt. Bei Verlassen der Funktion stehen diese Größen nicht mehr zur Verfügung, und die durch sie in Anspruch genommenen Speicherplätze werden freigegeben. Daher werden die in einer Funktion deklarierten Variablen auch "automatische Variablen" genannt. Automatische Variablen können nicht implizit initialisiert werden.

Standard-Pascal bietet mit der "Procedure"-Anweisung eine zweite Möglichkeit zur Abgrenzung von Blöcken. Hinter dieser Syntax verbergen sich jedoch keine Möglichkeiten, die nicht auch durch Funktionen realisiert werden könnten. Daher wurde auf diese Option ganz verzichtet.

Im Gegensatz zu den lokalen Größen bezeichnet man die am Anfang des Programmes definierten Größen als globale Größen. Sie sind im gesamten Programm gültig. Das bedeutet auch, daß Größen aus dem Programm ohne explizite Parameterübergabe innerhalb einer Funktion benutzt werden können. Werden globale Variablen in einer Funktion geändert, so bleibt diese Änderung auch nach Verlassen der Funktion bestehen, was zu unbeabsichtigten und schwer aufzufindenden Effekten führen kann. In jedem Fall wird die Übersichtlichkeit des Programms stark beeinträchtigt. Deshalb ist es i.a. vorzuziehen, alle in einer Funktion verwendeten Parameter der aufrufenden Routine explizit als Argumente der Funktion zu übergeben.

Argumente können in einer Funktion beliebig verändert werden, ohne deren Werte in der aufrufenden Routine zu ändern. Ist eine Änderung der Argumente beabsichtigt, so können diese als variabel definiert werden.

Des weiteren ermöglicht die Parameterübergabe die Ausführung einer Funktion für unterschiedliche Argumente (vom selben Typ). Der Informationsaustausch ist durch eine Parameterliste im Funktionskopf festgelegt.

Tritt in einer Funktion eine Größe auf, die sowohl global, wie auch lokal definiert ist, so gilt stets die lokale Definition. Nach dem Verlassen der Funktion erlangt die globale Größe ihre Gültigkeit wieder.

Eine Kombination der Eigenschaften von lokalen und globalen Größen einer Funktion bietet die "statische Variable".

Die statische Variable wird durch das Schlüsselwort STATIC gekennzeichnet. Dabei handelt es sich um eine Variable, die wie die lokale Variable VAR nur in dieser Funktion gültig ist, die jedoch nach Verlassen der Funktion nicht freigegeben wird, d.h. ihr Wert bei Eintreten in diese Funktion entspricht ihrem Wert nach dem letzten Verlassen. Die statischen Variablen sind daher nur in Verbindung mit einer impliziten Initialisierung sinnvoll: nur beim ersten Aufruf der Funktion wird dieser Variable der Initialisierungswert als Startwert zugewiesen. Sie eignet sich damit z.B. als Zähler für die Zahl der Funktionsaufrufe:

FUNCTION Whatsoever();
STATIC NCalls : INTEGER = 0;
BEGIN
   inc(NCalls);
   ShowString(TopRight,"Call");
   ShowInteger(TopLeft,NCalls,6);
   ..........
END;

Der Aufbau einer Funktion entspricht dem des Programms, wobei lediglich der Programmkopf durch den Funktionskopf ersetzt wird und eventuell am Funktionsende das Ergebnis zurückgegeben wird.

Manche der im Programmumfang mitgelieferten Funktionen (wie z.B. die Funktionen der Standard-Includedatei STDLIB.SPI) sind extern implementiert. Sie werden von der Laufzeitumgebung zur Verfügung gestellt. Ihre Schnittstellen sind in Spell formuliert, gefolgt von der Anweisung EXTERNAL und ihrer Kennung vom Typ Integer. Diese Kennung sowie die Aufrufparameter dürfen nicht verändert werden! Für den Spell-Programmierer ist die Anweisung EXTERNAL nicht von Bedeutung.

Schnittstelle einer Funktion

Der allgemeine Funktionskopf hat die folgende Syntax:

FUNCTION Bezeichner1 (Par1Bez: Par1Typ, .....) : Ergebnistyp;

Wenn eine Funktion als reines Unterprogramm verwendet wird und kein Ergebnis liefert entfällt die Vereinbarung des Rückgabewerts:

FUNCTION Bezeichner2 (Par1Bez: Par1Typ, .....);

Hier steht Par1Bez für den Bezeichner des ersten Parameters und Par1Typ ist ihr zugeordneter Datentyp. Das Komma dient als Separator innerhalb der Parameterliste. Die Parameterliste kann leer sein.

Wenn wie im ersten Beispiel ein Ergebnistyp vereinbart ist (optional!), muß jedes mögliche Ende der Funktion ein Ergebnis des vereinbarten Typs mit einer RETURN-Anweisung zurückgeben:

Return ErgebnisVariable;

Ist kein Rückgabewert vereinbart, kann die RETURN Anweisung (ohne Variable, direkt durch Semikolon beendet) verwendet werden, um an jeder beliebigen Stelle der Funktion zum aufrufenden Programm zurückzukehren. Z.B. kann das Eintreten eines bestimmten Ereignisses ein vorzeitiges Abbrechen der Funktion erfordern:

IF Ereignis THEN RETURN;

Aus dem Programm wird die erste Beispielfunktion (mit Ergebnis) durch die folgende Anweisung aufgerufen:

Ergebnis:= Bezeichner1 (Aktualpar1,......);

bzw. die zweite Funktion (ohne Ergebnis):

Bezeichner2 (Aktualpar1,...);

Wird ein Funktionsaufruf ohne Parameter auf eine Funktion angewandt, die tatsächlich ein Ergebnis liefert, so erfolgt eine Fehlermeldung des Compilers. Es gibt jedoch Fälle, in denen dieser Wert für das aufrufende Programm nicht von Bedeutung ist. Anstatt der Funktion eine bedeutungslose Variable zuzuweisen, stellt man der Funktion das Wortsymbol IGNORE voran:

IGNORE Bezeichner1 (Aktualpar1,.....);

Es ist zu beachten, daß die Parameter als Wert übergeben werden, d.h. es werden lokale Größe eingerichtet, denen die zugehörigen Werte der Übergabeparameter zugewiesen werden ("Call by Value"). Damit wird ein ungewolltes Verändern eines Wertes in der Funktion vermieden. Im obigen Ausdruck ist die Variable mit dem Bezeichner Par1Bez also eine Kopie des Aktualparameters Aktualpar1.

Dagegen wird manchmal beabsichtigt, eine Variable in einer Funktion zu verändern. Zu diesem Zweck können die tatsächlichen Aktualparameter an die Funktion übergeben werden ("Call by Reference"). Dies wird durch Voranstellen des Symboles VAR vor die entsprechende Größe erreicht:

FUNCTION Bezeichner (VAR Par1Bez: Par1Typ, .....):Ergebnistyp;

Der Funktionsaufruf ändert sich in diesem Fall nicht.

Gleichermaßen kann einem Funktionsargument das Symbol CONST vorangestellt werden. Dann kann der Parameter innerhalb der Funktion nicht geändert werden, und hat automatisch das Attribut INPUT (vgl. Kap. Attribute), d.h. es erfolgt keine Warnung, daß das Argument nicht verwendet wurde. Strings und Verbundvariablen (Arrays, Records) werden immer per Referenz übergeben, der Compiler läßt jedoch keine Veränderung von als konstant übergebenen Verbundvariablen zu. Es wird keine Lokalkopie des Arguments erzeugt, was sich insbesondere bei Funktionen, die ein Argument nicht selbst verwenden, sondern nur an eine weitere Funktion "durchreichen", auszahlt.

Eine Funktion ist dem Programm erst durch seine Implementierung bekannt, d.h. ein Funktionsaufruf muß im Programmaufbau unterhalb der Funktion stehen. Die daraus entstehenden Restriktionen (z.B. zwei Funktionen können sich nicht gegenseitig aufrufen) können jedoch mit Hilfe von "Funktionsprototypen" überwunden werden. Dazu dient das Schlüsselwort FORWARD.

Die Anweisung:

FUNCTION BezFkt (Par1Bez: Par1Typ,....): Ergebnistyp; FORWARD;

setzt die Funktion als definiert, d.h. sie kann aufgerufen werden, ohne daß die eigentliche Definition schon erfolgt ist. Zu Beachten ist dabei, daß der Prototyp mit dem Funktionskopf exakt (!) übereinstimmt.

Rekursive Funktion

Eine Funktion kann aus ihrem eigenen Anweisungsteil erneut aufgerufen werden. Eine solche Funktion, die sich selbst aufruft, nennt man eine rekursive Funktion. Mit ihrer Hilfe lassen sich rekursive Algorithmen direkt implementieren. Unter Einbeziehung der Rekursion läßt sich eine Fakultätsberechnung wie folgt realisieren:

PROGRAM Fakultaet;                     { Rekursiv }
INCLUDE "STDLIB";

FUNCTION Fak(n:INTEGER):INTEGER;       {rekursive Funktion }
VAR Res:INTEGER;                       { lokale Variable }
BEGIN
   IF n=0 THEN Res := 0;               { Def. n!=1 für n=0 }
   ELSE Res := n*Fak(n-1);             { Def. n!=n(n-1)! für n>0 }
   RETURN Res;                         { Ergebnis zurückgeben }
END;

VAR Input,Resultat: INTEGER;           { Variablen Hauptprogramm }

BEGIN
   Input:=5;                           { Initialisierung }
   Resultat:=Fak(input);               { Funktionsaufruf }
   ShowInteger(TopLeft,Resultat,6);    { Ausgabe auf Display }
END.

Die hier vorgestellte Möglichkeit zur Berechnung der Fakultät ist den Beispielprogrammen entnommen.

Felder als Funktionsparameter

Felder können auf zwei Arten übergeben werden, mit:

1. definierter Größe, wobei der Typ und die Dimension(en) zuvor mit der TYPE-Anweisung definiert werden und das Argument mit dem so eingeführten Typbezeichner übergeben werden, und

2. offener Größe, wobei in der Argumentliste nur der Typ vereinbart wird; die eckige Klammer, welche die Dimension des Feldes festlegt, bleibt leer.

Die Angabe von Felddimensionen in der Parameterklammer ist generell nicht zulässig.

Feldargumente mit definierter Größe

Das Beispiel zeigt die Initialisierung eines fest vereinbarten Feldes mittels einer Funktion:

CONST Dim : INTEGER = 10;
TYPE Array : FLOAT[Dim];

FUNCTION InitArray(VAR A: Array);
VAR i: INTEGER;
BEGIN
   FOR i:= 0 TO Dim-1 DO A[i] := 0.0;
END;

Feldargumente mit offener Größe

Das Beispiel zeigt die Initialisierung des obigen Beispiels unter Verwendung von offenen Feldern. Mit dieser Funktion können, im Gegensatz zum obigen Beispiel, verschiedene Felder unterschiedlicher Feldlänge initialisiert werden.

FUNCTION InitArray(VAR A: FLOAT[]);
VAR i: INTEGER;
BEGIN
  FOR i:= Low(A) TO High(A) DO A[i] := 0.0;
END;

Für die Typkompatibilität von offenen Arrays gelten die üblichen Regeln: Der Elementtyp des Aufrufparameters muß exakt dem des Funktionsparameters entsprechen. Die Grenzen für den Index eines offenen Arrays werden über Low (derzeit die Konstante 0) und High ermittelt.

4.6. Attribute

Insbesondere im Umgang mit Bibliotheken können Warnungen störend sein. So werden z.B. im Normalfall nur einige der von einer Include-Datei zur Verfügung gestellten Funktionen von einem Programm genutzt. Werden keine Attribute gesetzt, so meldet der Compiler für jede unbenutzte Funktion eine Warnung. Mit Hilfe von Attributen werden dem Compiler zusätzliche Informationen bereitgestellt, um ungewollte Warnmeldungen zu vermeiden oder um weitere sinnvolle Warnmeldungen zu erhalten. Die Syntax zum Setzen von Attributen lautet:

ATTRIBUTE Bezeichner: Attr1[, Attr2];

Die verfügbaren Attribute sind:

NOREF: | Angewandt auf ein Symbol teilt dieses Attribut dem Compiler mit, daß keine Referenz auf dieses Symbol existieren muß. Der Compiler gibt dann keine Warnung mehr aus, falls das Symbol nicht verwendet wird.
NORETURN: | Angewandt auf eine Funktion teilt dieses Attribut dem Compiler mit, daß die Programmausführung nach Abarbeitung dieser Funktion nicht fortgesetzt wird, sondern daß das Programm beendet wird (i.a. für eine Ausnahme- oder Fehlerbehandlung).

Damit der Compiler unterscheiden kann, ob ein VAR-Parameter einer Funktion als Eingabeparameter fungiert und somit im aufrufenden Programm initialisiert werden muß oder ob er ausschließlich als Ausgabeparameter dient, wodurch eine Initialisierung innerhalb der Funktion notwendig wird, stehen die außerdem die Attribute INPUT, OUTPUT oder INOUT für Funktionsparameter zur Verfügung.

Wird die ATTRIBUTE-Anweisung außerhalb der betroffenen Funktion verwendet, muß neben dem Parameterbezeichner auch die betroffene Funktion angeführt werden. Die Syntax lautet dann:

ATTRIBUTE Funktionsname.Bezeichner: Attribut;

Dem Compiler wird durch das Setzen der Attribute folgende Funktion mitgeteilt:

INPUT | der VAR-Parameter einer Funktion ist Eingabewert und muß somit vom aufrufenden Programm initialisiert werden.
OUTPUT | der VAR-Parameter einer Funktion dient nur als Rückgabewert und muß somit in der Funktion initialisiert, jedoch nicht benutzt werden.
INOUT | Ein VAR-Parameter dient sowohl als Ein- als auch als Rückgabewert (Default-Einstellung).

Werden keine Attribute für einen Parameter angegeben, dann muß ein VAR-Parameter nicht initialisiert werden, wird jedoch nach dem Aufruf als initialisiert und gleichzeitig als benutzt gekennzeichnet.

weiter zu den Bibliotheken


Controller S320 Handbuch - Bibliotheken

 5. Bibliotheken

5.1. Die Bibliothek "STDLIB.SPI"

Die Datei STDLIB.SPI stellt die wesentlichen, zum Betrieb des Controllers notwendigen Funktionen zur Verfügung und sollte daher stets in das Programm eingebunden werden. Neben den Standarddatentypen, die auch von Pascal her bekannt sind, wurden weitere spezielle Datentypen eingeführt, die wichtige und häufig verwendete Funktionen des Controllers in geeigneter Weise unterstützen

Die Liste der vordefinierten Bezeichner erweitert sich durch das Einbeziehen der Datei um die folgenden, für den Programmierer relevanten Sprachelemente:

Typen: | DateTime, Time, Timer, DCF77Info, PortHandle, HardwareErrorDesc, PWMSettings, FileHandle, DirHandle, FileSysInfo, DirEntry, Socket, IpAddress, IpPort, ConnSpec, DnsTimeout
Konstanten:
Tasten: | KeyF1, KeyF2, KeyF3, KeyUp, KeyDown,KeyAll
Wochentage: | Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
Displaypositionen: | TopLeft, MidLeft, BotLeft, TopRight, MidRight, BotRight, DisplayCount
Schnittstellen: | Ser0, RS232_A, Ser1, RS485_A, Ser2, RS485_B
Signalkennungen: | SigTimer, SigKbd, SigSer0, SigSer1, SigSer2, SigDCF77, SigTermMsg, SigTermStr, SigPWM, SigNet, SigCounter, SigAbort, SigHWFailure
Signal-'Masken': | SigMaskTimer, SigMaskKbd, SigMaskSer0, SigMaskSer1, SigMaskSer2 , SigMaskDCF77, SigMaskTermMsg, SigMaskTermStr, SigMaskPWM, SigMaskNet, SigMaskCounter, SigMaskAbort, SigMaskHWFailure, SigMaskSerial, SigMaskAsync, SigMaskSync
7-Segment Displays: | D7_DP, D7_A, D7_B, D7_C, D7_D, D7_E, D7_F, D7_G
Dateimodi: | FM_READ, FM_WRITE, FM_READWRITE, FM_CREATE, FM_TRUNC
Verzeichnis-Flags: | DF_RAM
Fehlercodes: | siehe Kapitel 'Fehlercodes'
Timer: | TimRundownInit
Portinitialisierung: | InvPortHandle, IPADDR_ANY, INFINITE, InvalidSocket
Netzwerk: | SOCK_SPXSTR,
spezielle Funktionsargumente:
StrPad(...): | PadLeft, PadRight, PadLeftRight
Funktionen: | Die Verwendung und die Schnittstellen der Funktionen ist in den folgenden Abschnitten, nach den Anwendungsgebieten sortiert, aufgeführt.

Viele Funktionen der Standardbibliothek und evtl. auch anderer Bibliotheken sind in Spell durch das Schlüsselwort EXTERNAL besonders gekennzeichnet. Diese Funktionen werden von der Laufzeitumgebung selbst zur Verfügung gestellt. Sie laufen daher nicht in der virtuellen Maschine, sondern mit voller Geschwindigkeit des Signalprozessors. Externe Funktionen werden zum Ansprechen der Hardware und für rechenintensive Aufgaben benutzt.

Die den externen Funktionen zugeordneten Nummern sowie die Aufrufsyntax dürfen nicht verändert werden!

5.2 Tastatur

Die Bibliothek "STDLIB.SPI" definiert zur Verwendung als Mask die Konstanten: KeyF1, KeyF2, KeyF3, KeyUp, KeyDown,und KeyAll.

FUNCTION KeyPressed (Mask: INTEGER): BOOLEAN;

Liefert TRUE zurück, wenn alle (!) der als Mask übergebenen Tasten gedrückt sind. Als Mask wird die Summe der definierten Tastenkonstanten bezeichnet. Zum Beispiel kann durch folgenden Aufruf festgestellt werden, ob die Up und Down-Taste gleichzeitig gedrückt wird:

IF KeyPressed (KeyUp+KeyDown) THEN .....

FUNCTION KeyReleased (Mask: INTEGER): BOOLEAN;

Liefert TRUE zurück, wenn alle der als Mask übergebenen Tasten nicht gedrückt sind. Der Ausdruck, mit dem festgestellt wird, daß keine Taste gedrückt ist, lautet:

IF KeyReleased (KeyF1+KeyF2+KeyF3+KeyUp+KeyDown) THEN .....

was gleichbedeutend ist mit:

IF KeyReleased (KeyAll) THEN .....

5.3 Ausgabe auf Display

Die Ausgabe auf die Displays erfolgt in zwei Stufen: Eine erste Funktion Write schreibt einen String in eines der 'virtuellen' Displays. Es gibt 32 virtuelle Displays, jedes hat eine Länge von 31 Zeichen. Die virtuellen Displays werden über Nummern von 0 bis 31 angesprochen.

Die physikalische Ausgabe auf die Displays selbst wird von der Funktion Display zur Verfügung gestellt.

Wenn die virtuellen Displays nicht bewußt eingesetzt werden, kann dieses Vorgehen auch durch die Funktionen: ShowInteger, ShowFloat und ShowString abgekürzt werden.

FUNCTION Write (Virtual: INTEGER, S: STRING);

Schreibt die Zeichenkette 'S' auf das virtuelle (!) Display mit der Nummer Virtual. Ist der String S zu lang, so wird er ohne Fehlermeldung gekürzt.

FUNCTION Display (Virtual: INTEGER, Display: INTEGER);

Schreibt die ersten Zeichen eines virtuellen Displays auf ein reales Display. Auf den Siebensegmentdisplays können nur Ziffern und einige Buchstaben dargestellt werden. Ein nicht darstellbares Zeichen wird auf den Siebensegmentdisplays als "_." dargestellt.

Ein mit Ausrufezeichen gefüllter String (z.B. wenn eine Zahl mehr Vorkommastellen enthält als der Konvertierungsfunktion 'xxxToString' mitgeteilt wurde) wird auf den Siebensegmentdisplays als "9.9.9.9.9.9." dargestellt und deutet auf den Überlauf hin.

Die physikalischen Front-Displays des Controllers S320 sind numeriert von 0 bis 5 von links nach rechts und von oben nach unten. Die geraden Displays sind die 6-stelligen Siebensegmentanzeigen, die ungeraden Displays sind die 4-stelligen Textanzeigen. Zur Verdeutlichung stehen die Konstanten: TopLeft, TopRight, MidLeft, MidRight, BotLeft und BotRight zur Verfügung.

Als Abkürzung stehen die drei erwähnten Funktionen zur Verfügung, die ggf. eine Typkonvertierung durchführen und einen Write in das virtuelle Display mit anschließendem Display durchführen.

FUNCTION ShowInteger(Loc: INTEGER, i: INTEGER, nfig: INTEGER);

FUNCTION ShowFloat (Loc:INTEGER,f:FLOAT,nfig:INTEGER,ndig:INTEGER);

FUNCTION ShowString (Loc: INTEGER, s: STRING);

Loc ist das physikalische Display. Hier wird eine der oben aufgeführten Konstanten angegeben.

Die darzustellenden Daten sind i, f und s. Der Parameter 'nfig' legt die Anzahl der auszugebenden Zeichen bzw. Vorkommastellen fest, 'ndig' gibt die Zahl der Nachkommastellen an.

FUNCTION DisplayInit(Reserved: INTEGER);

Funktion zur Reinitialisierung der Displays, die bei Weglassen der Funktion nur einmal bei Programmstart durchgeführt wird. Die aktuelle Anzeige bleibt erhalten. Der Parameter ist reserviert für zukünftige Erweiterungen und sollte 0 sein.

FUNCTION DisplayClear(Loc: INTEGER);

Die Funktion DisplayClear löscht das jeweilige LED-Display.

FUNCTION DisplayClearAll();

Die Funktion DisplayClearAll löscht alle sechs LED-Displays.

5.4 Dialog mit dem PC

Mit den User-Nachrichten wird dem Programmierer ein Mechanismus zur Verfügung gestellt, um über die Link-Schnittstelle Nachrichten an das S320-Programm zu senden, und vom S320 Programm gesendete Benutzernachrichten zu übermitteln. Das S320-Programm besitzt einen Ein/Aus-Schalter mit dem dieser Mechanismus von der PC-Seite aus bedient werden kann. Dazu müssen die Dateien DlgUser.spi und DlgEnabl.spi eingebunden werden. Andernfalls wird das Programm angewiesen, die User-Nachrichten immer, unabhängig davon, ob das PC-Programm angeschlossen ist oder nicht, zu senden. Im letzten Fall wird das Senden der User-Nachrichten mit folgendem Befehl aktiviert:

FUNCTION TermEnableMsg (OnOff: BOOLEAN);

Die Funktion TermEnableMsg schaltet Meldungen an die Entwicklungsumgebung zentral ein (True) oder aus (False).

Bei aktiver User-Nachrichtenschnittstelle werden die Zeichenketten an das S320 Programm gesendet, welche im Spell-Code an folgende Funktion übergeben werden:

FUNCTION TermSendMsg (S: STRING);

Mit der Funktion TermSendMsg kann eine Nachricht an die Entwicklungsumgebung gesendet werden. Diese erscheint als Text im Fenster der Seite "UserMsg".

Die angesprochene Seite des S320 Programms bietet eine Eingabezeile an, womit Textinformation über die Link-Schnittstelle an den Controller gesendet werden kann. Diese Information kann stets vom S320 Controller empfangen werden, unabhängig davon, ob das Senden von Nachrichten auf Controller-Seite aktiviert ist oder nicht.

Bei Empfang einer solchen Nachricht wird das Signal SigTermMsg ausgelöst. Auf dieses Signal kann In einer entsprechenden Signalfunktion die gesendete Zeile mit der Funktion

FUNCTION TermReceiveMsg ();

ausgelesen werden. Ist keine Nachricht vorhanden, liefert die Funktion eine leere Zeichenkette zurück.

5.5 Persistente Daten

Persistente Daten liegen in einem besonderen, netzstromunabhängigen Speicherbereich.

Die persistenten Daten müssen im Deklarationsteil mit dem Schlüsselwort RAMPERSISTENT bzw. ROMPERSISTENT statt VAR eingeführt werden. Sie werden automatisch bei Programmstart aus dem persistenten Speicher gelesen. Wenn keine gespeicherten Daten existieren oder die Länge der Daten sich von der Länge der persistenten Daten des aktuellen Programms unterscheidet, dann werden die persistenten Daten des Programms gemäß der impliziten Initialisierung besetzt.

Der RAM-persistente Speicher ist batteriegepuffert und bietet Platz für ca. 8000 Variablen der Grunddatentypen, bzw. der entsprechenden Menge von strukturierten Datentypen. Der RAM-persistente Speicher eignet sich z.B. für die Speicherung aktueller Sollwerte oder aufsummierter Betriebsstunden.

ROM-persistenten Daten werden im Dateisystem unter dem Namen /dat/default.rom abgespeichert. Die für Dateien gültigen Limitierungen gelten auch hier. Der ROM-persistente Speicher eignet sich z.B. hervorragend für ein Aufzeichnungs- oder Kontrollgerät, welches von der Einsatzstelle entfernt werden kann, um die Daten an geeigneter Stelle, z.B. im Büro auszulesen und auszuwerten. Der Schreibvorgang in das Flash-ROM kann einige Sekunden dauern. Durch die Hardware ist die Anzahl der Schreibzyklen auf ca. 100.000 begrenzt, der Controller S320 überprüft die Schreibhäufigkeit nicht.

FUNCTION SaveRAMPersistent ();

Schreibt alle als RAMpersistent deklarierte Daten in den batteriegepufferten Speicher.

FUNCTION SaveROMPersistent ();

Schreibt alle als ROMpersistent deklarierte Daten in das Flash-Rom.

HINWEIS: Die Funktion SaveROMPersistent ruft intern FileFlushCache auf. Dabei werden alle zur Zeit des Aufrufs im Cache befindlichen Daten auf Flash-ROM geschrieben.

FUNCTION LoadRAMPersistent ();

FUNCTION LoadROMPersistent ();

Diese Funktionen können z.B. dazu verwendet werden, alte korrekte Daten wiederzufinden, z.B. nach Eingabe fehlerhafter Programmparameter durch den Benutzer.

Die persistenten Daten des Flash-Rom können mit der Funktion:

FUNCTION DeleteRomPersistent ();

zurückgesetzt werden. Die aktuellen persistenten Daten werden daraufhin gelöscht. Die im Speicher befindlichen Daten werden durch die Funktion nicht verändert, das ist bei Bedarf durch einen nachfolgenden Aufruf von LoadRomPersistent möglich.

Der korrekte Umgang mit den persistenten Daten wird in den mitgelieferten Demo-programmen vorgeführt.

Der RAM-persistente Datenbereich wird durch Prüfsummen auf Konsistenz überwacht. Falls die Daten in dem batteriegepufferten Speicher z.B. durch einen leeren Akkumulator ungültig werden, wird der Datenbereich wie zuvor beschrieben gelöscht.

5.6 Timer

FUNCTION TimSet (VAR T: Timer, Time: FLOAT);

Setzt einen Timer, der zur aktuellen Zeit plus der in Time übergeben Zeitspanne abläuft. Time wird in Sekunden angegeben. Die Auflösung des Timers beträgt beim Controller S320 typisch 1 Millisekunde. Ein einmal abgelaufener Timer wird nicht wieder aktiv - da aber nur durch einen Aufruf von TimRundown, TimUsed oder TimLeft festgestellt wird, ob der Timer abgelaufen ist, kann es trotzdem einen Überlauf geben, wenn über sehr lange Zeit keine dieser drei Funktionen aufgerufen wird.

Ein Timer kann mit Hilfe der Konstante TimRunDownInit (auch implizit) initialisiert werden. Die Zuweisung dieser Initialisierungskonstante ist gleichbedeutend mit einem Aufruf der Funktion TimSet mit dem Argument 0.0:

T := TimRunDownInit;

hat dieselbe Wirkung wie:

TimSet(T, 0.0);

FUNCTION TimRundown (VAR T: Timer): BOOLEAN;

Gibt TRUE zurück, wenn der Timer abgelaufen ist.

FUNCTION TimUsed (VAR T: Timer): FLOAT;

Gibt die Zeit seit Start des Timers zurück. Wenn der Timer abgelaufen ist, dann liefert die Funktion den Maximalwert des Timers (den Wert, der bei TimSet übergeben wurde, gerundet auf die tatsächliche Auflösung).

FUNCTION TimLeft (VAR T: Timer): FLOAT;

Gibt die Zeit in Sekunden bis zum Ablauf des Timers zurück.

FUNCTION TimWait (VAR T: Timer);

Wartet bis der Timer abgelaufen ist. BESONDERHEIT: Die Funktion TimWait wartet passiv, d.h. der Signalprozessor wird in den sogenannten 'Idle-Mode' gesetzt und erst durch den abgelaufenen Timer wieder aktiviert. Die parallele Verarbeitung der in Spell definierten Signalfunktionen sowie die Kommunikation der Schnittstellen bleibt jedoch gewährleistet. Da der Prozessor im 'Idle-Mode' keine Systemaktivitäten durchführt, verringert sich die Leistungsaufnahme des Controllers S320 erheblich. Zum einen reduziert sich durch die geringere Leistungsaufnahme die Eigenerwärmung des Gerätes, zum anderen wird Energie gespart, was insbesondere im mobilen Betrieb aus Akkumulatoren von Vorteil ist. Sofern die Anwendung Wartezeiten erlaubt, ist der Einsatz der Funktion TimWait immer sinnvoll.

FUNCTION Sleep (Time: FLOAT);

Wartet die angegebene Zeit in Sekunden. Aufruf von TimSet und TimWait in Folge. Durch die Verwendung von TimWait innerhalb der Funktion Sleep ergibt sich selbstverständlich auch hier der Effekt des passiven Wartens wie bei TimWait beschrieben.

HINWEIS: Die mit TimSet definierte Zeit wird auf die tatsächlich verfügbare Auflösung der Hardwaretimer gerundet. Insbesondere kann bei abgelaufenem Timer der von der Funktion TimUsed gelieferte Wert von dem ursprünglich an TimSet übergebenen Wert geringfügig abweichen. Zur sicheren Erkennung eines abgelaufenen Timers sind daher die Funktionen TimRundown bzw. die Wartefunktionen TimWait oder Sleep zu verwenden.

5.7 Zeit und Datum

FUNCTION GetTime (): Time;

Gibt die Zeit bzw. Datum als Sekunden nach dem 1. Januar 1970, 00:00 Uhr zurück, welche mit Hilfe der folgenden Funktionen bequem ausgewertet werden kann.

HINWEIS: Diese Zeit wird von der batteriegepufferten Uhr geliefert und aus Uhrzeit und Datum relativ aufwendig berechnet. Es ist daher nicht zu empfehlen, zeitabhängige Vorgänge mit GetTime zu steuern oder mit Werten des Typs Time zu rechnen. Zur Steuerung zeitabhängiger Vorgänge eigenen sich die Timer wesentlich besser.

FUNCTION SetTime (T: Time);

Setzt die internen Echtzeituhr auf die durch T definierte Zeit. T ist die Zahl der Sekunden nach dem 1. Januar 1970, 00:00 Uhr.

FUNCTION SplitTime (T: Time, VAR S: DateTime);

Dabei ist DateTime ein Record mit den folgenden Elementen:

TYPE
DateTime = RECORD
Second     : INTEGER;     { 0..59
}
Minute     : INTEGER;     { 0..59
}
Hour       : INTEGER;
{ 0..23 }
Day        : INTEGER;
{ 1..31 }
Month      : INTEGER;
{ 1..12 }
Year       : INTEGER;
{ 1970..2038 }
WeekDay    : INTEGER;     { 0..6 }
YearDay    : INTEGER;     { 1..366 }
END;

Auf diese Elemente wird in gewohnter Weise (vgl. Kap. 'Record') zugegriffen.

FUNCTION MakeTime (S: DateTime): Time;
Wandelt den übergebenen Record des Typs DateTime in eine Zeit vom Typ Time.
FUNCTION GetDayOfWeek (T: Time): INTEGER;
Gibt den Wochentag zurück.
FUNCTION GetDayOfMonth (T: Time): INTEGER;
Gibt den Tag des Monats zurück.
FUNCTION GetMonth (T: Time): INTEGER;
Gibt den Monat des Jahres (1..12) zurück.
FUNCTION GetYear (T: Time): INTEGER;
Gibt das Jahr zurück.
FUNCTION GetHour (T: Time): INTEGER;
Gibt die aktuelle Stunde des Tages zurück.
FUNCTION GetMinute (T: Time): INTEGER;
Gibt die Minute der aktuellen Stunde zurück.
FUNCTION GetSecond (T: Time): INTEGER;
Gibt die Sekunde der aktuellen Minute zurück.

Die Funkuhr DCF77 wird durch den folgenden Funktionsaufruf ausgewertet:

FUNCTION GetDCF77Info (VAR Info: DCF77Info);

Dabei ist DCF77Info ein Record der folgenden Form:

TYPE
DCF77Info = RECORD
Minute           : INTEGER;
{ 0..59 }
Hour
: INTEGER;  { 0..23 }
Day
: INTEGER;  { 0..31 }
Month
: INTEGER;  { 1..12 }
Year
: INTEGER;  { 1970..2038 }
DayLightSaving   : BOOLEAN;
OutOfSync        : INTEGER;
UnexactReceives  : INTEGER;
FrameErrors      : INTEGER;
LastReceive      : INTEGER;
END;

Diese Funktion wird sinnvollerweise nach Eintreffen des Signals SigDCF77 (vgl. Abschnitt "Signale") aufgerufen, um die aktuellen Informationen zu erhalten. Die wesentlichen Informationen sind Zeit und Datum, mit deren Hilfe die Systemzeit korrigiert werden kann.

FUNCTION TimeToStr (T: Time): STRING;

Wandelt die Sekunden nach dem 1. Januar 1970, 00:00 Uhr (i.a. aus der Funktion GetTime) in einen String um. Das Datum setzt sich aus dem Tag, dem Monat, dem Jahr und der Zeit aus Stunden, Minuten und Sekunden in dieser Reihenfolge zusammen. Das Ergebnis hat immer das Format "TT.MM.JJJJ HH:MM:SS".

FUNCTION StrToTime (S: STRING, VAR T: Time): BOOLEAN;

Konvertiert den übergebenen String des Formats "TT.MM.JJJJ HH:MM:SS" in eine Zeit vom Typ Time und gibt TRUE zurück, wenn dies durchgeführt werden konnte. Befinden sich ungültige Zeichen in S, oder entspricht S nicht dem geforderten Format, so liefert die Funktion FALSE.

5.8 Stringfunktionen

FUNCTION StrCut (S:STRING, Index:INTEGER, Count:INTEGER): STRING;

Liefert die Zeichen Index bis Index+Count-1 aus dem String S als String zurück. Das erste Zeichen von S hat den Index: 0.

FUNCTION StrLen (S: STRING):INTEGER;

Liefert die Länge, d.h. die Zeichenanzahl (ohne Endekennung) des übergebenen Strings zurück.

FUNCTION StrTrans (S: STRING, From: STRING, To: STRING): STRING;

Die Funktion transformiert einen String anhand von zwei Zeichen-Tabellen, die in Form der Strings From und To angegeben werden. Dabei gilt: in in From vorkommendes Zeichen wird in das Zeichen übersetzt, das im String To an derselben Position steht. Steht dort kein Zeichen (weil From länger ist als To), dann wird das Zeichen gelöscht. Die Funktion liefert den transformierten String zurück.

Das folgende Beispiel wandelt die Zeichen a-f nach Großschrift und löscht '.':

S := StrTrans (S, "abcdef.", "ABCDEF");

Das nächste Beispiel ersetzt den Doppelpunkt durch einen Punkt für die Ausgabe der Uhrzeit auf den Siebensegmentdisplays:

S := StrTrans (S, ":", ".");

FUNCTION StrPos (S: STRING, C: CHAR): INTEGER;

Mit dieser Funktion kann nach einem bestimmten Zeichen innerhalb einer Zeichenkette gesucht werden. Ergebnis ist die erste Position des Zeichens C im String S bzw. der Wert -1, falls das Zeichen C nicht in S enthalten ist. Das Zeichen C kann direkt als Character-Konstante übergeben werden:

Pos := StrPos(Zeichenkette,'A');

FUNCTION StrPad(S:STRING, Len:INTEGER, C:CHAR, Pad:INTEGER):STRING;

Diese Formatierungsfunktion liefert einen String S der gewünschten Länge Len. Ist S zu lang, dann wird er rechts abgeschnitten. Ist S zu kurz, dann wird er in Abhängigkeit des Parameters Pad:

·PadLeft - linksbündig
·PadRight - rechtsbündig oder
·PadLeftRight - mittig

angeordnet und der entstehende Raum mit dem Zeichen C aufgefüllt.

FUNCTION StrAt (S: String, Index: INTEGER): CHAR;

Diese Funktion gibt das Zeichen der geforderten Position Index der Zeichenkette S als CHAR-Typ zurück. Der Index muß gültig sein, d.h. er darf nicht über das Stringende hinauszeigen, ansonsten wird ein 'Range Error' ausgelöst.

FUNCTION StrUpper (VAR S: STRING);

Wandelt den übergebenen String einschließlich der deutschen Sonderzeichen der Codepage 437 nach Großschrift um.

FUNCTION StrLower (VAR S: STRING);

Wandelt den übergebenen String einschließlich der deutschen Sonderzeichen der Codepage 437 nach Kleinschrift um.

5.9 Typ-Konvertierungsfunktionen

FUNCTION IntToStr (i: INTEGER, Digits: INTEGER): STRING;

Wandelt den Integer-Wert i in einen String um. Digits gibt die Anzahl der Stellen an. Ist i zu klein, so wird die Zeichenkette links mit Leerzeichen aufgefüllt. Ist der String zu lang, um in die angegebene Anzahl von Stellen zu passen, so wird ein mit Ausrufezeichen gefüllter, passender String zurückgeliefert.

FUNCTION FloatToStr (F:FLOAT, LDig:INTEGER, TDig:INTEGER): STRING;

Wandelt eine Fließpunktzahl F in einen String um. LDig ist die Anzahl der Vorkomma-, TDig die Anzahl der Nachkommastellen. Ist der String zu lang um in die angegebene Anzahl von Stellen zu passen, so wird ein passender String gefüllt mit Ausrufezeichen zurückgeliefert. Die Anzahl der Nachkommastellen ist auf maximal 8 begrenzt.

FUNCTION StrToInt (S: STRING, VAR I: INTEGER): BOOLEAN;

Konvertiert den übergebenen String S in eine Zahl I vom Typ INTEGER und gibt TRUE zurück, wenn dies durchgeführt werden konnte. Befinden sich ungültige Zeichen in S, oder wird I zu groß, so liefert die Funktion: FALSE.

FUNCTION StrToFloat (S: STRING, VAR F: FLOAT): BOOLEAN;

Konvertiert den übergebenen String S in eine Fließpunktzahl und gibt TRUE zurück, wenn dies durchgeführt werden konnte. Befinden sich ungültige Zeichen in S, oder wird F zu groß, so liefert die Funktion: FALSE.

FUNCTION BufToStr (CONST A: INTEGER [], Count: INTEGER): STRING;

Konvertiert ein Array mit Integer-Werten (geliefert z.B. von ComBufReceive) in einen String. Der Wert Count gibt die Länge des zurückgegebenen Strings an, also die Zahl der Integerwerte aus A welche konvertiert werden. Der Fehler StrOverflow wird ausgelöst, wenn die Größe des Arrays die maximale Stringgröße überschreitet, Nullwerte innerhalb des Arrays erzeugen einen Range-Error.

FUNCTION CharToStr (C: CHAR): STRING;

Konvertiert den Character-Wert C in einen String der Länge 1.

5.10 Serielle Schnittstellen

Die Ports können sich in einem der Modi: String oder Byte befinden (wird in der Hardware-Konfiguration festgelegt). Die serielle Schnittstelle Ser0 erlaubt des weiteren das Protokoll: "DCF77" zum Anschluß der DCF77-Funkuhr.

Wo möglich passen sich die Routinen zum Ansprechen der Ports an, so ist ein Aufruf von ComSend in beiden Modi möglich. Routinen, bei denen das Verhalten in einem der beiden Modi uneindeutig wird, dürfen dagegen im "falschen" Modus nicht aufgerufen werden. Diese Funktionen sind:

·ComReceive        im Modus "Byte"
·ComBufReceive     im Modus "String"

Im 'String-Modus' behandelt die Laufzeitumgebung ein- und ausgehende Zeichen an den seriellen Schnittstellen als komplette ASCII-Strings. Als Endekennung der empfangenen Strings dient das in der Konfigurationsdatei vereinbarte Zeichen, üblicherweise ein Linefeed. Die Endekennung des gesendeten String wird vom Programmierer, z.B. durch Anfügen eines \n (für Linefeed) an den Sendestring, bestimmt. Das Signal der entsprechenden seriellen Schnittstelle wird nach dem Empfang eines kompletten ASCII-Strings ausgelöst.

Im 'Byte-Modus' dagegen wird das Signal ausgelöst nachdem ein oder mehrere Zeichen empfangen wurden. Eine Endekennung ist nicht erforderlich. Die empfangenen Daten werden durch die Empfangsroutine in einem Integer-Feld abgelegt.

Hinweise zu den seriellen Schnittstellen enthalten auch die Kapitel 'Die Konfigurationsdatei, Serielle Schnittstellen' und 'Anschlußbelegung, Ser0, Ser1 und Ser2'.

Als Portadressierung stehen die Konstanten:

·Ser0 oder RS232_A für die RS232-Schnittstelle,
·Ser1 oder RS485_A für die erste RS485-Schnittstelle und
·Ser2 oder RS485_B für die zweite RS485-Schnittstelle zur Verfügung.

FUNCTION ComAvail (Port: INTEGER): BOOLEAN;

Gibt TRUE zurück, wenn empfangene Daten an der übergebenen Schnittstelle Port anstehen, d.h. im String-Modus wird dann TRUE zurückgegeben, wenn ein kompletter String vorhanden ist, während im Byte-Modus dann TRUE zurückgegeben wird, wenn mindestens ein Byte im Empfangspuffer liegt.

FUNCTION ComReceive (Port: INTEGER): STRING;

Die Funktion wird im String-Modus verwendet um Daten von der übergebenen Schnittstelle Port zu lesen. Stehen dort keine an, so ist das Ergebnis ein Leerstring.

FUNCTION ComBufReceive (Port: INTEGER, VAR A: INTEGER []): INTEGER;

Die Funktion wird im Byte-Modus verwendet um Daten von der übergebenen Schnittstelle Port zu lesen. Es werden maximal soviele Zeichen in das Feld A geschrieben, wie es dessen Feldlänge zuläßt. Rückgabewert ist die Anzahl der in das Feld A kopierten gültigen Zeichen.

FUNCTION ComBufFree (Port: INTEGER): INTEGER;

Gibt die Anzahl der freien Plätze im Sendepuffer der angegebenen Schnittstelle Port zurück.

FUNCTION ComBufferAvail (Port: INTEGER, S: STRING): BOOLEAN;

Die Funktion ermöglicht im String-Modus zu überprüfen, ob der Sendepuffer der Schnittstelle Port genug Platz für einen Sende-String S bietet. Die Funktion gibt TRUE zurück, wenn der String komplett Platz im Puffer hat, andernfalls FALSE.

FUNCTION ComBufSend(Port:INTEGER,CONST A:INTEGER[],Count:INTEGER);

Die Funktion wird im Byte-Modus verwendet, um die im Argument Count festgelegte Anzahl von Zeichen aus dem Feld A über die vorgegebene serielle Schnittstelle Port zu übertragen. Der Wert von Count darf (selbstverständlich) nicht größer sein, als die Anzahl der Elemente von A.

FUNCTION ComSend (Port: INTEGER, S: STRING);

Die Funktion wird im String-Modus verwendet um den String S in den Sendepuffer zu stellen und das Absetzen des Strings über die serielle Schnittstelle Port zu veranlassen.

Falls der Sendepuffer die zu übertragenden Daten nicht aufnehmen kann, wartet die Routine, bis ausreichend Zeichen über die Schnittstelle abgesetzt wurden und der Puffer die Daten aufnehmen kann. Falls durch gesperrte Handshake-Leitungen an der RS232-Schnittstelle keine Zeichen mehr ausgegeben werden können, kann dies zu unerwünschtem 'Hängen' des Programmes führen. Es ist daher zu empfehlen, die Daten mittels ComSend nur abzusetzen, wenn zuvor mit ComBufFree bzw. ComBufferAvail geprüft wurde, ob der Puffer die Daten aufnehmen kann.

Bei der Kommunikation über die RS485-Schnittstelle ist beim Sendebefehl zu beachten, daß sich aus technischen Gründen eine Zeitverzögerung nach dem Senden des letzten Zeichens von bis zu maximal 1 ms ergeben kann, bis der RS485-Sender wieder auf 'Empfang' zurückgesetzt wird. Zur Vermeidung von Buskonflikten sollten andere Busteilnehmer erst nach Ablauf von 1 ms antworten.

FUNCTION ComSetBaud (Port: INTEGER, Baudrate: INTEGER);

Mit dieser Funktion läßt sich die eingestellte Schnittstellengeschwindigkeit zur Programmlaufzeit ändern. Ein Aufruf dieser Funktion ändert aber nicht die Grundeinstellungen in der Konfigurationsdatei. Nach einem erneuten Programmstart ist deshalb wieder die in dort eingestellte Geschwindigkeit aktiv. Der Parameter Baudrate muß eine gültige Schnittstellengeschwindigkeit enthalten. Die Baudrate der Link Schnittstelle kann mit dieser Funktion nicht geändert werden.

FUNCTION ComSetTerm (Port: INTEGER, Term: CHAR);

Mit dieser Funktion läßt sich die der in der Config Datei eingestellte Parameter für das Zeilenendezeichen zur Programmlaufzeit ändern. Ein Aufruf dieser Funktion ändert aber nicht die Grundeinstellungen in der Konfigurationsdatei. Nach einem erneuten Programmstart ist deshalb wieder das in dort eingestellte Zeilenendezeichen aktiv.

5.11 I/O-Hardware

Auf Programmierebene wird zwischen folgenden I/O-Typen unterschieden:

Analoge Signale
Digitale Signale
Zählersignale

Die tatsächlich verwendete Hardware, d.h. der Slotkartentyp wird dabei auf Programmierebene nicht unterschieden. Wenn also z.B. eine Slotkarte vom Typ110 gegen eine Karte vom Typ100 ausgetauscht werden soll, muß lediglich die Hardwarekonfiguration (Datei *.cfg) ausgetauscht werden, das Programm bleibt jedoch von dieser Änderung unbetroffen.

Sämtliche I/O-Typen werden über sogenannte 'Handles' angesprochen. Dazu wird ein eigener Typ: Porthandle eingeführt. Diese werden über eine für alle I/O-Typen gemeinsame Funktion erzeugt. Man unterscheidet zwischen den gemeinsamen Funktionen für die I/O-Hardware und den speziellen Funktionen die für die verschiedenen I/O-Typen anzuwenden sind.

5.12 Allgemeine I/O-Behandlung

In der Konfigurationsdatei wird jedem Eingang oder Ausgang ein Name zugeordnet. Mit Hilfe dieses Namens stellt das Programm eine eindeutige Verknüpfung zu dem entsprechenden Ein-/Ausgang in Form einer Variable vom Typ Porthandle her. Das geschieht mit der Funktion OpenPort, die beim Programmstart für jeden genutzten Kanal aufzurufen ist. Das Ergebnis dieser Funktion muß einer Variable zugewiesen werden, die zuvor vom Typ PortHandle deklariert wurde.

FUNCTION OpenPort (Name: STRING): PortHandle;

Liefert das Handle zu einem digitalen, analogen oder Zählerport. Der angegebene Name muß identisch (Groß/Kleinschreibung!) mit dem in der Konfigurationsdatei angegebenen sein (vgl. entsprechendes Kapitel).

FUNCTION ValidPort (Name: STRING): BOOLEAN;

Prüft, ob der Port mit dem angegebenen Namen konfiguriert ist und damit verwendet werden kann, ohne einen Fehler auszulösen.

FUNCTION GetHardwareError (VAR HWE: HardwareErrorDesc);

Die Funktion GetHardwareError ermöglicht es, Informationen über den zuletzt aufgetretenen Hardware-Fehler zu ermitteln. Diese Funktion liefert nur gültige Werte, wenn das Signal SigHWFailure aufgetreten ist, in allen anderen Fällen sind die gelieferten Werte undefiniert. Die Funktion GetHardwareError liefert das Record HWE vom Typ HardwareErrorDesc, der folgendermaßen definiert ist:

TYPE
  HardwareErrorDesc = RECORD
    Error      : INTEGER;
    Handle     : PortHandle;
    Slot       : INTEGER;
    Port       : INTEGER;
    Module     : INTEGER;
  END;

Die Fehlernummer Error kann folgende Werte annehmen:

0: kein Fehler
1: unbekanntes Modul
2: Slot entsprechend Konfiguration nicht belegt
3: falsche Portnummer
4: falsche Slotnummer
5: Slotkarte nicht im Slot installiert
6: generischer Fehler
7: Timeout beim Zugriff auf Slotkarte.
8: Modul vorhanden, aber nicht konfiguriert.
9: Ungültiger Prescaler Wert.
10: Ungültiger Filter Wert.

FUNCTION ModuleInit (Handle: PortHandle);

Erlaubt die Reinitialisierung der Slotkarte, welches den Port des angegebenen Handle enthält. Der Slot muß eine Karte enthalten, sonst wird ein Laufzeitfehler ausgelöst. Die Reinitialisierung kann einige Sekunden Zeit in Anspruch nehmen. Es ist vom Programm aus sicherzustellen, daß während dieser Zeit nicht z.B. innerhalb eines Signales auf die Karte zugegriffen wird. Die Folge einer Mißachtung ist entweder ein Laufzeit/ Systemfehler oder undefiniertes Verhalten!

HINWEIS: Die Initialisierung betrifft ALLE Ein-/Ausgänge der Karte zu dem das übergebene PortHandle gehört!

Die Funktion ModuleInit ist insbesondere bei busfähigen Slotkarten wie der TYP400-Slotkarte von Interesse, da hiermit der Feldbus nach einer Unterbrechung der Busverbindung oder Stromausfall eines Feldbusmodules wieder aufgebaut werden kann, ohne den Controller S320 neu starten zu müssen.

FUNCTION SetFilter (Handle: PortHandle, Filter: FLOAT);

Die Funktion SetFilter setzt den Filterwert für ein Modul vom Typ 100 (und für zukünftige Module, die evtl. Filter unterstützen). Der hier gesetzte Wert gilt bis zum Programmende, oder einem erneuten Aufruf von SetFilter.

FUNCTION SetGainAndOffs (Handle: PortHandle, Gain: FLOAT, Offs: FLOAT);

Mit SetGainAndOffs lassen sich Gain und Offset von Ports setzen, die diese Einstellungen unterstützen. Die neuen Werte gelten bis zum Programmende, oder bis zu einem erneuten Aufruf von SetGainAndOffs.

FUNCTION GetGainAndOffs (Handle: PortHandle, VAR Gain: FLOAT, VAR Offs: FLOAT);

Die Funktion GetGainAndOffs liefert Gain und Offset eines Analogports in den Variablen Gain und Offs zurück.

5.13 Digitale Ein-/Ausgänge

FUNCTION DigitalIn (Handle: PortHandle): BOOLEAN;

Gibt den Zustand des Digitaleingangs Handle zurück.

FUNCTION DigitalOut (Handle: PortHandle, Value: BOOLEAN);

Setzt den Zustand des digitalen Ausgangs Handle auf den boolschen Wert Value.

5.14 Analoge Ein-/Ausgänge

FUNCTION AnalogIn (Handle: PortHandle): FLOAT;

Liest den Wert des analogen Eingangs Handle.

FUNCTION AnalogOut (Handle: PortHandle, Value: FLOAT);

Übergibt das Signal Value an den analogen Ausgang Handle.

5.15 Impulse und Frequenzen messen

Für die Programmierung der Zählerkarten werden folgende Betriebsarten unterschieden (vgl. auch Beschreibung der Slotkarte TYP510):

Impulszählung
Frequenzmessung
Puls/Pausen-Verhältnismessung

Für jede dieser Betriebsarten stehen eigene Funktionen zur Verfügung. Die folgenden Funktionen sind für alle Karten implementiert:

FUNCTION GetCounterWidth (Handle: PortHandle): INTEGER;

Die Funktion liefert die Breite des Zählers in Bits zurück.

FUNCTION GetCounterBaseFrequency (Handle: PortHandle): FLOAT;

Die Funktion liefert die die auf der Zählerkarte verwendete Grundfrequenz zurück.

5.16 Impulszählung

FUNCTION CounterInit (Port: PortHandle);

Die Funktion setzt den Zähler auf den Wert 0 zurück.

FUNCTION CounterRead (Port: PortHandle): INTEGER;

Die Funktion liefert den aktuellen Zählerstand als Wert vom Typ Integer.

FUNCTION CounterEnable (Port: PortHandle, Enable: BOOLEAN): INTEGER;

Gibt einen Zähler frei oder stoppt ihn.

FUNCTION CounterSet (Port: PortHandle, Value: INTEGER): INTEGER;

Setzt einen Zähler auf den Wert Value.

FUNCTION GetCountDir (Port: PortHandle): FLOAT;

Die Funktion liefert die aktuelle Zählrichtung eines Zählers. Das Resultat ist 1.0 wenn der Zähler vorwärts zählt und -1.0 wenn der Zähler rückwarts zählt. Andere Werte werden nicht zurückgegeben.

5.17 Frequenzmessung

Im Unterschied zur Impulszählung wird bei dieser Betriebsart ein Takt von 50 MHz in einem 32 bit Zähler während einer vorgegebenen Anzahl von Eingangsimpulsen gezählt. Damit ist die maximale Meßzeit auf etwas über 40 Sekunden begrenzt. Die Anzahl der Eingangsimpulse wird durch den Parameter PreScaler definiert. Zulässige Einstellungen für diesen Parameter sind: 2, 4, 8, 16, 32, 64, 128 oder 256.

Die Messung ist beendet, wenn die angegebene Zahl von Impulsen eingetroffen ist oder spätestens nachdem die maximale Meßzeit abgelaufen ist.

Die Frequenzmessung wird mit der folgenden Funktion gestartet:

FUNCTION FrequencyInit (Port: PortHandle, PreScaler: INTEGER, MinFrequency: FLOAT): FLOAT;

Sie liefert als Ergebnis die für die minimale Frequenz notwendige Zeit, d.h. die maximale Dauer der Messung in Sekunden. Die Messung ist beendet, wenn die Funktion: FrequencyRead einen Wert größer als 0.0 liefert, d.h. nachdem eine durch Prescaler definierte Anzahl Impulse gezählt wurden, oder nachdem die von der Funktion FrequencyInit zurückgegebene maximale Meßdauer abgelaufen ist. Das ist die Meßdauer, die zur Bestimmung der kleinsten zur ermittelnden Frequenz: MinFrequency notwendig wäre. Wenn bis dahin kein Ergebnis vorliegt, ist die Frequenz kleiner als MinFrequency bzw. zu klein um noch gemessen zu werden. (vgl. Beschreibung Typ510). Sinnvollerweise wird die maximale Meßdauer an einen Timer übergeben. Wenn nach Ablauf dieses Timers kein Ergebnis vorliegt, ist die Frequenz zu klein und eine neue Messung kann gestartet werden.

FUNCTION FrequencyRead(Port:PortHandle, PreScaler:INTEGER): FLOAT;

Diese Funktion wertet die durch FrequencyInit eingeleitete Messung aus. Falls die Messung abgeschlossen ist liefert die Funtkion die entsprechende Frequenz in Hz, andernfalls wird 0.0 zurückgegeben.

FUNCTION FrequencyMeas (Port: PortHandle, PreScaler: INTEGER, MaxTim: FLOAT): FLOAT;

Die Funktion führt eine komplette Frequenzmessung durch. Insbesondere wartet die Funktion, bis die durch Prescaler definierte Anzahl Impulse gezählt wurden oder bis eine maximale Zeit MaxTim erreicht wurde. Falls die notwendige Anzahl Impulse gezählt werden konnten liefert die Funktion eine Frequenz in Hz. Bei vorzeitigem Abbruch wird der Wert 0.0 zurückgegeben.

5.18 Puls/Pausen-Verhältnismessung

Mit dieser Betriebsart der Slotkarte TYP510 kann das Verhältnis zwischen der Dauer des 'High' und des 'Low'-Signals bestimmt werden oder einfach die Dauer eines Impulses jeweils mit einer Auflösung von 20 Nanosekunden bestimmt werden.

Dazu stehen die folgenden Funktionen zur Verfügung:

FUNCTION DutyCycleInit (Port: PortHandle, RisingEdge: BOOLEAN): FLOAT;

Die Funktion startet eine Zeitmessung. RisingEdge gibt an, ob auf die steigende (rising) oder fallende (falling) Flanke getriggert wird.

FUNCTION DutyCycleHighInit (Port: PortHandle);

Die Funktion startet die Zeitmessung an einer positiven/steigenden Flanke am Eingang.

FUNCTION DutyCycleLowInit (Port: PortHandle);

Startet die Zeitmessung einer negativen/fallenden Flanke am Eingang.

FUNCTION DutyCycleRead (Port: PortHandle): FLOAT;

Die Funktion liefert je nach vorausgeggangener Initialisierung die Zeit des Impulses am Eingang in Sekunden. Falls eine Periode nicht vollständig war wird 0.0 zurückgegeben.

FUNCTION DutyCycleMeas (Port: PortHandle, MaxTim: FLOAT): FLOAT;

Diese Funktion führt eine komplette Puls/Pausen-Verhältnismessung durch. Insbesondere wartet die Funktion, bis ein kompletter positiver bzw. negativer Impuls angelegen ist oder bis eine maximale Zeit MaxTim erreicht wurde. Falls die Impulse gemessen werden konnten wird das Tastverhältnis im Bereich von 0.0 bis 1.0 zurückgegeben. Bei vorzeitigem Abbruch wird der Wert -1.0 zurückgegeben.

5.19 Impulse und Frequenzen generieren

Zum Erzeugen von Impulsen bzw. Frequenzen mit einstellbaren Tastverhältnissen eignet sich die Slotkarte TYP520. Vergl. auch Beschreibung hierzu.

Folgender Record wird in der Bibliothek stdlib.spi vordefiniert:

TYPE
  PWMSettings     = RECORD
    BaseFrequency : INTEGER;            { Frequenz            }
    Prescale      : INTEGER;            { Wert des Vorteilers }
    Period        : INTEGER;            { Periode             }
    PulseWidth    : INTEGER;            { Pulsbreite          }
  END;

FUNCTION PWMSetFrequency (H: PortHandle, Frequency: FLOAT);
Setzt die Frequenz in Hz für den angegebenen Ausgang. Sinnvolle Werte liegen zwischen ca. 0.1 Hz und ca. 100 KHz, wobei mit zunehmender Frequenz die interne Stufung der Frequenzeinstellung gröber sowie die Auflösung des Tastverhältnisses verständlicherweise geringer wird.

FUNCTION PWMSetPulseWidth (H: PortHandle, PulseWidth: FLOAT);
Setzt das Puls-/Pausenverhältnis für den angegebenen Ausgang. PulseWidth ist eine Fließkommazahl mit Wertebereich 0..1 ( entsprechend 0 .. 100% ). Werte ausserhalb dieses Bereiches werden ohne weitere Fehlermeldung in den gültigen Bereich gebracht. Ein neu vorgegebenens Tastverhältnis wird erst nach Auflauf des aktuellen Zyklus für den neuen Zyklus gültig. Sofern das Tastverhältnis sofort geändert werden soll muss die Frequenzgenerierung mit PWMStop gestoppt und mit PWMStart neu aufgesetzt werden.

FUNCTION PWMStart (H: PortHandle);
Startet die Takterzeugung für den angegebenen Ausgang.

FUNCTION PWMStartSync (H: PortHandle);
Startet beide Ausgänge einer Karte synchron. Das angegebene Porthandle muß einen der beiden Ports bezeichnen (welcher von beiden spielt keine Rolle).

FUNCTION PWMStop (H: PortHandle);
Stopt die Takterzeugung auf dem angegebenen Kanal. Der Ausgang wird in den Zustand gebracht, der in der Konfigurationsdatei angegeben ist.

FUNCTION PWMGetState (H: PortHandle): BOOLEAN;
Gibt den aktuellen Zustand des Ausgangs zurück.

FUNCTION PWMGetSettings (H: PortHandle, VAR Settings: PWMSettings);
Holt die tatsächlichen physikalischen Einstellungen für den angegebenen Kanal, die auf Grund der Konvertierung auf die physikalische Auflösung der Hardware geringfügig vom Vorgabewert abweichen kann. Mit Hilfe dieser Einstellungen kann z.B. auf die erzielte Genauigkeit rückgerechnet werden.

HINWEIS: Die tatsächlich erzeugte Frequenz in Hz errechnet sich aus den Daten des Records PWMSetting aus
Frequency := Float(PWM.BaseFrequency) / Float(PWM.Prescale * PWM.Period);

HINWEIS: Die Auflösung der Pulsweite in 0..1 errechnet sich aus den Daten des Records PWMSetting aus
ResolutionPulsewith  := 1.0 / Float(PWM.PulseWidth);
Um die Auflösung der Pulsweite in Prozent zu erhalten muss ResolutionPulseWith mit 100 multipliziert werden.

FUNCTION PWMGetIntState (H: PortHandle): BOOLEAN;
Gibt TRUE zurück, wenn der als Parameter angegebene Kanal der Karte ein Signal ausgelöst hat. Gibt FALSE zurück, wenn das nicht der Fall ist.

5.20 Zufallszahlengenerator

FUNCTION Randomize ();

Initialisiert den Zufallszahlengenerator neu.

FUNCTION Random (Range: INTEGER): INTEGER;

Die Funktion erzeugt eine Zufallszahl im Bereich zwischen 0 und Range. Range ist dabei inklusive, d.h. Random (2) gibt eine ganze Zahl zwischen 0 und 2 zurück. Range muß positiv sein. Wurde Randomize nicht aufgerufen, dann ist die erzeugte Pseudozufallszahlenfolge immer gleich.

5.21 Signale

Das Spellprogramm kann durch Signale bzw. Signalfunktionen auf äußere Ereignisse reagieren. Äußere Ereignisse, z.B. wenn Zeichen auf den seriellen Schnittstellen eintreffen oder wenn Tasten gedrückt werden, werden von der Laufzeitumgebung in Form von Signalen an das Spellprogramm übermittelt:

Signalliste:

SigTimer | Wird i.a. in Abständen von ca. zehn Millisekunden ausgelöst. Die Zeiträume zwischen den einzelnen SigTimer-Signalen sind jedoch nicht unbedingt konstant. Ebensowenig kann davon ausgegangen werden, daß eine bestimmte Mindestzeit unter- oder überschritten wird. Das Signal ist somit nicht zur Zeitmessung geeignet.
SigKbd | Wird ausgelöst, sobald eine Taste gedrückt oder losgelassen wurde oder mit anderen Worten, sobald sich an der Tastatur etwas geändert hat.
SigSer0 | Wird ausgelöst, sobald ein oder mehrere Zeichen (Byte-modus) oder eine abgeschlossene Zeichenkette (String-modus) an der seriellen Schnittstelle Ser0 eingetroffen sind.
SigSer1 | Wird ausgelöst, sobald ein oder mehrere Zeichen (Byte-modus) oder eine abgeschlossene Zeichenkette (String-modus) an der seriellen Schnittstelle Ser1 eingetroffen sind.
SigSer2 | Wird ausgelöst, sobald ein oder mehrere Zeichen (Byte-modus) oder eine abgeschlossene Zeichenkette (String-modus) an der seriellen Schnittstelle Ser2 eingetroffen sind.
SigDCF77 | Wird ausgelöst, sobald ein Signal der an der seriellen Schnittstelle Ser0 angeschlossenen Funkuhr DCF77 eintrifft. Dieses Signal kann genutzt werden, um die interne Uhr in einer vom Programm unabhängigen Signalfunktion permanent zu korrigieren. Das Signal tritt bei korrektem Empfang ein mal pro Minute auf.
SigTermMsg | Wird ausgelöst, sobald eine vom S320 Programm gesendete "User-Nachricht" an der Linkschnittstelle empfangen wird.
SigTermStr | Nur interne Verwendung. Zuordnung der Nachrichten über die Linkschnittstelle über Facilities.
SigPWM | Wird bei der Impulserzeugung der PWM-Karte (TYP520) bei jedem Impuls ausgelöst, sofern die aktuell eingestellte Frequenz unter 200 Hz liegt.
SigNet | Dieses Signal wird ausgelöst, wenn auf einem Socket Daten empfangen wurden, wenn eine Verbindung zu einem Socket hergestellt wurde, der sich im Zustand "LISTEN" befindet, oder wenn eine Verbindung von der Gegenstelle beendet wurde.
SigCounter | Wird ausgelöst, wenn die Meßzyklus der Zählerkarte vom Typ 500 beendet ist.
SigAbort | Wird zusammen mit einem Laufzeitfehler ausgelöst. Der erste auftretende Laufzeitfehler löst das Signal SigAbort aus. Ist dafür ein Handler vorhanden, so wird dieser aktiv. Das Programm endet nach Abarbeitung des Signal-Handlers.
SigHWFailure | Wird ausgelöst, falls ein Fehler in Verbindung mit einer Slotkarte aufgetreten ist. Dieses Signal ist insbesondere bei busfähigen Modulen wie der TYP400-Slotkarte von Interesse, da hiermit z.B. auf eine Unterbrechung der Busverbindung oder Stromausfall eines Feldbusmodules reagiert werden kann.

Nach jeder Aktion des Spell-Programmes wird intern geprüft, ob ein Signal geliefert wurde. Es können nun "Signalfunktionen" implementiert werden, welche an beliebiger Stelle, bei Auftreten eines bestimmten Signals ausgeführt werden. Das Signal ist während der Ausführung der Signalroutine gesperrt und wird nach der Ausführung dieser Funktion zurückgesetzt.

Der Umgang mit Signalen erfordert einige Sorgfalt. Zum einen werden Signale nicht gepuffert, d.h. wenn mehrere identische Signale auftreten, während dieses Signal gesperrt ist, wird später nur ein einziges dieser Signale tatsächlich an das Programm geliefert. Zum anderen sind auf mögliche Probleme, die durch Reentranz entstehen, achtzugeben. Dieser Punkt wird im Abschnitt "Signalfunktion" erläutert.

Man unterscheidet zwischen synchronen und asynchronen Signalen. Asynchrone Signale werden durch äußere Ereignisse hervorgerufen, die unabhängig von der momentan ausgeführten Programmanweisung sind und dadurch das Programm an jeder beliebigen Stelle unterbrechen können.

Synchrone Signale werden beim Aufruf bestimmter Funktionen evtl. in Zusammenhang bestimmter Bedingungen ausgelöst. Dadurch ist die Position innerhalb des Programms, an welcher dieses unterbrochen wird, definiert.

Zu den synchronen Signalen gehören lediglich die Fehlersignale SigAbort und SigHWFailure, während alle übrigen Signale asynchron sind.

Während der Abarbeitung eines asynchronen Signals sind alle anderen asynchronen Signale gesperrt. In dieser Zeit eintreffende Signale werden mit Ausnahme des jeweils ersten nicht gespeichert. Nach Abarbeitung des Handlers für ein Signal werden die in dieser Zeit eingetroffenen Signale ausgelöst.

5.22 Signalfunktionen

Signalfunktionen (oder "Signalhandler") werden nach dem Auftreten eines bestimmten Signals aufgerufen. Da kein expliziter Aufruf des Signals existiert, können auch keine Parameter übergeben werden. Also kann eine Signalfunktion nur mittels globaler Variablen mit dem Hauptprogramm Information austauschen.

Die Signalfunktion hat also die Form einer parameterlosen Funktion ohne Rückgabewert. Auf den Funktionskopf muß die Spezifizierung: "SIGNAL Signalbezeichner" folgen. Für die einzelnen Signale können mehrere solcher Signalfunktionen (unterschiedlicher Namen) implementiert werden. Die Funktionen werden beim Eintreffen eines Signales in der Reihenfolge ihrer Deklaration im Programm aufgerufen.

Das folgende Beispiel zeigt einen Funktionskopf zur Reaktion auf das Eintreffen von Daten an der seriellen Schnittstelle 0:

FUNCTION SigSer0Handler();SIGNAL SigSer0;

Bei Eintreffen des entsprechenden Signals wird das laufende Programm unterbrochen und die Signalfunktion abgearbeitet. Diese Signalfunktion kann nicht z.B. durch weitere Signale unterbrochen werden. Das Hauptprogramm wird nach der vollständigen Bearbeitung der Signalfunktion an der unterbrochenen Stelle fortgesetzt.

Die im Controller S320 realisierten Signalmechanismen sind grundsätzlich mit üblicher Interruptverarbeitung zu vergleichen, allerdings werden durch eine Reihe von Vorkehrungen mögliche Konfliktpotentiale weitestgehend ausgeschlossen. Dennoch sollten die Signalbearbeitungszeiten so gering wie möglich gehalten werden. Es ist insbesondere darauf zu achten, daß durch die Signalbearbeitung keine Daten des Hauptprogramms unbeabsichtigt verändert werden. Da die Position einer Unterbrechung im Programm praktisch beliebig ist, können dadurch überraschende und nur schwer lokalisierbare Fehler auftreten. Diese Problematik wird unter dem Begriff "Reentranz" zusammengefaßt. Bei den mitgelieferten Demo-Programmen finden Sie ein Beispiel für dieses Problem.

5.23 Manipulieren von Signalen

Im Hinblick auf die angesprochenen Reentranzprobleme steht ein Mechanismus zur Verfügung, um Signale temporär zu unterdrücken. Das ist vor allem bei den asynchronen Signalen nützlich, weil diese zu jeder Zeit eintreffen können und Reentranz-Probleme verursachen könnten. Die zu blockierenden Signale werden als Integer-Wert übergeben, welcher ein einzelner Wert oder die Summe aus mehreren Werten der folgende Liste ist:

SigMaskTimer | bezeichnet das Signal SigTimer
SigMaskKbd | bezeichnet das Signal SigKbd
SigMaskSer0 | bezeichnet das Signal SigSer0
SigMaskSer1 | bezeichnet das Signal SigSer1
SigMaskSer2 | bezeichnet das Signal SigSer2
SigMaskDCF77 | bezeichnet das Signal SigDCF77
SigMaskTermMsg | bezeichnet das Signal SigTermMsg
SigMaskTermStr | bezeichnet das Signal SigTermStr
SigMaskPWM | bezeichnet das Signal SigPWM
SigMaskNet | bezeichnet das Signal SigNet
SigMaskCounter | bezeichnet das Signal SigCounter
SigMaskAbort | bezeichnet das Signal SigAbort
SigMaskHWFailure | bezeichnet das Signal SigHWFailure

Die wichtigsten Zusammenhänge sind bereits als Summen zusammengefaßt in:

SigMaskSerial | umfaßt die Signale der Schnittstellen Ser0 bis Ser2, sowie SigTermMsg und SigTermStr
SigMaskAsync | umfaßt die asynchronen Signale, d.h. Timer, Keyboard und serielle Schnittstellen, DCF-77 Funkuhr, PWM, Netzwerk und Zähler.
SigMaskSync | umfaßt die synchronen Signale SigAbort sowie SigHWFailure

FUNCTION SigBlock (Mask: INTEGER): INTEGER;

Die Funktion blockiert die durch Mask angegebenen Signale und gibt die "alte Blockiermaske" zurück. Dieser zurückgegebene Wert muß bei einem folgenden Aufruf von SigUnblock verwendet werden, um den ursprünglichen Wert wiederherzustellen. Auf diese Weise sind auch verschachtelte Aufrufe von SigBlock/SigUnblock möglich. Es wird maximal ein Auftreten eines blockierten Signals gepuffert. Dieses gepufferte Signal wird beim Aufruf von SigUnblock aktiviert.

FUNCTION SigUnblock (OldMask: INTEGER);

Stellt die Blockiermaske für Signale auf einen alten Zustand zurück. Wurde ein Signal in der Zeit, in der es gesperrt war, aktiv, dann wird dieses Auftreten (nicht jedoch die Anzahl!) gespeichert. Wird dieses Signal bei einem Aufruf von SigUnblock wieder freigegeben, dann wird es direkt, d.h. noch vor Rückkehr aus dem Aufruf von SigUnblock aktiv.

FUNCTION SigBlockAsync (): INTEGER;

Entspricht SigBlock mit der Maske für alle asynchronen Signale

Das folgende Beispiel, blockiert temporär alle Signale der seriellen Schnittstellen Ser1+Ser2:

VAR OldMask: INTEGER;
BEGIN
    OldMask := SigBlock (SigMaskSer1 + SigMaskSer2);
    ....
    SigUnblock (OldMask);
END;

5.24 Watchdog

Der Controller S320 ist mit einem Watchdog ausgestattet. Der Watchdog kann programmtechnisch "scharf" gemacht werden, und muss dann spätestens alle 1,6 Sekunden zurückgesetzt werden, andernfalls erfolgt ein Hardware Reset des Controllers. Der Watchdog ist eine zusätzliche Absicherung gegenüber Fehlfunktionen des Programms. Reagiert dieses (z.B. aufgrund eines Programmfehlers) nicht mehr, dann erfolgt ein Reset und damit ein kontrollierter Neustart.

Folgende Funktionen sind zur Kontrolle des Watchdogs verfügbar:

FUNCTION WatchdogEnable ();

Die Funktion schaltet den Watchdog ein, und triggert ihn einmal. Damit ist der Watchdog "scharf", und es wird ein Reset ausgelöst, wenn nicht regelmässig die Funktion WatchdogTrigger aufgerufen wird.

FUNCTION WatchdogDisable ();

Die Funktion schaltet den Watchdog aus. Danach erfolgt kein Reset mehr nach Ablauf des Watchdog Timers. Die Funktion kann verwendet werden, um ein Ansprechen des Watchdogs zu vermeiden, wenn Berechnungen durchgeführt werden, deren Dauer nicht vorhersehbar ist, und die die Dauer des Watchdog Timeouts überschreiten. Dazu wird der Watchdog vorher aus- und nach Ausführen der Berechnungen wieder eingeschaltet.

FUNCTION WatchdogTrigger ();

Die Funktion setzt den Watchdog zurück. Sie muß nach Einschalten in regelmässigen Abständen aufgerufen werden (< 1.6s), um zu vermeiden, daß der Watchdog anspricht, und einen Reset auslöst.

5.25 Dateien und Verzeichnisse

Der Controller S320 organisiert einen Teil seines Flash ROMs als Dateisystem. In diesem Dateisystem können Daten ausfallsicher gespeichert werden.Wo möglich wurden die Zugriffsfunktionen an vergleichbare Funktionen für "große" Betriebssystem angelehnt.

Die Größe des Dateisystems im Flash ROM beträgt 384 KB. Im diesem Dateisystem können maximal 128 Dateien angelegt werden. Die Größe einer Datei ist beschränkt auf auf 192 KB, diese Größenbeschränkung ergibt sich aus der Größe des Dateisystem Cache (siehe unten).

Innerhalb des Dateisystems gibt es zwei vordefinierte Verzeichnisse mit den Namen "www" und "dat". Alle Dateien müssen in einem dieser Verzeichnisse angelegt werden. Das Verzeichnis "www" ist über den eingebauten Webserver von zugänglich, wenn dieser aktiviert ist. Mit Hilfe des Terminalprogramms ist es außerdem möglich, Dateien in beiden Verzeichnissen anzulegen, auszulesen oder zu löschen. Dateinamen verwenden das Zeichen '/' als Trennzeichen für Verzeichnisse.

Da das Beschreiben des Flash ROMs relativ langsam, und zudem die Anzahl der Schreibzyklen limitiert ist, werden alle Daten zuerst im Dateisystem Cache zwischengespeichert. Dabei handelt es sich um einem Puffer im RAM mit einer Größe von 192 KB. Dieser Puffer kann durch Aufruf der Funktion FileFlushCache kontrolliert in das Flash ROM übertragen werden.

Eine Datei existiert entweder vollständig im RAM Cache, oder im Flash ROM. Eine zum Schreiben geöffnete Datei wird immer vollständig in den RAM Cache übertragen, und dort erst verändert. Dadurch ergibt sich zum einen eine Größenbeschränkung für Dateien auf die Größe des Dateisystem Cache. Zum anderen ist es möglich, daß Fehler beim Schreiben auftreten, wenn durch die neuen Daten die Größe des Puffers überschritten wird. Da die Daten im Dateisystem Cache vom Controller nicht automatisch in das Flash ROM übertragen werden, muß ein Programm in einem solchen Fall selber dafür sorgen, daß der Inhalt des Cache in das Flash ROM geschrieben wird.

HINWEIS: Daten, die sich im Dateisystem Cache befinden, gehen beim Ausfall der Spannungsversorgung, oder einem Neustart des Controllers S320 verloren!

Alle Funktionen, die der Manipulation von Dateien und Verzeichnissen dienen, geben einen Fehlercode zurück. Die Funktion wurde nur dann korrekt ausgeführt, wenn sie den Code EOK zurückliefert. Mögliche Fehlercodes sind in einem eigenen Abschnitt beschrieben.

Folgende Funktionen stehen zum Ansprechen von Dateien und Verzeichnissen zur Verfügung:

FUNCTION FileOpen (CONST Name: STRING, Mode: INTEGER, VAR H: FileHandle): INTEGER;

Die Funktion FileOpen öffnet eine Datei. Der Dateiname muß eines der gültigen Verzeichnisse beinhalten. Beispiele für gültige Dateinamen sind

/www/index.html
/dat/messergebnisse.dat
/dat/protokoll.txt

Mode ist der Modus, in dem die Datei geöffnet wird. Folgende Modi sind verfügbar:

FM_READ | Öffnet eine Datei zum Lesen. Dateien, die nur zum Lesen geöffnet werden, werden nicht in den Dateisystem Cache übertragen.
FM_WRITE | Öffnet eine Datei zum Schreiben. Damit ist automatische eine Übertragung aller Daten in den Dateisystem Cache verbunden.
FM_READWRITE | Öffnet eine Datei zum Lesen und Schreiben. Dieser Modus ist eine Kombination von FM_READ und FM_WRITE.
FM_CREATE | Die Datei wird neu erzeugt, wenn sie noch nicht existiert. Ohne Angabe von FM_CREATE erzeugt der Versuch, eine nicht existierende Datei zu öffnen einen Fehler. FM_CREATE ist nur in Kombination mit FM_WRITE möglich.
FM_TRUNC | Wenn die Datei existiert, wird sie beim Öffnen abgeschnitten, d.h. auf die Größe 0 gekürzt. FM_TRUNC ist nur zusammen mit FM_WRITE möglich.
FM_APPEND | Fügt Daten an eine Datei an. Dieser Modus ist nur zusammen mit FM_WRITE möglich. Nach Öffnen der Datei wird der Dateizeiger einmalig auf das Ende der Datei gesetzt.

Dateimodi können mit den Operatoren '+' oder BITOR kombiniert werden. Der Modus FM_READWRITE entspricht damit FM_READ BITOR FM_WRITE.

Wenn die Funktion erfolgreich war (Fehlercode EOK), dann enthält H nach dem Aufruf ein gültiges Dateihandle, das die geöffnete Datei referenziert und für den Aufruf weiterer Funktionen verwendet werden kann.

FUNCTION FileClose (VAR H: FileHandle): INTEGER;

Die Funktion FileClose schliesst eine zuvor geöffnete Datei. Das übergene Dateihandle wird mit Aufruf dieser Funktion ungültig.

HINWEIS: Nach Schliessen einer Datei, auf die geschrieben wurde, stehen die Daten weiterhin im Dateisystem Cache, und nicht im Flash ROM. Erst ein Aufruf von FileFlushCache schreibt alle Daten vom Cache in das ROM.

HINWEIS: Es gibt eine Ausnahme für die Regel, daß der Dateisystem Cache vom Controller selber nicht in das Flash ROM geschrieben wird: Dies geschieht automatisch, wenn ein SPELL Programm endet.

FUNCTION FileDelete (CONST Name: STRING): INTEGER;

Die Funktion FileDelete löscht die Datei mit dem angegeben Namen.

FUNCTION FileMove (CONST Source: STRING, CONST Target: STRING): INTEGER;

FileMove benennt eine Datei um. Source ist der ursprüngliche, Target der neue Name der Datei. Die Datei darf nicht geöffnet sein. Wenn die Zieldatei bereits existiert, dann wird sie gelöscht. Ist die Zieldatei geöffnet, dann kann sie nicht gelöscht werden, und die Funktion liefert einen Fehler zurück. Wurde die Datei erfolgreich umbenannt, dann liefert FileMove den Fehlercode EOK zurück.

FUNCTION FileWriteStr (H: FileHandle, CONST S: STRING): INTEGER;

Die Funktion FileWriteStr schreibt den String S in eine bereits geöffnete Datei.

FUNCTION FileReadLine (H: FileHandle, VAR S: STRING): INTEGER;

FileReadLine liest eine Zeile aus einer Datei und gibt sie zurück. S ist gültig, wenn der Rückgabewert der Funktion EOK ist, ansonsten enthält S einen Leerstring. Im Erfolgsfall enthält S auch den Zeilentrenner, es sei denn, die Zeile war länger als die maximale Stringlänge in SPELL (255 Zeichen).

FUNCTION FileGetPos (H: FileHandle, VAR Pos: INTEGER): INTEGER;

Die Funktion ermittelt die aktuelle Schreib-/Leseposition innerhalb der Datei und liefert sie in Pos zurück. Das erste Zeichen innerhalb der Datei hat den Index 0. Die Funktion gibt einen Fehlercode zurück.

FUNCTION FileSetPos (H: FileHandle, Pos: INTEGER): INTEGER;

FileSetPos setzt die Schreib-/Leseposition für eine Datei neu. Pos darf nicht negativ und nicht größer als die Datei sein (letzteres läßt sich mit Hilfe der Funktion FileSize ermitteln). Das erste Zeichen der Datei hat den Index 0. Die Funktion gibt einen Fehlercode zurück.

FUNCTION FileSize (H: FileHandle, VAR Size: INTEGER): INTEGER;

FileSize ermittelt die Größe einer offenen Datei. Die Funktion gibt einen Fehlercode zurück. War der Aufruf erfolgreich (Funktion liefert EOK), dann steht in Size die Größe der Datei.

FUNCTION FileFlushCache (): INTEGER;

Die Funktion schreibt den Dateisystem Cache in's ROM. Nach fehlerfreiem Aufruf dieser Funktion befinden sich alle geschriebenen Daten im ROM. Der Aufruf dieser Funktion kann einige Zeit dauern, da das Flash ROM komplett neu organisiert wird. Das ist insbesondere dann zu beachten, wenn der Watchdog aktiv ist. Ohne Aufruf dieser Funktion gehen gespeicherte Dateien bei einem Neustart des Controller S320 verloren.

Die Funktion liefert einen Fehlercode zurück.

FUNCTION FileGetSysInfo (VAR Info: FileSysInfo): INTEGER;

Die Funktion gibt Informationen über das Dateisytem zurück. Der Record vom Typ FileSysInfo ist in stdlib.spi wie folgt definiert:

TYPE
  FileSysInfo   = RECORD
    TotalSpace  : INTEGER;              { Gesamt freier Platz fuer Daten }
    UsedSpace   : INTEGER;              { Belegter Platz }
    TotalEntries: INTEGER;              { Maximale Anzahl Verzeichniseintraege }
    UsedEntries : INTEGER;              { Belegte Verzeichniseintraege }
  END;

FUNCTION DirOpen (VAR H: DirHandle): INTEGER;

DirOpen öffnet das Verzeichnis zum Lesen. Zurückgegeben wird ein Fehlercode. Ist dieser EOK, dann enthält H ein Handle, das für weitere Operationen mit dem Verzeichnis verwendet werden kann.

FUNCTION DirClose (VAR H: DirHandle): INTEGER;

DirClose schließt ein zuvor geöffnetes Verzeichnis. H muß ein Handle sein, das zuvor mit Hilfe von DirOpen erzeugt wurde.

FUNCTION DirRead (H: DirHandle, VAR Entry: DirEntry): INTEGER;

Die Funktion DirRead liest den nächsten Verzeichnis Eintrag und liefert ihn bei fehlerfreier Ausführung in Entry zurück. Der Record Typ DirEntry ist in stdlib.spi wie folgt definiert:

TYPE
  DirEntry      = RECORD
    Name        : STRING;               { Name der Datei }
    Size        : INTEGER;              { Größe der Datei }
    CTime       : Time;                 { Wann wurde die Datei angelegt? }
    MTime       : Time;                 { Wann wurde die Datei verändert? }
    Flags       : INTEGER;              { Datei Merker }
  END;

Der Eintrag Flags kann eine Kombination der folgenden Konstanten enthalten:

DF_RAM Die Datei, auf die sich der Verzeichniseintrag bezieht befindet sich im Dateisystem Cache.

HINWEIS: Wird zwischen zwei Aufrufen von DirRead das Verzeichnis verändert (durch Erzeugen oder Löschen von Dateien), dann besteht die Möglichkeit, dass DirRead fehlerhaft arbeitet, d.h. daß ein Eintrag nicht oder mehrfach zurückgegeben wird.

5.26 Netzwerksfunktionen

Der Controller S320 verfügt über eine Ethernet Schnittstelle, sowie eine Implementation von TCP/IP, dem "Internet Protokoll". Dieser Abschnitt bespricht die Funktionen, über die Netzwerksverbindungen hergestellt werden können.

Grundlegend für die Netzwerksschnittstelle ist der Begriff eines Sockets. Damit wird ein Datentyp bezeichnet, der die Endstelle einer Netzwerksverbindung darstellt.

TCP/IP ist ein recht komplexes Protokoll, es wird deshalb empfohlen, für erste Versuche auf die Beispielprogramme, oder auf Literatur zum Thema zurückzugreifen. Die grundlegende Abfolge für einen aktiven Verbindungsaufbau ist:

  1. Ein Socket wird mit SockCreate erzeugt.
  2. Falls gewünscht, wird das Timeout für den Verbindungsaufbau mit SockSetWriteTimeout gesetzt.
  3. Die Verbindung wird mit SockConnect hergestellt.
  4. Die Verbindung wird mittels SockClose geschlossen. Dabei wird auch der Socket gelöscht.
Die Abfolge für einen passiven Verbindungsaufbau ist entsprechend:
  1. Ein Socket wird mit SockCreate erzeugt.
  2. Der Socket wird mit SockListen in den Empfangszustand gesetzt.
  3. Falls gewünscht, wird das Timeout für das Warten auf eine Verbindung mit SockSetReadTimeout gesetzt.
  4. Eingehende Verbindungen werden mit SockAccept entgegengenommen.
  5. Der letzte Schritt kann wiederholt werden (es können mehrere Verbindungen entgegengenommen werden).
  6. Die Sockets für entgegengenommene Verbindungen werden mit SockClose geschlossen.
  7. Der emfangende Socket wird durch Aufruf von SockClose geschlossen.

FUNCTION SockCreate (SocketType: INTEGER, VAR Sock: Socket): INTEGER;

Die Funktion erzeugt einen Socket und gibt einen Fehlercode zurück. Ist der Rückgabewert EOK, dann enthält die Variable Sock den neuen Socket.
HINWEIS: SPELL begrenzt die Anzahl der möglichen Sockets auf 4. Wird diese Anzahl überschritten, dann gibt die Funktion SockCreate den Fehlercode EMFILE zurück.

FUNCTION SockConnect (Sock: Socket, Addr: IpAddress, Port: IpPort): INTEGER;

Die Funktion stellt eine Verbindung mit einer Gegenstelle her, die durch Addr und Port bezeichnet wird. Die Funktion kehrt im Erfolgsfall erst zurück, wenn die Verbindung hergestellt wurde. Beim Verbindungsaufbau wird der mit SockSetWriteTimeout eingestellte Timeout verwendet, es sei denn, dieser ist kleiner als 5 Sekunden, oder größer als 90. Ist kein Schreibtimeout eingestellt, oder ist dieses unendlich, dann wird für den Verbindungsaufbau ein Standardwert von 75 Sekunden verwendet.

FUNCTION SockListen (Sock: Socket, Addr: IpAddress, Port: IpPort): INTEGER;

Die Funktion versetzt einen Socket in den Empfangs-Zustand. Wenn die Funktion keinen Fehler zurückliefert, dann nimmt der Controller in Folge eingehende Verbindung auf der angegebenen Adresse und dem angegebenen Port an. Der zu einer eingehenden Verbindung gehörende Socket kann mittels SockAccept abgerufen werden. Bei einer eingehenden Verbindung wird außerdem das Signal SigNet ausgelöst.

FUNCTION SockAccept (Sock: Socket, VAR NewSock: Socket): INTEGER;

SockAccept nimmt eine eingehende Verbindung an und speichert den Socket für die neue Verbindung in NewSock. Sock muß ein Socket im Zustand LISTEN sein. Die Funktion gibt einen Fehlercode zurück. Die Funktion blockiert, bis eine neue Verbindung eingeht, oder bis zu einem Timeout. Für den Timeout-Wert wird das mit SockSetReadTimeout eingestellte Read Timeout verwendet. Bei einem Timeout liefert die Funktion den Fehlercode ETIMEDOUT zurück.

FUNCTION SockClose (VAR Sock: Socket): INTEGER;

Die Funktion schließt eine Verbindung und löscht den Socket. Bei einer bestehenden Verbindung werden gepufferte Daten auch nach dem Schließen noch zur Gegenstelle übertragen. Die Funktion gibt einen Fehlercode zurück. Die Variable Sock wird von der Funktion invalidiert (auf InvalidSocket gesetzt).

FUNCTION SockWriteString (Sock: Socket, CONST S: String): INTEGER;

SockWriteString schreibt einen String auf eine Netzverbindung. Zurückgegeben wird ein Fehlercode. Die Funktion blockiert bis die Daten in den Schreibpuffer für die Verbindung übernommen werden können, oder bis zu einem Timeout. Fuer den Timeout-Wert wird das mittels SockSetWriteTimeout eingestellte Write Timeout verwendet.

FUNCTION SockReadString (Sock: Socket, VAR S: STRING): INTEGER;

Die Funktion liest eine Zeile von einem Socket und gibt sie in S zurück. Falls die Empfangsdaten die maximale Stringlaenge überschreiten, dann wird trotzdem eine ganze Zeile eingelesen, in S gespeichert wird aber nur der erste Teil. Für das Lesen des Strings gilt das mit SockSetReadTimeout eingestellte Read Timeout. Die Funktion gibt einen Fehlercode zurück. Im Erfolgsfall ist dieser EOK, im Falle eines Timeouts ETIMEDOUT.

FUNCTION SockSetReadTimeout (Sock: Socket, Timeout: FLOAT): INTEGER;

Setzt das Timeout für das Lesen von Daten vom Socket. Dieses Timeout gilt auch fuer SockAccept, falls der Socket im LISTEN Zustand ist. Das Timeout ist spezifisch für genau den übergebenen Socket. Die Funktion gibt einen Fehlercode zurück.

FUNCTION SockSetWriteTimeout (Sock: Socket, Timeout: FLOAT): INTEGER;

Setzt das Timeout für das Schreiben von Daten auf einen Socket, und für den Verbindungsaufbau mittels SockConnect. Das Timeout gilt nur für den übergebenen Socket. Die Funktion gibt einen Fehlercode zurück.

FUNCTION SockAvail (Sock: Socket): BOOLEAN;

SockAvail gibt TRUE zurück, wenn Empfangsdaten für den Socket vorliegen, sonst FALSE. Wurde der Socket durch Aufruf von SockListen in den Zustand LISTEN versetzt, dann gibt SockAvail TRUE zurück, wenn eine Verbindung für diesen Socket eingegangen ist.
HINWEIS: Die Funktion liefert auch dann TRUE, wenn ein Socket-Fehler vorliegt, d.h. wenn ein folgendes SockRead... einen Fehler liefern würde. Aus diesem Grund müssen Fehler beim Aufruf von SockRead... vom Programmierer tatsächlich behandelt werden, ansonsten kann z.B. eine von der Gegenseite geschlossene Verbindung nicht erkannt werden.

FUNCTION SockGetConnSpec (Sock: Socket, VAR Info: ConnSpec): INTEGER;

Die Funktion SockGetConnSpec gibt die Verbindungsinformation für einen Socket einem Record vom Typ ConnSpec zurück. ConnSpec ist in stdlib.spi wie folgt deklariert:

TYPE
  ConnSpec      = RECORD
    LocalPort   : IpPort;
    RemotePort  : IpPort;
    LocalAddr   : IpAddress;
    RemoteAddr  : IpAddress;
  END;

Nicht verwendete Felder (zum Beispiel die Felder für den Remote Host, wenn keine Verbindung hergestellt wurde) haben den Wert 0 für den Port bzw. IPADDR_ANY für die Adresse. SockGetConnSpec gibt einen Fehlercode zurück.

FUNCTION IpAddressToStr (Addr: IpAddress): STRING;

Die Funktion wandelt eine IP Adresse in einen String um, der die Adresse in "dotted quad" Notation darstellt (aaa.bbb.ccc.ddd).

5.27 DNS Funktionen

SPELL stellt Funktionen zur Abfrage der verteilten DNS ("Domain Name Service") Datenbanken zur Verfügung. Diese Funktionen können verwendet werden, um im Internet verwendet Hostnamen in die zum Herstellen einer Verbindung notwendige IP Adresse, und umgekehrt zum Umwandeln der IP Adresse in einen Hostnamen zu wandeln. Bitte beachten Sie folgende Einschränkungen:

  1. Die Funktionen setzen voraus, daß ein Nameserver konfiguriert und erreichbar ist.
  2. Der verwendete Nameserver muß rekursive Namensauflösungen durchführen (das ist der Normalfall).
  3. Die bisher in SPELL verfügbaren Funktionen erlauben nur die Abfrage von A, CNAME und PTR Records.
  4. Der Resolver (= DNS Abfragebibliothek) macht nur Abfragen per UDP, was die maximale Größe der gelieferten Daten einschränkt. In sehr seltenen Fällen kann es dadurch zu Abfragefehlern kommen.
Da alle Funktionen mit anderen Rechnern über ein Netzwerk kommunizieren, kann es zu Verzögerungen kommen. Die Abfragen können über den Timeout Parameter beeinflußt werden. Der den Funktionen übergebene Typ DnsTimeout ist in stdlib.h wie folgt definiert:

TYPE
  DnsTimeout    = RECORD
    MaxTime     : FLOAT;    { Timeout fuer einen NS Query }
    MaxTries    : INTEGER;  { Maximale Anzahl Anfragen fuer einen Query }
    MaxFollow   : INTEGER;  { Maximale Zahl von CNAMEs die aufgeloest werden }
  END;

Dabei bedeutet:

MaxTime | Das Timeout für jeweils eine Nameserver Anfrage in Sekunden. Die Auflösung eines Namens oder einer IP Adresse kann aber unter Umständen mehrere solche Anfragen benötigen. In lokalen Netzen kann dieser Wert im Bereich weniger Sekunden liegen, sollen Daten im Internet abgefragt werden, dann sind Werte im Bereich 10-90 Sekunden empfehlenswert.
MaxTries | Die maximale Anzahl von Anfragen, für ein Datum. Da DNS das UDP Protokoll verwendet, bei dem Daten verloren gehen können, empfiehlt es sich, hier einen Wert größer als 1 zu verwenden (z.B. 3).
MaxFollow | Trifft der Resolver auf einen Alias (CNAME), dann versucht er, diesen Alias in den "richtigen" Namen zu übersetzen. Allerdings kann ein Alias auch auf weitere Aliase verweisen. MaxFollow gibt an, wie weit eine solche Kette von Aliasen verfolgt wird. Ein sinnvoller Wert für diesen Parameter ist z.B. 2 oder 3.

FUNCTION GetHostByName (CONST Name: STRING, VAR Addr: IpAddress, CONST T: DnsTimeout): INTEGER;

Die Funktion GetHostByName löst einen Hostnamen in eine IP Adresse auf, und gibt einen Fehlercode zurück. Ist der Rückgabewert EOK, dann enthält Addr nach dem Aufruf die IP Adresse des Rechners mit dem Namen "Name". Sind für einen Namen mehrere IP Adressen konfiguriert, dann wird immer nur die erste zurückgeliefert.

FUNCTION GetHostByAddr (Addr: IpAddress, VAR Name: STRING, CONST T: DnsTimeout): INTEGER;

Die Funktion GetHostByAddr löst eine IP Adresse zu einem Namen auf, und gibt einen Fehlercode zurück. Wenn der Rückgabewert EOK ist, dann enthält Name nach dem Aufruf den Namen des Hosts mit der IP-Adresse Addr. Wenn die Funktion eine Fehlercode ungleich EOK zurückgibt, dann enthält Name die IP Adresse als String in "dotted quad" Repräsentation (aaa.bbb.ccc.ddd).

5.28 Syslog

Der Controller S320 unterstützt das Unix syslog Protokoll. Über dieses Protokoll können über ein Netzwerk Log Meldungen zu anderen Rechnern geschickt werden. Läuft auf einem solchen Rechner ein syslog Daemon, dann kann dieser die Meldung empfangen und weiterverarbeiten. Über das syslog Protokoll ist eine zentralisierte Speicherung und Auswertung von Fehler- und Betriebsmeldungen möglich.

Bevor die SPELL Funktion SysLog benutzt werden kann, ist in der Netzwerkskonfiguration ein Syslog Server einzustellen. Dieser Server muß Meldungen über das Netzwerk annehmen.

Jeder Meldung ist eine Priorität zugeordnet. Der Syslog Server kann die Meldungen anhand der Priorität unterschiedlich behandeln. Die möglichen Prioritäten sind in stdlib.spi als Konstanten definiert:

CONST
LOG_DEBUG   : INTEGER = 7;
{ Debugging }
LOG_INFO    : INTEGER = 6;
{ Informational }
LOG_NOTICE  : INTEGER = 5;       { Normal
}
LOG_WARNING : INTEGER = 4;       { Warnung
}
LOG_ERROR   : INTEGER = 3;
{ Fehler }
LOG_CRIT    : INTEGER = 2;
{ Kritisch }
LOG_ALERT   : INTEGER = 1;
{ Sofortige Aktion erforderlich }
LOG_EMERG   : INTEGER = 0;
{ System ist unbenutzbar }

Neben der Priorität entalten Syslog Meldungen immer auch eine sogenannte Facility. Dabei handelt es sich um den Teil eines Systems, von dem die Meldung ausging. Der Controller unterstützt genau eine solche Facility. Diese wird in der Netzwerkskonfiguration angegeben, und kann von SPELL aus nicht geändert werden.

FUNCTION SysLog (Priority: INTEGER, CONST Msg: STRING);

Sendet die angegebene Meldung zum Syslog Server. Ist kein solcher Server in den Netzwerkseinstellungen konfiguriert, oder ist der Server nicht erreichbar, dann geht die Meldung verloren.

HINWEIS: Syslog Meldungen werden via UDP verschickt. Da UDP kein fehlergesichertes Protokoll ist, können diese Meldungen in seltenen Fällen verloren gehen. Der Vorteil ist der sehr geringe Overhead von UDP.

5.29 Abfrage von Konfigurationsdaten

Die folgende Gruppe von Funktionen erlaubt die Abfrage von allgemeinen Daten zum Controller, auf dem das Programm läuft.

FUNCTION CfgGetSerial (): STRING;

Die Funktion gibt die Seriennummer des Controllers als String zurück.

FUNCTION CfgLanIsEnabled (): BOOLEAN;

Die Funktion gibt TRUE zurück, wenn der LAN Chip vorhanden und freigeschaltet ist.

FUNCTION CfgGetLanIP (): IpAddress;

Die Funktion gibt die IP Adresse des Controllers zurück. Ist das LAN nicht freigeschaltet, oder nicht konfiguriert, dann liefert die Funktion den Wert IPADDR_ANY als Ergebnis. IPADDR_ANY ist eine in stdlib.spi definierte Konstante.

FUNCTION CfgGetLanMac (): STRING;

Die Funktion liefert die MAC Adresse des Controllers als String zurück.

FUNCTION CfgGetLibSupport (): INTEGER;

Die Funktion liefert die unterstützten Bibliotheksfunktionen als Bitset in einem Integer zurück. Das Ergebnis ist 0, wenn alle Funktionen freigeschaltet sind.

FUNCTION CfgGetOsVersion (): STRING;

Die Funktion liefert die Versionsnummer des Betriebssystems als String zurück.

5.30 Fehlerbehandlung

Beim Controller S320 erfolgt direkt keine Fehlermeldung von Laufzeitfehlern. Es ist daher immer zu empfehlen, eine Fehlersignalfunktion mitzuführen, die das Signal SigAbort auswertet. Entsprechende Funktionen bewirken die Ausgabe von Diagnosenummern auf dem Display. Eine Standardfehlerbearbeitung wird durch die Datei: STDERR.SPI zur Verfügung gestellt.

Für die Fehlerbehandlung stehen zwei Typen von Funktionen zur Verfügung:

1. Funktion um Fehler auszulösen. Sie wird verwendet, um eine benutzerdefinierte Ausnahmebehandlung einzurichten, und

2.Funktionen um aufgetretene Fehler zu analysieren. Mit ihrer Hilfe können die Ursache und die Stelle des Auftretens eines Fehlers im Quelltext bestimmt werden. Wenn der Controller S320 mit dem Terminalprogramm auf dem PC verbunden ist, ist diese Information direkt verfügbar durch den Befehl "Find error location". die Entwicklungsumgebung benutzt dazu 'Debug'-Informationen der auf dem Controller S320 hinterlegten Quellen. Wenn keine Quellen hinterlegt sind, wird die Programmversion auf der Festplatte des PCs verwendet. Dabei dürfen natürlich die Quellen seit der letzten Programmübertragung nicht geändert worden sein.

5.31 Fehlercodes

Mit Version 4 des Controller Betriebssystems wurden die Fehlercodes vereinheitlicht. Die folgende Liste möglicher Fehlercodes umfaßt deshalb sowohl Laufzeitfehler, als auch Rückgabecodes von Datei- und Netzwerksfunktionen. Alle Fehlercodes sind als Konstanten in stdlib.spi definiert.

Code | Name | Bedeutung
0 | EOK | Kein Fehler.
1 | EBREAK | Unerwarteter Breakpoint.
2 | ENOTIMP | Funktion nicht implementiert.
3 | EILLEGAL | Ungültige Anweisung.
4 | ECASE | Kein passender CASE Zweig gefunden.
5 | ESTRSIZE | String Überlauf.
6 | EDIVBYZERO | Division durch 0.
7 | EMODBYZERO | Modulo Operation mit 0.
8 | ERANGE | Wert außerhalb gültiger Grenzen.
9 | EFPOVERFLOW | Floating Point Überlauf.
10 | EFPUNDERFLOW | Floating Point Unterlauf.
11 | EDOMAIN | Domain Fehler.
17 | EINVAL | Ungültiger Parameter.
19 | ESTACK | Stack Überlauf.
21 | EINVPORT | Unbekannter Portname.
22 | ENOMEM | Nicht genug Speicher verfügbar.
23 | EHOSTUNREACH | Host ist nicht erreichbar.
24 | ENETUNREACH | Netzwerk ist nicht erreichbar.
25 | ETIMEDOUT | Verbindungs Timeout.
26 | ECONNREFUSED | Verbindungsannahme verweigert.
27 | ECONNRESET | Verbindung wurde zurückgesetzt.
28 | ECONNABORTED | Verbindungsabbruch.
29 | ENOTCONN | Es besteht keine Verbindung.
30 | EISCONN | Es besteht bereits eine Verbindung.
31 | EADDRINUSE | Adresse wird bereits benutzt.
32 | EPORTINUSE | Port wird bereits benutzt.
33 | EINPROGRESS | Operation wird bereits durchgeführt.
34 | EPIPE | Verbindung wurde geschlossen.
35 | EACCESS | Zugriff verweigert.
36 | ENOENT | Datei existiert nicht.
37 | EEXIST | Datei existiert bereits.
38 | EBUSY | Datei oder Gerät ist in Benutzung.
39 | ENOSPC | Kein freier Platz auf dem Gerät.
40 | ENOEXEC | Keine ausführbare Datei.
41 | EBADDATA | Daten sind ungültig.
42 | EMFILE | Zu viele offene Dateien.
43 | EMSGSIZE | Nachricht ist zu groß.
44 | EHOSTNOTFOUND | Host nicht gefunden.
45 | ENODATA | Host hat keine IP Adresse.
46 | EXDEV | Cross Device Operation ist unzulässig.

Die in bisherigen Versionen definierten, mit Err... beginnenden Fehlercodes sind weiterhin verfügbar. Sie sollten für neue Programme aber nicht mehr verwendet werden.

5.32 Funktionen zur Fehlerbehandlung

FUNCTION ErrTrigger (Code: INTEGER);

Löst einen Laufzeitfehler mit der übergebenen Nummer Code aus. Die vordefinierten Fehler sind im folgenden aufgelistet.

FUNCTION ErrCode (): INTEGER;

Liefert den Code eines aufgetretenen Fehlers, bzw. 0 wenn kein Fehler vorliegt. Diese Funktion dient zur Anzeige des Fehlercodes z.B. in einer Fehlersignalfunktion.

FUNCTION ErrAdr (): INTEGER;

Liefert die Adresse eines aufgetretenen Fehlers. Das Ergebnis ist undefiniert, wenn kein Fehler vorliegt. Diese Funktion dient zur Anzeige des Fehlercodes in einer Fehlersignalfunktion.

FUNCTION ErrGetMsg (Code: INTEGER): STRING;

Liefert zum Fehlercode mit der übergebenen Nummer eine (englische) Fehlermeldung zurück.

5.33 Vordefinierte Laufzeitfehler

Von der SPELL Umgebung definierte Fehlercodes werden teilweise auch für Laufzeitfehler verwendet. Um Verwechslungen zu vermeiden, sollte der Programmierer diese Konstanten nie bei eigenen Aufrufen der Funktion ErrTrigger benutzen. Spezifische Fehlercodes von weiteren von TetraTec zur Verfügung gestellten Bibliotheken sind stets dreistellig. Daher empfehlen wir, eigene definierte Fehlercodes vierstellig zu wählen.

5.34 Die Bibliothek "STDERR.SPI"

Diese Bibliothek stellt einen Standard-Fehlerhandler zur Verfuegung. Bei einem Fehler (z.B. Division durch Null) wird die Fehlernummer und die Fehleradresse ausgegeben. Dieser Handler kann bei Bedarf durch eine eigene Variante ersetzt werden. Die Fehleradresse ist wichtig, um ihn mittels der Funktion 'Find error location' des Terminalprogramms die Fehlerstelle im Quelltext zu finden.

5.35 Weitere Bibliotheken

Für weitere, in der Paxis häufig auftretende Aufgaben sind ebenfalls Bibliotheken im Lieferumfang enthalten.

So finden sich Funktionen für regelungstechnische Anwendungen z.B. in der Bibliothek REGEL. Funktionen zum Linearisieren von Messwerten enthält die Bibliothek LIN oder die Bibliothek POL. Beim Bestimmen von Stoffeigenschaften von Gasen hilft die Bibliothek GAS weiter. Eine aussagekräftige Lauftextanzeige auf den Textdisplays kann mittels Funktionen der Bibliothek LAUFTEXT erzeugt werden. Beim Umrechnen von einer physikalischen Einheit in eine andere lohnt sich ein Blick in die Bibliothek UNITCON.

* * *


Controller S320 Handbuch - Slotkarte Typ510

 2.13.1 TYP510: 2 x Eingang zur Frequenzmessung (bis 12/2005)

Die Slotkarte TYP510 läßt sich universell zum Zählen und Messen von digitalen Signalen einsetzen. Die Karte enthält zwei unabhängige Kanäle mit 32 bit Zähltiefe und einen internen 50 MHz Taktgenerator zur Frequenzmessung.

Die Eingangsstufen sind über Optokoppler realisiert, so daß nahezu alle in der Praxis vorkommende Signalarten direkt angeschlossen werden können. Zur Geberversorgung werden 5V und 24V bereitgestellt.

Folgende Betriebsarten sind möglich:

1. | Impulszählung: Zählen von Impulsen mit einer Zähltiefe von 32 bit und einer maximalen Frequenz von ca. 1 MHz.
2. | Inkrementalgeber: Vor-Rückwärtszählen von Inkrementalgeber-Impulsen. Diese Betriebsart ist nur auf Port 0 einstellbar, an Port 1 wird das um 90° phasenverschobene Signal zur Vor-Rückwärtserkennung angeschlossen. Die maximale Zählfrequenz liegt bei 50 kHz, die Zähltiefe beträgt 32 bit. Auf dem zweiten Kanal kann parallel z.B. eine Frequenzmessung oder eine Puls/Pausen-Verhältnismessung des Gebersignales durchgeführt werden.
3. | Inkrementalgeber mit 4-fach Auswertung: Wie Inkrementalgeber, jedoch wird jeder Flankenwechsel des Gebers gezählt. Hierdurch ergibt sich eine vierfache Auflösung der Gebersignale.
4. | Frequenzmessung: Reziprokes Frequenzmeßverfahren. Über einen einstellbaren Vorteiler (2 bis 256) wird eine logische Zähldauer generiert, während der ein 50 MHz-Takt in einem 32 bit Zähler gezählt wird. Die Frequenz errechnet sich aus 25E6 * (Vorteiler / Zählerwert). Meßdauer und Auflösung lassen sich mit diesem Verfahren leicht an die Erfordernisse anpassen.
5. | Puls/Pausen-Verhältnismessung: Ein 50 MHz-Takt wird in einem 32 bit Zähler nacheinander während der positiven oder negativen Flanke des Eingangssignales gezählt. Das Ergebnis errechnet sich aus dem Verhältnis der High-Flanke zur gesamten Impulsdauer. Die Bestimmung einer Impulsdauer ist in dieser Betriebsart ebenfalls möglich.

Eingang: Die Eingänge der TYP510-Slotkarte sind mit Optokopplern ausgerüstet. Eine 5 V oder 24 V Versorgung zur Geberspeisung wird bereitgestellt. Die Eingangsstufe entspricht folgendem Schema:

Mit SW1 (Port0) bzw. SW5 (Port1) gleich ON kann eine 24V-Geberspeisung mit einer Belastbarkeit von ca. 25 mA auf die Buchse SUP geschaltet werden. Mit SW2 (Port0) bzw. SW6 (Port1) gleich ON kann eine 5V-Geberspeisung mit einer Belastbarkeit von ca. 20 mA auf die Buchse SUP geschaltet werden.

HINWEIS: SW1 und SW2 sowie SW5 und SW6 dürfen nicht gleichzeitig auf ON gestellt werden.

Der Vorwiderstand des Optokopplers läßt sich mit SW3 (Port0) bzw. SW7 (Port1) an die vorliegende Eingangsspannung anpassen. Mit SW3 bzw. SW7 gleich ON eignet sich der Eingang mit 470 Ohm für 5 V TTL-Signale. Mit SW3 bzw. SW7 gleich OFF eignet sich der Eingang mit 3170 Ohm für 24 V Signale. Die LED im Optokoppler benötigt zum Schalten einen Strom von > 5 mA bis max. 10 mA, im ausgeschalteten Zustand muß der Strom < 0.25 mA sein. Die Diodenspannung bei 10 mA beträgt typ. 1.5 Volt.

Mit SW4 (Port0) bzw. SW8 (Port1) läßt sich ein Tiefpass zuschalten, der die maximale Eingangsfrequenz auf ca. 50 KHz begrenzt. Dies kann bei Signalgebern mit geringer Frequenz und geringer Flankensteilheit (z.B. Durchlußmeßgeber) hilfreich sein, um mehrfache Impulse beim Flankenwechsel zu vermeiden.

Durch entsprechende externe Vorwiderstände läßt sich der Eingang leicht an andere Bedürfnisse anpassen. Durch den Optokoppler können sowohl 'plusschaltende' als auch 'masseschaltende' Signale angeschlossen werden. Wird die Geberspeisung des Controller S320 verwendet, entfällt selbstverständlich die galvanische Trennung. In diesem Fall wird bei 'plusschaltenden' Sensoren zwischen -IN und GND gebrückt, bei 'masseschaltenden' Sensoren von SUP nach +IN.

HINWEIS: Einige Signalgeber (z.B. mechanische Schalter) können beim Schaltvorgang z.B. durch Prellen der Kontakte mehrere Impulse abgeben und damit zu unerwarteten Ergebnissen führen. Der Effekt läßt sich durch externe Maßnahmen wie RC-Glieder, Monoflops oder ähnliches verhindern. Siehe auch SW4 bzw. SW8.

HINWEIS: Die Optokoppler stellen eine galvanische Trennung im Sinne einer Funktionstrennung dar. Es ist nicht zulässig, die Eingänge mit Spannungspegeln > 50 V bezüglich PE-Anschluß des Controller S320 zu betreiben.

HINWEIS: Durch die hohe Arbeitsfrequenz der TYP510-Slotkarte ist die Stromaufnahme relativ hoch. Es dürfen daher maximal zwei Slotkarten TYP510 in einem Controller S320 gleichzeitig betrieben werden. Zusätzlich können jedoch noch z.B. drei Slotkarten TYP100 installiert sein.

Erläuterung des reziproken Frequenzmeßverfahrens: Dieses Verfahren hat im Vergleich zum 'normalen' Verfahren (Anzahl Impulse während einer festen Zeit zählen) den Vorteil, daß es vor allem bei kleineren Frequenzen sehr viel schneller ein Ergebnis mit höherer Auflösung liefert.

Aus der zu messenden Frequenz wird über einen mittels PreScaler einstellbaren Zähler die Meßzeit erzeugt. Mögliche Werte für den PreScaler sind 2, 4, 8, 16, 32, 64, 128 und 256. Während des positiven Pegels dieses vorgeteilten Signales wird ein 50 MHz Takt in einem 32 bit Zähler gezählt. Die Frequenz errechnet sich aus 25E6 * (Vorteiler / Zählerwert). Die Meßzeit beim reziproken Meßverfahren ist demnach nicht fest, sondern bestimmt sich aus dem Wert für PreScaler und der tatsächlichen Eingangsfrequenz.

Die Werte werden nach folgenden Gleichungen ermittelt:

Meßzeit [s] | = PreScaler / Meßfrequenz [Hz]
Auflösung [Hz] | = Meßfrequenz [Hz] / (25E6 * Meßzeit [s])
Frequenz [Hz] | = 25E6 * (PreScaler / Counter)

Beispiel 1 KHz-Signal: Die Periodendauer dieses Signales beträgt 1 ms. Bei einem Vorteiler (PreScaler) von 256 beträgt die Meßzeit 256 ms. Während dieser Zeit werden im internen Zähler 50.000.000 * 0.5 * 0.256 = 6.400.000 Impulse gezählt. Die Auflösung beträgt damit 1.000 Hz / 6.400.000 = 0.000156 Hz. Beim 'normalen' Verfahren und 1 Sekunde Meßzeit würde die Auflösung 1 Hz (!) betragen.

Weitere Beispiele:

Signal [Hz] | PreScaler | Meßzeit [s] | Auflösung [Hz]
1 | 2 | 2,00000000 | 0,00000002
10 | 2 | 0,20000000 | 0,00000200
100 | 2 | 0,02000000 | 0,00020000
100 | 256 | 2,56000000 | 0,00000156
1.000 | 4 | 0,00400000 | 0,01000000
1.000 | 128 | 0,12800000 | 0,00031250
10.000 | 64 | 0,00640000 | 0,06250000
100.000 | 256 | 0,00256000 | 1,56250000
1.000.000 | 256 | 0,00025600 | 156,25000000

HINWEIS: Es dauert > 40 Sekunden, bis der 32 bit Zähler bei 50 MHz Takt überläuft bzw. das Ergebnis vom Controller S320 negativ interpretiert wird. Bei einem PreScaler von 2 liegt die kleinste noch meßbare Frequenz demnach bei ca. 0.05 Hz.

Erläuterung des Verfahrens zur Puls/Pausen-Verhältnismessung: Das Puls/Pausenverhältnis wird durch zweifache Zeitmessung der High- bzw. Low-Flanke bestimmt. Die Auflösung liegt in diesem Modus fest bei 20 Nanosekunden. Die reine Bestimmung der Impulsdauer ist mit dieser Betriebsart selbstverständlich ebenfalls möglich.

In der Standardbibliothek stdlib.spi sind die Funktionen zur Kommunikation mit der Slotkarte TYP510 definiert. Die genaue Beschreibung der Befehle können im entsprechenden Kapitel nachgelesen werden.

Zähler werden mit CounterInit auf Null initialisiert und mit CounterRead ausgelesen.

Frequenzmessungen werden mit FrequencyInit gestartet und mit FrequencyRead ausgewertet. Eine Funktion FrequencyMeas führt die Messung komplett in einem Schritt durch.

Puls/Pausen-Verhältnismessungen werden mit DutyCycleHighInit bzw. DutyCycleHighLowInit gestartet und mit DutyCycleRead ausgelesen. Eine Funktion DutyCycleMeas führt die Messung komplett in einem Schritt durch.

Konfigurationsmöglichkeiten der Slotkarte TYP510:

Syntax: | Port <val> {Name "<val>"; Mode <val>;};
Port | <val> ist die Kanalnummer für Port 0 oder 1, eine Integerzahl.
Name | <val> ist der Name des Ports, z.B. "Gaszaehler", "xAchse" usw.
Mode | <val> die Betriebsart des Kanals. Gültige Werte sind:
 | "impulsecounter" | - Impulszähler
 | "incrementalcounter" | - Inkrementalzähler (nur Port 0)
 | "incrementalcounter4x" | - Inkrementalzähler 4-fach (nur Port 0)
 | "frequency" | - Frequenzmessung
 | "dutycycle" | - Puls/Pausen-Verhältnismessung

Konfigurationsbeispiel der TYP510-Slotkarte:

MODULE 510 { Port 0 { Name "CounterA";
                      Mode "incrementalcounter4x"; };
             Port 1 { Name "CounterB";
                      Mode "frequency"; };
           } Slot 0;

weiter zur Slotkarte TYP520