Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
STORED-PROGRAM CONTROL
Document Type and Number:
WIPO Patent Application WO/2006/131317
Kind Code:
A1
Abstract:
Disclosed is a stored-program control comprising a CPU operating at a first clock frequency, a configurable logic circuit operating at a second clock frequency, and a bus to which the CPU and the logic circuit are connected. A control program encompassing a first task and a second task is stored in the stored-program control. The first task is stored in the stored-program control in such a way that the same can be executed by the CPU while the second task in configured in the logic circuit. The logic circuit is configured such that the second task (11) can be executed by the logic circuit in exactly one clock pulse of the logic circuit.

Inventors:
LEHNER THOMAS (AT)
Application Number:
PCT/EP2006/005389
Publication Date:
December 14, 2006
Filing Date:
June 06, 2006
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
CONTEC STEUERUNGSTECHNIK & AUT (AT)
LEHNER THOMAS (AT)
International Classes:
G05B19/05
Foreign References:
EP0499695A21992-08-26
US20010025231A12001-09-27
US5731712A1998-03-24
US20020198607A12002-12-26
DE19751439A11999-06-02
Attorney, Agent or Firm:
Lorenz, Seidler Gossel (München, DE)
Download PDF:
Claims:
Patentansprüche:
1. SPS umfassend: eine mit einer ersten Taktfrequenz arbeitende CPU einen mit einer zweiten Taktfrequenz arbeitenden konfigurierbaren Logikschaltkreis einen Bus, an den die CPU und der Logikschaltkreis angeschlossen sind, wobei in der SPS ein Steuerungsprogramm gespeichert ist, das einen ersten Task und einen zweiten Task umfasst und wobei der erste Task derart in der SPS gespeichert ist, dass er von der CPU ausführbar ist und wobei der zweite Task im Logikschaltkreis konfiguriert ist, dadurch gekennzeichnet, dass der Logikschaltkreis derart konfiguriert ist, dass der zweite Task (1 1 ) in genau einem Takt des Logikschaltkreises vom Logikschaltkreis ausführbar ist.
2. SPS nach Anspruch 1 , dadurch gekennzeichnet, dass wenigstens ein Teil des zweiten Tasks (11 ) im Logikschaltkreis in Form einer kombinatorischen Logikschaltung konfiguriert ist.
3. SPS nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass das in der SPS (1 ) gespeicherte Steuerungsprogramm neben dem ersten und dem zweiten Task (1 1 ) wenigstens einen weiteren Task aufweist, wobei der wenigstens eine weitere Task im Logikschaltkreis konfiguriert ist.
4. SPS nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, dass der Logikschaltkreis eine Steuerungseinheit (12) aufweist, die zur Steuerung der Ausführung der im Logikschaltkreis konfigurierten Tasks (11) ausgebildet ist.
5. SPS nach Anspruch 4, dadurch gekennzeichnet, dass die Steuerungseinheit (12) derart ausgebildet ist, dass sie den zweiten Task (1 1 ) bei jedem Takt des Logikschaltkreises ausführt.
6. SPS nach Anspruch 4, dadurch gekennzeichnet, dass die Steuerungseinheit (10) derart ausgebildet ist, dass sie den zweiten Task (11 ) bei einem vorgegebenen Vielfachen des Takts des Logikschaltkreises ausführt.
7. SPS nach einem der Ansprüche 4 bis 6, dadurch gekennzeichnet, dass die Steuerungseinheit (12) derart ausgebildet ist, dass sie den zweiten Task (1 1 ) und den wenigstens einen weiteren Task bei unterschiedlichen Takten des Logikschaltkreises ausführt.
8. SPS nach einem der Ansprüche 1 bis 7, dadurch gekennzeichnet, dass der konfigurierbare Logikschaltkreis wenigstens einen FPGA (3) umfasst.
9. SPS, insbesondere nach einem der Ansprüche 1 bis 8, umfassend: eine mit einer ersten Taktfrequenz arbeitende CPU einen mit einer zweiten Taktfrequenz arbeitenden konfigurierbaren Logikschaltkreis einen Bus, an den die CPU und der Logikschaltkreis angeschlossen sind, wobei in der SPS ein Steuerungsprogramm gespeichert ist, das einen ersten Task und einen zweiten Task umfasst und wobei der erste Task derart in der SPS gespeichert ist, dass er von der CPU ausführbar ist und wobei der zweite Task im Logikschaltkreis konfiguriert ist und wobei der erste und der zweite Task derart ausgebildet sind, dass sie untereinander Signale austauschen können, dadurch gekennzeichnet, dass die SPS (1 ) eine Synchronisierungseinheit (19) aufweist, über die der Signalaustausch erfolgt, wobei die Synchronisierungseinheit (19) derart ausgebildet ist, dass die in einem Taktzyklus des empfangenden Tasks übertragenen Signale aus genau einem Taktzyklus des sendenden Tasks stammen.
10. SPS nach Anspruch 9, dadurch gekennzeichnet, dass die Synchronisierungseinheit (19) wenigstens zwei hintereinander geschaltete Register (29, 30) zur Zwischenspeicherung der zu übertragenden Signale aufweist.
11. SPS nach Anspruch 9 oder 10, dadurch gekennzeichnet, dass der Logikschaltkreis die Synchronisierungseinheit (19) aufweist.
12. SPS, insbesondere nach einem der Ansprüche 1 bis 11 , umfassend eine CPU, einen konfigurierbaren Logikschaltkreis und einen Bus an den die CPU und der Logikschaltkreis angeschlossen sind, wobei in der SPS ein Steuerungsprogramm gespeichert ist, das einen ersten Task und einen zweiten Task umfasst und wobei der erste Task derart in der SPS gespeichert ist, dass er von der CPU ausführbar ist und wobei der zweite Task im Logikschaltkreis konfiguriert ist und wobei der Steuerungsprogramm wenigstens eine globale Variable umfasst, dadurch gekennzeichnet, dass im Logikschaltkreis eine Emulationseinheit (20) konfiguriert ist, die derart ausgebildet ist, dass sie bei einem Schreibzugriff mehrerer Tasks auf die globale Variable der globalen Variable den Wert des späteren Schreibzugriffs zuweist.
13. SPS nach Anspruch 12, dadurch gekennzeichnet, dass die Emulationseinheit (20) derart ausgebildet ist, dass sie bei einem gleichzeitigen Schreibzugriff des ersten Tasks und des zweiten Tasks (11) der globalen Variable den Wert des Schreibzugriffs des ersten Tasks zuweist.
14. Verfahren zum Programmieren einer SPS mit einer CPU und einem konfigurierbaren Logikschaltkreis, insbesondere nach einem der Ansprüche 1 bis 13, mit einem von der SPS auszuführenden Steuerungsprogramm, wobei das Steuerungsprogramm in einer textbasierten Programmiersprache vorliegt, dadurch gekennzeichnet, dass ein Softwaretool das Steuerungsprogramm in einen ersten Teil und einen zweiten Teil zerlegt, wobei der erste Teil in einen von der CPU (2) der SPS (1 ) lesbaren Maschinencode übersetzt wird und wobei aus dem zweiten Teil eine Hardwarebeschreibung generiert wird und wobei aus der Hardwarebeschreibung ein Bitstream synthetisiert wird und anschließend der übersetzte erste Teil derart in der SPS (1 ) gespeichert wird, dass er von der CPU (2) ausführbar ist und der synthetisierte Bitstream im Logikschaltkreis konfiguriert wird.
15. Verfahren zur Steuerung der Datenübertragung von den von der CPU einer SPS nach einem der Ansprüche 9 bis 13 ausgeführten ersten Tasks zu den im Logikschaltkreis konfigurierten zweiten Tasks, dadurch gekennzeichnet, dass für jeden Wert, der zwischen den ersten und den zweiten Tasks (11 ) ausgetauscht wird zwei hintereinander geschaltete Register (28, 29) vorgesehen sind und dass die früheren Daten solange im zweiten Register (28) gespeichert bleiben, bis die neu zu übertragenden Daten vollständig über den Bus (21 ) ins erste Register (29) übertragen wurden und dann in einem Taktzyklus die zu übertragenden Daten vom ersten Register (29) in das zweite Register (28) übertragen werden.
16. Verfahren zur Steuerung der Datenübertragung von den im Logikschaltkreis einer SPS nach einem der Ansprüche 9 bis 13 konfigurierten zweiten Tasks zu den von der CPU ausgeführten ersten Tasks, dadurch gekennzeichnet, dass für jeden Wert, der zwischen den ersten und den zweiten Tasks (11 ) ausgetauscht wird zwei hintereinander geschaltete Register (30, 31 ) vorgesehen sind und dass die zu übertragenden Daten mit jedem Taktzyklus des zweiten Tasks (11) im zweiten Register (30) gespeichert werden, die zu übertragenden Daten zu einem bestimmten Zeitpunkt im ersten Register (31 ) gespeichert werden und dann die Daten im ersten Register (31 ) solange »konstant gehalten werden, bis sie sequentiell über den Bus (21 ) an den ersten Task übertragen wurden.
17. Softwaretool für eine textbasierte Software zum Programmieren einer SPS nach einem der Ansprüche 1 bis 13 mit einem von der SPS auszuführenden Steuerungsprogramm, dadurch gekennzeichnet, dass das Softwaretool derart ausgebildet ist, dass das Steuerungsprogramm in einen ersten Teil und einen zweiten Teil zerlegbar ist und dass der erste Teil in einen von der CPU (2) der SPS (1 ) lesbaren Maschinencode übersetzbar ist und aus dem zweiten Teil eine Hardwarebeschreibung generierbar ist und wobei aus der Hardwarebeschreibung ein im Logikschaltkreis der SPS (1 ) konfigurierbarer Bitstream synthetisierbar ist.
18. Datenträger, auf dem ein Softwaretool nach Anspruch 17 gespeichert ist.
Description:
Speicherprogrammierbare Steuerung

