DE4010828A1 - Verfahren zum dekompilieren eines anwenderprogramms bei einer industriesteuerung - Google Patents
Verfahren zum dekompilieren eines anwenderprogramms bei einer industriesteuerungInfo
- Publication number
- DE4010828A1 DE4010828A1 DE4010828A DE4010828A DE4010828A1 DE 4010828 A1 DE4010828 A1 DE 4010828A1 DE 4010828 A DE4010828 A DE 4010828A DE 4010828 A DE4010828 A DE 4010828A DE 4010828 A1 DE4010828 A1 DE 4010828A1
- Authority
- DE
- Germany
- Prior art keywords
- contact
- jump
- code
- matrix
- ladder
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Programmable Controllers (AREA)
Description
Die Erfindung bezieht sich auf Industriesteuerungen
und befaßt sich insbesondere mit einem Verfahren zum
Rückgewinnen des bei der Programmierung solcher
Steuerungen benutzten Leiterlogikquellencode aus dem
kompilierten Anwenderprogramm, das auf solchen Steuerungen
abläuft, und zwar ohne die Verwendung von
Berechtigungsmarken oder Tokens benutzenden Dekompilierbefehlen.
Industriesteuerungen, wie sie beispielsweise aus
den US-PS 38 10 118, 39 42 158, 41 65 534 oder
44 42 504 bekannt sind, werden typischerweise mit
Industrieanlagen, Ausrüstungen oder Maschinen verbunden,
beispielsweise mit Fertigungsstraßen oder Werkzeugmaschinen,
und ihre Aufgabe besteht darin, solche
Anlagen oder Maschinen gemäß einem gespeicherten
Programm zu steuern. Bei diesen Industriesteuerungen,
wie sie aus den oben genannten Patenten bekannt sind,
enthalten die gespeicherten Programme Befehle, die im
Zuge ihrer Ausführung den Zustand von ausgewählten
Sensoren oder Fühlgliedern an der gesteuerten Vorrichtung
überprüfen und ausgewählte Stell- oder Betätigungsglieder
an der gesteuerten Vorrichtung in Abhängigkeit
vom Zustand eines oder mehrerer der überprüften
Fühlglieder aktivieren oder deaktivieren bzw.
ein- oder ausschalten. Die Eingänge zu der Steuerung
können diskrete Binärsignale sein, die beispielsweise
von Schaltern stammen können, die das Erreichen von
Grenz- oder Auslösewerten erfassen können, beispielsweise
in bezug auf eine Verschiebung oder Bewegung,
die Temperatur, die Zeit oder andere kontinuierlich
veränderbare Größen. Bei den Eingängen kann es sich
aber auch um analoge Meßwerte der Größen selbst handeln,
die vor der Verarbeitung im allgemeinen in die
digitale Binärform überführt werden.
Gleichermaßen können die Ausgänge der Steuerung
entweder Binärausgänge sein, die von mechanischen oder
Festkörperrelais stammen, oder aber auch Analogausgänge,
die mit Hilfe von Digital/Analog-Umsetzern
gewonnen werden.
Industriesteuerungen sind typischerweise in einer
Leiterlogiksprache programmiert, in der die Befehle
durch die Elemente eines Relais- oder Kontaktleiterdiagramms
(nach Art einer Leiter ausgebildeter Kontaktplan)
dargestellt sind. Die Leiterlogiksprache ist in
einer Form, die von Steuerungs- und Regelungstechnikern
leicht verstanden wird und in einem hohen Maße durch
Industrienormen standardisiert ist. Zur Unterstützung
des Anwenders beim Entwickeln und Editieren von Leiterlogikprogrammen
wurden Programmiergeräte entwickelt,
wie sie beispielsweise aus den US-PS 37 98 612,
38 13 649 und 40 70 702 bekannt sind.
Während der Ausführung werden Leiterlogikprogramme
befehlsweise in Maschinencodebefehle umgeformt, die
direkt von der Rechner-Hardware ausgeführt werden
können, die den Grundstein der Steuerung bildet. Diese
Umformung wird von einem Interpreterprogramm durchgeführt,
das jede Leitersprosse oder jeden Unterabschnitt
einer Leitersprosse analysiert und dem Rechner eine
Maschinencodesubroutine darbietet, die durch den betreffenden
Teil der Leiter definiert ist. Eine Industriesteuerung,
die in der Leiterlogiksprache programmiert
ist, kann daher mit Hilfe einer Maschine realisiert
werden, die von herkömmlicher Rechnerarchitektur Gebrauch
macht.
Steuerungen, die auf der Grundlage eines Interpreters
beruhen, haben jedoch zwei Nachteile. Der
eine Nachteil ist, daß das Interpreterprogramm zusammen
mit dem Leiterlogikprogramm während des Betriebs
der Steuerung in einem Speicher der Steuerung gespeichert
sein muß. Dadurch wird der für das Leiterlogikprogramm
zur Verfügung stehende Speicherraum
eingeschränkt. Der zweite Nachteil ist, daß infolge
der ständigen Interpretation des Leiterlogikprogramms
während des Betriebs der Steuerung die Arbeitsweise
der Steuerung verlangsamt wird. Die sich ergebenden
Geschwindigkeitsgrenzen können zu einer Verminderung
der Länge des auszuführenden Leiterlogikprogramms
führen.
Eine bekannte Möglichkeit zum Erhöhen der Geschwindigkeit
der Programmausführung und zum besseren
Ausnutzen des Speichers besteht darin, das Leiterlogikprogramm
in den Maschinencode zu kompilieren und nur
den Maschinencode in der Steuerung während des Betriebs
zu speichern. Ein Duplikat des ursprünglichen Leiterlogikprogramms
wird separat gespeichert, beispielsweise
auf einer Floppydisk oder einem Magnetband, so daß man
das ursprüngliche Programm heranziehen kann, wenn
später Programmänderungen erforderlich sein sollten.
Das Abspeichern von Kopien des ursprünglichen Leiterlogikprogramms
ist jedoch bei industrieller Anwendung
äußerst unbequem, da die von der Steuerung separat
gespeicherten Programme gegen Verschmutzung, Beschädigung,
Löschung usw. geschützt werden müssen.
Eine alternative Möglichkeit besteht darin, den
gespeicherten Maschinencode zurück in das Leiterlogikprogramm
zu dekompilieren, das kann vom Programmierer
verstanden und editiert werden kann. Das Dekompilier-
und Kompilierprogramm können in einem separaten Programmiergerät
oder Programmierterminal gespeichert
werden, um keinen Speicherraum in der Steuerung zu
verschwenden. Obgleich diese Möglichkeit aus der Sicht
des Benutzers oder Anwenders äußerst attraktiv ist,
tritt das Problem auf, daß es bei Benutzung von
vielen herkömmlichen Kompilierungsverfahren unmöglich
ist, das Leiterlogikprogramm aus dem Maschinencode
wiederzugewinnen. Dies beruht darauf, daß viele Kompilierungsverfahren
wirksam Information ausrangieren,
die erforderlich ist, um eindeutig zu identifizieren,
welche der vielen möglichen Leiterlogikstrukturen die
besondere Logiksequenz erzeugte, die im Maschinencode
verkörpert ist.
Solche Kompilierer können daher im kompilierten
Maschinencode zusätzliche Quellensprachentokens enthalten,
die von der Steuerung nicht ausgeführt werden,
sondern lediglich dazu dienen, den Maschinencode in
die Leiterlogikbefehle zu dekompilieren. Ein Beispiel
für eine solche Technik ist in einer US-Patentanmeldung
Nr. 07/161,484, eingereicht am 29. Februar 1988,
beschrieben.
Ziel der Erfindung ist es, für eine Industriesteuerung
einen Dekompilierer zu schaffen, der direkt
auf den Maschinencode einwirken kann, um das ursprüngliche
Leiterdiagramm zu gewinnen, und zwar ohne
Quellencodetokens.
Der nach der Erfindung geschaffene Dekompilierer
folgt einem Satz vordefinierter Regeln zum Auslesen der
Anwenderprogrammbefehle, die im Speicher der Steuerung
gespeichert sind, und um Konstruieren einer Zwischenverbindungsmatrix,
deren Spalten Kontaktnummern oder
Kontaktzahlen darstellen und deren Reihen Knoten darstellen,
bei denen Kontakte miteinander verbunden sind.
In dieser Zwischenverbindungsmatrix gespeicherte
Daten können verwendet werden, um die graphische
Struktur des Quellenleiterdiagramms zu reproduzieren,
oder diese Daten können zerlegt oder analysiert werden,
um eine maschinenlesbare Darstellung des ursprünglichen
Leiterdiagramms zu gewinnen, das dann
editiert werden kann.
Ein wesentlicher technischer Vorteil der Erfindung
besteht darin, daß die in der Steuerung erforderliche
Speicherkapazität geringer ist. Die Möglichkeit,
ein Leiterdiagramm unmittelbar aus dem Maschinencode
wiederzugewinnen, ohne daß dafür Quellencodetokens
gespeichert werden müssen, führt in der Steuerung zu
einer Verminderung des Speicherumfangs, der zum Ablegen
des kompilierten Steuerungsprogramms erforderlich ist.
Der Dekompilierer arbeitet direkt auf eine Maschinencodeimplementierung
oder Maschinencodeausführung des
Leiterlogikprogramms, worin Kontakte nur durch bedingte
Verzweigungs- oder Sprunganweisungen dargestellt
sind, deren Ziele andere Verzweigungs- oder Sprunganweisungen
oder die SPULE-EIN- und SPULE-AUS-Routinen
sind.
Die Erfindung gestattet ein einfaches und leichtes
Editieren eines gesteuerten Maschinencodeprogramms,
und zwar ohne Rückgriff auf Kopien des ursprünglichen
Quellenleiterlogikprogramms. Das Editieren erfordert
es, daß das Programm als I-Code existiert, eine editorlesbare
Version des graphischen Leiterdiagramms. Die
vom Dekompilierer erzeugte Zwischenverbindungsmatrix
kann durch Anwenden einer Reihe von Matrixvereinfachungsregeln
in den I-Code zerlegt werden, wobei Parallel-
und Serienkontakte innerhalb der Matrix vereinigt werden,
während eine I-Codestrangdarstellung der Leiterkontakte
tabulliert wird. Die Fähigkeit, den Objektmaschinencode
in den I-Code zu dekompilieren, beseitigt
die Notwendigkeit des Aufbewahrens einer editierbaren
Kopie des Quellenleiterlogikprogramms.
Die Erfindung gestattet die Dekompilierung von
Leiterlogikprogrammen aus dem kompilierten Maschinencode
in einer Form, die vollständig verschiebbar ist.
Der Dekompilierer arbeitet mit einem Reihensprungformat-Maschinencode,
der in erster Linie aus bedingten
Sprungbefehlen besteht. Solche Befehle verwenden relative
Adressierung und sind leicht verschieblich innerhalb
des Speichers der Steuerung.
Nach der Erfindung ist auch eine schnelle Kompilierung
und Dekompilierung der Leiterlogikprogramme möglich.
Der Reihensprungformat-Maschinencode, der vom
Kompilierer erzeugt wird, wird in einer Weise kompiliert,
die Vorwärtsreferenzen vermeidet und kann daher in
einem einzigen Durchgang kompiliert werden.
Ein bevorzugtes Ausführungsbeispiel der Erfindung
wird im folgenden an Hand von Zeichnungen beschrieben.
Es zeigt
Fig. 1 eine perspektivische Ansicht einer
Industriesteuerung, in der die Erfindung realisiert ist,
Fig. 2 ein schematisches Blockschaltbild von
Baueinheiten der in Fig. 1 dargestellten Industriesteuerung,
Fig. 3 ein schematisches Blockschaltbild eines
in Fig. 2 dargestellten Prozessormoduls,
Fig. 4 ein allgemeines Flußdiagramm zur Erläuterung
der Umformung eines Leiterlogiksteuerprogramms
in einen Reihensprungformat-Maschinencode,
Fig. 5 entfällt,
Fig. 6 ein detailliertes Flußdiagramm zum
Aufzeigen der Kompilierung des I-Code in den Reihensprungformat-Maschinencode,
wie es in Fig. 4
angedeutet ist,
Fig. 7 ein Flußdiagramm einer Nachfolgekontaktroutine,
die von dem in Fig. 6 veranschaulichten
Kompiliererprogramm verwendet wird,
Fig. 8 ein Flußdiagramm einer den nächsten
offenen Kontakt betreffenden Routine, die von dem
in Fig. 6 veranschaulichten Kompilierprogramm verwendet
wird,
Fig. 9 ein detailliertes Flußdiagramm zum
Aufzeigen der Dekompilierung des Reihensprungformat-Maschinencode
in den I-Code, wie in Fig. 4 angedeutet,
Fig. 10 ein Flußdiagramm der Zielnumerierungsroutine,
die von dem in Fig. 9 veranschaulichten
Dekompilierprogramm verwendet wird,
Fig. 11 ein Flußdiagramm der Matrixvereinfachungsroutine,
die von dem in Fig. 9 veranschaulichten
Dekompilierprogramm verwendet wird,
Fig. 12 (a) ein Beispiel eines Leiterlogikdiagramms
vor der Umformung nach Fig. 4,
Fig. 12 (b) eine ASCII-Strangdarstellung des
I-Code, der erzeugt wird mittels des Leiterlogikdiagramms
nach Fig. 12 (a),
Fig. 12 (c) eine vereinfachte Darstellung
des Reihensprungformat-Maschinencode, der vom
Kompilierer aus dem I-Code von Fig. 12 (b) erzeugt
wird,
Fig. 13 eine Veranschaulichung einer schrittweisen
Dekompilierung des Maschinencode, der in
Fig. 12 (c) gezeigt ist,
Fig. 14 eine Veranschaulichung einer Matrixvereinfachungsroutine,
die von der Dekompilierungsroutine
verwendet wird,
Fig. 15 (a) bis (c) eine Veranschaulichung
der Verwendung einer Zwischenverbindungsmatrix zur
Rekonstruktion des graphischen Leiterlogikdiagramms.
Die Leiterlogikprogrammierung (ladder logic programming)
kann man auch mit Stromlauflogik- oder Kontaktlogikprogrammierung
bezeichnen. Zunächst soll auf Fig. 4
Bezug genommen werden. Der Anwender entwickelt eine
I-Codedarstellung seines Leiterlogikprogramms 50 unter
Verwendung eines Tastenfeldes 52, wie es durch Pfeile
51 und 57 dargestellt ist. Ein Leiterlogikdiagramm
(ladder logic diagram) 59, das man auch mit Stromlauflogikplan
oder Kontaktlogikplan bezeichnen kann, ist
auf einem Sichtschirm 58 dargestellt, so daß der Bediener
die Genauigkeit seiner Arbeit überprüfen und das Diagramm
bzw. den Plan editieren kann, um ihn in Übereinstimmung
mit dem gewünschten Leiterlogikprogramm 50 zu bringen.
Das Tastenfeld 52 und der Schirm 58 sind Teile eines
Programmierterminals 21, wie es beispielsweise aus der
US-PS 45 27 20 bekannt ist.
Unter Verwendung des Programmierterminals 21 wird
der eingegebene I-Code 54 in den Maschinencode kompiliert
und in die Industriesteuerung 10 geladen, wie es durch
einen Pfeil 56 angedeutet ist. Das Terminal 21 wird dann
abgetrennt, und der in der Industriesteuerung 10 gespeicherte
Maschinencode betreibt die Industriesteuerung 10
gemäß dem gespeicherten Leiterlogikprogramm. Das in
der Steuerung 10 gespeicherte Leiterlogikprogramm enthält
Befehle, die vom Prozessor der Steuerung direkt ausführbar
sind, die aber nicht direkt in ein Leiterlogikdiagramm
59 übersetzbar sind. Immer wenn der Anwender
dieses in der Industriesteuerung 10 gespeicherte Steuerprogramm
editieren möchte, wird dies nach der Erfindung
dadurch erreicht, daß das Programmierterminal 21
wieder angeschlossen wird und die Maschinencodeform des
Anwenderprogramms entladen wird und der in der Steuerung
10 gespeicherte Maschinencode de- oder entkompiliert wird,
um den I-Code 54 wiederzugewinnen. Dieser in Fig. 4
durch einen Pfeil 55 angedeutete Vorgang wird im
Programmierterminal 21 ausgeführt. Der Anwender kann
dann das Leiterlogikprogramm, wie es auf dem Schirm 58
als Leiterdiagramm 59 dargestellt ist, mit Hilfe des
Tastenfeldes 52 editieren. Das Leiterdiagramm kann auch
Stromlaufplan oder Kontaktplan genannt werden.
Das Leiterlogikprogramm 50 wird vom Anwender unter
Beachtung der Anforderungen der zu steuernden Anlage
oder des zu steuernden Prozesses erzeugt und in einer
Leiterlogikdiagrammform geschrieben, die einem Steuerungs-
und Regelungstechniker auch in Form eines Stromlaufplans
oder Kontaktplans wohlbekannt ist. In
Fig. 12 (a) ist ein Beispiel einer Sprosse eines Leiterdiagramms
dargestellt, wie es als Teil eines Leiterlogikprogramms
erzeugt werden kann. Eine solche Leitersprosse
kann man auch unter Bezugnahme auf die Bezeichnungen
Stromlaufplan und Kontaktplan als Strompfad oder
Querverbindung bezeichnen. Per Übereinkunft sind auf
den beiden einander gegenüberliegenden Seiten des Leiterdiagramms
senkrechte Stromschienen 100 und 106 vorgesehen.
Zwischen den Stromschienen 100 und 106 bildet
der Bediener die horizontalen Strompfade oder Sprossen
des Leiterdiagramms aus. Jede Leitersprosse enthält
eine Reihe normalerweise geöffneter Kontakte oder
Schließer 102, normalerweise geschlossener Kontakte oder
Öffner 108 und eine Relaisspule 104, die in Reihe miteinander
oder parallel zueinander mit Hilfe von Verzweigungsanfängen
110 und Verzweigungsenden 112 geschaltet
sein können. Jeder Kontakt 102 oder 108 stellt einen zu
überprüfenden Eingang oder einen zu überprüfenden internen
Zustand dar, und die Spule 104 stellt ein Stell-
oder Betätigungsglied dar, das für diesen Teil des
Leiterlogikprogramms zu aktivieren ist. Sind beispielsweise
die von den Kontakten 102′ und 108′ dargestellten
Eingangsbedingungen derart, daß die Kontakte 102′ und
108′ geschlossen sind, dann wird die durch die Spule 104
dargestellte Betätigungsvorrichtung aktiviert. Gemäß
standardisierter Übereinkunft darf in dem Leiterdiagramm
der Strom lediglich von links nach rechts fließen.
Folglich kann man jeden Kontakt so betrachten, daß er
einen "Kopf"-Anschluß und einen "Schwanz"-Anschluß hat,
wobei der Strom vom Schwanz zum Kopf fließt.
Wie bereits an Hand von Fig. 4 erläutert, wird das
Leiterlogikprogramm 50 als I-Code in die Industriesteuerung
10 eingegeben, und zwar mittels des Tastenfeldes
52 des Programmierterminals 21. Der I-Code enthält
prinzipiell die nachfolgende ASCII-Befehlsmnemonik,
wobei jede mnemonische Bezeichnung ein I-Codesymbol darstellt:
XIC: Prüfe auf geschlossen (normalerweise geöffnet)
XIO: Prüfe auf geöffnet (normalerweise geschlossen)
SOR, EOR: Beginn einer Leitersprosse, Ende einer Leitersprosse
BST, BND: Verzweigungsbeginn, Verzweigungsende
LST, LND: Beginn einer Stufe, Ende einer Stufe
OTE: Ausgang freigegeben oder aktivieren
XIO: Prüfe auf geöffnet (normalerweise geschlossen)
SOR, EOR: Beginn einer Leitersprosse, Ende einer Leitersprosse
BST, BND: Verzweigungsbeginn, Verzweigungsende
LST, LND: Beginn einer Stufe, Ende einer Stufe
OTE: Ausgang freigegeben oder aktivieren
Zahlreiche zusätzliche Ausgangssymbole kann man ebenfalls
verwenden, beispielsweise Zeitglieder und Zählglieder.
Solche Ausgänge folgen für die Zwecke der folgenden Betrachtungen
den gleichen Regeln wie ein normaler Ausgang.
Jedes Symbol stellt ein graphisches Element des
Leiterdiagramms dar. Ein "SOR"-Symbol zeigt den Beginn
einer Leitersprosse an, und ein "EOR"-Symbol zeigt das
Ende einer Leitersprosse an. Ein Verzweigungsbeginn- "BST"-Symbol
zeigt irgendeinen Knoten an, der zwei oder mehr
Kontakte miteinander verbindet und bei dem die Schwänze
aller Kontakte mit Ausnahme eines Kontaktes mit dem Kopf
eines anderen Kontaktes verbunden sind oder mit der Stromschiene
100 verbunden sind. Umgekehrt zeigt ein Verzweigungsende-"BND"-Symbol
irgendeinen Knoten an, bei dem
zwei oder mehr Kontakte miteinander verbunden sind und
bei dem die Köpfe aller Kontakte mit Ausnahme eines Kontaktes
mit dem Schwanz eines anderen Kontaktes verbunden
sind oder mit der Ausgangsspule verbunden sind. Das "LST"-Symbol
zeigt den Beginn einer neuen Stufe von Kontakten
innerhalb einer Verzweigung an, und das "LND"-Symbol zeigt
das Ende einer solchen Stufe von Kontakten an.
Jeder Kontakt innerhalb des Leiterdiagramms ist im
I-Code mit einem "XIC"- oder "XIO"-Symbol bezeichnet, und
zwar in Abhängigkeit davon, ob der Kontakt ein Schließer
(normalerweise geöffnet) oder ein Öffner (normalerweise
geschlossen) ist. Jedes Kontaktsymbol enthält noch eine
nachfolgende ganze Zahl, die den jeweiligen Kontakt eindeutig
identifiziert. Das "OTE"-Symbol stellt eine Ausgangsspule
dar.
Der I-Code, der dem in Fig. 12 (a) dargestellten
Leiterlogikdiagramm äquivalent ist, ist in Fig. 12 (b) gezeigt.
Die besondere Reihenfolge oder Ordnung der Kontakte,
die bei der Erzeugung des I-Code hervorgebracht wird, wird
"Reihensprungordnung" ("series jump ordering") genannt
und kann kurz wie folgt beschrieben werden: Kontakte im
Leiterlogikdiagramm werden aufeinanderfolgend geordnet
und numeriert, wobei auf der Oberseite der Sprosse begonnen
wird und in Richtung von links nach rechts vorangeschritten
wird. Wird ein Verzweigungsende festgestellt,
wird mit der Numerierung bei den nicht numerierten Kontakten
am Beginn der nächsten Verzweigungsstufe fortgefahren.
Dieser Vorgang wird fortgeführt, bis alle Kontakte numeriert
sind.
Es wird nunmehr auch auf Fig. 1 und 2 Bezug genommen.
Eine darin gezeigte Industriesteuerung 10 enthält
zwei Gestelle oder Rahmen 12 und 13 mit separaten Netzteilen
14 bzw. 15. Jeder der Rahmen 12 und 13 weist eine
Reihe von Schlitzen auf, die verschiedenartige Funktionsmodule
16 und 17 aufnehmen können. Jedem der Rahmenschlitze
ist eine eindeutige Adresse zugeordnet, so daß
der von dem jeweiligen Schlitz aufgenommene Modul zweifelsfrei
identifiziert werden kann. Die beiden Rahmen 12
und 13 enthalten jeweils auch eine Rückebene 18 bzw. 18′
mit elektrischen Verbindern und elektrischen Leiterbussen,
über die die Funktionsmodule 16 und 17 miteinander verbunden
sind und über die die Energiezufuhr von den Netzteilen
14 und 16 zu den Modulen erfolgt. Die Rückebenen
18 und 18′ enthalten jeweils einen parallelen Adreßbus
32 bzw. 32′, einen parallelen Datenbus 33 bzw. 33′, einen
Satz Steuerleitungen 34 bzw. 34′ und einen parallelen
5-Bit-Schlitzadreßbus 35 bzw. 35′. Ein separater Verbinder
ist an der Rückebene für jeden Schlitz in einem Rahmen
vorgesehen, um diese Busse und Steuerleitungen mit einem
in den Schlitz eingesetzten Modul zu verbinden. Ein Mehrleiterkabel
20 verbindet die Rückebenen 18 und 18′ der
beiden Rahmen 12 und 13 miteinander in einer solchen Weise,
daß eine gemeinsame Systemrückebene 19 gebildet wird. Ein
weiteres Mehrleiterkabel 20′ erstreckt die Systemrückebene
vom zweiten Rahmen 13 zu weiteren Rahmen der industriellen
Steuerung, die nicht dargestellt sind. Die Rahmen
sind über die Kabel 20 und 20′ nach Art einer sogenannten
Gänseblümchen-Kette (daisy chain) miteinander verbunden.
Eine detaillierte Beschreibung einer Rückebene, wie sie
für die Zwecke der Erfindung geeignet ist, findet man in
der DE-OS 39 24 384.
Der erste Rahmen 12 enthält einen Prozessormodul 16,
der ein anwenderdefiniertes Leiterlogikprogramm ausführt,
das in einem Speicher des Moduls gespeichert ist, und
der auf diese Weise eine mit der Industriesteuerung
10 verbundene gesteuerte Einrichtung oder Anlage betreibt.
Ein Programmieranschlußgerät oder Programmierterminal 21
ist über ein Kabel 22 mit dem Prozessormodul 16 verbunden
und dient dazu, die Betriebsweise der industriellen Steuerung
zu überwachen und den Prozessormodul 16 zu programmieren.
Der Prozessormodul 16 ist mit den Rückebenebussen
32, 33 und 35 sowie mit den Steuerleitungen 34 verbunden.
Der erste Rahmen 12 enthält auch eine Reihe Eingabe/Ausgabe-Module
17, kurz E/A-Module genannt, die zwischen
dem Prozessor 16 einerseits und den Fühler- und Betätigungsvorrichtungen
der von der Steuerung 10 gesteuerten
Maschine andererseits ein elektrisches Interface oder
eine elektrische Schnittstelle bilden. Die Bezeichnung
E/A-Modul betrifft somit hier einen Modul, der die
Schnittstelle für externe Glieder, Geräte oder Vorrichtungen
an oder bei der gesteuerten Maschine bildet.
Solche E/A-Module können allein eine Eingangsfunktion,
allein eine Ausgangsfunktion oder sowohl eine Eingangs-
als auch Ausgangsfunktion haben. E/A-Module, die eine
Eingangsfunktion ausüben, verbinden den Prozessormodul 16
mit Sensor- oder Fühlvorrichtungen der gesteuerten Maschine,
wohingegen Ausgangsfunktionsmodule die Verbindung
zu Betätigungsgliedern oder Betätigungsvorrichtungen
der gesteuerten Maschine herstellen. Jeder der E/A-Module
kann ein Wechselstromeingangs- oder Wechselstromausgangsgerät
oder aber ein Gleichstromeingangs- oder Gleichstromausgangsgerät
sein oder eine Eingangs/Ausgangs-Schnittstelle
für analoge Geräte vorsehen, beispielsweise
für Resolver und Positionsanzeigegeräte. Eine typische
Industriesteuerung 10 enthält eine Auswahl der verschiedenartigen
E/A-Module.
Die verschiedenen Komponenten des Prozessormoduls 16,
die schematisch in Fig. 3 dargestellt sind, sind untereinander
über einen Satz aus drei internen Bussen verbunden:
ein Steuerbus 24 bestehend aus einer Anzahl einzelner
Steuerleitungen, die verschiedene Komponenten
miteinander verbinden, ein paralleler Datenbus 25 und
ein paralleler Adreßbus 26. Ein Mikroprozessor 28, bei
dem es sich beispielsweise um einen Mikroprozessor vom
Typ MCS-8051, hergestellt von der Intel Corporation,
Santa Clara, Californien, handeln kann, ist mit den drei
internen Bussen 24 bis 26 verbunden. Der Mikroprozessor
28 führt ein Betriebssystemprogramm aus, das in einem
Festwertspeicher (ROM) 29 gespeichert ist. Das Betriebssystemprogramm
steuert den Gesamtbetrieb der industriellen
Steuerung 10. Ferner führt der Mikroprozessor 28
ein anwenderdefiniertes Leiterlogikprogramm aus, das in
einem Direktzugriffsspeicher (RAM) 30 als maschinenausführbarer
Objektcode gespeichert ist. Ferner ist im
RAM 30 eine standardisierte Eingabe/Ausgabe-Datentabelle
gespeichert, die den Zustand der Fühler- und Betätigungsvorrichtungen
enthält. Der RAM 30 stellt auch Speicherplätze
für Zähler, Zeitgeber und Zwischenrechenwerte
bereit, die vom Mikroprozessor 28 bei der Ausführung der
Betriebs- und Leiterlogikprogramme verwendet werden. Ein
Adreßdecoder 31 spricht auf spezifische Adressen an, die
über den Moduladreßbus 26 gesendet werden, und zwar durch
Erzeugen von Steuersignalen am Bus 24, die es ermöglichen,
daß der Mikroprozessor Zugriff zu den Speichern 29 und 30
als auch zur Systemrückebene 19 erlangt.
Der Zugriff zu den Systemrückebenebussen 32 bis 35
entweder durch den Prozessormodul 16 oder einen anderen
Modul wird durch eine Interbussteuerschaltung 36 kontrolliert,
die an sich bekannte Schaltungen enthalten
kann, welche dazu dienen, die Buszugriffsarbitration
(schiedsrichterlichen Buszugriff) auszuführen. Als Antwort
auf das richtige Anforderungssignal gibt die
Interbussteuerschaltung 36 einen Satz oder eine Gruppe
bidirektionaler Datenpuffer 37 frei, um den internen
Datenbus 25 des Prozessormoduls 16 mit dem Rückebenedatenbus
33 zu verbinden. Ein Schlitzadreßlatch 39
kann von der Interbussteuerschaltung 36 freigegeben
werden, um ein 5-Bit-Datenwort in Parallelform vom
Prozessormoduldatenbus 25 an den Rückebeneschlitzadreßbus
35 zu legen.
Die Verbindungen zwischen den internen Bussen des
Prozessormoduls 16 und den Bussen der Rückebene 19
gestattet es, daß der Mikroprozessor 28 wahlweise Zugriff
zu irgendeinem der E/A-Module 17 in den Rahmen 12 und 13
erlangen kann.
Der I-Code 54, wie er in Fig. 4 dargestellt ist,
wird unter Bezugnahme auf die bisherige Erläuterung
nicht von der Industriesteuerung 10 ausgeführt, sondern
kompiliert, wie es durch den Pfeil 56 angedeutet ist.
Dieser Maschinencode ist im "Reihensprungformat"
("series jump format"). Im Reihensprungformat ist jeder
Kontakt durch einen einzigen Sprung- oder Verzweigungsbefehl
dargestellt. Dieser Befehl überprüft das Eingabe/Ausgabe-Eingangsbildtabellenbit,
das den Kontakt darstellt,
und springt entweder zu einem anderen kontaktüberprüfenden
Befehl oder einer spuleneinschaltenden
oder spulenausschaltenden Routine. In Fig. 12 (c) ist
die vereinfachte kompilierte Reihensprungformatform der
in Fig. 12 (a) gezeigten Leitersprosse veranschaulicht,
und zwar dargestellt in MCS-51-Maschinencodemnemonik.
Unter Bezugnahme auf standardisierte Programmierungsübereinkunft
ist die erste Spalte hinter den Zeilennummern
für Kennzeichen reserviert, die die Sprungziele bezeichnen.
Die nächste Spalte ist Mnemonik für den Maschinencodebefehl,
und zwar entweder JNB oder JB. JNB bedeutet
"Springe, wenn Bit ist nicht gesetzt" (jump if bit
not set), und JB bedeutet "Springe, wenn Bit ist gesetzt"
(jump if bit set). Die nächste Spalte enthält
die Operanden für den Befehl, wobei der erste Operand
das Bit in der Eingangsbildtabelle identifiziert, das
durch den Befehl JNB oder JB zu überprüfen ist, und
der zweite Operand die Kennung oder das Kennzeichen
des Sprungziels angibt. In der tatsächlichen Praxis
müssen die Bits zunächst von einem externen RAM wieder
gewonnen werden. Eine detaillierte Beschreibung des
Maschinencodebefehlssatzes für MCS-51 findet man in
einer Druckschrift der Firma Intel Corporation:
"Microcontroller User's Manual", Bestellnummer
210 359-001 (Mai 1982).
Der durch das Programmierterminal 21 ausgeführte
Kompilierer bearbeitet jede Leitersprosse im I-Code
nach Fig. 12 (b) zwecks Erzeugung des Maschinencodes des
in Fig. 12 (c) dargestellten Typs. Um nicht aufgelöste
Vorwärtsreferenzen zu vermeiden, arbeitet der Kompilierer
am I-Code von rechts nach links und erzeugt den
kompilierten Maschinencode vom letzten Befehl aus bis
hin zum ersten Befehl.
Fig. 6 zeigt das Kompilierhauptprogramm. Der erste
Schritt des Kompilierprozesses, der bei einem Prozeßblock
201 dargestellt ist, erzeugt die Maschinencodebefehle
zum Setzen und Rücksetzen des Ausgangsbildtabellebit,
das dem Einschalten oder Ausschalten der
Spule der Leitersprosse zugeordnet ist, wobei im kompilierten
Code die Kennzeichnung "EIN" bzw. "AUS"
verwendet wird. Diese beiden gekennzeichneten Schritte
bilden die letzten beiden Befehle des kompilierten
Code und werden nachfolgend "SPULE-EIN"-Routine und
"SPULE-AUS"-Routine genannt.
Der im Prozeßblock 200 dargestellte zweite Schritt
des Kompilierungsprozesses ist das Sortieren des I-Code,
um ein Nachfolgekontaktfeld (succeeding contact array)
oder Nachfolgekontaktanordnung A zu erzeugen. Der
Inhalt jedes Elements A(i) des Feldes oder der Anordnung
A enthält die Zahl des Kontaktes unmittelbar zur
Rechten des Kontaktes "i" im Leiterdiagramm des Leiterlogikprogramms
oder ein Symbol, das die Ausgangsspule
darstellt, wenn sich die Ausgangsspule unmittelbar zur
Rechten befindet. Bei dem in Fig. 12 (a) dargestellten
Leiterlogikprogramm wäre somit der Nachfolgekontakt für
den Kontakt "3" der Kontakt "5", und der Inhalt des
Elements A (3) des Feldes oder der Anordnung A wäre "5".
Der Nachfolgekontakt für den Kontakt "2" ist die Ausgangsspule,
und der Inhalt von A (2) wäre das Spulensymbol.
Eine Routine zum Erzeugen dieser Liste von Nachfolgekontakten
ist in Fig. 7 dargestellt und wird noch im
einzelnen erläutert.
Es wird weiter auf Fig. 6 Bezug genommen, aus der
hervorgeht, daß bei einem Prozeßblock 202 jedes Element
A(i) beginnend mit einem Kontakt n überprüft wird,
wobei n der Kontakt mit der höchsten Zahl oder Nummer
in der zu kompilierenden Leitersprosse ist. In Abhängigkeit
vom Wert des Nachfolgekontakts und vom I-Codekontaktsymbol,
das "I" zugeordnet ist, erzeugt der
Kompilierer entweder einen "Normalsprung"-Befehl oder
einen "Umkehrsprung"-Befehl. Ein "Normalsprung" ist
hier ein Maschinencode-JB-Befehl, wenn das "i" zugeordnete
Kontaktsymbol gleich "XIC" ist, und ein JNB-Befehl,
wenn das "i" zugeordnete Kontaktsymbol gleich
"XIO" ist. Demgemäß ist ein "Umkehrsprung" ein JNB-Befehl,
wenn das "i" zugeordnete Kontaktsymbol ein
"XIC"-Kontakt ist, und ein JB-Befehl, wenn das "i"
zugeordnete Kontaktsymbol gleich "XIO" ist.
Bei einem dargestellten Prozeßblock 204 wird speziell
überprüft, ob A(i) die Ausgangsspule als "Nachfolgekontakt"
enthält. Ist dies der Fall, gibt der
Kompilierer einen "Normalsprung"-Befehl zum "EIN"-Kennzeichen
oder zur "EIN"-Marke aus, d. h. zur SPULE-EIN-Routine.
Der erste kompilierte Befehl wird unmittelbar
vorausgehend den SPULE-EIN- und SPULE-AUS-Routinen
gespeichert.
Wenn beim Prozeßblock 204 festgestellt wird, daß
der Nachfolgekontakt A(i) nicht die Spule ist, wird
überprüft, ob der Nachfolgekontakt größer als der gegenwärtige
Kontakt "i" ist. Trifft dies zu, gibt der Kompilierer
einen "Umkehrsprung"-Befehl an den nächsten
"geöffneten" Kontakt "k" nach dem gegenwärtigen Kontakt
ab, und zwar unter Bezugnahme auf die Prozeßblöcke 210
und 214. Die Routine zum Identifizieren des nächsten
offenen oder geöffneten Kontakts "k" ist in Fig. 8
dargestellt und wird später noch beschrieben. Falls es
keinen nächsten Kontakt "k" gibt, dann gibt der Kompilierer
den Maschinencode für einen Umkehrsprung zur
SPULE-AUS-Routine aus.
Beim Prozeßblock 212 wird überprüft, ob der Nachfolgekontakt
A(i) um mehr als eins größer als der
gegenwärtige Kontakt i ist. Trifft dies zu, gibt der
Kompilierer einen Normalsprung zum Nachfolgekontakt A(i)
aus.
Mittels von Prozeßblöcken 218, 220 werden die
Schritte der Prozeßblöcke 204, 208 und 212 für jeden
Kontakt "i" des I-Code, in Umkehrreihenfolge wiederholt,
bis die gesamte I-Codesprosse kompiliert ist. Die Routine
zum Erzeugen der Anordnung von Nachfolgekontakten
A, wie sie in dem obigen Kompilierprogramm benutzt wird
und wie es in Fig. 7 dargestellt ist, beginnt durch
Setzen einer Zählervariablen auf -1 und Überprüfen des
I-Code vom Beginn an, wie es durch Prozeßblöcke 222,
224 und 226 gezeigt ist. Wie es in Prozeßblöcken 228
und 230 dargestellt ist, wird immer dann, wenn ein
LND-Symbol ("Stufenende") im I-Code festgestellt wird,
dieser Zähler gleich 0 gesetzt. Wird ein BST-Symbol
(Verzweigungsbeginn) festgestellt, wird der Zähler
um 1 inkrementiert, und zwar gemäß Prozeßblöcken
232 und 234. Wird ein BND-Symbol (Verzweigungsende)
festgestellt, wird der Zähler um 1 dekrementiert, und
zwar gemäß Prozeßblöcken 240 und 242.
Wie es im Block 240 dargestellt ist, wird, wenn ein
Kontakt festgestellt wird und der Zählwert kleiner als 0
ist, dieser Kontakt als der Nachfolgekontakt für "i" gewertet
und die Kontaktzahl oder Kontaktnummer in der Anordnung
A(i) gespeichert, gemäß dem Prozeßblock 242.
Ist der Nachfolgekontakt gemäß Prozeßblock 242 nicht
identifiziert worden, wird gemäß einem Prozeßblock 246
der Rest des I-Code überprüft. Wenn kein Nachfolgekontakt
für den Kontakt "i" identifiziert wird, dann empfängt
A(i) ein vorbestimmtes Symbol, das anzeigt, daß die
Spule der "Nachfolgekontakt" ist. Wenn entweder ein
Kontakt oder die Spule als ein Nachfolgekontakt für den
Kontakt "i" identifiziert wird, dann wird "i" gemäß den
Prozeßblöcken 224 und 250 inkrementiert, bis ein Nachfolgekontakt
A(i) für alle Kontakte in der Sprosse erhalten
wird.
In Fig. 8 ist die Routine zum Identifizieren des
nächsten geöffneten Kontaktes dargestellt, die auch in
dem oben beschriebenen Kompilierprogramm verwendet wird.
Bei Prozeßblöcken 250 und 252 wird der gegenwärtige Kontakt
"i" vom Kompilierprogramm empfangen, und ein Zähler
sowie eine Markierungs- oder Anzeigevariable werden
gleich 0 gesetzt. Zur Rechten dieses Kontaktes "i" wird
der I-Code überprüft, wie es durch einen Prozeßblock 254
veranschaulicht ist. Wird im I-Code ein BST-Symbol
(Verzweigungsbeginn) festgestellt, wird der Zähler um 1
inkrementiert, und zwar gemäß Prozeßblöcken 256 und 258.
Wird ein BND-Symbol (Verzweigungsende) festgestellt,
wird der Zähler um 1 inkrementiert und die Anzeigervariable
wird zurückgesetzt, wie es Prozeßblöcke 260
und 262 zeigen. Wird ein LND-Symbol (Stufenende) festgestellt
und ist der Zähler gleich 0, wird die Markierung
oder der Anzeiger gesetzt, und zwar gemäß Prozeßblöcken
264 und 268.
Wird gemäß einem Prozeßblock 270 ein Kontakt festgestellt,
während der Anzeiger gesetzt ist, ist dieser
Kontakt der nächste offene Kontakt k. Wird bei einem
Prozeßblock 274 das Ende der Sprosse festgestellt, bevor
ein nächster offener Kontakt "k" identifiziert wird,
erhält "k" die Marke oder das Kennzeichen der SPULEN-AUS-Routine.
Das Format des kompilierten Code, der durch den
oben beschriebenen Kompilierungsprozeß erzeugt wird,
wird hier als Reihensprungformat-Maschinencode bezeichnet.
Der De- oder Entkompilierer der Erfindung wird
durch das Programmierterminal 21 ausgeführt, und zwar
mit dem Ziel, einen solchen Reihensprungformatcode in
ein Leiterlogikdiagramm oder in ein I-Codeformat umzuformen,
zwecks Editierung oder Überprüfung durch den
Anwender, wie es in Fig. 4 gezeigt ist. Die Entkompelierung
wird vorgenommen ohne die Verwendung von Zusatzquellencodetokens,
die im Maschinencode eingebettet
sind.
Es wird nunmehr auch auf Fig. 9 Bezug genommen. Der
erste Schritt des De- oder Entkompilierers besteht entsprechend
der Darstellung in einem Prozeßblock 280 darin,
dem ersten Operanden jeder Sprunganweisung eine Indexzahl
"i" zuzuordnen. Wie bereits oben erwähnt stellt dieser
erste Operand die Eingangsbildadresse eines besonderen Eingangskontakts
dar, so daß man den Index "i" als Eingangskontaktnummer
oder Eingangskontaktzahl betrachten kann.
Aus Gründen der Bequemlichkeit wird die Indexzahl "i" auch
dafür verwendet, um auf die besondere Sprunganweisung hinzuweisen,
die diesen Operanden umgibt. Bei einem Prozeßblock
282 wird ein Feld (array) oder eine Anordnung T(i)
erzeugt, wobei T(i) das Target oder Ziel der Sprunganweisung
darstellt, die dem Operanden i zugeordnet ist. Das
Ziel kann sein entweder eine andere Sprunganweisung, die
durch ihren Operanden "i" identifiziert ist, oder die
SPRUNG-EIN-Routine, die als ein Sprung zum "EIN"-Kennzeichen
identifiziert ist, oder die SPRUNG-AUS-Routine, die als ein
Sprung zum "AUS"-Kennzeichen identifiziert ist. Bei einem
Prozeßblock 282 wird ein zweites Feld (array) oder eine
zweite Anordnung B(i) gebildet, wobei B(i) entweder den
Strang "XIO" enthält, wenn die dem Operanden "i" zugeordnete
Sprunganweisung ein JNB-Befehl ist, oder den
Strang "XIC" enthält, wenn die dem Operanden "i" zugeordnete
Sprunganweisung ein JB-Befehl ist. Die Werte B(i)
können verkippt (toggled) sein: eine solche Verkippung
formt ein XIO in ein XIC um und umgekehrt.
Beim Prozeßblock 286 wird eine auf Null gestellte
Zwischenverbindungsmatrix M erzeugt, deren Zeilen gleich
der Maximalanzahl von Kontakten ist, die an einer Sprosse
zulässig sind, und die n Spalten hat, wobei n der Maximalwert
von "i" ist, d. h. die Anzahl von Sprungbefehlen oder
Kontakten in der zu de- oder entkompilierenden Sprosse.
Beginnend bei einem Prozeßblock 290 mit dem Sprungbefehl n
wird eine Matrixindexvariable a gleich 1 gesetzt. Bei
einem Prozeßblock 292 wird T(i) überprüft, um zu sehen,
ob das Sprungziel ein Sprung zur SPULE-EIN-Routine ist.
Trifft dies zu, wird M(1,i), wobei 1 die Zeile und "i"
die Spalte der Zwischenverbindungsmatrix M ist, mit
einem "+1"-Anschlußanzeiger geladen. Bei einem Prozeßblock
296 wird T(i) überprüft, um zu sehen, ob das
Sprungziel auf die SPULE-AUS-Routine gerichtet ist.
Trifft dies zu, wird die Matrixindexvariable a um 1
inkrementiert und B(i) wird verkippt bzw. umgeschaltet
und für jede Spalte x von M mit einer Spaltenzahl
größer als "i" und enthaltend keine "-1"-Anschlußanzeiger
wird M(A,x) geladen mit einem "-1"-Anschlußanzeiger
gemäß einem Prozeßblock 298.
Bei einem Prozeßblock 502 wird T(i) überprüft, um zu
sehen, ob das Sprungziel eine andere Sprunganweisung ist.
Trifft dies zu, ruft der Dekompilierer die Nummerzielroutine
(number target routine) oder Zielnumerierroutine auf,
wie es in Fig. 10 gezeigt ist.
Es wird jetzt auch auf Fig. 10 Bezug genommen. Der
erste Schritt der Nummerzielroutine ist bei einem Prozeßblock
310 gezeigt. Danach wird die Spalte T(i) der
Matrix M überprüft, um zu sehen, ob sie einen "-1"-Anschlußanzeiger
enthält. Trifft dies zu, wird bei einem Prozeßblock
312 ein "+1"-Anschlußanzeiger in einen Matrixplatz
M(x,i) plaziert, wobei x die Zeile ist, die den "-1"-Anschlußanzeiger
in der Matrixspalte T(i) enthält.
Wenn die Spalte T(i) der Matrix M einen "-1"-Anschlußanzeiger
nicht enthält, wird die Matrixindexvariable a
um 1 inkrementiert, B(i) wird verkippt bzw. umgeschaltet,
und der Matrixplatz M(a,i) wird mit einem "+1"-Anschlußanzeiger
geladen. Es wird auch jede Spalte der Matrix mit
x größer als Spalte "i" und kleiner als Spalte T(i), die
nicht einen "-1"-Anzeiger enthält, mit einem "-1"-Anschlußanzeiger
geladen. Die Routine kehrt dann zu dem in Fig. 9
gezeigten De- oder Entkompilierprogramm zurück.
Bei einem Prozeßblock 305 überprüft das Entkompilierprogramm,
ob alle Sprunganweisungen "i" ausgeführt worden
sind. Falls dies nicht der Fall ist, kehrt das Programm
zu der nächsten vorangegangenen Sprunganweisung zurück,
wie dies in einem Block 307 dargestellt ist, und bildet
eine Schleife, bis alle Sprungbefehle durch die obigen
Schritte verarbeitet worden sind. Falls beim Prozeßblock
305 alle Sprunganweisungen verarbeitet worden sind,
wird die Matrixindexvariable a um 1 inkrementiert, und
ein "-1"-Anschlußanzeiger wird in jede Spalte der Matrix M
gegeben, die keinen "-1"-Anschlußanzeiger enthält.
Die Zwischenverbindungsmatrix M enthält jetzt eine
Darstellung des wiederzugewinnenden Leiterlogikdiagramms.
Jede Spaltenzahl stellt einen Kontakt dar, und
jede Reihen- oder Zeilenzahl stellt einen Knoten dar,
bei dem Kontakte miteinander verbunden sein können. Ein
"+1"-Anschlußanzeiger in einem Matrixelement zeigt einen
"stromaufwärts" gelegenen Anschluß eines Kontakts und
eine Verbindung zwischen diesem Anschluß und irgendeinem
anderen Kontakt mit einem "-1"-Anschlußanzeiger oder einem
"+1"-Anschlußanzeiger in dieser Zeile oder Reihe an. Ein
"-1"-Anschlußanzeiger in einem Matrixelement zeigt einen
"stromabwärts" gelegenen Anschluß eines Kontakts und eine
Verbindung zwischen diesem Anschluß und irgendeinem anderen
Kontakt mit einem "-1"-Anschlußanzeiger oder einem "+1"-Anschlußanzeiger
in dieser Zeile oder Reihe an. Eine
graphische Rekonstruktion des Leiterlogikdiagramms kann
man dadurch schnell ausführen, daß die Kontakte in der
angegebenen Weise miteinander verbunden werden. Die
Zwischenverbindungsmatrix M kann auch durch zwei Vektoren
dargestellt werden, deren Länge gleich der Maximalanzahl
von Kontakten in einer Sprosse mit der Kontaktanzahl
entsprechenden Elementen ist. Die Elemente des ersten
Vektors enthalten die Reihennummer oder Reihenzahl der
"+1"-Anzeiger der Kontakte. Der zweite Vektor enthält die
Reihennummer oder Reihenzahl der "-1"-Anzeiger der Kontakte.
Zum Erzeugen des de- oder entkompilierten I-Code
zusätzlich zu dem Leiterdiagramm, ruft der Entkompilierer
eine in Fig. 1 dargestellte Matrixvereinfachungsroutine
auf.
Der erste Schritt der Matrixvereinfachungsroutine
ist es, eine Stranganordnung I mit den in B(i) gespeicherten
Kontaktidentifiziersträngen zu initialisieren,
d. h. XIC und XIO. Dies geschieht bei einem Prozeßblock
320. Bei einem Prozeßblock 318 wird die Zwischenverbindungsmatrix
M auf benachbarte übereinstimmende Spalten
überprüft. Wird eine Übereinstimmung festgestellt, werden
bei einem Prozeßblock 321 die Reihen oder Zeilen überprüft,
die "+1"- und "-1"-Anzeiger enthalten. Wenn kein
weiteres "+1"-Element in der Zeile gefunden wird, die die
"+1"-Elemente enthält, oder wenn kein weiteres "-1"-Element
in der Reihe oder Zeile des "-1"-Elements vorhanden ist,
werden die Stränge BST und LST ("Verzweigungsbeginn" und
"Stufenbeginn") in der Anordnung I vor den Kontaktidentifiziersträngen
für die ersten übereinstimmenden Spalten
eingesetzt, die Stränge LND und LST ("Stufenende" und
"Stufenbeginn") werden in der Anordnung I zwischen den
Kontaktidentifizierern für die ersten und zweiten übereinstimmenden
Spalten eingesetzt, und die Stränge LND
und BND ("Stufenende" und "Verzweigungsende") werden
in die Anordnung I nach dem zweiten übereinstimmenden
Strang eingesetzt. Wenn gemäß dem Prozeßblock 321 sowohl
ein zusätzliches "+1"- und "-1"-Element in den entsprechenden
Zeilen der übereinstimmenden Spalten auftritt,
werden ein LND und LST zwischen die Kontaktidentifizierer
für diese Spalten eingesetzt (BST, LST und LND,
BND werden später eingegeben, wenn die vereinigte Spalte
mit anderen Spalten vereinigt ist). Eine der beiden Spalten
wird dann eliminiert, wobei die Matrix um eine Spalte
gemäß einem Prozeßblock 328 vermindert wird.
Bei einem Prozeßblock 326 wird die Matrix M auf
Zeilen überprüft, die nur einen einzigen benachbarten
"-1"-Anschlußanzeiger und "+1"-Anzeiger enthalten. Wird
eine solche Zeile gefunden, werden die beiden Spalten
verkettet, wobei wiederum die Gesamtanzahl der Spalten
in der Matrix M um eine Spalte reduziert wird. Zur Anordnung
I werden keine Zusätze gemacht.
Mit diesen beiden Prozessen wird fortgefahren, bis
nur noch eine einzige Matrixspalte übrig bleibt, wie
es bei einem Prozeßblock 334 festgestellt wird. Die
Anordnung I enthält jetzt den de- oder entkompilierten
I-Code. Sofern boolesche Logik- oder Verknüpfungsgleichungen
erwünscht sind, erfolgt die obige Umsetzung in
ähnlicher Weise, ausgenommen daß BST LST ersetzt ist
durch "(", LND LST ist ersetzt durch ein "+" (logisches
ODER), und LND BND ist ein")". Die resultierende
Gleichung ist ein boolescher Ausdruck mit der implizierten
Multiplikation zwischen Termen, die eine "UND"-Funktion
darstellen, und dem Zusatz von Termen, die
eine "ODER"-Funktion darstellen.
Fig. 13 (a) zeigt den ersten Schritt zur De- oder
Entkompilierung des Maschinencode nach Fig. 12 (c). Die
Zwischenverbindungsmatrix M 400 wird gebildet, wie es
beim Prozeßblock 286 des Entkompilierers gezeigt ist,
und enthält fünf Spalten entsprechend den fünf Kontakten
des Leiterdiagramms nach Fig. 12 (a). Die Zwischenverbindungsmatrix
M kann eine spezifizierte Maximalanzahl von
Zeilen enthalten, die gleich der Maximalanzahl der Kontakte
pro Sprosse ist. Bei dem bevorzugten Ausführungsbeispiel
ist allerdings anfangs gemäß Fig. 13 (a) nur eine Zeile
dargestellt. Eine Stranganordnung 402, in der Symbole
entsprechend den Werten von B(i), wie oben bestimmt,
dargestellt sind, wird ebenfalls erzeugt gemäß dem Prozeßblock
284 des Entkompilierers.
Bei der Entkompilierung von Schritt 5 des Maschinencodes,
wie in Fig. 12 (c) gezeigt, wo ein Sprung zur
"SPULE-EIN"-Routine dargestellt ist, wird ein "+1"-Anschlußanzeiger
in der ersten Zeile und fünften Spalte der
Matrix M gemäß der Matrix nach Fig. 13 (b) gesetzt. Dies
spiegelt wieder die Prozeßblöcke 292 und 284 des Entkompilierungsprogramms.
Fig. 13 (c) kann man entnehmen, daß ein "+1"-Anschlußanzeiger
in der vierten Spalte und ein "-1"-Anschlußanzeiger
in der fünften Spalte der zweiten Reihe der Matrix M
gemäß den Prozeßblöcken 296 und 298 des Entkompilierers
plaziert wird. Diese Aktionen erfolgen als Antwort auf
den vierten Maschinensprachenbefehl, der in Fig. 12 (c)
gezeigt ist und einen Sprung zur "SPULE-AUS"-Routine
darstellt. Es sei bemerkt, daß das vierte Symbol im
Strang I "verkippt" ("toggled") bzw. umgeschaltet worden
ist, und zwar von dem Symbol für einen geschlossenen
Kontakt zu dem Symbol für einen geöffneten Kontakt.
Fig. 13 (d) zeigt die Ergebnisse der Entkompilierung
des dritten Maschinensprachenbefehls, der einen Sprung
zum fünften Maschinensprachenbefehl darstellt. Gemäß dem
Prozeßblock 302 und der in Fig. 10 dargestellten Zahl-
oder Nummernzielroutine wird ein "+1"-Anschlußanzeiger in
die Zeile 2 Spalte 3 der Matrix M eingesetzt, wodurch
dem Umstand Rechnung getragen wird, daß die Spalte 5,
d. h. die Spalte, die dem Ziel des Sprungs entspricht,
bereits einen "-1"-Anschlußanzeiger enthält, wie es im
Prozeßblock 310 erfaßt wird.
Der zweite Maschinensprachenbefehl ruft nach einem
Sprung zur "EIN"-Routine, und daher erhält Zeile 1
Spalte 2 der Matrix M einen "+1"-Anschlußanzeiger gemäß
dem Prozeßblock 292 und 294, wie es in Fig. 13 (e) dargestellt
ist.
Aufgrund des ersten Maschinensprachenbefehls, der
einen Sprung zur "AUS"-Routine darstellt, erhält, wie
es in Fig. 13 (f) dargestellt ist, Zeile 3 Spalte 1 der
Matrix M einen "+1"-Anschlußanzeiger und Zeile 3 Spalte 2
bis Spalte 4 einen "-1"-Anschlußanzeiger. Spalte 5, die
bereits einen "-1"-Anschlußanzeiger enthält, bekommt
keinen "-1"-Anschlußanzeiger gemäß dem Prozeßblock 298.
Es wird wiederum darauf aufmerksam gemacht, daß der Sinn
des ersten Symbols in der Stranganordnung I umgeschaltet
oder verändert worden ist, und zwar von einem Symbol,
das einen normalerweise offenen Kontakt (Schließer)
darstellt, in ein Symbol, das einen normalerweise geschlossenen
Kontakt (Öffner) darstellt.
Nachdem alle Sprunganweisungen entkompiliert worden
sind, wird gemäß den Prozeßblöcken 305 und 306 eine
neue Zeile in der Matrix M erzeugt, und alle Spalten,
in denen sich noch kein "-1"-Anschlußanzeiger befindet,
erhalten einen "-1"-Anschlußanzeiger, wie es in Fig. 13 (g)
dargestellt ist. Die Matrix M ist jetzt vollendet, und
es wird die Matrixvereinfachungsroutine aufgerufen, wie
sie in Fig. 11 dargestellt ist.
Es wird jetzt auch auf Fig. 15 (a) bis (c) Bezug genommen.
Es ist darin eine direkte Rekonstruktion des
Leiterlogikdiagramms dargestellt. In Fig. 15 (a) ist die
vervollständigte Zwischenverbindungsmatrix M gezeigt,
allerdings im Gegenuhrzeigersinn um 90°C gedreht. Fig. 15 (b)
zeigt Kontakte, die gemäß ihren Anschlußpositionen, wie
sie durch die "+1"-Anschlußanzeiger und "-1"-Anschlußanzeiger
in der Zwischenverbindungsmatrix angegeben sind, dieser
Zwischenverbindungsmatrix überlagert sind. Fig. 15 (c)
zeigt das resultierende Leiterlogikdiagramm, wobei die
Kontakte per Übereinkunft zu der höchsten leeren Position
verschoben sind und die Ausgangsspule sowie die Stromschienen
hinzugefügt sind.
Der I-Code kann aus der Zwischenverbindungsmatrix
mittels der Matrixvereinfachungsroutine extrahiert werden.
Die Matrixvereinfachungsroutine wendet zwei Regeln
an, eine Regel zur Vereinfachung paralleler Kontakte
und eine Regel zur Vereinfachung serieller Kontakte.
Die erste Matrixvereinfachungsregel, die durch die
Prozeßblöcke 318, 322, 324 und 328 dargestellt ist, wird
angewendet auf die Spalten 3 und 4, wie es in Fig. 14 (a)
gezeigt ist. Diese beiden Spalten sind einander identisch
und können daher als parallele Kontakte miteinander
vereinigt werden. Das Ergebnis einer solchen Kombination
oder Vereinigung ist in Fig. 14 (b) dargestellt, in der
die Strangsymbole in I eingesetzte Verzweigungs- und
Stufen-Skizzierungen enthalten.
Die Matrix nach Fig. 14 (b) ist so markiert, daß
die neue vereinigte oder kombinierte Spalte "(3 + 4)" und
die Spalte 5 identifiziert werden, die jetzt zusammen in
Form von Reihenkontakten gemäß den Regeln nach den
Prozeßblöcken 326, 332 und 330 vereinfacht werden können.
Als Ergebnis dieser Vereinfachung sind diese Spalten zu
einer Spalte "(3 + 4) · 5" vereinigt, wie es aus Fig. 14 (c)
hervorgeht. Skizzierungen sind der Stranganordnung I
nicht hinzugefügt.
Fig. 14 (c) identifiziert die neue Spalte "(3 + 4) · 5"
und auch die Spalte 2 als Spalten, die als Parallelkontakte
vereinfacht werden können, und zwar gemäß den Prozeßblöcken
318, 322, 324 und 328, wie es oben beschrieben
ist. Das Ergebnis dieser Vereinfachung ist in Fig. 14 (d)
gezeigt. Die beiden letzten Spalten, die in Fig. 14 (d)
dargestellt sind, können gemäß den Prozeßblöcken 326,
332 und 330 zu Reihenkontakten kombiniert werden, wobei
die Stranganordnung I erzeugt wird, die in Fig. 14 (e)
dargestellt ist und die den entkompilierten I-Code zeigt.
Das oben beschriebene bevorzugte Ausführungsbeispiel
kann in mannigfacher Weise abgewandelt und modifiziert
werden, ohne daß dabei der Schutzumfang verlassen
wird. So können beispielsweise zusätzliche Ausgangs-
oder Ausgabegeräte, wie Zähler und Zeitgeber,
leicht dadurch in den Entkompilierungsprozeß eingezogen
werden, daß Zeitgeber- oder Zähler-EIN- und -AUS-Routinen
an die Stelle der SPULE-EIN- und SPULE-AUS-Routinen
treten. Ferner kann man andere Typen oder Arten von
Kontakten zusätzlich zu den beschriebenen Kontakten
XIO und XIC verwenden, beispielsweise andere Binärzustandskontakte,
die für eine besondere Beziehung, beispielsweise
"größer als", "gleich" oder "nicht gleich"
oder Kombinationen von diesen Beziehungen, zwei Zahlen
überprüfen.
Claims (2)
1. Verfahren zum Dekompilieren einer Reihensprungformat-Maschinencode-Implementierung
eines Leiterlogikprogramms
enthaltend eine Reihe von Sprunganweisungen, von denen
jede zum Überprüfen eines Kontaktzustands und zum
Springen zu einem Ziel dient, und enthaltend eine
SPULE-EIN- sowie eine SPULE-AUS-Routine, in ein Leiterlogikprogramm,
das miteinander verbundene Kontakte,
von denen jeder einen Kopfanschluß und einen Schwanzanschluß
aufweist, und eine Ausgangsspule enthält,
welches Verfahren die nachfolgenden Schritte enthält:
- a) Zuordnen einer Indexnummer zu jeder Sprunganweisung gemäß ihrer Ordnung im Maschinencode,
- b) Bestimmen des Ziels für jede Sprunganweisung,
- c) Anwenden eines Satzes vorbestimmter Regeln auf jede Sprunganweisung, in Abhängigkeit von ihrem Ziel, zum Erzeugen einer Zwischenverbindungsmatrix mit Kontaktkopfanzeigerelementen und Kontaktschwanzanzeigerelementen, die in Spalten entsprechend den Kontaktnummern und in Zeilen entsprechend den Knoten von Kontaktzwischenverbindungen angeordnet sind,
- d) Identifizieren eines Kontaktkopfanschlusses und eines Kontaktschwanzanschlusses mit jedem Kontaktkopfanzeigerelement und Kontaktschwanzanzeigerelement innerhalb einer Spalte der Zwischenverbindungsmatrix,
- e) Verbinden von Kontaktanschlüssen mit Anzeigerelementen in einer Reihe mit anderen Kontaktanschlüssen mit Anzeigerelementen in dieser Reihe zum Erzeugen einer Darstellung eines Leiterdiagramms des Leiterlogikprogramms.
2. Verfahren zum Dekompilieren eines Reihensprungformat-Maschinencode
enthaltend eine Reihe von Sprunganweisungen,
von denen jede zum Überprüfen eines
Kontaktzustands und zum Springen zu einem Ziel dient,
und enthaltend eine SPULE-EIN- und SPULE-AUS-Routine,
in einen I-Code, der maschinenlesbare Symbole enthält,
welches Verfahren die folgenden Schritte enthält:
- a) Zuordnen einer Indexnummer zu jeder Sprunganweisung gemäß ihrer Ordnung im Maschinencode,
- b) Bestimmen des Ziels für jede Sprunganweisung,
- c) Anwenden eines Satzes vorbestimmter Regeln auf jede Sprunganweisung, in Abhängigkeit von ihrem Ziel, zum Erzeugen eines Kontaktkopfanzeigerelements oder eines Kontaktschwanzanzeigerelements,
- d) Speichern jedes Anzeigerelements in einer Zwischenverbindungsmatrix, in der die Spalten den Kontaktnummern und die Reihen den Knoten der Kontaktzwischenverbindungen entsprechen,
- e) Vereinigen von Spalten der Zwischenverbindungsmatrix durch Serien- und Parallelvereinfachungsregeln,
- f) Speichern von I-Codesymbolen in einem Speicher, welche so gespeicherten Symbole bezogen sind sowohl auf die Spalten der Zwischenverbindungsmatrix, die vereint werden, und auf die Vereinfachungsregel, die zur Vereinigung benutzt wird.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/333,196 | 1989-04-05 | ||
US07/333,196 US5005152A (en) | 1989-04-05 | 1989-04-05 | Industrial controller with decompilable user program |
Publications (2)
Publication Number | Publication Date |
---|---|
DE4010828A1 true DE4010828A1 (de) | 1990-10-11 |
DE4010828B4 DE4010828B4 (de) | 2006-02-02 |
Family
ID=23301747
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE4010828A Expired - Fee Related DE4010828B4 (de) | 1989-04-05 | 1990-04-04 | Verfahren zum Warten einer Industriesteuerung |
Country Status (3)
Country | Link |
---|---|
US (1) | US5005152A (de) |
JP (1) | JP2939288B2 (de) |
DE (1) | DE4010828B4 (de) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5225975A (en) * | 1988-04-04 | 1993-07-06 | Square D Company | Network programmable logic controller system with ladder editor and parallel and synchronous logic and I/O scanning |
US5177420A (en) * | 1989-05-01 | 1993-01-05 | Honda Giken Kogyo Kabushiki Kaisha | Method of and apparatus for generating control program |
US5373438A (en) * | 1989-07-18 | 1994-12-13 | Matsushita Electric Industrial Co., Ltd. | Sequence controlling method |
CA2066724C (en) * | 1989-09-01 | 2000-12-05 | Helge Knudsen | Operating system and data base |
CA2284245C (en) * | 1989-09-01 | 2001-02-06 | Amdahl Corporation | Operating system and data base having an access structure formed by a plurality of tables |
US5581759A (en) * | 1990-04-02 | 1996-12-03 | Hitachi, Ltd. | Apparatus and method for controlling a system process |
JP2530380B2 (ja) * | 1990-04-02 | 1996-09-04 | 株式会社日立製作所 | プロセス制御方法及び制御用コントロ―ラ |
US5210837A (en) * | 1990-06-15 | 1993-05-11 | Digital Equipment Corporation | Methods and apparatus for transforming machine language program control into high-level language constructs by manipulating graphical program representations |
JP2765423B2 (ja) * | 1992-01-23 | 1998-06-18 | 三菱電機株式会社 | プログラマブルコントローラ及びその制御方法 |
US5377315A (en) * | 1992-10-06 | 1994-12-27 | Leggett; Andrew G. | Regeneration of process control flow diagrams for programmable logic controllers |
US5586328A (en) * | 1994-10-21 | 1996-12-17 | Microsoft Corporation | Module dependency based incremental compiler and method |
US5781776A (en) * | 1995-11-01 | 1998-07-14 | Allen Bradley Company, Inc. | Industrial controller permitting program editing during program execution |
US5896289A (en) * | 1996-09-05 | 1999-04-20 | Allen-Bradley Company, Llc | Output weighted partitioning method for a control program in a highly distributed control system |
US5796603A (en) * | 1996-10-17 | 1998-08-18 | Allen Bradley Company, Inc. | Partitioning program for highly distributed control system to reduce network traffic |
US5844794A (en) * | 1996-10-18 | 1998-12-01 | Allen Bradley Company, Llc | Electronic data communications system having data consumer defining data transmission structure |
US6021357A (en) * | 1996-11-25 | 2000-02-01 | Eaton Corporation | Apparatus for solving ladder logic |
US5881290A (en) * | 1996-12-09 | 1999-03-09 | Allen-Bradley Company, Llc | Industrial controller decompiler accommodating an expandable instruction set |
US5819097A (en) * | 1996-12-09 | 1998-10-06 | Allen Bradley Company, Llc | Industrial controller compiler with expandable instruction set |
GB9921720D0 (en) * | 1999-09-14 | 1999-11-17 | Tao Group Ltd | Loading object-oriented computer programs |
GB2363215B (en) * | 1999-11-30 | 2004-01-21 | Sgs Thomson Microelectronics | Disassembling object code |
US20060190106A1 (en) * | 2001-07-30 | 2006-08-24 | Rockwell Automation Technologies, Inc. | Method for consistent storage of data in an industrial controller |
US7065415B2 (en) * | 2001-07-30 | 2006-06-20 | Rockwell Automation Technologies, Inc. | Method for consistent storage of data in an industrial controller |
US8407675B1 (en) | 2007-02-06 | 2013-03-26 | The United States Of America As Represented By The Secretary Of The Navy | Extraction of executable code and translation to alternate platform |
US20220012346A1 (en) * | 2013-09-13 | 2022-01-13 | Vmware, Inc. | Risk assessment for managed client devices |
US10095594B2 (en) * | 2016-05-31 | 2018-10-09 | Bristol, Inc. | Methods and apparatus to implement communications via a remote terminal unit |
US10360125B2 (en) | 2016-05-31 | 2019-07-23 | Bristol, Inc. | Methods and apparatus to communicatively couple field devices to a remote terminal unit |
JP6828700B2 (ja) * | 2018-01-19 | 2021-02-10 | 株式会社安川電機 | 電力変換システム、プログラミング支援装置、プログラミング支援方法、プログラム、及び記憶媒体 |
CN112379635B (zh) * | 2020-11-19 | 2022-03-04 | 航天新长征大道科技有限公司 | Plc梯形图解析方法、装置、电子设备及可读存储介质 |
CN114610288B (zh) * | 2022-05-12 | 2022-09-16 | 之江实验室 | 基于阵列式解析基元结构的后端编译器实现方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4722071A (en) * | 1985-04-19 | 1988-01-26 | Pertron Controls, Corporation | Compiler for evaluating Boolean expressions |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4326207A (en) * | 1977-11-18 | 1982-04-20 | Hitachi, Ltd. | Programmable sequence controller |
JPS6010644B2 (ja) * | 1978-09-13 | 1985-03-19 | 日産自動車株式会社 | シ−ケンス表示制御方法 |
JPS55135908A (en) * | 1979-04-11 | 1980-10-23 | Hitachi Ltd | Sequence program input device |
JPS56162103A (en) * | 1980-05-16 | 1981-12-12 | Toshiba Mach Co Ltd | Sequence control device |
JPS5760411A (en) * | 1980-09-29 | 1982-04-12 | Toyoda Mach Works Ltd | Status display device of sequence controller |
US4742443A (en) * | 1985-03-28 | 1988-05-03 | Allen-Bradley Company | Programmable controller with function chart interpreter |
US5287548A (en) * | 1988-02-29 | 1994-02-15 | Allen-Bradley Company, Inc. | Programmable controller having a stored program with both machine language instructions and source code data |
-
1989
- 1989-04-05 US US07/333,196 patent/US5005152A/en not_active Expired - Lifetime
-
1990
- 1990-03-02 JP JP2049691A patent/JP2939288B2/ja not_active Expired - Fee Related
- 1990-04-04 DE DE4010828A patent/DE4010828B4/de not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4722071A (en) * | 1985-04-19 | 1988-01-26 | Pertron Controls, Corporation | Compiler for evaluating Boolean expressions |
Also Published As
Publication number | Publication date |
---|---|
JP2939288B2 (ja) | 1999-08-25 |
JPH02287704A (ja) | 1990-11-27 |
DE4010828B4 (de) | 2006-02-02 |
US5005152A (en) | 1991-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE4010828B4 (de) | Verfahren zum Warten einer Industriesteuerung | |
DE3610433C2 (de) | Verfahren zum Steuern einer Maschine mit einer speicherprogrammierbaren Steuerung mit Funktionsplaninterpreter | |
DE1499200B2 (de) | Datenverarbeitungsanlage mit vorranggesteuerter programm unterbrechung | |
DE2723523A1 (de) | Kompression und dekompression von gespeicherten digitaldaten | |
DE2936915C2 (de) | Verfahren und Vorrichtung zur Steuerung eines Ein-Aus-Anzeige-Wählsignals in einer Anzeige- und Ablaufsteuerung | |
DE2015971A1 (de) | Datenverarbeitungssystem zur Verarbeitung eines Stromes mehrfacher Operanden | |
DE1474095B1 (de) | Programmgesteuerte Datenverarbeitungsanlage | |
DE2647574C2 (de) | Vorrichtung zum Verarbeiten von durch ein Anfangs- und Endzeichen begrenzten Datenfeldsegementen variabler Länge bei einem Umlaufspeicher | |
DE1499206B2 (de) | Rechenanlage | |
DE1925427A1 (de) | Datenuebertragungsvorrichtung zum UEbertragen von Daten zwischen Informationsspeichern | |
DE1266026B (de) | Verfahren und Anordnung zum Verhüten einer Änderung eines Speichermhaltes | |
DE2739525A1 (de) | Prozessor | |
DE60221515T2 (de) | Speichersystem für schleifenbeschleunigung nach wunsch | |
EP2126644B1 (de) | Verfahren zur umwandlung von kontaktplänen | |
DE2235883C3 (de) | Datenverarbeitungseinrichtung | |
EP1950635B1 (de) | Verfahren zum Betrieb eines Automatisierungssystems | |
DE1774421B1 (de) | Mehrprogramm datenverarbeitungsanlage | |
DE1296427B (de) | Datenbearbeitungssystem | |
DE1499284C3 (de) | Datenverarbeitungsanlage | |
DE1499286B2 (de) | Datenbearbeitungsanlage | |
DE1194605B (de) | Verbesserung an Geraeten zur Verarbeitung von Angaben, Informationen od. dgl. | |
DE2915113A1 (de) | Busvorrichtung fuer ein datenverarbeitendes system | |
DE1449567C3 (de) | Digitales Datenverarbeitungssystem | |
DE1549582B1 (de) | Anordnung zur bestimmung der niedrigstwertigen bit position | |
DE1424756B2 (de) | Schaltungsanordnung zum fehlergesicherten Einführen oder Wiedereinführer, von Programmen in den Hauptspeicher einer datenverarbeitenden Anlage |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8110 | Request for examination paragraph 44 | ||
8128 | New person/name/address of the agent |
Representative=s name: LIPPERT, H., DIPL.-ING., PAT.-ANW., 60322 FRANKFUR |
|
8128 | New person/name/address of the agent |
Representative=s name: JUNG HML, 80799 MUENCHEN |
|
8364 | No opposition during term of opposition | ||
8328 | Change in the person/name/address of the agent |
Representative=s name: HML, 80799 MUENCHEN |
|
8339 | Ceased/non-payment of the annual fee |