In
speicherprogrammierbaren Steuerungen (SPS) kommunizieren Kommunikationspartner,
z. B. Kommunikationsbausteine, über
Kommunikationsverbindungen miteinander. Ein Kommunikationspartner
löst einen
Kommunikationsauftrag beispielsweise aufgrund eines Prozessereignisses
aus. Beispielsweise werden Nutzdaten von Sensoren oder Messeinrichtungen
zu einem anderen entfernten Kommunikationspartner gesendet, bei
dem die Nutzdaten weiterverarbeitet werden. Der sendende Kommunikationspartner
kennt für
die Adressierung des anderen Kommunikationspartners nur eine Adressreferenz,
beispielsweise eine Identifikationsnummer, jedoch nicht die wirkliche
physische oder logische Adresse. Die empfangenden Kommunikationspartner
können
unterschiedlichste Aufgaben übernehmen,
beispielsweise ein Aktor, der in einen Prozess eingreift, oder eine
Recheneinheit bzw. Programmbaustein, der bzw. dem neue Werte zur
Berechnung neuer Prozessgrößen übermittelt
werden. Das System, in dem diese beiden Kommunikationspartner kommunizieren,
muss anhand dieser Adressreferenz den Kommunikationsauftrag an den
richtigen Kommunikationspartner weiterleiten.
Adressen
von Kommunikationspartnern werden in Speichern zur Adressverwaltung
abgelegt. Die Effizienz beim Zugriff auf diese Adressen wird einerseits
von der Ausführlichkeit
der Zugriffsliste und andererseits vom notwendigen Rechenaufwand
beeinflusst. Der Umfang der Zugriffsliste ist meist durch nur begrenzt
zur Verfügung
stehenden Speicher eingeschränkt.
Ebenso
sollte die zur Verfügung
stehende Rechenleistung nicht nur zur Verwaltung von Adresseinträgen benutzt
werden.
In
derartigen Systemen können
ohne weiteres 10000 Kommunikationspartner verwaltet werden. Diese
Kommunikationspartner können
Bedien- und Kontrollgeräte
oder einfach Steuergeräte
sein, ebenso können
Kommunikationspartner auch durch Programmbausteine beispielsweise
in einem Automatisierungssystem gebildet werden. Wenn ein empfangender
Kommunikationspartner mit entsprechender Adressreferenz, beispielsweise
in Form einer Identifikationsnummer, das erste Mal aufgerufen wird,
wird eine so genannte Instanz angelegt, die in einem Speicher abgespeichert
wird. Bei einem erneuten Zugriff auf diese Instanz muss dann nur
noch in dieser Zugriffsliste nachgeschaut werden, wie die wirkliche Adresse
des empfangenden Kommunikationspartners ist.
Zur
Zuordnung des Kommunikationsauftrags zu einer Empfangsinstanz werden
Adressparameter benutzt. Diese Adressparameter können einen sehr großen Wertebereich,
beispielsweise 32 Bit, einnehmen. Der Anwender bestimmt den Wert
der Adressreferenz bei der Programmierung, so dass dieser Wert der
Adressreferenz dem System erst beim Aufruf der Empfangsinstanz bekannt
wird, wodurch auch der Zeitpunkt der Bekanntgabe der Adressreferenz vom
Anwender bestimmt wird.
Die
sehr große
Anzahl von Instanzen erfordert unter Beibehaltung einer optimalen
Kommunikationsperformance eine optimale Suchstrategie, so dass die
Daten in den Kommunikationsaufträgen möglichst
schnell der zugehörigen
Empfangsinstanz zugeordnet werden können. Außerdem müssen in die Zugriffsliste neue
Instanzen eingefügt
werden oder andere Instanzen aus dem Automatisierungssystem entfernt
werden, beispielsweise wegen einer Änderung der Identifikationsnummer.
Dies erfordert Änderungen
in der wirklichen Adressierung, die in die Infrastruktur und in
die Suchstrategie eingebracht werden müssen. Je umfangreicher diese Änderungen
sind, desto mehr Rechen leistung wird beansprucht, wodurch sich die
Kommunikationsperformance extrem verschlechtern kann. Erschwerend kommt
bei dieser Problematik hinzu, dass der Speicherplatz nicht in unbegrenztem
Umfang zur Verfügung
steht oder nur mit hohen Kosten ausgeweitet werden kann. Ebenso
ist es möglich,
dass durch externe oder interne Prozessereignisse viele Kommunikationsaufträge gleichzeitig
ausgelöst
werden und die Instanzen dann in die Zugriffsliste einsortiert bzw. aufgefunden
werden müssen,
so dass auch hier entsprechende Effizienz erforderlich ist.
Zur
Lösung
dieses Problems ist es aus dem Stand der Technik bekannt, einen
indizierten Zugriff zu verwenden. Dazu wird mit einer Liste mit
den Adressparametern als Index auf die Empfangsinstanzen zugegriffen.
Dieses Verfahren ist sehr schnell. Da die Adressparameter jedoch über einen
Wertebereich von 232 verteilt sein können, wird
sehr viel Speicherplatz benötigt.
Jedem Wert eines Adressparameters würde die entsprechende Empfangsinstanz
zugeordnet werden, was einen Speicherplatzbedarf von etwa 17 GB
bei 10000 Instanzen erfordern würde,
wenn ein Zeiger auf die Empfangsinstanz mit 4 Byte verwendet wird.
Eine
weitere Möglichkeit
zur Lösung
dieses Problems bietet ein so genanntes binäres Halbierungsverfahren. Mit
diesem Verfahren wird eine sehr hohe Suchgeschwindigkeit erreicht.
Dies erfordert jedoch das Vorhandensein von Baumstrukturen, wodurch
auch dieses Verfahren speicherintensiv ist.
Eine
weitere Möglichkeit
besteht in der Anwendung eines linearen Halbierungsverfahrens, welches
auf einer monoton auf- bzw. absteigenden linearen Liste basiert.
Diese Liste bildet den Suchbereich und setzt sich aus Suchelementen
zusammen. Ein Suchelement enthält
in der Regel das Suchkriterium und einen Verweis in Form eines Index
oder Zeigers auf das zu suchende Objekt bzw. Instanz oder im obigen
Anwendungsfall auf die Adresse eines empfangenden Kommunika tionspartners.
Der hierzu benötigte
Speicher muss nur auf den Speicherbedarf der maximalen Anzahl der
Suchelemente dimensioniert werden. Der Speicherbedarf ist bei diesem
Verfahren niedriger als bei den oben beschriebenen Verfahren zur
Suche von Empfangsinstanzen. Nachteilig ist hier, dass zum Einsortieren
eines neuen Suchelements, durch Einfügen bzw. Herauslöschen einer neuen
Instanz in die Zugriffsliste, der Suchbereich auf- bzw. zugeschoben
werden muss, um eine monotone Sortierung zu ermöglichen. Dieses Verschieben benötigt neben
einer nicht zu vernachlässigenden Zeit
auch entsprechende Rechenleistung.
Eine
nächste
Möglichkeit
bietet der so genannte Hasch-Algorithmus, bei dem eine sortierte gekettete
Liste benötigt
wird. Beim Suchen wird dann nicht die gesamte Kette durchgesucht,
es wird immer nur in einem Kettenabschnitt gesucht. Auch hier ist der
Speicherplatzbedarf relativ hoch. Wegen der Wahlfreiheit bzgl. der
Definition der Identifikationsnummer ist die Definition eines Hasch-Algorithmus äußerst schwierig
und rechenintensiv.
Aus
der
EP 1 118 947 A1 ist
ein Verfahren zur Auflösung
von Namen in Netzwerkadressen bekannt. Diese werden aufgelöst, indem
auf so genannte Adresstabellen gemäß einer benutzerdefinierten, hierarchischen
Suchpräferenz
zugegriffen wird.
EP 0 594 196 B1 offenbart
ein Verfahren zur Durchführung
eines Adressnachschlagens für
eine N-Bit-Eingabeadresse in einem Paketdaten-Kommunikationssystem,
wobei Maßnahmen
vorgesehen sind, welche binäre
Suchvorgänge
beschleunigen.
Der
Erfindung liegt die Aufgabe zugrunde, ein Verfahren der eingangs
genannten Art anzugeben, mit welchem die Nachteile, wie Zeitbedarf
zum Auf- und Zuschieben der Liste und dafür notwendiger Rechenbedarf,
abgeschwächt
bzw. beseitigt werden.
Diese
Aufgabe wird durch die im kennzeichnenden Teil des Anspruchs 1 angegebenen
Maßnahmen
gelöst.
Es
ist erfindungsgemäß vorgesehen,
den Beginn des Suchbereichs nicht an den Anfang des linearen Gesamtspeichers
zu legen, sondern diesen in der Mitte des Gesamtspeichers zu platzieren.
Neueinträge,
deren Suchkriterien kleiner als das Suchkriterium des Suchelements
in der Mitte des Suchbereichs sind, werden in Richtung des Speicheranfangs einsortiert.
Neueinträge,
deren Suchkriterien größer als
das Suchkriterium des Suchelements in der Mitte des Suchbereichs
sind, werden in Richtung des Speicherendes einsortiert. Beim Herauslöschen von
Suchelementen wird vorzugsweise das Suchelement, das die Mitte des
Suchbereiches bestimmt, neu ermittelt.
Auf
diese Weise kann statistisch gesehen der Suchbereich halbiert werden,
so dass der Aufwand beim Einsortieren und Herauslöschen vorteilhaft
verkleinert wird.
In
einer vorteilhaften Ausgestaltung der Erfindung wird bei Überschreiten
einer vorgebbaren maximalen Suchelementeanzahl im Suchbereich der Suchbereich
mittels einer Strukturierung in gleich große Teilsuchbereiche aufgeteilt
und jedem Teilsuchbereich ein Verwaltungsbaustein zugeordnet, welcher
ein Suchkriterium enthält,
das beim Suchen eines Suchelements eine Selektierung der Teilsuchbereiche
ermöglicht.
Die Verwaltungsbausteine enthalten einen Wert, der Auskunft darüber gibt,
ob das gesuchte Suchelement in dem einen Teilsuchbereich enthalten
ist oder in dem anderen Teilsuchbereich. Die so entstandenen Teilsuchbereiche
werden in dem linearen Gesamtspeicher derart verschoben, dass jeder
Teilsuchbereich den gleichen Anteil des linearen Gesamtspeichers
zur Verfügung
hat. Es ist trotzdem möglich,
dass der eine Teilsuchbereich in den Speicherbereich des zweiten
Teilsuchbereichs hineinwächst,
wenn dieser Speicherbereich nicht vom zweiten Teilsuchbereich belegt
ist. Dadurch wird es ermöglicht,
die Suchstrategie auch für
große
Mengen von Suchelementen über
eine Baumstruktur von Verwaltungsbausteinen fortzuführen, wobei
der Aufwand zur Erzeugung der Verwaltungsbausteine bezüglich des
notwendigen Speicherplatzes gering ist. Bei einer Häufung von
Einsortierungen von Suchelementen in entsprechende Teilsuchbereiche
entwickelt sich die Baumstruktur mit den Verwaltungsbausteinen generisch.
In
einer weiteren vorteilhaften Ausgestaltung der Erfindung ist es
vorgesehen, eine vorgenommene Strukturierung wieder zurückzuführen, also
eine Restrukturierung durchzuführen,
wenn durch Herauslöschen
von Suchelementen aus der Zugriffsliste eine vorgebbare Anzahl von
Suchelementen unterschritten wird. Dabei ist es insbesondere vorteilhaft, den
Wert für
die Anzahl von Suchelementen für
eine Zusammenführung
von Teilsuchbereichen niedriger anzusetzen, als den Wert für die Anzahl
von Suchelementen, bei dem ein Suchbereich in Teilbereiche mit Verwaltungsbausteinen
aufgeteilt wird. Dadurch wird eine Strukturierungs-/Restrukturierungshysterese
erreicht. Durch die Restrukturierung wird bei geringer Anzahl von
Suchelementen der Verwaltungsaufwand durch die Verwaltungsbausteine
der Menge von Suchelementen angepasst und somit die Kommunikationsperformance
optimiert.
In
einer weiteren vorteilhaften Ausgestaltung der Erfindung ist es
vorgesehen, keine Strukturierung bzw. Restrukturierung trotz Überschreiten
der vorgegebenen Suchelementeanzahl vorzunehmen, wenn innerhalb
eines vorgebbaren Bereichs vom unteren bzw. oberen Ende des belegten
Speicherplatzes ein Suchelement aus dem Suchbereich einsortiert
bzw. gelöscht
wird. Dadurch wird ein für
die Strukturierung bzw. Restrukturierung notwendiger Rechenaufwand vermieden,
der deutlich größer als
der Rechenaufwand ist, der für
das Aufschieben der Zugriffsliste notwendig ist, um die Suchelemente
in dem Bereich einzusortieren.
In
einer weiteren vorteilhaften Ausgestaltung der Erfindung ist es
vorgesehen, beim Anlegen von Teilsuchbereichen die Größe des Speicherplatzes dem
dynamischen Wachstum der Teilsuchbereiche anzupassen. Falls das
System feststellt, dass die meisten Suchelemente in die obere Hälfte des
Suchbereichs einsortiert werden, bzw. feststellt, dass die obere
Hälfte
des Suchbereichs schneller als die untere Hälfte des Suchbereichs wächst, wird
beim Anlegen von Teilsuchbereichen der Speicherplatz für den oberen
Teilsuchbereich größer gewählt, als
der Speicherplatz für
den unteren Teilsuchbereich. Somit passt sich das System dynamisch
an das Anwachsen von Suchelementen in der Zugriffsliste an und vermeidet
somit eine baldige Restrukturierung, die wiederum Rechenaufwand
benötigt,
so dass somit Kommunikationsperformance optimiert wird. Ebenso können die
Werte für
die maximale bzw. minimale Anzahl von Suchelementen dem dynamischen
Wachstum des Suchbereichs bzw. der Teilsuchbereiche angepasst werden.
In
einer weiteren Ausgestaltung der Erfindung ist es von Vorteil, statt
einer Strukturierung den zur Verfügung stehenden linearen Gesamtspeicherbereich
zu vergrößern, falls
der Speicherplatz es zulässt,
wenn ein vorgebbarer Schwellwert für die Belegung des gesamten
Speicherbereiches erreicht wird oder von vornherein größer angelegt
wird. Da die Häufigkeit
von Restrukturierungen zunimmt, wenn der belegbare Speicherbereich
nahezu belegt ist, verhindert dieses geringfügige Vergrößern des belegbaren Speicherbereiches
häufige
Strukturierungen, so dass die Kommunikationsperformance auch unter
diesen Umständen
optimiert wird. Beispielsweise wird bei einer Belegung des Gesamtspeicherbereichs
von 90 % eine Vergrößerung um
10 % vorgenommen.
Die
Erfindung kann sowohl in einem linearen, zusammenhängenden
als auch in einem nicht zusammenhängenden, verteilten Gesamtspeicher
angewendet werden.
Befindet
sich ein Teilsuchbereich am Anfang bzw. am Ende des linearen Gesamtspeichers,
ist bei der Strukturierung die Wertigkeit des ersten bzw. des letzten
Suchelements des jeweiligen Teilsuchbereichs mit der Länge des
belegbaren Speichers des Teilsuchbereichs abzugleichen.
Eine
Zugriffsliste L ist in 2a dargestellt, in welcher ein
erster Suchbereich SB1 gespeichert ist. Die Zugriffsliste L mit
den Suchelementen SE wird in einem linearen Gesamtspeicher LGS gespeichert. Dabei
beginnt der erste Suchbereich SB1 in der Mitte des belegbaren Speichers
mit dem ersten Suchelement SE1. Ein Suchelement SE umfasst ein Suchkriterium
SK, beispielsweise eine Identifikationsnummer, und einen Verweis
in Form eines Zeigers oder eines Index auf die physische, physikalische
oder logische Adresse. Suchelemente SE, deren Suchkriterium SK[SE]
kleiner als das Suchkriterium des ersten Suchelementes SK1[SE1]
in der Mitte des ersten Suchbereichs SB1 ist, werden in die erste
Richtung R1 in die Zugriffsliste L einsortiert bzw. sind dort auffindbar.
Suchelemente SE, deren Suchkriterium SK[SE] größer als das Suchkriterium SK1[SE1]
des ersten Suchelementes SE1 in der Mitte des Suchbereichs SB1 ist,
werden in Richtung R2 in die Zugriffsliste L einsortiert. Ein Einsortieren
ist dann notwendig, wenn ein empfangender Kommunikationspartner das
erste Mal aufgerufen wird und somit seine physische bzw. physikalische
oder logische Adresse bekannt wird. Ein Herauslöschen ist dann notwendig, wenn
eine Identifikationsnummer geändert
wurde oder ein Kommunikationspartner aus dem System entfernt wurde.
Zum Einsortieren wird die Zugriffsliste L aufgeschoben und das einzusortierende
Suchelement an die entsprechende Stelle in der Zugriffsliste L einsortiert.
Beim Herauslöschen
wird das Suchelement aus der Zugriffsliste gelöscht und die Zugriffsliste
zusammengeschoben. Beim Herauslöschen
und Einsortieren wird das erste Suchelement SE1 neu bestimmt. Die
Zugriffsliste L dehnt sich durch das Einsortieren also in beide
Richtungen R1, R2 bis zum Speicheranfang SPA bzw. Speicherende SPE
des linearen Gesamtspeichers LGS aus, so dass sich das erste Suchelement
SE1 immer in der Mitte von dem letzten Suchelement SEmin im belegten
Speicher in die erste Richtung R1 und dem letzten Suchelement SEmax
im belegten Speicher in Richtung R2 befindet.
3 verdeutlicht
eine Strukturierung. Übersteigt
die Anzahl der Suchelemente SE in der Zugriffsliste eine maximale
Suchelementeanzahl, wird der Suchbereich in zwei Teilsuchbereiche
SB1.1 und SB1.2 aufgeteilt. Die Teilsuchbereiche SB1.1 und SB1.2
werden so verschoben, dass für
jeden Teilsuchbereich SB1.1, SB1.2 der gleiche belegbare lineare
Speicher blS zur Verfügung
steht. Für
den ersten Teilsuchbereich SB1.1 steht demnach der Speicherbereich
von der ersten oberen Begrenzung blS1.1.1 des belegbaren linearen
Speichers blS bis zur ersten unteren Begrenzung blS1.1.2 des belegbaren
linearen Speichers blS zur Verfügung
und für den
zweiten Teilsuchbereich SB1.2 steht der Speicherbereich von der
zweiten oberen Begrenzung blS1.2.1 des belegbaren linearen Speichers
bis zur zweiten unteren Begrenzung blS1.2.2 des belegbaren linearen
Speichers blS zur Verfügung.
Die Teilsuchbereiche SB1.1, SB1.2 können, nach dem gleichen Verfahren
wie in 2a gezeigt, in diese Speicherbereiche
hineinwachsen, sofern sie nicht von Suchelementen des jeweils anderen
Teilsuchbereichs belegt sind. Jedem Teilsuchbereich SB1.1, SB1.2
wird ein korrespondierender Verwaltungsbaustein VSB1.1 und VSB1.2
zugeordnet. In dem Root-Verwaltungsbaustein VSB1 ist ein Suchwert
abgelegt, der das Suchen in den Teilsuchbereichen SB1.1, SB1.2 ermöglicht,
z. B. ist das minimale Suchkriterium des zweiten Teilsuchbereiches SKmin[SB1.2]
oder das erste Suchkriterium des ersten Suchelements abgelegt. Weiter
kann in den Verwaltungsbausteinen die Mitte eines Teilsuch bereichs SB1.1,
SB1.2 vermerkt werden. Beim Einsortieren bzw. Auffinden von Suchelementen
wird anhand der Verwaltungsbausteine festgestellt, in welchem Teilsuchbereich
SB1.1, SB1.2 das Suchelement einsortiert bzw. gesucht werden muss.
Suchelemente, deren Suchkriterium kleiner als das im Root-Verwaltungsbaustein
VSB1 abgelegte minimale Suchkriterium des zweiten Teilsuchbereiches
SKmin[SB1.2] ist, werden in dem ersten Verwaltungsbaustein VSB1.1 verwaltet.
Suchelemente, deren Suchkriterium größer als das im Verwaltungsbaustein
VSB1 abgelegte minimale Suchkriterium des zweiten Teilsuchbereiches
SKmin[SB1.2] ist, werden in dem zweiten Verwaltungsbaustein VSB1.2
verwaltet. Auf diese Weise wird der Teilsuchbereich ermittelt, der
für ein
neues Suchelement oder für
das Auffinden eines bereits gespeicherten Suchelements relevant
ist.