Die vorliegende Erfindung betrifft eine speicherprogrammierbare Steuerung (SPS) umfassend eine mit einer ersten Taktfrequenz arbeitende CPU, einen mit einer zweiten Taktfrequenz arbeitenden konfigurierbaren Logikschaltkreis und einen Bus, an den die CPU und der Logikschaltkreis angeschlossen sind, wobei in der SPS ein Steuerungsprogramm gespeichert ist, das einen ersten Task und einen zweiten Task umfasst und wobei der erste Task derart in der SPS gespeichert ist, dass er von der CPU ausführbar ist und wobei der zweite Task im Logikschaltkreis konfiguriert ist.

Unter einem Task wird eine zeitliche Ablaufeinheit eines Programms nach der europäischen Norm EN 61131 verstanden. Ein Task ist definiert durch einen Namen, eine Priorität und einen Typ der festlegt, welche Bedingung den Start des Tasks auslöst. Diese Bedingung kann entweder zeitlich definiert sein (Zyklusintervall) oder durch ein internes oder externes Ereignis, bei dessen Eintreten der Task ausgeführt werden soll, beispielsweise die steigende Flanke einer globalen Projektvariable oder ein Interrupt-event der Steuerung. Jedem Task kann eine Folge von Programmen zugeordnet werden, die beim Ausführen des Tasks abgearbeitet werden sollen.

Unter Zykluszeit eines Tasks wird die Zeit verstanden, die zwischen zwei aufeinander folgenden Zeitpunkten liegt, zu denen der Task ausgeführt wird. Die Zeitdauer, die für die Ausführung des Tasks benötigt wird, ist meist geringer und maximal gleich groß der Zykluszeit.

Im Rahmen dieser Beschreibung kann ein von der CPU auszuführender erster Task auch als Software-Task und ein im Logikschaltkreis konfigurierter zweiter Task auch als Hardware- Task bezeichnet werden.

Da der programmierbare Logikschaltkreis parallel arbeitet, kann die Zykluszeit des zweiten Tasks um mehrere Größenordnungen (10 4 bis 10 5 ) verringert werden. Allerdings ist der Umfang der im Logikschaltkreis implementierbaren Funktionen beschränkt, da dieser nur eine bestimmte Größe hat.

Die Vorteile von CPU und programmierbarem Logikschaltkreis kann man kombinieren, indem man ein Steuerungsprogramm in einen weniger zeitkritischen ersten Task und einen zeitkritischeren zweiten Task zerlegt, wobei der weniger zeitkritische erste Task von der CPU abgearbeitet wird und der zeitkritischere zweite Task im Logikschaltkreis konfiguriert wird.

