DE112018000198T5 - Compiler und Programmierungsunterstützungsgerät - Google Patents

Compiler und Programmierungsunterstützungsgerät Download PDF

Info

Publication number
DE112018000198T5
DE112018000198T5 DE112018000198.9T DE112018000198T DE112018000198T5 DE 112018000198 T5 DE112018000198 T5 DE 112018000198T5 DE 112018000198 T DE112018000198 T DE 112018000198T DE 112018000198 T5 DE112018000198 T5 DE 112018000198T5
Authority
DE
Germany
Prior art keywords
global variable
program
memory address
value
memory
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.)
Pending
Application number
DE112018000198.9T
Other languages
English (en)
Inventor
Nobutoshi Watanabe
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Publication of DE112018000198T5 publication Critical patent/DE112018000198T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/458Synchronisation, e.g. post-wait, barriers, locks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/05Programmable logic controllers, e.g. simulating logic interconnections of signals according to ladder diagrams or function charts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B2219/00Program-control systems
    • G05B2219/10Plc systems
    • G05B2219/13Plc programming
    • G05B2219/13119Compiler

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Automation & Control Theory (AREA)
  • Programmable Controllers (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

Ein Compiler (11X), welcher einen Computer dazu veranlasst, einen Prozess des Kompilierens von Ablaufprogrammen (P und Q), welche eine Deklaration einer globalen Variablen umfassen, und des Erzeugens eines Ablaufprogramms (31), welches von einer SPS (20) auszuführen ist, durchzuführen, wobei, wenn sich zwischen einem Zeitpunkt vor einem Bearbeiten einer Deklaration der globalen Variable und einem Zeitpunkt nach dem Bearbeiten eine Änderung an einer der globalen Variable zugewiesenen Speicheradresse in der SPS (20) ergibt, der Compiler (11X) einen Ausführungsbefehl, gemäß welchem ein erster Wert, der an einer Speicheradresse gespeichert ist, die einer unbearbeiteten globalen Variable zugewiesen ist, mit einem zweiten Wert, der an einer Speicheradresse gespeichert ist, die einer bearbeiteten globalen Variable zugewiesen ist, synchronisiert wird, in ein Ausführungsprogramm implementiert, welches dem Ablaufprogramm (P) entspricht, welches die bearbeitete globale Variable referenziert.

Description

  • Bereich
  • Die vorliegende Erfindung betrifft einen Compiler, welcher ein Ablaufprogramm kompiliert, welches eine Deklaration einer globalen Variable umfasst, und betrifft zudem ein Programmierungsunterstützungsgerät.
  • Hintergrund
  • Eine speicherprogrammierbare Steuerung (SPS), welche ein Steuergerät ist, verwendet ein Ablaufprogramm zum Ausführen einer Ablaufsteuerung. Dieses Ablaufprogramm wird durch ein Programmiergerät erzeugt und kompiliert und danach in die SPS geschrieben.
  • Es gibt einen Fall, in welchem ein Ablaufprogramm eine globale Variable umfasst, welche von jeglichen Ablaufprogrammen referenziert werden kann. Diese globale Variable wird durch Kompilierung in einem Speicherbereich der SPS allokiert. Damit Ablaufprogramme auf die globale Variable zugreifen können, wird eine Speicheradresse referenziert, die der globalen Variable zugewiesen ist.
  • Um in einem in Patentliteratur 1 beschriebenen Informationsprozessor eine Situation zu verhindern, in der lediglich einige von globalen Variablen aktualisiert wurden, wird jede der globalen Variablen an zwei Orten allokiert, welche ein Public-Bereich und ein Arbeitsbereich sind. Ein höher priorisierter Task verwendet den Arbeitsbereich, um eine globale Variable zu aktualisieren, wohingegen ein niedriger priorisierter Task den Public-Bereich dazu verwendet, die globale Variable zu referenzieren. Wenn der niedriger priorisierte Task die Referenzierung der globalen Variable abschließt, vertauscht dieser Informatiosprozessor den Arbeitsbereich und den Public-Bereich, um hierdurch Simultanität (auch als „Konsistenz“ bezeichnet) der Zeit der Referenzierung der globalen Variable sicherzustellen.
  • Zitierungsliste
  • Patentliteratur
  • Patentliteratur 1: Offengelegte japanische Patentanmeldung Nr. 2002-149421
  • Zusammenfassung
  • Technisches Problem
  • Üblicherweise wird jedoch mit den herkömmlichen Techniken, die die oben beschriebene Patentliteratur 1 umfassen, in einem Fall, in welchem eine Deklaration für globale Variablen bearbeitet wird und damit eine Änderung einer Speicheradresse, die der globalen Variable zuzuweisen ist, vorliegt, die Kompilierung im Allgemeinen für alle Ablaufprogramme durchgeführt, die diese globale Variable referenzieren. Dies führt zu dem Problem, dass eine längere Zeit für die Kompilierung benötigt wird.
  • Die vorliegende Erfindung wurde in Anbetracht der obigen Probleme gemacht und ein Ziel der vorliegenden Erfindung ist es, einen Compiler bereitzustellen, welcher die für die Kompilierung erforderliche Zeit reduzieren kann.
  • Lösung des Problems
  • Um das obige Problem zu lösen und das Ziel zu erreichen, veranlasst ein Compiler gemäß der vorliegenden Erfindung einen Computer dazu, einen Prozess des Kompilierens eines Ablaufprogramms, welches eine Deklaration einer globalen Variable umfasst, und des Erzeugens eines Ausführungsprogramms, welches durch ein Steuergerät auszuführen ist, durchzuführen. Wenn sich zwischen einem Zeitpunkt vor einem Bearbeiten einer Deklaration der globalen Variable und einem Zeitpunkt nach dem Bearbeiten eine Änderung an einer der globalen Variable zugewiesenen Speicheradresse in dem Steuergerät ergibt, veranlasst der Compiler den Computer dazu, einen Prozess des Implementierens eines Ausführungsbefehls, gemäß welchem ein erster Wert, der an einer Speicheradresse gespeichert ist, die einer unbearbeiteten globalen Variable zugewiesen ist, mit einem zweiten Wert, der an einer Speicheradresse gespeichert ist, die einer bearbeiteten globalen Variable zugewiesen ist, synchronisiert wird, in ein Ausführungsprogramm durchzuführen, welches einem Ablaufprogramm entspricht, welches die bearbeitete globale Variable referenziert.
  • Vorteilhafte Wirkungen der Erfindung
  • Der Compiler gemäß der vorliegenden Erfindung bewirkt, dass es möglich ist, die für die Kompilierung erforderliche Zeit zu reduzieren.
  • Figurenliste
    • 1 ist ein Blockdiagramm, welches eine Konfiguration eines Programmiergeräts gemäß einer ersten Ausführungsform der vorliegenden Erfindung zeigt.
    • 2 ist ein Flussdiagramm, welches eine Gliederung einer Operationsprozedur für das Programmiergerät gemäß der ersten Ausführungsform zeigt.
    • 3 ist ein Diagramm zur Erläuterung einer Deklaration für globale Variablen gemäß der ersten Ausführungsform.
    • 4 ist ein Diagramm, welches ein Beispiel von Ablaufprogrammen zeigt, welche die globalen Variablen in 3 referenzieren.
    • 5 ist ein Diagramm, welches eine Konfiguration einer Speicherallokierungsinformation gemäß der ersten Ausführungsform vor dem Aktualisieren der Speicherallokierungsinformation zeigt.
    • 6 ist ein Diagramm, welches einen Zusammenhang zwischen einem Ausführungsprogramm und einer Speicheradresse als einem Referenzierungsort gemäß der ersten Ausführungsform vor dem Bearbeiten einer globalen Variable zeigt.
    • 7 ist ein Diagramm zur Erläuterung eines Beispiels einer Deklaration für globale Variablen gemäß der ersten Ausführungsform nach dem Bearbeiten der in 3 gezeigten globalen Variable.
    • 8 ist ein Diagramm zur Erläuterung eines Beispiels eines Ablaufprogramms nach dem Bearbeiten des in 4 gezeigten Ablaufprogramms.
    • 9 ist ein Diagramm, welches eine Konfiguration einer Speicherallokierungsinformation gemäß der ersten Ausführungsform nach dem Aktualisieren der Speicherallokierungsinformation zeigt.
    • 10 ist ein Flussdiagramm, welches eine Prozessprozedur für die Allokierung einer globalen Variable zeigt, welche von dem Programmiergerät gemäß der ersten Ausführungsform durchgeführt wird.
    • 11 ist ein Diagramm, welches einen Zusammenhang zwischen einem Ausführungsprogramm und einer Speicheradresse als einem Referenzierungsort gemäß der ersten Ausführungsform nach dem Bearbeiten einer globalen Variable zeigt.
    • 12 ist ein Flussdiagramm, welches eine Prozessprozedur zum Erzeugen eines Ausführungsformprogramms durch das Programmiergerät gemäß der ersten Ausführungsform zeigt.
    • 13 ist ein Blockdiagramm, welches eine Konfiguration eines Programmiergeräts gemäß einer zweiten Ausführungsform zeigt.
    • 14 ist ein Diagramm zur Erläuterung eines Beispiels einer Deklaration für globale Variablen gemäß der zweiten Ausführungsform nach dem Bearbeiten der in 3 gezeigten globalen Variable.
    • 15 ist ein Diagramm, welches einen Zusammenhang zwischen einem Ausführungsprogramm und einer Speicheradresse als einem Referenzierungsort gemäß der zweiten Ausführungsform nach dem Bearbeiten einer globalen Variable zeigt.
    • 16 ist ein Blockdiagramm, welches eine Konfiguration eines Programmiersystems gemäß einer dritten Ausführungsform zeigt.
    • 17 ist ein Diagramm, welches eine beispielhafte Hardwarekonfiguration des Programmiergeräts gemäß der ersten bis dritten Ausführungsform zeigt.
  • Beschreibung von Ausführungsformen
  • Ein Compiler und ein Programmierungsunterstützungsgerät gemäß Ausführungsformen der vorliegenden Erfindung werden nachfolgend im Detail mit Bezug zu den beiliegenden Zeichnungen beschrieben. Die vorliegende Erfindung ist nicht auf die Ausführungsformen beschränkt.
  • Erste Ausführungsform.
  • 1 ist ein Blockdiagramm, welches eine Konfiguration eines Programmiergeräts gemäß einer ersten Ausführungsform der vorliegenden Erfindung zeigt. Ein Programmiergerät 10X, welches ein Programmierungsunterstützungsgerät ist, ist ein Computer, welcher die Erzeugung eines Ablaufprogramms, welches in einer Gruppe 35X von Ablaufprogrammen enthalten ist, unterstützt. Das Programmiergerät 10X verwendet einen Compiler 11X zum Kompilieren eines Ablaufprogramms, welches in der Gruppe 35X von Ablaufprogrammen enthalten ist.
  • Das Programmiergerät 10X ist mit einer SPS 20, welche ein Steuergerät ist, verbunden. Das Programmiergerät 10X hat: eine Funktion des Erzeugens der Gruppe 35X von Ablaufprogrammen und einer Gruppe 36X von globalen Variablen; eine Funktion des Bearbeitens eines Ablaufprogramms, welches in der Gruppe 35X von Ablaufprogrammen enthalten ist; und eine Funktion des Bearbeitens einer Deklaration einer globalen Variable, die in der Gruppe 36X von globalen Variablen enthalten ist. Das Programmiergerät 10X hat ferner eine Funktion des Kompilierens der Gruppe 35X von Ablaufprogrammen und der Gruppe 36X von globalen Variablen, wodurch ein Ausführungsprogramm 31 erzeugt wird, welches von der SPS 20 ausführbar ist. Das Bearbeiten einer globalen Variable bezeichnet in der vorliegenden Ausführungsform nicht den Prozess des Änderns des Wertes der globalen Variable, sondern bezeichnet das Bearbeiten der Deklaration für globale Variablen. Information über die Deklaration für globale Variablen umfasst einen Datentyp, ein Attribut und dergleichen, welche später beschrieben werden.
  • Das Programmiergerät 10X umfasst den Compiler 11X, ein Bearbeitungsgerät 30, eine Kommunikationseinheit 32 und eine Programmspeichereinheit 310. Das Bearbeitungsgerät 30 erzeugt die Gruppe 35X von Ablaufprogrammen und die Gruppe 36X von globalen Variablen gemäß Anweisungen von einem Nutzer und bearbeitet die Gruppe 35X von Ablaufprogrammen und die Gruppe 36X von globalen Variablen gemäß Anweisungen von einem Nutzer. Das Bearbeitungsgerät 30 speichert darin die Gruppe 35X von Ablaufprogrammen und die Gruppe 36X von globalen Variablen, welche erzeugt oder bearbeitet wurden. Es ist erlaubt, dass das Bearbeitungsgerät 30 separat von dem Programmiergerät 10X konfiguriert ist. In diesem Fall ist das Bearbeitungsgerät 30 mit dem Programmiergerät 10X verbunden.
  • Die Gruppe 35X von Ablaufprogrammen umfasst eine Vielzahl von Ablaufprogrammen, beispielsweise ein Ablaufprogramm P und ein Ablaufprogramm Q. Die Gruppe 36X von globalen Variablen ist ein Satz von globalen Variablen, der von der Gruppe 35X von Ablaufprogrammen zu verwenden ist. Die Gruppe 36X von globalen Variablen umfasst eine Vielzahl von globalen Variablen, beispielsweise gVar1 bis gVar4, welche unten beschrieben werden. Jede globale Variable in der Gruppe 36X von globalen Variablen ist eine Variable mit einem globalen Sichtbarkeitsbereich und kann durch eine Vielzahl von Ablaufprogrammen in der Gruppe 35X von Ablaufprogrammen referenziert werden. Dementsprechend ist es möglich, dass jede globale Variable in der Gruppe 36X von globalen Variablen von einer Vielzahl von Ausführungsprogrammen 31, die in die SPS 20 geschrieben sind, referenziert werden kann.
  • Beispielsweise wurden die Programmiersprachenspezifikationen der Gruppe 35X von Ablaufprogrammen durch die International Electrotechnical Commission (IEC) als IEC 61131-3 standardisiert. Für die Gruppe 35X von Ablaufprogrammen ist es möglich, dass diese eine Daten-haltende Variable verwenden. Die IEC 61131-3 Standards definieren die Programmiersprache, welche die Gruppe 35X von Ablaufprogrammen beschreiben, beispielsweise eine Liste von Anweisungen, ein strukturierter Text, ein Leiter-Diagramm, ein Funktionsblockdiagramm und ein Sequenzfunktionsdiagramm. In der vorliegenden Ausführungsform ist die Programmiersprache jedoch nicht auf diese beschränkt.
  • Der Compiler 11X ist ein Programm zum Erzeugen des Ausführungsprogramms 31, welches von der SPS 20 ausführbar ist. Der Compiler 11X kompiliert die Gruppe 35X von Ablaufprogrammen und die Gruppe 36X von globalen Variablen, um hierdurch die Gruppe 35X von Ablaufprogrammen und die Gruppe 36X von globalen Variablen in das Ablaufprogramm 31 zu wandeln. Der Compiler 11X kann auch lediglich einen Teil der in der Gruppe 35X von Ablaufprogrammen enthaltenen Ablaufprogramme kompilieren.
  • Der Compiler 11X umfasst eine Referenzierungszusammenhang-Verwaltungseinheit 12, eine Speicherallokierungseinheit 14, eine Programmauswahleinheit 17 und eine Ausführungsprogramm-Erzeugungseinheit 16. Die Referenzierungszusammenhang-Verwaltungseinheit 12 verwaltet einen Referenzierungszusammenhang zwischen einem Ablaufprogramm und einer globalen Variable. Die Referenzierungszusammenhang-Verwaltungseinheit 12 erzeugt eine Referenzierungszusammenhangsinformation 13, welche einen Referenzierungszusammenhang zwischen einem Ablaufprogramm und einer globalen Variable angibt. Insbesondere registriert die Referenzierungszusammenhang-Verwaltungseinheit 12 Referenzierungszusammenhänge zwischen allen in der Gruppe 35X von Ablaufprogrammen enthaltenen Ablaufprogrammen und allen in der Gruppe 36X von globalen Variablen enthaltenen globalen Variablen in der Referenzierungszusammenhangsinformation 13.
  • Die Referenzierungszusammenhang-Verwaltungseinheit 12 aktualisiert die Referenzierungszusammenhangsinformation 13, wenn die Gruppe 35X von Ablaufprogrammen oder die Gruppe 36X von globalen Variablen bearbeitet wird und dementsprechend eine Änderung eines Referenzierungszusammenhangs zwischen einem in der Gruppe 35X von Ablaufprogrammen enthaltenen Ablaufprogramm und einer in der Gruppe 36X von globalen Variablen enthaltenen globalen Variable auftritt.
  • Eine Änderung/Keine-Änderung-Information, welche angibt, welches der Ablaufprogramme und welche der globalen Variablen geändert oder hinzugefügt wurden, wird der Referenzierungszusammenhangsinformation 13 hinzugefügt. Eine Änderungsdetails-Information, welche Details der Änderung in einem Ablaufprogramm und einer globalen Variable angibt, wird der Referenzierungszusammenhangsinformation 13 hinzugefügt. Die Änderungsdetails-Information ist beispielsweise eine Information, welche eine globale Variable und das der globalen Variable zugewiesene, geänderte Attribut umfasst. Das Attribut wird unten beschrieben. Die Referenzierungszusammenhang-Verwaltungseinheit 12 löscht die Änderung/Keine-Änderung-Information und die Änderungsdetails-Information für ein Ablaufprogramm und eine globale Variable, dessen bzw. deren Kompilierung abgeschlossen ist, aus der Referenzierungszusammenhangsinformation 13.
  • Die Speicherallokierungseinheit 14 allokiert basierend auf der Referenzierungszusammenhangsinformation 13 alle der globalen Variablen, die in der Gruppe 36X von globalen Variablen enthalten sind, in einem Datenspeicher 24 oder einem nicht-flüchtigen Datenspeicher 25 in der SPS 20 und erzeugt eine Speicherallokierungsinformation 15, welche ein Ergebnis der Allokierung ist. Das Ergebnis der Allokierung ist eine Speicheradresse in dem Datenspeicher 24 oder dem nicht-flüchtigen Datenspeicher 25. Die Speicherallokierungseinheit 14 registriert daher die Speicheradresse in dem Datenspeicher 24 oder dem nicht-flüchtigen Datenspeicher 25 in der Speicherallokierungsinformation 15. Auf diese Weise stellt die Speicherallokierungseinheit 14 eine Speicheradresse für eine globale Variable ein und registriert die Speicheradresse in der Speicherallokierungsinformation 15.
  • Die Speicherallokierungseinheit 14 aktualisiert die Speicherallokierungsinformation 15 basierend auf der Referenzierungszusammenhangsinformation 13, wenn die Gruppe 36X von globalen Variablen bearbeitet wird und daher eine Änderung in einer Speicheradresse auftritt, die einer globalen Variable zugewiesen ist. Beispielsweise stellt die Speicherallokierungseinheit 14 eine Speicheradresse ein, die für das Attribut einer globalen Variable erlaubt ist.
  • Die Programmauswahleinheit 17 wählt basierend auf der Änderung/Keine-Änderung-Information, die der Referenzierungszusammenhangsinformation 13 hinzugefügt ist, aus der Gruppe 35X von Ablaufprogrammen ein Ablaufprogramm als ein zu kompilierendes Ziel aus. Gemäß Anweisungen von einem Nutzer kann das Bearbeitungsprogramm 30 ein Ablaufprogramm als ein zu kompilierendes Ziel auswählen.
  • Wenn die Gruppe 35X von Ablaufprogrammen erstmals erzeugt wird, wählt die Programmauswahleinheit 17 alle Ablaufprogramme, die in der Gruppe 35X von Ablaufprogrammen enthalten sind, als zu kompilierendes Ziel aus.
  • Die Ausführungsprogramm-Erzeugungseinheit 16 verwendet die Speicherallokierungsinformation 15 und ein Ablaufprogramm, welches durch die Programmauswahleinheit 17 aus der Gruppe 35X von Ablaufprogrammen ausgewählt wurde, um das Ausführungsprogramm 31 zu erzeugen, welches von der SPS 20 auszuführen ist. Das Ausführungsprogramm 31 besteht aus Ausführungsbefehlen, welche eine Sequenz von Anweisungen sind, die von der SPS 20 interpretierbar und ausführbar sind. Eine Sequenz von Anweisungen in dem Ausführungsprogramm 31 kann eine beliebige Art von Sequenz sein, welche mit der Architektur der SPS 20 kompatibel ist.
  • Die Ausführungsprogramm-Erzeugungseinheit 16 speichert das erzeugte Ausführungsprogramm 31 in der Programmspeichereinheit 310. Die Programmspeichereinheit 310 ist ein Speicher, welcher darin das Ausführungsprogramm 31 speichert. Die Kommunikationseinheit 32 überträgt das von der Ausführungsprogramm-Erzeugungseinheit 16 erzeugte Ausführungsprogramm 31 an die SPS 20.
  • Die SPS 20 führt eine Ablaufsteuerung unter Verwendung des von dem Programmiergerät 10X erzeugten Ausführungsprogramms 31 aus. Die SPS 20 umfasst einen Programmspeicher 21, eine Kommunikationseinheit 22, eine Programmausführungseinheit 23, den Datenspeicher 24 und den nicht-flüchtigen Datenspeicher 25. Der Datenspeicher 24 und der nicht-flüchtige Datenspeicher 25 sind jeweils ein Speicher, welcher darin Variablen speichert, welche eine globale Variable umfassen, die von dem Ausführungsprogramm 31 zu referenzieren ist. Der Datenspeicher 24 ist ein flüchtiger Speicher, wohingegen der nicht-flüchtige Datenspeicher 25 ein nicht-flüchtiger Speicher ist.
  • Die Kommunikationseinheit 22 empfängt das von der Kommunikationseinheit 32 in dem Programmiergerät 10X übertragene Ausführungsprogramm 31 und speichert das Ausführungsprogramm 31 in dem Programmspeicher 21. Der Programmspeicher 21 ist ein Speicher, welcher darin das Ausführungsprogramm 31 speichert.
  • Die Programmausführungseinheit 23 liest das Ausführungsprogramm 31 aus dem Programmspeicher 21 und führt Anweisungen aus, die das Ausführungsprogramm 31 bilden. Der Datenspeicher 24 ist ein Speicher, in welchem von den globalen Variablen, die in der Gruppe 35X von Ablaufprogrammen verwendet werden, diejenigen globalen Variablen allokiert werden, die kein Datenerhaltung-bei-Energieunterbrechung-Attribut haben. Der nicht-flüchtige Speicher 25 ist ein Speicher, in welchem von den globalen Variablen, die in der Gruppe 35X von Ablaufprogrammen verwendet werden, diejenigen globalen Variablen allokiert werden, die ein Datenerhaltung-bei-Energieunterbrechung-Attribut haben. Das Datenerhaltung-bei-Energieunterbrechung-Attribut ist ein Attribut, welches angibt, dass Daten selbst dann zu erhalten sind, wenn eine Unterbrechung der Energieversorgung auftritt. Daher ist bei einer globalen Variable, für welche das Datenerhaltung-bei-Energieunterbrechung-Attribut gesetzt ist, vorgesehen, dass Daten selbst dann erhalten werden, wenn eine Unterbrechung der Energieversorgung aufgetreten ist. Die globale Variable mit den Datenhaltung-bei-Energieunterbrechung-Attribut ist beispielsweise eine globale Variable mit dem RETAIN-Attribut in den IEC 61131-3 Standards. Das Datenerhaltung-bei-Energieunterbrechung-Attribut ist jedoch nicht darauf beschränkt, als „RETAIN-Attribut“ repräsentiert zu sein.
  • Das Ausführungsprogramm 31 umfasst Speicherzugriffsanweisungen zum Referenzieren des Datenspeichers 24 und des nicht-flüchtigen Datenspeichers 25. Die Speicherzugriffsanweisungen sollen wie folgt repräsentiert sein.
    schreiben (X, Ax): Schreiben des Wertes „X“ in den Bereich einer Speicheradresse Ax.
    lesen (Ay, Y): Lesen des Wertes in dem Bereich einer Speicheradresse Ay und Schreiben des gelesenen Wertes in den Bereich „Y“.
  • Auf diese Weise gibt „X“ einen Wert an, der durch die „schreiben“-Anweisung in den Bereich der Speicheradresse Ax zu schreiben ist, wohingegen „Y“ einen Bereich angibt, in den durch die „lesen“-Anweisung der aus dem Bereich der Speicheradresse Ay gelesene Wert geschrieben wird. „X“ und „Y“ können ein Wert in beliebiger Form sein, der mit der Architektur der SPS 20 kompatibel ist.
  • Die Referenzierung des Datenspeichers 24 wird erreicht, indem die „schreiben“-Anweisung oder die „lesen“-Anweisung ausgeführt wird, vorausgesetzt, dass die Speicheradresse Ax oder die Speicheradresse Ay innerhalb des Speicheradressbereichs des Datenspeichers 24 liegt. Die Referenzierung auf den nicht-flüchtigen Datenspeicher 25 wird erreicht, indem die „schreiben“-Anweisung oder die „lesen“-Anweisung ausgeführt wird, vorausgesetzt, dass die Speicheradresse Ax oder die Speicheradresse Ay innerhalb des Speicheradressbereichs des nicht-flüchtigen Datenspeichers 25 liegt. Die Speicheradresse Ax und die Speicheradresse Ay können in jeder beliebigen Form sein, die mit der Architektur der SPS 20 kompatibel ist.
  • Als Nächstes wird eine Operationsprozedur für das Programmiergerät 10X beschrieben. 2 ist ein Flussdiagramm, welches eine Gliederung einer Operationsprozedur für das Programmiergerät gemäß der ersten Ausführungsform zeigt. In dem Programmiergerät 10X erzeugt das Bearbeitungsgerät 30 die Gruppe 35X von Ablaufprogrammen und die Gruppe 36X von globalen Variablen gemäß Anweisungen von einem Nutzer (Schritt S10). In dem Compiler 11X erzeugt die Referenzierungszusammenhang-Verwaltungseinheit 12 die Referenzierungszusammenhangsinformation 13, welche einen Referenzierungszusammenhang zwischen einem Ablaufprogramm in der Gruppe 35X von Ablaufprogrammen und einer globalen Variable in der Gruppe 36X von globalen Variablen angibt. Die Speicherallokierungseinheit 14 weist einer globalen Variable in der Gruppe 36X von globalen Variablen eine Speicheradresse zu. Ferner erzeugt die Speicherallokierungseinheit 14 die Speicherallokierungsinformation 15 basierend auf der Speicheradresse, die der globalen Variable zugewiesen ist, und der Referenzierungszusammenhangsinformation 13 (Schritt S20).
  • Die Ausführungsprogramm-Erzeugungseinheit 16 erzeugt das Ausführungsprogramm 31 für alle Ablaufprogramme, die in der Gruppe 35X von Ablaufprogrammen enthalten sind (Schritt S30). Insbesondere erzeugt die Ausführungsprogramm-Erzeugungseinheit 16 das Ausführungsprogramm 31 unter Verwendung der erzeugten Gruppe 35X von Ablaufprogrammen und der Gruppe 36X von globalen Variablen. Die Kommunikationseinheit 32 überträgt das erzeugte Ausführungsprogramm 31 an die SPS 20 (Schritt S40). Dies ermöglicht es der SPS 20, das Ausführungsprogramm 31 auszuführen.
  • In dem Programmiergerät 10X bearbeitet das Bearbeitungsgerät 30 danach einen Teil der Gruppe 36X von globalen Variablen und einen Teil der Gruppe 35X von Ablaufprogrammen gemäß Anweisungen von einem Nutzer. Das heißt, das Bearbeitungsgerät 30 bearbeitet ein Ablaufprogramm und eine Deklaration für globale Variablen gemäß Anweisungen von einem Nutzer (Schritt S50). Vorliegend wird ein Fall beschrieben, in welchem ein Teil der globalen Variablen in der Gruppe 36X von globalen Variablen bearbeitet wird und daher eine Änderung in einer zugewiesenen Speicheradresse in dem Datenspeicher 24 oder dem nicht-flüchtigen Datenspeicher 25 vorliegt. In der vorliegenden Ausführungsform wird angenommen, dass die globalen Variablen gVar1, gVar2, gVar3 und gVar4 umfassen, von denen gVar1 durch Bearbeitung des Attributs und dergleichen geändert wird, wohingegen gVar2, gVar3 und gVar4 unverändert bleiben. In der vorliegenden Ausführungsform wird ferner angenommen, dass die Gruppe 35X von Ablaufprogrammen die Ablaufprogramme P und Q umfasst und dass das Ablaufprogramm P gleichzeitig mit der Bearbeitung von gVar1 bearbeitet wird und somit eine Änderung in einer Speicheradresse vorliegt, an welche gVar1 geschrieben wird und von welcher gVar1 gelesen wird, wohingegen das Ablaufprogramm Q unverändert bleibt.
  • Nach der Bearbeitung von gVar1 und dem Ablaufprogramm P aktualisiert die Referenzierungszusammenhang-Verwaltungseinheit 12 die Referenzierungszusammenhangsinformation 13, während die Speicherallokierungseinheit 14 die Speicherallokierungsinformation 15 aktualisiert (Schritt S60). Insbesondere aktualisiert die Referenzierungszusammenhang-Verwaltungseinheit 12 die Änderung/Keine-Änderung-Information und die Änderungsdetails-Information in der Referenzierungszusammenhangsinformation 13. Basierend auf der Referenzierungszusammenhangsinformation 13 weist die Speicherallokierungseinheit 14 zudem eine Speicheradresse als einen Referenzierungsort für gVar1 des Ablaufprogramms P in der Speicherallokierungsinformation 15 zu.
  • Die Programmauswahleinheit 17 wählt basierend auf der Referenzierungszusammenhangsinformation 13 aus der Gruppe 35X von Ablaufprogrammen das Ablaufprogramm P als ein zu kompilierendes Ziel aus. Das von der Programmauswahleinheit 17 ausgewählte Ablaufprogramm P referenziert eine globale Variable, deren dieser zugewiesene Speicheradresse geändert wurde. Dementsprechend erzeugt die Ausführungsprogramm-Erzeugungseinheit 16 ein Ausführungsprogramm für das Ablaufprogramm, welches eine globale Variable referenziert, deren dieser zugewiesene Speicheradresse geändert wurde (Schritt S70). Ein Ausführungsprogramm, welches unter Verwendung des Ablaufprogramms P erzeugt wird, wird nachfolgend als „Ausführungsprogramm EP“ bezeichnet. Auf diese Weise kompiliert die Ausführungsprogramm-Erzeugungseinheit 16 gemäß der vorliegenden Ausführungsform lediglich das Ablaufprogramm P der Gruppe 35X von Ablaufprogrammen, welche die Ablaufprogramme P und Q umfasst, wobei das Ablaufprogramm P eine globale Variable referenziert, deren dieser zugewiesene Speicheradresse geändert wurde. Die Kommunikationseinheit 32 überträgt das erzeugte Ausführungsprogramm EP an die SPS 20 (Schritt S80). Aufgrund dieser Operation ersetzt die SPS das vorherige Ausführungsprogramm 31, welches ein Gegenstück zu dem Ausführungsprogramm EP ist, durch das empfangene Ausführungsprogramm EP.
  • Als Nächstes wird ein konkreter Prozess beschrieben, welcher von dem Programmiergerät 10X durchgeführt wird. 3 ist ein Diagramm zur Erläuterung einer Deklaration für globale Variablen gemäß der ersten Ausführungsform. 3 zeigt ein Beispiel einer Deklaration für globale Variablen gemäß dem Verfahren zum Deklarieren von globalen Variablen, wie es in den IEC 61131-3 Standards definiert ist. Eine Deklaration 361 für globale Variablen ist äquivalent zu der Gruppe 36X von globalen Variablen in dem Programmiergerät 10X. 3 zeigt einen Fall, in welchem gVar1 als eine globale Variable vom Typ INT deklariert ist, gVar2 als eine globale Variable vom Typ REAL mit dem Anfangswert 10,0 deklariert ist, gVar3 als eine globale Variable vom Typ INT mit dem Datenerhaltung-bei-Energieunterbrechung-Attribut deklariert ist und gVar4 als eine globale Variable vom Typ WORD mit dem Datenerhaltung-bei-Energieunterbrechung-Attribut deklariert ist. Der Datentyp, beispielsweise der Typ INT, der Typ REAL und der Typ WORD, repräsentieren beispielsweise eine Datengröße oder dergleichen der globalen Variable. In der vorliegenden Ausführungsform wird ein Fall beschrieben, in welchem eine unbearbeitete globale Variable und eine bearbeitete globale Variable denselben Datentyp haben und die einstellbare Datengröße zwischen der unbearbeiteten und der bearbeiteten globalen Variable gleich ist. Das Verfahren zum Deklarieren von globalen Variablen gemäß der vorliegenden Ausführungsform ist nicht auf das in 3 gezeigte Format beschränkt.
  • 4 ist ein Diagramm, welches ein Beispiel von Ablaufprogrammen zeigt, welche die globalen Variablen in 3 referenzieren. 4 zeigt ein Beispiel von Ablaufprogrammen, welche in dem entsprechend den IEC 61131-3 Standards definierten strukturierten Text beschrieben sind. Die in 4 gezeigte Gruppe 35X von Ablaufprogrammen umfasst Ablaufprogramme 111P und 111Q. Das Ablaufprogramm 111P ist ein Beispiel des Ablaufprogramms P vor seiner Änderung. Das in 4 gezeigte Ablaufprogramm 111Q ist ein Beispiel des Ablaufprogramms Q vor seiner Änderung.
  • In dem Ablaufprogramm 111P wird „P1“ in die globale Variable gVar1 geschrieben und danach wird der Wert der globalen Variable gVar1 an „P2“ gelesen. Auf ähnliche Weise wird in dem Ablaufprogramm 111Q „Q1“ in die globale Variable gVar1 geschrieben und danach der Wert der globalen Variable gVar1 an „Q2“ gelesen. In 4 wurde auf eine Referenzierung auf globale Variablen, die von gVar1 verschieden sind, verzichtet. Die Referenzierung auf die globale Variable ist nicht auf das in 4 gezeigte Format beschränkt.
  • Eine globale Variable, die in der Deklaration 361 für globale Variablen deklariert ist, wird an einer Speicheradresse in dem Datenspeicher 24 oder dem nicht-flüchtigen Datenspeicher 25 durch die Speicherallokierungseinheit 14 allokiert. Das Ausführungsprogramm 31 wird durch Kompilieren erzeugt. Während der Ausführung des Ausführungsprogramms 31 wird die Speicheradresse referenziert, die der globalen Variable zugewiesen ist. In diesem Beispiel allokiert die Speicherallokierungseinheit 14 basierend auf der Deklaration 361 für globale Variablen gVar1 und gVar2 in dem Datenspeicher 24, wohingegen gVar3 und gVar4 in dem nicht-flüchtigen Datenspeicher 25 allokiert werden.
  • 5 ist ein Diagramm, welches eine Konfiguration einer Speicherallokierungsinformation gemäß der ersten Ausführungsform vor dem Aktualisieren der Speicherallokierungsinformation zeigt. 5 zeigt ein Konfigurationsbeispiel einer Speicherallokierungsinformation 151, welche von der Speicherallokierungseinheit 14 basierend auf der Deklaration 361 für globale Variablen erzeugt wird. Die Speicherallokierungsinformation 151 ist ein Beispiel der Speicherallokierungsinformation 15. Die Speicherallokierungsinformation 151 enthält darin eine Speicheradresse einer globalen Variable, die in dem Datenspeicher 24 oder dem nicht-flüchtigen Datenspeicher 25 allokiert ist.
  • Die Speicherallokierungsinformation 151 ist eine Information, welche eine Zusammenhangsbeziehung zwischen einer globalen Variable der Gruppe 36X von globalen Variablen, einer der globalen Variable zugewiesenen Speicheradresse und einem Ablaufprogramm, welches diese Speicheradresse referenziert, angibt.
  • In der Speicherallokierungsinformation 151 sind gVar1, gVar2, gVar3 und gVar4 als Namen von globalen Variablen registriert. In der Speicherallokierungsinformation 151 sind mit jeder globalen Variable ein Datentyp, eine Kategorie, ein Attribut, ein Anfangswert, eine Speicheradresse und ein referenzierendes Programm assoziiert.
  • Der Datentyp gibt einen Datentyp einer globalen Variable an, beispielsweise den Typ INT, den Typ REAL und den Typ WORD. Die Kategorie gibt einen Sichtbarkeitsbereich oder ein Verwendungsverfahren der Variable an. Das Attribut gibt eine Eigenschaft der Variable an, beispielsweise Datenerhaltung bei Energieunterbrechung oder eine Konstante. In der Speicherallokierungsinformation 151 ist für jede globale Variable VAR_GLOBAL registriert, was eine globale Variable angibt, und für eine Variable mit dem Datenerhaltung-bei-Energieunterbrechung-Attribut ist RETAIN registriert. Der Anfangswert ist ein Anfangswert einer globalen Variable.
  • Die Speicheradresse gibt eine Speicheradresse an, die einer globalen Variable zugewiesen ist. Das referenzierende Programm gibt ein Ablaufprogramm an, welches die Speicheradresse referenziert. Die Speicherallokierungsinformation 151 zeigt einen Fall, in welchem „Aa“, „Ab“, „Ac“ und „Ad“, die jeweils eine Speicheradresse Aa, Ab, Ac und Ad angeben, in dem Abschnitt „Speicheradresse“ registriert sind. In dem Abschnitt „referenzierendes Programm“ gibt „P“ das Ablaufprogramm P an, während „Q“ das Ablaufprogramm Q angibt. Die referenzierenden Programme in diesem Beispiel sind das Ablaufprogramm 111P und das Ablaufprogramm 111Q.
  • Die Speicherallokierungsinformation 151 gibt an, dass gVar1 an der Speicheradresse Aa in dem Datenspeicher 24 allokiert ist, dass gVar2 an der Speicheradresse Ab in dem Datenspeicher 24 allokiert ist, dass gVar3 an der Speicheradresse Ac in dem nicht-flüchtigen Datenspeicher 25 allokiert ist und dass gVar4 an der Speicheradresse Ad in dem nicht-flüchtigen Datenspeicher 25 allokiert ist. Das Format der Speicherallokierungsinformation 15 ist nicht auf das in 5 gezeigte Format beschränkt.
  • Es wird angenommen, dass die Referenzierungszusammenhangsinformation 13 angibt, dass gVar1, gVar2, gVar3 und gVar4 jeweils von den Ablaufprogrammen 111P und 111Q referenziert werden. In diesem Fall gibt die unter Verwendung der Referenzierungszusammenhangsinformation 13 erzeugte Speicherallokierungsinformation 151 zudem an, dass gVar1, gVar2, gVar3 und gVar4 durch die Ablaufprogramme 111P und 111Q referenziert werden.
  • Nun wird ein Zusammenhang zwischen Ausführungsprogrammen, die aus den Ablaufprogrammen 111P und 111Q erzeugt sind, und Speicheradressen, die jeweils durch diese Ausführungsprogramme referenziert werden, beschrieben. 6 ist ein Diagramm, welches einen Zusammenhang zwischen einem Ausführungsprogramm und einer Speicheradresse als einen Referenzierungsort gemäß der ersten Ausführungsform vor dem Bearbeiten einer globalen Variable zeigt. 6 zeigt ein Konzept der Allokierung von unbearbeiteten globalen Variablen in dem Datenspeicher 24 oder dem nicht-flüchtigen Datenspeicher 25.
  • 6 zeigt einen Zusammenhang zwischen einem Ausführungsprogramm EP51, welches durch Kompilieren des Ablaufprogramms 111P erzeugt ist, einem Ausführungsprogramm EQ51, welches durch Kompilieren des Ablaufprogramms 111Q erzeugt ist, dem Datenspeicher 24 und dem nicht-flüchtigen Datenspeicher 25.
  • „schreiben“ in dem Ausführungsprogramm EP51 ist eine Anweisung zum Durchführen des Schreibens von „P1“ an die Speicheradresse Aa, welche gVar1 zugewiesen ist. „lesen“ in dem Ausführungsprogramm EP51 ist eine Anweisung zum Durchführen des Lesens des Wertes an der Speicheradresse Aa, welche gVar1 zugewiesen ist, und des Schreibens des gelesenen Wertes in „P2“. Diese Anweisungen bedeuten das Schreiben von „P1“ in gVar1 und das Schreiben des aus gVar1 gelesenen Wertes in „P2“ in dem Ablaufprogramm 111P, welches ein Quellprogramm des Ausführungsprogramms EP51 ist.
  • Auf ähnliche Weise ist „schreiben“ in dem Ausführungsprogramm EQ51 eine Anweisung zum Durchführen des Schreibens von „Q1“ an die Speicheradresse Aa, welche gVar1 zugewiesen ist. „lesen“ in dem Ausführungsprogramm EQ51 ist eine Anweisung zum Durchführen des Lesens des Wertes an der Speicheradresse Aa, welche gVar1 zugewiesen ist, und des Schreibens des gelesenen Wertes an „Q2“. Diese Anweisungen bedeuten das Schreiben von „Q1“ in gVar1 und das Schreiben des aus gVar1 gelesenen Wertes nach „Q2“ in dem Ablaufprogramm 111Q, welches ein Quellprogramm des Ausführungsprogramms EQ51 ist. In 6 wird auf eine Referenzierung der globalen Variablen, die von gVar1 verschieden sind, verzichtet.
  • 7 ist ein Diagramm zur Erläuterung eines Beispiels einer Deklaration für globale Variablen gemäß der ersten Ausführungsform nach dem Bearbeiten der in 3 gezeigten globalen Variable. 7 zeigt eine Deklaration 362 für globale Variablen in einem Fall, in welchem gVar1 so geändert wurde, dass gVar1 im Vergleich zu der in 3 gezeigten Deklaration 361 für globale Variablen das Datenhaltung-bei-Energieunterbrechung-Attribut hat. In der Deklaration 362 für globale Variablen wird gVar1, welche in 3 deklariert wurde, als ein Kommentar behandelt und daher gelöscht; und hierfür wird gVar1 als eine globale Variable mit dem Datenhaltung-bei-Energieunterbrechung-Attribut deklariert.
  • 8 ist ein Diagramm zur Erläuterung eines Beispiels eines Ablaufprogramms nach dem Bearbeiten des in 4 gezeigten Ablaufprogramms. Die in 8 gezeigte Gruppe 35X von Ablaufprogrammen umfasst ein Ablaufprogramm 112P und das Ablaufprogramm 111Q. Das in 8 gezeigte Ablaufprogramm 112P ist ein Beispiel des geänderten Ablaufprogramms P.
  • Es wird angenommen, dass gleichzeitig mit der wie oben beschriebenen Bearbeitung von gVar1 das in 4 gezeigte Ablaufprogramm 111P zu dem in 8 gezeigten Ablaufprogramm 112P geändert wird. Das heißt, es wird angenommen, dass der in gVar1 zu schreibende Wert von „P1“ auf „P3“ geändert wurde und dass der Bereich, in den der gelesene Wert aus gVar1 geschrieben wird, von „P2“ auf „P4“ geändert wurde. Das in 8 gezeigte Ablaufprogramm 111Q bleibt ungeändert.
  • 9 ist ein Diagramm, welches eine Konfiguration einer Speicherallokierungsinformation gemäß der ersten Ausführungsform nach dem Aktualisieren der Speicherallokierungsinformation zeigt. 9 zeigt ein Konfigurationsbeispiel einer Speicherallokierungsinformation 152, welche von der Speicherallokierungseinheit 14 basierend auf der Deklaration 362 für globale Variablen erzeugt wird. Die Speicherallokierungsinformation 152 ist ein Beispiel der Speicherallokierungsinformation 15. Die Speicherallokierungsinformation 152 wird von der Speicherallokierungseinheit 14 erzeugt, indem die Speicherallokierungsinformation 151 aktualisiert wird, wenn die Deklaration 361 für globale Variablen auf die Deklaration 362 für globale Variablen geändert wird und gleichzeitig das Ablaufprogramm 111P auf das Ablaufprogramm 112P geändert wird. Dementsprechend sind die referenzierenden Programme in der Speicherallokierungsinformation 152 das Ablaufprogramm 112P und das Ablaufprogramm 111Q. Ähnlich der Speicherallokierungsinformation 151 enthält die Speicherallokierungsinformation 152 eine Speicheradresse einer globalen Variable, die in dem Datenspeicher 24 oder dem nicht-flüchtigen Datenspeicher 25 allokiert ist.
  • Weil gVar1 in der Deklaration 362 für globale Variablen und das Ablaufprogramm 112P bearbeitet wurden, wurden im Vergleich zu der Speicherallokierungsinformation 151 die Einträge, die in der Speicherallokierungsinformation 152 mit gVar1 assoziiert sind, aktualisiert. Vorliegend wird ein Fall beschrieben, in welchem die Speicherallokierungseinheit 14 eine Speicheradresse Ae für gVar1 neu zuweist.
  • In dem Eintrag „zugewiesene Speicheradresse“, welcher einer der mit gVar1 assoziierten Einträge ist, sind sowohl eine Speicheradresse für einen Zeitpunkt vor der Bearbeitung von gVar1 als auch eine Speicheradresse für den Zeitpunkt nach der Bearbeitung von gVar1 registriert. Insbesondere sind in dem mit gVar1 assoziierten Bereich „Speicheradresse“ die Speicheradresse Aa, welche eine Speicheradresse vor Bearbeitung von gVar1 ist, und die Speicheradresse Ae, welche eine Speicheradresse nach Bearbeitung von gVar1 ist, registriert. In dem mit gVar1 assoziierten Abschnitt „referenzierendes Programm“ sind das Ablaufprogramm Q, welches ein erstes Programm ist, welches mit der Speicheradresse Aa vor Bearbeitung von gVar1 assoziiert ist, und das Ablaufprogramm P, welches ein zweites Programm ist, welches mit der Speicheradresse Ae nach Bearbeitung von gVar1 assoziiert ist, registriert.
  • In der Speicherallokierungsinformation 152 ist für gVar1 eine Information registriert, welche angibt, dass die Speicheradresse Aa, welche von dem Ablaufprogramm Q zu referenzieren ist, auf die Speicheradresse Ae geändert wurde. Diese Information zeigt, dass der Wert an der Speicheradresse Aa mit dem Wert an der Speicheradresse Ae synchronisiert werden muss.
  • Als Nächstes wird eine Prozessprozedur zur Allokierung von globalen Variablen beschrieben, welche von dem Programmiergerät 10X durchgeführt wird. 10 ist ein Flussdiagramm, welches die Prozessprozedur zur Allokierung von globalen Variablen zeigt, welche von dem Programmiergerät gemäß der ersten Ausführungsform durchgeführt wird.
  • Eine Operationsprozedur für die Speicherallokierungseinheit 14 wird nun beschrieben. Die Speicherallokierungseinheit 14 bestimmt, ob eine globale Variable in der Gruppe 36X von globalen Variablen nach deren Bearbeitung vorliegt (Schritt S100). Mit anderen Worten bestimmt die Speicherallokierungseinheit 14, ob eine globale Variable deklariert wurde.
  • Wenn eine globale Variable vorliegt (Ja bei Schritt S100), erhält die Speicherallokierungseinheit 14 eine globale Zielvariable, der eine Speicheradresse zugewiesen wird (Schritt S110). Dieser Prozess dient dazu, die globale Zielvariable aus der Gruppe 36X von globalen Variablen zu erhalten, das heißt, zum Erhalten einer globalen Variable, die vor Kompilierung bearbeitet wurde. Insbesondere erhält die Speicherallokierungseinheit 14 aus der Gruppe 36X von globalen Variablen eine globale Variable, der eine zusätzliche Speicheradresse zugewiesen werden muss, weil die globale Variable bearbeitet wurde.
  • Anschließend bestimmt die Speicherallokierungseinheit 14, ob eine zugewiesene Speicheradresse auf die erhaltene globale Variable eingestellt wurde (Schritt S120). Wenn die Speicheradresse auf die globale Variable eingestellt wurde (Ja bei Schritt S120), ist diese globale Variable eine existierende globale Variable. Eine globale Variable, die durch Bearbeitung der existierenden globalen Variable resultiert, wird ein Ziel, dem eine Speicheradresse zugewiesen wird. Die Speicherallokierungseinheit 14 weist daher der globalen Zielvariable eine zusätzliche Speicheradresse zu, während die existierende zugewiesene Speicheradresse beibehalten wird. Dementsprechend erzeugt die Speicherallokierungseinheit 14 einen Eintragsbereich zum Registrieren der zusätzlichen Speicheradresse in der Speicherallokierungsinformation 152 (Schritt S130). Der Eintragsbereich in der Speicherallokierungsinformation 15 kann ein beliebiger Bereich sein, solange der Bereich mit der Speicherallokierungsinformation 15 kompatibel ist.
  • Die Speicherallokierungseinheit 14 registriert ein referenzierendes Programm in dem zusätzlich erzeugten Eintragsbereich (Schritt S140). Bei Schritt S140 nimmt die Speicherallokierungseinheit 14 Bezug auf die Referenzierungszusammenhangsinformation 13, um hierdurch ein referenzierendes Programm zu bestimmen, und registriert das bestimmte referenzierende Programm in der Speicherallokierungsinformation 152.
  • Zudem bestimmt die Speicherallokierungseinheit 14 eine Speicheradresse, die einer globalen Variable eines zu kompilierendes Ziels zugewiesen ist, und registriert die Speicheradresse in dem erzeugten Eintragsbereich (Schritt S150).
  • Andererseits, wenn die Speicheradresse in Schritt S120 noch nicht eingestellt wurde (Nein bei Schritt S120), ist die von der Speicherallokierungseinheit 14 erhaltene globale Variable eine globale Zielvariable, der eine Speicheradresse erstmals zugewiesen wird. In diesem Fall bestimmt die Speicherallokierungseinheit 14 eine Speicheradresse, die der globalen Zielvariable zugewiesen wird, und registriert die Speicheradresse in der Speicherallokierungsinformation 152 (Schritt S150). Es kann jedes Verfahren angewendet werden, um eine zugewiesene Speicheradresse zu bestimmen, solange das Verfahren mit der Architektur der SPS 20 kompatibel ist.
  • Danach bestimmt die Speicherallokierungseinheit 14, ob noch eine verbliebene globale Variable in der Gruppe 36X von globalen Variablen vorliegt, das heißt, ob eine globale Variable vorliegt, für die der Allokierungsprozess durchzuführen ist (Schritt S100).
  • Wenn eine globale Variable vorliegt (Ja bei Schritt S100), wiederholt die Speicherallokierungseinheit 14 den Prozess der Schritte S110 bis S150 und S100, wie oben beschrieben. Andererseits, wenn keine globale Variable vorliegt (Nein bei Schritt S100), beendet die Speicherallokierungseinheit 14 den Allokierungsprozess. Das heißt, wenn die Zuweisung einer Speicheradresse für jede globale Variable abgeschlossen ist, beendet die Speicherallokierungseinheit 14 den Allokierungsprozess. Durch Durchführung des oben beschriebenen Allokierungsprozesses für globale Variablen kann die Speicherallokierungseinheit 14 eine zugewiesene Speicheradresse für jede globale Variable einstellen. Es ist auch möglich, dass die Speicherallokierungseinheit 14 eine Vielzahl zugewiesener Speicheradressen für eine bearbeitete globale Variable einstellt.
  • Gemäß dem mit Bezug auf 10 beschriebenen Prozess werden in der vorliegenden Ausführungsform die Speicheradresse Ae und das Ablaufprogramm P, welches ein referenzierendes Programm ist, für gVar1 in der Speicherallokierungsinformation 152 registriert. Danach erzeugt die Ausführungsprogramm-Erzeugungseinheit 16 das Ausführungsprogramm EP unter Verwendung der Speicherallokierungsinformation 152 für das Ablaufprogramm 112P, welches durch Bearbeitung aus dem Ablaufprogramm 111P hervorgeht.
  • Nun wird ein Zusammenhang zwischen Ausführungsprogrammen, die nach dem Bearbeiten der Gruppe 35X von Ablaufprogrammen und der Gruppe 36X von globalen Variablen erzeugt werden, und Speicheradressen, welche von diesen Ausführungsprogrammen referenziert werden, beschrieben. 11 ist ein Diagramm, welches einen Zusammenhang zwischen einem Ausführungsprogramm und einer Speicheradresse als einem Referenzierungsort gemäß der ersten Ausführungsform nach dem Bearbeiten einer globalen Variable zeigt. 11 zeigt ein Konzept der Allokierung von globalen Variablen in dem Datenspeicher 24 oder dem nicht-flüchtigen Datenspeicher 25 nach der Bearbeitung. 11 zeigt einen Zusammenhang zwischen einem Ausführungsprogramm EP52, welches durch Kompilieren des Ablaufprogramms 112P erzeugt wird, dem Ausführungsprogramm EQ51, welches bereits erzeugt wurde, dem Datenspeicher 24 und dem nicht-flüchtigen Datenspeicher 25. In 11 wird auf die Referenzierung der globalen Variablen, die von gVar1 verschieden sind, verzichtet.
  • In der vorliegenden Ausführungsform wird das Ablaufprogramm 112P durch Bearbeiten des Ablaufprogramms 111P erzeugt, wohingegen das Ablaufprogramm 111Q nicht bearbeitet wird. Dementsprechend wird das Ablaufprogramm 111P kompiliert, wohingegen das Ablaufprogramm 111Q nicht kompiliert werden muss.
  • In 11 ist „schreiben“ in dem Ausführungsprogramm EP52 eine Anweisung zum Durchführen des Schreibens von „P3“ an die Speicheradresse Ae, welche gVar1 zugewiesen ist. „lesen“ in dem Ausführungsprogramm EP52 ist eine Anweisung zum Durchführen des Lesens des Wertes an der Speicheradresse Ae, welche gVar1 zugewiesen ist, und des Schreibens des gelesenen Wertes in „P4“. Diese Anweisungen bedeuten das Schreiben von „P3“ in gVar1 und das Schreiben des aus gVar1 gelesenen Wertes in „P4“ in dem Ablaufprogramm 112P, welches ein Quellprogramm des Ausführungsprogramms EP52 ist. Weil das Ausführungsprogramm EQ51 nicht bearbeitet ist, ist das Ausführungsprogramm EQ51 daher mit dem in 6 beschriebenen Ausführungsprogramm EQ51 identisch.
  • Wie in 11 gezeigt, ist gVar1, welche von dem Ausführungsprogramm EP52, das durch Bearbeitung aktualisiert ist, referenziert wird, an der Speicheradresse Ae in dem nicht-flüchtigen Datenspeicher 25 allokiert. gVar1, welche von dem Ausführungsprogramm EP52, das durch Bearbeitung aktualisiert ist, referenziert wird, ist an der Speicheradresse Ae in dem nicht-flüchtigen Datenspeicher 25 allokiert. gVar1, welche von dem unbearbeiteten Ausführungsprogramm EQ51 referenziert wird, bleibt an der Speicheradresse Aa in dem Datenspeicher 24 allokiert. Während eine Adresse, die einer unbearbeiteten globalen Variable zugewiesen ist, erhalten bleibt, wird auf diese Weise eine Allokierung einer bearbeiteten globalen Variable durchgeführt.
  • Das Ablaufprogramm 112P, welches ein zu kompilierendes Ziel ist, referenziert gVar1, was erreicht wird, indem die Speicheradresse Ae referenziert wird, die gVar1 zusätzlich in dem nicht-flüchtigen Datenspeicher 25 zugewiesen wurde. Das heißt, in dem Ausführungsprogramm EP52 wird ein Ausführungsbefehl zum Schreiben in gVar1 als „schreiben“ an die Speicheradresse Ae implementiert und ein Ausführungsbefehl zum Lesen aus gVar1 wird als „lesen“ an der Speicheradresse Ae implementiert.
  • Die Ausführungsprogramm-Erzeugungseinheit 16 gemäß der vorliegenden Ausführungsform fügt eine Anweisung zum Synchronisieren des Wertes, welcher an der Speicheradresse Aa, die unverändert bleibt, gespeichert ist, mit dem Wert, der an der geänderten Speicheradresse Ae gespeichert ist, zwischen die Anweisungen ein, um eine zusätzlich allokierte globale Variable zu referenzieren. Insbesondere fügt die Ausführungsprogramm-Erzeugungseinheit 16 eine Anweisung „kopieren (Bc, Bd)“ (Kopieranweisung) unmittelbar nach „schreiben“ und unmittelbar vor „lesen“ ein.
    kopieren (Bc, Bd): Der Wert an einer Speicheradresse Bc wird in den Bereich einer Speicheradresse Bd geschrieben.
  • 11 zeigt einen Fall, in welchem entweder Bc oder Bd Ae ist und das andere Aa ist. „kopieren“, was in diesem Beispiel zwischen „schreiben“ und „lesen“ eingefügt ist, ist eine Anweisung, die untrennbar mit dem unmittelbar vorherigen „schreiben“ oder dem unmittelbar nachfolgenden „lesen“ arbeitet. In dem Ausführungsprogramm EP52 in 11 ist eine Anweisung „kopieren (Ae, Aa)“ unmittelbar nach „schreiben (P3, Ae)“ eingefügt. Wenn diese Anweisung „kopieren (Ae, Aa)“ ausgeführt wird, wird der Wert von gVar1, welche an der Speicheradresse Ae in dem nicht-flüchtigen Datenspeicher 25 allokiert ist, kopiert und in gVar1, welche an der Speicheradresse Aa in dem Datenspeicher 24 allokiert ist, geschrieben (s1).
  • Auf ähnliche Weise ist in dem Ausführungsprogramm EP52 in 11 eine Anweisung „kopieren (Aa, Ae)“ unmittelbar vor „lesen (Ae, P4)“ eingefügt. Wenn diese Anweisung „kopieren (Aa, Ae)“ ausgeführt wird, wird der Wert von gVar1, welche an der Speicheradresse Aa in dem Datenspeicher 24 allokiert ist, kopiert und in gVar1, welche an der Speicheradresse Ae in dem nicht-flüchtigen Datenspeicher 25 allokiert ist, geschrieben (s2).
  • Somit wird der Wert von gVar1, welche von dem Ablaufprogramm 112P referenziert wird, gleich dem Wert von gVar 1, welche von dem Ablaufprogramm 111Q referenziert wird. Selbst wenn gVar1 bearbeitet wird, ist es dementsprechend immer noch möglich, dass das bearbeitete Ausführungsprogramm EP52 und das unbearbeitete Ausführungsprogramm EQ51 einen gleichen Wert von gVar1 referenzieren.
  • Eine Prozessprozedur zum Erzeugen des Ausführungsprogramms EP52 wird beschrieben. 12 ist ein Flussdiagramm, welches eine Prozessprozedur zum Erzeugen eines Ausführungsprogramms durch das Programmiergerät gemäß der ersten Ausführungsform zeigt.
  • Der Prozess zum Erzeugen des Ausführungsprogramms EP52 aus dem Ablaufprogramm 112P durch die Ausführungsprogramm-Erzeugungseinheit 16 wird nachfolgend beschrieben. Die Ausführungsprogramm-Erzeugungseinheit 16 führt den Prozess von S200 bis S280 an dem Ablaufprogramm 112P als zu kompilierendes Ziel Einheit für Einheit durch. Die Einheit des Ablaufprogramms 112P kann eine beliebige Einheit sein, welche mit der Programmiersprache kompatibel ist, welche das Ablaufprogramm 112P beschreibt. Die Einheit ist beispielsweise eine Zeile des Ablaufprogramms 112P.
  • Die Ausführungsprogramm-Erzeugungseinheit 16 erzeugt für das Ablaufprogramm 112P Einheit für Einheit einen Ausführungsbefehl, welcher von der SPS 20 ausführbar ist (Schritt S200). Wenn während der Erzeugung dieses Ausführungsbefehls eine globale Variable auftritt, stellt die Ausführungsprogramm-Erzeugungseinheit 16 eine Speicheradresse, die der globalen Variable zugewiesen ist, mit einem willkürlichen Wert ein.
  • Als Nächstes bestimmt die Ausführungsprogramm-Erzeugungseinheit 16, ob eine Einheit des zu kompilierendes Ziels eine globale Variable umfasst (Schritt S210). Insbesondere bestimmt die Ausführungsprogramm-Erzeugungseinheit 16, ob die in Schritt S200 verwendete Einheit eine globale Variable umfasst.
  • Wenn das zu kompilierende Ziel eine globale Variable umfasst (Ja bei Schritt S210), erhält die Ausführungsprogramm-Erzeugungseinheit 16 eine Speicheradresse in Übereinstimmung mit einem referenzierenden Programm des zu kompilierenden Ziels und bestimmt einen Ausführungsbefehl (Schritt S220). Basierend auf der Speicherallokierungsinformation 152 erhält die Ausführungsprogramm-Erzeugungseinheit 16 die Speicheradresse Ae, welche mit dem Ausführungsprogramm P, das ein zu kompilierendes Ziel ist, assoziiert ist, aus den Speicheradressen Aa und Ae, die gVar1, welche ein zu kompilierendes Ziel ist, zugewiesen sind. Mit anderen Worten erhält die Ausführungsprogramm-Erzeugungseinheit 16 eine der Speicheradressen, die einer globalen Variable als ein zu kompilierendes Ziel zugewiesen sind, wobei die erhaltene Speicheradresse mit einem referenzierenden Programm als ein zu kompilierendes Ziel assoziiert ist. Die Ausführungsprogramm-Erzeugungseinheit 16 ersetzt die der globalen Variable zugeordnete Speicheradresse, welche mit einem willkürlichen Wert in Schritt S200 eingestellt wurde, durch die erhaltene Speicheradresse und bestimmt gleichzeitig einen Ausführungsbefehl, welcher dieser erhaltenen Speicheradresse entspricht. Selbst in einem Fall, in welchem eine globale Variable an einer Vielzahl von Speicheradressen allokiert ist, kann eine von einem Ablaufprogramm referenzierte Speicheradresse immer noch als ein zu kompilierendes Ziel eingestellt sein.
  • Anschließend bestimmt die Ausführungsprogramm-Erzeugungseinheit 16, ob eine Vielzahl von Speicheradressen einer globalen Variable des zu kompilierenden Ziels zugewiesen ist (Schritt S230). Wenn eine Vielzahl von Speicheradressen, beispielsweise die Speicheradressen Aa und Ae, einer globalen Variable des zu kompilierenden Ziels zugewiesen ist (Ja bei Schritt S230), erzeugt die Ausführungsprogramm-Erzeugungseinheit 16 eine „kopieren“-Anweisung in dem Ausführungsprogramm EP52, um einen gleichen Wert an den Speicheradressen Aa und Ae zu speichern.
  • Die Ausführungsprogramm-Erzeugungseinheit 16 bestimmt, ob es eine „schreiben“-Anweisung ist, welche bereits in dem Ausführungsprogramm EP52 erzeugt wurde (Schritt S240). Wenn es eine „schreiben“-Anweisung ist, die bereits in dem Ausführungsprogramm EP52 erzeugt wurde (Ja bei Schritt S240), fügt die Ausführungsprogramm-Erzeugungseinheit 16 „kopieren“ unmittelbar nach der „schreiben“-Anweisung ein (Schritt S250). Die Ausführungsprogramm-Erzeugungseinheit 16 betrachtet die in Schritt S220 erhaltene Speicheradresse Ae als eine Speicheradresse, aus welcher der Wert durch „kopieren“ erhalten wird, und stellt basierend auf der Speicherallokierungsinformation 152 eine Speicheradresse ein, an welche der Wert durch „kopieren“ geschrieben wird. Zu diesem Zeitpunkt stellt die Ausführungsprogramm-Erzeugungseinheit 16 aus der Speicheradresse Aa oder der Speicheradresse Ae, welche in Schritt S230 als Speicheradressen bestimmt wurden, die als Vielzahl von Speicheradressen zugewiesen wurden, die Speicheradresse Aa als einen Ort ein, an den der Wert durch „kopieren“ geschrieben wird, welcher von der Speicheradresse Ae verschieden ist, die in Schritt S220 erhalten wurde. Wenn eine Vielzahl von Speicheradressen wie oben beschrieben vorliegt, fügt die Ausführungsprogramm-Erzeugungseinheit 16 „kopieren“ in das Ausführungsprogramm EP52 entsprechend der Anzahl von Speicheradressen ein.
  • Wenn es keine „schreiben“-Anweisung ist, die bereits in dem Ausführungsprogramm EP52 erzeugt ist (Nein bei Schritt S240), bestimmt die Ausführungsprogramm-Erzeugungseinheit 16, ob es eine „lesen“-Anweisung ist, welche bereits in dem Ausführungsprogramm EP52 erzeugt ist (Schritt S260). Wenn es eine „lesen“-Anweisung ist, welche bereits in dem Ausführungsprogramm EP52 erzeugt ist (Ja bei Schritt S260), fügt die Ausführungsprogramm-Erzeugungseinheit 16 „kopieren“ unmittelbar vor „lesen“ ein (Schritt S270).
  • Auf die selbe Weise wie in Schritt S250 stellt die Ausführungsprogramm-Erzeugungseinheit 16 die Speicheradresse Aa, aus welcher der Wert durch „kopieren“ erhalten wird, und die Speicheradresse Ae, an welche der Wert durch „kopieren“ geschrieben wird, ein. Die Ausführungsprogramm-Erzeugungseinheit 16 führt den Prozess von Schritt S280 aus, nachdem der Prozess von Schritt S250 oder Schritt S270 durchgeführt wurde.
  • Wenn es in Schritt S260 keine „lesen“-Anweisung ist, welche bereits in dem Ausführungsprogramm EP52 erzeugt ist (Nein bei Schritt S260), wird eine „kopieren“-Anweisung nicht benötigt. In diesem Fall führt die Ausführungsprogramm-Erzeugungseinheit 16 den Prozess von Schritt S280 ohne Einfügen einer „kopieren“-Anweisung durch.
  • Wenn in Schritt S230 festgestellt wird, dass einer globalen Variable des zu kompilierenden Ziels keine Vielzahl von Speicheradressen zugewiesen ist (Nein bei Schritt S230), wird die globale Variable des zu kompilierenden Ziels nur an einer einzigen Speicheradresse allokiert. Daher wird eine „kopieren“-Anweisung nicht benötigt. In diesem Fall führt die Ausführungsprogramm-Erzeugungseinheit 16 den Prozess von Schritt S280 ohne Einfügen einer „kopieren“-Anweisung durch.
  • Wenn in Schritt S210 ein zu kompilierendes Ziel keine globale Variable umfasst (Nein bei Schritt S210), führt die Ausführungsprogramm-Erzeugungseinheit 16 den Prozess von Schritt S280 ohne Einfügen einer „kopieren“-Anweisung durch.
  • Nach Schritt S250, nach Schritt S270, wenn die Bestimmung bei Schritt S260 Nein ergibt, wenn die Bestimmung bei Schritt S230 Nein ergibt oder wenn die Bestimmung bei Schritt S210 Nein ergibt, bestimmt die Ausführungsprogramm-Erzeugungseinheit 16, ob noch ein verbliebenes zu kompilierendes Ziel vorliegt (Schritt S280). Weil die Ausführungsprogramm-Erzeugungseinheit 16 den Prozess der Schritte S200 bis S280 an dem Ablaufprogramm 112P Einheit für Einheit wiederholt, bestimmt die Ausführungsprogramm-Erzeugungseinheit 16, ob noch eine Einheit, welche ein zu kompilierendes Ziel ist, in dem Ablaufprogramm 112P verblieben ist. Das heißt, die Ausführungsprogramm-Erzeugungseinheit 16 bestimmt, ob eine Einheit, die dem Prozess der Schritte S200 bis S280 noch nicht unterzogen wurde, noch in dem zu kompilierenden Ziel vorhanden ist.
  • Wenn ein noch verbliebenes zu kompilierendes Ziel vorhanden ist (Ja bei Schritt S180), wiederholt die Ausführungsprogramm-Erzeugungseinheit 16 den Prozess der Schritte S200 bis S280 an einer Einheit in dem verbliebenen zu kompilierenden Ziel. Wenn kein verbliebenes zu kompilierendes Ziel vorliegt (Nein bei Schritt S280), beendet die Ausführungsprogramm-Erzeugungseinheit 16 den Prozess zum Erzeugen des Ausführungsprogramms EP52.
  • Auf die oben beschriebene Weise synchronisiert die Ausführungsprogramm-Erzeugungseinheit 16 Werte, die an einer Vielzahl von Speicheradressen gehalten werden, miteinander zwischen Speicheradressen unter Verwendung von „kopieren“, sodass Werte der globalen Variable, die von einer Vielzahl von Ablaufprogrammen 112P und 111Q referenziert werden, nur einen einzigen Wert haben können.
  • In einem Fall, in welchem Werte, die an eine Vielzahl von Speicheradressen gehalten werden, nicht miteinander zwischen Speicheradressen unter Verwendung von „kopieren“ synchronisiert werden, ist es erforderlich, alle Ablaufprogramme, die diese globale Variable referenzieren, zu kompilieren, wenn die globale Variable aktualisiert wird und dementsprechend eine Änderung in einer Speicheradresse vorliegt, die der globalen Variable zugewiesen ist.
  • In einem umfangreichen System mit einer großen Anzahl von installierten Ablaufprogrammen werden, wenn eine bestimmte globale Variable bearbeitet wird, die Ablaufprogramme, die diese globale Variable referenzieren, alle zum Kompilieren und Schreiben in eine SPS ausgewählt. Daher ist bei einem umfangreichen System mehr Zeit erforderlich, um die Ablaufprogramme zu kompilieren und in die SPS zu schreiben.
  • Ein System, welches Ablaufprogramme verwendet, wiederholt die Kompilierung und das Schreiben der Ablaufprogramme in eine SPS häufig, weil beim Starten eines Gerätes, welches von der SPS gesteuert wird, oder beim Debugging Anpassungen von Operationen vorgenommen werden. Dementsprechend wird auch eine längere Zeit für das Kompilieren und Schreiben der Ablaufprogramme in die SPS beim Anpassen oder Debugging benötigt.
  • Hingegen kann das Programmiergerät 10X gemäß der vorliegenden Ausführungsform ein zu kompilierendes Ziel auf das Ablaufprogramm 112P begrenzen, welches eine globale Variable umfasst, deren dieser zugewiesene Speicheradresse geändert wurde. In der vorliegenden Ausführungsform wurde ein Fall beschrieben, in welchem „kopieren“ unmittelbar nach „schreiben“ eingefügt wurde, um hierdurch die Werte einer globalen Variable miteinander unter Verwendung mehrerer Anweisungen zu synchronisieren. Es ist auch erlaubt, eine einzige Anweisung zum Ausführen von „kopieren“ und „schreiben“ anstelle von individuellen „kopieren“- und „schreiben“-Anweisungen einzufügen. Auf ähnliche Weise wurde in der vorliegenden Ausführungsform der Fall beschrieben, in welchem „kopieren“ unmittelbar vor „lesen“ eingefügt wurde, um hierdurch die Werte einer globalen Variable miteinander unter Verwendung mehrerer Anweisungen zu synchronisieren. Es ist auch erlaubt, eine einzige Anweisung zum Ausführen von „lesen“ und „kopieren“ anstelle von einzelnen „lesen“- und „kopieren“-Anweisungen einzufügen. Wie oben beschrieben, ist es erlaubt, dass das Programmiergerät 10X einen Ausführungsbefehl aus einer einzigen Anweisung oder aus einer Vielzahl von Anweisungen bildet.
  • Wenn sich zwischen einem Zeitpunkt vor einem Bearbeiten der Deklaration für globale Variablen und einem Zeitpunkt nach dem Bearbeiten eine Änderung an einer einer globalen Variable zuzuweisenden Speicheradresse, wird, wie oben beschrieben, gemäß der ersten Ausführungsform der Wert, der an der Speicheradresse Aa, welche der unbearbeiteten globalen Variable zugewiesen ist, gehalten wird, mit dem Wert, der an der Speicheradresse Ae, welche der bearbeiteten globalen Variable zugewiesen ist, gehalten wird, unter Verwendung einer „kopieren“-Anweisung synchronisiert. Aufgrund dieser Operation kann ein unbearbeitetes Ablaufprogramm 111Q, welches die unbearbeitete globale Variable referenziert, die an der Speicheradresse Aa allokiert ist, von dem zu kompilierenden Ziel ausgeschlossen werden. Dementsprechend kann die Prozessdauer reduziert werden, die zum Kompilieren von Ablaufprogrammen benötigt wird.
  • Die SPS 20 kann eine Ablaufsteuerung unter Verwendung des Ausführungsprogramms EQ51, so wie es ist, dem unbearbeiteten Ablaufprogramm 111Q entsprechend ausführen. Dementsprechend kann beim Schreiben des Ausführungsprogramms EP52 in die SPS 20 das Schreiben des Ausführungsprogramms EQ51 in die SPS 20 ausgelassen werden.
  • Zweite Ausführungsform.
  • Als Nächstes wird eine zweite Ausführungsform der vorliegenden Erfindung mit Bezug zu den 13 bis 15 beschrieben. In der zweiten Ausführungsform wird ein Ablaufprogramm unter Verwendung eines Kompilierverfahrens kompiliert, welches von einem Nutzer eingestellt wird. Wenn ein bestimmtes Kompilierverfahren ausgewählt wird, wird eine globale Variable an einer Vielzahl von Speicheradressen auf die Weise allokiert, wie sie in der ersten Ausführungsform beschrieben ist, indem eine Anweisung zum Durchführen einer Datentyp-Wandlung selbst dann durchgeführt wird, wenn die einstellbare Datengröße einer unbearbeiteten globalen Variable und einer bearbeiteten globalen Variable verschieden sind.
  • 13 ist ein Blockdiagramm, welches eine Konfiguration eines Programmiergeräts gemäß der zweiten Ausführungsform zeigt. Von den jeweiligen Bestandteilen in 13 werden Bestandteile, die die selben Funktionen wie jene des Programmiergeräts 10X gemäß der ersten Ausführungsform, gezeigt in 1, realisieren, mit den gleichen Bezugszeichen bezeichnet und deren redundante Beschreibung wird ausgelassen.
  • Ein Programmiergerät 10Y, welches ein Programmierungsunterstützungsgerät ist, unterscheidet sich von dem Programmiergerät 10X dadurch, dass das Programmiergerät 10Y eine Kompilieroption-Bestimmungseinheit 18 umfasst, welche basierend auf einer Kompilieroption 41 ein Kompilierverfahren auswählt. Insbesondere umfasst das Programmiergerät 10Y einen Compiler 11Y, das Bearbeitungsgerät 30, die Kommunikationseinheit 32 und die Programmspeichereinheit 310. Der Compiler 11Y umfasst zusätzlich zu den Bestandteilen des Compilers 11X die Kompilieroption-Bestimmungseinheit 18.
  • Die Kompilieroption 41 ist eine Information zum Festlegen eines Kompilierungsauswahlverfahrens. In der Kompilieroption 41 ist eine erste Option oder eine zweite Option eingestellt. Die erste Option ist als ein Wert angegeben, welcher ein Kompilierverfahren angibt, welches jeder globalen Variable lediglich eine einzige Speicheradresse zuweist. Die zweite Option ist als ein Wert angegeben, welcher ein Kompilierverfahren angibt, welches jeder globalen Variable eine Vielzahl von Speicheradressen zuweist. Ein Nutzer speichert daher im Vorhinein in der Kompilieroption 41 einen Wert, welcher die erste Option angibt, oder einen Wert, welcher die zweite Option angibt.
  • Weil jeder globalen Variable nur eine einzige Speicheradresse zugewiesen wird, werden beim Kompilieren mit der ersten Option die Ablaufprogramme, die die globale Variable referenzieren, deren dieser zugewiesene Speicheradresse geändert wurde, alle zu einem zu kompilierenden Ziel.
  • Beim Kompilieren mit der zweiten Option ist es möglich, eine globale Variable an einer Vielzahl von Speicheradressen auf die gleiche Weise wie in der ersten Ausführungsform zu allokieren, sodass die Ausführungsprogramme begrenzt werden, die zu kompilierende Ziele werden. In einigen Fällen wird angenommen, dass der Wert einer globalen Variable, die an einer Vielzahl von Speicheradressen allokiert ist, zwischen den Ablaufprogrammen, die diese globale Variable referenzieren, nicht übereinstimmen kann.
  • Basierend auf der Kompilieroption 41 bestimmt die Kompilieroption-Bestimmungseinheit 18, ob ein Ablaufprogramm unter Verwendung eines Verfahrens, welches durch die erste Option festgelegt ist, oder unter Verwendung eines Verfahrens, welches durch die zweite Option festgelegt ist, zu kompilieren ist. Die Kompilieroption-Bestimmungseinheit 18 überträgt die erste Festlegungsinformation, welche die erste Option angibt, oder eine zweite Festlegungsinformation, welche die zweite Option angibt, als ein Bestimmungsergebnis an die Speicherallokierungseinheit 14, die Programmauswahleinheit 17 und die Ausführungsprogramm-Erzeugungseinheit 16.
  • Die Speicherallokierungseinheit 14, die Programmauswahleinheit 17 und die Ausführungsprogramm-Erzeugungseinheit 16 führen den Prozess gemäß der ersten Festlegungsinformation oder gemäß der zweiten Festlegungsinformation durch, welche von der Kompilieroption-Bestimmungseinheit 18 übertragen wird. Insbesondere: Wenn die Speicherallokierungseinheit die erste Festlegungsinformation von der Kompilieroption-Bestimmungseinheit 18 empfängt, weist die Speicherallokierungseinheit 14 jeder globalen Variable lediglich eine einzige Speicheradresse zu. Wenn die Speicherallokierungseinheit 14 die zweite Festlegungsinformation von der Kompilieroption-Bestimmungseinheit 18 empfängt, weist die Speicherallokierungseinheit 14 einer globalen Variable Speicheradressen unter Verwendung des gleichen Verfahrens wie in der ersten Ausführungsform zu.
  • Wenn die Programmauswahleinheit 17 die erste Festlegungsinformation von der Kompilieroption-Bestimmungseinheit 18 empfängt, wählt die Programmauswahleinheit 17 alle Ablaufprogramme aus, welche die globale Variable referenzieren, deren dieser zugewiesene Speicheradresse geändert wurde. Wenn die Programmauswahleinheit 17 die zweite Festlegungsinformation von der Kompilieroption-Bestimmungseinheit 18 empfängt, wählt die Programmauswahleinheit 17 ein Ablaufprogramm unter Verwendung des gleichen Verfahrens wie in der ersten Ausführungsform aus.
  • Wenn die Ausführungsprogramm-Erzeugungseinheit 16 die erste Festlegungsinformation von der Kompilieroption-Bestimmungseinheit 18 empfängt, kompiliert die Ausführungsprogramm-Erzeugungseinheit 16 alle Ablaufprogramme, die die globale Variable referenzieren, deren dieser zugewiesene Speicheradresse geändert wurde.
  • Wenn die Ausführungsprogramm-Erzeugungseinheit 16 die zweite Festlegungsinformation von der Kompilieroption-Bestimmungseinheit 18 empfängt, kompiliert die Ausführungsprogramm-Erzeugungseinheit 16 ein Ablaufprogramm unter Verwendung des gleichen Verfahrens wie in der ersten Ausführungsform.
  • Bei der ersten Option erzeugt die Ausführungsprogramm-Erzeugungseinheit 16 ein Ausführungsprogramm ohne Einfügen von „kopieren“, welches in der ersten Ausführungsform erzeugt wird. Bei der zweiten Option erzeugt die Ausführungsprogramm-Erzeugungseinheit 16 eine Anweisung zum Durchführen einer Datentyp-Konvertierung anstelle einer „kopieren“-Anweisung, welche in der ersten Ausführungsform erzeugt wird.
  • 14 ist ein Diagramm zur Erläuterung eines Beispiels einer Deklaration für globale Variablen gemäß der zweiten Ausführungsform nach dem Bearbeiten der in 3 gezeigten globalen Variable. 14 zeigt eine Deklaration 363 für globale Variablen in einem Fall, in welchem der Datentyp von gVar1 im Vergleich zu der Deklaration 361 für globale Variablen, gezeigt in 3, geändert ist. Es wird bei der Deklaration 363 für globale Variablen angenommen, dass gVar1, welche als eine Anweisung in 3 deklariert wurde, gelöscht wird und stattdessen als Kommentar behandelt wird, während gVar1 als eine globale Variable deklariert wird, deren Datentyp der Typ REAL ist. In den IEC 61131-3 Standards ist der Typ INT ein 16-Bit Integer mit Vorzeichen, wohingegen der Typ REAL eine 32-Bit Fließkommazahl in einfacher Genauigkeit ist. Der in 14 gezeigte Datentyp ist lediglich ein Beispiel und andere Datentypen können ebenfalls verwendet werden.
  • Für jeweilige Datentypen, die in den IEC 61131-3 Standards definiert sind, beispielsweise der Typ INT und der Typ REAL, werden unterschiedliche Datengrößen benötigt. Dementsprechend sind die Speichergrößen, die für eine globale Variable allokiert werden, je nach Datentyp unterschiedlich. In einem Fall, in welchem eine globale Variable aufgrund des Bearbeitens des Datentyps eine Vielzahl von zugewiesenen Adressen hat, können sich daher in der vorliegenden Ausführungsform die Datengrößen an den entsprechenden zugewiesenen Adressen unterscheiden.
  • In diesem Fall muss der Prozess, der dem in der ersten Ausführungsform beschriebenen Kopieren äquivalent ist, dazu konfiguriert sein, die Werte angewendeter Datentypen miteinander zu synchronisieren. Beim Kopieren eines Wertes eines Datentyps in einen anderen mit einer anderen Datengröße kann es jedoch vorkommen, dass der Wert der Kopierquelle nicht immer mit dem Wert am Kopierort übereinstimmt. Wenn beispielsweise ein Wert des Datentyps mit einer größeren Datengröße in einen Datentyp mit einer kleineren Datengröße kopiert wird, kann der Wert, welcher außerhalb des verfügbaren Bereichs für den Datentyp mit der kleineren Datengröße liegt, nicht richtig in den Datentyp mit der kleineren Datengröße kopiert werden. Daher wird in der vorliegenden Ausführungsform entweder der Wert, der die erste Option angibt, oder der Wert, der die zweite Option angibt, in der Kompilieroption 41 gespeichert, um hierdurch ein Ablaufprogramm unter Verwendung eines vom Nutzer gewünschten Kompilierverfahrens zu kompilieren.
  • Die zweite Option wird nun im Detail beschrieben. Wie oben beschrieben, kann es vorkommen, dass die Werte der Datentypen mit unterschiedlichen Datengrößen nicht immer übereinstimmen, obwohl der Wert des einen Datentyps in einen anderen kopiert wird. Eine bestimmte Kategorie von Datentypen, beispielsweise Datentypen, die einen numerischen Wert angeben, können jedoch einen innerhalb eines vorgegebenen Bereichs gleichen Wert repräsentieren, obwohl die Datentypen voneinander verschieden sind. Mit Betonung auf diesen Punkt stellt die vorliegende Ausführungsform nicht sicher, dass der Wert einer globalen Variable zwischen Ablaufprogrammen gleich wird, wodurch ein unbearbeitetes Ablaufprogramm aus dem zu kompilierenden Ziel auf gleiche Weise wie in der ersten Ausführungsform ausgeschlossen wird.
  • Wenn der Datentyp von gVar1 von dem Typ INT auf den Typ REAL wie in 14 gezeigt geändert wird, fügt die Ausführungsprogramm-Erzeugungseinheit 16 die folgende „REAL2INT (Cc, Cd)“-Anweisung zum Konvertieren des Datentyps von dem Typ REAL zu dem Typ INT ein, statt „kopieren“ unmittelbar nach „schreiben“ in dem in 11 gezeigten Ausführungsprogramm EP52 einzufügen.
    REAL2INT (Cc, Cd): Schreiben des Wertes vom Typ REAL an einer Speicheradresse Cc in den Bereich einer Speicheradresse Cd als einen Wert vom Typ INT.
  • Auf ähnliche Weise fügt die Ausführungsprogramm-Erzeugungseinheit 16 die folgende „INT2REAL (Cc, Cd)“-Anweisung zum Konvertieren des Datentyps von dem Typ INT zu dem Typ REAL ein, statt „kopieren“ unmittelbar vor „lesen“ in dem in 11 gezeigten Ausführungsprogramm EP52 einzufügen.
    INT2REAL (Cc, Cd): Schreiben des Wertes vom Typ INT an der Speicheradresse Cc in den Bereich der Speicheradresse Cd als einen Wert vom Typ REAL.
  • Auf diese Weise verwendet die Ausführungsprogramm-Erzeugungseinheit 16 eine Anweisung zum Konvertieren eines Datentyps und anschließenden Schreibens eines Wertes eines konvertierten Datentyps, um hierdurch den Wert, der an einer Speicheradresse gehalten wird, welche einer unbearbeiteten globalen Variable zugewiesen ist, mit dem Wert, der an einer Speicheradresse gehalten wird, die einer bearbeiteten globalen Variable zugewiesen ist, zu synchronisieren.
  • Die obigen Anweisungen „REAL2INT“ und „INT2REAL“ werden durch eine einzige Anweisung oder eine Anweisungsgruppe, welche aus einer Vielzahl von Anweisungen gebildet ist, entsprechend der Architektur der SPS 20 implementiert. Es wird jedoch angenommen, dass diese Anweisungen auf untrennbare Weise mit „schreiben“, welches unmittelbar vor „REAL2INT“ eingefügt ist, oder mit „lesen“, welches unmittelbar nach „INT2REAL“ eingefügt ist, auszuführen sind.
  • 15 ist ein Diagramm, welches einen Zusammenhang zwischen einem Ausführungsprogramm und einer Speicheradresse als einem Referenzierungsort gemäß der zweiten Ausführungsform nach dem Bearbeiten einer globalen Variable zeigt. 15 zeigt ein Konzept der Allokierung von globalen Variablen in dem Datenspeicher 24 oder dem nicht-flüchtigen Datenspeicher 25 gemäß der zweiten Option.
  • Auf die gleiche Weise wie in der ersten Ausführungsform wird in der vorliegenden Ausführungsform das Ablaufprogramm 112P durch Bearbeiten des Ablaufprogramms 111P erzeugt, wohingegen das Ablaufprogramm 111Q nicht bearbeitet wird. Wenn die zweite Option verwendet wird, wird das Ablaufprogramm 112P kompiliert, wohingegen das Ablaufprogramm 111Q nicht kompiliert werden muss.
  • Wie in 15 gezeigt, ist gVar1 für ein Ausführungsprogramm EP53, welches bearbeitet wurde und daher aktualisiert wurde, an der Speicheradresse Ae in dem Datenspeicher 24 allokiert. gVar1 für das unbearbeitete Ausführungsprogramm EQ51 bleibt an der Speicheradresse Aa in dem Datenspeicher 24 allokiert. Auf die gleiche Weise wie in der ersten Ausführungsform wird in der vorliegenden Ausführungsform, wie oben beschrieben, eine Allokierung einer bearbeiteten globalen Variable durchgeführt, wohingegen eine Adresse, die einer unbearbeiteten globalen Variable zugewiesen ist, beibehalten wird.
  • „REAL2INT“ wird in der vorliegenden Ausführungsform anstelle von „kopieren“ in 11 der ersten Ausführungsform unmittelbar nach „schreiben“ eingeführt; und „INT2REAL“ wird in der vorliegenden Ausführungsform anstelle von „kopieren“ in 11 der ersten Ausführungsform unmittelbar vor „lesen“ eingefügt.
  • Aufgrund von „REAL2INT“ wird der Wert, der als Typ REAL durch „schreiben“ an die Speicheradresse Ae, welche von dem Ausführungsprogramm EP53 referenziert wird, zu schreiben ist, mit dem Wert vom Typ INT an der Speicheradresse Aa, welcher von dem Ausführungsprogramm EQ51 referenziert wird, synchronisiert (s3). Das heißt, aufgrund von „REAL2INT“ wird der Wert an der Speicheradresse Ae kopiert und der Datentyp wird konvertiert und danach wird der Wert mit dem konvertierten Datentyp an die Speicheradresse Aa geschrieben.
  • Aufgrund von „INT2REAL“ wird der Wert, der als der Typ INT durch „lesen“ an der Speicheradresse Aa, welche durch das Ausführungsprogramm EQ51 referenziert wird, zu lesen ist, mit dem Wert vom Typ REAL an der Speicheradresse Ae, welche durch das Ausführungsprogramm EP53 referenziert wird, synchronisiert (s4). Das heißt, aufgrund von „INT2REAL“ wird der Wert an der Speicheradresse Aa kopiert und der Datentyp wird konvertiert und danach wird der Wert mit dem konvertierten Datentyp an die Speicheradresse Ae geschrieben.
  • Anweisungen zum Durchführen einer Datentyp-Konvertierungen „REAL2INT“ und „INT2REAL“, welche in der vorliegenden Ausführungsform als Beispiele gezeigt sind, können jegliche Anweisungen sein, solange die Anweisungen mit dem für ein Ablaufprogramm verfügbaren Datentyp und mit der Architektur der SPS 20 kompatibel sind.
  • Wie oben beschrieben, kann in der zweiten Ausführungsform ein Nutzer zwischen der ersten Option und der zweiten Option unter Verwendung der Kompilieroption 41 wählen. Wenn die Kompilierung mit der zweiten Option durchgeführt wird, wird der Wert, der an der Speicheradresse Aa, die einer unbearbeiteten globalen Variable zugewiesen ist, gehalten wird, mit dem Wert, der an der Speicheradresse Ae, die einer bearbeiteten globalen Variable zugewiesen ist, gehalten wird, durch eine Anweisung zum Durchführen einer Datentyp-Konvertierung synchronisiert. Aufgrund dieser Operation kann das unbearbeitete Ablaufprogramm 111Q immer noch von dem zu kompilierenden Ziel ausgeschlossen werden, selbst wenn Datentypen einer unbearbeiteten globalen Variable und einer bearbeiteten globalen Variable unterschiedliche Datengrößen haben. Dementsprechend kann die Prozesszeit reduziert werden, die zum Kompilieren von Ablaufprogrammen benötigt wird.
  • Dritte Ausführungsform.
  • Als Nächstes wird eine dritte Ausführungsform der vorliegenden Erfindung mit Bezug zu 16 beschrieben. In der dritten Ausführungsform kompiliert ein bestimmtes Programmiergerät ein bestimmtes Ausführungsprogramm, wenn eine Vielzahl von Programmiergeräten mit der SPS 20 verbunden ist.
  • 16 ist ein Blockdiagramm, welches eine Konfiguration eines Programmiersystems gemäß der dritten Ausführungsform zeigt. Von den jeweiligen Bestandteilen in 16 sind Bestandteile, die die gleichen Funktionen wie jene des Programmiergeräts 10X gemäß der ersten Ausführungsform, gezeigt in 1, realisieren, mit den gleichen Bezugszeichen bezeichnet und eine redundante Beschreibung wird ausgelassen.
  • Ein Programmiersystem 1, welches ein Programmierungsunterstützungssystem ist, umfasst Programmiergeräte 10A und 10B und die SPS 20. Die Programmiergeräte 10A und 10B haben die gleichen Funktionen wie jene des Programmiergeräts 10X. Wenigstens eines der Programmiergeräte 10A und 10B kann die gleichen Funktionen wie jene des Programmiergeräts 10Y haben. Die Programmiergeräte 10A und 10B sind mit der SPS 20 verbunden und können daher über die SPS 20 Information aneinander übertragen und voneinander empfangen. Es ist auch erlaubt, dass die Programmiergeräte 10A und 10B direkt miteinander verbunden sind oder über ein Gerät verbunden sind, welches von der SPS 20 verschieden ist.
  • Das Programmiersystem 1 kopiert die Gruppe 36X von globalen Variablen und die Speicherallokierungsinformation 15, welche durch das Programmiergerät 10A erzeugt wurden, unter Verwendung eines Verfahrens (1-a) oder (1-b), welche später beschrieben werden, zu dem Programmiergerät 10B. Die Gruppe 36X von globalen Variablen, welche von dem Programmiergerät 10A in das Programmiergerät 10B kopiert wird, ist beispielsweise die Deklaration 361 für globale Variablen. Die Speicherallokierungsinformation 15, welcher von dem Programmiergerät 10A in das Programmiergerät 10B kopiert wird, umfasst eine zugewiesene Speicheradresse und eine Information, welche ein referenzierendes Programm angibt. Zusätzlich zu den in 5 beschriebenen Einträgen hat das Programmiergerät 10A eine Information, welche angibt, dass die Speicherallokierungsinformation 15 von dem Programmiergerät 10A erzeugt wurde, und welche in der Speicherallokierungsinformation 15 in Assoziation mit einer globalen Variable gespeichert ist.
  • (1-a)
  • Das Programmiergerät 10A überträgt an das Programmiergerät 10B eine Datei, in welcher die Gruppe 36X von globalen Variablen und die Speicherallokierungsinformation 15 gespeichert sind. In dem Programmiergerät 10B empfängt die Kommunikationseinheit 32, welche als eine Datenerhalteeinheit dient, die Datei von dem Programmiergerät 10A. Zu diesem Zeitpunkt ist es erlaubt, dass die Programmiergeräte 10A und 10B die Gruppe 36X von globalen Variablen und die Speicherallokierungsinformation 15 unter Verwendung eines beliebigen Verfahrens übertragen und empfangen, beispielsweise durch Kopieren der Information auf ein Netzwerk oder Senden einer E-Mail.
  • (1-b)
  • Das Programmiergerät 10A schreibt die Gruppe 36X von globalen Variablen und die Speicherallokierungsinformation 15 in die SPS 20. In dem Programmiergerät 10B liest die Kommunikationseinheit 32, welche als die Datenerhalteeinheit dient, aus der SPS 20 die Gruppe 36X von globalen Variablen und die Speicherallokierungsinformation 15, welche von dem Programmiergerät 10A in die SPS 20 geschrieben wurden. In diesem Fall sind in der SPS 20 die Gruppe 36X von globalen Variablen und die Speicherallokierungsinformation 15 immer noch gespeichert, selbst nachdem des Programmiergerät 10B die geschriebene Gruppe 36X von globalen Variablen und die Speicherallokierungsinformation 15 bereits gelesen hat.
  • Das Programmiergerät 10B verwendet die Gruppe 36X von globalen Variablen, welche unter Verwendung des oben beschriebenen Verfahrens (1-a) oder (1-b) kopiert wurden, zum Erzeugen eines Ablaufprogramms unter Verwendung eines Verfahrens (2-a) oder (2-b), welche unten beschrieben werden, und ändert gleichzeitig die Deklaration 361 für globale Variablen.
  • (2-a)
  • Das Programmiergerät 10B erzeugt ein Ablaufprogramm, indem das Bearbeitungsgerät 30 wenigstens einen Teil der Gruppe 35X von Ablaufprogrammen aktualisiert, die durch das Programmiergerät 10A erzeugt wurde. In diesem Fall verwenden die Programmiergeräte 10A und 10B das gleiche oben beschriebene Verfahren (1-a) oder (1-b) zum Kopieren der Gruppe 35X von Ablaufprogrammen, welche durch das Programmiergerät 10A erzeugt wurde, zu dem Programmiergerät 10B.
  • (2-b)
  • In dem Programmiergerät 10B erzeugt das Bearbeitungsgerät 30 ein neues Ablaufprogramm.
  • Das Bearbeitungsgerät 30 in dem Programmiergerät 10B ändert die Deklaration 361 für globale Variablen basierend auf dem Ablaufprogramm, welches unter Verwendung des Verfahrens (2-a) oder (2-b) erzeugt wird. Die Ausführungsprogramm-Erzeugungseinheit 16 in dem Programmiergerät 10B kompiliert das unter Verwendung des Verfahrens (2-a) oder (2-b) erzeugte Ablaufprogramm und die geänderte globale Variable. Unter der Voraussetzung, dass sich eine Speicheradresse, die einer existierenden globalen Variable zugewiesen ist, geändert hat, führt zu diesem Zeitpunkt die Ausführungsprogramm-Erzeugungseinheit 16 in dem Programmiergerät 10B eine Kompilierung unter Verwendung des selben Verfahrens wie in der ersten Ausführungsform oder der zweiten Ausführungsform durch. Das heißt, während die ursprüngliche Speicheradresse beibehalten wird, fügt die Ausführungsprogramm-Erzeugungseinheit 16 in dem Programmiergerät 10B eine Anweisung zum Synchronisieren der Werte der globalen Variable zwischen der ursprünglichen und der hinzugefügten Speicheradresse ein und erzeugt das Ausführungsprogramm EP. Zu diesem Zeitpunkt aktualisiert die Speicherallokierungseinheit 14 in dem Programmiergerät 10B die Speicherallokierungsinformation 15.
  • In dem Programmiersystem 1 wird die Verarbeitung wie oben beschrieben so durchgeführt, dass das Programmiergerät 10B die Verarbeitung durchführen kann, ohne dabei das Programmiergerät 10A zu beeinflussen. Insbesondere kann das Programmiergerät 10B die Verarbeitung, beispielsweise das Ändern oder Erzeugen von Ablaufprogrammen, durchführen, ohne das Programmiergerät 10A zu beeinflussen. Dies eliminiert die Notwendigkeit der Kompilierung in dem Programmiergerät 10A. Das Programmiersystem 1 kann daher die Kompilierungsprozessdauer reduzieren. Zum Beispiel, wenn eine Kompilierung lediglich von dem Programmiergerät 10B durchgeführt wird, wird die benötigte Gesamtkompilierdauer im Vergleich zu dem Fall reduziert, in welchem die Kompilierung sowohl von dem Programmiergerät 10A als auch von dem Programmiergerät 10B durchgeführt wird.
  • Ein Operationsbeispiel des Programmiersystems 1 wird beschrieben. Es wird angenommen, dass die Deklaration 361 für globale Variablen, gezeigt in 3, in beiden Programmiergeräten 10A und 10B vorliegt und dass das in 4 gezeigte Ablaufprogramm 111P nur in dem Programmiergerät 10B vorliegt, wohingegen das in 4 gezeigte Ablaufprogramm 111Q nur in dem Programmiergerät 10A vorliegt. Mit dieser Annahme gibt es Fälle, in denen nur das Programmiergerät 10B die Deklaration 361 für globale Variablen auf die in 7 gezeigte Deklaration 362 für globale Variablen ändern kann und gleichzeitig das Ablaufprogramm 111P auf das in 8 gezeigte Ablaufprogramm 112P ändern kann. In solchen Fällen führt lediglich das Programmiergerät 10B eine Kompilierung und ein Schreiben in die SPS 20 durch, wohingegen das Programmiergerät 10A weder eine Kompilierung noch ein Schreiben in die SPS 20 durchführt. Dies bringt die SPS 20 in den in 11 gezeigten Zustand.
  • Wie oben beschrieben, führt in der dritten Ausführungsform das Programmiergerät 10B die Verarbeitung, beispielsweise das Ändern oder Erzeugen von Ablaufprogrammen, durch, ohne das Programmiergerät 10A zu beeinflussen. Dies eliminiert die Notwendigkeit des Kompilierens in dem Programmiergerät 10A. Hierdurch kann das Programmiersystem 1 die Kompilierungsprozessdauer reduzieren.
  • Eine Hardwarekonfiguration der Programmiergeräte 10X und 10Y wird nachfolgend beschrieben. Weil beide Programmiergeräte 10X und 10Y eine identische Hardwarekonfiguration haben, wird nachfolgend lediglich die Hardwarekonfiguration des Programmiergeräts 10X beschrieben.
  • 17 ist ein Diagramm, welches ein Beispiel der Hardwarekonfiguration des Programmiergeräts gemäß der ersten bis dritten Ausführungsform zeigt. Das Programmiergerät 10X kann durch eine Steuerschaltung 300, gezeigt in 17, implementiert sein, das heißt, durch einen Prozessor 301, einen Speicher 302, ein Kommunikationsgerät 304 und ein Eingabegerät 303.
  • Der Prozessor 301 ist beispielsweise eine CPU (Zentrale Prozessierungseinheit, welche auch als „Verarbeitungsgerät“, „Rechengerät“, „Mikroprozessor“, „Mikrocomputer“, „Prozessor“ oder „DSP“ bezeichnet wird) oder ein hochintegriertes System. Der Speicher 302 ist beispielsweise ein RAM (Random Access Memory) oder ein ROM (Read Only Memory). Das Eingabegerät 303 ist beispielsweise eine Tastatur, eine Maus oder ein Touch-Pad. Das Kommunikationsgerät 304 implementiert die Funktion der Kommunikationseinheit 32.
  • Das Programmiergerät 10X wird durch den Prozessor 301 implementiert, welcher aus dem Speicher 302 den Compiler 11X und ein Bearbeitungsprogramm liest, welches das Bearbeitungsgerät 30 dazu veranlasst, zu arbeiten, und den Compiler 11X und das Bearbeitungsprogramm ausführt. Der Compiler 11X, welcher ein Kompilierprogramm ist, wird auch so betrachtet, dass er einen Computer dazu veranlasst, die Prozeduren oder Verfahren der Referenzierungszusammenhang-Verwaltungseinheit 12, der Speicherallokierungseinheit 14, der Programmauswahleinheit 17 und der Ausführungsprogramm-Erzeugungseinheit 16 auszuführen. Das Bearbeitungsprogramm wird auch so betrachtet, dass es einen Computer dazu veranlasst, die Prozedur oder das Verfahren des Bearbeitungsgeräts 30 auszuführen. Der Speicher 302 dient auch als flüchtiger Speicher, welcher von dem Prozessor 301 dazu verwendet wird, diverse Arten von Prozessen durchzuführen.
  • Einerseits wird der Compiler 11X von dem Prozessor 301 ausgeführt, andererseits ist es auch erlaubt, dass der Compiler 11X durch ein Computerprogrammprodukt implementiert ist, welches ein Speichermedium ist, welches den Compiler 11X darin speichert. In diesem Fall ist das Speichermedium beispielsweise ein nicht-flüchtiges computerlesbares Medium, auf welchem der Compiler 11X gespeichert ist. Das von dem Prozessor 301 ausgeführte Bearbeitungsprogramm kann durch ein Computerprogrammprodukt implementiert sein, welches ein Speichermedium ist, auf welchem das Bearbeitungsprogramm gespeichert ist. In diesem Fall ist das Speichermedium beispielsweise ein nicht-flüchtiges computerlesbares Medium, auf welchem das Bearbeitungsprogramm gespeichert ist.
  • Hinsichtlich der Funktionen des Programmiergeräts 10X ist es auch möglich, dass ein Teil der Funktionen durch dedizierte Hardware realisiert ist und ein Teil davon durch Software oder Firmware realisiert ist.
  • Die in den obigen Ausführungsformen beschriebenen Konfigurationen sind lediglich Beispiele des Inhalts der vorliegenden Erfindung. Die Konfigurationen können mit anderen bekannten Techniken kombiniert werden und ein Teil jeder Konfiguration kann ausgelassen oder modifiziert werden, ohne den Umfang der vorliegenden Erfindung zu verlassen.
  • Bezugszeichenliste
  • 1
    Programmiersystem,
    10A, 10B, 10X, 10Y
    Programmiergerät,
    11X, 11Y
    Compiler,
    12
    Referenzierungszusammenhang-Verwaltungseinheit,
    13
    Referenzierungszusammenhangsinformation,
    14
    Speicherallokierungseinheit,
    15
    Speicherallokierungsinformation,
    16
    Ausführungsprogramm-Erzeugungseinheit,
    17
    Programmauswahleinheit,
    18
    Kompilieroption-Bestimmungseinheit,
    20
    SPS,
    21
    Programmspeicher,
    22
    Kommunikationseinheit,
    23
    Programmausführungseinheit,
    24
    Datenspeicher,
    25
    nicht-flüchtiger Datenspeicher,
    30
    Bearbeitungsgerät,
    31
    Ausführungsprogramm,
    32
    Kommunikationseinheit,
    35X
    Gruppe von Ablaufprogrammen,
    36X
    Gruppe von globalen Variablen,
    41
    Kompilieroption,
    111P, 111Q, 112P, P, Q
    Ablaufprogramm,
    151, 152
    Speicherallokierungsinformation,
    310
    Programmspeichereinheit,
    361 bis 363
    Deklaration für globale Variablen,
    Aa, Ab, Ac, Ad, Ae
    Speicheradresse,
    EP51 bis EP53, EQ51
    Ausführungsprogramm.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • JP 2002149421 [0005]

Claims (10)

  1. Compiler, welcher einen Computer veranlasst, einen Prozess des Kompilierens eines Ablaufprogramms, welches eine Deklaration einer globalen Variable umfasst, und des Erzeugens eines Ausführungsprogramms, welches durch ein Steuergerät auszuführen ist, durchzuführen, wobei, wenn sich zwischen einem Zeitpunkt vor einem Bearbeiten einer Deklaration der globalen Variable und einem Zeitpunkt nach dem Bearbeiten eine Änderung an einer der globalen Variable zugewiesenen Speicheradresse in dem Steuergerät ergibt, der Compiler den Computer veranlasst, einen Prozess des Implementierens eines Ausführungsbefehls, gemäß welchem ein erster Wert, der an einer Speicheradresse gespeichert ist, die einer unbearbeiteten globalen Variable zugewiesen ist, mit einem zweiten Wert, der an einer Speicheradresse gespeichert ist, die einer bearbeiteten globalen Variable zugewiesen ist, synchronisiert wird, in ein Ausführungsprogramm durchzuführen, welches einem Ablaufprogramm entspricht, welches die bearbeitete globale Variable referenziert.
  2. Compiler nach Anspruch 1, wobei der Compiler basierend auf einer Änderung/Keine-Änderung-Information, welche angibt, dass die globale Variable und ein Ablaufprogramm, welches eine Deklaration der globalen Variable umfasst, geändert oder hinzugefügt wurden, dazu konfiguriert ist, ein Ablaufprogramm, welches die bearbeitete globale Variable referenziert und welches ein Ziel ist, in dem der Ausführungsbefehl implementiert wird, aus einer Gruppe von Ablaufprogrammen, welche eine Vielzahl von Ablaufprogrammen umfasst, auszuwählen.
  3. Compiler nach Anspruch 1 oder 2, wobei der Ausführungsbefehl aus einer einzigen Anweisung gebildet ist.
  4. Compiler nach Anspruch 1 oder 2, wobei der Ausführungsbefehl aus einer Vielzahl von Anweisungen gebildet ist.
  5. Compiler nach einem der Ansprüche 1 bis 4, wobei, wenn die unbearbeitete globale Variable und die bearbeitete globale Variable den selben Datentyp haben, der Compiler für den Ausführungsbefehl eine Kopieren-Anweisung verwendet, sodass der zweite Wert kopiert und an eine Speicheradresse, die der unbearbeiteten globalen Variable zugewiesen ist, geschrieben wird oder sodass der erste Wert kopiert und an eine Speicheradresse, die der bearbeiteten globalen Variable zugewiesen ist, geschrieben wird, wodurch der zweite Wert mit dem ersten Wert synchronisiert wird.
  6. Compiler nach einem der Ansprüche 1 bis 4, wobei, wenn die unbearbeitete globale Variable und die bearbeitete globale Variable unterschiedliche Datentypen haben, der Compiler für den Ausführungsbefehl eine Anweisung des Konvertierens eines Datentyps und des Schreibens eines datentypkonvertierten Werts verwendet, sodass der zweite Wert kopiert und danach ein Datentyp des zweiten Werts, der an eine Speicheradresse zu schreiben ist, die der unbearbeiteten globalen Variable zugewiesen ist, konvertiert wird oder sodass der erste Wert kopiert und danach ein Datentyp des ersten Werts, der an eine Speicheradresse zu schreiben ist, die der bearbeiteten globalen Variable zugewiesen ist, konvertiert wird, wodurch der zweite Wert mit dem ersten Wert synchronisiert wird.
  7. Programmierungsunterstützungsgerät, umfassend: den Compiler nach Anspruch 1; und ein Bearbeitungsgerät zum Bearbeiten der globalen Variable und eines Ablaufprogramms, welches eine Deklaration der globalen Variable umfasst, gemäß Anweisungen von einem Nutzer, welches dazu konfiguriert ist, ein Ablaufprogramm, welches die bearbeitete globale Variable referenziert und ein Ziel ist, in dem der Ausführungsbefehl implementiert wird, aus einer Gruppe von Ablaufprogrammen, welche eine Vielzahl von Ablaufprogrammen umfasst, gemäß Anweisungen von einem Nutzer auszuwählen.
  8. Programmierungsunterstützungsgerät, umfassend einen Compiler zum Kompilieren eines Ablaufprogramms, welches eine Deklaration einer globalen Variable umfasst, und zum Erzeugen eines Ausführungsprogramms, welches durch ein Steuergerät auszuführen ist, wobei das Programmierungsunterstützungsgerät umfasst: eine Datenerhalteeinheit zum Erhalten der globalen Variable, die von einem von dem Programmierungsunterstützungsgerät separaten Programmierungsunterstützungsgerät deklariert wurde, und einer Speicheradresse in dem Steuergerät, die der globalen Variable zugewiesen ist, wobei, wenn sich zwischen einem Zeitpunkt vor einem Bearbeiten einer Deklaration der globalen Variable und einem Zeitpunkt nach dem Bearbeiten eine Änderung an einer der globalen Variable zugewiesenen Speicheradresse in dem Steuergerät ergibt, der Compiler einen Ausführungsbefehl, gemäß welchem ein erster Wert, der an einer Speicheradresse gespeichert ist, die einer unbearbeiteten globalen Variable zugewiesen ist, mit einem zweiten Wert, der an einer Speicheradresse gespeichert ist, die einer bearbeiteten globalen Variable zugewiesen ist, synchronisiert wird, in ein Ausführungsprogramm implementiert, welches einem Ablaufprogramm entspricht, welches die bearbeitete globale Variable referenziert.
  9. Programmierungsunterstützungsgerät nach Anspruch 8, wobei die Datenerhalteeinheit die globale Variable und eine Speicheradresse, die der globalen Variable zugewiesen ist, die in einem Speicher in dem Steuergerät allokiert ist, von dem separaten Programmierungsunterstützungsgerät empfängt.
  10. Programmierungsunterstützungsgerät nach Anspruch 8, wobei die Datenerhalteeinheit die globale Variable und eine Speicheradresse, die der globalen Variable zugewiesen ist, die in einem Speicher in dem Steuergerät allokiert ist, aus dem Steuergerät liest, in welches ein Ausführungsprogramm geschrieben wurde, wobei das Ausführungsprogramm von dem separaten Programmierungsunterstützungsgerät erzeugt wurde.
DE112018000198.9T 2018-05-11 2018-05-11 Compiler und Programmierungsunterstützungsgerät Pending DE112018000198T5 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2018/018352 WO2019215919A1 (ja) 2018-05-11 2018-05-11 コンパイラおよびプログラミング支援装置

Publications (1)

Publication Number Publication Date
DE112018000198T5 true DE112018000198T5 (de) 2019-12-24

Family

ID=65020495

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112018000198.9T Pending DE112018000198T5 (de) 2018-05-11 2018-05-11 Compiler und Programmierungsunterstützungsgerät

Country Status (5)

Country Link
US (1) US10802808B2 (de)
JP (1) JP6452924B1 (de)
CN (1) CN110720081B (de)
DE (1) DE112018000198T5 (de)
WO (1) WO2019215919A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220155746A1 (en) * 2019-04-16 2022-05-19 Mitsubishi Electric Corporation Program creation support device, program creation support method, and storage medium

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002149421A (ja) 2000-11-15 2002-05-24 Denso Corp 情報処理装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5790861A (en) * 1995-07-07 1998-08-04 Sun Microsystems, Inc. Method and apparatus for generating executable code from object-oriented C++ source code
JP2000284815A (ja) * 1999-03-30 2000-10-13 Fuji Electric Co Ltd プログラム作成装置
JP2001290656A (ja) * 2000-04-07 2001-10-19 Hitachi Ltd 差分コンパイル方式
CA2321016A1 (en) * 2000-09-27 2002-03-27 Ibm Canada Limited-Ibm Canada Limitee Interprocedural dead store elimination
WO2008102426A1 (ja) * 2007-02-19 2008-08-28 Mitsubishi Electric Corporation プログラマブルコントローラの周辺装置、置換方法およびプログラム
US8381174B2 (en) * 2007-10-31 2013-02-19 National Instruments Corporation Global variable structure in a graphical program
JP4957853B1 (ja) * 2011-03-15 2012-06-20 オムロン株式会社 Plcのcpuユニット、plc用のシステムプログラムおよびplc用のシステムプログラムを格納した記録媒体
JP5099251B1 (ja) 2011-07-15 2012-12-19 オムロン株式会社 Plcのcpuユニット、plc用のシステムプログラム、plc用のシステムプログラムを格納した記録媒体、plcシステム、plcサポート装置、plcサポートプログラム、および、plcサポートプログラムを格納した記録媒体
DE112012006107B4 (de) * 2012-03-26 2015-12-03 Mitsubishi Electric Corp. Sequenzprogramm-Fehlerbehebungs-Hilfsvorrichtung
JP6205934B2 (ja) * 2013-07-18 2017-10-04 富士電機株式会社 プログラマブルコントローラシステム、その支援装置、プログラム
JP6292096B2 (ja) * 2014-04-24 2018-03-14 富士電機株式会社 プログラマブルコントローラシステム、その支援装置
US10353679B2 (en) * 2014-10-31 2019-07-16 Microsoft Technology Licensing, Llc. Collecting profile data for modified global variables
JP2017142767A (ja) * 2016-02-09 2017-08-17 富士電機株式会社 コントローラシステム、変数連携支援装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002149421A (ja) 2000-11-15 2002-05-24 Denso Corp 情報処理装置

Also Published As

Publication number Publication date
WO2019215919A1 (ja) 2019-11-14
JPWO2019215919A1 (ja) 2020-05-28
CN110720081A (zh) 2020-01-21
US10802808B2 (en) 2020-10-13
JP6452924B1 (ja) 2019-01-16
CN110720081B (zh) 2022-05-03
US20200264854A1 (en) 2020-08-20

Similar Documents

Publication Publication Date Title
DE112012000303B4 (de) Dynamische binäre Optimierung
DE68928848T2 (de) Multi-Prozessor-Rechnersystem mit prozessunabhängiger Adressierung von Kommunikationsregistern
DE69230450T2 (de) Programmverarbeitungssystem und -verfahren
DE68926345T2 (de) Datenverarbeitungsnetzwerk
DE102005040075A1 (de) Dynamisches Verbinden von Modulen in einer Vorbetriebssystemumgebung
DE69128571T2 (de) Modulares Expertensystem und Verfahren zur Modularisierung einer Menge von Regeln eines Expertensystems
EP1738257B1 (de) Verfahren zum vermeiden von dateninkonsistenz zwischen zugriffen verschiedener funktionen einer anwendung auf eine globale variable in einer datenverarbeitungsanlage
DE112012000693T5 (de) Ausführen einer Vielzahl von Instanzen einer Anwendung
DE112007003298T5 (de) Periphere Vorrichtung einer programmierbaren Steuerung, Verfahren zur Variablensubstitution und Computerprogrammprodukt dafür
DE10048941A1 (de) Zeitdiagramm-Compiler und Laufzeitumgebung für die interaktive Erzeugung von ausführbaren Testprogrammen zur Logiküberprüfung
DE102018115422A1 (de) Programmgenerierungsvorrichtung
DE112018000198T5 (de) Compiler und Programmierungsunterstützungsgerät
DE10256990A1 (de) Programmcodegenerator und Programm
DE69328664T2 (de) Verfahren und Anordnung zur Zusammenbindung von Objekten
DE69329007T2 (de) Kompilierungsmechanismus für Simulationsmodelle
DE69132766T2 (de) Gatter-Adressierungssystem für eine Logiksimulationsmaschine
EP4055473B1 (de) Verfahren zum aktualisieren eines steuerprogramms eines automatisierungssystems mit datenmigration eines programmzustands des steuerprogramms
DE102019128206B4 (de) Verfahren und Vorrichtung zur statischen Speicherverwaltungsoptimierung bei integrierten Mehrkernprozessoren
EP4055472B1 (de) Verfahren zur datenmigration eines zeigerelements im zuge einer datenmigration eines programmzustands eines steuerprogramms eines automatisierungssystems
DE102017007022A1 (de) Programmierbare Steuervorrichtung
DE102022125524A1 (de) Verfahren zum Entwerfen von Maschinensystemen
WO1991019251A1 (de) Verfahren zur bearbeitung eines benutzerprogramms auf einem parallelrechnersystem
DE10128959A1 (de) Addon-Mechanismus für ein Steuerungssystem basierend auf einem Typdatenfeld
DE102016000213A1 (de) Steuersystem mit Funktion zur Optimierung der Steuersoftware einer numerischen Steuerung gemäß einem Bearbeitungsprogramm
DE102023212581A1 (de) Software-hardware-schnittstellenschutz

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R006 Appeal filed
R008 Case pending at federal patent court