Die Kombination aus CPU und programmierbarem Logikschaltkreis an sich ist Stand der Technik. Allerdings sind solche Lösungen mit hohem Entwicklungsaufwand verbunden.

Zum einen geschieht die Programmierung der CPU und der Konfiguration des Logikschaltkreises auf verschiedene Art und Weise. Die CPU wird mittels Liste von sequentiellen Befehlen programmiert, die in einer Programmiersprache formuliert sind. Der Logikschaltkreis wird mittels Schaltplaneingabe oder über Hardware-Beschreibungssprachen definiert.

Zum anderen müssen sowohl in der Software der CPU als auch im Logikschaltkreis Mittel vorgesehen werden, die den Datenaustausch ermöglichen. Nachdem die Programmierung der Hardware und der Software typischerweise von verschiedenen Ingenieuren erledigt wird, kommt zu der Kommunikation zwischen CPU und Logikschaltkreis auch die Kommunikation zwischen den Ingenieuren.

Es ist für den Anwender somit ein großer Vorteil, wenn er die Algorithmen der CPU und des Logikschaltkreises in derselben Programmiersprache schreiben kann und der Datenaustausch zwischen CPU und Logikschaltkreis automatisch erfolgt. Dieser Datenaustausch sollte idealerweise "transparent", also für den Anwender nicht sichtbar sein. Dadurch kann er einfach Programmteile zwischen CPU und Logikschaltkreis verschieben, ohne dass er die Kommunikation ändern muss.

Weiters ist es ein Vorteil, wenn der Anwender für die Programmierung des Gesamtsystems keine neue Programmiersprache erlernen muss, sondern eine Sprache verwenden kann, die im Steuerungsbereich weit verbreitet ist wie zum Beispiel IEC61131-3.

Eine SPS mit einer CPU und einem konfigurierbaren Logikschaltkreis geht aus der US 6,219,628 B1 hervor.

Das System weist allerdings den Nachteil auf, dass es nicht der Norm IEC61131 entspricht.

Erstens definiert die Norm neben zwei graphischen Sprachen auch drei textbasierte Sprachen, die von den fortgeschrittenen Benutzern hauptsächlich verwendet werden.

Das Implementieren einer textbasierten Sprache in einem Logikschaltkreis ist schwieriger, da diese einen sequentiellen Ablauf beschreiben, ein graphisches Programm dagegen bereits eine parallele Struktur hat.

Das Konvertieren der graphischen Sprachen in textbasierten ist hingegen Stand der Technik. Typischerweise übersetzen SPS-Systeme die graphischen Sprachen vor der Übersetzung in Maschinencode zuerst in eine textbasierte Zwischensprache (zum Beispiel AWL). Somit können mit der hier beschriebenen Erfindung sowohl textbasierte als auch graphische Sprachen ausgeführt werden.

Zweitens definiert die IEC 61131 , wie bereits beschrieben, zeitliche Ausführungseinheiten die Tasks genannt werden. Das System der US 6,219,628 B1 weist hingegen ein datengetriebenes System auf. Wie beispielsweise aus den Figuren 16 und 19 dieser Schrift ersichtlich ist, wird der schnelle Teil derart im Logikschaltkreis konfiguriert, dass er in Form von miteinander vernetzten Modulen vorliegt, wobei die Eingangsdaten in Abhängigkeit von einem Enable-Signal schrittweise von Modul zu Modul weitergegeben werden. Eine Zykluszeit entspricht daher im Wesentlichen der Zeit, die für den Datenfluss von den am Eingang angeordneten Modulen bis zu den am Ausgang angeordneten Modulen benötigt wird.

Weiters ergibt sich daraus das Problem, dass die Ausführung des schnellen Teiles immer mehrere Taktzyklen benötigt. Die resultierende SPS ist zwar schneller, als wenn das gesamte Programm auf der CPU ausgeführt würde. Die Geschwindigkeit des Logikschaltkreises wird aber nicht voll ausgenutzt.

Aufgabe der Erfindung ist es, eine gattungsgemäße SPS derart weiterzubilden, dass sie nach der Norm IEC 61131 programmierbar ist. Weiters soll die SPS eine höhere Geschwindigkeit aufweisen.

Die erfindungsgemäße Maßnahme kann beispielsweise so realisiert werden, dass wenigstens ein Teil des zweiten Tasks im Logikschaltkreis in Form einer kombinatorischen Logikschaltung konfiguriert ist. Bei einer derartigen kombinatorischen Logikschaltung wird jedem Eingangswert eines Signals in genau einem Takt des Logikschaltkreises der dazugehörige Ausgangswert zugeordnet. Es werden für alle Variablen des Hardware-Tasks Register entsprechender Breite im Logikschaltkreis vorgesehen und es wird der Inhalt dieser Register mittels kombinatorischer Logik aus dem Registerinhalt des vorhergehenden Zyklus

ermittelt. Bei Hardware-Tasks einfacher Natur kann die kombinatorische Logikschaltung in Form einer Tabelle dargestellt werden, wobei die Zeilen der Tabelle durch eine abschließende Angabe aller möglicher Eingangswerte gebildet werden und die Spalten der Tabelle durch die jeweils dazugehörigen Ausgangswerte gebildet werden.

Der Programmierer gibt die gewünschte Logik in einer SPS-Programmiersprache, zum Beispiel strukturierter Text, vor. Ein Softwaretool generiert die Logik in einer Hardwarebeschreibungssprache, zum Beispiel Verilog. Dieses Generieren umfasst die Emulation von globalen Variablen, das Konfigurieren einer Synchronisierungseinheit sowie das Erzeugen des Hardware-Tasks. In einfachen Fällen kann das Erzeugen des Hardware- Tasks durch eine Syntaxübersetzung erfolgen. Aus der Hardwarebeschreibungssprache wird anschließend ein Bitstream synthetisiert. Mit dem so erzeugten Bitstream wird anschließend die Logik im Logikschaltkreis konfiguriert.

Natürlich kann vorgesehen sein, dass das in der SPS gespeicherte Steuerungsprogramm neben dem ersten und dem zweiten Task wenigstens einen weiteren Task aufweist, wobei der wenigstens eine weitere Task im Logikschaltkreis konfiguriert ist. Im Allgemeinen kann ein vorgegebenes Steuerungsprogramm in eine ganze Reihe von jeweils ersten und zweiten Tasks aufgespalten werden, wobei die ersten Tasks jeweils derart in der SPS gespeichert sind, dass sie von der CPU ausführbar sind und die zweiten Tasks jeweils im Logikschaltkreis konfiguriert sind. Mit anderen Worten ist ein gegebenes Steuerungsprogramm in eine Vielzahl von Software- und/oder Hardware-Tasks zerlegbar.

Insbesondere - aber nicht ausschließlich - beim Vorliegen mehrerer Hardware-Tasks ist es vorteilhaft, wenn vorgesehen ist, dass der Logikschaltkreis eine Steuerungseinheit aufweist, die zur Steuerung der Ausführung der im Logikschaltkreis konfigurierten Hardware-Tasks ausgebildet ist.

Dies erlaubt eine größere Flexibilität hinsichtlich der Ausführbarkeit der im Logikschaltkreis konfigurierten zweiten Tasks. Je nach Anwendung kann beispielsweise vorgesehen sein, dass die Steuerungseinheit derart ausgebildet ist, dass sie den zweiten Task bei jedem Takt des Logikschaltkreises ausführt. Alternativ kann jedoch auch vorgesehen sein, dass die Steuerungseinheit derart ausgebildet ist, dass sie den zweiten Task bei einem vorgegebenen Vielfachen des Takts des Logikschaltkreises ausführt. Insbesondere kann beim Vorliegen von wenigstens zwei Hardware-Tasks vorgesehen sein, dass die Steuerungseinheit derart ausgebildet ist, dass sie den zweiten Task (erster Hardware-Task) und den wenigstens einen

weiteren Task (zweiter Hardware-Task) bei unterschiedlichen Takten des Logikschaltkreises ausführt.

Besonders bevorzugt ist vorgesehen, dass der konfigurierbare Logikschaltkreis wenigstens einen FPGA (Field Programmable Gate Array) umfasst. Der konfigurierbare Logikschaltkreis kann sogar vollständig durch einen FPGA gebildet werden.

Eine weitere Variante der Erfindung betrifft eine speicherprogrammierbare Steuerung (SPS), insbesondere nach einem der vorgenannten Ausführungsbeispiele, umfassend eine mit einer ersten Taktfrequenz arbeitende CPU, einen mit einer zweiten Taktfrequenz arbeitenden konfigurierbaren Logikschaltkreis und einen Bus, an den die CPU und der Logikschaltkreis angeschlossen sind, wobei in der SPS ein Steuerungsprogramm gespeichert ist, das einen ersten Task und einen zweiten Task umfasst und wobei der erste Task derart in der SPS gespeichert ist, dass er von der CPU ausführbar ist und wobei der zweite Task im Logikschaltkreis konfiguriert ist und wobei der erste und der zweite Task derart ausgebildet sind, dass sie untereinander Signale austauschen können.

Die Anwendung einer SPS in der Steuerungs- und Messtechnik erfordert Echtzeitfähigkeit des Steuerprogramms. Darunter versteht man die Fähigkeit innerhalb einer vorgegebenen Zeitspanne auf ein Ereignis reagieren zu können. Die im Logikschaltkreis konfigurierten zweiten Tasks müssen permanent laufen können und können nicht zum Signal- bzw. Datenaustausch angehalten werden. Wenn der zweite Task beispielsweise ein Ausgangssignal erzeugt, dann würde das Ausgangssignal zu dieser Zeit gestört werden. Ist der zweite Task derart konfiguriert, dass er Eingangsimpulse zählt, dann würden in dieser Zeit Eingangsimpulse übersehen werden. Trotz dieser Einschränkung muss ein konsistenter Signal- bzw. Datenaustausch zwischen dem bzw. den ersten und dem bzw. den zweiten Task(s) möglich sein.

Dies wird durch eine SPS mit den Merkmalen des Anspruchs 9 gelöst. Durch das Vorsehen einer Synchronisierungseinheit über die der Signalaustausch erfolgt, wobei die Synchronisierungseinheit derart ausgebildet ist, dass die in einem Taktzyklus des empfangenden Tasks übertragenen Signale aus genau einem Taktzyklus des sendenden Tasks stammen, wird ein konsistenter Signal- bzw. Datenaustausch ermöglicht, da sich alle Daten bzw. Signale eines Daten- bzw. Signalsatzes auf den selben Zeitpunkt (den selben Zyklus) beziehen.

Dies sei im Folgenden anhand eines der Illustration dienenden, nicht einschränkend auszulegenden Beispiels erklärt:

Unter der Annahme dass der erste Task eine Zykluszeit von 1 ms aufweist und dass der zweite Task eine Zykluszeit von 100 ns aufweist und unter Berücksichtigung der Tatsache, dass beide Zykluszeiten in etwa als Vielfache der Taktzeit des Logikschaltkreises (nachfolgend Systemtakt genannt) ausdrückbar sind, ergibt es sich, dass es bei jedem 10000-ten Systemtakt zu einem Datenaustausch kommt. (In der Praxis würde dies nicht stets exakt beim 10000-ten Systemtakt geschehen, wie der Fachmann weiß, ist eine gewisse Bandbreite von beispielsweise ± 500 Systemtakten zu erwarten.)

Sei N ein die Nummer des jeweiligen Zyklus des zweiten Tasks angebender Index und sei M der entsprechende Index für den jeweiligen Zyklus des ersten Tasks und sei angenommen, dass der erste Task drei Messwerte (A, B 1 C) aus dem zweiten Task ausliest, dann ergibt sich folgendes:

Im Bezug auf den M-ten Zyklus des ersten Tasks müssen alle drei Messwerte aus dem Zyklus N=10 000 x M oder N=10 001 x M des zweiten Tasks stammen. Um eine konsistente Datenübertragung vom zweiten Task zum ersten Task sicherzustellen, darf es jedoch nicht vorkommen, dass zum Beispiel der Messwert A noch aus dem Zyklus N=10 000 x M stammt und die Messwerte B und C schon aus dem Zyklus N=10 001 x M stammen.

Äquivalentes gilt, wenn Daten vom ersten Task an den zweiten Task übergeben werden sollen. Alle Werte, die vom ersten Task an den zweiten Task übergeben werden, müssen innerhalb eines Zyklus des zweiten Tasks von ihrem alten auf den neu übergebenen Wert wechseln.

Dies kann beispielsweise dadurch realisiert werden, dass vorgesehen ist, dass die Synchronisierungseinheit wenigstens zwei hintereinander geschaltete Register zur Zwischenspeicherung der zu übertragenden Signale aufweist.

Dies ermöglicht ein Verfahren zur Steuerung der Signal- bzw. Datenübertragung von den von der CPU einer SPS ausgeführten ersten Tasks zu den im Logikschaltkreis konfigurierten zweiten Tasks, bei dem für jeden Wert ,der zwischen dem ersten und den zweiten Tasks ausgetauscht wird, zwei hintereinander geschaltete Register vorgesehen sind und bei dem die früheren Daten solange im zweiten Register gespeichert bleiben, bis die neu zu

übertragenden Daten vollständig über den Bus ins erste Register übertragen wurden und wobei dann in einem Taktzyklus des empfangenden zweiten Tasks die zu übertragenden Daten vom ersten Register in das zweite Register übertragen werden.

Ebenso wird ein Verfahren zur Steuerung der Datenübertragung von den im Logikschaltkreis konfigurierten zweiten Tasks zu den von der CPU ausgeführten ersten Tasks ermöglicht, bei dem für jeden Wert, der zwischen den ersten und den zweiten Tasks ausgetauscht wird, zwei hintereinander geschaltete Register vorgesehen sind und bei dem die zu übertragenden Daten mit jedem Taktzyklus des zweiten Tasks im zweiten Register gespeichert werden, die zu übertragenden Daten zu einem bestimmten Zeitpunkt im ersten Register gespeichert werden, um dann die Daten im ersten Register solange konstant gehalten werden, bis es sequentiell über den Bus an den ersten Task übertragen wurden.

Bei einer besonders bevorzugten Ausführungsform dieser Variante der Erfindung ist vorgesehen, dass der Logikschaltkreis die Synchronisierungseinheit aufweist.

Eine weitere Variante der Erfindung betrifft eine SPS, insbesondere nach einem der vorgenannten Ausführungsbeispiele umfassend eine CPU, einen konfigurierbaren Logikschaltkreis und einen Bus an den die CPU und der Logikschaltkreis angeschlossen sind, wobei in der SPS ein Steuerungsprogramm gespeichert ist, das einen ersten Task und einen zweiten Task umfasst und wobei der erste Task derart in der SPS gespeichert ist, dass er von der CPU ausführbar ist und wobei der zweite Task im Logikschaltkreis konfiguriert ist und wobei das Steuerungsprogramm wenigstens eine globale Variable umfasst.

Derartige globale Variablen sind für alle Tasks verfügbar und zwar so, dass im Prinzip jede Task sowohl schreibend als auch lesend auf die globale Variable zugreifen kann. An sich ist es einem Programmierer bekannt, dass, wenn es zu der Situation kommt dass mehrere Tasks auf eine globale Variable schreiben, die globale Variable den Wert des späteren Schreibzugriffs erhält.

Das obige Verhalten ergibt sich aus der sequentiellen Ausführung von Software. Da der konfigurierbare Logikschaltkreis aber parallel arbeitet und nicht sequentiell, muss das Verhalten der globalen Variablen emuliert werden.

Durch eine SPS mit den Merkmalen des Anspruchs 12 wird dies erreicht.

Beispielsweise kann vorgesehen sein, dass in der Emulationseinheit für jede globale Variable ein Datenregister angelegt ist. Für jede globale Variable wird ein Ausgang mit einer an die Größe der jeweiligen globalen Variable angepassten Bitbreite im zweiten Task angelegt und mit dem jeweiligen Datenregister der Emulationseinheit verbunden. Ebenso wird für jede globale Variable ein weiterer Ausgang (Enable, Fig. 5) angelegt und mit der Emulationseinheit verbunden.

Die Erfindung betrifft weiters ein Verfahren zum Programmieren einer SPS mit einer CPU und einem konfigurierbaren Logikschaltkreis, insbesondere nach einem der Ansprüche 1 bis 13, mit einem von der SPS auszuführenden Steuerungsprogramm, wobei das Steuerungsprogramm in einer textbasierten Programmiersprache vorliegt.

In der europäischen Norm EN 61131-3 sind fünf verschiedene Programmiersprachen definiert, von denen zwei grafische Programmiersprachen und drei textbasierte Programmiersprachen sind. Während das in der US 6,219,628 B1 definierte Verfahren nur bei grafischen Programmiersprachen anwendbar ist, ist das in den vorstehend beschriebenen Ausführungsformen definierte Verfahren bei textbasierten Programmiersprachen anwendbar.

Dies kann dadurch erfolgen, dass ein Softwaretool das Steuerungsprogramm in einen ersten Teil und einen zweiten Teil zerlegt, wobei der erste Teil in einen von der CPU der SPS lesbaren Maschinencode übersetzt wird und wobei aus dem zweiten Teil eine Hardwarebeschreibung generiert wird und wobei aus der Hardwarebeschreibung ein Bitstream synthetisiert wird und anschließend der übersetzte erste Teil derart in der SPS gespeichert wird, dass er von der CPU ausführbar ist und der synthetisierte Bitstream im Logikschaltkreis konfiguriert wird.

Dies ist insofern von Bedeutung als es sich bei den Anwendern von textbasierten bzw. grafischen Programmiersprachen um völlig unterschiedliche Gruppen hinsichtlich ihrer Qualifikation als Programmierer handelt. Benutzer von textbasierten Programmiersprachen haben im Allgemeinen fundierte Programmierkenntnisse und stellen auch höhere Anforderungen an die von der SPS zu bewältigende Funktionalität.

Die Erfindung betrifft weiters ein Softwaretool für eine textbasierte Software zum Programmieren einer SPS nach einem der Ansprüche 1 bis 13 mit einem von der SPS auszuführenden Steuerungsprogramm, wobei das Softwaretool derart ausgebildet ist, dass

das Steuerungsprogramm in einen ersten Teil und einen zweiten Teil zerlegbar ist und wobei der erste Teil in einen von der CPU der SPS lesbaren Maschinencode übersetzbar ist und aus dem zweiten Teil eine Hardwarebeschreibung generierbar ist und wobei aus der Hardwarebeschreibung ein im Logikschaltkreis der SPS konfigurierbarer Bitstream synthetisierbar ist sowie einen Datenträger, auf dem ein Softwaretool der vorgenannten Art gespeichert ist.

Weitere Vorteile und Einzelheiten ergeben sich anhand der nachfolgenden Figuren sowie der dazugehörigen Figurenbeschreibungen. Dabei zeigen:

Fig. 1 ein Blockschaltbild eines Ausführungsbeispiels einer erfindungsgemäßen

SPS, Fig. 2 ein Blockschaltbild des konfigurierbaren Logikschaltkreises der SPS nach

Fig. 1 , Fig. 3 ein Blockschaltbild des in Fig. 2 dargestellten Logikschaltkreises, der für ein konkretes Anwendungsbeispiel konfiguriert ist, Fig. 4 ein Blockschaltbild eines Ausführungsbeispiels einer erfindungsgemäßen

Synchronisierungseinheit und Fig. 5 ein Blockschaltbild eines Ausführungsbeispiels einer erfindungsgemäßen

Emulationseinheit.

Fig. 1 zeigt ein Blockschaltbild einer SPS 1 , welche eine CPU 2 und einen FPGA 3 umfasst, die durch einen Bus 8 miteinander verbunden sind. Es sind Digitaleingänge 4 sowie analoge Eingänge 5 und Digitalausgänge 6 sowie analoge Ausgänge 7 vorgesehen. Die Eingänge 4, 5 bzw. die Ausgänge 6, 7 sind mit dem FPGA 3 verbunden, damit eine schnelle Reaktion möglich ist. Es bleibt jedoch dem Benutzer überlassen, ob die Eingänge 4, 5 bzw. die Ausgänge 6, 7 im ersten Task oder im zweiten Task 11 bearbeitet werden sollen. Nicht eingezeichnet sind weitere Schnittstellen der CPU 2 zu weiteren Steuerungen, zu einer Visualisierungseinheit bzw. zu einem Entwicklungssystem (Download, Debugging). Gezeigt ist ein optional vorsehbares Erweiterungsmodul 9 für den FPGA 3, welches auch ein schnelles Eingabe-Ausgabemodul darstellen kann. Das Modul 9 ist über einen Highspeed- Link 10 mit dem FPGA 3 verbindbar.

In Fig. 2 ist ein Blockschaltbild des FPGA 3 dargestellt. Die fett umrandeten Module 11 , 19 und 20 werden in Abhängigkeit vom Steuerungsprogramm konfiguriert. Die übrigen Module 12 bis 16 und 18 sind standardmäßig im FPGA 3 konfiguriert. Die Register 15, 16 und 18

stellen die Schnittstelle zur CPU 2 dar. Die Register 15 bis 18 werden so an den Bus 21 angeschlossen, dass die Daten im Speicherbereich der CPU 2 sichtbar werden. Die Input- Output-Einheit 13 übernimmt Aufgaben wie das Synchronisieren der Eingänge 4,5 oder das Ansteuern von externen Analog-Digital-Wandlern. Diese Einheit löst auch Schreibkonflikte auf die Ausgänge 6,7 auf, wenn also Software-Task(s) und Hardware-Task(s) gleichzeitig auf einen der Ausgänge 6,7 schreiben wollen. Erkennbar sind weiters die Emulationseinheit 20 zum Emulieren globaler Variabler und der im FPGA 3 konfigurierte zweite Task 11. Der zweite Task 11 kommuniziert über eine Synchronisierungseinheit 19, welche nachfolgend noch genau beschrieben werden wird über den Bus 21 bzw. den Bus 8 mit der CPU 2. Die Steuerungseinheit 12 übernimmt allgemeine Steuerfunktionen, wie beispielsweise die Steuerung der Ausführung des zweiten Tasks 11 , die Definition der Zykluszeit des zweiten Tasks 1 1 sowie Zusatzfunktionen wie zum Beispiel Debugging. Das weitere Modul 14 kann Funktionen realisieren, die sonst durch zusätzliche Chips erledigt werden müssten. Dabei kann es sich beispielsweise um einen Displaycontroller oder um einen CAN-Bus handeln.

Bei einem vereinfacht dargestellten, anhand der Fig. 3 erläuterten Beispiel soll mit einer SPS 2 die Frequenz eines digitalen Eingangssignals, welches am Digitaleingang 4 anliegt, gemessen werden. Wenn die Frequenz unter einem vorgestellten Minimum liegt, soll dies über einen der Digitalausgänge 6 signalisiert werden, wenn die Frequenz über einen voreingestellten Maximum liegt, soll dies über einen weiteren der Digitalausgänge 6 signalisiert werden.

Das Steuerungsprogramm wird in einen ersten Task und einen zweiten Task 11 zerlegt. Der zweite Task 11 misst die Frequenz des Eingangssignals, in dem er die positiven Flanken der Impulse zählt. Der langsamere erste Task wertet die Zählerstände aus und schaltet die Digitalausgänge 6.

In der in der EN 61131-3 definierten SPS-Programmiersprache „strukturierter Text" wird der zweite Task 11 (Hardware-Task) wie folgt formuliert:

TASK FastMain;

CounterModuleO; END_TASK

PROGRAM CounterModule VAR previousLevel: BOOL; END_VAR VAR_OUTPUT counterValue: INT; END_VAR

IF parln[1] AND NOT previousLevel THEN counterValue:= counterValue+1; ENDJF previousLevel:= parln[1]; END PROGRAM

Das Programm CounterModule definiert eine Boole'sche Variable mit dem Namen previousLevel. In dieser wird der vorhergehende Wert des Eingangs gespeichert. Vor der ersten Ausführung des Programmes ist previousLevel LOW (hat also den logischen Wert 0).

Dann definiert das Programm eine Ausgangsvariable mit dem Namen counterValue. Nach der Definition der Variablen folgen die Anweisungen, die zyklisch ausgeführt werden.

In dem Beispiel wird angenommen, dass die digitalen Eingänge in der SPS mit dem Namen parln zur Verfügung gestellt werden. Der Ausdruck parln[1] beschreibt dann den Zustand des Eingangs Nummer 1 , an dem das zu zählende Signal anliegt.

Die IF-Anweisung prüft, ob eine positive Flanke des Signals vorliegt. Diese ist immer dann gegeben, wenn der aktuelle Zustand schon HIGH ist (also den logischen Wert 1 hat), der in previousLevel gespeicherte Zustand aber noch LOW ist.

In diesem Fall wird der Zähler „counterValue" um 1 erhöht. Anschließend wird der nächste Zyklus vorbereitet, indem der aktuelle Wert in der Variablen previousValue gespeichert wird.

Der von der CPU 2 auszuführende erste Task lautet wie folgt:

TASK Main;

PLC_PRG(); END_TASK •

PROGRAM PLC_PRG VAR minValue: INT; maxValue: INT; previousValue: INT; difference: INT; END_VAR

difference:= CounterModule.counterValue - previousValue; previousValue:= CounterModule.counterValue;

parOut [1] := difference < minValue; parOut [2] := difference > maxValue;

END_ PROGRAM

Zuerst wird wieder der Task angelegt. Dieser führt das Hauptprogramm des Steuerungsprogramms aus, welches immer den Namen PLC_PRG trägt.

Das Programm definiert zunächst wieder die Variablen. minValue und maxValue sind die voreingestellten Grenzwerte der Frequenz. In previousValue ist der alte Zählerstand zwischengespeichert. Vor dem ersten Durchlauf ist diese Variable 0. Die Variable difference speichert die Differenz zwischen dem aktuellen Zählerstand und dem Zählerstand des vorigen Zyklus.

Nach der Definition der Variablen beginnen wieder die Anweisungen.

Zuerst wird die Differenz der Zählerstände berechnet. Mit der Syntax „CounterModule.counterValue" wird auf den Wert des zweiten Tasks 11 zugegriffen.

Dann wird der aktuelle Zählerstand in previousValue gespeichert, damit der Wert im nächsten Zyklus zur Verfügung steht.

Anschließend werden die zwei digitalen Ausgänge geschaltet. parθut[1] ist immer dann HIGH, wenn die Differenz kleiner dem voreingestellten Wert minValue ist. Parθut[2] ist immer dann HIGH, wenn die Differenz größer dem Maximum (maxValue) ist.

Die Differenz ist ein Maß für die Eingangsfrequenz. Die Eingangsfrequenz in Hertz berechnet sich aus der Formel „Eingangsfrequenz = (Differenz/Zykluszeit des langsamen Tasks)".

Der Überlauf des Zählers muss nicht behandelt werden, da im Falle eines Überlaufs des Zählers auch bei der Subtraktion ein Überlauf auftritt. Die beiden Überläufe heben sich auf, sodass die Differenz in jedem Fall richtig ist.

Der erste Task kann weitere Aufgaben übernehmen, wie das Übertragen der gemessenen Frequenz oder Speichern in einer Log-Datei.

Der zweite Task 11 wird in der Hardwarebeschreibungssprache Verilog wie folgt generiert:

module FastTask(clk,parln,counterValue);

input clk; input [7:0] parln; output reg [15:0] counterValue;

reg previousLevel;

always @(posedge clk) begin if (parln[1] & IpreviousLevel) counterValue= counterValue+1 ; previousl_evel= parln[1]; end

endmodule

Es wird ein Modul mit dem Namen FastTask definert. In Klammer stehen alle Ein-Ausgangs- Signale des Modules. Diese werden dann im Detail angelegt:

clk ist der Systemtakt parln sind die Eingänge, Bitbreiten werden in eckigen Klammern angegeben.

CounterValue ist der generierte Zählerwert. Die Klausel „output reg" bedeutet, dass für das

Ausgangssignal automatisch ein Register angelegt wird.

Dann wird previsousLevel als 1 bit - Register angelegt.

Die Zeile "always @(posedge clk)" beginnt einen Task. Dieser wird bei jedem Systemtakt clk ausgeführt, „if" entspricht dem IF des strukturierten Texts. „&" ist UND, „!" ist NICHT. Der Rest ist gleich wie im strukturierten Text

Der zweite Task 11 wird im FPGA 3 wie in Fig. 3 schematisch dargestellt konfiguriert:

Der Systemtakt geht an die Einheiten 24, 25 und 19 (nicht eingezeichnet)

In diesem Beispiel ist angenommen, dass der zweite Task 11 in jedem Zyklus des Systemtakts ausgeführt wird.

Am Eingang 23 liegt das Eingangssignal an. Das Eingangssignal entspricht parln[1] im obigen Programmtext. Die Input-Output-Einheit 13 ist in dieser Darstellung nicht gezeigt. Der Eingang 23 führt zu einem UND-GATTER 32 sowie zu einem D-FLIP FLOP 25 (Daten-FLIP FLOP). Das D-FLIP FLOP 25 liegt mit einer Leitung 35 am UND-GATTER 32 an. Das Eingangssignal wird an das D-FLIP FLOP 25 geführt. Der Ausgang des D-FLIP FLOP 25 entspricht dem Eingangssignal, ist aber um genau einen Systemtakt verzögert. Das Ausgangssignal entspricht also dem Wert „previousLevel" im Programmtext. Das UND- GATTER 32 hat einen invertierten Eingang und entspricht der IF-Anweisung im zweiten Task 1 1. Wenn die Bedingung der IF-Anweisung erfüllt ist, dann ist der Ausgang des UND-Gatters 32 HIGH. Das bewirkt, dass der Zähler 24 in diesem Systemtakt erhöht wird.

Der Ausgang des Zählers 24 wird über die Synchronisierungseinheit 19 und den Bus 8 an die CPU 2 übergeben.

Der Aufbau einer Synchronisierungseinheit 19 ist schematisch in Fig. 4 dargestellt. Es sind Schreibregister 28, 29 und Leseregister 30, 31 vorgesehen. Die Schreibregister 28, 29 und die Leseregister 30, 31 kommunizieren mit dem zweiten Task 11. Die zu lesenden Daten D liegen über die Leitungen 33 an den Registern 30 an. Über Leitungen 34 ist den Leseregistern 31 ein Clock-Enable-Signal (CE-Signal) zuführbar. Bei Eingang des CE- Signals werden die Daten in den Leseregistern 31 mit den aktuell in den Registern 30 vorliegenden Daten D überschrieben. Solange das CE-Signal gleich Null ist, bleibt der Ausgang an den Leseregistern 31 konstant, auch wenn sich der an den Leitungen 33 angelegte Eingangswert ändern sollte. Über den Bus 21 kommuniziert die Synchronisierungseinheit 19 mit der CPU 2.

Der Ablauf ist wie folgt:

Den Registern 28, 31 wird über die Leitungen 34 das CE-Signal zugeführt. Wenn diese Leitungen auf 1 geschalten sind, übernehmen die jeweiligen Register 28, 31 die Daten D in jedem Zyklus vom Eingang an den Ausgang. Bei CE = 0 behalten die Datenregister 28, 31 den aktuellen Wert. Zuerst ist das CE-Signal auf 1 gesetzt. Die Leseregister 30 erhalten permanent aktuelle Werte aus dem zweiten Task 11. Sodann setzt der erste Task über die Steuerungseinheit 12 das CE-Signal auf 0. Dadurch werden die Daten in den Leseregistern 31 eingefroren. Der erste Task liest die Daten sequentiell über den Bus 8 bzw. den Bus 21 ein und speichert sie im Arbeitsspeicher der CPU 2. Der erste Task schreibt dann die Ausgangswerte sequentiell über den Bus 8 bzw. den Bus 21 in die Schreibregister 29. Anschließend wird das CE-Signal auf 1 gesetzt. Hierdurch werden die Schreibwerte innerhalb eines Zyklus in die Register 28 und dann in den zweiten Task 11 übernommen. Gleichzeitig werden die in den Registern 31 vorliegenden Daten aktualisiert. Nach einem vollendeten Zyklus des ersten Task, beginnt dieser Vorgang von neuem.

Die hier gewählte Darstellung ist vereinfacht. In realer Anwendung werden zwei zusätzliche Signale benötigt: das Clock-Enable-Signal zur Steuerung der Zykluszeit und ein Reset- Signal zur Initialisierung.

Weiters stellt das Blockschaltbild bereits eine optimierte Version dar. Die direkte Realisierung nach Anspruch 1 würde statt dem Zähler 24 ein Datenregister zur Speicherung der Variablen und einen Addierer mit der Konstanten „+1" beinhalten, der die Zustandsänderung übernimmt. Aktuelle Synthese-Tools sind aber in der Lage, diese Kombination in Verilog zu erkennen und durch einen Zähler zu ersetzen.

Diese Optimierungen ermöglichen, dass das hier beschriebene Beispiel in aktuell verfügbaren FPGAs mit 500 MHz getaktet werden kann. Das entspricht einer Zykluszeit des Hardware-Tasks von 2 ns. Die hier beschriebene SPS kann also Signale mit Frequenzen bis 250 MHz zählen.

Fig. 5 zeigt ein Blockschaltbild einer Emulationseinheit 20.

Das Datenregister 37 hält den aktuellen Wert der globalen Variablen. Dieser wird einerseits an den Hardware-Task gegeben (rechts) als auch über das Leseregister 38, den Puffer 39 und den Adressdatenbus 21 an den ersten Task.

Das Leseregister 38 hat nur die Funktion, den Wert der konstant zu halten, während er vom Bus 8 gelesen wird; Ein Zugriff über den Adressdatenbus 21 dauert im Allgemeinen mehrere Taktzyklen des Systemtaktes.

Alle Änderungen des Registers 37 laufen über die Einheit 36 (Arbitriereinheit). Diese liefert an das Register 37 die Daten (fett gezeichnet) und ein Enable-Signal (dünn). Wenn das Enable-Signal den logischen Wert 1 hat, dann werden die neuen Daten im Register 37 übernommen.

Die Änderungen können entweder über den Bus 8 erfolgen (in Fig. 5 rechts) oder über den ersten Task (in Fig. 5 links)

Änderungen über den Bus 8:

Bei Schreibzugriffen auf die globale Variable werden die Daten im Register 40 gespeichert. Die Einheit 41 erkennt einen Schreibzugriff und liefert in diesem Fall ein Enable-Signal, das für einen Systemtakt lang HIGH ist.

Änderungen über den Hardware-Task:

Wenn der Hardware-Task (zweiter Task 11) die globale Variable ändert, dann setzt er das Enable-Signal für einen Taktzyklus HIGH (dünn gezeichnet). Gleichzeitig legt er die neuen Daten an. (dick gezeichnet).

Die Einheit 36 regelt die Zugriffe auf das Register 37. Sie macht das zum Beispiel nach folgendem Algorithmus:

• Wenn kein Zugriff vorliegt, dann ist das Enable-Signal des Registers LOW. Die Daten sind in diesem Fall egal.

• Wenn ein Schreibzugriff des ersten Task vorliegt, dann ist das Enable-Signal HIGH und die Daten sind die Daten des ersten Task.

• Wenn ein Schreibzugriff des zweiten Task 11 vorliegt, aber kein Zugriff des ersten Task, dann ist das Enable-Signal HIGH und die Daten sind die Daten des zweiten Task 11.

Aus Fig. 5 ist ersichtlich, dass der zweite Task 11 für jede globale Variable drei Signale braucht.

• einen Eingang entsprechend der Bitbreite der Variable (xxx_in)

• einen Ausgang entsprechend der Bitbreite der Variable (xxx_out)

• einen Enable-Ausgang, der einen Schreibzugriff signalisiert (xxx_changed)

Das muss natürlich bei der Generierung der Hardwarebeschreibung berücksichtigt werden und zwar wie folgt:

• Alle Lesezugriffe auf eine globale Variable werden mit Zugriffen auf den auf den entsprechenden Eingang ersetzt.

• Alle Schreibzugriffe werden durch zwei Befehle ersetzt:

1. Setzen des Ausgangs auf den entsprechenden Wert

2. Für einen Taktzyklus das Enable-Signal HIGH setzen

Obwohl sich die Beschreibung auf zyklische Tasks bezieht, also auf Tasks, die mit einer vorgegebenen Periodizität ausgeführt werden, sind von der Offenbarung und vom Schutzumfang gleichermaßen nicht-zyklische Tasks umfasst. Wie bereits eingangs ausgeführt, versteht man hierunter Tasks, die immer bei Vorliegen eines bestimmten internen oder externen Ereignisses ausgeführt werden.