Sie sind auf Seite 1von 484

PDL2 REL. 5.

5X

HANDBUCH FR PROGRAMMIERSPRACHE

PDL2 Anweisungen zum Programmieren der C3G Steuereinheit und von Robotics-Anwendungen.

00757137/D

3PD - 5.5X 01/0401

Die in diesem Handbuch enthaltenen Informationen sind Eigentum von COMAU SYSTEMS S.p.A. Auch auszugsweise Wiedergabe ohne vorherige schriftliche Genehmigung von COMAU SYSTEMS its verboten. COMAU SYSTEMS behlt sich das Recht vor, ohne Vorankndigung die Merkmale des in diesem Handbuch vorgestellen Products zu ndern. PRINTED IN ITALY - 04/2001 Copyright 2001 by COMAU SYSTEMS

AKTUALISIERUNGEN

AKTUALISIERUNGEN
In der vorliegenden Ausgabe des Handbuches sind, hinsichtlich der vorigen, technische Angaben gendert worden, weil das Produkt auf den neuesten Stand gebracht worden ist. Die genderte Teilen sind unten beschrieben. TITEL: HANDBUCH FR PROGRAMMIERSPRACHE ANDERUNG KAP. 01/0401 01/0401 01/0401 01/0401 01/0401 11 12 Deckblatt Rckseite Liste der Internen Routinen Liste der Vorbesetzen Variablen Inhalt THEMA 1; 36 39 3; 49 52 Alle SEITE Nr. OPERATION Ersetzen Ersetzen Ersetzen Ersetzen Ersetzen

01/0401

AKTUALISIERUNGEN

Diese Seite wurde absichtlich leer gelassen

01/0401

PDL2

SICHERHEITSVORSCHRIFTEN

VERANTWORTUNG
Der Einsetzer ist fr den Einsatz des Robotersystems in einen Produktions- oder Forschungsbereich, fr die Ausstellung der Konformittserklrung und die CE-Markierung der Anlage unter Einhaltung der Sicherheitsvorschriften der Maschinenrichtlinie verantwortlich. Die Firma COMAU SYSTEMS S.p.A. lehnt jegliche Verantwortung fr die unsachgeme oder falsche Verwendung des Robotersystems, fr den Einsatz nicht vorgeschriebener Ersatzteile und fr Eingriffe in Schaltkreise, Komponenten und in die Systemsoftware ab. Fr die Einhaltung dieser Sicherheitsvorschriften sind diejenigen verantwortlich, die die unter Punkt 3 angefhrten Aktivitten managen oder berwachen. Sie mssen sicherstellen, dass das autorisierte Personal die in diesem Dokument enthaltenen Vorschriften und die allgemein fr Robotersysteme anwendbaren Normen genau kennen und beachten. Bei Nichteinhaltung der Sicherheitsvorschriften knnen Personenverletzungen und Sachschden an der Steuereinheit verursacht werden.

SICHERHEITSVORSCHRIFTEN
1. 1.1 ZWECK Zweck dieser Sicherheitsvorschriften ist die Festlegung einer Reihe von Verhaltensmaregeln und Verpflichtungen, die beim Ausfhren der unter Punkt 3 genannten Ttigkeiten eingehalten werden mssen, um unter den fr das Personal, fr die Ausrstungen und fr die Umgebung erforderlichen Sicherheitsbedingungen zu arbeiten. BEGRIFFSBESTIMMUNG Robotersystem Als Robotersystem wird eine Funktionseinheit bezeichnet, die aus Steuereinheit, Roboter, tragbarem Programmiergert und/oder Notgert sowie eventuellen Optionen besteht. Geschtzter Raum Als geschtzter Raum wird ein durch Schutzschranken begrenzter Raum bezeichnet, der fr die Installation und die Arbeit des Roboters bestimmt ist. Befugtes Personal Als befugtes Personal werden jene Personen bezeichnet, die entsprechend geschult und befugt sind, die unter Punkt 3 genannten Ttigkeiten auszufhren. Leiter Als Leiter werden jene Personen bezeichnet, die als verantwortliches technisches Fachpersonal die Arbeit anderer Personen berwachen, ohne selbst direkt an der Durchfhrung der Arbeit teilzunehmen. Installation und Inbetriebnahme Die mechanische und elektrische Integrierung des Robotersystems in eine Produktionssttte oder in einen Forschungsraum unter Einhaltung der durch die Maschinenrichtlinie festgelegten Sicherheitsvorschriften wird als Installation bezeichnet. Die Inbetriebnahme ist die berprfung der Funktionstchtigkeit des installierten Systems. Programmierbetrieb Betriebsart unter der Kontrolle des Bedieners, bei der die automatische Funktionsweise ausgeschlossen ist und folgende Ttigkeiten mglich sind: handgesteuerte Bewegungen in den verschiedenen Modalitten, Programmierung von Arbeitszyklen bei reduzierter Geschwindigkeit, Erprobung des programmierten Zyklus bei reduzierter Geschwindigkeit und, falls zulssig, bei Arbeitsgeschwindigkeit. Automatikbetrieb Betriebsart, bei der der Roboter den programmierten Zyklus bei Arbeitsgeschwindigkeit innerhalb des geschtzten Raums automatisch ausfhrt, wobei die Schutzschranken geschlossen und mit dem Not-Aus-Schaltkreis verbunden sind. Start und Stop erfolgen vor Ort oder ferngesteuert.

2. 2.1

2.2

2.3

2.4

2.5

2.6

2.7

02/1299

SICHERHEITSVORSCHRIFTEN

SICHERHEITSVORSCHRIFTEN BEGRIFFSBESTIMMUNG - Fortsetzung 2.8

PDL2

SICHERHEITSVORSCHRIFTEN

Hand-Notbetrieb Betriebsart, bei der der Roboter im Strungsfall von Hand unter reduzierten Sicherheitsbedingungen unter der Kontrolle vom Bediener und bei geschlossenen Sicherheitsschranken bewegt werden kann. Auerbetriebnahme und Abbau Bei der Auerbetriebnahme wird das Robotersystem mechanisch und elektrisch aus einer Produktionssttte oder aus einem Forschungsraum beseitigt. Beim Abbau werden Bauteile des Robotersystems demoliert und entsorgt. Wartung und Instandhaltung Als Wartungs- und Instandhaltungsarbeiten werden jene Ttigkeiten bezeichnet, bei denen mechanische, elektrische oder Software-Bauteile oder Komponenten des Robotersystems in gewissen Zeitabstnden berprft bzw. ersetzt werden und bei denen die Ursache einer aufgetretenen Strung herausgefunden wird. Zweck dieser Ttigkeiten ist die Wiederherstellung der vollen Funktionstchtigkeit des Robotersystems. Einsetzer Als Einsetzer wird jene Person bezeichnet, die aufgrund ihrer beruflichen Stellung fr die Anwendung des Robotersystems verantwortlich ist. Falscher Gebrauch Wenn das System fr Zwecke verwendet wird, die auerhalb der in der technischen Dokumentation spezifizierten Grenzen liegen, wird es falsch gebraucht. Wirkungsbereich Als Wirkungsbereich eines Roboters wird die Hllflche des kinematischen Raums einschlielich der Werkzeuge bezeichnet. ANWENDBARKEIT Diese Vorschriften mssen bei der Ausfhrung folgender Ttigkeiten befolgt werden: Installation und Inbetriebnahme; Programmierbetrieb; Automatikbetrieb; Hand-Notbetrieb; Wartung und Instandhaltung. Auerbetriebnahme und Abbau;

2.9

2.10

2.11

2.12

2.13

3. 3.1

4. 4.1 4.1.1

BETRIEBSARTEN Installation und Inbetriebnahme Die Inbetriebnahme ist nur dann zulssig, wenn das Robotersystem in ein Produktionssystem oder einen Forschungsraum integriert ist, welche seinen Einsatz unter Sicherheitsbedingungen gewhrleisten. Die Installation und Inbetriebnahme des Systems ist nur autorisierten Mitarbeitern erlaubt. Die Installation und Inbetriebnahme des Systems ist nur in einem gesicherten Bereich erlaubt, der gro genug ist, um den Roboter und seine Ausrstungen aufzunehmen, ohne die Schranken zu berschreiten. Auerdem muss geprft werden, dass bei normalen Roboterbewegungen Zusammenste mit Gegenstnden im gesicherten Bereich (z.B. Tragsulen, Versorgungsleitungen usw.) vermieden werden. Wenn ntig ist der Arbeitsbereich des Roboters durch mechanische Endanschlge zu begrenzent.

4.1.2 4.1.3

02/1299

PDL2 BETRIEBSARTEN -Fortsetzung 4.1.4 4.1.5

SICHERHEITSVORSCHRIFTEN

Der Aufstellungsbereich des Roboters soll mglichst frei von Gegenstnden sein, die die Sicht verhindern oder einschrnken. Whrend der Installationsarbeiten sollen der Roboter und die Steuereinheit so bewegt werden, wie in der Gebrauchsanleitung fr die Produkte. Ist das Anheben erforderlich, dann soll dazu die Befestigung der Ringschrauben berprft werden. Das Anheben darf nur mit geeigneten Anschlagmitteln und Hebezeugen erfolgen. Der Roboter ist mit allen vorgesehenen Bolzen an der Sttzauflage festzuschrauben. Eventuell vorhandene Achsenbefestigungsbgel mssen entfernt werden und die richtige Befestigung der Werkzeuge, mit denen der Roboter ausgestattet ist, mu berprft werden. Es ist zu berprfen, ob die Schutzbleche des Roboters richtig befestigt und keine beweglichen oder lockeren Teile vorhanden sind. Die Unversehrtheit der Komponenten der Steuereinheit mu kontrolliert werden. Soll die Pneumatikanlage des Roboters an das Luftdrucknetz angeschlossen werden, mu die richtige Einstellung des Luftdruckwerts sorgfltig berprft werden. Eine falsche Druckeinstellung wirkt sich auf den Gewichtsausgleich aus und beeinflut die Ausfhrung der Roboterbewegungen. Auerdem, die Installation von Filtern vorsehen fr das eventuelle sich in der Anlage bildende Kondenswasser. Die Steuereinheit ist so zu installieren, da nur auerhalb des geschtzten Raums an der Steuertafel gearbeitet werden kann. Prfen, dass die Spannung der Netzversorgung mit derjenigen auf den Typenschildern der Versorgungstrafos genannten bereinstimmt. Vor elektrischem Anschluss der Steuereinheit sicherstellen, dass der Trennschalter auf dem Stromversorgungsnetz mit dem entsprechenden Schlssel in offener Position blockiert ist. Der Netztrennschalter muss mit der Steuereinheit durch ein vieradriges Kabel (3 Phasen + Erde) mit einen ausreichenden Querschnitt fr die installierte Leistung verbunden sein. Das Versorgungskabel muss durch die entsprechende Kabelfhrung in die Steuereinheit gefhrt werden. Den Erdungsleiter (PE) anschlieen und dann die Leistungsleiter mit dem Hauptschalter oder den vorbereiteten Klemmen der Steuereinheit verbinden. Die Schutzhaube auf dem Hauptschalter oder den Eingangsklemmen anbringen. Das Stromversorgungskabel mu an den Trenner des Energieversorgungsnetzes angeschlossen werden. Die Kontrolleinheit kann geliefert werden Innenbeleuchtung und die Servicesteckdose mit einem dreipoligen Kabel (2 Phasen + Erde) mit einem dem fr das Netz vorgesehenen Schutz entsprechenden Querschnitt an das Netz anschlieen. Dabei genauso und in derselben Reihenfolge wie bei Anschluss der Leistungsversorgung vorgehen. Den Erdleiter, die Leistungs- und Signalbertragungskabel zwischen Steuereinheit und Roboter anschlieen. Kontrollieren, da die Tr/-en der Steuereinheit mit dem Schlssel abgeschlossen sind. Ein falscher Anschlu der Verbinder kann permanente Schden an den Komponenten der Steuereinheit verursachen. Das C3G Plus lst intern die wichtigsten Sicherheitsverriegelungen aus (Schutztren, Einschalttaster usw.). Sollte es ntig sein, diese an vorbereitete Signale anzuschlieen, um zustzliche externe Schaltkreise zu bilden, achten Sie auf, da diese verwendeten Signale den Sicherheitsvorschriften entsprechen. Der Robotersystem-Integrator ist zustndig fr die Zuverlssigkeit der Verriegelungssignale (Not-Aus, Sicherheit der Schutztren usw.), die von der Transferstrae ausgehen.Bei falsch ausgefhrten, unvollstndigen oder fehlenden Verriegelungen kann die Systemsicherheit nicht gewhrleistet werden.

4.1.6 4.1.7 4.1.8

4.1.9

4.1.10 4.1.11 4.1.12 4.1.13 4.1.14 4.1.15

4.1.16 4.1.17

4.1.18 4.1.19 4.1.20 4.1.21

02/1299

SICHERHEITSVORSCHRIFTEN

SICHERHEITSVORSCHRIFTEN BETRIEBSARTEN -Fortsetzung 4.1.22

PDL2

SICHERHEITSVORSCHRIFTEN

Der durch die Schutzschranken ausgelste Anhalt fhrt den Roboterstillstand in unkontrollierter Weise herbei, wobei der Verlust der programmierten Bahn mglich ist. Zum Anhalten des Roboters mit gesteuerter Verzgerungsrampe wird empfohlen, die Verriegelungssignale so anzuschlieen, da vor Not-Aus ein Drive- Off-Kommando ausgelst wird.Beispiel: Das ffnen der Sicherheitssperren der Schutzschranken lst Remote Drive Off aus; beim ffnen der Schutzschranken wird Not-Aus geschaltet. Wenn eine Vorrichtung fr den kontrollierten Stop C3G-CSM (Controlled Stop Module) an dem Steuersystem installiert ist, fhrt der Not-Aus und/oder die ffnung der Schutztren in den Betriebsarten AUTO LOCAL und AUTO REMOTE zum kontrollierten Halt des Roboters (EN 60204-1, Halt der Kategorie 1). Unter diesen Umstnden erfolgt die Unterbrechung der Versorgung (ffnung des Leistungskontaktgebers) nach 1 Sekunde. Im Programmierzustand PROGRAMMING erfolgt die Unterbrechung der Versorgung unverzglich (EN 60204-1, Halt der Kategorie 0). Bei der Realisierung der Schutzschranken,, insbesondere wenn Lichtschranken verwendet werden, mu dieses Timing unbedingt bercksichtigt werden. Es ist sicherzustellen, da die Umgebungs- und Arbeitsbedingungen innerhalb der von den Betriebsanleitungen angegebenen Grenzen liegen. Die Kalibration ist mit grter Sorgfalt durchzufhren, Wie in der Gebrauchsanleitung fr das Produkt angegebenwie . Am Schlu der Kalibrationsarbeiten mu die Prfung der richtigen Maschinenlage erfolgen. Beim Laden oder berarbeiten der Systemsoftware (zum Beispiel nach dem Wechseln von Kartenbaugruppen) drfen nur Original-Disketten verwendet werden , die von der Firma COMAU SYSTEMS S.p.A. zusammen mit dem Roboter geliefert werden.Nach dem Laden soll zur Sicherheit immer ein Probezyklus auerhalb des geschtzten Raums durchgefhrt werden.Bei der Ladeprozedur der Systemsoftware mu die in der Betriebsanleitung enthaltene Beschreibung genau befolgt werden. Sicherstellen, dass die Schranken fr den gesicherten Bereich richtig positioniert sind Programmierbetrieb Der Roboter darf ausschlielich von befugtem Personal programmiert werden. Vor dem Programmieren mu der damit beauftragte Bediener das Robotersystem berprfen, um sicherzustellen, da keine ungewhnlichen und gefhrlichen Bedingungen vorhanden sind und sicherstellen, dass sich keine Personen im gesicherten Bereich aufhalten. Wenn mglich, soll die Programmierung auerhalb des geschtzten Raums erfolgen. Wenn innerhalb des gesicherten Bereichs gearbeitet werden muss, muss der Bediener von auerhalb des gesicherten Bereichs sicherstellen, dass alle ntigen Schutzeinrichtungen vorhanden sind und funktionieren, und insbesondere, dass das Programmierhandgert richtig arbeitet (reduzierte Geschwindigkeit. Zustimmungsschalter, Notausknopf usw.). Beim Programmieren darf der geschtzte Raum vom zustndigen Bediener nur mit dem tragbaren Terminal betreten werden. Beim Programmieren ist der Aufenthalt im geschtzten Raum nur dem fr das Programmieren zustndigen, mit dem tragbaren Terminal ausgersteten Bediener erlaubt.Falls die Anwesenheit eines zweiten Bedieners absolut erforderlich sein sollte, mu dieser eine weiter Sicherungseinrichtung Drei-Positionen-Sicherheitsvorrichtung bei sich fhren, die mit der Steuereinheit verbunden ist. Beim Programmieren mu der zustndige Bediener in einer solchen Entfernung vom Roboter bleiben, bei der er eventuell auftretenden, unvorhersehbaren Roboterbewegungen ausweichen kann. Er mu sich an einer solchen Stelle aufhalten, in der er nicht Gefahr luft, zwischen dem Roboter (Sulen, Schranken usw.) und den Strukturteilen oder beweglichen Roboterteilen eingeklemmt zu werden. Beim Programmieren mu der zustndige Bediener vermeiden, sich unter Roboterteilen aufzuhalten, die durch Schwerkraft sich nach unten oder oben verschieben knnen. Die Motoren mssen immer von einer Position aus eingeschaltet werden (Drive On), die sich auerhalb des Wirkungsbereichs des Roboters befindet. Dabei ist vorher immer sicherzustellen, da sich im betreffenden Bereich keine Personen aufhalten. Die Motoren sind dann eingeschaltet, wenn der entsprechende Maschinenzustand angezeigt wird. 02/1299

4.1.23

4.1.24 4.1.25

4.1.26

4.1.27 4.2 4.2.1 4.2.2

4.2.3 4.2.4

4.2.5 4.2.6

4.2.7

4.2.8 4.2.9

PDL2 Programmierbetrieb - Fortsetzung 4.2.10

SICHERHEITSVORSCHRIFTEN

Die Erprobung des programmierten Arbeitsablaufs bei Arbeitsgeschwindigkeit (Funktion nur auf Abruf) darf in einigen Situationen, bei denen eine Sichtkontrolle aus geringer Entfernung erforderlich ist und der Bediener daher im geschtzten Raum stehen mu, erst dann durchgefhrt werden, wenn ein kompletter Probezyklus mit reduzierter Geschwindigkeit stattgefunden hat. Die Probe mu aus Sicherheitsentfernung gesteuert werden. Bei der Programmierung mit dem tragbaren Terminal ist besondere Vorsicht geboten: Die Hardware- und Software- Sicherheiten sind dabei wirksam, aber die Roboterbewegungen unterstehen der Kontrolle des Bedieners. Bei der ersten Ausfhrung eines neuen Programms kann die Roboterbewegung in einer Bahn erfolgen, die nicht der vorgesehenen Bahn entspricht. Durch die nderung von Programmschritten (z.B. Versatz eines Schrittes von einem Punkt zu einem anderen des Flues, falsche Speicherung eines Schrittes, nderung der Roboterlage auerhalb der Bahn, die zwei Programmschritte verbindet) knnen Bewegungen entstehen, die vom Bediener bei der Programmerprobung nicht vorgesehen waren. In beiden Fllen ist mit Vorsicht auerhalb des Wirkungsbereichs des Roboters zu handeln. Automatikbetrieb Das Einschalten des Automatikbetriebs des Robotersystems ist ausschlielich befugtem Personal dann erlaubt, wenn die Schutzschranken geschlossen und elektrisch verriegelt sind, wie von den Sicherheitsvorschriften vorgeschrieben. Vor dem Einschalten des Automatikbetriebs mu der Bediener das Robotersystem und den geschtzten Raum berprfen, um sicherzustellen, da keine ungewhnlichen, gefhrlichen Bedingungen vorhanden sind.. Vor dem Einschalten des Automatikbetriebs mu der Bediener folgendes berprfen: Das Robotersystem darf sich nicht im Wartungs- oder Reparaturzustand befinden. Die Schutzschranken mssen richtig angeordnet sein. Es darf sich niemand innerhalb des geschtzten Raum aufhalten. Die Tren des Steuersystems mssen versperrt sein. Die Sicherheitseinrichtungen (Not-Aus, Sicherheiten der Schutzschranken) mssen funktionstchtig sein. Das tragbare Programmierterminal mu sich in seiner Aufnahme befinden (diese Bedingung wird auch von der Steuereinheit bei Auto-Remote gefordert).

4.2.11

4.2.12

4.3 4.3.1

4.3.2

4.3.3

4.3.4 4.4 4.4.1 4.4.2 4.4.3 4.4.4

Besondere Vorsicht ist bei der Wahl des automatischen, ferngesteuerten Zustands geboten, in dem die SPS automatisch Motoren einschalten und das Programm starten kann. Hand-Notbetrieb (Wo vorgesehen die manuelle Betriebsbedingung fr Notflle) Das Umschalten auf den Hand-Notbetrieb ist nur befugtem Personal erlaubt. Diese Betriebsart darf nur dann verwendet werden, wenn besondere Bedingungen des Robotersystems keine Handbewegungen bei der Programmierung zulassen. Der Hand-Notbetrieb soll mglichst von einer Position auerhalb des geschtzten Raums gesteuert werden wegen der Reduzierten Sicherheitsbedingungen. Es ist Aufgabe des Integrators des Robotersystems, einen geeigneten Sicherheitskreis zu realisieren, der dem Bediener erlaubt, den Roboter bei deaktivierten Sicherheitsschranken zu bewegen.In diesem Fall muss vor Ausfhren der manuellen Noteingriffe von auerhalb des gesicherten Bereichs geprft werden, dass die Sicherheitseinrichtungen und das Programmierhandgert, das hier als tragbare Notbedienungskonsole dient, in diesem Zustand funktionieren.

02/1299

SICHERHEITSVORSCHRIFTEN

SICHERHEITSVORSCHRIFTEN Hand-Notbetrieb - Fortsetzung 4.4.5

PDL2

SICHERHEITSVORSCHRIFTEN

Beim Hand-Notbetrieb mu mit grter Vorsicht und Umsicht gearbeitet werden. Man mu sich dabei immer auerhalb des Wirkungsbereiches des Roboters und seiner Werkzeuge aufhalten und insbesondere die Achsen beachten, die durch Schwerkraft herabfallen knnen. Der Bremsen jeder Roboterachse. Bei fehlendem Motorantrieb kann der Roboter mit der direkt an den Roboter angeschlossenen oder auf dem Roboter montierten Vorrichtung zum manuellen Lsen der Bremsen bewegt werden, die ein Deaktivieren der Bremse jeder einzelnen Achse erlaubt. In diesem Fall alle Sicherungseinrichtungen des Systems (einschl. Notaus und Zustimmungsschalter) ausgeschlossen. Falls die zu bewegenden Achsen aufgrund ihres Gewichts fallen knnen, sollten sie mit einem Seil umschlungen und an einem Kranwagen aufgehngt werden. Auerbetriebnahme und Abbau Die Auerbetriebnahme und der Abbau des Robotersystems drfen nur von befugtem Personal vorgenommen werden. Der Roboter mu in Transportlage gebracht werden. Falls vorgesehen, sind die Achsenbefestigungsbgel zu montieren. Vor Auerbetriebnahme sollte der Trennschalter des Netzes geffnet und in der Aus-Position mit dem betreffenden Schlssen blockiert werden, der dann abgezogen werden muss. Nachdem mit einen entsprechenden Instrument geprft wurde, dass die Klemmen ohne Spannung sind, das Versorgungskabel vom Trennschalter abnehmen. Dabei zuerst die Leistungsleiter und dann den Erdungsleiter entfernen. Das Leistungskabel vom Hauptschalter der Steuereinheit lsen und entfernen. Nach Blockieren des Trenners des Verteilungsnetzes in geffneter Stellung die Verbindung des Versorgungskabels fr die Innenbeleuchtung der Steuereinheit und Servicestecker (sofern diese Stromkreise von auen versorgt werden) lsen. und nachdem sichergestellt ist, dass keine Spannung anliegt. Dabei zuerst die Phasen, dann den Erdleiter abnehmen. Zuerst den Anschlu der Verbindungskabel zwischen den Robotern und der Steuereinheit, danach den Erdleiter lsen. Wenn vorhanden, Verbindung der Pneumatikanlage des Roboters mit dem Druckluftverteilernetz lsen. Sicherstellen, dass der Roboter richtig im Gleichgewicht ist, und wenn ntig richtig festzurren. Dann die Befestigungsbolzen des Roboters von der Halterung demontieren Den Roboter und die Steuereinheit aus dem Arbeitsbereich unter Einhaltung aller in den Betriebsanleitungen erteilten Vorschriften entfernen. Falls deren Anheben erforderlich ist, die Befestigung der Ringschrauben prfen und nur geeignete Anschlagmittel und Ausrstungen verwenden. Setzen Sie sich bitte vor dem Abbauen (Demontage, Demolition und Entsorgung) der Bauteile, aus denen das Robotersystem besteht, mit der Firma COMAU SYSTEMS S.p.A., oder mit einer Filiale in Verbindung, die Sie ber die richtige Vorgangsweise fr den entsprechenden Roboter- und Steuerungstyp unter Aufrechterhaltung von Sicherheit und Umweltschutz informieren wird. Bei der Abfallentsorgung mssen die in dem Land, in dem das Robotersystem aufgestellt ist, jeweils gltigen Gesetze eingehalten werden Wartung und Instandhaltung Die Arbeiten zur Wartung, Fehlersuche und Instandhaltung sind nur von befugtem Personal durchzufhren. Die Durchfhrung von Wartungs- und Instandhaltungsarbeiten mu mit einem Schild mit entsprechendem Hinweis angezeigt werden, das auf der Bedientafel der Steuereinheit anzubringen ist. Dieses Schild mu auch bei zeitweiser Unterbrechung der Wartungs- und Instandhaltungsarbeiten vorhanden sein und darf erst nach vollkommenem Abschlu dieser Arbeiten beseitigt werden. Bei der Durchfhrung von Arbeiten zur Wartung oder zum Ersatz von Bauteilen oder der Steuereinheit mu der Hauptschalter in geffneter Stellung mit einem Vorhngeschlo verriegelt werden.

4.4.6

4.5 4.5.1 4.5.2 4.5.3 4.5.4

4.5.5

4.5.6 4.5.7 4.5.8 4.5.9

4.5.10

4.5.11 4.6 4.6.1 4.6.2

4.6.3

02/1299

PDL2 Wartung und Instandhaltung - Fortsetzung 4.6.4

SICHERHEITSVORSCHRIFTEN

Auch wenn die Steuereinheit nicht versorgt wird (Hauptschalter offen), knnen Spannungen vorhanden sein, die von der Verbindung mit Peripheriegerten (z.B. Input/Output bei 24V dc oder 110V ac) oder mit externen Versorgungsquellen (z.B. innere Beleuchtungsanlage mit 110 V ac oder 220 V ac) stammen. Die externen Quellen mssen ausgeschaltet werden, wenn an den betreffenden Systemteilen gearbeitet wird. Platten, Schutzschirme, Gitter usw. drfen nur bei offenem, mit Vorhngeschlo gesichertem Hauptschalter entfernt werden. Fehlerhafte Komponenten mssen durch neue mit derselben Codenummer ersetzt werden. Eine Fehlersuche an der Steuereinheit muss soweit wie mglich von auerhalb des gesicherten Bereichs erfolgen. Wenn die Fehlersuche Arbeiten bei unter Strom stehender Steuereinheit erfordert, sind alle Sicherheitsmanahmen zu treffen, die von den Sicherheitsvorschriften fr das Arbeiten bei gefhrlichen Spannungen vorgeschrieben sind. Die Fehlersuche am Roboter mu bei ausgeschalteter Leistungsversorgung (Drive off) erfolgen. Am Abschlu der Wartungsarbeiten und der Fehlersuche mu der Betrieb der funktionsuntchtig gemachten Schutzeinrichtungen (Platten, Schutzschirme, Verriegelungen usw.) wiederhergestellt werden. Die Wartungs- und Instandhaltungsarbeiten sowie die Fehlersuche sind durch die berprfung der richtigen Funktionsweise des Robotersystems und aller seiner Sicherheiten abzuschlieen, wobei sich der Bediener auerhalb des geschtzten Raums aufhlt. Beim Laden der Software (z.B. nach Ersetzen von elektronischen Kartenbaugruppen) drfen nur Original-Disketten verwendet werden, die von der Firma COMAU SYSTEMS S.p.A. zusammen mit dem Roboter geliefert werden. Nach dem Laden soll zur Sicherheit immer ein Probezyklus auerhalb des geschtzten Raums durchgefhrt werden. Bei der Ladeprozedur der Systemsoftware mu die in der Betriebsanleitung enthaltene Beschreibung genau befolgt werden.

4.6.5 4.6.6 4.6.7 4.6.8

4.6.9 4.6.10

4.6.11

4.6.12

02/1299

SICHERHEITSVORSCHRIFTEN

SICHERHEITSVORSCHRIFTEN

PDL2

SICHERHEITSVORSCHRIFTEN

Diese Seite wurde absichtlich leer gelassen

02/1299

PDL2

EINLEITUNG

EINLEITUNG
SYMBOLE
Die Symbole zeigen Hinweise an. Ihre Bedeutung ist im folgenden erlutert. Dies Symbol weist auf Operationsprozeduren, technische Informationen oder Warnungen hin, die besonders wichtig sind.

REFERENZDOKUMENTATION
Weitere Einzelheiten ber das Programmieren der C3G Steuereinheiten findet man in folgender Dokumentation: Cell Controller Bedienungs-und Wartungshandbuch; EZ-PDL2 Umgebung zur Vereinfachten Programmierung; C3G Programmieranleitung; Anwendungshandbcher.

Diese Handbcher werden von COMAU zu einem Listenpreis geliefert.

00/1200

EINLEITUNG

PDL2

Diese Seite ist absichtlich freigelassen

10

00/1200

PDL2

INHALT

INHALT
Dies Handbuch enthlt: Seite

KAPITEL 1: EINFHRUNG IN DIE SPRACHE PDL2


SYNTAX KONVENTION . . . . . . . . . . . . . . . . . . . . . . . . . . KOMPONENTEN DER SPRACHE . . . . . . . . . . . . . . . . . . . . . ZEICHENSATZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RESERVIERTE WRTER, SYMBOLE UND OPERATIONSZEICHEN. VORBESETZTE IDENTIFIZIERER . . . . . . . . . . . . . . . . . . . VOM ANWENDER DEFINIERTE IDENTIFIZIERER . . . . . . . . . . ANWEISUNGEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LEERZEICHEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . KOMMENTARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PROGRAMMSTRUKTUR. . . . . . . . . . . . . . . . . . . . . . . . . . PROGRAMMBEISPIEL . . . . . . . . . . . . . . . . . . . . . . . . . . . MASSEINHEITEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-1 1-2 1-2 1-2 1-2 1-4 1-5 1-5 1-5 1-6 1-6 1-7

KAPITEL 2: DARSTELLUNG DER DATEN


DATENKLASSEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-1 INTEGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-1 REAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2 BOOLEAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2 STRING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 ARRAY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 RECORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-4 VECTOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-4 POSITION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-5 BEZUGSSYSTEME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-7 JOINTPOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-8 XTNDPOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-8 NODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-8 PATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-9 SEMAPHORE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10 VEREINBARUNGEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10 VEREINBARUNG VON KONSTANTEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10 VEREINBARUNG VON KLASSEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10 VEREINBARUNG VON VARIABLEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-12 GEMEINSAM BENUTZTE VARIABLEN UND ROUTINEN. . . . . . . . . . . . . . . . . . . . . . 2-13 AUSDRCKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-14 ARITHMETISCHE OPERATIONEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-15 VERGLEICHSOPERATIONEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-16 LOGISCHE OPERATIONEN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-16 OPERATIONEN AUF BIT-BASIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-16 VEKTOROPERATIONEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-18 POSITIONSOPERATIONEN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-18 KONVERSION VON DATENKLASSEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-18 VORRANG DER OPERATOREN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-18 ZUWEISUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-19 TYPISIERUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-20

00/1200

INHALT

PDL2 Seite

KAPITEL 3: BEWEGUNGSSTEUERUNG
MOVE ANWEISUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-1 ARM Klausel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-1 TRAJECTORY Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-1 ZIEL Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-2 MOVE TO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-2 MOVE NEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-3 MOVE AWAY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-3 MOVE RELATIVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-4 MOVE ABOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-4 MOVE BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-5 MOVE FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-5 OPTIONAL KLAUSELN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-6 ADVANCE Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-6 TIL Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-6 WITH Klausel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-6 SYNCMOVE Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-7 KONTINUIERLICHE BEWEGUNG (MOVEFLY) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-8 ZEITGEBER UND SYNCHRONISIERER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-8 BEWEGUNGSSTEUERUNG MIT FLY_CART. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-9 MOVE ALONG ANWEISUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-9 ARM Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13 KNOTENPUNKT-BEREICH Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13 OPTIONAL Klausel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13 ADVANCE Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13 WITH Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-14 KONTINUIERLICHE BEWEGUNG (MOVEFLY). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-15 STOP UND WIEDERAUFNAHME VON BEWEGUNGEN . . . . . . . . . . . . . . . . . . . . . . . . . 3-15 CANCEL MOTION Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-15 LOCK, UNLOCK, und RESUME Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-16 SIGNAL SEGMENT Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-16 HOLD Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-16 ATTACH und DETACH Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-16 HANDAnweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-17

KAPITEL 4: SERIELLE EIN-/AUSGABEN


SERIELLE Einrichtungen . . . . . . . . . FENSTER Einrichtungen . . . . . . . DATEI Einrichtungen . . . . . . . . . KOMMUNIKATIONS Einrichtungen . . NULL Einrichtung . . . . . . . . . . . ATTACH und DETACH Anweisungen. TABELLEN DER EINRICHTUNGEN . LOGISCHE EINHEITNUMMER. . . . . . OPEN FILE Anweisung . . . . . . . . WITH Klausel . . . . . . . . . . . . . CLOSE FILE Anweisung . . . . . . . READ Anweisung . . . . . . . . . . . FORMATSPEZIFIZIERER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-1 4-1 4-2 4-2 4-3 4-3 4-4 4-5 4-5 4-6 4-6 4-7 4-8

ii

00/1200

PDL2

INHALT Seite

KAPITEL 4: SERIELLE EIN-/AUSGABEN (FORTSETZUNG)


WIEDERANLAUF NACH STROMAUSFALL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-9 WRITE ANWEISUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-9 WIEDERANLAUF NACH STROMAUSFALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11 DATENKOMMUNIKATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11 DAS PROTOKOLL DDCMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11 OPERATION IM NORMALMODUS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11 Montieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-12 Protokollstart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-12 Protokollbetrieb. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-12 Demontieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-12 FEHLERBEDINGUNGEN UND STATISTIKEN . . . . . . . . . . . . . . . . . . . . . . . . . . 4-13 BETRIEB IM WARTUNGSMODUS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-14 Montieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-14 Protokollbetrieb. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-15 Demontieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-15 Statistiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-15 PDL2 PROGRAMMIERUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-15 Montieren der Einrichtung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-15 Benutzen der DDCMP Einrichtung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-15 Einrichtungskontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-16 PROGRAMMIERHINWEISE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-17 ANWENDUNGSBEISPIELE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-17 DAS PROTOKOLL 3964R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-21

KAPITEL 5: MATRIZEN FR EIN-/AUSGABEPORTS


ALLGEMEINES . . . . . . . . . . . . . . . . . . . . . . . . . . . . VOM ANWENDER DEFINIERTE E/A-PORTS . . . . . . . . . . . . $DIN und $DOUT . . . . . . . . . . . . . . . . . . . . . . . . . $GIN und $GOUT . . . . . . . . . . . . . . . . . . . . . . . . . $AIN und $AOUT . . . . . . . . . . . . . . . . . . . . . . . . . VOM SYSTEM DEFINIERTE PORTMATRIZEN . . . . . . . . . . . $SDIN und $SDOUT . . . . . . . . . . . . . . . . . . . . . . . $FDIN und $FDOUT. . . . . . . . . . . . . . . . . . . . . . . . $FDIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $FDOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . $HDIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $TIMER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PORTMATRIZEN FR GEMEINSAM BENUTZTEN SPEICHER . . $BIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $WORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $PLCSTW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SYSTEMZUSTAND NACH WIEDERAUFSETZEN . . . . . . . . . . KALTSTART . . . . . . . . . . . . . . . . . . . . . . . . . . WARMSTART . . . . . . . . . . . . . . . . . . . . . . . . . AUSFALL DER STROMVERSORGUNG . . . . . . . . . . . ZUGRIFF AUF VOM ANWENDER DEFINIERTE EINRICHTUNGEN . . . . . . . . . . . . . . . . . . . . 5-1 . . . . . . . . . . . . . . . . . . . . 5-3 . . . . . . . . . . . . . . . . . . . . 5-3 . . . . . . . . . . . . . . . . . . . . 5-4 . . . . . . . . . . . . . . . . . . . . 5-4 . . . . . . . . . . . . . . . . . . . . 5-4 . . . . . . . . . . . . . . . . . . . . 5-4 . . . . . . . . . . . . . . . . . . . . 5-4 . . . . . . . . . . . . . . . . . . . . 5-5 . . . . . . . . . . . . . . . . . . . . 5-7 . . . . . . . . . . . . . . . . . . . . 5-8 . . . . . . . . . . . . . . . . . . . . 5-8 . . . . . . . . . . . . . . . . . . . . 5-8 . . . . . . . . . . . . . . . . . . . . 5-8 . . . . . . . . . . . . . . . . . . . . 5-8 . . . . . . . . . . . . . . . . . . . . 5-8 . . . . . . . . . . . . . . . . . . . . 5-9 . . . . . . . . . . . . . . . . . . . . 5-9 . . . . . . . . . . . . . . . . . . . . 5-9 . . . . . . . . . . . . . . . . . . . . 5-9 . . . . . . . . . . . . . . . . . . . 5-10

00/1200

iii

INHALT

PDL2 Seite

KAPITEL 5: MATRIZEN FR EIN-/AUSGABEPORTS (fORTSETZUNG)


$USER_BIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $USER_BYTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . $USER_WORD . . . . . . . . . . . . . . . . . . . . . . . . . . . $USER_LONG . . . . . . . . . . . . . . . . . . . . . . . . . . . . $USER_ADDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . $USER_LEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $PROG_UBIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . $PROG_UBYTE . . . . . . . . . . . . . . . . . . . . . . . . . . . $PROG_UWORD . . . . . . . . . . . . . . . . . . . . . . . . . . $PROG_ULONG . . . . . . . . . . . . . . . . . . . . . . . . . . . $PROG_UADDR . . . . . . . . . . . . . . . . . . . . . . . . . . . $PROG_ULEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . ZUWEISUNG UND RESERVIERUNG VON E/A UND SPS WRTERN $WORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $GIN/$GOUT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . $SDIN/$SDOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-10 5-10 5-10 5-10 5-10 5-11 5-11 5-12 5-12 5-12 5-12 5-12 5-12 5-12 5-14 5-15

KAPITEL 6: AUSFHRUNGSSTEUERUNG
ABLAUFKONTROLLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-1 IF Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-1 SELECT Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-2 FOR Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-4 WHILE Anweisung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-5 REPEAT Anweisung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-6 GOTO Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-7 PROGRAMMSTEUERUNG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-8 Interne Funktion PROG_STATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-9 ACTIVATE Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-9 PAUSE Anweisung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-10 UNPAUSE Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-10 DEACTIVATE Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-11 CYCLE und EXIT CYCLE Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-11 DELAY Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-12 WAIT FOR Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-12 BYPASS Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-12 SYNCHRONISIERUNG VON PROGRAMMEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-13 PRIORITT EINES PROGRAMMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-14

KAPITEL 7: ROUTINEN
PROZEDUREN UND FUNKTIONEN . . . . . . . . . . . . . . . . PARAMETER . . . . . . . . . . . . . . . . . . . . . . . . . . . . VEREINBARUNGEN . . . . . . . . . . . . . . . . . . . . . . . . LISTE DER PARAMETER. . . . . . . . . . . . . . . . . . . . VEREINBARUNGEN VON KONSTANTEN UND VARIABLEN . STACKGRE. . . . . . . . . . . . . . . . . . . . . . . . DATENKLASSE DER RCKGABEWERTE (RETURN TYPE) . RETURN ANWEISUNG . . . . . . . . . . . . . . . . . . . . . GEMEINSAM BENUTZTE ROUTINEN . . . . . . . . . . . . . iv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-2 7-2 7-3 7-4 7-4 7-5 7-5 7-5 7-6

00/1200

PDL2

INHALT Seite

KAPITEL 7: ROUTINEN (FORTSETZUNG)


BERGABE VON ARGUMENTEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-6 BERGABE DURCH VERWEIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-6 BERGABE NACH WERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-6

KAPITEL 8: BEDINGUNGSHANDLER
OPERATIONEN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-1 DEFINITION VON BEDINGUNGSHANDLERN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-1 FOR ARM Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-1 NODISABLE Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-2 ATTACH Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-2 SCAN Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-2 FREIGABE, SPERRE UND ENTFERNEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-3 VARIABLENVERWEISE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-4 BEDINGUNGEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-4 RELATIONAL Zustnde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-4 BOOLEAN Zustand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-5 ZUSTNDE VON DIGITALEN E/As. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-5 EREIGNISSE VON DIGITALEN E/As . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-5 SYSTEMereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-6 ANWENDERereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-9 FEHLERereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-9 PROGRAMMereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-10 EREIGNIS BEI ABBRUCH EINER UNTERBRECHBAREN ANWEISUNG . . . . . . . . . . . . . . . . . . . 8-10 BEWEGUNGSereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-11 AKTIONEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-13 ZUWEISUNGSaktion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-13 INCREMENT- und DECREMENT-Aktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-14 INTERNE Aktionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-14 SEMAPHORE Aktion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-14 MOTION und ARM Aktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-14 ALARM Aktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-15 PROGRAM Aktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-15 Aktionen fr BEDINGUNGSHANDLER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-15 DETACH Aktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-16 PULSE Aktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-16 HOLD Aktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-16 SIGNAL EVENT Aktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-16 ROUTINE CALL Aktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-16 AUSFHRUNGSORDNUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-17

KAPITEL 9: SPS FUNKTIONEN


KOMPONENTEN DER SPRACHE . . . . . . . . KONSTANTEN . . . . . . . . . . . . . . . . VARIABLEN . . . . . . . . . . . . . . . . . . BOOLEAN E/A Matrizen:. . . . . . . . . . INTEGER E/A Matrizen: . . . . . . . . . . OPERATOREN . . . . . . . . . . . . . . . . VOM ANWENDER DEFINIERTE ROUTINEN 00/1200 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-1 9-1 9-1 9-1 9-1 9-2 9-2 v

INHALT

PDL2 Seite

KAPITEL 9: SPS FUNKTIONEN (FORTSETZUNG)


ANWEISUNGEN . . . . . . . . . . . . . . . . INTERNE SPS ROUTINEN . . . . . . . . . ZHLER/ZEITGEBER ANWEISUNGEN. . . MATHEMATISCHE ANWEISUNGEN . . . . VERSCHIEBUNGSANWEISUNGEN . . . . WORD ANWEISUNGEN . . . . . . . . . . . BEDINGTE/UNBEDINGTE ANWEISUNGEN BIT ANWEISUNGEN. . . . . . . . . . . . . ONE-SHOT ANWEISUNGEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-2 9-2 9-3 9-4 9-4 9-4 9-5 9-5 9-6

KAPITEL 10: LISTE DER ANWEISUNGEN KAPITEL 11: LISTE DER INTERNEN ROUTINEN KAPITEL 12: LISTE DER VORBESETZTEN VARIABLEN anhang A: ZEICHENSTZE
ZEICHENSATZ 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-2 ZEICHENSATZ 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-6

anhang B: SYNTAX-DIAGRAMME anhang C: PROGRAMMBEISPIELE anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

vi

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2
DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

Handbuch fr Programmiersprache

1
2 3 4 5 6 7 8 9 10 11 12 A B C D Index

INHALT
Abschnitt SYNTAX KONVENTION . . . . . . . . . . . . . . . . . . . . . . . . . . KOMPONENTEN DER SPRACHE . . . . . . . . . . . . . . . . . . . . . ZEICHENSATZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RESERVIERTE WRTER, SYMBOLE UND OPERATIONSZEICHEN. VORBESETZTE IDENTIFIZIERER . . . . . . . . . . . . . . . . . . . VOM ANWENDER DEFINIERTE IDENTIFIZIERER . . . . . . . . . . ANWEISUNGEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LEERZEICHEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . KOMMENTARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PROGRAMMSTRUKTUR. . . . . . . . . . . . . . . . . . . . . . . . . . PROGRAMMBEISPIEL . . . . . . . . . . . . . . . . . . . . . . . . . . . MASSEINHEITEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seite . . . . . . . . . . . . 1-1 1-2 1-2 1-2 1-2 1-4 1-5 1-5 1-5 1-6 1-6 1-7

EINFHRUNG IN DIE SPRACHE PDL2

Handbuch fr Programmiersprache

PDL2

Diese Seite wurde absichtlich leer gelassen

PDL2

EINFHRUNG IN DIE SPRACHE PDL2

EINFHRUNG IN DIE SPRACHE PDL2


Die Programmiersprache PDL2 ist der Sprache PASCAL hnlich und weist besondere Merkmale fr die Programmierung von Roboteranwendungen auf. Mit Programmierung ist die Entwicklung einer Serie von Anweisungen gemeint, die von der Steuereinheit ausgefhrt werden, um eine bestimmte Anwendung zu realisieren. Die Programme knnen Anweisungen zur Ausfhrung der folgenden Aufgaben enthalten: Verschiebung der Roboterarme; Senden und Empfangen von Informationen; Steuerung der Ausfhrungsabfolge von Anweisungen; Prfen von Fehler- oder anderen Sonderbedingungen.

PDL2 wird fr die Programmierung der Steuereinheit C3G von Comau verwendet. Diese Sprache bietet eine leistungsstrkere Struktur als die Originalversion von PDL und ermglicht so die Programmierung von komplexeren Anwendungen mit grerer Kontrolle und einer niedrigeren Fehlerrate. Zusammen mit der Sprache wird auch eine vollstndige PDL2 Programmierumgebung geliefert. Die C3G Steuereinheit ist in der Lage, mehrere Programme gleichzeitig auszufhren, um alle Aspekte einer Anwendung verwalten zu knnen. Eine Steuereinheit kann auerdem mehrere Roboterarme mit der entsprechenden Ausrstung berwachen. Die PDL2 Programme sind in zwei Kategorien unterteilt: holdable Programme und non holdable Programme. Die holdable Programme (durch das HOLD Attribute angezeigt) werden durch die Befehle START und HOLD gesteuert. Normalerweise umfassen solche Programme eine Bewegung, auch wenn das keine notwendige Bedingung ist. Die non holdable Programme (durch das NOHOLD Attribute angezeigt) werden nicht durch die Befehle START und HOLD gesteuert. Im allgemeinen werden solche Programme zur Prozesteuerung verwendet und knnen keine Bewegung enthalten. Sie knnen aber die Positionsvariablen auf jeden Fall zu anderen Zwecken verwenden. Die in einem non holdable Programm unzulssigen Bewegungsanweisungen sind: RESUME, CANCEL, LOCK, UNLOCK und MOVE.

Auerdem kann fr das Schreiben von in RLL (relay ladder logic) bersetzbaren SPS Programmen ein zustzlicher Satz von PDL2-Anweisungen verwendet werden (siehe Kapitel "SPS Funktionen").

SYNTAX KONVENTION
In diesem Handbuch werden die folgenden Konventionen fr die Syntax der PDL2 Anweisungen verwendet: Die Optionen werden in spitze Klammern gesetzt. Zum Beispiel die Beschreibung: item1 <item2> item3 ergibt die folgenden Mglichkeiten: item1 item3 item1 item2 item3 Elementen, die ein- oder mehrmals auftreten knnen, folgen drei Punkte. Zum Beispiel die Beschreibung: item1 item2... ergibt die folgenden Mglichkeiten: item1 item2 item1 item2 item2 item1 item2 item2 item2 u.s.w. Die senkrechten Striche dienen dazu, die verschiedenen Auswahlmglichkeiten voneinander zu trennen. Wenn mindestens ein Element gewhlt werden mu, wird die gesamte Gruppe durch Doppelstriche begrenzt. Zum Beispiel die Beschreibung: || item1 | item2 || ergibt die folgenden Mglichkeiten: item1 item2 00/1200 1-1

EINFHRUNG IN DIE SPRACHE PDL2

PDL2

Die Kombinationen dieser Zustze liefern sehr leistungsstarke syntaktische Beschreibungen, die manchmal etwas komplex sein knnen. Sie sind aber trotzdem zum Verstndnis dessen, was mit der Sprache PDL2 gemacht werden kann, sehr ntzlich. Es folgen einige Beispiele. Beschreibungen item1 <item2 | item3> Mgliche Ergebnisse item1 item1 item2 item1 item3 item1 item1 item2 item1 item3 item1 item3 item3 item2 u.s.w. itm1 itm2 itm3 itm2 itm2 itm1 itm3 itm1 itm3 itm2 u.s.w.

item1 <item2 | item3>...

|| itm1 | itm2 | itm3 ||...

Es ist zu beachten, da wenn die Punkte sofort nach den Klammern der Optionen gesetzt werden, die in den Klammern enthaltenen Elemente nullmal oder mehrmals wiederholt werden knnen. Wenn die Punkte aber nach den senkrechten Strichen stehen, knnen die in diesen Strichen enthaltenen Elemente einmal oder mehrmals wiederholt werden.

KOMPONENTEN DER SPRACHE


In diesem Abschnitt werden die Komponenten der Sprache PDL2 beschrieben.

ZEICHENSATZ
PDL2 erkennt die in der Tabelle 1-1 aufgelisteten Zeichen. Tabelle 1-1 PDL2 Zeichensatz Buchstaben: Zahlen: Symbole: Sonderzeichen: a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 @ < > = / * + - _ , ; . # $ [] % {} \ : ! () blank (space), tab

PDL2 unterscheidet nicht zwischen Gro- und Kleinbuchstaben.

RESERVIERTE WRTER, SYMBOLE UND OPERATIONSZEICHEN


Es handelt sich um Wrter, Symbole und Operationszeichen, die eine festgelegte, besondere Bedeutung in der Umgebung von PDL2 haben. Die Wrter identifizieren die Abschnitte eines Programms, die Klassen der Daten und die Schlsselwrter einer Anweisung, whrend die Symbole normalerweise eine Anweisung hervorheben. Die Operationszeichen bedeuten eine Berechnung oder einen Vergleich. Die Tabelle 1-2 enthlt die Liste der belegten Wrter, Symbole und der Operationszeichen.

VORBESETZTE IDENTIFIZIERER
Die vorbesetzten Identifizierer sind der verbleibende Teil der zur Sprache PDL2 gehrenden Wrter. Sie werden zur Identifizierung von Konstanten, Variablen, Feldern und Routinen verwendet, die PDL2 schon beinhaltet. Vorbesetzte Identifizierer unterscheiden sich von reservierten Wrtern dadurch, da die Bedeutung eines vorbesetzten Identifizierers von einem Programmierer gendert werden kann.

1-2

00/1200

PDL2

EINFHRUNG IN DIE SPRACHE PDL2

Vorbesetzte Konstanten sind Identifizierer, denen vorherbestimmte Werte zugeordnet werden. Innerhalb eines Programms ist es mglich, die Identifizierer einer vorbesetzten Konstante anstelle eines Wertes zu verwenden. Die vorbesetzten Konstanten sind in der Tabelle 1-3 aufgelistet. Tabelle 1-2 Reservierte Wrter, Symbole und Operationszeichen ABOUT ALARM ANY AT BEGIN CASE CURRENT DELAY DIV ELSE ENDCONDITION ENDNODEDEF ENDWHILE EXIT FOR HOLD INTERRUPT MOVE NODEDEF NOT OR PLC PROGRAM READ RELAX ROL SEGMENT SHR STEP SYNCMOVEFLY TIL UNLOCK VECTOR WHILE XOR { < <> * . := += ACTIVATE ALL ANYERROR ATTACH BOOLEAN CLOSE CYCLE DETACH DO ENABLE ENDFOR ENDOPEN ERRORCLASS EXPORTED FROM IF JOINTPOS MOVEFLY NODISABLE NOTEACH PATH POSITION PROG_ARM REAL REPEAT ROR SELECT SIGNAL STOP SYS_VAR_GET TIME UNPAUSE VIA WINDOW XTNDPOS } > = / .. ; -= ADVANCE ALONG ARM AWAY BY CONDITION DEACTIVATE DISABLE DOWNTO ENCODE ENDIF ENDRECORD ERRORNUM EZ GOTO IN LOCK NEAR NOHOLD OF PAUSE POWERUP PULSE RECORD RESUME ROUTINE SEMAPHORE STACK STRING SYS_VAR_SET TO UNTIL WAIT WITH [ ( <= + ** : # AFTER AND ARRAY BEFORE CANCEL CONST DECODE DISTANCE DV_CNTRL END ENDMOVE ENDSELECT EVENT FILE HAND INTEGER MOD NL NOSAVE OPEN PERCENT PRIORITY PURGE RELATIVE RETURN SCAN SHL START SYNCMOVE THEN TYPE VAR WHEN WRITE ] ) >= , :: @

00/1200

1-3

EINFHRUNG IN DIE SPRACHE PDL2 Tabelle 1-3 Vorbesetzte Konstanten AC_ABORT CIRCULAR COM_BD1200 COM_BD19200 COM_CHAR COM_PAR_ODD COM_STOP1 COM_XSYNC_NO EC_ELOG EC_PLC EC_SYS_C FALSE FLY_CONST FLY_PASS JOINT LUN_TP MMUX_B NOSETTLE PDV_TP SCRN_CLR_CHR SCRN_SYS SPD_AUX2 SPD_ELV SPD_ROLL SPD_THIRD STR_TRIM UFRAME WIN_BLUE WIN_CLR_BOLN WIN_CLR_LINE WIN_GREEN WIN_SCROLL WRIST_JNT AC_CALL_CRT COARSE COM_BD2400 COM_BD38400 COM_CHARNO COM_PASAL COM_STOP1_5 EC_BYPASS EC_FILE EC_PROG EC_TRAP FINE FLY_FROM FLY_TOL LINEAR MAXINT MMUX_OFF OFF RPY_WORLD SCRN_CLR_DEL SCRN_USER SPD_AUX3 SPD_FIRST SPD_ROT STR_COLL STR_UPR WIN_BLACK WIN_BOLD_OFF WIN_CLR_BOW WIN_CRSR_OFF WIN_MAGENTA WIN_WHITE AC_CALL_TP COM_BD110 COM_BD4800 COM_BIT7 COM_PAR_EVEN COM_RDAHD COM_STOP2 EC_COND EC_MATH EC_RLL EC_USER FLY_AUTO FLY_HIGH JNT_COARSE LUN_CRT MININT MMUX_ON ON RS_TRAJ SCRN_CLR_REM SEG_VIA SPD_AZI SPD_JNT SPD_SECOND STR_COMP TOOL WIN_BLINK_OFF WIN_BOLD_ON WIN_CLR_EOLN WIN_CRSR_ON WIN_RED WIN_WRAP BASE COM_BD300 COM_BD9600 COM_BIT8 COM_PAR_NO COM_RDHD_NO COM_XSYNC EC_DISP EC_PIO EC_SYS EUL_WORLD FLY_CART FLY_NORM JNT_FINE LUN_NULL MMUX_A MMUX_SET PDV_CRT RS_WORLD SCRN_EDIT SPD_AUX1 SPD_CONST SPD_LIN SPD_SPN STR_LWR TRUE WIN_BLINK_ON WIN_CLR_ALL WIN_CLR_EOW WIN_CYAN WIN_REVERSE WIN_YELLOW

PDL2

Vorbesetzte Variablen haben vorherbestimmte Klassen und Anwendungsflle. Zu Beginn jeder dieser Variablen steht das Dollarzeichen ($). Das Kapitel "Liste der vorbesetzten Variablen" enthlt eine alphabetisch geordnete Liste der vorbesetzten Variablen. Die vorbesetzten Felder ermglichen den Zugang zu den einzelnen Komponenten der Klassen von strukturierten Daten. Jedes einzelne Feld wird im Kapitel "Darstellung der Daten" unter der entsprechenden Datenklasse beschrieben. Die vorbesetzten Routinen, auch interne Routinen genannt (built-inroutines), werden fr die Abarbeitung von Programmieraufgaben verwendet, die hufig gebraucht werden. Das Kapitel "Liste der Internen Routinen" enthlt eine alphabetisch geordnete Liste der vorbesetzten Routinen.

VOM ANWENDER DEFINIERTE IDENTIFIZIERER


Die vom Anwender definierte Identifizierer sind Namen, die der Programmierer zur Bezeichnung folgender Einheiten whlt: 1-4 Programme; Variablen; Konstanten; Routinen; Etiketten; Klassen; Felder. 00/1200

PDL2

EINFHRUNG IN DIE SPRACHE PDL2

Ein vom Anwender definierter Identifizierer mu mit einem Buchstaben beginnen. Er kann dann eine beliebige Anzahl von Buchstaben, Zahlen und Unterstreichungszeichen (_) enthalten. Diese Art von Identifizierer kann nur innerhalb des Kontextes, in dem sie verwendet wird, eine Bedeutung haben. Der Kontext eines Indentifizierers bezeichnet den Abschnitt eines Programms, der zur Referenz fr einen Identifizierer benutzt werden kann. Die Identifizierer des Programms sind in einem anderen Bereich enthalten und erlauben dem Programmierer damit, eine Variable mit demselben Namen wie dem eines Programms zu definieren. Die Programmidentifizierer, die auch zur Bezeichnung der Datei, in der das Programm gespeichert ist, verwendet werden, drfen nicht lnger als acht Zeichen sein. Eine vom Anwender definierte Variable besteht aus einem Namen, der irgendeinen Wert einer besonderen Klasse darstellen kann. Zur Vereinbarung einer Variablen ordnet der Programmierer einer Datenklasse einen Namen zu. Dieser Name kann dann innerhalb des Programms zur Darstellung irgendeines Wertes dieser Klasse verwendet werden. Eine vom Anwender definierte Konstante besteht aus einem Namen, der einen spezifischen Wert darstellt. Zur Vereinbarung einer Konstanten ordnet der Programmierer einem Wert einen Namen an. Dieser Name kann dann innerhalb des Programms zur Darstellung des Wertes benutzt werden. Im Kapitel "Darstellung der Daten" sind die verschiedenen Arten beschrieben, wie Variablen und Konstanten deklariert werden. Eine vom Anwender definierte Routine besteht aus einer Gruppe von Anweisungen, die durch einen einzigen Namen dargestellt werden. Der Programmierer kann Routinen fr die Verwaltung von spezifischen Teilen einer Gesamtarbeit definieren, und ihre Namen knnen innerhalb des Programms verwendet werden, um die Ausfhrungsanweisungen darzustellen. Im Kapitel "Die Routinen" werden die vom Anwender definierten Routinen beschrieben. Die vom Anwender definierten Etiketten werden verwendet, um das Ziel einer GOTO-Anweisung anzugeben. Die Benutzung der Etiketten und der GOTO-Anweisungen wird im Kapitel "Ausfhrungsuntersttzung" beschrieben. Die Felder und die benutzerdefinierten Klassen sind noch nicht implementiert. Eine vom Anwender definierte Klasse besteht aus einer Gruppe von Feldbegrenzungen, die durch nur einen Namen dargestellt werden. Der Programmierer kann eine Klasse deklarieren, um eine neue Datenklasse zu definieren, die aus einer Sequenz von Klassen vorhandener Daten besteht. Der Name der Klasse kann in der Vereinbarung einer Variablen oder Routine verwendet werden. Im Kapitel "Darstellung der Daten" werden die verschiedenen Arten der Vereinbarungen fr Klassen und Felder beschrieben.

ANWEISUNGEN
Die PDL2-Programme bestehen aus Anweisungen, die sich aus den folgenden Elementen zusammensetzten: Wrter, Symbole und reservierte Operationszeichen; vorbesetzte Identifizierer; vom Anwender definierte Identifizierer.

Die Syntax der Anweisungen mu korrekt sein; die Anweisungen mssen nach den PDL2 Syntaxregeln aufgebaut werden, und dazu gibt der Editor im Programm eine gute Hilfestellung whrend der Eingabe. Das Kapitel "Liste der Anweisungen" enthlt eine alphabetisch geordnete Liste fr die PDL2 Anweisungen.

LEERZEICHEN
Leerzeichen werden dazu verwendet, Wrter und reservierte Identifizierer zu trennen. Auch wenn es nicht notwendig ist, knnen diese Leerzeichen zwischen Operationszeichen und die entsprechenden Operanden (a + b oder a+b) gesetzt werden, oder sie werden dazu verwendet, die Anweisungen etwas eingerckt zu schreiben. Auf jeden Fall fgt der Editor automatisch Leerzeichen ein und erzeugt so die Standard-Einrckungen, unabhngig von denen, die der Programmierer eingibt.

KOMMENTARE
Unter Kommentar versteht man einen Textteil innerhalb eines Programms, der nichts mit den Anweisungen in diesem Programm zu tun hat. Diese Kommentare beeinflussen nicht, wie die Steuereinheit die Anweisungen ausfhrt; sie beginnen immer mit zwei Trennstrichen (). Die Steuereinheit ignoriert den Text, der den beiden Trennstrichen folgt, bis eine Maximallnge von 225 Zeichen. Im allgemeinen werden Kommentare vom Programmierer dazu verwendet, bestimmte Programmpunkte zu erklren.

00/1200

1-5

EINFHRUNG IN DIE SPRACHE PDL2

PDL2

PROGRAMMSTRUKTUR
Die Struktur des Programms ist folgende: PROGRAM name <Attributen> <Konstanten, Variablen, und Klassenvereinbarungen> <Routinevereinbarungen> BEGIN <CYCLE> <ausfhrbare Anweisungen> END name Das Programm beginnt mit der Anweisung PROGRAM, die das Programm mit einem name identifiziert, der vom Anwender definiert wurde. Dieser Name identifiziert auch die Datei, in der das Programm gespeichert wird. Es ist mglich, die optionalen Attribute des Programms mit einzubeziehen, die zusammen mit der PROGRAM Anweisung im Kapitel "Liste der Anweisungen" beschrieben werden. Die Programme sind in einen Abschnitt fr die Vereinbarungen und einen fr die Ausfhrung unterteilt. Der Vereinbarungsabschnitt besteht aus einer Liste aller Routinen und aller Datenkategorien, die in dem Programm verwendet werden, whrend der Ausfhrungsabschnitt eine Liste der Anweisungen enthlt, die die Steuereinheit ausfhren mu, um einen Task abzuarbeiten. Die beiden Abschnitte, der fr die Vereinbarungen und der fr die Ausfhrung, werden durch die BEGIN Anweisung getrennt. Dieser Anweisung kann der Programmierer die Option CYCLE zuordnen, so da ein kontinuierlicher Zyklus erstellt wird. Die END Anweisung gibt das Ende des Programms an und enthlt auch den Namen des Programms. In diesem Handbuch werden die vorbesetzten Wrter und Identifizierer in Blockbuchstaben geschrieben, die vom Anwender definierten Identifizierer werden kursiv gedruckt, und die Optionen sind in spitze Klammern <> gesetzt. Am Ende dieses Kapitels wird eine komplette Beschreibung der Syntax gegeben.

PROGRAMMBEISPIEL
Das folgende PDL2 Programm ldt Teile von einem Transportband auf eine der beiden Stationen um, wie die Abbildung 1-1 zeigt. Die digitalen Eingangssignale geben an, wann das Transportband bereit ist und auf welcher Station das Teil abgelegt werden soll. PROGRAM pack VAR perch, feeder, table, discard : POSITION BEGIN CYCLE MOVE TO perch OPEN HAND 1 WAIT FOR $DIN[1] = ON -- Signal "Transportband bereit" MOVE TO feeder CLOSE HAND 1 IF $DIN[2] = OFF THEN -- bestimmt, ob das Teil gut ist MOVE TO table ELSE MOVE TO discard ENDIF OPEN HAND 1 -- legt das Teil auf den Tisch oder in den Ausschubehlter END pack

1-6

00/1200

PDL2

EINFHRUNG IN DIE SPRACHE PDL2

Ausschubehlter

Transportband

Tisch

Abb. 1-1 Arbeitsumgebung des Pack Programs

MASSEINHEITEN
PDL2 verwendet die in der Tabelle 1-4 angegebenen Maeinheiten. Tabelle 1-4 PDL2 Maeinheiten Entfernung: Zeit: Winke: Lineargeschwindigkeit: Winkelgeschwindigkeit: Strom: Resolverdaten: Millimeters(mm) Millisekunden (msec) Grad () Meter/Sekunde (m/s) Radianten/Sekunde (Rad/S) Ampere (A) Bit/Tick (10 msec)

00/1200

1-7

EINFHRUNG IN DIE SPRACHE PDL2

PDL2

Diese Seite wurde absichtlich leer gelassen

1-8

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2

Handbuch fr Programmiersprache

DARSTELLUNG DER DATEN


BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

2
3 4 5 6 7 8 9 10 11 12 A B C D Index

INHALT
Abschnitt Seite

DATENKLASSEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-1 INTEGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-1 REAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2 BOOLEAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2 STRING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 ARRAY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 RECORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-4 VECTOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-4 POSITION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-5 BEZUGSSYSTEME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-7 JOINTPOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-8 XTNDPOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-8 NODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-8 PATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-9 SEMAPHORE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10 VEREINBARUNGEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10 VEREINBARUNG VON KONSTANTEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10 VEREINBARUNG VON KLASSEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10

DARSTELLUNG DER DATEN

Handbuch fr Programmiersprache

PDL2

INHALT (Fortsetzung)
Abschnitt VEREINBARUNG VON VARIABLEN . . . . . . . . . . . . . GEMEINSAM BENUTZTE VARIABLEN UND ROUTINEN. AUSDRCKE . . . . . . . . . . . . . . . . . . . . . . . . . . . ARITHMETISCHE OPERATIONEN . . . . . . . . . . . . . . VERGLEICHSOPERATIONEN . . . . . . . . . . . . . . . . LOGISCHE OPERATIONEN. . . . . . . . . . . . . . . . . . OPERATIONEN AUF BIT-BASIS . . . . . . . . . . . . . . . VEKTOROPERATIONEN . . . . . . . . . . . . . . . . . . . POSITIONSOPERATIONEN. . . . . . . . . . . . . . . . . . KONVERSION VON DATENKLASSEN . . . . . . . . . . . . VORRANG DER OPERATOREN . . . . . . . . . . . . . . . ZUWEISUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . TYPISIERUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seite 2-12 2-13 2-14 2-15 2-16 2-16 2-16 2-18 2-18 2-18 2-18 2-19 2-20

PDL2

DARSTELLUNG DER DATEN

DARSTELLUNG DER DATEN


In diesem Kapitel werden die verschiedenen Klassen beschrieben, denen ein Datenelement eines PDL2 Programms angehren kann sowie die Art, in der die Daten deklariert und verwaltet werden. Die Zugehrigkeitsklasse der Daten definiert: die Typen von Werten, die einem Datenelement zugeordnet werden knnen, unter Bercksichtigung ihrer Zugehrigkeitskategorie; die Operationen, die mit einem Datenelement durchgefhrt werden knnen.

In PDL2 werden die folgenden Datenklassen definiert: INTEGER REAL BOOLEAN STRING ARRAY RECORD NODE PDL2 Programme knnen die folgenden Arten von Datenklassen enthalten: variables (Variablen): sie stellen Werte dar, die sich ndern knnen; constants (Konstanten): sie stellen unvernderliche Werte dar; literals (Literale): sie stellen die Istwerte dar. VECTOR POSITION JOINTPOS XTNDPOS PATH SEMAPHORE

Die Variablen werden vereinbart, indem dem Datenidentifizierer (der dem Datenelement zugeordnete Name) ihre Zugehrigkeitsklasse zugeordnet wird. Dem Identifizierer einer Variablen kann whrend des gesamten Programms ein beliebiger Wert zugeordnet werden, wenn er zu der gleichen Klasse gehrt. Jede Datenklasse kann zur "Variablen" erklrt werden (d.h. der Kategorie der Variablen zugehrig). Die Vereinbarung einer Konstanten erfolgt, indem dem Identifizierer des Datenelements, der die entsprechende Zugehrigkeitsklasse bestimmt, ein Wert zugeordnet wird. Dieser Wert kann innerhalb des Programms nicht gendert werden. Dem Identifizierer einer Konstanten knnen nur Werte zugeordnet werden, die zu den Klassen INTEGER, REAL, BOOLEAN und STRING gehren. Literale Werte sind Istwerte, die innerhalb des Programms verwendet werden; sie mssen zu einer der folgenden Klassen gehren: INTEGER, REAL oder STRING. PDL2 verwendet Ausdrcke fr die Behandlung der Daten eines Programms. Diese Ausdrcke bestehen aus Operanden und Operatoren. Die Operanden bestehen aus Daten, die verarbeitet werden, whrend die Operatoren die Art der Verarbeitung angeben, die ausgefhrt werden soll.

DATENKLASSEN
Dieser Abschnitt beschreibt die verschiedenen in PDL2 definierten Datenklassen und listet die Operationen auf, die mit ihnen durchgefhrt werden knnen.

INTEGER
Die Datenklasse INTEGER stellt ganze numerische Werte dar, die zwischen -2147483647 und +2147483647 liegen. Die folgenden vorbesetzten Konstanten stellen jeweils die INTEGER Werte fr Max. und min. dar: MAXINT; MININT.

00/1200

2-1

DARSTELLUNG DER DATEN

PDL2

Eine INTEGER kann als Dezimalzahl (Basis 10), Oktalzahl (Basis 8), Hexadezimalzahl (Basis 16) oder Binrzahl (Basis 2) dargestellt werden. Die Standardbasis fr eine INTEGER ist 10 (Dezimalzahl). Um ein INTEGER Literal mit einer anderen Basis anzugeben, wird 0o (Oktalzahl, z.B. 0o72), 0x (Hexadezimalzahl, z.B. 0xFF) oder 0b (Binrzahl, z.B. 0b11011) vor die Zahl gesetzt. In PDL2 knnen mit INTEGER Werten folgende Operationen durchgefhrt werden: Arithmetik (+, -, *, /, DIV, MOD, **, +=, -=); Vergleich (<, >, =, <>, <=, >=); Bitoperationen (AND, OR, XOR, NOT, SHR, SHL, ROR, ROL).

Die Operatoren += und -= werden benutzt, um ganzzahlige Programmvariablen zu inkrementieren bzw. zu dekrementieren. Sie knnen nicht auf Systemvariable angewendet werden. Der Inkrementalwert kann als eine Konstante oder eine andere Ganzzahlvariable ausgedrckt werden. Zum Beispiel: VAR i, j: INTEGER i += 5 -- entspricht i:=i+5 i -= j -- entspricht i:=i-j Dieser Operator kann auch in Bedingungsaktionen benutzt werden. Zur Laufzeit nimmt eine PDL2 INTEGER Variable den Wert "nicht initialisiert" an, wenn sie grer wird als MAXINIT. Auerdem gibt es in PDL2 Systemroutinen zum Zugriff auf die einzelnen Bits eines INTEGER Werts und fr andere allgemeine INTEGER Funktionen (siehe das Kapitel "Liste der internen Routinen").

REAL
Die Datenklasse REAL stellt numerische Werte mit Komma und einem Dezimalteil dar oder Zahlen in wissenschaftlicher Notation. Die Abbildung 2-1 zeigt die Palette der mglichen REAL-Daten.

-3.4028236E+38 -1.175494E-38 0 1.175494E-38 3.4028236E+38 (max negative) (min negativer Wert) (Grter positiver Wert) (Kleinster positiver Wert) (min positive) (max positive) (Grter negativer Wert) (Kleinsternegative)
Abb. 2-1 Bereich der REAL-Daten PDL2 kann mit Daten der Klasse REAL die folgenden Operationen durchfhren: Arithmetik (+, -, *, /, **); Vergleich (<, >, =, <>, <=, >=).

Auerdem stellt PDL2 Systemroutinen zur Verfgung, mit denen andere allgemeine REAL Funktionen ausgefhrt werden knnen (siehe das Kapitel "Liste der internen Routinen"). Die in PDL2 Programmen benutzten REAL Werte werden immer mit den acht signifikantesten Ziffern dargestellt.

BOOLEAN
Die Datenklasse BOOLEAN hat die vorbesetzten booleschen Konstanten TRUE (ON) und FALSE (OFF). PDL2 kann mit Daten der Klasse BOOLEAN die folgenden Operationen durchfhren: Vergleich (=, <>); Logische Verknpfung (AND, OR, XOR, NOT).

2-2

00/1200

PDL2

DARSTELLUNG DER DATEN

STRING
Die Datenklasse STRING stellt eine Folge von ASCII-Zeichen dar, die als eine einzelne Datengruppe betrachtet werden. Ein Apostroph bezeichnet den Anfang und das Ende eines Strings; zum Beispiel: Wert des Strings Auer den ausdruckbaren ASCII-Zeichen enthalten die Strings auch Kontrollsequenzen. Eine Steuersequenz besteht aus einem negativen Schrgstrich (\) gefolgt von einem beliebigen dreistelligen ASCII-Code. Zum Beispiel: Literal: der ASCII-Code 126 ist' eine Tilde \126 Wert: der ASCII-Code 126 ist eine Tilde: ~ Die nicht ausdruckbaren Zeichen in einer STRING, die nicht unter og. Format dargestellt sind, werden als Leerstellen ausgedruckt. Beim Arbeiten in PROGRAM EDIT oder MEMORY DEBUG werden Steuersequenzen fr druckbare Zeichen in dem entsprechenden druckbaren Zeichen ausgegeben. Um die Zeichen fr einen negativen Schrgstrich (\) oder Apostroph (') in einem STRING Literal zu erhalten, mssen zwei hintereinander gesetzt werden. Zum Beispiel: Literal: Apostroph Wert: Apostroph Der Programmierer mu die Lnge eines STRINGs von min. 1 bis zu einem max. Wert von 254 Zeichen deklarieren. Die tatschliche Lnge des STRING Wertes jedoch geht von 0 bis 254 Zeichen. Eine Lnge 0 bedeutet, da der STRING leer ist. PDL2 kann mit den Daten der Klasse STRING die folgenden Operationen ausfhren: Vergleich (<, >, =, <>, <=, >=)

Auerdem liefert PDL2 interne Routinen fr die Verwaltung gemeinsam benutzter STRING (siehe Kapitel "Liste der internen Routinen").

ARRAY
Die Datenklasse ARRAY (Matrix) stellt eine geordnete Menge von Daten dar, die alle zu derselben Klasse gehren. Der Programmierer kann eine der folgenden Klassen deklarieren: INTEGER REAL BOOLEAN STRING RECORD VECTOR POSITION JOINTPOS XTNDPOS SEMAPHORE

Der Programmierer mu die Dimension (eine oder zwei) jeder ARRAY (Matrix) und die max. Datenanzahl pro Dimension (bis max. 65.535) deklarieren. (Achtung: die tatschliche Dimension knnte allerdings auch durch den im System verfgbaren Speicherplatz begrenzt sein).
1 column a rra 1 Spaltige Matrix y [1 ] [2 ] [ 3 ] p a r t s [3 ] [4 ] 2 r o mit o l u m und a y Matrix w , 32cZeilenn a r r3 Spalten [1 ] [2 ] [1 ] [2 ]
b i n [2 , 3 ]

[3 ]

Abb. 2-2 Beispiele fr ARRAY Die Daten eines ARRAY werden durch eine Bezugszahl gekennzeichnet, die Indexzahl genannt wird. Fr eindimensionale ARRAYs stellt ein INTEGER Ausdruck die Position dar, die die Daten auf einer Zeile innerhalb des ARRAY einnehmen. Bei einem zweidimensionalen ARRAY stellen zwei INTEGER Ausdrcke, durch ein Komma getrennt, die Position der Zeilen und der Spalten dar. Die Indexzahlen folgen dem Namen des ARRAY und stehen in eckigen Klammern. 00/1200 2-3

DARSTELLUNG DER DATEN

PDL2

Im Beispiel der Abbildung 2-2 wurde das dritte Element der eindimensionalen Matrix (ARRAY) parts[3] genannt. Das Element in der zweiten Zeile und dritten Spalte der zweidimensionalen Matrix wurde bin[2,3] genannt. Alle Operationen, die mit einer besonderen Datenklasse mglich sind, knnen auch mit einzelnen Matrixelementen, die der gleichen Klasse angehren, durchgefhrt werden. Eine ganze Matrix (ARRAY) kann als Argument im Aufruf zu einer Routine verwendet oder in einer Zuweisung benutzt werden. Im letzteren Fall mssen beide Matrizen der gleichen Datenklasse angehren und gleiches Format und gleiche Dimension haben. SEMAPHORE Matrizen knnen nicht in Zuweisungen benutzt werden.

RECORD
Die RECORD Datenklasse besteht aus einer oder mehr Kategorien, die einen einzigen Namen verwenden. Jede Kategorie, die zu einem Record gehrt, wird Feld genannt und kann aus einer beliebigen PDL2 Datenklasse mit Ausnahme von SEMAPHORE, RECORD, NODE oder PATH bestehen. Die vorbesetzten Datenklassen VECTOR, POSITION und XTNDPOS sind Beispiele fr Record-Datenklassen. Der Anwender kann neue Record-Datenklassen in dem TYPE Abschnitt eines Programms definieren. Die RECORD Datenklasse erzeugt eine vom Anwender definierte Datenklasse, die fr das gesamte System global ist. Das bedeutet, da Konflikte zwischen den RECORD Datenklassen entstehen, die den gleichen Namen, aber verschiedene Felder haben. Diese Bedingung wird whrend des Ladens der Programme ermittelt. Fr den Programmierer ist es also ratsam, ein einheitliches Schema fr die Bezeichnung der RECORD Datenklassen zu verwenden. Der Programmierer kann die notwendige Anzahl an Feldern definieren, die in einem RECORD enthalten sein sollen, mu aber beachten, da die maximale Gre eines Record-Wertes 65.535 Bytes betrgt. Die einzelnen Felder eines RECORDs knnen daran erkannt werden, da ein Punkt den Namen der Variablen des Records vom Namen des Feldes trennt. Diese Methode nennt sich: Feldnotation. Zum Beispiel: rec_var.field_name := exp Alle fr eine bestimmte Datenklasse mglichen Operationen knnen auch mit den einzelnen Feldern durchgefhrt werden, die zu dieser Klasse gehren. Es ist mglich, einen ganzen RECORD als Argument fr den Aufruf einer Routine oder in einer Zuweisung zu verwenden. Im letzteren Fall mssen beide Records der gleichen RECORD Datenklasse angehren.

VECTOR
Die Datenklasse VECTOR stellt eine Gre dar und gibt sowohl deren Dimension, als auch deren Lnge an. Sie besteht aus drei REAL Komponenten. Die Vektoren stellen normalerweise eine Position oder eine Richtung im kartesischen Raum dar, und die Komponenten entsprechen den Koordinaten x, y und z. Die Abbildung 2-3 zeigt das Beispiel eines Vektors. PDL2 kann mit den Daten der Klasse VECTOR die folgenden Operationen durchfhren: Arithmetik (+, -); Arithmetik (*, /) VECTOR-INTEGER, VECTOR-REAL, und umgekehrt; Vergleich (=, <>); Vektor (#, @).

Wenn mit den einzelnen VECTOR Komponenten operiert werden soll, mssen die vorbesetzten Feldnotationen ( X, Y, und Z) verwendet werden. Zum Beispiel: vec_var.X := 0.65
Z-axis Z-Achse (X, Y, Z)

Y- a x i s Y-Achse

X-axis X-Achse

Abb. 2-3 Beispiel VECTOR Mit der interne Routine VEC kann auf diese Komponenten zugegriffen werden. 2-4 00/1200

PDL2

DARSTELLUNG DER DATEN

POSITION
Die POSITION Datenklasse wird zur Beschreibung der Position eines kartesischen Bezugssystems in Verhltnis zu einem anderen (als Ausgangsbezugssystem bezeichneten) benutzt. Im allgemeinen wird eine Position verwendet, um den Endpunkt einer MOVE Anweisung, d.h. die Position, die das Werkzeug am Armende im Anwenderbezugssystem erreicht, anzugeben. POSITIONen definieren auch die Systembezugssysteme, wie z.B. die Position der Roboterbasis ($BASE), die Dimensionen der Werkzeuge am Armende ($TOOL) und das Anwenderbezugssystem, das sich auf das Werkstck bezieht ($UFRAME) (siehe den Abschnitt "Bezugssysteme" in diesem Kapitel mit einer allgemeinen Definition von Bezugssystemen). Die POSITION definiert nicht nur einen Punkt, sondern auch eine Richtung und - nur fr die Endpunkte - die Roboterkonfiguration. Daher besteht die POSITION Datenklasse aus drei REAL Ortskomponenten, drei REAL Richtungskomponenten und einem STRING mit den Konfigurationskomponenten. Die Ortskomponenten sind Abstnde vom Ausgangsbezugssystem lngs der X-, Y- und Z-Achse. Wie bei Vektoren kann auf die X-, Y- und Z-Komponenten durch Verwenden der vorbesetzten Felder X, Y und Z verwiesen werden. Die Richtungskomponenten stellen die drei Drehwinkel (Euler'sche Winkel) in Grad dar. Sie erlauben eine eindeutige Definition der Ausrichtung des Endbezugssytems durch drei aufeinanderfolgende Drehungen des Ausgangsbezugssystems. Die erste Drehung (Euler'scher Winkel E1) erfolgt um die Z-Achse des Ausgangsbezugssystems, die zweite (Euler'scher Winkel E2) erfolg um die Y-Achse des resultierenden Systems und die dritte (Euler'scher Winkel E3) um die Z-Achse des nun entstandenen Systems. Die Grenzen fr den ersten und dritten Euler'schen Winkel sind -180 und +180, der zweite ist immer positiv zwischen 0 und 180. Abb. 2-4 zeigt ein Beispiel einer POSITION zur Beschreibung des Endpunkts einer MOVE Anweisung. Das System errechnet die Euler'schen Winkel bei Lernprogrammieren von Endpunkten automatisch, so dass sie i.A. nicht explizit im Programm zugewiesen werden. Wenn POSITION zur Definition des Endpunkts einer MOVE Anweisung benutzt wird, ist die Konfigurationskomponente ntig, die den eindeutigen Satz der Winkel der Robotergelenke darstellt, der den TCP auf diese Position bringt. Der Satz mglicher Komponenten hngt von der Roboterfamilie ab. Der Konfigurationsstring wird automatisch zugewiesen, wenn der Endpunkt lernprogrammiert wird, so dass er i.A. nicht explizit im Programm zugewiesen wird. Der Konfigurationsstring kann zwei Arten von Daten enthalten: Einstellungsmarken und Umdrehungsmarken. Fr die Einstellungsmarken werden im Konfigurationsstring folgende Buchstaben benutzt: S, E, W, A und B. Einige dieser Marken sind bei einigen Roboterarmen ungltig. Der ganze Satz wird nur bei der SMART Familie benutzt. Die Familien MAST, SCARA und Cylindric benutzen Untermengen dieser Komponenten. Die Armkonfigurationen von Schulter, Ellbogen und Handgelenk werden durch die Buchstaben S, E und W dargestellt. Das folgende ist z.B. die Beschreibung der Einstellungsmarken bei SMART Robotern: S, wenn im Konfigurationsstring vorhanden, zeigt an, dass der Roboter den Endpunkt mit dem WCP (Wrist Center Point - Handgelenk-Mittelpunkt) im Raum hinter der von der ersten und zweiten Achse aufgespannten Flche erreichen muss; E, wenn vorhanden, zeigt an, dass der Roboter den Endpunkt mit einem positiven Wert der dritten Achse erreichen muss; W, wenn vorhanden, zeigt an, dass der Roboter den Endpunkt mit einem negativen Wert der fnften Achse erreichen muss.

Die Buchstaben A und B sind die Konfigurationsmarken fr die Gelenkbewegungen des Handgelenks (das sind kartesische Bahnen mit $ORNT_TYPE=WRIST_JNT). Diese Marken werden bei Nichthandgelenkbewegungen ignoriert, genauso wie die Marken S, E und W bei Gelenkbewegungen des Handgelenks ignoriert werden. Das folgende sind die Bedeutungen der Einstellungsmarken bei SMART Robotern: A, wenn vorhanden, zeigt an, dass der Roboter den Endpunkt mit dem TCP (Tool Center Point - Werkzeug-Mittelpunkt) im Raum hinter der von der zweiten und dritten Achse aufgespannten Flche erreichen muss; B, wenn vorhanden, zeigt an, dass der Roboter den Endpunkt mit dem TCP im Raum hinter der von der ersten und zweiten Achse aufgespannten Flche erreichen muss.

Die Umdrehungsmarken sind ntzlich bei Roboterachsen, die sich mehrfach um sich selbst drehen knnen. Diese Roboter knnen die gleiche Position mit mehreren Achsenkonfigurationen erreichen, die sich die Zahl der Achsenumdrehungen (360) unterscheiden. Es gibt 4 Umdrehungsmarken: T1, T2, T3, T4. Die Syntax im Konfigurationsstring ist Ta:b, wo a der Markercode (1 bis 4) und b die Anzahl von Umdrehungen (-8 bis +7) ist. 00/1200 2-5

DARSTELLUNG DER DATEN Die Verknpfung von Markername und Achse ist in der folgenden Tabelle angegeben: Tabelle 2-1 Verknpfung von Markennamen und Achsen fr verschiedene Roboter NORMALKONFIGURATION AUSNAHMEN SMART 4.75 P Umdrehungsmarke T1 T2 T3 T4 Roboterachse ax 4 ax 6 ax 3 ax 5 Roboterachse ax 4 ax 6 ax 1 ax 2 SMART 7.40 P SMART 7.16 P Roboterachse ax 4 ax 6 ax 1 ax 5

PDL2

Im Konfigurationsstring kann jede Kombination von S, E, W, A, N und Ta:b verwendet werden, und zwar in beliebiger Reihenfolge. Das folgende ist ein Beispiel fr einen gltigen Konfigurationsstring. S E W A T1:1 T2:-1 T3:2
Z PROGRAM postest VAR P0 BEGIN P0:= POS(100, 200, 150, 90, 150, 0, ) USER FRAME location Ortskomponenten components END postest Y
Die Ortskomponenten sind are drei The location components die Entfernungen des PO of P0 Ursprung the three distances vom with respect to the user frame (U) des Anwenderbezugssystems. origin (U).

Y tool

orientation Orientierungscomponents komponenten

100

U X tool 150

config. Konfigurierungscomponents komponenten

P0

Z tool 200

X Z E1 Y

The Euler angles are defined as follow. Die Eulerschen Winkel sind wie folgt definiert:

starting frame of reference Ausgangsbezugssystem vor der before the first ersten Drehung rotation

X Z Y E2
Bezugssystem nach der ersten Drehung umof reference after the vor der frame die Z-Achse (90) und first rotation around Z axis (90 ) and zweiten before the second one

90

Y 150 X E3 Z

frame of reference after the Bezugssystem nach der zweiten Dresecond rotation around Y hung um die Y-Achse (150)axis (150 )

Y
Endbezugssystem (P0) nach der dritten Drehung final frame of reference (P0) um diethe third rotation around Z axis (0 ). after Z-Achse (0). Diese Werkzeugausrichtung This orientation of the tool is now described 0 wird nun durch die Folge E1= 90, E2=150, E3=by the sequence beschrieben. E1= 90 , E2 = 150 , E3 = 0 .

X Z

Abb. 2-4 Euler'sche Drehwinkel

2-6

00/1200

PDL2

DARSTELLUNG DER DATEN

PDL2 kann mit den Daten der Klasse POSITION die folgenden Operationen ausfhren: relative Position (:) POSITION-POSITION, POSITION-VECTOR

Das folgende Beispiel zeigt, wie eine POSITION Variable vereinbart und benutzt wird: PROGRAM postest VAR pos_var : POSITION BEGIN pos_var := POS(294, 507, 1492, 13, 29, 16, ) END pos PDL2 enthlt interne Routinen fr die Verwaltung von gemeinsam benutzten Positionen sowie fr den Zugang zu einzelnen Komponenten einer Position (siehe Kapitel "Liste der internen Routinen").

BEZUGSSYSTEME
Eine Position kann zur Definition des Ursprungs eines neuen kartesischen Koordinatensystems verwendet werden oder zur Angabe der Position eines Gegenstandes in einem kartesischen Koordinatensystem. In PDL2 werden Positionen in Bezug auf ein kartesisches Koordinatensystem definiert, wie in der Abbildung 2-5 dargestellt wird.

Y
Flanschbezugssystem Flange Frame Z $TOOL

P Lernprogrammierter Punkt Taught Point

Roboter

Robot

R
Y

X Z

Y X X X Z

Tool Frame Werkzeugbezugssystem


$UFRAME
Y

User Frame Anwenderbezugssystem

Basisbezugssystem Base Frame

$BASE
X

World Frame Bezugssystem Welt

Abb. 2-5 Systembezugssysteme und Koordinatentransformation Fr jeden Arm wird ein universales Koordinatensystem vordefiniert. Der Programmierer kann ein Koordinatensystem BASE ($BASE) als eine Position, die sich auf das universale Koordinatensystem bezieht, neu definieren. Auerdem kann er auch die Dimension des auf dem Flansch installierten Werkzeugs ($TOOL) als eine Position im Werkzeug-Koordinatensystem definieren. $UFRAME ist eine Transformation, die benutzt wird, um die Lage des Werkstcks in bezug auf 'Welt' zu beschreiben. Die Bezugssysteme ($BASE und $TOOL) knnen verwendet werden, um Vernderungen im Arbeitsbereich zu kompensieren, ohne da die Positionen neu abgespeichert werden mssen. $BASE zum Beispiel kann modifiziert werden, wenn der Arm innerhalb des Arbeitsbereiches neu positioniert wird, oder $TOOL kann verndert werden, wenn das Werkzeug auf dem Flansch gewechselt wird. Die Bezugssysteme knnen auch relativ zum Werkstck definiert werden, zum Beispiel fr die Karosserie eines Automobils. Wenn sich die Position der Karosserie ndert, nachdem z.B. die Schweipunkte dieses Werkstcks gelernt wurden, gengt es, das Bezugs-system BASE neu zu definieren, um alle gespeicherten Punkte wieder korrekt auf das Werkstck zu positionieren.

00/1200

2-7

DARSTELLUNG DER DATEN

PDL2

JOINTPOS
Die Datenklasse JOINTPOS stellt die Istpositionen der Armgelenke in Grad gemessen dar. Jedem Armgelenk entspricht eine Realkomponente. JOINTPOS Daten dienen also zur Definition der Position und der Ausrichtung des auf dem Flansch installierten Werkzeugs, das der Arm nach Abschlu der Bewegung aller seiner Gelenke erreichen soll. Jeder Real-Wert stellt die effektive Strecke dar, die ein Gelenk von seiner Nullposition aus zurcklegen mu. Jede JOINTPOS Variable ist einem bestimmten Arm zugeordnet und kann von keinem anderen Arm verwendet werden. Wie im Fall von ARRAY werden zur Identifizierung der einzelnen JOINTPOS Komponenten Indexzahlen verwendet, zum Beispiel: PROGRAM jnttest VAR real_var : REAL jointpos_var : JOINTPOS BEGIN real_var := jointpos_var[5] jointpos_var[3] := real_exp END jnttest Mit der gesamten Klasse JOINTPOS ist keine Operation mglich. PDL2 enthlt interne Routinen zur JOINTPOS-Behandlung (siehe Kapitel "Liste der internen Routinen").

XTNDPOS
Die Datenklasse XTNDPOS beschreibt eine Armposition, die mehr Achsen umfasst als in der Grundkonfiguration des Roboters enthalten sind. Sie wird fr die integrierten Bewegungen einer Achsengruppe verwendet, die aus einem Roboterarm und einigen Zusatzachsen besteht, und die vom System als eine Einheit betrachtet wird. Zum Beispiel kann XTNDPOS zur Darstellung eines Roboters auf Schienen verwendet werden. Der Roboter und die Schiene werden vom System wie ein einzelner Arm behandelt. Jede XTNDPOS wird einem bestimmten Arm zugeordnet und kann von keinem anderen Arm verwendet werden. Die Datenklasse XTNDPOS besteht aus einer kartesischen Position fr den Roboter und einem ARRAY von Gelenkwerten fr die brigen Achsen. Zum Verweis auf die einzelnen XTNDPOS Komponenten wird die Feldnotation mit den vorbesetzten Feldern POS, d.h. einer POSITION, und AUX, d.h. einem REAL ARRAY, benutzt. Zum Beispiel: PROGRAM auxaxis VAR plxtn : XTNDPOS BEGIN plxtn.POS := POS(294, 507, 1492, 13, 29, 16, ) plxtn.AUX[1] := 100 plxtn.AUX[2] := 150 END auxaxis Mit der gesamten Datenklasse XTNDPOS kann keinerlei Operation vorgenommen werden.

NODE
Die NODE Datenklasse ist der RECORD Klasse insoweit hnlich, als sie eine Menge von einem oder mehreren Datenelementen darstellt, die unter demselben Namen zusammengefat ist. Jedes Datenelement in einem Knoten wird als Feld bezeichnet und kann aus einer beliebigen PDL2 Datenklasse mit der Ausnahme von SEMAPHORE, RECORD, NODE und PATH bestehen. Der Unterschied zwischen NODE und RECORD besteht darin, da NODE eine Gruppe von vorbesetzten NODE Feldern zustzlich zu den anwenderdefinierten Feldern enthalten kann. Die vorbesetzten NODE Felder sind durch das Anfangssymbol $ gekennzeichnet, und ihre Bedeutung, die das System kennt, ist gleich der der entsprechenden vorbesetzten Variablen. Die Gruppe der vorbesetzten NODE Felder enthlt die Beschreibung und das Ziel eines einzelnen Bewegungsabschnitts (Bewegungsabschnitte werden in dem Kapitel "Bewegungssteuerung" beschrieben). 2-8 00/1200

PDL2

DARSTELLUNG DER DATEN

Die NODE Datenklassen werden im Programmabschnitt TYPE definiert. Die Definition einer NODE Klasse erzeugt eine anwenderdefinierte Datenklasse, die global fr das ganze System gilt. Das bedeutet, da Konflikte zwischen RECORD und NODE Definitionen auftreten, die den gleichen Namen jedoch unterschiedliche Felder haben. Der Programmierer benutzt deshalb besser eine einheitliches Schema zur Benennung der RECORD und NODE Definitionen. Der Programmierer kann die bentigte Anzahl von Feldern definieren, die in einem Knoten enthalten sein mssen, wobei daran erinnert sei, da die Maximalgre eines Knotenwerts 65535 Bytes ist. Die einzelnen Felder eines Knotens werden durch einen Punkt gekennzeichnet, der den Variablennamen des Knotens von dem Feldnamen trennt. Diese Vereinbarung heit Feldnotation. Zum Beispiel: node_var.$PRED_FIELD_NAME := exp -- vorbesetztes Knotenfeld node_var.field_name := exp -- anwenderdefiniertes Knotenfeld Alle fr eine bestimmte Datenklasse zur Verfgung stehenden Operationen knnen auf die einzelnen Felder, die zu dieser Datenklasse gehren, angewandt werden. Es ist mglich, einen vollstndigen Knoten als Argument in einem Routineaufruf zu benutzen, oder der Knoten kann in einer Zuweisungsanweisung oder als Ziel einer MOVE Anweisung gebraucht werden. Wenn Knoten in Zuweisungen benutzt werden, mssen beide Knoten zur selben Definition gehren.

PATH
Die Datenklasse PATH besteht aus einer Reihe von Knoten, die als eine einzige Bewegung zu interpretieren sind. Diese Datenklasse ist ein vorbesetzter Record, der die Felder NODE, FRM_TBL und COND_TBL enthlt. Das NODE Feld wird von einem ARRAY von Knoten gebildet, die die Knotensequenz darstellen. Seine Lnge ist dynamisch und ermglicht so, whrend der Ausfhrung der Tabelle Knoten anzufgen oder sie aus ihr zu lschen. Die Maximalzahl von Knoten in einem Zweig ist 65535, aber die Speichergre des Systems knnte eine solche Zahl von Knoten nicht erlauben. Die Knotenstruktur innerhalb des NODE Arrays hngt von der Definition des anwenderdefinierten Knotens ab und ist im Programmabschnitt CLASSE vereinbart. Jeder Knoten enthlt die Beschreibung und das Ziel eines Bewegungsabschnitts (Bewegungsabschnitte werden im Kapitel "Bewegungssteuerung" beschrieben). Das erlaubt dem Programmierer, die Definitionen den unterschiedlichen Anwendungen anzupassen. Es ist wichtig, im Auge zu behalten, da die verschiedenen Zweige unterschiedliche Knotendefinitionen benutzen knnen; alle Knoten innerhalb eines Zweigs haben jedoch dieselbe Definition. Die Klasse des Knotenpunktes gilt fr das System global. Das bedeutet, da Konflikte zwischen den Klassen von Knotenpunkten mit gleichem Namen und unterschiedlichen Felddefinitionen auftreten. Der Programmierer benutzt deshalb besser ein einheitliches Schema zur Benennung der Knotendefinitionen, um diese Konflikte zu vermeiden. Die einzelnen Felder innerhalb eines Knotens sind dadurch gekennzeichnet, da Indizes in das NODE Feld der PATH Variablen gesetzt werden. Zum Beispiel: path_var.NODE[3] := path_var.NODE[5] path_var.NODE[4] := node_var Die einzelnen Felder innerhalb eines Knotenpunkts werden durch die Beschreibung der Felder gekennzeichnet. Zum Beispiel: path_var.NODE[3].field_name := exp Alle fr eine bestimmte Datenklasse mglichen Operationen knnen mit den einzelnen Feldern, die zu dieser Datenklasse gehren, durchgefhrt werden. Das Feld FRM_TBL ist ein ARRAY von POSITION Variablen und reprsentiert das bei der Verarbeitung der Zweigknoten zu benutzenden Werkzeugkoordinaten- und/oder Bezugssystem. Der Array FRM_TBL enthlt 7 Elemente. Die Verwendung des Feldes FRM_TBL wird im Abschnitt ber die PATH Bewegung im Kapitel "Bewegungssteuerung" beschrieben. Das Feld COND_TBL ist ein ARRAY von INTEGER Werten, das Nummern der Bedingungs-handler enthlt, die bei der Verarbeitung der Zweigknoten zu benutzen sind. Der Array COND_TBL enthlt 32 Elemente. Die Verwendung des Feldes COND_TBL wird im Abschnitt ber die PATH Bewegung im Kapitel "Bewegungssteuerung" beschrieben. Auf die gesamte PATH Klasse kann keine Operation angewandt werden. Ein vollstndiger Zweig kann in der MOVE ALONG Anweisung oder als Argument beim Aufruf einer Routine benutzt werden. PDL2 enthlt interne Routinen, um Knoten in einen Zweig einzufgen, zu lschen oder am Ende eines Zweigs anzuhngen. Auerdem gibt es interne Routinen zum Feststellen der Anzahl der Knoten in einem Zweig oder zum Zuweisen/Feststellen eines Knotenidentifizierers (siehe das Kapitel "Liste der Internen Routinen").

00/1200

2-9

DARSTELLUNG DER DATEN

PDL2

SEMAPHORE
Die Datenklasse SEMAPHORE ist sehr ntzlich fr die Synchronisierung von konkurrierenden Programmen, die die gleichen Betriebsmittel benutzen. SEMAPHORE oder eine Matrize von SEMAPHOREs wird zum wechselseitigen Ausschlieen von einem Betriebsmittel verwendet, so da die einzelnen Programme keinen gleichzeitigen Zugriff darauf haben. Mit der gesamten Datenklasse SEMAPHORE ist keine Operation mglich, aber die folgenden Anweisungen verwenden SEMAPHORE Variablen: WAIT; SIGNAL.

Fr weitere Informationen ber die Verwendung der SEMAPHORE Variablen siehe Kapitel "Ausfhrungsuntersttzung".

VEREINBARUNGEN
Dieser Abschnitt beschreibt die Art, in der Konstanten, Variablen und vom Anwender zu besetzenden Datenklassen zu vereinbaren sind.

VEREINBARUNG VON KONSTANTEN


Die Konstanten werden in dem CONST Abschnitt des Programms vereinbart. Die Vereinbarung einer Konstanten definiert einen Konstantenidentifizierer mit zwei Attributen: einem Namen und einem unvernderlichen Wert. Die Datenklasse der Konstanten ist die des Werts, der ihr zugeordnet wird; das kann ein INTEGER, ein REAL, ein BOOLEAN Wert oder ein STRING sein. Innerhalb des Programms ist es mglich, ihren Identifizierer anstelle ihres Wertes zu verwenden. Die Syntax, die zur Vereinbarung einer Konstanten verwendet wird, ist folgende: name = || literal | predef_const_id || Die Vereinbarungen der Konstanten erscheinen im entsprechenden Abschnitt (der Vereinbarung der Konstanten), nach dem reservierten Wort CONST. Zum Beispiel: CONST num_parts = max_angle = part_mask = test_flag = error = An

4 180.0 0xF3 TRUE error has occurred.

PDL2 liefert vorbesetzte Konstanten, die zur Darstellung der am hufigsten verwendeten Werte benutzt werden. Diese vorbesetzten Konstanten sind in der Tabelle 1-3 des Kapitels "Einfhrung in die Sprache PDL2" aufgelistet.

VEREINBARUNG VON KLASSEN


Die Definitionen RECORD und NODE werden im Vereinbarungsabschnitt TYPE eines Programms deklariert. Die Vereinbarung einer Klasse legt einen Identifizierer fr die Klasse mit zwei Attributen fest: einem Namen und einer RECORD- oder einer NODE-Definition. Die Syntax fr die Vereinbarung einer RECORD-Definition ist folgende:

type_name = RECORD <fld_name <, fld_name>... : data_type>... ENDRECORD


Die Syntax fr die Vereinbarung einer NODE Definition ist folgende:

type_name = NODEDEF <predefined_name <, predefined_name>... <NOTEACH> >... <fld_name <, fld_name>... : data_type <NOTEACH> >... ENDNODEDEF
2-10 00/1200

PDL2

DARSTELLUNG DER DATEN

Der type_name ist der Identifizierer der anwenderdefinierten Klasse. Er wird in der Variablen- und Parametervereinbarung benutzt, um eine RECORD oder NODE Klasse anzuzeigen. Die Identifizierer fld_name bezeichnen die anwenderdefinierten Felder der RECORD oder NODE Klasse. Die Identifizierer predefined_name in einer Knotendefinition bezeichnen eine Reihe von Eigenschaften des Bewegungsabschnitts, die in jedem Knoten enthalten sind. Wie schon angegeben mssen die Felder des vorbesetzten Knotens vor den Feldern des anwenderdefinierten Knotens spezifiziert werden. Die Identifizierer predefined_name knnen die Folgenden sein: $CNFG_CARE $JNT_MTURN $MAIN_POS $ORNT_TYPE $SEG_FLY $SEG_FLY_TYPE $SEG_REF_IDx $SEG_TOL $SING_CARE $WEAVE_NUM $COND_MASK $LIN_SPD $MAIN_XTND $ROT_SPD $SEG_FLY_DIST $SEG_FLY_TRAJ $SEG_STRESS_PER $SEG_TOOL_IDX $SPD_OPT $WEAVE_TYPE $COND_MASK_BACK $MAIN_JNTP $MOVE_TYPE $SEG_DATA $SEG_FLY_PER $SEG_OVR $SEG_TERM_TYPE $SEG_WAIT $TURN_CARE

Die Bedeutung jedes Feldes des vorbesetzten Knotens ist identisch mit der vorbesetzten Variablen mit gleichem Namen. Fr ihre Beschreibung siehe die Kapitel "Bewegungssteuerung" und "Liste der vorbesetzten Variablen". Die Felder $MAIN_POS, $MAIN_JNTP und $MAIN_XTND bezeichnen das Hauptziel eines Bewegungsabschnitts. Eine Knotendefinition kann nur eins der vorbesetzten Felder $MAIN enthalten. Das ausgewhlte bestimmt die Datenklasse des Hauptziels. Wird ein Feld des vorbesetzten Knotens im Programm benutzt, ohne in der Knotendefinition enthalten zu sein, so setzt der Programmeditor das betreffende Feld automatisch in die Vereinbarung ein. Diese Operation wird als implizite Vereinbarung bezeichnet. Die NOTEACH Klausel wird benutzt, um anzuzeigen, da es unmglich ist, auf die in der Vereinbarung definierten Felder whrend der Modifizierung eines Zweigs in der Lernumgebung einzuwirken (MEMORY TEACH Befehl). (Fr weitere Informationen ber die Lernumgebung siehe Handbuch C3G Programmieranleitung). Die Vereinbarung der Klassen wird in einem Abschnitt fr die Klassenvereinbarung hinter dem reservierten Wort TYPE angezeigt. Zum Beispiel: TYPE ddd_part = RECORD name : STRING[15] count : INTEGER params : ARRAY[5] OF REAL ENDRECORD

lapm_pth1 = NODEDEF $MAIN_POS, $SEG_TERM_TYPE $MOVE_TYPE $SEG_WAIT NOTEACH weld_sch : ARRAY[8] OF REAL gun_on : BOOLEAN ENDNODEDEF
Die Vereinbarung einer Datenklasse ist ganz einfach die Definition dieser Datenklasse. Die neue Datenklasse kann fr die Vereinbarung von Variablen und Parametern verwendet werden. 00/1200 2-11

DARSTELLUNG DER DATEN

PDL2

VEREINBARUNG VON VARIABLEN


Die Variablen werden in dem Abschnitt fr die Vereinbarung der Variablen innerhalb eines Programms deklariert. Durch die Vereinbarung einer Variablen definiert man einen Identifizierer der Variablen mit zwei Attributen: einem Namen und der Datenklasse. Im Rahmen des Programms kann der Variablen ein beliebiger Wert der vereinbarten Datenklasse zugeordnet werden. Die Syntax, die fr die Vereinbarung einer Variablen zu verwenden ist, ist folgende: name <, name>... : data_type <var_options> Die verschiedenen Datenklassen (data_type), die zur Verfgung stehen, und die entsprechende Syntax sind: INTEGER REAL BOOLEAN STRING [length] ARRAY [rows <, columns>] OF item_type record_type node_type VECTOR POSITION JOINTPOS <FOR ARM[number]> XTNDPOS <FOR ARM[number]> PATH OF node_type SEMAPHORE Die verschiedenen Werte und Bereiche fr Lnge, Zeile, Spalte und Datenklasse werden im Abschnitt Datenklassen dieses Kapitels beschrieben. Die Lnge eines STRING oder die Gre(n) eines ARRAY knnen mit * anstelle eines tatschlichen Werts angegeben werden. Wird die Notation * in einem zweidimensionalen ARRAY benutzt, so mssen zwei * angegeben werden (*,*). Die Notation * wird benutzt, wenn STRING oder ARRAY Variablen von einem anderen Programm importiert werden. Das Eigentmerprogramm mu die tatschliche Gre der Variablen spezifizieren, whrend das importierende Programm die Notation * benutzt (siehe das Beispiel im Abschnitt "Gemeinsam benutzte Variablen und Routinen" in diesem Kapitel). Wird auf die Variable zugegriffen, bevor ihr ein tatschlicher Wert zugewiesen wurde, so tritt ein Fehler auf. Die tatschlichen Gre wird eingesetzt, wenn ein Programm oder eine Datei, die den tatschlichen Wert bestimmen, geladen werden. Die importierenden Programme knnen die tatschliche Gre ber interne Routinen finden (siehe das Kapitel "Liste der internen Routinen"). Die Notation * ist in lokalen Variablen von Routinen oder in Felddefinitionen nicht zulssig. Die Bezeichnungen der Arme werden auf Systemebene angegeben, indem einer Achsengruppe eine Armnummer zugeordnet wird. Sie sind fr Einzelarmsystem nicht notwendig. (Siehe Handbuch C3G Bedienungsanleitung). Wenn kein Arm in der Vereinbarung einer JOINTPOS oder einer XTNDPOS bezeichnet wird, wird das Attribut des Programms PROG_ARM verwendet. Wenn noch nicht einmal PROG_ARM im Programm spezifiziert ist, wird der Standardarm verwendet ($DFT_ARM). Die gltige Syntax fr die var_options ist folgende: <EXPORTED FROM prog_name> <( initial_value )> <NOSAVE> Die Klausel EXPORTED FROM ist ausschlielich fr die Vereinbarung von Programmvariablen zugelassen. Fr weitere Informationen siehe Abschnitt "Gemeinsam benutzte Variablen und Routinen" in diesem Kapitel. Die Klausel des Anfangswertes (initial_value) ist sowohl fr Programmvariablen- als auch fr Routinevereinbarungen zugelassen. Sie ist aber nur gltig, wenn es sich um Klassen von INTEGER, REAL, BOOLEAN oder STRING Daten handelt. Diese Option gibt einen Anfangswert fr alle Variablen an, der in den Vereinbarungsanweisungen spezifiziert wird. Der Anfangswert der Programmvariablen wird den Programmvariablen zu Beginn jeder Programmaktivierung zugeordnet und der der Routinevariablen zu Beginn jedes Routineaufrufs (fr weitere Informationen ber die Routinevariablen siehe Kapitel "Routinen"). Der Anfangswert kann ein Literal sein, ein vorbesetzter oder ein vom Anwender definierter Konstantenidentifizierer. Die Datenklasse des Anfangswertes mu der Datenklasse der Vereinbarung der Variablen entsprechen, mit Ausnahme des Literals INTEGER, der als Anfangswert in der Vereinbarung von REAL-Variablen verwendet werden kann. 2-12 00/1200

PDL2

DARSTELLUNG DER DATEN

Die Werte der Programmvariablen knnen in einer Variablendatei zur Verwendung bei der nachfolgenden Programmaktivierung gespeichert werden. (Fr weitere Informationen ber die Variablendateien siehe C3G Programmieranleitung). Die Klausel NOSAVE gibt an, da die Variablen, die in dieser Vereinbarung deklariert werden, nicht in der Datei der Variablen gespeichert oder von diesem verndert werden drfen. Diese Option ist ausschlielich fr die Vereinbarung von Programmvariablen zugelassen und fr alle in den Vereinbarungen deklarierten Variablen gltig. Die Klausel NOSAVE wird automatisch zu allen Vereinbarungen der Variablen SEMAPHORE hinzugesetzt, weil diese in einer Variablendatei nicht zugelassen sind. Die Option NOSAVE mu in allen Vereinbarungen der Programmvariablen verwendet werden, die die Klausel des Anfangswertes beinhalten. Wenn sie nicht angegeben wird, sendet der Programmeditor dem Anwender ein Signal, weil der Anfangswert fr die initialisierten Variablen jedesmal zugewiesen wird, wenn das Programm aktiviert wird, und es werden eventuell von der Variablendatei geladene Werte ausgeschlossen. Die Vereinbarungen der Variablen erscheinen im entsprechenden Abschnitt (der Vereinbarungen der Variablen), nach dem reservierten Wort VAR. Zum Beispiel: VAR count, total : INTEGER (0) NOSAVE timing : INTEGER (4500) angle, distance : REAL job_complete, flag_check, flag_1, flag_2 : BOOLEAN error_msg : STRING[30] menu_choices : ARRAY[4] OF STRING[30] matrix : ARRAY[2, 10] OF INTEGER offset : VECTOR part_rec : ddd_part pickup, perch : POSITION safety_pos : JOINTPOS FOR ARM[2] door_frame : XTNDPOS FOR ARM[3] weld_node : lapm_pth1 weld_pth : PATH OF lapm_pth1 work_area : SEMAPHORE NOSAVE default_part : INTEGER (OxFF) NOSAVE Wenn der Programmierer einen nicht vereinbarten Variablenidentifizierer in dem ausfhrbaren Abschnitt eines Programms verwendet, setzt der Programmeditor automatisch eine Vereinbarung fr diese Variable ein. Diese Operation wird als implizite Vereinbarung bezeichnet. Die Variable mu kompatibel mit ihrer Zugehrigkeitsklasse verwendet werden; andernfalls wird ein Fehler ausgegeben. Die neue Variable wird einer schon bestehenden Variablenvereinbarung angefgt, die zur gleichen Datenklasse gehrt und weniger als 5 Variablen enthlt, - sofern eine solche schon existiert. Ist dies nicht der Fall, wird eine neue Vereinbarungsanweisung eingesetzt. Nicht vereinbarte Variablen knnen in dem von einer Routine auszufhrenden Abschnitt nicht verwendet werden, sonst wird ein Fehler ausgegeben. PDL2 enthlt vorbesetzte Variablen fr die Daten, die sich auf eine Bewegung und auf Ein-/Ausgabeeinrichtungen sowie auf andere Systemdaten beziehen. Diese Variablen sind im Kapitel "Liste der vorbesetzten Variablen" beschrieben.

GEMEINSAM BENUTZTE VARIABLEN UND ROUTINEN


Durch die optionale Klausel EXPORTED FROM knnen Variablen und Routinen als einem anderen Programm zugehrig oder als nicht exklusiv und fr andere Programme verwendbar definiert werden. Somit knnen verschiedene Programme die gleichen Variablen und Routinen verwenden. Die Klausel EXPORTED FROM kann in jeder beliebigen Variablen- oder Routinevereinbarung verwendet werden. (Zur Vereinbarung von Routinen siehe Kapitel "Routinen"). Die Syntax fr die Vereinbarung einer gemeinsamen Variablen oder Routine ist wie folgt: EXPORTED FROM prog_name Prog_name gibt den Namen des Programms an, dem die spezifizierte Variable oder Routine angehrt. Wenn dieser Name gleich dem des Programms ist, aus dem die Anweisung stammt, ist der Zugriff auf die Variable/Routine auch anderen Programmen erlaubt.

00/1200

2-13

DARSTELLUNG DER DATEN

PDL2

Wenn prog_name anders ist, als der Name des Programms, in dem sich die Anweisung befindet, gehrt die Variable/Routine zu prog_name. In diesem Fall mu das Programm, das die Daten enthlt, diese auch exportieren, sonst tritt ein Fehler beim Laden des Programms auf. Das folgende Beispiel zeigt, wie die Klausel EXPORTED FROM fr gemeinsam benutzte Variablen verwendet wird. Die Beispiele fr gemeinsam benutzte Routinen sind im Anhang "Programmbeispiele" dargestellt. PROGRAM a VAR PROGRAM b VAR

x : INTEGER EXPORTED FROM a y : REAL EXPORTED FROM b ary : ARRAY[5] OF REAL EXPORTED FROM a
BEGIN . . . END a -- x und ary knnen von anderen Programmen verwendet werden -- y gehrt zum Programm b

y : REAL EXPORTED FROM b

x : INTEGER EXPORTED FROM a ary : ARRAY[*] OF REAL EXPORTED FROM a


BEGIN . . . END b -- y kann von anderen Programmen verwendet werden -- x und ary gehren zum Programm a

In einer Routine kann die Klausel EXPORTED FROM whrend der Vereinbarung einer Variablen nicht verwendet werden. Auerdem kann die Klausel des Anfangswertes nicht mit aufgenommen werden, wenn die Klausel EXPORTED FROM einen anderen als den Namen des Programms angibt, das die Anweisung enthlt. Das folgende Beispiel erlutert, wie eine EXPORTED FROM Klausel bei gemeinsam benutzten Routinen verwendet wird. Weitere Beispiele finden sich im Anhang "Programmbeispiele". PROGRAM a ROUTINE rout_a(x : INTEGER) EXPORTED FROM a ROUTINE rout_b(x, y : INTEGER) EXPORTED FROM b ROUTINE rout_a(x:INTEGER) BEGIN . . . END rout_a BEGIN . . . END a -- rout_a kann von anderen Programmen benutzt werden -- rout_b gehrt zum Programm b

AUSDRCKE
Die Ausdrcke werden aus Kombinationen einer beliebigen Anzahl von Konstanten, Variablen, Funktionsroutinen (function routines) und literalen Werten mit Operationszeichen gebildet und stellen einen Wert dar. Zum Beispiel:

count + 1 -- Arithmetik VEC(a, b, c) * 2 count >= total flag_1 AND flag_2


2-14

-- Arithmetik -- Vergleich -- BOOLEAN 00/1200

PDL2

DARSTELLUNG DER DATEN

Ein Ausdruck stellt sowohl eine Datenklasse, als auch einen Wert dar. Die Datenklasse wird durch die Operatoren und die Operanden definiert, die zu ihrer Bildung verwendet wurden. Die Tabelle 2-2 zeigt, welche Operandenklassen fr welche Operatoren mglich sind und welche Datenklasse sich daraus ergibt. Der sich ergebende Wert kann mit Hilfe einer Zuweisung einer Variablen der gleichen Klasse zugeordnet werden. In der Tabelle 2-2 werden die folgenden Abkrzungen verwendet: I INTEGER R REAL B BOOLEAN V VECTOR P POSITION Tabelle 2-2 Datenklassen als Ergebnis von Operationen Operatoren: =,<> DIV, MO D I <,<= >,>= AND, NOT, OR, XOR ROR ROL SHR SHL += -=

+,Operanden: INTEGER REAL INTEGER-REAL REAL-INTEGER BOOLEAN STRING INTEGER-VECTOR REAL-VECTOR VECTOR POSITION POSITION-VECTOR (1)

**

I R R R V

I R R R V V

R R R R V V

B B B B B B B(1)

I B

P V

I R

Zum Vergleich von VECTOR Werten knnen nur die Operatoren = und <> benutzt werden.

ARITHMETISCHE OPERATIONEN
Die arithmetischen Operatoren fhren die blichen arithmetischen Operationen mit INTEGER, REAL und VECTOR Operanden aus. Die arithmetische Operatoren sind die folgenden: + INTEGER, REAL, oder VECTOR Addition * DIV / MOD ** += -= INTEGER, REAL, oder VECTOR Subtraktion INTEGER, REAL, oder VECTOR Multiplikation INTEGER division (Dezimalstellen werden vernachlssigt) REAL oder VECTOR Division INTEGER Wert (Modulo) INTEGER oder REAL Potenzierung INTEGER Inkrement INTEGER Dekrement

Zur VECTOR Addition oder Subtraktion werden VECTOR Operanden bentigt; sie berechnen ein VECTOR Ergebnis, dessen Komponenten die Summe oder die Differenz der Elemente der Ope-randen sind. Fr skalare VECTOR Division oder Multiplikation werden ein VECTOR und ein INTEGER oder REAL Operand bentigt. Die so errechneten Ergebnisse werden durch Operationen mit jedem einzelnen VECTOR Element erhalten (ein INTEGER Operand wird wie ein REAL behandelt). Wenn eine INTEGER oder REAL Zahl durch den VECTOR geteilt wird, wird der Wert mit dem Kehrwert jedes einzelnen Elements von VECTOR multipliziert. 00/1200 2-15

DARSTELLUNG DER DATEN

PDL2

PDL2 enthlt interne Routinen zur Ausfhrung der normalen mathematischen Operationen, wie Abrunden oder Abschneiden (Rckgabe des Ganzzahlteils eines Realwerts), trigonometrische Funktionen oder Quadratwurzeln (siehe Kapitel "Liste der internen Routinen").

VERGLEICHSOPERATIONEN
Die Vergleichsoperatoren vergleichen zwei Operanden miteinander und ermitteln einen BOOLEAN Wert, je nachdem, ob der Ausdruck TRUE oder FALSE ist. Die Vergleichsoperatoren sind folgende: < > = <= >= <> kleiner als grer als gleich kleiner/gleich grer/gleich ungleich

Die Vergleichsoperationen knnen mit INTEGER, REAL, BOOLEAN (nur = oder <>), STRING und VECTOR (nur = oder <>) Werten durchgefhrt werden.

LOGISCHE OPERATIONEN
Die BOOLEAN Operationszeichen fungieren als logische Operatoren, die ein BOOLEAN Ergebnis errechnen, wenn sie mit BOOLEAN Werten verwendet werden. Fr alle BOOLEAN Operatoren werden zwei Operanden bentigt, mit Ausnahme von NOT, wo nur ein Operand verwendet wird. AND OR XOR NOT TRUE wenn beide Operanden TRUE sind TRUE wenn mindestens einer der Operanden TRUE ist TRUE wenn ein und nur ein Operand TRUE ist Negation des BOOLEAN Operanden

OPERATIONEN AUF BIT-BASIS


Bitoperationen fhren bestimmte Manipulationen an den Bits eines INTEGER Werts durch. Bitoperationen knnen auf drei verschiedene Arten ausgefhrt werden: mit BOOLEAN Operatoren, durch Rotieren oder Verschieben oder mit internen Prozeduren (BIT_TEST, BIT_SET und BIT_CLEAR). Die Operatoren fr Verschieben und Rotieren erfordern INTEGER Operanden und ergeben INTEGER Resultate. Der linke Operand ist der Wert, der verschoben oder rotiert werden soll, und der rechte derjenige, der angibt, um wie viele Bits verschoben bzw. rotiert werden soll. Die Verschiebeoperatoren fhren eine arithmetische Verschiebung aus, d.h. die herausgeschobenen Bits gehen verloren, in die durch eine Linksverschiebung geleerten Stellen werden Nullen eingesetzt und eine Kopie des Vorzeichenbit (Bit 32) des ursprnglichen Werts, der verschoben wird, wird in die durch eine Rechtsverschiebung leergemachte Stellen gesetzt. Rotationsoperatoren schieben die herausgeschobenen Bits am anderen Ende ein. Die Abb. 2-6 and 2-7 zeigen ein Beispiel fr eine Linksverschiebung und eine Linksrotation. Abb. 2-8 ist ein Beispiel fr eine Anweisung fr eine Rechtsverschiebung und Abb. 2-6 zeigt das Ergebnis der folgenden PDL2 Anweisung: x := -122704229 SHL 1
32 1

Originalwert Original Value 1 0 1 1 0 1 1 0 1 1 0 1 1 1 0 1 0 1 1 0 0 1 1 0 1 0 1 1 1 0 1 1


0

berechneter Wert 0 1 1 0 1 1 0 1 1 0 1 1 1 0 1 0 1 1 0 0 1 1 0 1 0 1 1 1 0 1 1 0 alculated Value

Abb. 2-6 Operator fr Linksverschiebung 2-16 00/1200

PDL2 Abb. 2-7 zeigt das Ergebnis der folgenden Rotation: x := -122704229 ROL 1

DARSTELLUNG DER DATEN

32 1 Originalwert Original Value 1 0 1 1 0 1 1 0 1 1 0 1 1 1 0 1 0 1 1 0 0 1 1 0 1 0 1 1 1 0 1 1

berechneter Wert alculated Value 0 1 1 0 1 1 0 1 1 0 1 1 1 0 1 0 1 1 0 0 1 1 0 1 0 1 1 1 0 1 1 1

Abb. 2-7 Operator fr Linksrotation Abb. 2-8 zeigt das Ergebnis der folgenden Rechtsverschiebung: x := -122704229 SHR 1

Originalwert

berechneter Wert

Abb. 2-8 Operator fr Rechtsverschiebung Die von den BOOLEAN Operatoren oder denen zum Verschieben oder Rotieren ausgefhrten Operationen werden im folgenden aufgefhrt. Fr Erluterungen bzgl. BIT_TEST, BIT_SET und BIT_CLEAR siehe das Kapitel "Liste der internen Routinen". AND OR XOR NOT ROR ROL SHR SHL das Ergebnis-Bit ist 1, wenn beide Operanden-Bits 1 sind das Ergebnis-Bit ist 1, wenn mindestens eines der beiden Operanden-Bits 1 ist das Ergebnis-Bit ist 1, wenn das Bit eines und nur eines der beiden Operanden 1 ist das Ergebnis-Bit ist das Gegenteil vom Bit des Operanden INTEGER nach rechts rotieren INTEGER nach links rotieren INTEGER nach rechts schieben INTEGER nach links schieben

00/1200

2-17

DARSTELLUNG DER DATEN

PDL2

VEKTOROPERATIONEN
VECTOR Operationen umfassen Operationen, die sich auf das uere und auf das innere Produkt beziehen. Mit dem Operator fr das uere Produkt (#) ergibt sich ein VECTOR, der senkrecht zu den VECTOR Operanden ist. Die Lnge entspricht dem Produkt der Lnge der Operanden und dem Sinus des Winkels zwischen den Operanden. Die Richtung wird durch die Rechtehandregel bestimmt. Zum Beispiel: VEC(2, 5, 7) # VEC(3, 9, 1) = VEC(-58, 19, 3) Das Operationszeichen des internen Produkts (@) ergibt einen REAL Wert, der der Summe der Elementenprodukte der beiden VECTOR Operanden entspricht. Zum Beispiel: VEC(7.0, 6.5, 13.4) @ VEC(1.3, 5.2, 0.0) = 42.9

POSITIONSOPERATIONEN
Das Positions-Operationszeichen (:) fhrt eine spezielle Positionsoperation aus. Es kann mit zwei POSITION Operanden verwendet werden oder mit einem POSITION und einem VECTOR Operanden. Diese Operation wird durch Konvertieren des Positionsoperanden in eine Matrix, Durchfhren der Operation und Rckkonvertieren der resultierenden Matrix in das Standardpositionsformat implementiert. Bei einer POSITION und VECTOR Operation ist das Ergebnis ein Vektor. Das Ergebnis bei zwei POSITION Operanden ist eine POSITION, die dem rechten Operanden entspricht, sich aber auf das Koordinatensystem des linken Operanden bezieht. Zum Beispiel: POS(10, 20, 30, 0, 30, 0, ) : POS(10, 20, 30, 45, 0, 0, ) = POS(33.66, 40, 50.981, 0, 30, 65, ) Das Ergebnis bei einem POSITION und einem VECTOR Operanden ist ein VECTOR, der dem VECTOR Operanden entspricht, sich aber auf den POSITION Operanden bezieht. Zum Beispiel: POS(10, 20, 30, 0, 30, 0, ) : VEC(10, 0, 0) = VEC(18.660, 20, 25)

KONVERSION VON DATENKLASSEN


PDL2 sieht keine implizite Konversion der Datenklasse vor. Trotzdem kann ein INTEGER Wert als REAL Wert verwendet werden. PDL2 enthlt interne Routinen fr die Konversion der Klasse in/aus einigen der anderen Datenklassen (siehe Kapitel "Liste der internen Routinen").

VORRANG DER OPERATOREN


Die Operationszeichen werden in der in Tabelle 2-3 gezeigten Reihenfolge ausgefhrt. Ein Ausdruck, in dem alle Operationszeichen den gleichen Rang haben, wird von links nach rechts abgearbeitet. Tabelle 2-3 Operationzeichen und Vorrang Vorrang 1 2 3 4 5 6 7 8 9 Operatoren array [ ]; field . () Vorzeichen +; Vorzeichen-; NOT **, Vektor @, #; Position : *, /, AND, MOD, DIV +, -, OR, XOR ROR, ROL, SHR, SHL =, <>, <, <=, >, >= Zuweisung :=, Inkrement +=, Dekrement -=

2-18

00/1200

PDL2

DARSTELLUNG DER DATEN Wenn im Ausdruck keine Klammern verwendet werden, mu der Anwender die genaue Ausfhrungsreihenfolge der Operatoren kennen. Auerdem werden die berflssigen Klammern im Ausdruck vom System automatisch entfernt. Zum Beispiel ergibt die erste der untenstehenden IF Anweisungen die folgende IF Anweisung, weil die Klammern den normalen Vorrang des Operators nicht beinflussen:

IF ($DIN[5] AND $DIN[6]) = FALSE THEN . . . ENDIF IF $DIN[5] AND $DIN[6] = FALSE THEN . . . ENDIF Wenn die Prfung FALSE von $DIN[6] eine AND Verknpfung mit $DIN[5] haben soll, mssen die Klammern dazu verwendet werden, den Vorrang des Operators aufzuheben: IF $DIN[5] AND ($DIN[6] = FALSE) THEN . . . ENDIF

ZUWEISUNG
Die Zuweisung (:=) definiert einen neuen Wert einer Variablen, wozu das Ergebnis eines Ausdrucks benutzt wird. Der Wert, der sich aus dem Ausdruck ergibt, mu derselben Klasse wie die Variable angehren. Die Anzahl der der Variablen JOINTPOS zugewiesenen Arme mu mit der fr XNTDPOS kompatibel sein, wie auch der Rang und die Dimension der Matrizen kompatibel sein mssen. Die Syntax fr eine Zuweisung ist folgende: variable := expression Beispiele fr Zuweisungen:

count := count + 1 offset := VEC(a, b, c) * 2 menu_choices[7] := 7. Zurck zum vorhergehenden Men part_rec.params[1] := 3.14 part_mask := 0xE4 weld_pth.NODE[3].$SEG_WAIT := FALSE $MOVE_TYPE := LINEAR
Den Datenklassen PATH und SEMAPHORE kann kein Wert zugewiesen werden. Wird derselbe Wert mehr als einer Anwender-definierten Variablen desselben Datentypszugewiesen, knnen Mehrfachzuweisungen in dieselbe Zeile geschrieben werden. Systemvariablen, vorbesetzte Knotenfelder und Pfadknoten sind nicht erlaubt. Zum Beispiel:

count1 := count2 := count3 := count + 1 offset1 := offset2 := VEC (a, b, c)


Mehrfachzuweisungen in derselben Zeile sind in Bedingungsaktionen nicht erlaubt.

00/1200

2-19

DARSTELLUNG DER DATEN

PDL2

TYPISIERUNG
Diese PDL2 Funktion arbeitet mit Variablen und Werten vom Typ INTEGER, BOOLEAN und REAL. Es handelt sich um eine sehr spezifische Funktion, die nur in ganz besonderen Anwendungsfllen benutzt wird. Flle, in denen nur die Datenklassen INTEGER und REAL vorkommen, sind anders zu betrachten als die, bei denen auch BOOLEAN benutzt wird. In beiden Fllen wird die Typisierung durch Angabe der anzuwendenden Datenklasse in runden Klammern angezeigt. Bei Typisierung zwischen den Datenklassen INTEGER und REAL wird die Variable oder der Wert fr die Operation in den Speicher der C3G gelesen und das Bitmuster dieses Operanden untersucht. Dieses Bitmuster wird dann dem Zielort zugewiesen oder mit dem anderen Operator des Ausdrucks verglichen. Bei Verwenden in Zuweisungen kann Typisierung nur auf der rechten Seite angegeben werden. In Beziehungsausdrcken kann sie auf beiden Seiten benutzt werden. Diese Funktion ist zulssig in Programmanweisungen, Bedingungsaktionen und Bedingungsausdrcken. Es werden INTEGER-Variable, -Ports oder -Werte sowie REAL-Variable und -Werte benutzt. Beispielsweise sind die Zahlen 0x40600000 und 0x3f99999A die Hexadezimaldarstellungen des Bitmusters fr die Zahlen 3,5 und 1,2 im Speicher der C3G. -- assign 0x40600000 to int_var int_var := (INTEGER)3.5 -- assing 1.2 to real_var real_var := (REAL)0x3f99999A int_var := (INTEGER)(real_var + 3.4) CONDITION[5] : -- wenn real_var gleich 5.5 und int_var 0x3f99999A -- lst die Bedingung aus WHEN (INTEGER)real_var> int_var DO real_var := (REAL)3 WHEN $AOUT[13] < (INTEGER) real_var DO int_var := (INTEGER)5.6 WHEN real_var > (REAL)int_var DO $AOUT[7] := (INTEGER)5.6 WHEN real_var > (REAL)$AOUT[4] DO int_var := (INTEGER)real_var ENDCONDITION Bei Typisierung zwischen den Datenklassen INTEGER und BOOLEAN oder REAL und BOOLEAN wird der INTEGER- oder REAL-Zielvariablen der Wert 1 oder 1,0 zugewiesen, wenn die BOOLEAN Variable (oder der Port oder Wert) TRUE ist, sonst ist er 0. Dieser Aspekt der Typisierung ist in Bedingungshandlern nicht zulssig. Zum Beispiel:

int_var := (INTEGER)bool_var int_var := (INTEGER)$DOUT[5] real_var := (REAL)bool_var real_var := (REAL)$FDOUT[6]

2-20

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN

Handbuch fr Programmiersprache

1 2

BEWEGUNGSSTEUERUNG
SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

3
4 5 6 7 8 9 10 11 12 A B C D Index

INHALT
Abschnitt MOVE ANWEISUNG . . . . . . . . . . . . . . . . ARM Klausel. . . . . . . . . . . . . . . . . . . TRAJECTORY Klausel . . . . . . . . . . . . . ZIEL Klausel . . . . . . . . . . . . . . . . . . . MOVE TO . . . . . . . . . . . . . . . . . . MOVE NEAR . . . . . . . . . . . . . . . . . MOVE AWAY . . . . . . . . . . . . . . . . MOVE RELATIVE . . . . . . . . . . . . . . MOVE ABOUT . . . . . . . . . . . . . . . . MOVE BY . . . . . . . . . . . . . . . . . . MOVE FOR . . . . . . . . . . . . . . . . . OPTIONAL KLAUSELN . . . . . . . . . . . . . ADVANCE Klausel . . . . . . . . . . . . . . TIL Klausel . . . . . . . . . . . . . . . . . . WITH Klausel. . . . . . . . . . . . . . . . . SYNCMOVE Klausel . . . . . . . . . . . . . . KONTINUIERLICHE BEWEGUNG (MOVEFLY) ZEITGEBER UND SYNCHRONISIERER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seite . . . . . . . . . . . . . . . . . . 3-1 3-1 3-1 3-2 3-2 3-3 3-3 3-4 3-4 3-5 3-5 3-6 3-6 3-6 3-6 3-7 3-8 3-8

BEWEGUNGSSTEUERUNG

Handbuch fr Programmiersprache

PDL2

INHALT (Fortsetzung)
Abschnitt Seite

BEWEGUNGSSTEUERUNG MIT FLY_CART. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-9 MOVE ALONG ANWEISUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-9 ARM Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13 KNOTENPUNKT-BEREICH Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13 OPTIONAL Klausel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13 ADVANCE Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13 WITH Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-14 KONTINUIERLICHE BEWEGUNG (MOVEFLY). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-15 STOP UND WIEDERAUFNAHME VON BEWEGUNGEN . . . . . . . . . . . . . . . . . . . . . . . . . 3-15 CANCEL MOTION Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-15 LOCK, UNLOCK, und RESUME Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-16 SIGNAL SEGMENT Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-16 HOLD Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-16 ATTACH und DETACH Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-16 HANDAnweisungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-17

PDL2

BEWEGUNGSSTEUERUNG

BEWEGUNGSSTEUERUNG
In diesem Kapitel werden die PDL2 Anweisungen zur Steuerung der Armbewegung und des Werkzeugs (Zange) beschrieben.

MOVE ANWEISUNG
Die MOVE Anweisung steuert die Bewegung der Arme. Dank der vielfltigen Klauseln und Optionen sind unterschiedliche Bewegungstypen mglich. Die Syntax der MOVE Anweisung ist folgende: MOVE <arm_clause> traj_clause dest_clause <opt_clauses> <sync_clause> Wenn eine Anweisung mehr als eine Zeile beansprucht, werden Kommas verwendet, um das Zeilenende nach der Zielklausel oder nach jeder optionalen Klausel anzuzeigen. Das reservierte Wort ENDMOVE gibt dann das Ende der Anweisung an. Der folgende Abschnitt zeigt Beispiele dazu.

ARM Klausel
Ein einzelnes PDL2 Programm kann zur Steuerung von mehreren Armen verwendet werden. Die Arme werden auf Systemebene eingerichtet, wobei einer Gruppe von Achsen eine Armnummer zugeordnet wird. Die optionale Klausel ARM dient dazu, den Arm zu definieren, der verschoben werden soll. Sie wird in die Anweisung eingefgt. Fr Programme, die nur einen Arm steuern, ist eine Bezeichnung unntig. Wenn angegeben wird die optionale Klausel ARM wie im Folgenden beschrieben benutzt: MOVE ARM[1] TO perch Der bezeichnete Arm wird fr die gesamte MOVE Anweisung verwendet. Jeder vorlufige Wert, der in einer WITH Klausel fr die Bewegung angegeben wird, wird auf den bezeichneten Arm angewendet. Wenn keine ARM Klausel angegeben wird, wird der Standardarm verwendet. Der Programmierer hat die Mglichkeit, innerhalb der PROGRAM Anweisung einen Standardarm folgendermaen zu definieren: PROGRAM armtest PROG_ARM=1 . . . BEGIN MOVE TO perch -- verschiebt Arm 1 MOVE ARM[2] TO normal -- verschiebt Arm 2 END armtest Wenn keine Klausel spezifiziert und kein Arm im Programm angegeben wird, wird der Wert der vorbesetzten Variablen $DFT_ARM verwendet.

TRAJECTORY Klausel
Die Bahn kann entweder durch Verknpfung der MOVE Anweisung mit den vorbesetzten Konstanten JOINT, LINEAR, CIRCULAR (z.B. MOVE LINEAR TO p1") oder der vorbesetzten Variablen $MOVE_TYPE spezifiziert werden. Die optionale Klausel TRAJECTORY (Bahn) definiert eine Bahn fr die Bewegung und wird folgendermaen in die Syntax der MOVE Anweisung eingefgt: MOVE trajectory TO perch PDL2 enthlt die folgenden vorbesetzten Konstanten, die zur Definition der Bahn verwendet werden: LINEAR CIRCULAR JOINT Wenn Trajectory fr eine MOVE Anweisung spezifiziert ist, wirkt sie nur auf die Bewegung, fr die sie entworfen ist.

00/1200

3-1

BEWEGUNGSSTEUERUNG

PDL2

Wenn keine Trajectory Klausel in einer MOVE Anweisung eingeschlossen ist, wird der Wert der vorbesetzten Variablen $MOVE_TYPE (JOINT als Standard) verwendet. Der Programmierer kann den Wert von $MOVE_TYPE (JOINT als Standard) verndern, indem er ihm eine vorbesetzte Konstante zuordnet, wie im folgenden angezeigt: $MOVE_TYPE := JOINT MOVE TO perch MOVE LINEAR TO slot MOVE TO perch ----ordnet einen Modalwert zu Bewegung in Gelenken lineare Bewegung Bewegung in Gelenken

Die Bewegung eines Roboterarms kann verschiedene Bahnen durchlaufen, um die Endposition zu erreichen. Die Bahn jeder Bewegung kann als JOINT, LINEAR oder CIRCULAR angegeben werden. Eine Bewegung, die mit einer JOINT Bahn angegeben ist, bewirkt, dass alle Achsen zur gleichen Zeit starten und anhalten. Eine Bewegung mit einer LINEAR Bahn fhrt das Werkzeugzentrum in gerader Linie von der Start- zur Endposition. Eine Bewegung mit einer CIRCULAR Bahn fhrt das Werkzeugzentrum in einem Bogen. Die Anweisungen MOVE TO, MOVE NEAR, MOVE AWAY, MOVE RELATIVE, MOVE ABOUT, MOVE BY und MOVE FOR bentigen eine Bahn vom Typ LINEAR oder JOINT und knnen nicht mit einer CIRCULAR Bahn benutzt werden. Fr mehr Information ber die Eigenschaften von Bahnen und Bewegungen siehe das Kapitel "Bewegungssteuerung" im Handbuch C3G Programmieranleitung.

ZIEL Klausel
Diese Klausel spezifiziert die Art des Ziels und hat eine der folgenden Formen: TO || destination | joint_list || <VIA_clause> NEAR destination BY distance AWAY distance RELATIVE vector IN frame ABOUT vector BY distance IN frame BY relative_joint_list FOR distance TO destination

MOVE TO
MOVE TO verschiebt den angegebenen Arm zu einem spezifizierten Ziel. Das Ziel kann aus einem beliebigen Ausdruck bestehen, der einer der folgenden Klassen angehrt: POSITION JOINTPOS XTNDPOS Zum Beispiel: MOVE LINEAR TO POS(x, y, z, e1, e2, e3, config) MOVE TO perch MOVE TO home Das Ziel kann auch eine Liste der Positionen fr jedes Gelenk sein, d.h. eine Liste von realen Ausdrcke, wobei jedes Element dem Gelenkwinkel des Arms entspricht, der verschoben wird. Zum Beispiel: MOVE TO {alpha, beta, gamma, delta, omega} -- wobei alpha dem Gelenk 1, beta dem Gelenk 2, usw. entspricht. Es werden nur die Gelenke verschoben, deren Elemente aufgelistet sind. Zum Beispiel: MOVE TO { , , gamma, delta} -- Es werden nur die Gelenke 3 und 4 verschoben

3-2

00/1200

PDL2

BEWEGUNGSSTEUERUNG

VIA Klausel
Die optionale Klausel VIA kann zusammen mit der Zielklausel MOVE TO verwendet werden, um den Punkt anzugeben, in dem der Arm ein berschleifen vornehmen soll, um vom Anfangspunkt zum Zielpunkt zu gelangen. Die VIA Klausel wird normalerweise verwendet, um einen Bogen fr kreisfrmige Bewegungen zu definieren, wie in der Abbildung 3-1 gezeigt wird. Zum Beispiel: MOVE TO Anfang MOVE CIRCULAR TO Ziel VIA Bogen
Bogen (VIA) arc (VIA) Zieldestination

initial Anfang

Abb. 3-1

Position VIA fr eine kreisfrmige Bewegung

MOVE NEAR
Mit MOVE NEAR kann der Programmierer einen Zielpunkt auf dem Annherungsvektor zum Werkzeug in einem gewissen Abstand von einer bestimmten Position spezifizieren. Dieser als Istwert angegebene Abstand wird in Millimetern auf dem negativen Annherungsvektor zum Werkzeug gemessen (Z TOOL negativ). Das Ziel kann durch jeden beliebigen Ausdruck dargestellt werden, der als Ergebnis eine der folgenden Datenklassen hat: POSITION JOINTPOS XTNDPOS Zum Beispiel: MOVE NEAR Ziel BY 250.0

MOVE AWAY
MOVE AWAY gibt dem Programmierer die Mglichkeit, ein Ziel auf dem Annherungsvektor zum Werkzeug in einem bestimmten Abstand von der aktuellen Position zu spezifizieren. Der als Istwert angegebene Abstand wird in Millimetern auf dem negativen Annherungsvektor zum Werkzeug gemessen (Z TOOL negativ). Zum Beispiel: MOVE AWAY 250.0 Die Abbildung 3-2 stellt ein Beispiel fr MOVE NEAR, TO und AWAY dar.

Ziel Abb. 3-2

Ziel

Ziel

MOVE NEAR, TO und AWAY

00/1200

3-3

BEWEGUNGSSTEUERUNG

PDL2

MOVE RELATIVE
Mit MOVE RELATIVE kann der Programmierer ein Ziel im Verhltnis zur aktuellen Armposition angeben. Das Ziel wird durch einen Vektorwert spezifiziert, der in Millimetern gemessen wird und das angegebene kartesische Koordinatensystem benutzt. Zum Beispiel: MOVE RELATIVE VEC(100, 0, 100) IN TOOL Das Wort, das dem reservierten Wort IN folgt, spezifiziert ein Bezugssystem und mu eine der beiden vorbesetzten Konstanten TOOL, BASE oder UFRAME sein. In der Abbildung 3-3 wird ein Beispiel fr MOVE RELATIVE gezeigt.
MOVE LINEAR RELATIVE VEC(100,0,100) IN TOOL

current Ausgangsstellung

X 100 mm

Z 100 mm

destination

Ziel

Abb. 3-3

MOVE RELATIVE

MOVE ABOUT
MOVE ABOUT dient zur Definition des Ziels, das das Werkzeug nach einer Drehung um den spezifizierten Vektor gegenber der aktuellen Position erreichen soll. Der aus einem Istwert bestehende Winkel stellt die Drehung in Grad um den spezifizierten Vektor dar, wobei das spezifizierte kartesische Koordinatensystem benutzt wird. Zum Beispiel: MOVE ABOUT VEC(0, 100, 0) BY 90 IN TOOL Das Wort, das dem reservierten Wort IN folgt, spezifiziert ein Bezugssystem und mu eine der beiden vorbesetzten Konstanten TOOL, BASE oder UFRAME sein. Die Abbildung 3-4 zeigt ein Beispiel fr MOVE ABOUT.
MOVE ABOUT VEC(0,100,0) BY 90 IN TOOL

current 90 deg

Ausgangsstellung

Zielposition destination
Y Z

Abb. 3-4 3-4

MOVE ABOUT 00/1200

PDL2

BEWEGUNGSSTEUERUNG

MOVE BY
MOVE BY ermglicht dem Programmierer, ein Ziel als Liste von REAL Ausdrcken zu spezifizieren, wobei jedes Element einer inkrementalen Bewegung des Armgelenks entspricht. Fr die Achsen werden die Drehungen in Grad ausgedrckt, whrend Verschiebungen in Millimetern angegeben werden. Zum Beispiel: MOVE BY {alpha, beta, gamma, delta, omega} -- wobei alpha dem Gelenk 1, beta dem Gelenk 2, ...usw. entspricht Es werden nur die Gelenke verschoben, deren Elemente aufgelistet sind. Zum Beispiel: MOVE BY { , , gamma, , delta} -- es werden nur die Gelenke 3 und 5 verschoben

MOVE FOR
Mit MOVE FOR kann eine Teilbewegung auf der Bahn in Richtung auf ein theoretisches Ziels spezifiziert werden. Die Ausrichtung des Werkzeugs ndert sich im Verhltnis zum Abstand. Zum Beispiel: MOVE FOR distance TO destination Der Abstand (distance) wird durch einen realen Ausdruck dargestellt. Wenn der Wert positiv ist, wird die Bewegung in Richtung auf das Ziel hin gemessen. Ist der Wert dagegen negativ, wird die Bewegung in der entgegengesetzten Richtung gemessen. Der Abstand wird in Millimetern angegeben. Das Ziel (destination) kann durch jeden beliebigen Ausdruck dargestellt werden, der als Ergebnis eine der folgenden Datenklassen hat: POSITION JOINTPOS XTNDPOS Die Abbildung 3-5 stellt ein Beispiel fr MOVE FOR, gefolgt von MOVE TO dar.

Ziel

Gesamtstrecke=200 mm Gesamtnderung= 90 Ziel Abstand=100 mm nderung=45 Ausgangsstellung

Abb. 3-5

MOVE FOR und MOVE TO

00/1200

3-5

BEWEGUNGSSTEUERUNG

PDL2

OPTIONAL KLAUSELN
Die optionalen Klauseln werden verwendet, wenn detailliertere Anweisungen fr die auszufhrende Bewegung gegeben werden sollen; sie umfassen: ADVANCE TIL WITH

ADVANCE Klausel
Die optionale Klausel ADVANCE basiert auf der Tatsache, da der Interpolator fr die Bewegung und der Interpretierer des Programms gleichzeitig arbeiten. Wenn ADVANCE eingegeben wird, setzt der Interpretierer die Ausfhrung des Programms fort, sobald die Berechnungen fr die Bahn der auszufhrenden Bewegung beendet sind, d.h. wenige Millisekunden nach dem Anlauf. Wenn ADVANCE aber nicht angegeben wird, wartet der Interpretierer ab, bis die Bewegung ausgefhrt ist, bevor er die Durchfhrung des Programms fortsetzt. Das kann bis zu der nchsten fr denselben Arm programmierten Bewegung fortgesetzt werden. Zum Beispiel: MOVE NEAR slot BY 250 OPEN HAND 1 -- nach Durchfhrung von MOVE NEAR ausgefhrt MOVE NEAR slot BY 250 ADVANCE OPEN HAND 1 -- whrend Durchfhrung von MOVE NEAR ausgefhrt MOVE TO slot -- nach Durchfhrung von MOVE NEAR ausgefhrt

TIL Klausel
Die optionale Klausel TIL kann eine Liste von Bedingungen angeben, die zur Annullierung der Bewegung fhren. (Fr weitere Informationen ber die Annullierung von Bewegungen siehe den Abschnitt ber die CANCEL Anweisungen in diesem Kapitel. Zur Beschreibung der Bedingungen siehe Kapitel Bedingungshandler). Zum Beispiel: MOVE TO slot TIL $DIN[1]+ Wenn whrend der Bewegung das digitale Signal $DIN[1] in ein positives Signal umwechselt, wird die Bewegung annulliert. Die Bedingungen werden nur whrend der tatschlichen Bewegung des Arms berwacht. Der Inhalt des Ausdrucks fr die Bedingung ist also begrenzt. Es ist nicht zugelassen mit einem AND Operationszeichen zwei oder mehr Kombinationen anzugeben. Auerdem sind in einer TIL Klausel nur die folgenden Bedingungen zugelassen (ihre vollstndige Beschreibung siehe Kapitel Bedingungshandler): AT VIA TIME n AFTER START -- n ist ein Zeitintervall in Millisekunden TIME n BEFORE END DISTANCE n AFTER START -- nur bei kartesischer Bewegung DISTANCE n BEFORE END -- n ist eine Entfernung in Millimetern DISTANCE n AFTER VIA DISTANCE n BEFORE VIA PERCENT n AFTER START -- nur bei Bewegung in Gelenken PERCENT n BEFORE END -- n ist eine Zahl, die einen Prozentwert darstellt digital port events digital port states

WITH Klausel
Die optionale WITH Klausel kann die vorbergehenden Werte fr die vorbesetzten Bewegungsvariablen definieren oder Bedingungshandler fr die gesamte Dauer der Bewegung aktivieren. Die WITH wirkt nur auf die mit der MOVE Anweisung gestartete Bewegungen und hat keinen Einflu auf vorhergehende oder folgende Bewegungen. Die Syntax fr die WITH Klausel ist folgende: WITH designation <, Bezeichnung>... wo die Bezeichnung eine der folgenden ist: || motion_variable = value | CONDITION[n] || 3-6 00/1200

PDL2

BEWEGUNGSSTEUERUNG

Die folgenden vorbesetzten Variablen knnen in einer WITH Klausel einer MOVE Anweisung benutzt werden (zu ihrer Bedeutung siehe das Kapitel Liste der vorbesetzten Variablen): $ARM_ACC_OVR $ARM_DEC_OVR $ARM_LINKED $ARM_LOADED $ARM_SPD_OVR $AUX_OFST $BASE $CNFG_CARE $FLY_DIST $FLY_PER $FLY_TRAJ $FLY_TYPE $JNT_MTR $JNT_OVR $LIN_SPD $MOVE_TYPE $ORNT_TYPE $PAR $PROG_ACC_OVR $PROG_DEC_OVR $PROG_SPD_OVR $ROT_SPD $SENSOR_ENBL $SENSOR_TIME $SENSOR_TYPE $SFRAME $SING_CARE $SPD_OPT $STRESS_PER $TERM_TYPE $TOL_COARSE $TOL_FINE $TOOL $TOOL_CNTR $TOOL_MASS $TOOL_RMT $TURN_CARE $UFRAME $WEAVE_NUM $WEAVE_TYPE $WV_AMP_PER Innerhalb einer WITH Klausel kann jedes Steuerungsprogramm von definierten Bedingungen aufgenommen werden. Dieser Bedingungshandler wird freigegeben, wenn die Bewegung gestartet oder neu gestartet wird, und er wird blockiert, wenn die Bewegung suspendiert wird oder vervollstndigt ist. Fr weitere Informationen ber Bedingungshandler siehe Kapitel Bedingungshandler. Zum Beispiel: MOVE TO p1 WITH $PROG_SPD_OVR = 50 MOVE TO p1 WITH CONDITION[1] MOVE TO p1 WITH $PROG_SPD_OVR = 50, CONDITION[1] Wenn eine Anweisung mehr als eine Zeile beansprucht, werden Kommas verwendet, um das Ende nach einer WITH Angabe zu bezeichnen. Jede neue Zeile, die eine WITH Klausel enthlt, beginnt mit dem reservierten Wort WITH, und das Ende der Anweisung mu durch das reservierte Wort ENDMOVE gekennzeichnet werden. Zum Beispiel: MOVE TO p1 WITH $PROG_SPD_OVR = 50, $MOVE_TYPE = LINEAR, WITH CONDITION[1], CONDITION[2], CONDITION[3], WITH $TOOL = drive_tool, ENDMOVE In Verbindung mit der vorbesetzten Variable $PAR implementiert die WITH Klausel eine besondere Schreibweise fr die MOVE Anweisung, die als nodale Annherung bezeichnet wird. Siehe die Beschreibung von $PAR im Kapitel Liste der vorbesetzten Variablen.

SYNCMOVE Klausel
In PDL2 knnen mit der SYNCMOVE Klausel zwei Arme gleichzeitig bewegt werden. Dies wird als Zeit-synchronisiertes Bewegen bezeichnet, da die Arme gleichzeitig starten und anhalten. Weitere Informationen ber synchronisierte Bewegung finden sich im Kapitel Bewegungssteuerung des Handbuch C3G Programmieranleitung. Zum Beispiel: MOVE ARM[1] TO part SYNCMOVE ARM[2] TO front Die SYNCMOVE Klausel kann nicht zusammen mit der Anweisung MOVE ALONG (weiter unten in diesem Kapitel beschrieben) benutzt werden. Die optionale WITH Klausel kann als Teil einer SYNCMOVE Klausel eingeschlossen werden. Die Bedingungshandler in den WITH Klauseln finden auf den in der MOVE oder SYNCMOVE Klausel spezifizierten Arm Anwendung, beispielsweise: MOVE ARM[1] TO part, TIL $DIN[1]+, TIL DISTANCE 100 BEFORE END, -- angewandt auf beide Arme WITH CONDITION[1] -- angewandt auf Arm 1 SYNCMOVE ARM[2] TO front, WITH CONDITION[2], -- angewandt auf Arm 2 ENDMOVE Wird die ADVANCE Klausel benutzt, so muss diese in den MOVE Abschnitt und nicht in den SYNCMOVE Abschnitt gesetzt werden. Wenn in der SYNCMOVE Klausel kein Arm benannt wird, so wird $SYNC_ARM verwendet. 00/1200 3-7

BEWEGUNGSSTEUERUNG

PDL2

KONTINUIERLICHE BEWEGUNG (MOVEFLY)


Zur Angabe einer kontinuierlichen Bewegung knnen MOVEFLY und SYNCMOVEFLY anstelle der reservierten Wrter MOVE und SYNCMOVE verwendet werden. Wenn auf MOVEFLY oder SYNCMOVEFLY eine andere Bewegung folgt, so hlt der Arm nicht am ersten Ziel an, sondern bewegt sich vom Ausgangspunkt der ersten Bewegung bis zum Endpunkt, der zur zweiten Bewegung gehrt, ohne am zu beiden Bewegungen gehrenden Punkt anzuhalten. Die MOVEFLY Anweisung kann benutzt werden, um kartesische in Gelenkbewegungen berzufhren und umgekehrt. Zur richtigen Ausfhrung der FLY Anweisung mu die ADVANCE Klausel gebraucht werden, die die Interpretation der zweiten MOVE Anweisung erlaubt, sobald die erste begonnen hat. Die beiden Bahnen einer FLY Bewegung brauchen nicht das gleiche TOOL oder BASE Bezugssystem zu haben, es sei denn beides sind kartesische Bahnen. Zum Beispiel: MOVE TO a MOVEFLY TO b ADVANCE MOVE TO c In der Abbildung 3-6 ist ein Beispiel fr MOVEFLY dargestellt.

Anfang der Bewegung in Richtung c Ende der Bewegung in Richtung b

Abb. 3-6

MOVEFLY zwischen zwei kartesischen Bewegungens

Die vorbesetzte Variable $FLY_TYPE wird benutzt, um die Geschwindigkeit des Arms whrend der FLY Bewegung zu steuern. Wird die vorbesetzte Variable $FLY_TYPE auf FLY_NORM (normales Fly) gesetzt, ndert sich die Armgeschwindigkeit whrend des Fly. Wenn die Variable $FLY_TYPE auf FLY_HIGH (erhhte Leistung) gesetzt wird, hat die Armgeschwindigkeit whrend des Fly einen konstanteren Wert. Der Modus FLY_CART bietet eine Methode zum Erreichen konstanter Geschwindigkeit mit optimaler Bahn zwischen zwei kartesischen Bewegungen. Die Option ist im einzelnen im Kapitel Bewegungssteuerung des Handbuch C3G Programmieranleitung erlutert. Die vorbesetzte Variable $FLY_PER kann benutzt werden, um die Zeit zur Ausfhrung des Fly zu verkrzen und die Bahn so gut wie mglich an die gelernte Position anzunhern. Die vorbesetzte Variable $FLY_PER beeinflut die Armgeschwindigkeit nur, wenn die vorbesetzte Variable $FLY_TYPE auf FLY_NORM gesetzt ist. Wenn $FLY_PER in Kraft ist, beginnt die FLY Bewegung zu Anfang der normalen Verzgerung der Bewegung plus einer Zeit gleich 100% minus einem Prozentwert, der in der Variablen $FLY_PER spezifiziert ist. Ist z.B. der Wert von $FLY_PER gleich 100%, beginnt Fly am Anfang der Verzgerung der Bewegung. Ist $FLY_PER 75%, dann beginnt FLY, nachdem 25% der Verzgerung ausgefhrt sind. Fr mehr Information siehe das Kapitel "Bewegungssteuerung" im Handbuch C3G Programmieranleitung. Werden normale Bewegungen ohne Fly benutzt (MOVE), so werden die Merkmale des Bewegungsstops durch die vorbesetzte Variable $TERM_TYPE definiert. Die FLY Option muss mit einer MOVEFLY spezifiziert werden. Sie kann nicht im SYNCMOVE Abschnitt angegeben werden. Der Programmeditor ersetzt bei falscher Kombination SYNCMOVEFLY durch SYNCMOVE.

ZEITGEBER UND SYNCHRONISIERER


Wenn die fr eine MOVEFLY Bewegung bentigte Zeit geringer ist als die, die der Interpretierer fr die Einrichtung der nachfolgenden MOVE Bewegung braucht, findet FLY nicht statt. Dies passiert, weil die Bewegungsumgebung die verlangten Informationen nicht rechtzeitig erhlt, um das Fly auszufhren. Diese Situation kann sich einstellen, weil die FLY Bewegung zu klein ist, d.h. der Arm braucht zu wenig Zeit, um sich von der aktuellen Position auf das angegebene Ziel zu versetzen.

3-8

00/1200

PDL2

BEWEGUNGSSTEUERUNG

Auch hat FLY keine Wirkung, wenn weitere Anweisungen zwischen der MOVEFLY und der folgende MOVE Anweisung stehen, eine Situation, die den Interpretierer hindert, die nachfolgende Bewegung schnell genug einzustellen. Zur korrekten Synchronisierung zwischen den MOVE Anweisungen und den anderen Anweisungen mssen die Bedingungshandler mit einer optionalen WITH Klausel aktiviert werden. Es folgen zwei Beispiele. Die Vorgabe einer Ausgabe nach dem Fly erfolgt ber einen Bedingungshandler, der von einer WITH Klausel bei der MOVEFLY Anweisung aktiviert wird. PROGRAM flycond1 VAR p1, p2, p3 : POSITION BEGIN $DOUT[17] := FALSE CONDITION[1] : WHEN AT END DO $DOUT[17] := TRUE ENDCONDITION p1 := POS(400, -400, 1900, -93, 78, -62, e) p2 := POS(400, 400, 1900, -92, 79, -64, e) p3 := POS(800, 400, 1900, -92, 79, -64, e) MOVE LINEAR TO p1 MOVEFLY LINEAR TO p2 ADVANCE WITH CONDITION[1] MOVE LINEAR TO p3 END flycond1 Die Ausgabe wird an dem Punkt gesetzt, an dem die Bewegung Fly beendet ist und nicht an P2, weil MOVEFLY diese Position nicht erreicht. Die Vorgabe einer Ausgabe beim Start des Fly erfolgt ber einen Bedingungshandler, der von einer WITH Klausel in der MOVE Anweisung aktiviert wird. Zum Beispiel: PROGRAM flycond2 VAR p1, p2, p3 : POSITION BEGIN $DOUT[17] := FALSE CONDITION[1] : WHEN AT START DO $DOUT[17] := TRUE ENDCONDITION p1 := POS(400, -400, 1900, -93, 78, -62, e) p2 := POS(400, 400, 1900, -92, 79, -64, e) p3 := POS(800, 400, 1900, -92, 79, -64, e) MOVE LINEAR TO p1 MOVEFLY LINEAR TO p2 ADVANCE MOVE LINEAR TO p3 WITH CONDITION[1] END flycond2 Die Ausgabe wird nicht bei p2 gesetzt, sondern am Anfang der Fly Bewegung.

BEWEGUNGSSTEUERUNG MIT FLY_CART


FLY_CART (Controller Aided Resolved Trajectory) verbessert die Leistung der Steuereinheit bei (linearen oder kreisfrmigen) kartesischen Bewegungen. Die Geschwindigkeit des TCP wird whrend FLY konstant gehalten, solange die max. Maschinenbelastung nicht berschritten wird. Die erzeugte Bewegung wirkt nur bei FLY zwischen zwei kartesischen Bewegungen und nicht bei Gelenk- oder gemischten kartesisch-Gelenkbewegungen. Einzelheiten werden im Kapitel Bewegungssteuerung des Handbuch C3G Programmieranleitung erlutert.

MOVE ALONG ANWEISUNG


Die MOVE ALONG Anweisung spezifiziert eine Bewegung entlang den Knoten einer PATH Variablen. Die Syntax fr die Anweisung MOVE ALONG ist folgende: MOVE <ARM[n]> ALONG path_var<[ node_range ]> <opt_clauses> Wenn eine Anweisung mehr als eine Zeile beansprucht, werden Kommas verwendet, um das Ende nach einer Zielklausel oder nach jeder optionalen Klausel zu bezeichnen. Das Ende der Anweisung wird durch das reservierte Wort ENDMOVE angegeben. Die folgenden Abschnitte liefern dazu Beispiele.

00/1200

3-9

BEWEGUNGSSTEUERUNG

PDL2

Die MOVE ALONG Anweisung wird benutzt, um eine einzige Bewegung, die aus einzelnen Bewegungsabschnitten besteht, zu starten. Ein PATH enthlt eine unbestimmte Anzahl von Knoten, von denen jeder eine einzelne Bewegungsbahn definiert. Die MOVE ALONG Anweisung verarbeitet jeden Knoten (oder Gruppe von Knoten) und versetzt den Arm auf das jeweilige Ziel, wozu zustzliche Informationen ber die Bahn benutzt werden, die sich ebenfalls im Knoten finden. Die PATH Bewegung stellt sicher, da die Knotenumgebung eine kontinuierliche Bewegung mit minimaler Verzgerung zwischen den verschiedenen Knoten erzeugt. Der Anfang der MOVE ALONG Bewegung entspricht dem Anfang des ersten Knotens, der zu verarbeiten ist, und endet entsprechend dem Ende des letzten zu verarbeitenden Knotens. Dies ist wichtig zum Verstndnis dieser Anweisung, da eine Mischung von Bewegungen, die sich aus einer Reihe von MOVE Anweisungen ergibt, den Anfang und das Ende der Bewegung beeinflut. Daher haben vorbesetzte Variablen wie $FLY_TYPE und $TERM_TYPE einen Einflu auf den letzten von der MOVE ALONG Anweisung verarbeiteten Knoten. PDL2 enthlt zustzliche vorbesetzte Variablen zur Behandlung dieser Information fr jede Bahn der PATH Bewegung. Die Definition eines Zweigknotens kann eine Reihe von Feldern des vorbesetzten Knotens enthalten, die den vorbesetzten Bewegungsvariablen fr jede Bahn einer PATH Bewegung entsprechen. Die Struktur eines PATH Knotens wird durch die Definition des anwenderdefinierten Knotens festgelegt, die im Programm enthalten ist. Die folgende Liste enthlt die betreffenden vordefinierten Bewegungsvariablen: $CNFG_CARE $COND_MASK $COND_MASK_BACK $JNT_MTURN $LIN_SPD $MAIN_JNTP $MAIN_POS $MAIN_XTND $MOVE_TYPE $ORNT_TYPE $ROT_SPD $SEG_DATA $SEG_FLY $SEG_FLY_DIST $SEG_FLY_PER $SEG_FLY_TRAJ $SEG_FLY_TYPE $SEG_OVR $SEG_REF_IDX $SEG_STRESS_PER $SEG_TERM_TYPE $SEG_TOL $SEG_TOOL_IDX $SEG_WAIT $SING_CARE $SPD_OPT $TURN_CARE $WEAVE_NUM $WEAVE_TYPE Enthlt die Knotendefinition kein Feld des vorbesetzten Knotens, so wird fr jeden Knoten der in einer WITH Klausel angegebene Wert benutzt. Wenn auch die WITH Klausel keinen Wert enthlt, wird der vorliegende Wert der entsprechenden vorbesetzten Bewegungsvariablen angewandt. Zum Beispiel: PROGRAM pth_motn TYPE lapm_pth = NODEDEF $MAIN_POS $SEG_OVR . . . ENDNODEDEF VAR pth1 : PATH OF lapm_pth BEGIN . . . $TERM_TYPE := COARSE $MOVE_TYPE := LINEAR MOVE ALONG pth1 WITH $SEG_TERM_TYPE = FINE . . . END pth_motn Im obigen Beispiel wird die prozentuale Geschwindigkeit auf der Bahn ($SEG_OVR), die fr jede Bahn des Zweigs benutzt wird, aus jedem Zweigknoten ermittelt, da ein solches Feld in der Knotendefinition enthalten ist. Die Beendigungsklasse fr jede Bahn des Zweigs ist FINE, weil die WITH Anweisung vorhanden ist. Jedoch ist die Beendigungsklasse der letzten Bahn des Knotens COARSE, weil der Wert von $TERM_TYPE fr den letzten Knoten des Zweigs angewandt wird. Die Bewegungsklasse ($MOVE_TYPE) ist immer LINEAR fr den gesamten Zweig, da $MOVE_TYPE kein Feld in der Knotendefinition darstellt und auch nicht in der WITH Klausel angegeben ist. Die Felder $MAIN_POS, $MAIN_JNTP und $MAIN_XTND bezeichnen das Hauptziel einer Zweigbahn. In einer Knotendefinition kann nur eins der vorbesetzten Felder $MAIN_ enthalten sein. Das gewhlte Feld bestimmt die Datenklasse des Hauptziels. Um einen Zweig in einer MOVE ALONG Anweisung benutzen zu knnen, mu die Knotendefinition ein vorbesetztes Feld bezglich dem Hauptziel enthalten. Die Felder $CNFG_CARE, $LIN_SPD, $MOVE_TYPE, $ORNT_TYPE, $ROT_SPD, $SING_CARE, $SPD_OPT, $TURN_CARE, und $WEAVE_NUM haben dieselbe Bedeutung wie die vorbesetzte Bewegungsvariable gleichen Namens. Werden sie in eine Knotendefinition eingesetzt, so knnen diese Parameter fr jede Bahn des Zweigs gendert werden. Die Bedeutung der Felder $SEG_TERM_TYPE, $SEG_FLY_TYPE, und $SEG_FLY_PER entspricht der der vorbesetzten Bewegungsvariablen, die nicht eine Bahn betreffen, mit dem Unterschied, da diese Felder auf jede Bahn des Zweigs angewandt werden, whrend die Bewegungsvariablen, die sich nicht auf eine Bahn be3-10 00/0500

PDL2

BEWEGUNGSSTEUERUNG

ziehen, nur fr den letzten Knoten angewandt werden. Wenn diese Felder nicht in die Definition eines Knotens oder in die WITH Klausel eingesetzt sind, wird die vorbesetzte Bewegungsvariable, die sich nicht auf eine Bahn bezieht, benutzt. Zum Beispiel: PROGRAM pth_motn TYPE lapm_pth = NODEDEF $MAIN_POS $SEG_OVR . . . ENDNODEDEF VAR pth1 : PATH OF lapm_pth BEGIN . . . $TERM_TYPE := FINE MOVE ALONG pth1 . . . END pth_motn Da in diesem Beispiel $SEG_TERM_TYPE kein Feld von lapm_pth ist und auch nicht in einer WITH Klausel enthalten ist, wird der Wert von $TERM_TYPE (FINE) fr jede Bewegungsbahn im Zweig benutzt. Das Feld $SEG_FLY hat dieselbe Bedeutung wie die FLY Option fr das Schlsselwort MOVE. Es ist ein boolescher Wert und, wenn dieser TRUE (wahr) ist, erfolgt die Bewegung zum folgenden Knoten in Fly. Beim letzten Knoten wird dieses Feld nicht benutzt, da die in die MOVE ALONG eingefgte FLY Option angewandt wird. Die Felder $SEG_REF_IDX und $SEG_TOOL_IDX bestehen aus Ganzzahlwerten, die Bezugspunkte im Feld FRM_TBL des Zweigs darstellen. $SEG_REF_IDX ist der Index eines Bezugssystems, das benutzt werden kann, um einen Offset zur Zielposition ($MAIN_POS) zu bewirken. Dieses Bezugssystem wird zum Ziel des Knotens addiert, bevor er ausgefhrt wird. Falls $UFRAME gesetzt ist, wird auch dies zum Ergebnis addiert, wie es in jeder MOVE Anweisung geschieht (siehe Abb. 3-7).

$MAIN_POS Reference Referenzbeframe zugssystem

Zielposition Target position

$SEG_REF_IDX Resulting new target position Resultierendes neues Ziel

Anwenderbezugssystem User frame

Bezugssystem Welt World frame

$UFRAME

Abb. 3-7

Auswirkungen einer Definition $SEG_REF_IDX

Wenn $SEG_REF_IDX nicht in der Knotendefinition enthalten ist oder wenn der Wert von $SEG_REF_IDX Null ist, werden keine Referenzkoordinaten fr die Zweigbahn angewandt. $SEG_TOOL_IDX bezeichnet das Bezugssystem, das fr die Werkzeugkoordinaten auf der Zweigbahn zu benutzen ist. Wenn dieses Feld nicht in der Knotendefinition enthalten ist oder sein Wert null ist, wird der Wert von $TOOL benutzt. Eine PATH Variable enthlt eine Matrix von 32 INTEGER Werten mit dem Namen COND_TBL. Diese Tabelle wird verwendet, um anzugeben, welcher Bedingungshandler bei der Pfadbewegung benutzt wird. Um eine bestimmte Bedingung mit einem PATH Knoten zu verknpfen, muss die Definition des PATH Knotens die vorbesetzten Felder $COND_MASK oder $COND_MASK_BACK enthalten. $COND_MASK wird fr eine Vorwrtsbewegung zum Knoten und $COND_MASK_BACK fr eine Rckwrtsbewegung im Knoten benutzt. Diese INTEGER Felder sind Bitmasken, wo die einzelnen Bits des Werts der Indizes von $COND_MASK und $COND_MASK_BACK in die Matrix COND_TBL entsprechen. Wenn ein Bit gesetz twird, wird der Bedin00/0500 3-11

BEWEGUNGSSTEUERUNG

PDL2

gungshandler, der von dem entsprechenden Element in COND_TBL fr das betreffende Pfadsegment aktiviert und am Ende des Segments automatisch deaktiviert. Zum Beispiel: PROGRAM pth TYPE nd = NODEDEF -- PATH Knotendefinition $MAIN_POS $MOVE_TYPE $COND_MASK $COND_MASK_BACK i : INTEGER b : BOOLEAN ENDNODEDEF -- Die Knoten dieses Pfads sollten entweder lernprogrammiert oder mit NODE_APP angehngt werden VAR p : PATH OF nd BEGIN CONDITION[10]: WHEN TIME 10 AFTER START DO ...... ENDCONDITION CONDITION[30] : WHEN TIME 20 BEFORE END DO ...... ENDCONDITION CONDITION[20] : WHEN AT START DO ...... ENDCONDITION ...... p.COND_TBL[1] := 10 -- Initialisierung von COND_TBL p.COND_TBL[2] := 15 p.COND_TBL[3] := 20 p.NODE[1].$COND_MASK := 5 p.NODE[4].$COND_MASK_BACK := 2 CYCLE .... MOVE ALONG p -- Vorwrtsbewegung MOVE ALONG p[5..1] -- Rckwrtsbewegung .... END pth Im obigen Beispiel ist $COND_MASK fr Knoten 1 auf 5 gesetzt. Bit 1 und Bit 3 bilden eine 5. Daher werden fr Knoten 1bei der Bewegung vom Knoten 1 zum Knoten 2 die Bedingungen benutzt, die in den Elementen 1 und 3 von COND_TBL (Bedingungen 10 und 20) spezifiziert sind. Bei Knoten 4 ist $COND_MASK_BACK auf 2 gesetzt. Das heit bei der Rckwrtsbewegung von Knoten 5 auf Knoten 4 wird die Bedingung 15 benutzt, die im Element 2 von COND_TBL spezifiziert ist. Es ist zu beachten, dass die Bedingungshandler, die aktiviert werden, diejenigen sind, die dem Programm entsprechen, das die MOVE ALONG Anweisung ausfhrt, und nicht dem, in dem die MOVE ALONG Anweisung enthalten ist. Siehe auch die Kapitel "Bedingungshandler" und "Liste der vorbesetzten Variable" in diesem Handbuch. Das Feld $SEG_WAIT ist ein boolescher Wert, der anzeigt, ob die Verarbeitung des Zweigs bis zur vollstndigen Ausfhrung des Zweigs unterbrochen werden soll oder nicht. Dieses Feld wird benutzt, um die Ausfhrung einer Zweigbahn mit den anderen Aspekten einer Anwendung wie z.B. der Aufnahme von einem Fhler, wechselseitigem Ausschlu u.s.w. zu synchronisieren. Wenn $SEG_WAIT den Wert FALSE (falsch) hat, wird die Ausfhrung des Zweigs auf der betreffenden Bahn nicht angehalten. Ist der Wert dieses Feldes TRUE (wahr), wird die Bewegung auf dem betreffenden Knoten vervollstndigt, aber die Verarbeitung der folgenden Knoten wird bis zur vollstndigen Ausfhrung des Zweigs ausgesetzt. Das Feld $SEG_OVR zeigt die Beschleunigung, Verzgerung und prozentuale Geschwindigkeit der Bewegung fr die Zweigbahn auf hnliche Weise an, wie die Variablen $PROG_ACC_OVR, $PROG_DEC_OVR, und $PROG_SPD_OVR. Ist $SEG_OVR weder in der Knotendefinition noch in der WITH Klausel der MOVE ALONG Anweisung enthalten, werden die Werte von $PROG_ACC_OVR, $PROG_DEC_OVR und $PROG_SPD_OVR fr jede Bahnbewegung des Zweigs benutzt.

3-12

00/1200

PDL2

BEWEGUNGSSTEUERUNG

Das Feld $SEG_TOL gibt die Toleranz fr die Zweigbahn an und hat die gleiche Bedeutung wie $TOL_FINE oder $TOL_COARSE entsprechend der Beendigungsklasse der Zweigbahn: FINE oder COARSE. Dies Feld wird nicht beim letzten Knoten angewandt, da $TOL_FINE oder $TOL_COARSE in Abhngigkeit des Werts von $TERM_TYPE benutzt wird, der ebenfalls fr den letzten Knoten angewandt wird. Das Feld $SEG_DATA zeigt an, ob die Knotendaten fr die Bahn des letzten Knotens benutzt werden sollen. Hat dieses Feld den Wert TRUE (wahr), werden fr die Bahn des letzten Knotens die Werte der Felder $SEG_TERM_TYPE, $SEG_FLY_TYPE, $SEG_FLY_PER, $SEG_FLY, und $SEG_TOL anstelle der Werte der entsprechenden vorbesetzten Variablen benutzt.

ARM Klausel
Die optionale ARM Klausel dient dazu, den whrend der Zweigbewegung zu bewegenden Arm zu bestimmen. Der Arm wird dem Feld des Hauptziels der Knoten zugewiesen. Bei Programmen, die nur einen Arm steuern, ist keine Zuweisung ntig. Die optionale ARM Klausel wird wie folgt benutzt: MOVE ARM[1] ALONG pth Der bezeichnete Arm wird fr die gesamte MOVE ALONG Anweisung verwendet. Irgendein temporr in einer WITH Klausel einer Anweisung zugewiesener Wert wird auch auf den angegebenen Arm angewandt. Wird keine ARM Klausel spezifiziert, so wird fr das Hauptziel der Standardarm benutzt. Der Programmierer hat die Mglichkeit, in der PROGRAM Anweisung einen Standardarm als Programmattribut zu definieren, wie im Folgenden beschrieben: PROGRAM armtest PROG_ARM=1 . . . BEGIN MOVE ALONG pth -- verschiebt Arm 1 MOVE ARM[2] ALONG pth -- verschiebt Arm 2 END armtest Wenn keine ARM Klausel angegeben wird und das Programm kein Standardarm angibt, wird der Wert der vorbesetzten Variablen $DFT_ARM benutzt.

KNOTENPUNKT-BEREICH Klausel
Durch die optionale Klausel Knotenpunkt-Bereich kann ein Zweig in einem anderen als dem Knotenpunkt 1 begonnen werden. Wenn die Anweisung [node_range] nicht vorhanden ist, wird die Bewegung fortgesetzt, bis der erste Knotenpunkt des Zweigs erreicht ist und geht dann zu den folgenden Knotenpunkten weiter, bis das Ende des Zweigs erreicht ist. Ist aber die Anweisung [node_range] vorhanden, kann der Arm auf einer ganzen Reihe von in den Klammern spezifizierten Knotenpunkten verschoben werden. Der Bereich kann folgendermaen angegeben werden: [n..m] die Bewegung wird bis zum Knotenpunkt n des Zweigs fortgesetzt und durchluft dann alle folgenden Knotenpunkte bis zu m des Zweigs. Die umgekehrte Bewegung ist mglich, wenn der Knotenpunkt n grer als der Knotenpunkt m definiert wird. die Bewegung wird bis zum Knotenpunkt n des Zweigs fortgesetzt und durchluft dann alle folgenden Knotenpunkte bis zum Ende des Zweigs.

[n..]

Sowohl n wie m stellen INTEGER Ausdrcke dar. Sobald der Wert von n oder m unter 1 oder ber der Maximallnge des vorliegenden Zweigs ist, tritt ein Fehler auf. Mit diesem Format kann ein Zweig in der gewnschten Reihenfolge ausgefhrt werden. Zum Beispiel: MOVE ALONG pth[3..10] -- Bewegung lngs des Zweigs von Knotenpunkt 3 bis Knotenpunkt 10 MOVE ALONG pth[5..] -- Bewegung lngs des Zweigs von Knotenpunkt 5 aus MOVE ALONG pth[15..8] -- Bewegung lngs des Zweigs von Knotenpunkt 15 bis Knotenpunkt 8

OPTIONAL KLAUSELN
Die optionalen Klauseln werden verwendet, wenn detailliertere Anweisungen fr die auszufhrende Zweigbewegung gegeben werden sollen; sie umfassen: ADVANCE WITH

00/1200

3-13

BEWEGUNGSSTEUERUNG

PDL2

ADVANCE Klausel
Die optionale Klausel ADVANCE basiert auf der Tatsache, da der Interpolator fr die Bewegung und der Interpretierer des Programms gleichzeitig arbeiten. Wenn ADVANCE eingegeben wird, setzt der Interpretierer die Ausfhrung des Programms fort, sobald die Bewegung gestartet wird. Wenn aber ADVANCE nicht angegeben wird, wartet der Interpretierer ab, bis die Bewegung ausgefhrt ist, bevor er die Durchfhrung des Programms fortsetzt. Was die Zweigbewegung betrifft, so bedeutet dies, da die Programmausfhrung erst nach Verarbeitung des letzten Knotens wieder fortgesetzt wird. Wird ADVANCE angegeben, so kann die Programmausfhrung bis zur nchsten fr denselben Arm programmierten Bewegung oder zur nchsten unterbrechbaren Anweisung weiterlaufen. Zum Beispiel: MOVE ALONG pth_1 OPEN HAND 1 -- nach Durchfhrung der Bewegung pth_1 ausgefhrt MOVE ALONG pth_1 ADVANCE OPEN HAND 1 -- whrend der Bewegung pth_1 ausgefhrt MOVE ALONG pth_2 -- nach Durchfhrung von MOVE ALONG pth_1 ausgefhrt

WITH Klausel
Die optionale WITH Klausel kann die temporren Variablenwerte der vorbesetzten Bewegung definieren oder die Bedingungshandler fr die Dauer der gesamten Bewegung freigeben. Die WITH Klausel wirkt nur auf die durch MOVE ALONG hervorgerufene Bewegung und nicht auf nachfolgende und vorhergehende Bewegungen. Die Syntax fr die WITH Klausel ist folgende: WITH Bezeichnung <, Bezeichnung>... wobei die Bezeichnung folgende ist: motion_variable = value Die vorbesetzten Bewegungsvariablen in der folgenden Liste knnen in der WITH Klausel einer MOVE ALONG Anweisung eingesetzt werden (fr ihre Bedeutung siehe das Kapitel Liste der vorbesetzten Variablen): $ARM_ACC_OVR $ARM_DEC_OVR $ARM_LOADED $ARM_SPD_OVR $AUX_OFST $BASE $CNFG_CARE $COND_MASK $COND_MASK_BACK $COND_MASK $COND_MASK_BACK $FLY_DIST $FLY_PER $FLY_TRAJ $FLY_TYPE $JNT_MTURN $JNT_OVR $LIN_SPD $MOVE_TYPE $ORNT_TYPE $ROT_SPD $SEG_DATA $SEG_FLY $SEG_FLY_DIST $SEG_FLY_PER $SEG_FLY_TRAJ $SEG_FLY_TYPE $SEG_OVR $SEG_REF_IDX $SEG_STRESS_PER $SEG_TERM_TYPE $SEG_TOL $SEG_TOOL_IDX $SEG_WAIT $SING_CARE $SPD_OPT $STRESS_PER $TERM_TYPE $TOL_COARSE $TOL_FINE $TOOL $TOOL_CNTR $TOOL_MASS $TURN_CARE $WEAVE_NUM $WEAVE_TYPE Die WITH Klausel wirkt nur auf die von einer MOVE ALONG Anweisung hervorgerufene Bewegung. Die Auswirkungen des Einsetzens dieser vorbesetzten Variablen auf die Zweigbahn lassen sich nur feststellen, wenn das entsprechende vorbesetzte Feld nicht in der Definition des Zweigknotens enthalten ist. Zum Beispiel: MOVE ALONG pth WITH $SEG_TERM_TYPE = FINE bewirkt nur dann die Beendigung der Bewegung bei jeder Zweigbahn, wenn $SEG_TERM_TYPE NICHT ein Feld der Knoten pth ist. Die Auswirkungen der Bewegungsvariablen, die nicht eine Bahn in der WITH Klausel einer MOVE ALONG Anweisung betreffen, lassen sich nur bei der letzten Bahn des Zweiges sehen. Zum Beispiel: MOVE ALONG pth WITH $TERM_TYPE = FINE bewirkt nur die Beendigung der Bewegung beim letzten Knoten des Zweigs. Zum ndern jedweden Bewegungsparameters im Inneren eines Zweigs ist das betreffende Feld des vorbesetzten Knotens zu benutzen. Wenn eine Anweisung mehr als eine Zeile beansprucht, werden Kommas verwendet, um das Ende nach einer WITH Angabe zu bezeichnen. Jede neue Zeile, die eine WITH Klausel enthlt, beginnt mit dem reservierten Wort WITH, und das Ende der Anweisung mu durch das reservierte Wort ENDMOVE gekennzeichnet werden.

3-14

00/1200

PDL2 Zum Beispiel: MOVE ALONG pth WITH $SEG_OVR = 50, $MOVE_TYPE = LINEAR, ENDMOVE

BEWEGUNGSSTEUERUNG

KONTINUIERLICHE BEWEGUNG (MOVEFLY)


Zur Angabe einer kontinuierlichen Bewegung kann MOVEFLY ALONG anstelle der reservierten Wrter MOVE ALONG verwendet werden. Der Arm verschiebt sich von einem Punkt auf der Bewegungsbahn und erreicht einen Punkt auf der Bahn einer anderen Bewegung, ohne an dem gemeinsamem Punkt der beiden Bahnen anzuhalten. Wenn der Fly von einer anderen Bewegung gefolgt wird, hlt der Arm nicht im ersten Zielpunkt an. Die Klausel ADVANCE mu verwendet werden, um die Bearbeitung der nachfolgenden Bewegung fortzusetzen, sobald die erste Bewegung beginnt. Zum Beispiel: MOVEFLY ALONG pth_1 ADVANCE MOVE TO perch Der Anfangsteil der Strecke, die nicht ausgefhrt wird, bevor der Fly beginnt, wird durch die vorbesetzte Variable $FLY_PER bestimmt. Die vorbesetzte Variable $FLY_TYPE definiert die Geschwindigkeit der Bewegung whrend des Flys: konstante (FLY_HIGH) oder nicht konstante Geschwindigkeit (FLY_NORM). Die Bewegungsvariable $TERM_TYPE definiert die Stopmerkmale des Arms fr nicht kontinuierliche Bewegungen.

STOP UND WIEDERAUFNAHME VON BEWEGUNGEN


Auer den MOVE und MOVE ALONG Anweisungen enthlt PDL2 auch Anweisungen fr den Stop und die Wiederaufnahme von Bewegungen. Diese Anweisungen wirken nur auf den Zustand der Bewegung und nicht auf den des Programms.

CANCEL MOTION Anweisungen


Die CANCEL CURRENT Anweisung annulliert die laufende Bewegung, die in diesem Fall nicht wieder aufgenommen werden kann. Wenn noch andere Bewegungen, zum Beispiel als Folge einer ADVANCE Klausel oder von Mehrfach-Programmen, suspendiert sind, werden sie sofort durchgefhrt. Die CANCEL ALL Anweisung annulliert alle Bewegungen (laufend oder suspendiert). Wenn die Bewegung, die annulliert wird, die eines Zweigs ist, wird dessen Verarbeitung abgebrochen, also alle Zweigabschnitte annulliert. Die Anweisungen CANCEL CURRENT SEGMENT oder CANCEL ALL SEGMENT annullieren die Zweigabschnitte, die in diesem Fall nicht wieder aufgenommen werden knnen. Sind bei Ausfhrung der CANCEL CURRENT SEGMENT Anweisung noch einige Knoten im Zweig verblieben, so werden diese sofort verarbeitet. Wenn jedoch kein Knoten mehr vorhanden ist, oder die CANCEL CURRENT SEGMENT Anweisung benutzt wurde, werden die suspendierten Bewegungen (sofern es welche gibt) sofort ausgefhrt. Die Anweisungen CANCEL CURRENT und CANCEL CURRENT SEGMENT fhren zu einer schrittweisen Verringerung der Geschwindigkeit bis zum Stillstand der Bewegung. Der Programmierer kann als Option angeben, ob die laufende Bewegung/Bahn des Standardarms, einer Reihe von Armen oder aller Arme annulliert werden sollen. CANCEL CURRENT CANCEL CURRENT SEGMENT CANCEL CURRENT FOR ARM[1], ARM[2] CANCEL CURRENT SEGMENT FOR ARM[3] CANCEL CURRENT FOR ALL CANCEL CURRENT SEGMENT FOR ALL CANCEL ALL und CANCEL ALL SEGMENT verursachen die Annullierung der laufenden Bewegung/Bahn und all derer, die suspendiert sind. Der Programmierer kann als Option angeben, ob die laufende Bewegung/Bahn des Standardarms, einer Reihe von Armen oder aller Arme annulliert werden sollen. CANCEL ALL CANCEL ALL SEGMENT CANCEL ALL FOR ARM[1], ARM[2] CANCEL ALL SEGMENT FOR ARM[3] CANCEL ALL FOR ALL CANCEL ALL SEGMENT FOR ALL

00/1200

3-15

BEWEGUNGSSTEUERUNG

PDL2

LOCK, UNLOCK, und RESUME Anweisungen


Die Anweisung LOCK schiebt die Bewegung eines Standardarms, einer Gruppe von Armen oder aller Arme auf. Wenn die Anweisung LOCK ausgefhrt wird, verringert sich die Geschwindigkeit des Armes schrittweise bis zum Stillstand. Zum Beispiel: LOCK LOCK ARM[1], ARM[2] LOCK ALL Zum Unterschied von CANCEL, verhindert LOCK den Start jeglicher Bewegung am blockierten Arm. Eine Bewegung kann nur mit der UNLOCK Anweisung vom gleichen Programm, das die LOCK Anweisung abgesetzt hat, gefolgt von einer RESUME Anweisung wieder aufgenommen werden. Diese letzte Anweisung kann von jedem beliebigen Programm erzeugt werden. Zum Beispiel: ROUTINE isr -- Interrupt Service Routine BEGIN . . . UNLOCK RESUME END isr . . . CONDITION[1]: WHEN $DIN[1]+ DO LOCK isr ENDCONDITION . . . MOVE TO slot WITH CONDITION[1] MOVE TO perch Der Programmierer kann angeben, ob die UNLOCK und RESUME Anweisungen fr eine Gruppe von Armen oder fr alle Armen gelten sollen. Die Bewegungsanweisungen CANCEL knnen zwischen einer LOCK und einer UNLOCK Anweisung benutzt werden, um den gegenwrtigen Zustand der ausgegebenen Bewegungen zu ndern.

SIGNAL SEGMENT Anweisung


Die SIGNAL SEGMENT Anweisung erlaubt es, eine z.Z. suspendierte Zweigbewegung wieder aufzunehmen. Eine Zweigbewegung wird suspendiert, wenn das Feld $SEG_WAIT eines Knotens den Wert TRUE (wahr) hat. Der einzige Weg, eine Zweigbewegung wieder aufzunehmen, besteht dann in der Ausfhrung einer SIGNAL SEGMENT Anweisung. Zum Beispiel: SIGNAL SEGMENT pth Das Feld $SEG_WAIT eines Zweigknotens besteht aus einem booleschen Wert, der dem Anwender zeigt, ob die Verarbeitung eines Zweigs bis zu seiner vollstndigen Ausfhrung suspendiert werden soll oder nicht. Dieses Feld dient zur Synchronisierung der Bearbeitung der Zweigbahn mit anderen Aspekten einer Anwendung wie z.B. Aufnahme an einem Fhler, wechselseitiger Ausschlu u.s.w. Wenn der Wert des Feldes $SEG_WAIT FALSE (falsch) ist, wird die Verarbeitung des Zweigs an dem betreffenden Knoten nicht suspendiert. Wenn sich der angegebene Zweig bei Ausfhrung einer SIGNAL SEGMENT Anweisung nicht im suspendierten Zustand befindet, so hat diese keine Wirkung, und es tritt ein abfangbarer Fehler auf. Anders als bei den Semaphoren werden die SEGMENT Signale nicht gezhlt, und daher werden die fr einen Zweig berzhligen SIGNAL Anweisungen nicht gespeichert. Die SIGNAL SEGMENT Anweisung mu nach der Suspendierung eines Zweigs durch $SEG_WAIT ausgefhrt werden.

HOLD Anweisung
Mit der Anweisung HOLD werden die in Ausfhrung begriffenen holdable Programme auf Ready Status gesetzt, und die Bewegung wird schrittweise bis zum Stillstand verlangsamt. Mit dieser Anweisung erreicht man das gleiche Ergebnis wie durch das Drcken des HOLD Knopfes auf dem Programmierhandgert und auf der Bedienungskonsole. 3-16 00/1200

PDL2

BEWEGUNGSSTEUERUNG

ATTACH und DETACH Anweisungen


Die Anweisungen ATTACH und DETACH ermglichen es, den Zugang zu einer Einrichtung vom Programm aus zu kontrollieren und sind ntzlich, wenn Programme mit Mehrfach-Ausfhrung die Benutzung der gleichen Einrichtung vorsehen. Wenn die ATTACH Anweisung auf einen Arm angewendet wird, fordert sie die ausschlieliche Steuerung der Bewegung eines Arms an. Wenn der Arm schon fr ein Programm reserviert ist oder momentan in einer Bewegung verwendet wird, wird eine Fehlermeldung ausgegeben. Die ATTACH Anweisung kann verwendet werden, um den Standardarm, eine Reihe von Armen oder alle Arme zu reservieren. ATTACH ARM ATTACH ARM[1], ARM[2] ATTACH ARM ALL Wenn ein Arm fr ein Programm reserviert wurde, kann der Start einer Bewegung des reservierten Arms ausschlielich von diesem Programm aus erfolgen. Die Ausgabe einer MOVE oder RESUME Anweisung von einem anderen Programm wird als Fehler angesehen und fhrt zur Unterbrechung des Programms. Auer mit der ATTACH Anweisung kann ein Programm einen Arm auch mit dem Attribut ATTACH der PROGRAM Anweisung reservieren. In diesem Fall wird PROG_ARM bei der Aktivierung des Programms reserviert. Wenn der betreffende Arm momentan bereits von einem anderen Programm reserviert ist oder in einer Bewegung verwendet wird, aktiviert sich das Programm nicht. Wenn der Programmierer PROG_ARM bei der Aktivierung des Programms nicht reservieren mchte, mu er das Attribut DETACH in der Anweisung PROGRAM angeben. Als Standard wird PROG_ARM reserviert. (Siehe Kapitel Liste der Anweisungen fr weitere Einzelheiten ber die Anweisungen PROGRAM und die entsprechenden Attribute.) Die DETACH Anweisung beendet die ausschlieliche Steuerung der Bewegung des reservierten Standardarms, einer Reihe von Armen oder aller Arme durch das Programm. DETACH ARM DETACH ARM[1], ARM[2] DETACH ARM ALL Die Bewegungsanweisungen CANCEL knnen von jedem Programm whrend der Armsteuerung ausgegeben werden.

HAND Anweisungen
Die am Flansch installierten Werkzeuge, zum Beispiel die Zangen, knnen durch die HAND Anweisungen gesteuert werden. Jeder Arm hat zwei Zangen zur Verfgung, die den Tasten T1 und T2 auf dem Programmierhandgert entsprechen. Durch Verwenden des mit der Systemsoftware gelieferten Tools zur HAND Konfiguration (SH_INST) bestimmt der Programmierer, welche Hand als Teil der HAND Anweisung betrieben werden soll. PDL2 kennt folgende HAND Anweisungen: OPEN HAND hand_num CLOSE HAND hand_num RELAX HAND hand_num Zum Beispiel: OPEN HAND 1 CLOSE HAND 2 RELAX HAND 2 Der Programmierer kann auerdem einen speziellen Arm, eine Reihe von Armen oder alle Arme definieren wie im Folgenden beschrieben: OPEN HAND 1 FOR ARM[n] CLOSE HAND 2 FOR ARM[1], ARM[2] RELAX HAND 1 FOR ALL Wenn die HAND noch nicht konfiguriert wurde, wird bei Drcken von T1 und T2 standardmig kein Ausgang gesetzt. Es knnen die folgenden Zangetypen gesteuert werden: Single Line OPEN setzt die Ausgangsleitung auf den aktiven Wert; 3-17

00/1200

BEWEGUNGSSTEUERUNG

PDL2

CLOSE setzt die Ausgangsleitung auf den inaktiven Wert; RELAX entspricht CLOSE.

Dual Line OPEN setzt die Leitung 1 auf den aktiven Wert und setzt die Leitung 2 auf den inaktiven Wert; CLOSE setzt die Leitung 2 auf den inaktiven Wert und setzt die Leitung 1 auf den aktiven Wert; RELAX setzt Leitung 1 und Leitung 2 auf den inaktiven Wert.

Pulse OPEN setzt die Leitung 1 auf den aktiven Wert, wartet die Verzgerungszeit ab und setzt die Leitung 1 auf den inaktiven Wert; CLOSE setzt die Leitung 2 auf den aktiven Wert, wartet die Verzgerungszeit ab und setzt die Leitung 2 auf den inaktiven Wert; RELAX entspricht CLOSE.

Step OPEN setzt die Leitung 1 auf den aktiven Wert, wartet die Verzgerungszeit ab und setzt die Leitung 1 auf den aktiven Wert; CLOSE setzt die Leitung 2 auf den aktiven Wert, wartet die Verzgerungszeit ab und setzt die Leitung 1 auf den inaktiven Wert; RELAX entspricht CLOSE.

3-18

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG

Handbuch fr Programmiersprache

1 2 3

SERIELLE EIN-/AUSGABEN
MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

4
5 6 7 8 9 10 11 12 A B C D Index

INHALT
Abschnitt Seite

SERIELLE Einrichtungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-1 FENSTER Einrichtungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-1 DATEI Einrichtungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-2 KOMMUNIKATIONS Einrichtungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-2 NULL Einrichtung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-3 ATTACH und DETACH Anweisungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-3 TABELLEN DER EINRICHTUNGEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-4 LOGISCHE EINHEITNUMMER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-5 OPEN FILE Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-5 WITH Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6 CLOSE FILE Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6 READ Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-7 FORMATSPEZIFIZIERER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-8 WIEDERANLAUF NACH STROMAUSFALL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-9 WRITE ANWEISUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-9 WIEDERANLAUF NACH STROMAUSFALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11 DATENKOMMUNIKATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11 DAS PROTOKOLL DDCMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11 OPERATION IM NORMALMODUS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11 Montieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-12

SERIELLE EIN-/AUSGABEN

Handbuch fr Programmiersprache

PDL2

INHALT (Fortsetzung)
Abschnitt Protokollstart . . . . . . . . . . . . . . . . . Protokollbetrieb. . . . . . . . . . . . . . . . Demontieren . . . . . . . . . . . . . . . . . FEHLERBEDINGUNGEN UND STATISTIKEN. BETRIEB IM WARTUNGSMODUS. . . . . . . Montieren. . . . . . . . . . . . . . . . . . . Protokollbetrieb. . . . . . . . . . . . . . . . Demontieren . . . . . . . . . . . . . . . . . Statistiken . . . . . . . . . . . . . . . . . . PDL2 PROGRAMMIERUNG . . . . . . . . . . Montieren der Einrichtung . . . . . . . . . . Benutzen der DDCMP Einrichtung . . . . . . Einrichtungskontrolle . . . . . . . . . . . . . PROGRAMMIERHINWEISE . . . . . . . . . . ANWENDUNGSBEISPIELE . . . . . . . . . . DAS PROTOKOLL 3964R. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seite 4-12 4-12 4-12 4-13 4-14 4-14 4-15 4-15 4-15 4-15 4-15 4-15 4-16 4-17 4-17 4-21

PDL2

SERIELLE EIN-/AUSGABEN

SERIELLE EIN-/AUSGABEN
In diesem Kapitel werden die Mglichkeiten in PDL2 fr die Verwaltung von seriellen Einrichtungen beschrieben. Die seriellen Ein-/Ausgabeoperationen umfassen das Lesen von Eingaben und das Schreiben von Ausgaben von/auf Bedienereinrichtungen, Datendateien und Kommunikationsports. Je nach Einrichtung knnen Einund Ausgaben aus ASCII-Texten oder aus Binrdaten bestehen. Auf einem PC kann ein als PCINT bezeichnetes Tool ausgefhrt werden , das den Bildschirm und die Tastatur der C3G emuliert. Alle Angaben zur CRT in diesem Handbuch beziehen sich auf den Bildschirm des PC, wenn der Bildschirm der C3G emuliert wird.

SERIELLE Einrichtungen
PDL2 arbeitet mit den folgenden seriellen Einrichtungen: Fenster; Speichereinrichtungen; externe Einrichtungen; Kommunikationsports; Null.

In einem PDL2 Programm werden Einrichtungen als Stringwerte definiert. Der Name einer Einrichtung besteht aus max. 4 Zeichen gefolgt von einem Doppelpunkt. Beispielsweise spezifiziert TP: das Durchlauffenster auf dem Systembildschirm des Programmierhandgerts.

FENSTER Einrichtungen
Fenster sind Bereiche auf dem Bildschirm des Programmierhandgerts und der CR, in die das Programm Daten schreiben oder von dem es Daten lesen kann, die ber die Tastatur des PC oder des Programmierhandgerts eingegeben wurden. Die Fenster verwenden ASCII Format. Die Aufforderungszeichen des Programms, die angezeigt werden, geben dem Anwender die Mglichkeit, spezifische Operationen auszufhren oder Informationen einzugeben sowie Anforderungen oder Antworten fr den Anwender zu lesen. PDL2 erkennt die folgenden Fensternamen: CRT CRT: (default) CRT1: CRT2: CRT3: Programmierhandgert TP: (default) TP0: TP1: TP2: TP3:

CRT: und TP: geben das Rollfenster auf dem Systembildschirm, und CRT1-3 und TP1-3 geben die Fenster auf dem Anwenderbildschirm an. TP0: gibt das Fenster fr das ,Zeichenmen auf dem Programmierhandgert an, das auf Fenstern des Anwenderbildschirms aufgerufen werden kann. (Beschreibung der vorbesetzten Routinen der Fenster siehe Kapitel "Liste der Internen Routinen".) Der Anwenderbildschirm ist in drei Bereiche unterteilt, die von oben nach unten von 1 bis 3 numeriert sind. Die Screen Taste schaltet zwischen den Bildschirmen des Systems und des Anwenders hin und her. Die internen Screen-Routinen definieren den momentan angezeigten Bildschirm und setzten die Anzeige auf einen besonderen Bildschirm um (siehe Kapitel "Liste der Internen Routinen"). PDL2 enthlt interne Routinen, die zur Durchfhrung von Operationen in den Fenstern verwendet werden, wie auch zur Erstellung und Anzeige von Fenstern, die vom Anwender definiert werden, die Cursor-Positionierung, das Lschen der Fenster und die Angabe ihrer Attribute (siehe Kapitel "Liste der internen Routinen"). Das erste Element der vorbesetzten Matrixvariablen $DFT_DV zeigt das Standardfenster an, das in den internen Fensterroutinen benutzt wird. Ist das gewhlte Fenster TP: auf dem Systembildschirm geffnet und in diesem Fenster ist ein Lesebereich aktiv, so erhlt der Anwender eine Meldung Input directed to other window. Drcken SEL Taste. Dies bedeutet, dass die Eingabe zu einem anderen Fenster als dem Befehlsmen gesendet wird. Um zum Befehlsmen zurckzukommen, muss der Anwender die SEL Taste drcken. 00/1200 4-1

SERIELLE EIN-/AUSGABEN

PDL2

Die Bedingung WINDOW SELECT kann in der Umgebung eines Bedingungshandlers oder in einer WAIT FOR Anweisung benutzt werden, um den Zeitpunkt festzustellen, wenn ein spezifisches Fenster zur Eingabe ausgewhlt wurde. Siehe das Kapitel "Bedingungshandler" fr weitere Informationen ber Bedingungen und die Bedingungshandler. An der Einrichtung CRT knnen einige Test vorgenommen werden, da es sich um eine abhngbare Einheit handelt und die CRT nicht angeschlossen sein knnte, wenn sie angesprochen wird. Es kann zu einem Problem kommen, wenn die CRT abgehngt ist, whrend Lesen ansteht. Um dies zu verhindern, kann der PDL2 Programmierer prfen, ob der CRT Emulator vorhanden ist, indem er den Wert der vorbesetzten Variablen $SYS_STATE testet. Man kann auch einen Bedingungshandler definieren, der auslst, wenn das Protokoll des CRT Emulators angeschlossen und abgehngt wird. Mehr Informationen ber eine derartige Anwendung von Bedingungshandlern finden sich im Kapitel Bedingungshandler.

DATEI Einrichtungen
Es handelt sich um sekundre Speichereinrichtungen. Die Programme lesen und schreiben Daten von und in die auf diesen Einrichtungen gespeicherten Dateien. Eine Datei besteht aus einer Sammlung von einander hnlichen Informationen, die wie ein einzelner Block abgespeichert werden. Die Dateien ermglichen es dem Programm, Daten in ASCII oder in Binrformat zu speichern und abzurufen. PDL2 kennt die folgenden Dateinamen: RD: (RAM disk) Die Datei RD: bezieht sich auf die RAM-Platte der Steuereinheit. PDL2 enthlt interne Routinen, die zur Ausfhrung von Operationen mit den Dateien verwendet werden, wie das Positionieren eines Dateizeigers oder die Bestimmung der verbleibenden Byteanzahl in einer Datei (siehe Kapitel "Liste der Internen Routinen").

KOMMUNIKATIONS Einrichtungen
Die seriellen Kommunikationseinrichtungen sind Ports, durch die die Programme mit anderen an die Steuereinheit angeschlossenen Einrichtungen kommunizieren knnen. PDL2 erkennt die folgenden Kommunikationseinrichtungen: COM0: DCM0: NET1: COM1: DCM1: NET2: COM2: DCM2: COMP: DGM0:

DGM1:

Wenn eine Steuereinheit mit einer optionalen Platteneinheit ausgerstet ist, ist COM0: nicht mehr verfgbar. Auf den Kommunikationseinrichtungen knnen Kommunikationsprotokolle installiert werden. Wenn DDCMP auf einer Einrichtung montiert ist, wird darauf mit dem geeigneten Namen DCMn: verwiesen. Wenn 3964R auf einer Einrichtung montiert ist, wird dies mit dem entsprechenden Verweis DGMn: name angezeigt. Sonst wird darauf mit dem entsprechenden Namen COMn: verwiesen. Die Daten knnen in ASCII oder Binrformat bertragen werden, nachdem zunchst eine LUN auf der betreffenden Einrichtung erffnet wurde. Dann werden die Daten geschrieben oder gelesen. Zur Erffnung von LUNs und Datenbertragung siehe den folgenden Abschnitt in diesem Kapitel. COMP: ist der Kanal, auf dem das Tool PCINT zum Emulieren der C3G Bildschirm/Tastatur und fr Dateibertragungen sowie Herunterladen von Systemsoftware installiert wird. NETn: sind Kommunikationskanle fr verschiedene lokale Netzwerk-Konfigurationen. PDL2 verfgt ber interne Routinen (COM_PORT_GET, COM_PORT_SET2) zum Anfragen und Setzen der Eigenschaften von Kommunikationseinrichtungen, die durch die folgenden vorbesetzten Konstanten identifiziert werden: COM_BD110 COM_BD300 COM_BD1200 COM_BD2400 COM_BD4800 COM_BD9600 COM_BD19200 4-2 : : : : : : : 100 300 1200 2400 4800 9600 19200 bertragungsrate bertragungsrate bertragungsrate bertragungsrate bertragungsrate bertragungsrate bertragungsrate in in in in in in in Baud Baud Baud Baud Baud Baud Baud 00/1200

PDL2 COM_BD38400 : COM_PAR_ODD : COM_PAR_EVEN: COM_PAR_NO : 38400 bertragungsrate in Baud ungerade Paritt gerade Paritt keine Paritt

SERIELLE EIN-/AUSGABEN

COM_STOP1 : 1 Stopbit COM_STOP2 : 2 Stopbits COM_STOP1_5 : 1.5 Stopbits COM_BIT7 COM_BIT8 : es werden 7 Bits pro Zeichen bertragen : es werden 8 Bits pro Zeichen bertragen

COM_XSYNC : es wird XON/XOFF Flusskontrolle benutzt COM_XSYNC_NO : XON/XOFF Flusskontrolle wird nicht benutzt COM_RDAHD : Benutzen eines grossen (384 Bytes)Vorauslese-Puffers fr schnellere Leseoperationen ohne Verlust von Zeichen COM_RDAHD_NO : kein Vorauslese-Puffer COM_CHAR COM_PASAL COM_CHARNO : Benutzen des 7-Bit-ASCII-Codes (durch diesen Kommunikationsport werden nur die Zeichen von 32 bis 126 in der ASCII Tabelle gelesen) : alle empfangenen Zeichen gehen durch diesen Kommunikationsport : in allen empfangenen Zeichen wird das siebte Bit gelscht und, wenn der sich ergebene Wert zwischen 32 und 126 liegt, wird das ganze Zeichen einschlielich des achten Bit gelesen.

COM_CHAR und COM_PASAL schlieen sich nicht gegenseitig aus. Wenn sie gemeinsam in ein OR gesetzt werden, liegen die gelesenen Zeichen im Bereich 0-127 der ASCII Tabelle. Die folgende Tabelle stellt die Auswirkung dieser Attribute klar dar (ja bedeutet das Zeichen wird gelesen, nein es wird ignoriert): Tabelle 4-1 Durch einen Kommunikationsport gelesene Zeichen Empfangene Zeichen 00 - 31, 127 32 - 126 128 - 159, 255 160 - 254 COM_CHARNO nein ja nein ja COM_CHAR nein ja nein nein COM_PASAL ja ja ja ja COM_CHAR OR COM_PASAL ja ja nein nein

Im Kapitel Programmbeispiele findet sich ein Beispiel fr ein Programm, das Zeichen ber eine serielle Schnittstelle liest (siehe das Programm SERIAL).

NULL Einrichtung
Diese Einrichtung wird dazu verwendet, eine Ausgabe auf eine nicht vorhandene Einrichtung zu lenken. Sie wird im allgemeinen als Hilfe bei der berprfung von noch unvollstndigen Programmen oder bei der Fehlerbehandlung verwendet. Die in der Nulleinrichtung geschriebenen Daten gehen verloren. Diese Einrichtung kann in ASCII oder in Binrformat verwendet werden. Die vorbesetzte Konstante LUN_NULL kann zum Verweis auf die Null-Einrichtung benutzt werden Fr die Nulleinrichtung kennt PDL2 den String 'NULL:'.

ATTACH und DETACH Anweisungen


Mit der ATTACH Anweisung kann das Programm die exklusive Steuerung ber eine Einrichtung bernehmen, so da verhindert wird, da andere Programme zu dieser Einrichtung Zugang haben. Die DETACH Anweisung dagegen hebt die exklusive Steuerung ber die entsprechende Einrichtung auf. 00/1200 4-3

SERIELLE EIN-/AUSGABEN

PDL2

Die Syntax fr ATTACH und DETACH Anweisungen, wenn sie sich auf die E/A Einrichtungen beziehen, ist folgende: ATTACH device_str <, device_str> DETACH device_str <, device_str> device_str kann ein Name einer E/A Einrichtung mit den folgenden vorbesetzten Fenstern und Kommunikationseinrichtungen sein: Kommunikationseinrichtungen: COM0: COM1: COM2: DGM0: DGM1: DGM2: DCM0: DCM1: DCM2: Fenstereinrichtungen: CRT: CRT1: CRT2: CRT3: TP: TP0: TP1: TP2: TP3:

Zum Beispiel: ATTACH COM0:, COM1:, DCM4: DETACH TP2: DETACH abcd: -- Verlassen eines vom Anwender definierten Fenster Wenn ein Programm versucht, die Kontrolle ber eine Einrichtung zu erhalten, auf der bereits logische Einheitsnummern (LUN) erffnet wurden oder die schon von einem anderen Programm gesteuert wird, wird ein Fehler ausgegeben.

TABELLEN DER EINRICHTUNGEN


Die folgenden Tabellen fhren die Datenstrukturen und die Attributklassen fr die Einrichtungen sowie die Protokollklassen auf, die auf einem Port installiert werden knnen. Y zeigt an, dass die Operation fr eine Einrichtung erlaubt ist. Tabelle 4-2 Beschreibung der Einrichtungen BEFEHL SpeiNull Fenster Seriell Diskette Tisoft Kermit Ddcmp 3964R chern (Beispiel von Einrichtungsnamen) NULL: TP: COM1: FD: COM1: COM1: DCM0: COM1: RD: FILER COPY Quelle Y Y Y FILER COPY Ziel Y Y Y Y Y Y FILER DELETE Y Y FILER PRINT Quelle Y FILER PRINT Ziel Y Y Y Y FILER RENAME Y Y FILER TRANSLATE Y FILER VIEW Y Y Y Operationen mit Fenstern Y Y Zeichenlesen Y Y Y Y Y Y Zeichenschreiben Y Y Y Y Y Y Binary Read/Write ($FL_BINARY) Y Y Y Y Y Binary Swap allowed ($FL_SWAP) Y Y Y Flush on reading ($FL_RDFLUSH) Y Y Y Y Y Asynchrones E/A Lesen Operat. Y Y Y Y Asynchrones E/A Schreiben Operat. Y Y Y Zugriff auf PDL2 Daten Y Y Y Y Y Y Zugriff auf Befehle Y Y Y Y Y Y Y Y Y Zugriff auf die Einrichtung (UCP) Y Zugriff auf die Einrichtung (UCV) Y Y Y Y Y Y Device Attachable/Detachable Y Y Y Y Y Y Installation eines Protokolls Y Deinstallation eines Protokolls Y Y DV_CNTRL kann benutzt werden Y Y Bestimmung von VOL_SPACE Y 4-4 00/1200

PDL2

SERIELLE EIN-/AUSGABEN

LOGISCHE EINHEITNUMMER (LUN)


Eine logische Einheitnummer (Logical Unit Number = LUN) stellt die Verbindung zwischen einem Programm und der physikalischen Einrichtung dar, mit der das Programm kommunizieren kann. Die folgenden vorbesetzten logischen Einheitnummer werden als bereits fr E/A Operationen geffnete Einheiten erkannt: LUN LUN_TP LUN_CRT LUN_NULL Einrichtung TP: CRT: NULL:

Die vorbesetzte Variable $DFT_LUN bezeichnet die Standard-LUN fr E/A Operationen. Die Standard LUN ist das Programmierhandgert und bleibt das auch, wenn das Protokoll des CRT Emulators auf einem Port montiert ist. Soll die Ausgabe zu dem CRT Emulator gelenkt werden, kann die vorbesetzte Variable $DFT_LUN auf den Wert LUN_CRT gesetzt werden.

OPEN FILE Anweisung


Die OPEN FILE Anweisung ffnet eine LUN auf der angegebenen Einrichtung. So wird eine Verbindung zwischen dem Programm und der Einrichtung hergestellt, durch die die E/A Operationen ausgefhrt werden knnen. Zur Darstellung von LUNs verwendet PDL2 eine ganzzahlige, vom Anwender definierte Variable. Diese Variable kann in nachfolgenden WRITE und READ Anweisungen und in internen Routinen verwendet werden, die LUN Parameter verlangen, um die Einrichtung anzugeben, auf der die E/A Operation ausgefhrt werden soll. Eine LUN bleibt bis zur Ausgabe einer CLOSE FILE Anweisung oder bis zur Beendigung oder Deaktivierung des Programms geffnet. Die Syntax der OPEN FILE Anweisung ist folgende: OPEN FILE lun_var (device_str, access_str) <with_clause> lun_var kann eine beliebige ganzzahlige, vom Anwender definierte Variable sein. device_str ist ein beliebiger Ausdruck, der eine E/A Einrichtung (ein Fenster, eine Kommunikations- oder Speichereinrichtung) darstellt. Die Speichereinrichtungen brauchen auch einen Namen und eine Erweiterung. Die Standardeinrichtung ist 'RD:'. access_str kann ein beliebiger Ausdruck sein, der die Zugriffsart zur Einrichtung folgendermaen darstellt: R W RW WA RWA -----read only (nur Lesen) write only (nur Schreiben) read and write (Lesen und Schreiben) write append (Schreiben im Anhang zur Datei) read and write append (Lesen und Schreiben im Anhang zur Datei)

Wenn eine Datei in W oder RW geffnet wird, haben andere Programme keinen Zugriff mehr auf diese Datei. Wird eine Datei in R geffnet, knnen die anderen Programme die Datei auf die gleiche Weise ffnen, wobei W-Operationen jedoch nicht mglich sind. Wenn es auf der RD schon eine solche Datei gibt und der Befehl OPEN FILE abgesetzt wird, wird diese Datei geffnet und ihrem Inhalt kann weiters angefgt werden, wenn RWA gesetzt wurde. Bei ffnen mit dem Attribut RW wird eine neue Datei angelegt. Im Folgenden sind Beispiele fr OPEN FILE Anweisungen aufgefhrt: OPEN OPEN OPEN OPEN FILE FILE FILE FILE

crt1_lun (CRT1:, RW) -- ffnet das Fenster CRT1:, read and write file_lun (stats.dat, R) -- ffnet die Datei stats.dat, read only comm_lun (COM0:, R) -- ffnet den Kommunikationsport COM0:, win_lun (abcd:, RW) -- ffnet das Fenster ABCD: vom Anwender

00/1200

4-5

SERIELLE EIN-/AUSGABEN

PDL2

WITH Klausel
Mit der optionalen WITH Klausel knnen vorlufige Werte fr die vorbesetzten Variablen der LUNs angegeben werden. Diese Klausel wirkt nur auf die LUN, die gerade geffnet wird. Die Syntax der WITH Klausel ist folgende: WITH predef_lun_var = value <, predef_lun_var = value>... In einer WITH Klausel knnen folgende Variablen verwendet werden: $FL_ADLMT $FL_BINARY $FL_DLMT $FL_ECHO Zum Beispiel: OPEN FILE file_lun (stats.log, R) WITH $FL_BINARY = TRUE Wenn eine Anweisung mehr als eine Zeile in Anspruch nimmt, wird das Ende der Zeile OPEN FILE mit einem Komma angezeigt. Jede neue Zeile beginnt dann mit dem reservierten Wort WITH und endet mit einem Komma. Das reservierte Wort ENDOPEN mu verwendet werden, um das Ende der OPEN FILE Anweisung anzugeben, wenn diese mehr als eine Zeile belegt. Zum Beispiel: OPEN FILE file_lun (stats.log, R), WITH $FL_SWAP = TRUE, $FL_BINARY = TRUE, ENDOPEN OPEN FILE comm_lun (COM0:, RW) WITH $FL_SWAP = TRUE, WITH $FL_BINARY = TRUE, -- Delimiters of ctrlc, down, up, enter, prev keys WITH $FL_ADLMT = \010\013\011\027\003, ENDOPEN $FL_NUM_CHARS $FL_PASSALL $FL_RANDOM $FL_RDFLUSH $FL_SWAP

CLOSE FILE Anweisung


Die CLOSE FILE Anweisung schliet eine LUN und beendet die Verbindung zwischen dem Programm und der Einrichtung. Alle Daten des Pufferspeichers werden in die Speichereinrichtung berschrieben, bevor die CLOSE FILE Anweisung ausgefhrt wird. Die Syntax fr die CLOSE FILE Anweisung ist folgende: CLOSE FILE || lun_var | ALL || lun_var kann eine beliebige ganzzahlige Variable sein, die eine offene LUN darstellt. Wird anstelle eines Lun ALL angegeben, werden alle vom Programm geffneten Dateien geschlossen. Eine LUN kann nur von dem Programm aus geschlossen werden, das auch benutzt wurde, um sie zu erffnen. Alle LUNs, die von einem Programm benutzt wurden, werden automatisch bei Abschlu oder Deaktivierung des Programms geschlossen. Mit der Option ALL werden alle vom Programm geffneten LUNs geschlossen.

4-6

00/1200

PDL2

SERIELLE EIN-/AUSGABEN

READ Anweisung
Die READ Anweisung liest Eingangsdaten, die in den Variablen des von der LUN angegebenen Programms enthalten sind. Die Syntax der READ Anweisung ist folgende: READ <lun_var> (var_id <, var_id>...) lun_var kann eine Variable sein, die eine beliebige geffnete LUN oder eine der vorbesetzten LUNs, LUN_CRT oder LUN_TP darstellt. Wenn lun_var nicht spezifiziert wird, wird die in der vorbesetzten Variablen $DFT_LUN angegebene Standard-LUN verwendet. var_id kann ein beliebiger Variablenidentifizierer sein, der zu einer der folgenden Datenklassen gehrt: INTEGER REAL BOOLEAN STRING VECTOR POSITION JOINTPOS XTNDPOS

In keinem Fall kann var_id eine vorbesetzte Variable sein, deren Grenzen kontrolliert werden mssen. Das Kapitel "Liste der vorbesetzten Variablen" beschreibt alle vorbesetzten Variablen und gibt an, ob eine Kontrolle der Grenzen ntig ist oder nicht. Das besetzte Wort NL (new line = neue Zeile) kann in der Liste der Identifizierer verwendet werden, um das Lesen des folgenden Datenelements von einer neuen Zeile zu erzwingen. Die Daten werden gelesen und jedes einzelne Element wird der entsprechenden Variablen aus der Liste der Identifizierer zugewiesen. Die Daten knnen ASCII oder Binrformat haben, je nachdem wie die LUN erffnet wurde. Beispiele fr READ Anweisungen: READ (body_type, total_units, operator_id) -- liest drei Werte aus der Standard-LUN Wenn der Anwender die Werte 4, 50 und JOE eingegeben hatte, nimmt der READ Anweisung in diesem Fall die folgenden Zuordnungen vor:

body_type := 4 total_units := 50 operator_id := JOE


Die folgenden Beispiele zeigen an, wie Daten von einem Fenster oder einer Datei gelesen werden knnen: OPEN FILE crt2_lun (CRT2:, RW) -- ffnet das Fenster CRT2: READ crt2_lun (menu_choice) -- liest einen Wert aus dem Fenster CRT2: ... CLOSE FILE crt2_lun OPEN FILE file_lun (specs.dat, R) READ file_lun (body_type, NL, total_units, NL, operator_id, NL) -- liest drei Werte aus der Datei RD:specs.dat -- geht davon aus, da sich jeder Wert auf einer neuen Zeile befindet ... CLOSE FILE file_lun

00/1200

4-7

SERIELLE EIN-/AUSGABEN

PDL2

FORMATSPEZIFIZIERER
Als Option knnen Formatspezifizierer verwendet werden, um die Eingabe zu formatieren. Bei Binrdaten kann ein einzelner Formatspezifizierer verwendet werden, um die von einem Wert belegte Bytezahl anzugeben. Der Einflu eines Formatspezifizierers auf die ASCII Daten hngt von der zu lesenden Datenklasse ab. Die Syntax eines Formatspezifizierers ist folgende: :: int_specifier -- ganzzahliger Ausdruck Fr einige Klassen kann ein zweiter Spezifizierer verwendet werden, der mit derselben Syntax hinter den ersten gesetzt wird. Die Formatspezifizierer wirken auf jede Datenklasse in ASCII Format folgendermaen: INTEGER: Der erste Spezifizierer stellt die max. Anzahl der Zeichen dar, die gelesen werden sollen, whrend der zweite die Basis der Zahl angibt. Die verwendeten Basiswerte sind folgende: 1 fr oktal; 2 fr hexadezimal; 3 fr Zeichen; 4 fr binr; 5 fr dezimal.

REAL: Der Formatspezifizierer stellt die max. Anzahl der Zeichen dar, die gelesen werden sollen. Es ist nur ein Spezifizierer zulssig. BOOLEAN: Die Daten mssen einer der vorbesetzten booleschen Konstanten angehren (TRUE, ON, FALSE, OFF). Der Formatspezifizierer stellt die max. Anzahl der Zeichen dar, die gelesen werden sollen. Es ist nur ein Spezifizierer zulssig. STRING: Der Formatspezifizierer stellt die max. Anzahl der Zeichen dar, die gelesen werden sollen. Es ist nur ein Formatspezifizierer zulssig. VECTOR, POSITION, JOINTPOS, und XTNDPOS: Im Folgenden sind die Formate aufgelistet, die diesen Datenklassen fr Eingaben zugeordnet werden knnen: In allen Fllen sind die Werte zwischen spitzen Klammern (<>) eingeschlossen. Die Werte mssen durch Kommas getrennt werden; Bei Vektoren und Positionen bedeuten x, y und z die kartesischen Koordinaten. VECTOR: <x, y, z> Bei den Positionen stellen e1, e2 und e3 die Eulerschen Winkel und cnfg_str eine Konfigurationskennung dar. Diese wird nicht in Kommas eingeschlossen. POSITION: <x, y, z, e1, e2, e3, cnfg_str> Bei der Jointpos bleiben die Komponenten, die keine Beziehung zum aktuellen Arm haben, leer, und Kommas werden zur Angabe der Stelle verwendet. Der Armnummer 'n' fr JOINTPOS und XTNDPOS geht der Buchstabe 'A' voran. JOINTPOS: <j1, j2, j3, j4, j5, j6, An> XTNDPOS: <<x, y, z, e1, e2, e3, cnfg_str> <x1, ...> An> Der Formatspezifizierer stellt die max. Anzahl der Zeichen dar, die fr jede Komponente der Daten gelesen werden sollen. Es ist nur ein Formatspezifizierer zulssig.

4-8

00/1200

PDL2

SERIELLE EIN-/AUSGABEN

WIEDERANLAUF NACH STROMAUSFALL


Eine wartende READ Anweisung auf dem Programmierhandgert oder der seriellen Datenleitung verursacht einen Fehler, nachdem der Wiederanlauf nach Stromausfall abgeschlossen ist.

WRITE Anweisung
Die WRITE Anweisung schreibt die Ausgangsdaten auf der angegebenen LUN. Die Syntax des WRITE Anweisung ist folgende: WRITE <lun_var> (expr <, expr>...) lun_var kann eine Variable sein, die eine beliebige geffnete LUN oder eine der vorbesetzten LUNs LUN_CRT oder LUN_TP darstellt. Wenn lun_var nicht spezifiziert wird, wird die in der vorbesetzten Variablen $DFT_LUN angegebene Standard-LUN verwendet. expr kann ein Ausdruck sein, der zu einer der folgenden Datenklassen gehrt: INTEGER REAL BOOLEAN STRING VECTOR POSITION JOINTPOS XTNDPOS

Das reservierte Wort NL (new line = neue Zeile) kann auch als Datenelement verwendet werden. NL erstellt eine neue Zeile. Die Daten werden in der Reihenfolge ihrer Auflistung ausgedruckt. Die Daten knnen ASCII oder Binrformat haben, je nachdem wie die LUN erffnet wurde. Die folgende Anweisung zum Beispiel sendet der Standard-Ausgabeeinrichtung einen String von Zeichen, dem ein Zeichen folgt, das bedeutet, da auf eine neue Zeile gegangen werden soll. WRITE (Karosserietyp, zu bearbeitende Einheit und Bedienernamen eingeben., NL) Man beachte, dass das String-Literal in einfache Apostrophe () eingeschlossen ist, die nicht als Teil der Ausgabe geschrieben werden. Die WRITE Anweisung wird beim Schreiben auf bestimmte Einrichtungen, wie z.B. den Kommunikationseinrichtungen, asynchron ausgefhrt. Das erlaubt die gleichzeitige Ausfhrung anderer Programme, ohne die Beendigung der WRITE Anweisung abzuwarten. Die vorbesetzte Variable $WRITE_TOUT gibt das Zeitintervall fr eine asynchrone Schreiboperation an.

LEEREN DES AUSGANGSPUFFERS


Die Schreibanforderungen werden intern in einem Ausgangspuffer gespeichert, bis der Puffer voll ist oder ein anderes Ereignis sein Leeren verursacht. Der Ausgangspuffer wird vom Ende eines WRITE Anweisung, durch das reservierte Wort NL oder durch den ASCII Code fr Zeilenumbruch oder durch eine CLOSE FILE Anweisung geleert.

FORMATSPEZIFIZIERER
Fr WRITE Anweisungen knnen Formatspezifizierer verwendet werden, um die Ausgabe zu formatieren. Bei Binrdaten kann ein einzelner Formatspezifizierer verwendet werden, um anzugeben, wieviel Byte ein Wert belegen darf. Der Einflu eines Formatspezifizierers auf die ASCII Daten hngt von der zu schreibenden Datenklasse ab. Die Syntax eines Formatspezifizierers ist folgende: :: int_specifier -- ganzzahliger Ausdruck Fr einige Klassen kann ein zweiter Spezifizierer verwendet werden, der mit derselben Syntax hinter den ersten gesetzt wird. Die Formatspezifizierer wirken auf jede Datenklasse in ASCII Format folgendermaen:

00/1200

4-9

SERIELLE EIN-/AUSGABEN

PDL2

INTEGER: Der erste Spezifizierer stellt die min. Anzahl der Zeichen dar, die geschrieben werden sollen. Wenn dieser Wert eine grere Anzahl an Zeichen beansprucht, knnen so viele verwendet werden, wie notwendig ist. Der Spezifizierer kann ein positiver oder ein negativer Wert sein. Der positive Wert gibt die Rechtsausrichtung der Zahl an, und er ist der Standardwert, wenn kein Vorzeichen verwendet wird. Ein negativer Wert gibt die Linksausrichtung der Zahl an. Der zweite Spezifizierer gibt die Basis der Zahl an. Die verwendeten Basiswerte sind folgende: 1 fr oktal; 2 fr hexadezimal; 3 fr Zeichen; 4 fr binr; 5 fr dezimal.

Ist der zweite Formatspezifizierer negativ, dann stehen Nullen anstelle von Leerzeichen vor dem Wert. Zum Beispiel: WRITE (1234::6::-2) - Wird als 0004D2 (Hex) REAL: Der erste Spezifizierer stellt die min. Anzahl der Zeichen dar, die geschrieben werden sollen. Wenn dieser Wert eine grere Anzahl an Zeichen beansprucht, knnen so viele verwendet werden, wie notwendig ist. Der Spezifizierer kann ein positiver oder ein negativer Wert sein. Der positive Wert gibt die Rechtsausrichtung der Zahl an, und er ist der Standardwert, wenn kein Vorzeichen verwendet wird. Ein negativer Wert gibt die Linksausrichtung der Zahl an. Wenn der zweite Spezifizierer positiv ist, gibt er die Anzahl der zu besetzenden Dezimalstellen an. Wenn die Zahl negativ ist, soll die wissenschaftliche Schreibweise verwendet werden. BOOLEAN: Die Daten mssen einer der vorbesetzten booleschen Konstanten angehren (TRUE oder FALSE). Der Formatspezifizierer gibt die Anzahl der Zeichen an, die geschrieben werden sollen. Der Spezifizierer kann ein positiver oder ein negativer Wert sein. Der positive Wert gibt eine Rechtsausrichtung der Daten an, und er ist der Standardwert, wenn kein Vorzeichen verwendet wird. Ein negativer Wert gibt die Linksausrichtung der Daten an. Es ist nur ein Spezifizierer zulssig. STRING: Der Formatspezifizierer stellt die min. Anzahl der Zeichen dar, die geschrieben werden sollen. Der Spezifizierer kann ein positiver oder ein negativer Wert sein. Der positive Wert gibt die Rechtsausrichtung des Strings an, und er ist der Standardwert, wenn kein Vorzeichen verwendet wird. Ein negativer Wert gibt die Linksausrichtung des Strings an. Es ist nur ein Formatspezifizierer zulssig. Man beachte, dass die Anfhrungszeichen nicht geschrieben werden. Wenn der Formatspezifizierer mehr als 143 Zeichen enthlt, wird die Schreiboperation nicht ausgefhrt. Um das zu vermeiden, ist es ratsam, keine Formatspezifizierer fr sehr lange Strings zu verwenden. VECTOR, POSITION, JOINTPOS, und XTNDPOS: Jede Datenklasse wird mit den folgenden Formaten zur Ausgabe gesendet: In allen Fllen sind die Werte zwischen spitzen Klammern (<>) eingeschlossen. Die Werte mssen durch Kommas getrennt werden.

Bei Vektoren und Positionen bedeuten x, y und z die kartesische Koordinaten. VECTOR: <x, y, z> Bei den Positionen stellen e1, e2 und e3 die Eulerschen Winkel und cnfg_str eine Konfigurationskennung dar. Diese wird nicht durch Apostrophe einge-schlossen. POSITION: <x, y, z, e1, e2, e3, cnfg_str> Bei der JOINTPOS bleiben die Komponenten, die keine Beziehung zum aktuellen Arm haben, leer, und die Kommas werden zur Angabe der Stelle verwendet. Der Armnummer 'n' fr JOINTPOS und XTNDPOS geht der Buchstabe 'A' voran. JOINTPOS: <j1, j2, j3, j4, j5, j6, An> XTNDPOS: <<x, y, z, e1, e2, e3, cnfg_str> <x1, ...> An> Der Formatspezifizierer stellt die max. Anzahl der Zeichen dar, die fr jede Komponente der Daten geschrieben werden sollen. Wenn der zweite Spezifizierer positiv ist, gibt er die Anzahl der zu besetzenden Dezimalstellen an. Wenn die Zahl negativ ist, soll die wissenschaftliche Schreibweise verwendet werden. 4-10 00/1200

PDL2

SERIELLE EIN-/AUSGABEN

WIEDERANLAUF NACH STROMAUSFALL


Eine wartende WRITE Anweisung auf der seriellen Datenleitung verursacht einen Fehler, nachdem der Wiederanlauf nach Stromausfall abgeschlossen ist. Eine WRITE Anweisung auf dem Programmiererhandgert oder der BK verursacht keinen Fehler, und die Fenster enthalten die richtigen Datenwiedergaben, nachdem das System wieder gestartet ist.

DATENKOMMUNIKATION
Die C3G bietet mehrere Optionen, mit denen PDL2 Programme mit PDL2 Programmen auf anderen Steuereinheiten oder irgendeinem Gert, System sowie eienem anderen Programmen kommunizieren knnen, das ein kompatibles Protokoll zur Datenbertragung benutzen kann. Die Steuereinheit C3G untersttzt Datenbertragung mit seriellen Schnittstellen RS232 fr: KERMIT, benutzt fr Dateibertragungen zwischen einer Disketteneinheit oder einem PC und der RAM DISK der Steuereinheit C3G. Das Protokoll kann mit dem Befehl UTILITY COMMUNICN MOUNT KERMIT im C3G Systemmen montiert werden. DDCMP 3964R

In Bezug auf Implementierungen von Feldbussen untersttzt die C3G: PROFIBUS DP INTERBUS SLAVE und INTERBUS MASTER RIO (Anschluss an die ALLEN BRADLEY SPS) DEVICE NET FTP auf TCP/IP mit 10 MBit ETHERNET Technologie

Weitere Einzelheiten ber Feldbusse finden sich im Handbuch C3G Cell Controller Bedienungs-und Wartungshandbuch.

DAS PROTOKOLL DDCMP


Die Steuereinheit C3G untersttzt das serielle Kommunikationsprotokoll DDCMP. Die Abkrzung bedeutet Digital Data Communications Message Protocol (Protokoll fr Meldungen digitaler Datenkommunikation), das von Digital Equipment Corporation (DEC) fr ihre Netzwerkprodukte entwickelt wurde. Es handelt sich um einen offenen Standard, der auch von anderen Herstellern und Softwareanbietern untersttzt wird. Die C3G implementiert die Version 4.0 von DDCMP wie von DEC in der Verffentlichung AA-D599A- TC definiert. Es gelten folgende Funktionen und Einschrnkungen: Untersttzen von Normal Mode Operation. Untersttzen von Supports Maintenance Mode in Sonderfllen. Nur Untersttzung von Punkt zu Punkt Verbindungen (keine Mehrfachanschlsse).

Die Beschrnkung auf Punkt-zu-Punkt Verbindungen bedeutet, dass die Schnittstelle jeweils nur mit einem anderen Computer verbunden sein kann, was die Normalkonfiguration ist. Der Anschluss kann entweder direkt oder ber eine dedizierte Modemleitung erfolgen. Obwohl in den DDCMP Spezifikationen Mehrfachanschlsse definiert sind, sind sie sehr ineffizient und gelten heute als obsolet. Mehrfachanschlsse sind heute durch lokale Netzwerke (LANs) ersetzt worden. DDCMP ist die bevorzugte Kommunikationsmethode zwischen zwei C3Gs, die ber serielle Leitung verbunden sind.

OPERATION IM NORMALMODUS
Der Normal Mode von DDCMP sollte fast unter allen Umstnden benutzt werden, wenn ein Computer oder eine andere Einrichtung angeschlossen werden, die DDCMP untersttzen. Im Normalmodus verwaltet DDCMP die serielle Leitung so, dass eine zuverlssige Meldungsbertragung zum Anwendungsprogramm gewhrleistet ist. Sobald das Protokoll voll in Betrieb ist, wird jeder bertragungsfehler entdeckt und die Meldung nochmals bertragen. Schwere Fehler, wie z.B. Unterbrechung der Leitung oder Programmabbruch am anderen Leitungsende werden ebenfalls entdeckt und abgehandelt. In einigen Fllen gibt DDCMP einen Fehlercode zum Anwendungsprogramm zurck, wenn die Bedingung nicht wiederherstellbar ist. Meistens jedoch sind die Anwesenheit und Operationen des DDCMP Handlers fr das Anwendungsprogramm transparent. Das PDL2 Programm kann Meldungen so lesen und schreiben, als wenn es sich um eine einfache serielle Leitung handelte. 00/1200 4-11

SERIELLE EIN-/AUSGABEN

PDL2

Montieren
DDCMP ist ein Protokoll, das montiert werden muss, ehe es benutzt werden kann. Dieser Prozess bergibt die Kontrolle des seriellen Ports an den DDCMP Handler. DDCMP behlt die Kontrolle des Ports, bis es von einem anderen Befehl demontiert wird. Das Protokoll muss montiert werden, bevor irgendein Programm, das es benutzen will, gestartet wird. Vor Montieren des Protokolls muss der serielle Port auf die gewnschte Geschwindigkeit gesetzt werden. Die anderen Eigenschaften werden automatisch beim Montieren des Protokolls eingestellt. Der Montierbefehl fr DDCMP ist UTILITY COMMUNICN MOUNT DDCMP (UCMD) gefolgt vom Portnamen. Beispielsweise ist der Befehl zum Starten von DDCMP auf Port 1: UCMD COM1 Das Protokoll DDCMP kann gleichzeitig auf einer beliebigen Zahl der verfgbaren seriellen Ports montiert werden. Jeder PORT wird unabhngig von den anderen verwaltet.

Protokollstart
Nachdem das Protokoll montiert ist, geht es in den Startzustand. Whrend dieser Zeit sendet der Handler in periodischen Abstnden eine spezielle Protokollmeldung aus und lauscht auf eine Kontrollmeldung vom DDCMP Handler am anderen Ende der Verbindung. Wenn die beiden Handler diese Meldungen richtig ausgetauscht haben, gehen sie an beiden Enden in den Betriebszustand und knnen zum bertragen von Meldungen benutzt werden. DDCMP wird als Protokoll zwischen gleichrangigen Einrichtungen bezeichnet, da an beiden Enden der Verbindung die gleiche Software und die gleichen Betriebsregeln benutzt werden. Beim Starten des Protokolls und beim Austauschen von Meldungen gibt es keine Master-Slave-Beziehung. Das heit, es spielt keine Rolle, welches Ende der Verbindung seinen Handler zuerst startet. Wenn zwei C3G Steuereinheiten mit DDCMP verbunden werden, kann der Montierbefehl auf der einen und dann der anderen Steuereinheit eingegeben werden und ist ohne Bedeutung, welche die erste ist. Meistens wird der Startzustand nur beim ersten Montieren des Protokolls durchlaufen. Bei schweren Fehlern kann der Handler jedoch manchmal den Betrieb nur durch ein Neustarten des Protokolls wiederaufnehmen, was es in den Startzustand zurckversetzt. Wenn dies geschieht, kann dem Anwendungsprogramm ein Fehlercode bergeben und eine Meldung auf dem Bildschirm angezeigt werden. Fehlerbedingungen werden in einem spteren Abschnitt dieses Kapitels im einzelnen erlutert.

Protokollbetrieb
Wenn ein Protokoll in den Betriebszustand geht, bedeutet dies, dass die Handler auf beiden Seiten der seriellen Verbindung synchronisiert sind und fehlerfreie Meldungen austauschen knnen. Jetzt kann ein PDL2 Anwendungsprogramm mit einem DDCMP spezifischen Einrichtungsnamen einen Kommunikationsport ffnen und dort Meldungen schreiben und lesen. In den meisten Fllen bleiben die Anwesenheit und die Operationen des Handlers des DDCMP Protokoll fr das Anwendungsprogramm transparent. Weniger schwere Fehlerbedingungen werden beseitigt, ohne dass das Programm weis, dass eine bertragung wiederholt werden musste. Immer wenn eine Meldung zu dem anderen System gesandt wurde, erwartet der DDCMP Handler auf der C3G eine Quittung darber, dass die Meldung richtig empfangen wurde. An diesem Punkt knnen drei Ereignisse auftreten: Es wird eine Besttigung (ACK) empfangen .In diesem Fall weis der Handler, dass die Meldung richtig und ohne Fehler vom anderen System empfangen wurde. Es wird eine negative Besttigung (NAK) empfangen, was bedeutet, dass das andere System einen Fehler entdeckt hat und die Meldung nochmals gesendet werden muss. Innerhalb von ca. 3 Sekunden geht keine Antwort ein. Dies kann an einer gestrten Leitung oder einem schwereren Fehler liegen. In jedem Fall versucht der DDCMP Handler, nochmals eine Antwort vom anderen System zu erhalten oder die Meldung nochmals zu senden.

Demontieren
Wenn das Programm, das DDCMP benutzt, zuende ist und das Protokoll nicht lnger erforderlich ist, kann es demontiert werden, so dass der serielle Port fr andere Zwecke frei ist. Der entsprechende Befehl ist UTILITY COMMUNICN DISMOUNT (UCD) gefolgt von dem Namen des Ports; beispielsweise: UCD COM1: Der DDCMP Handler wird vom Port abgenommen und alle spezifischen Protokollaktivitten hren auf. 4-12 00/1200

PDL2

SERIELLE EIN-/AUSGABEN

FEHLERBEDINGUNGEN UND STATISTIKEN


Der DDCMP Handler kann die meisten vorbergehenden Fehlerbedingungen ausfahren, so dass die Kommunikation zwischen dem Anwendungsprogramm und dem Programm am anderen Ende der Verbindung nicht unterbrochen wird. Wenn ein Fehler entdeckt wird, versucht der Handler die Meldung nochmals zu bertragen oder Aktionen zur Abhilfe zu starten, wie sie fr das DDCMP Protokoll spezifiziert sind. Bleibt die Fehlerbedingung jedoch auch nach 7 Versuchen bestehen, wird ein Abbruchsfehler erklrt, der einen Neustart des Protokoll erfordert. Das fhrt zu folgenden Aktionen: Die anstehende Lese- oder Schreibanforderung wird abgeschlossen und die Kontrolle zum wartenden PDL2 Programm bertragen. Es wird dem Programm aber durch einen Fehlercode mitgeteilt, dass die Anforderung nicht ausgefhrt wurde. Das Protokoll geht in den Startzustand zurck, was bedeutet, dass die Initialisierungsmeldungen erfolgreich zwischen den Systemen ausgetauscht werden mssen, bevor wieder Meldungen bertragen werden knnen.

Ein anderes Ereignis, das ein Neustarten des Protokolls bewirken kann, ist der Empfang einer Startmeldung vom anderen System, whrend der lokale Handler im Betriebszustand ist, da dies bedeutet, dass der andere Handler einen Abbruchfehler entdeckt und das Protokoll neu gestartet hat. In diesem Fall geht auch der lokale Handler wieder in den Startzustand wie oben beschrieben. Auch Anwendereingriffe knnen zu einem Neustart des Protokolls fhren. Wenn z.B. bei zwei durch montierte DDCMP Handler verbundene C3Gs der Anwender auf einer C3G die Befehle zum Demontieren und nachfolgendem Montieren des DDCMP Protokolls auf der benutzten seriellen Leitung eingibt, ergibt sich beim Protokollneustart auf der anderen C3G ein Fehler. Der Handler fhrt eine Statistiktabelle, in der die Fehler nach Typ eingetragen werden, auch wenn sie behoben wurden. Diese Statistiken knnen helfen, Fehler auf der Leitung zu entdecken und geeignete Manahmen zu ergreifen, ehe es zu schweren Problemen kommt. Die Statistiken knnen mit einem Dienstprogramm oder einem speziell erstellten PDL2 Programm eingesehen werden, das sie auf dem Bildschirm ausgibt. Das folgende ist die Beschreibung der Statistiken, die fr jede DDCMP Schnittstelle gefhrt werden: Gesendete Meldungen - die Anzahl der erfolgreich gesendeten und quittierten Anwendungsmeldungen Empfangene Meldungen - die Anzahl der erfolgreich empfangenen Anwendungsmeldungen NAKs gesendet wegen falschem BCC Kopf - es wurde eine Meldung empfangen, aber ein Fehler entdeckt. Dieser Fehler tritt normalerweise wegen einer gestrten Leitung auf. NAKs gesendet wegen falscher BCC Daten - es wurde eine Meldung empfangen, aber ein Fehler entdeckt. Dieser Fehler tritt normalerweise wegen einer gestrten Leitung auf. NAKs gesendet wegen REP Antwort - es wurde eine NAK Antwort, die zum anderen System gesendet wurde, verloren und der andere Handler fordert ein erneutes Senden der Antwort an. Dies kann an einer unzuverlssigen Verbindung oder einer schweren Fehlerbedingung liegen. NAKs gesendet weil keine Puffer berlauf - diese Bedingung tritt auf, wenn die Anwendung am anderen Ende der Verbindung Daten sendet, die jedoch von keiner Anwendung auf der lokalen Steuereinheit gelesen werden. Weiter unten in diesem Kapitel werden Beispiele dafr gegeben, wie man dies verhindert. NAKs gesendet wegen Empfang-berlauf - diese Bedingung tritt auf, wenn Daten so schnell ber die serielle Verbindung einlaufen, dass die C3G sie nicht abarbeiten kann. Wenn diese Bedingung auftritt, kann es ntig sein, die Baudrate auf dem Port zu reduzieren. NAKs gesendet wegen zu langer Meldung - das DDCMP ist auf der C3G so implementiert, dass die Meldungen auf max. 256 Bytes beschrnkt sind. Wenn das angeschlossen System oder Gert versucht, eine lngere Meldung zu bertragen, gibt der Handler diese Fehlermeldung aus. NAKs empfangen wegen falschem Kopfformat - dies zeigt an, dass eine ungltige oder nicht untersttzte DDCMP Kontrollmeldung empfangen wurde. Diese Bedingung sollte nie auftreten, wenn das Protokoll von den beiden in Verbindung stehenden DDCMP Handlern richtig implementiert ist. NAKs empfangen wegen Kopf BCC Fehler - dies zeigt an, dass eine von der C3G gesendete Meldung am anderen Ende fehlerhaft empfangen wurde. Dieser Fehler tritt normalerweise wegen einer gestrten Leitung auf. 00/1200 4-13

SERIELLE EIN-/AUSGABEN

PDL2

NAKs empfangen wegen Daten BCC Fehler - dies zeigt an, dass eine von der C3G gesendete Meldung am anderen Ende fehlerhaft empfangen wurde. Dieser Fehler tritt normalerweise wegen einer gestrten Leitung auf. NAKs empfangen wegen REP Antworte - der DDCMP Handler wnscht eine Neubertragung einer Antwort auf eine gesendete Meldung und erhlt als Antwort ein NAK. NAKs empfangen weil kein Puffer verfgbar - die lokale Anwendung versucht, eine Meldung zum anderen Ende der Verbindung zu senden, wo sie jedoch z.Zt. von keinem Programm gelesen wird. Dies kann daran liegen, dass das betreffende Programm auf dem anderen System beendet ist, oder es gibt einen Fehler in der Verwaltung der Kommunikation. Beispiele weiter unten in diesem Kapitel erlutern diese Bedingung. NAKs empfangen wegen Empfang-berlauf - zeigt ein Problem beim Datenempfang am anderen Ende der Verbindung an. Das kann daran liegen, dass die auf der Verbindung benutzte Baudrate zu schnell fr das andere System ist. NAKs empfangen wegen zu langer Meldung - die Anwendung versucht eine Meldung zu senden, die zu lang fr das andere System ist. Dies sollte nie vorkommen, wenn zwei G3C Steuereinheiten verbunden sind, da sie die gleiche Beschrnkung der Meldungslnge benutzen. NAKs empfangen wegen falschem Kopfformat - eine zum anderen System gesendete Meldung wurde im bertragungsprozess korrumpiert. Das kann an einer gestrten Leitung oder an anderen Hardwarebedingungen liegen. NAKs empfangen aus anderen Bedingungen - es wurde eine negative Rckmeldung ohne Angabe einer bestimmten Ursache empfangen. Gesendete REPs - gibt an, wie oft der Handler das andere System aufforderte, eine Antwort auf eine abgesendete Meldung zu geben. Dies kann auf eine unzuverlssige Verbindung hinweisen, auf der Daten hin und wieder verloren oder korrumpiert werden. Empfangene REPs - gibt an, wie oft das andere System eine Wiederholung einer Beantwortung anforderte. Dies kann auf eine unzuverlssige Verbindung hinweisen, auf der Daten hin und wieder verloren oder korrumpiert werden. Protokoll-Neustarts - gibt an, wie oft das Protokoll wieder in den Startzustand versetzt wurde. Diese Zahl enthlt sowohl die Neustarts aufgrund lokaler Fehler als auch aufgrund der Neustarts des anderen Handlers. Protokoll-Neustarts sind die einzigen wirklichen Abbruchfehler. Dieses Ereignis wird auch auf dem Hauptbildschirm angezeigt. Die Protokollstatistiken sind nur verfgbar, whrend das Protokoll auf dem seriellen Port montiert ist. Nachdem ein Handler demontiert wurde, starten die Statistiken beim Neustart wieder mit Null. Sie knnen auch nach Lesen mit einem PDL2 Dienstprogramm auf Null gesetzt werden. Die hchste Zhlerzahl ist fr alle Posten 65535. Wenn ein Zhler diesen Wert erreicht, wird er nicht weiter erhht. Jede montierte Schnittstelle hat ihre eigene Statistik.

BETRIEB IM WARTUNGSMODUS
DDCMP kann im sogenannten Wartungsmodus operieren. Dies eine eingeschrnkte Untermenge des Protokolls, die manchmal von Systemen oder Einrichtungen mit begrenzter Intelligenz benutzt wird. Meldungen werden so bertragen, dass Fehler bei ihrem Empfang entdeckt werden; es gibt jedoch keine Vorkehrungen zur Fehlerberichtigung. Die kommunizierenden Anwendungen, die diesen Modus benutzen, mssen alle anderen Zuverlssigkeitsfunktionen vorsehen wie z.B. Fehlerbehebung, Entdecken von Zeitberschreitungen usw. Dieser Modus sollte nur benutzt werden, wenn die angeschlossene Einricht den Normalmodus nicht untersttzen kann.

Montieren
DDCMP ist ein Protokoll, das montiert werden muss, ehe es benutzt werden kann. Dieser Prozess bergibt die Kontrolle dem seriellen Port an den DDCMP Handler. DDCMP behlt die Kontrolle desPorts, bis es von einem anderen Befehl demontiert wird. Das Protokoll muss montiert werden, bevor irgendein Programm, das den serielle Port benutzt, gestartet wird. Vor Montieren des Protokolls muss der serielle Port auf die gewnschte Geschwindigkeit gesetzt werden. Die anderen Eigenschaften werden automatisch beim Montieren des Protokolls eingestellt. Der Montierbefehl fr DDCMP im Wartungsmodus Mode ist UTILITY COMMUNICN MOUNT DDCMP mit der Option /Maint (UCMD/M) gefolgt vom Portnamen. Der Befehl zum Starten von DDCMP auf Port 1 ist z.B.: UCMD/M COM1: 4-14 00/1200

PDL2

SERIELLE EIN-/AUSGABEN

Das Protokoll DDCMP kann gleichzeitig auf einer beliebigen Zahl der verfgbaren seriellen Ports montiert werden. Jeder Port wird unabhngig von den anderen verwaltet.

Protokollbetrieb
Anders als im Normalmodus gibt es im Wartungsmodus nicht so etwas wie Starten, Stoppen oder Synchronisieren des Protokolls. Sobald der DDCMP Handler montiert ist, kann das Anwendungsprogramm anfangen, Meldungen zu senden und zu empfangen. Es wird immer angenommen, dass Meldungen erfolgreich bertragen wurden, da kein Quittieren vom anderen System erwartet wird. Die empfangenen Meldungen werden auf Fehler geprft und dem Anwendungsprogramm ein Fehlercode bergeben, wenn ein Fehler entdeckt wurde. Das empfangende Anwendungsprogramm ist fr die Abhandlung aller Fehlerbedingungen verantwortlich.

Demontieren
Wenn das Programm, das DDCMP benutzt, zu ende ist und das Protokoll nicht lnger erforderlich ist, kann es demontiert werden, so dass der serielle Port fr andere Zwecke frei ist. Der entsprechende Befehl ist UTILITY COMMUNICN DISMOUNT (UCD) gefolgt von dem Namen des Ports; beispielsweise: UCD COM1: Der DDCMP Handler wird vom Port abgenommen und alle spezifischen Protokollaktivitten hren auf.

Statistiken
Im Wartungsmodus Mode sind die einzigen DDCMP Statistikdaten Messages Received und Messages Sent.

PDL2 PROGRAMMIERUNG
Die Hauptanwendung fr das DDCMP Protokoll ist es, einen garantiert fehlerfreien Kommunikationspfad zwischen zwei Anwendungsprogrammen auf zwei unterschiedlichen Systemen aufzubauen. Das bedeutet, dass PDL2 Programme auf einer C3G Steuereinheit Meldungen mit Programmen auf einer anderen C3G oder auf einem anderen System austauschen knnen, sofern es DDCMP untersttzt.

Montieren der Einrichtung


Wie im vorhergehenden Abschnitt beschrieben muss DDCMP auf der Kommunikationsschnittstelle montiert werden, ehe es benutzt werden kann. Dies kann durch Anwenderbefehl oder Aufrufe zu einer Systemroutine aus dem PDL2 Programm geschehen z.B.: COM_PORT_SET2(COM0:, COM_BD9600) SYS_CALL(ucmd, COM0:) Im obigen Beispiel wird COM0: auf eine Geschwindigkeit von 9600 Baud gesetzt und dann das Protokoll DDCMP montiert. (Weiter Informationen ber die Systemroutinen COM_PORT_SET2 und SYS_CALL PDL2 finden sich im Kapitel Liste der internen Routinen.) Sobald das Protokoll montiert ist, kann auf den Port nicht mehr direkt zugegriffen werden und es wird eine neue Einrichtung angelegt, die dem von DDCMP gesteuerten Port entspricht. Diese Einrichtungen haben Namen im Format DCMx: wo x die Portnummer ist. Im obigen Beispiel wird eine Einrichtung DCM0: angelegt, sobald das DDCMP Protokoll erfolgreich montiert ist.

Benutzen der DDCMP Einrichtung


Sobald eine neue Einrichtung DCMx: angelegt ist, kann sie geffnet und wie irgendeine Datei oder andere Einrichtung im C3G System benutzt werden. Das folgende Programm ffnet einen Kommunikationsport fr Schreibzugriff und sendet eine Meldung ber die DDCMP Verbindung:

00/1200

4-15

SERIELLE EIN-/AUSGABEN PROGRAM exampl VAR lunw : INTEGER data1, data2 : INTEGER BEGIN COM_PORT_SET2(COM0:, COM_BD9600) SYS_CALL(ucmd, COM0:) OPEN FILE lunw (DCM0:, w) . . . WRITE lunw (data1, data2, string data) . . . CLOSE lunw END exampl

PDL2

Da die DDCMP Verbindung duplex ist, kann die Einrichtung fr Lesen und Schreiben geffnet werden. Es ist jedoch wichtig, dass die kommunizierenden Programme wissen, wann sie einander schreiben und lesen sollen. Ein Programm kann nicht erfolgreich Daten senden, wenn das Programm am anderen Ende keinen entsprechenden Lesebefehl absetzt. Genauso darf ein Programm nicht ewig in Lesebereitschaft warten, wenn das andere Programm nie eine Meldung sendet. Bei dieser Art von Protokoll bedarf es sorgfltigen Anwendungsdesigns und Abbruch bei Zeitberschreitung.

Einrichtungskontrolle
Die interne Funktion DV_CNTRL kann fr eine Reihe von DDCMP Operationen benutzt werden. Die Syntax dieser Funktion ist: DV_CNTRL(opcode [, par1 [, par2...]]) Der Operationscode-Parameter ist vom Typ INTEGER und spezifiziert die Funktion, die benutzt werden soll. Der Rest der Parameterliste hngt vom Opcode ab. Je nach Opcode mssen die Parameter per Wert oder per Verweis bergeben werden. Montieren und Demontieren Das DDCMP Protokoll kann unter Programmkontrolle anstelle durch Bedienerbefehle montiert und demontiert werden. Die Steuerfunktion dafr ist: DV_CNTRL(16, device, action) device ist ein STRING zur Angabe des Namens der DDCMP Einrichtung z.B. DCM0:. Dieser Parameter wird als Wert bergeben. action ist eine codierte INTEGER, die die auszufhrende Operation angibt. Mgliche Werte sind: 1 = Montieren (Starten) des Protokolls im Normalmodus, 2 = Montieren (Starten) des Protokolls im Wartungsmodus und 3 = Demontieren (Stoppen) des Protokolls. Dieser Parameter wird als Wert bergeben.

Zugreifen auf die Statistiken Mit dieser Operation werden die DDCMP Statistiken fr den angegebenen Kommunikationsport in eine INTEGER Matrix geholt, die vom Programm definiert ist: DV_CNTRL(1, device, statarray, clear) device ist ein STRING zur Angabe des Namens der DDCMP Einrichtung z.B. DCM0:. Dieser Parameter wird als Wert bergeben. statarray ist ein INTEGER ARRAY[20], der mit den Statistikdaten gefllt wird. Er wird als Verweis bergeben. clear ist eine INTEGER, die, als Wert bergeben, anzeigt, ob die Statistikdaten nach bergabe in statarray auf Null gesetzt werden sollen. Wenn der Wert dieses Parameters Null (0) ist, werden die Werte nicht gelscht. Bei einem Wert ungleich Null werden sie gelscht.

Die folgende Liste beschreibt kurz den Inhalt der Statistikmatrix nach ihrem Index geordnet. Eine volle Beschreibung findet sich imvorhergehenden Kapitel: [1] Gesendete Meldungen [2] [3] 4-16 Empfangene Meldungen NAKs gesendet wegen falschem BCC Kopf 00/1200

PDL2 [4] [5] [6] [7] [8] [9] NAKs gesendet wegen falscher BCC Daten NAKs gesendet wegen REP Antwort NAKs gesendet weil keine Puffer verfgbar NAKs gesendet wegen Empfang-berlauf NAKs gesendet wegen zu langer Meldung NAKs empfangen wegen falschem Kopfformat

SERIELLE EIN-/AUSGABEN

[10] NAKs empfangen wegen Kopf BCC Fehler [11] NAKs empfangen wegen Daten BCC Fehler [12] NAKs empfangen wegen REP Antworte [13] NAKs empfangen weil kein Puffer verfgbar [14] NAKs empfangen wegen Empfang-berlauf [15] NAKs empfangen wegen zu langer Meldung [16] NAKs empfangen wegen falschem Kopfformat [17] NAKs empfangen aus anderen Grnden [18] Gesendete REPs [19] Empfangene REPs [20] Protokoll-Neustarts Jeder Wert hat ein Maximum von 65535. Wenn dieser Wert gelesen wird, sollte er als grer/gleich 65535" angezeigt werden. Die Statistiken sollten auf Null gesetzt und neu gestartet werden.

PROGRAMMIERHINWEISE
Bei Schreiben von Programmen, die auf einem Kommunikationsprotokoll arbeiten, mssen einige Vorsichtsmanahmen beachtet werden. DDCMP bietet sehr viel mehr Sicherheit als eine einfache serielle Verbindung, aber es hat nicht die vollen Netzwerkfunktionen. Daher muss das Anwendungsprogramm einige Regeln fr die Art und Weise befolgen, wie Meldungen gesendet und empfangen werden. Mehrfachmeldungen knnen nicht gesendet werden, auer wenn es ein Programm am anderen Ende der Verbindung gibt, das diese Meldungen entgegennimmt. Da DDCMP verlangt, dass Meldungen abgearbeitet und besttigt werden, knnen Meldungen nicht in einen unendlichen Puffer gesendet werden. Beim Design der Programme mssen Regeln definiert werden, damit jedes Programm weis, ob es eine Meldung senden oder empfangen soll. In einigen Fllen knnen getrennte Programme zum Senden und Empfangen benutzt werden, wie in den Beispielsprogrammen weiter unten gezeigt. Wenn eine weitere Meldung gesendet wird, bevor die vorhergehende von einem Anwendungsprogramm empfangen wurde, knnte das DDMCP Protokoll gezwungen sein, das Protokoll wegen nicht verfgbaren Puffers neu zu starten.

ANWENDUNGSBEISPIELE
Das folgende Beispiel zeigt eine Duplexkommunikation zwischen zwei SPS Programmen, die auf zwei verschiedenen C3G Steuereinheiten laufen. Der Zweck ist, dass ein Programm den Inhalt von 4 $WORD Werten zu der anderen Steuereinheit sendet. Diese Werte werden auf der anderen Steuereinheit gespeichert und zur ersten Steuereinheit zurckgeechot. Wenn das erste Programm feststellt, dass die Werte aktualisiert wurden, ndert es die ursprnglichen $WORD Werte und wiederholt den Zyklus. Damit Probleme beim Senden von Meldungen ohne aktiven Empfnger vermieden werden, da ein PDL2 Programm nicht gleichzeitig eine Sende- und eine Empfangsanforderung aktiviert haben kann, wird diese Anwendung durch unterschiedliche Programme fr alles Senden bzw. alles Empfangen realisiert. Zum Synchronisieren der Aktivitten dieser Programme wird ein Mechanismus zur Kommunikation zwischen Programmen - im Beispiel ein SEMAPHORE - benutzt. Die Synchronisierung der Sender und Empfnger auf den beiden Steuereinheiten verlangt, dass jede gesendete Meldung durch eine zurckgegebene ACK Meldung besttigt wird- Dies erfolgt zustzlich und unabhngig von den Quittierungen durch DDCMP, ist aber eine typische Voraussetzung fr eine robuste ausfallsichere Kommunikationsanwendung.

00/1200

4-17

SERIELLE EIN-/AUSGABEN Zur Implementierung dieser Anwendung werden 4 PDL2 Programme involviert:

PDL2

MASTER.PDL ist das SPS Programm, das den Austausch der Werte initiiert. Es luft auf einer der C3G Steuereinheiten. ECHO.PDL ist das SPS Programm, das auf die neuen Werte wartet, sie aktualisiert und zurckspielt. SEND.PDL sendet die $WORD Werte von einer Steuereinheit und nach Empfang einer Datenmeldung eine Besttigun. Auf beiden Steuereinheiten wird das gleiche Programm verwendet. REC.PDL empfngt die Meldungen, die entweder Daten oder von SENT abgeschickte Besttigungen von Datenmeldungen sein knnen. Dies Programm wird auf beiden Steuereinheiten benutzt.

Das empfangende Programm muss sowohl Datenmeldungen von der anderen Steuereinheit als auch Besttigungsmeldungen fr von der eigenen Steuereinheit gesendete Datenmeldungen entgegennehmen knnen. Da es nicht von sich aus weis, welcher Typ von Meldung zu erwarten ist, wird ein Standardformat fr alle Meldungen benutzt, damit im REC Programm eine einzige READ Anweisung benutzt werden kann. Das Meldungsformat ist: EINE BOOLSCHE die WAHR ist, wenn es sich um eine Besttigung handelt EINE BOOLSCHE die WAHR ist, wenn es sich um eine Datenmeldung handelt VALUES 4 INTEGER mit den Daten, wenn es sich um eine Datenmeldung handelt Die Daten entsprechend den Werten der Elemente von $WORD. Zur Kommunikation zwischen den SPS Programmen und dem Programm SEND wird eine $BIT Stelle als Marke benutzt. Das folgende sind die Programme, die die $WORD Werte berwachen und setzen. Dies erste ist das Programm MASTER auf der ersten Steuereinheit: PROGRAM master PLC BEGIN CYCLE -- Neue Werte nur senden, wenn die vorhergehenden gesendet ($BIT[100]) -- und die neuen Werte in $WORD[200-203] geechot wurden IF (NOT $BIT[100]) AND AND AND AND ($WORD[100] ($WORD[101] ($WORD[102] ($WORD[103] 1 1 1 1 = = = = $WORD[200]) $WORD[201]) $WORD[202]) $WORD[203]) THEN ACK DATA

$WORD[100] $WORD[101] $WORD[102] $WORD[103]

:= := := :=

$WORD[100]+ $WORD[101]+ $WORD[102]+ $WORD[103]+

-- Werte ndern

$BIT[100] ENDIF END master

:= TRUE

-- Marke fr Sender setzen

4-18

00/1200

PDL2 Dies ist das ECHO Programm, das auf der anderen Steuereinheiten luft: PROGRAM echo PLC BEGIN CYCLE Wait for data to be received ($BIT[100] flag) IF (NOT $BIT[100]) THEN $WORD[100] $WORD[101] $WORD[102] $WORD[103] $BIT[100] ENDIF END echo := := := := $WORD[200] $WORD[201] $WORD[202] $WORD[203]

SERIELLE EIN-/AUSGABEN

-- Empfnger gespeichert in 200-203

:= TRUE

-- Marke fr Sender setzen

Dies ist das Sendeprogramm. Das auf beiden Steuereinheiten luft: PROGRAM send NOHOLD CONST com_speed = COM_BD19200 -- bertragungsgeschwindigkeit com_port = COM0: -- Serial port ddcmp_port = DCM0: -- DDCMP port nach Montieren VAR -- Global gb_last : gb_sack : gb_sdata: gb_rack : gx_synch: variables BOOLEAN EXPORTED FROM rec BOOLEAN EXPORTED FROM rec BOOLEAN EXPORTED FROM rec BOOLEAN EXPORTED FROM rec SEMAPHORE EXPORTED FROM rec -----letzte Operation beendet ACK senden Daten senden ACK wird erwartet Semaphor synchronisieren

-- Lokale Variablen vb_ack : BOOLEAN vb_data: BOOLEAN vi_lun : INTEGER vx_sem : SEMAPHORE NOSAVE BEGIN

-- Meldungselement -- Meldungselement

- Globale Variablen initialisieren gb_last:= TRUE gb_sack := FALSE gb_sdata := FALSE gb_rack := FALSE $BIT[100] := FALSE COM_PORT_SET2 (com_port, com_speed) SYS_CALL(ucmd, com_port) SIGNAL gx_synch OPEN FILE vi_lun (prot_port, w) -- Bedingung zum Setzen des Semaphors, wenn das SPS Programm einrichtet -- $BIT[100] wenn der Sender eine Besttigung senden muss CONDITION[1] : WHEN (gb_last = TRUE) AND ($BIT[100] = TRUE) OR (gb_last = TRUE) AND (gb_sack = TRUE) DO SIGNAL vx_sem ENDCONDITION -- Port setzen -- DDCMP montieren -- DDCMP bereit signalisieren

00/1200

4-19

SERIELLE EIN-/AUSGABEN

PDL2

ENABLE CONDITION[1] -- Beginn der Hauptschleife zum Warten auf den Semaphor, dann -- nachsehen, was zu tun ist CYCLE WAIT vx_sem

vb_ack := FALSE vb_data:= FALSE


IF $BIT[100] THEN gb_rack := TRUE vb_data := TRUE ENDIF IF gb_sack THEN vb_ack := TRUE gb_sack:= FALSE ENDIF

-- Meldungsfeld auf FALSCH setzen

-- Zeit zum Datensenden -- ACK sollte erwartet werden -- Meldungsfeld setzen

-- Zeit zum Senden von ACK -- Meldungsfeld setzen -- Marke lschen

PAUSE rec -- vermeidet Konflikte WRITE vi_lun (vb_ack, vb_data, $WORD[100], $WORD[101], $WORD[102], $WORD[103]) gb_last := FALSE -- Erledigt' Marke lschen UNPAUSE rec IF gb_data THEN $BIT[100] := FALSE ENDIF ENABLE CONDITION[1] END send Es sei auf eins hingewiesen: es ist mglich, dass sowohl die Besttigungsmarke (gb_sack) als auch die Datensenden-Marke (gb_data) gleichzeitig wahr sind. In diesem Fall hat die gesendete Meldung sowohl Marke ACK als auch DATA gesetzt und wird vom Empfnger richtig abgearbeitet. Dies ist ein effizienter Design, da neue Daten zusammen mit der Quittung fr die vorhergehenden Daten in einer einzigen Meldung gesendet werden knnen. Dies ist das Empfangsprogramm, das auf beiden Steuereinheiten luft: PROGRAM rec NOHOLD CONST ddcmp_port = DCM0: -- DDCMP Port nach Montieren VAR -- Globale Variablen gb_last : BOOLEAN EXPORTED FROM rec gb_sack : BOOLEAN EXPORTED FROM rec gb_sdata: BOOLEAN EXPORTED FROM rec gb_rack : BOOLEAN EXPORTED FROM rec gx_synch: SEMAPHORE EXPORTED FROM rec -- Lokale Variable vb_ack : BOOLEAN vb_data : BOOLEAN wi_data : ARRAY[4] OF INTEGER vi_lun : INTEGER BEGIN WAIT gx_synch -- darauf warten, dass der Sender die Dinge initialisiert OPEN FILE vi_lun (prot_port, r) gb_rack := FALSE

-- 'SPS Synch' Marke lschen

------

Letzte Operation beendet ACK senden Daten senden ACK erwartet Semaphor synchronisieren

-- aus der Meldung gelesenes Element -- aus der Meldung gelesenes Element -- empfangene Daten

4-20

00/1200

PDL2

SERIELLE EIN-/AUSGABEN

-- Der Zyklus des Empfngers wird durch die empfangenen Meldungen gesteuert CYCLE READ vi_lun (vb_ack, vb_data, wi_data[1], wi_data[2], wi_data[3], wi_data[4]) gb_last := TRUE -- zeigt 'mit Lesen fertig' an IF gb_rack AND vb_ack THEN -- ACK erwartet und empfangen gb_rack := FALSE ENDIF IF vb_data THEN -- Daten empfangen $WORD[200] := wi_data[1] -- neue WORD Werte setzen $WORD[201] := wi_data[2] $WORD[202] := wi_data[3] $WORD[203] := wi_data[4] gb_sack := TRUE -- Ack Marke setzen ENDIF END rec

DAS PROTOKOLL 3964R


Das Protokoll 3964R kontrolliert den Datenfluss zwischen der Steuereinheit C3G und dem Wirtsrechner am anderen Ende der Verbindung. Es handelt sich um eine Prozedur zur asynchronen seriellen bertragung. Fr Struktur, Telegrammformat und Fehler werden die Konventionen gem SIEMENS CP544 benutzt. Beim Senden und Empfangen von Daten muss die bertragungsrate auf der C3G und dem Host die gleiche sein. Zum Aktivieren der Kommunikation muss man: mit der vorbesetzten Funktion COM_PORT_SET2 die Parameter fr den seriellen Port setzen, insbesondere Geschwindigkeit, Zahl der Bits, Stoppbits und Paritt; den Systembefehl UTILITY COMMUNICATION MOUNT 3964R (manuell oder per SYS_CALL) absetzen; mit der Anweisung OPEN FILE einen Ein-/Ausgabekanal ffnen; zum Senden die WRITE Anweisung und; zum Empfangen die READ Anweisung benutzen.

Das folgende Beispiel zeigt ein Programm zum Installieren und Benutzen des Protokolls 3964R. PROGRAM ex3964r NOHOLD VAR vs_port : STRING[10] NOSAVE VAR vs_rdata : STRING[250] NOSAVE VAR vi_rport, vi_wport, vi_sts : INTEGER NOSAVE ROUTINE ri_check_data(vs_rdata : STRING) : INTEGER EXPORTED FROM other_prog ROUTINE ri_init_port(vs_port : STRING) : INTEGER EXPORTED FROM ex3964r -- Port inizialisation ROUTINE ri_init_port(vs_port : STRING) : INTEGER VAR vs_dart_port : STRING[10] VAR vi_ret : INTEGER BEGIN vi_ret := 0 IF vs_port = COM0: THEN vs_dart_port := DGM0: ELSE vs_dart_port := DGM1: ENDIF -- Demontieren eines ggf. auf der Schnittstelle montierten Protokolls ERR_TRAP_ON(39960) SYS_CALL(ucd, vs_port) $SYS_CALL_STS := 0 COM_PORT_SET2(vs_port,COM_PASALL OR COM_BD9600 OR COM_BIT8 OR COM_PAR_EVEN OR COM_STOP1 OR COM_RDAHD) 00/1200 4-21

SERIELLE EIN-/AUSGABEN

PDL2

-- Protokollmontieren per SYS_CALL SYS_CALL(UCM3, vs_port) ERR_TRAP_OFF(39960) IF $SYS_CALL_STS <> 0 THEN -- Fehlerbehandlung vi_ret := $SYS_CALL_STS RETURN(vi_ret) ENDIF -- ffnen eines Kommunikationskanals ERR_TRAP_ON(39990) $ERROR := 0 OPEN FILE vi_rport (vs_dart_port, r) WITH $FL_BINARY = TRUE IF $ERROR <> 0 THEN WRITE LUN_TP (Error : , $ERROR, on lun for READ , NL) vi_ret := $ERROR -- Fehlerbehandlung RETURN(vi_ret) ENDIF $ERROR := 0 OPEN FILE vi_wport (vs_dart_port, w) WITH $FL_BINARY = TRUE IF $ERROR <> 0 THEN WRITE LUN_TP (Error : , $ERROR, on lun for WRITE, NL) vi_ret := $ERROR -- Fehlerbehandlung RETURN(vi_ret) ENDIF ERR_TRAP_OFF(39990) RETURN(vi_ret) END ri_init_port BEGIN vs_port := COM0: vi_sts := ri_init_port(vs_port) IF vi_sts = 0 THEN WRITE vi_wport (Auf der Anweisung zu schreibender Daten-String) READ vi_rport (vs_rdata) vi_sts := ri_check_data(vs_rdata) IF vi_sts = 0 THEN WRITE LUN_TP (vs_rdata, NL) ENDIF CLOSE FILE vi_rport CLOSE FILE vi_wport ELSE ERR_TRAP_ON(39960) SYS_CALL(ucd, vs_port) ERR_TRAP_OFF(39960) ENDIF END ex3964r

4-22

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN

Handbuch fr Programmiersprache

1 2 3 4

MATRIZEN FR EIN-/AUSGABEPORTS
AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

5
6 7 8 9 10 11 12 A B C D Index

INHALT
Abschnitt ALLGEMEINES . . . . . . . . . . . . . . . . . . . . . . . . . . VOM ANWENDER DEFINIERTE E/A-PORTS . . . . . . . . . . $DIN und $DOUT . . . . . . . . . . . . . . . . . . . . . . . $GIN und $GOUT . . . . . . . . . . . . . . . . . . . . . . . $AIN und $AOUT . . . . . . . . . . . . . . . . . . . . . . . VOM SYSTEM DEFINIERTE PORTMATRIZEN . . . . . . . . . $SDIN und $SDOUT . . . . . . . . . . . . . . . . . . . . . $FDIN und $FDOUT. . . . . . . . . . . . . . . . . . . . . . $FDIN . . . . . . . . . . . . . . . . . . . . . . . . . . . $FDOUT . . . . . . . . . . . . . . . . . . . . . . . . . $HDIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $TIMER . . . . . . . . . . . . . . . . . . . . . . . . . . . . PORTMATRIZEN FR GEMEINSAM BENUTZTEN SPEICHER $BIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $WORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . $PLCSTW . . . . . . . . . . . . . . . . . . . . . . . . . . . SYSTEMZUSTAND NACH WIEDERAUFSETZEN . . . . . . . . KALTSTART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seite . . . . . . . . . . . . . . . . . . 5-1 5-3 5-3 5-4 5-4 5-4 5-4 5-4 5-5 5-7 5-8 5-8 5-8 5-8 5-8 5-8 5-9 5-9

MATRIZEN FR EIN-/AUSGABEPORTS

Handbuch fr Programmiersprache

PDL2

INHALT (Fortsetzung)
Abschnitt Seite

WARMSTART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-9 AUSFALL DER STROMVERSORGUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-9 ZUGRIFF AUF VOM ANWENDER DEFINIERTE EINRICHTUNGEN . . . . . . . . . . . . . . . . . . . 5-10 $USER_BIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-10 $USER_BYTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-10 $USER_WORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-10 $USER_LONG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-10 $USER_ADDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-10 $USER_LEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-11 $PROG_UBIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-11 $PROG_UBYTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-12 $PROG_UWORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-12 $PROG_ULONG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-12 $PROG_UADDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-12 $PROG_ULEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-12 ZUWEISUNG UND RESERVIERUNG VON E/A UND SPS WRTERN . . . . . . . . . . . . . . . . . . 5-12 $WORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-12 $GIN/$GOUT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-14 $SDIN/$SDOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-15

PDL2

MATRIZEN FR EIN-/AUSGABEPORTS

MATRIZEN FR EIN-/AUSGABEPORTS
ALLGEMEINES
In diesem Kapitel werden die folgenden Typen von Port Arrays (Portmatrizen) beschrieben, die in PDL2 verwendet werden: Digitale und analoge Matrizen und Gruppen, die der Anwender zur E/A Benutzung fr spezifische Anwendungen konfiguriert. Portmatrizen, die vom System definiert, d.h. intern fr Systemeinrichtungen, wie Bedienungseinrichtungen, Arme und Zeitgeber verknpft werden. Portmatrizen fr den gemeinsam benutzten Speicher, die von SPS und PDL2 Programmen zur Kommunikation untereinander verwendet werden. Portmatrizen, die vom Anwender definiert werden, um sie fr den Zugang zu den vom Anwender definierten Einrichtungen zu benutzen.

In der Tabelle 5-1 sind die Zuordnungen zwischen den E/A-Portmatrizen und den jeweiligen Identifizierern aufgelistet, die von PDL2 verwendet werden. Tabelle 5-1 Portmatrizen Identifier $DIN $DOUT $GIN $GOUT $AIN $AOUT $SDIN $SDOUT $FDIN $FDOUT $HDIN $TIMER $BIT $WORD $PLCSTW $USER_BIT $USER_BYTE $USER_LONG $USER_WORD $PROG_UBIT $PROG_UBYTE $PROG_UWORD $PROG_ULONG Data Type BOOLEAN BOOLEAN INTEGER INTEGER INTEGER INTEGER BOOLEAN BOOLEAN BOOLEAN BOOLEAN BOOLEAN INTEGER BOOLEAN INTEGER INTEGER BOOLEAN INTEGER INTEGER INTEGER BOOLEAN INTEGER INTEGER INTEGER Description digital input digital output group input group output analog input analog output digital input digital output digital input digital output digital input system timers shared memory shared memory shared memory user-def var user-def var user-def var user-def var user-def var user-def var user-def var user-def var Category user-def user-def user-def user-def user-def user-def sys-def sys-def sys-def sys-def sys-def sys-def PDL2-PLC PDL2-PLC PDL2-PLC user-def user-def user-def user-def user-def user-def user-def user-def

Je nach Art der Matrix kann jedes Element der Matrix ein einzelnes Ein-/Ausgabesignal oder eine Gruppe von Signalen oder eine Stelle des gemeinsam benutzten Speichers darstellen. Bei den vom Anwender definierten Portmatrizen kann das Signal je nach E/A- Konfiguration einem bestimmten Datenelement entsprechen. Weitere Einzelheiten zu diesen Variablen finden sich im Kapitel "Liste der vorbesetzten Variablen".

00/1200

5-1

MATRIZEN FR EIN-/AUSGABEPORTS

PDL2

In einer jeden beliebigen Matrix kann mit einem Index auf die einzelnen Daten zugegriffen werden, wie im folgenden gezeigt wird: FOR n := top TO bottom DO $DOUT[n] := OFF ENDFOR REPEAT check_routine UNTIL $AIN[34] > max

body_type := $GIN[3] SELECT body_type OF CASE(1): $GOUT[1] := four_door CASE(2): $GOUT[2] := two_door CASE(3): $GOUT[3] := hatch_back ELSE: type_error ENDSELECT
IF $FDIN[21] = ON THEN -- Taste U1 auf dem PHG $FDOUT[21] := ON -- LED U1 auf dem PHG ENDIF Das Programm kann den Wert einer Matrix immer anfordern. Der beim Lesen eines Ausgangs-ports erhaltene Wert entspricht dem letzten auf diesen Port geschriebenen Wert. Das Programm kann den Matrizen der vom Anwender definierten Ausgangsports und dem vom System definierten Port $FDOUT Werte zuweisen. Wenn die Steuereinheit im PROG Status ist, werden weitere Tests durchgefhrt, ehe Ausgnge gesetzt werden drfen. Die zustzlichen Regeln beim Setzen der Ausgnge eines digitalen, analogen oder Gruppen-Ports sind hierunter angefhrt. Ist eine dieser Bedingungen nicht erfllt, so kann der Ausgang nicht gesetzt werden: bei einem aktiven Programm; bei Ausfhren einer Anweisung, die einen Ausgang von der Tastatur des PC (PCINT Tool aktiv) setzt, whrend das Programmierhandgert nicht im Schrank ist. Es gibt eine Ausnahme von dieser Regel, wenn bei einem PDL2 Programm das Bit 3 von $PROG_CNFG auf 0 gesetzt ist. In diesem Fall sind alle Ausgangseinstellungen erlaubt. ($PROG_CNFG ist eine Programmsystemvariable, die standardmig bei Aktivieren des Programms auf den aktuellen Wert von $CNTRL_CNFG gesetzt wird); bei Ausfhren unter den Befehlen PROGRAM EDIT oder MEMORY DEBUG vom PC aus (PCINT Tool), wenn das Programmierhandgert nicht im Schrank ist.

Auerdem knnen diese Ausgnge nicht im Modus AUTO-LOCAL gesetzt werden, wenn das Programmierhandgert nicht im Schrank ist. Execute 0l1 0l1 D D A A A A Abb. 5-1 5-2 D D A A A A SetOutputf PDL2Prog PE/MD 0l1 0l1 0l1 0l1 AlD AlD AlD AlD A A 0l1 D D A A A A 0l1 $DOUT Sys_call $DOUT Sys_call $DOUT Sys_call

$PROG_CNFG $CNTRL_CNFG (1)* (2)* (3)

Sicherung auf E/A 00/1200

PDL2

MATRIZEN FR EIN-/AUSGABEPORTS

Abb. 5-1 zeigt die Flle, in denen die Einstellungen dieser Ausgnge erlaubt oder nicht erlaubt sind, wenn im PROG Status gearbeitet wird. Die folgenden Hinweise knnen zum Verstndnis der Tabelle in Abb. 5-1 beitragen: A bedeutet, die Operation ist erlaubt, D heit , sie ist nicht erlaubt. Die Position der A's und D's hngt von der Variablen ab, deren Wert die Einstellung der E/As erlaubt oder verbietet. Wenn z.B. 'A' unter $CNTRL_CNFG ist, heit das, dass die in dieser Zeile beschriebene Operation vom Wert dieser Variablen abhngt. Wenn nur 'A' und 'D' vorhanden sind, ist die Operation immer, unabhngig von der Variablen, erlaubt bzw. verboten. Sie bleiben in der Spalte, um anzuzeigen, dass die Variable unter anderen Umstnden die Operation zulassen kann. Wenn 'A' oder 'D' in der Mitte des Felds stehen, ist die Operation unabhngig vom Wert von $PROG_CNFG und $CNTRL_CNFG. Ist die Stelle leer, heit das, dass die Sicherung in keiner Beziehung zu der entsprechenden Variablen ($PROG_CNFG oder $CTRL_CNFG) steht; (1): der Schalter auf dem Bedienfeld steht auf PROG , Programmierhandgert nicht im Schrank. Operationen werden von der PC Tastatur aus gesteuert (PCINT Tool aktiviert); (2): der Schalter auf dem Bedienfeld steht auf PROG , Programmierhandgert nicht im Schrank. Operationen werden vom Programmierhandgert aus gesteuert; (3): der Schalter auf dem Bedienfeld steht auf PROG , Programmierhandgert im Schrank. Operationen werden von der PC Tastatur aus gesteuert (PCINT Tool aktiviert); (*): Diese Situation tritt auf, wenn bei Programmierhandgert nicht im Schrank und PROG Status, der Schalter auf dem Bedienfeld auf AUTO-LOCAL oder AUTO-REMOTE geschaltet wird, ohne dass das Programmierhandgert im Schrank abgelegt wird. Diese Situation wird im Bit 7 der Systemvariablen $SYS_STATE angezeigt; Execute ist der Befehl im Systemmen zum Ausfhren von PDL2 Anweisungen auf Befehlsebene; SetOutputF ist eine Abkrzung fr die Befehle SetOutputForce/Unforce und steht als ein Beispiel fr alle Befehle, die auf die Ausgnge im System wirken; PDL2 Prog bezieht sich auf den Status, wo ein Ausgang aus einem PDL2 Programm heraus bestimmt wird; PE/MD bedeutet PROGRAM EDIT und MEMORY DEBUG. Diese Spalte zeigt, was passiert, wenn eine PDL2 Anweisung mit Auswirkung auf einen Ausgang in der angezeigten Umgebung ausgefhrt wird; $DOUT zeigt eine PDL2 Anweisung an, die auf einen Ausgang wirkt (d.h. $DOUT(XX) := ON); Sys_call bedeutet einen SYS_CALL eines Befehls, der auf einen Ausgang wirkt, z.B. SYS_CALL(SOFD, 17, T) und keinen anderen SYS_CALL wie z.B. SYS_CALL(E,$DOUT(17) := T).

VOM ANWENDER DEFINIERTE E/A-PORTS


Die Matrizen der digitalen, analogen und gruppierten Ports werden vom Anwender konfiguriert, um die E/A fr spezifische Anwendungen auszulegen.

$DIN und $DOUT


Die Matrizen der Ports $DIN und $DOUT ermglichen dem Programm mit einem einzelnen (diskreten) Eingangs- oder Ausgangssignal auf Daten zuzugreifen. PDL2 betrachtet diese Daten als boolesche Werte. Zum Beispiel: IF $DIN[n] = ON THEN . . . $DOUT[n] := ON

00/1200

5-3

MATRIZEN FR EIN-/AUSGABEPORTS

PDL2

$GIN und $GOUT


Die Matrizen der Ports $GIN und$GOUT ermglichen dem Programm, mit einer Gruppe von Eingangs- oder Ausgangssignalen auf Daten zuzugreifen. PDL2 betrachtet diese Daten als INTEGER Werte. Zum Beispiel: IF $GIN[n] > 8 . . . $GOUT[n] := 4 Eine Gruppe von Signalen kann aus min. 1 bis max. 16 Bit bestehen. Jedes Bit entspricht einer Eingangs- oder Ausgangsleitung. Nicht verwendete Bits werden als 0 behandelt. Das folgende Beispiel stellt eine Gruppe von 8 Bits dar, wobei x das Signal TRUE und o das Signal FALSE bedeutet. Group of 8 Signals ooooooox ooooooxo oooooxox ooooxoxx Integer Value 1 2 5 11

Die Zuordnung zwischen den digitalen E/A und den E/A-Gruppen erfolgt auf Systemebene im Rahmen der Konfiguration der vom Anwender definierten E/A. Auf einen Eingangs- oder Ausgangsport, der mit einer Eingangsoder Ausgangsgruppe assoziiert ist, kann mit Hilfe der Portmatrizen $DIN oder $DOUT zugegriffen werden.

$AIN und $AOUT


Die Matrizen der Ports $AIN und $AOUT ermglichen dem Programm den Zugriff auf Daten durch ein analoges Signal. PDL2 betrachtet diese Daten als INTEGER Wert. Zum Beispiel: IF $AIN[n] > 8 THEN . . . ENDIF $AOUT[n] := 4 Das System konvertiert das analoge Eingangssignal in eine Binrzahl mit 16 Bit und konvertiert dann diese Binrzahl in ein analoges Ausgangssignal.

VOM SYSTEM DEFINIERTE PORTMATRIZEN


Die vom System definierten Portmatrizen werden intern fr Systemeinrichtungen verknpft, wie Bedienungseinrichtungen, Arme und Zeitgeber.

$SDIN und $SDOUT


Die Matrizen der Ports $SDIN und $SDOUT ermglichen dem Programm einen read-only Zugriff auf Daten durch vom System definierte Signale, die wie individuelle Eingangs- oder Ausgangsleitungen behandelt werden. PDL2 betrachtet diese Daten als BOOLEAN Werte. Eine Liste mit den Bedeutungen der $SDIN und $SDOUT Signale findet sich in einem folgenden Abschnitt dieses Kapitels.

$FDIN und $FDOUT


Die Matrizen der Ports $FDIN und $FDOUT ermglichen dem Programm einen Zugriff auf Daten durch vom System definierte Signale, die wie individuelle Eingangs- oder Ausgangsleitungen behandelt werden. Diese Signale entsprechen Schaltern, Funktionstasten und LEDs auf dem Bedienfeld, dem Programmierhandgertt (PTU4) und der PC Tastatur (PCINT Tool aktiv). PDL2 betrachtet diese Daten als BOOLEAN Werte. 5-4 00/1200

PDL2

MATRIZEN FR EIN-/AUSGABEPORTS

In der folgenden Tabelle sind die Bedeutungen der $FDIN und $FDOUT Signale aufgelistet. Wenn in den folgenden Erluterungen das Wort "Setup" benutzt wird, bezieht es sich auf die Einrichtung der REC Taste, die auch ber die Mens der Umgebungen EZ, PROGRAM EDIT und MEMORY DEBUG gewhlt werden kann. Die sich auf das Programmierhandgert beziehenden FDOUTs knnen nicht auf Niveau von PDL2 Programmen zugewiesen werden. Einige LEDs werden nur bei Betrieb in den Umgebungen PROGRAM EDIT, MEMORY DEBUG und EZ verwaltet. Diese sind durch ein Sternchen (*) hervorgehoben.

$FDIN
Element $FDIN[1..8] $FDIN[9] $FDIN[10] $FDIN[11] $FDIN[12..16] $FDIN[17] $FDIN[18] $FDIN[19] $FDIN[20] $FDIN[21] $FDIN[22] $FDIN[23] $FDIN[24] $FDIN[25] $FDIN[26] $FDIN[27] $FDIN[28] $FDIN[29..32] $FDIN[33] $FDIN[34] $FDIN[35] $FDIN[36] $FDIN[37] $FDIN[38] $FDIN[39] $FDIN[40] $FDIN[41] $FDIN[42] $FDIN[43] $FDIN[44] $FDIN[45] $FDIN[46] $FDIN[47] $FDIN[48] $FDIN[49] $FDIN[50] Assoziierter Eingang frei Statuswhlschalter auf AUTO-REMOTE Statuswhlschalter auf AUTO-LOCAL Statuswhlschalter auf PROG frei DRIVE ON Taste DRIVE OFF Taste START Taste HOLD Taste U1 Taste U2 Taste U3 Taste U4 Taste AUTO Statuswhlschalterer auf PTU4 MAN Statuswhlschalter auf PTU4 Aktivieren der gedrckten Einheit PTU4 im Schrank frei F1 Taste F2 Taste F3 Taste F4 Taste F5 Taste F6 Taste F7 Taste F8 Taste PREV/TOP SCRN CHAR DEL Pfeil nach oben Pfeil nach links Pfeil nach unten Pfeil nach rechts SEL/SCRL ENTER

00/1200

5-5

MATRIZEN FR EIN-/AUSGABEPORTS

PDL2

$FDIN (Fortsetzung)
Element $FDIN[51] $FDIN[52] $FDIN[53] $FDIN[54] $FDIN[55] $FDIN[56] $FDIN[57] $FDIN[58] $FDIN[59] $FDIN[60] $FDIN[61] $FDIN[62] $FDIN[63..64] $FDIN[65] $FDIN[66] $FDIN[67] $FDIN[68] $FDIN[69..72] $FDIN[73] $FDIN[74] $FDIN[75] $FDIN[76] $FDIN[77] $FDIN[78] $FDIN[79] $FDIN[80] $FDIN[81] $FDIN[82] $FDIN[83] $FDIN[84] $FDIN[85] $FDIN[86] $FDIN[87] $FDIN[88] $FDIN[89] $FDIN[90] $FDIN[91] $FDIN[92] $FDIN[93] $FDIN[94] $FDIN[95] $FDIN[96] $FDIN[97] $FDIN[98] $FDIN[99] $FDIN[100] $FDIN[101] $FDIN[102] Assoziierter Eingang 7, CUT Taste 8, COPY Taste 9, / Taste 4, S.NXT Taste 5, SRCH Taste 6, PASTE Taste 1, MODE Taste 2, UNDEL Taste 3, DEL Taste 0, PAGE Taste ., MARK Taste -, HELP frei TYP ARM Taste %+ %frei 1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 12345678EXCL T1 T2 REC MOD BACK RUN frei POS Taste JNTP Taste XTND Taste JNT Taste LIN Taste CIRC Taste

5-6

00/1200

PDL2

MATRIZEN FR EIN-/AUSGABEPORTS

$FDIN (Fortsetzung)
Element $FDIN[103] $FDIN[104] $FDIN[105] $FDIN[106] $FDIN[107] $FDIN[108] $FDIN[109..128] $FDIN[129] $FDIN[130] $FDIN[131] $FDIN[132] $FDIN[133] $FDIN[134] $FDIN[135] $FDIN[136] $FDIN[137..142] Assoziierter Eingang STEP-DISB Taste FLY Taste EZ Taste A1 Taste A2 Taste ALARM Taste frei F1auf der PC Tastatur (PCINT Tool aktiviert) F2auf der PC Tastatur (PCINT Tool aktiviert) F3 auf der PC Tastatur (PCINT Tool aktiviert) F4 auf der PC Tastatur (PCINT Tool aktiviert) F5 auf der PC Tastatur (PCINT Tool aktiviert) F6 auf der PC Tastatur (PCINT Tool aktiviert) F7 auf der PC Tastatur (PCINT Tool aktiviert) F8 auf der PC Tastatur (PCINT Tool aktiviert) frei

$FDOUT
Element $FDOUT[1..16] $FDOUT[17] $FDOUT[18] $FDOUT[19] $FDOUT[20] $FDOUT[21] $FDOUT[22] $FDOUT[23] $FDOUT[24] $FDOUT[25] $FDOUT[26] $FDOUT[27] $FDOUT[28]* $FDOUT[29] $FDOUT[30] $FDOUT[31]* $FDOUT[32]* $FDOUT[33]* $FDOUT[34]* $FDOUT[35]* $FDOUT[36]* Assoziierter Eingang frei Lampe DRIVE ON Lampe DRIVE OFF Lampe START Lampe HOLD Lampe U1 Lampe U2 Lampe U3 Lampe U4 Lampe ALARM. Bei Auftreten eines Alarms geht diese LED an T1 LED fr HAND 1 auf den gewhlten Arm. Sie ist an, wenn die HAND geschlossen ist. T2 LED fr HAND 2 auf den gewhlten Arm. Sie ist an, wenn die HAND geschlossen ist. FLY LED. Diese LED geht an, wenn die Einrichtung der MOVE Anweisung auf MOVEFLY gesetzt wird oder die FLY Taste auf dem Programmierhandgert gedrckt wird. aktiviert den Screen Saver auf der PTU4. LED fr EZ STEP DISB. LED der POSITION Variablen. Diese LED geht an, wenn die Einstellung der Variablen auf POSITION gesetzt wird oder die POS Taste auf dem Programmierhandgert gedrckt wird. LED der JNTPOS Variablen. Diese LED geht an, wenn die Einstellung der Variablen auf JOINTPOS gesetzt wird oder die JNTP Taste auf dem Programmierhandgert gedrckt wird. LED der TNDPOS Variablen. Diese LED geht an, wenn die Einstellung der Variablen auf XTNDPOS gesetzt wird oder die XTND Taste auf dem Programmierhandgert gedrckt wird. LED der JNT Bahn. Diese LED geht an, wenn die Einstellung der Bahn auf JOINT gesetzt wird oder die JNT Taste auf dem Programmierhandgert gedrckt wird. LED der LIN Bahn. Diese LED geht an, wenn die Einstellung der Bahn auf LINEAR gesetzt wird oder die LIN Taste auf dem Programmierhandgert gedrckt wird. led. LED der CIRC Bahn. Diese LED geht an, wenn die Einstellung der Bahn auf CIRCULAR gesetzt wird oder die CIRC Taste auf dem Programmierhandgert gedrckt wird.

00/1200

5-7

MATRIZEN FR EIN-/AUSGABEPORTS

PDL2

$HDIN
Die Matrix von $HDIN-Ports ermglicht dem Programm einen read-only Zugriff auf einen Bewegungsport. Die Matrix enthlt Daten, die digitalen Signalen in Hochgeschwindigkeitseingang entsprechen, je eins pro Servo CPU. $HDIN ist ein besonderer, von der Bewegungsumgebung berwachter Port. Jeder Eingang auf einer dieser Leitungen gibt ein Hardware Interruptsignal frei. Die Bewegungsumgebung spricht je nach Konfiguration des Ports an. So kann zum Beispiel ein Arm gestoppt oder eine aktuelle Position registriert werden. Der Index der Matrix $HDIN entspricht der Nummer der Servokarte. Der Anwender mu die Verbindung zwischen dem Port $HDIN und den Meeinrichtungen, die mit diesem Port verwendet werden, herstellen. Die Systemroutinen HDIN_SET und HDIN_READ werden zur Verwaltung von $HDIN aus einem PDL2 Programm heraus benutzt. Es muss auch die Systemvariable $HDIN_SUSP bercksichtigt werden. Siehe auch die Kapitel "Liste der internen Routinen" und "Liste der vorbesetzte Variablen" fr weitere Einzelheiten.

$TIMER
Der ARRAY der $TIMER-Ports ermglicht dem Programm Lese- und Schreibzugriff zu einem System-Timer. Der Index der Matrix entspricht den einzelnen Zeitgebern, deren Werte INTEGER sind und die in Millisekunden messen. Die Systemzeitgeber arbeiten kontinuierlich. Auf $TIMER kann von allen Systemprogrammen zugegriffen werden. Mit der ATTACH Anweisung kann einem anderen Code der Zugang sowohl zum Lesen als auch zum Schreiben eines Zeitgebers verwehrt werden. Wird diese Anweisung auf einem Zeitgeber angewandt, so ist ein Zugriff auf ihn nur fr den Code mglich, der zum gleichen Programm wie die ATTACH Anweisung gehrt. Die DETACH Anweisung wird benutzt, um die exklusive Steuerung eines Zeitgebers aufzuheben. Der Zeitwert wird durch Zuweisungen mit der ATTACH oder DETACH Anweisung nicht verndert. Fr weitere Informationen siehe die Beschreibung der ATTACH und DETACH Anweisungen im Kapitel Liste der Anweisungen.

PORTMATRIZEN FR GEMEINSAM BENUTZTEN SPEICHER


Die Portmatrizen des gemeinsamen Speichers werden von den SPS und PDL2 Programmen zur Kommunikation untereinander verwendet.

$BIT
Die Matrix von $BIT-Ports ermglicht dem Programm den Zugriff auf eine Matrix von SPS-Bits, die Stellen im gemeinsamen Speicher entsprechen. PDL2 behandelt diese Daten als BOOLEAN. Der hchste Indexwert fr die $BIT Portmatrix ist 200.

$WORD
Die Matrix von $WORD-Ports ermglicht dem Programm den Zugriff auf ein 16 Bit SPS Wort. PDL2 behandelt dies als INTEGER Daten, wo nur die 16 meist signifikanten Bits von Bedeutung sind. Die ersten 32 Elemente von $WORD haben eine vordefinierte Bedeutung. Die Abbildung in $WORD wird in einem folgenden Abschnitt beschrieben. Es ist zu beachten, dass diese $WORDs von PDL2 Programmen fr Lese- und Schreibzugriff benutzt werden knnen. Einige werden jedoch dauernd vom System aktualisiert. Dem Anwender stehen die Elemente ab $WORD[33] zur Verfgung. Der hchste Indexwert fr die $WORD Portmatrix ist 512. Wenn die SPS Karte vorhanden ist, erhht sich dieser Wert auf 1024.

$PLCSTW
Die Matrix der Ports $PLCSTW (SPS Status-Wort) entspricht den SPS Registern. PDL2 behandelt diese Daten als INTEGER.

5-8

00/1200

PDL2

MATRIZEN FR EIN-/AUSGABEPORTS

SYSTEMZUSTAND NACH WIEDERAUFSETZEN


Dieser Abschnitt gibt eine detaillierte Beschreibung des Systemzustands nach einem Wiederaufsetzen. Dieses kann auf drei Arten erfolgen: Kaltstart (CCRC), Warmstart (CCRW) und Wiederanlauf nach Ausfall der Stromversorgung. Der Systemzustand ist verschieden, je nachdem welche Art von Wiederaufsetzen das System wieder in Funktion gesetzt hat. Unter Systemzustand wird der Status der $DIN, $BIT, $GIN, des SPS Programms und so weiter verstanden. Im Folgenden wird der Systemzustand nach jeder der drei Arten von Wiederaufsetzen beschrieben. Die Portmatrizen $SDIN, $SDOUT werden auf den aktuellen Status des Systems aktualisiert. In den folgenden Abschnitten wird beschrieben, welchen Status die anderen E/A Portmatrizen ($DIN, $BIT, $WORD; etc.) nach Neustart annehmen.

KALTSTART
Wenn von der Steuereinheit ein Kaltstart mit Hilfe des Befehls CONFIGURE CNTRLER RESTART COLD (CCRC) durchgefhrt wurde, ist der Systemzustand wie folgt. $DIN/$DOUT $BIT $AIN/$AOUT $GIN/$GOUT $WORD Status des SPS Programms PDL2 Programm gelscht gelscht gelscht gelscht gelscht deaktiviert deaktiviert und aus dem Speicher gelscht

SPS Programm im RLL Bereich basierend auf dem Wert von $TUNE [22]

Die erzwungenen $DIN, $DOUT, $GIN, $GOUT, $AIN und $AOUT werden ebenfalls gelscht, wenn sie zuvor erzwungen waren.

WARMSTART
Wenn die Steuereinheit einen Warmstart CONFIGURE CNTRLER RESTART WARM (CCRW) befiehlt, kommt das System wie in folgenden beschrieben zurck. $DIN/$DOUT $BIT $AIN/$AOUT $GIN/$GOUT $WORD Status des SPS Programms PDL2 Programm gelscht nicht volatile Bits (1-512) eingefroren, volatile Bits gelscht eingefroren eingefroren eingefroren gesichert; wenn es benutzt wurde, startet es wieder vom Beginn deaktiviert und aus dem Speicher gelscht

SPS Programm im RLL Bereich gesichert

Erzwungene $DIN, $DOUT, $AIN, $AOUT, $GIN, $GOUT werden auf dem Wert vor dem Neustart eingefroren.

AUSFALL DER STROMVERSORGUNG


Bei einem Wiederanlauf nach Ausfall der Stromversorgung ist der Systemzustand wie folgt: $DIN/$DOUT $BIT $AIN/$AOUT $GIN/$GOUT $WORD gelscht nicht volatile Bits (1-512) eingefroren, volatile Bits gelscht eingefroren eingefroren eingefroren

00/1200

5-9

MATRIZEN FR EIN-/AUSGABEPORTS

PDL2

SPS Programm im RLL Bereich gesichert Status des SPS Programms gesichert, wenn es lief. Das Programm startet von derselben Sprosse, an der es abbrach. SPS beendet den Zyklus, fhrt eine Aktualisierung mit Nurlesen der E/A durch und fhrt einen automatischen Warmstart vom Programmanfang aus. gesichert (ein non-holdable Programm startet wieder an dem Punkt, an dem es angehalten hat. Bei holdable Programmen mssen die Antriebe wieder eingeschaltet und die Start Taste gedrckt werden).

PDL2 Program

Wie beim Neustart werden erzwungene $DIN, $DOUT, $AIN, $AOUT, $GIN, $GOUT bei Stromausfall eingefroren.

ZUGRIFF AUF VOM ANWENDER DEFINIERTE EINRICHTUNGEN


Benutzer-definierte Portmatrizen werden fr den Direktzugriff auf Systemspeicherbereiche benutzt. Die Adressen bei Benutzen dieser Variablen sollten sehr sorgfltig geprft werden, da eine falsche Schreiboperation in einige Speicherpltze das System zerstren und eine komplettes Neuladen des System erforderlich machen kann.

$USER_BIT
Mit der Portmatrix $USER_BIT kann ein Programm auf Bits im Speicher mit einer vom Anwender definierten Adresse zugreifen. PDL2 behandelt diese Variable eine Matrix mit Boole'schen Werten. Die Startadresse, von der aus die Bits gezhlt werden, ist in $USER_ADDR [1] angegeben. Es ist zu beachten, dass die Bitnummerierung das Byte bercksichtigt, zu dem das Bit gehrt. Beispielsweise ist $USER_BIT[4] das 4. Bit von rechts im ersten Byte ab der Adresse, die in $USER_ADDR[1] spezifiziert ist. $USER_BIT[10] ist das 2. Bit von rechts des 2. Bytes ab der Adresse, die in $USER_ADDR[1] spezifiziert

$USER_BYTE
Mit der Portmatrix $USER_BYTE kann ein Programm auf Bytes im Speicher mit einer vom Anwender definierten Adresse zugreifen. PDL2 behandelt diese Variable eine Matrix von INTEGER Daten.

$USER_WORD
Mit der Portmatrix $USER_WORD kann ein Programm auf Worte (2 Bytes) im Speicher mit einer vom Anwender definierten Adresse zugreifen. PDL2 behandelt diese Variable eine Matrix von INTEGER Daten.

$USER_LONG
Mit der Portmatrix $USER_LONG kann ein Programm auf Langworte (4 Bytes) im Speicher mit einer vom Anwender definierten Adresse zugreifen. PDL2 behandelt diese Variable eine Matrix von INTEGER Daten. Bei der Benutzung dieser Variablen muss eine genaue Operationsfolge eingehalten werden. Es mssen zwei andere vorbesetzte Variablen bercksichtigt werden: $USER_ADDR und $USER_LEN. Vor einer Verwendung von $USER_BIT, $USER_BYTE, $USER_WORD oder $USER_LONG mssen die entsprechenden Elemente $USER_ADDR und $USER_LEN richtig initialisiert werden, damit der Speicherbereich bestimmt wird, auf den Anwenderprogramme zugreifen drfen.

$USER_ADDR
Dies ist eine Matrix mit vier Elementen, von denen jedes die Anfangsadresse im Speicher fr folgende Variablen definiert: $USER_ADDR[1] $USER_ADDR[2] $USER_ADDR[3] $USER_ADDR[4] : : : : Speicherstartadresse Speicherstartadresse Speicherstartadresse Speicherstartadresse fr fr fr fr $USER_BIT $USER_BYTE $USER_WORD $USER_LONG

5-10

00/1200

PDL2

MATRIZEN FR EIN-/AUSGABEPORTS

$USER_LEN
Dies ist eine Matrix mit vier Elementen, von denen jedes die die Lnge im Speicher fr folgende Variablen definiert: $USER_LEN[1] $USER_LEN[2] $USER_LEN[3] $USER_LEN[4] : : : : Speicherlnge Speicherlnge Speicherlnge Speicherlnge fr fr fr fr $USER_BIT $USER_BYTE $USER_WORD $USER_LONG

Abhngig von der Anwender-definierten Portmatrix definiert der Index einen unterschiedlichen Offset in bezug auf das erste Matrixelement. Zum Beispiel: greift $USER_BYTE[5] auf das 5. Byte hinter $USER_ADDR[2] zu; und $USER_LONG[5] greift das 5. Langwort hinter $USER_ADDR[4]zu. Wenn z.B. auf einen Bereich von 100 Speicherbytes angefangen von der in der Variablen adr_var definierten Adresse zugegriffen werden soll, sollte das PDL2 Programm wie folgt strukturiert sein: PROGRAM example NOHOLD VAR int_var, adr_var : INTEGER VAR bool_var : BOOLEAN BEGIN -- Zuweisen der Speicheradresse zu adr_var adr_var := ..... -- Setzen der Anfangsadresse und der Lnge bei Byte-weisem Speicherzugriff $USER_LEN[2] := 100 $USER_ADDR[2] := adr_var .... -- Lesen des ersten Byte aus der Adresse adr_var int_var := $USER_BYTE[1] -- Lesen des fnften Byte in bezug auf die Adresse in adr_var int_var := $USER_BYTE[5] -- Schreiben eines Werts in das dritte Byte in bezug auf adr_var $USER_BYTE[3] :=25 -- Setzen der Anfangsadresse und der Lnge bei Bit-weisem Speicherzugriff $USER_ADDR[1] := adr_var $USER_LEN[1] := 100 -- Zugriff auf das fnfte Bit angefangen von der Adresse adr_var bool_var := $USER_BIT[5] END example Die zuvor beschriebenen Anwender-definierten Portmatrizen sind global fr das ganze System und jedes PDL2 Programm kann sie benutzen. Das heit, dass mehrere Programme gleichzeitig auf die Variablen zugreifen knnen, und es ist wichtig, Interferenzen beim Speicherzugriff zu vermeiden. Wenn z.B. ein Programm $USER_ADDR[2]einen gewissen Wert zu weist, der dann von einem anderen Programm gendert wird, so wird das erste Programm auf eine andere Speicheradresse zugreifen, wenn es $USER_BYTE benutzt. Um diese Probleme zu vermeiden, kann man einen anderen Satz von Anwender-definierten Portmatrizen verwenden:

$PROG_UBIT
Die Portmatrix $PROG_UBIT ermglicht einem Programm, auf Speicherbits an einer vom Anwender definierten Adresse zuzugreifen. PDL2 behandelt diese Variable als eine Matrix mit BOOLE'schen Daten. Die Startadresse, von der aus die Bits gezhlt werden, ist in $PROG_UADDR[1] angegeben. Es ist zu beachten, dass die Bitnummerierung das Byte bercksichtigt, zu dem das Bit gehrt. Beispielsweise ist $PROG_UBIT[4] das 4. Bit von rechts im ersten Byte ab der Adresse, die in $PROG_UADDR[1] spezifiziert ist. $PROG_UBIT[10] ist das 2. Bit von rechts des 2. Bytes ab der Adresse, die in $PROG_UADDR[1] spezifiziert ist.

00/1200

5-11

MATRIZEN FR EIN-/AUSGABEPORTS

PDL2

$PROG_UBYTE
Dies wird benutzt, um auf Bytes im Speicher an einer vom Anwender definierten Adresse zuzugreifen. PDL2 behandelt diese Variable als eine Matrix mit INTEGER Daten.

$PROG_UWORD
Dies wird benutzt, um auf Worte (2 Bytes) im Speicher an einer vom Anwender definierten Adresse zuzugreifen. PDL2 behandelt diese Variable als eine Matrix mit INTEGER Daten.

$PROG_ULONG
Dies wird benutzt, um auf Langworte (4 Bytes) im Speicher an einer vom Anwender definierten Adresse zuzugreifen. PDL2 behandelt diese Variable als eine Matrix mit INTEGER Daten. Der Unterschied zu dem Satz vorbesetzter Variablen $USER_xxx besteht darin, dass die Startadresse und die Speicherlnge, auf die mit $USER_xxx zugegriffen wird, lokal fr das Programm sind. Jedes PDL2 Programm hat seine eigenen $PROG_UADDR und $PROG_ULEN und Programme knnen sich nicht gegenseitig diese Variablen definieren:

$PROG_UADDR
Dies ist eine Matrix mit vier Elementen, von denen jedes die Anfangsadresse im Speicher fr folgende Variablen definiert: $PROG_UADDR[1] : Speicherstartadresse fr $PROG_UBIT $PROG_UADDR[2] : Speicherstartadresse fr $PROG_UBYTE $PROG_UADDR[3] : Speicherstartadresse fr $PROG_UWORD $PROG_UADDR[4] : Speicherstartadresse fr $PROG_ULONG

$PROG_ULEN
Dies ist eine Matrix mit vier Elementen, von denen jedes die die Lnge im Speicher fr folgende Variablen definiert: $PROG_ULEN[1] : Speicherlnge fr $PROG_UBIT $PROG_ULEN[2] : Speicherlnge fr $PROG_UBYTE $PROG_ULEN[3] : Speicherlnge fr $PROG_UWORD $PROG_ULEN[4] : Speicherlnge fr $PROG_ULONG Auch bei diesem Satz von Variablen mssen Startadresse und Speicherlnge definiert werden, ehe $PROG_UBIT, $PROG_UBYTE, $PROG_UWORD oder $PROG_ULONG benutzt werden knnen. Auerdem kann auf Speicherbereiche im Supervisor Modus mit den Variablen $PROG_U zugegriffen werden, wenn Bit 7 in $PROG_CNFG auf 1 gesetzt wird. Siehe auch das Kapitel "Liste der vorbesetzten Variablen.

ZUWEISUNG UND RESERVIERUNG VON E/A UND SPS WRTERN


$WORD
Die Portmatrix $WORD erlaubt einem PDL2 Programm (SPS oder nicht) Zugang zu einem 16 Bit SPS Wort, das einer Stelle im gemeinsam benutzten Speicher entspricht. Diese Speicherstellen werden in RLL Programmen als V Speicher bezeichnet, und PDL2 betrachtet sie als Ganzzahldaten (INTEGER). $WORD kann in PDL2 SPS Programmen als temporrer Speicher fr Ganzzahlen oder zur Kommunikation zwischen SPS und Nicht-SPS Programmen benutzt werden. Die ersten 32 Elemente von $WORD (die ersten 32 Stellen des V Speichers in RLL Programmen) sind ferner mit spezifischen Systemeingngen und -ausgngen verknpft und erlauben SPS Programmen damit, auf diese E/A Signale zuzugreifen einschl. Informationen von den SIM, IOS, RIO, PFDP und EIM Karten. Die Verknpfung von $WORD ist im Folgenden im Einzelnen beschrieben.

5-12

00/1200

PDL2

MATRIZEN FR EIN-/AUSGABEPORTS

Das C3G Plus System kann bis zu fnf Systemkarten aufnehmen, die im Folgenden aufgefhrt sind. Diese Karte ist mit besonderer Hardware ausgestattet. Das System kann maximal zwei dieser Karten aufnehmen. IOS - Karte mit 16 Ein- und 16 Ausgngen, die als Systemkarte eingerichtet ist. (Das System kann maximal zwei dieser Karten aufnehmen). RIO - Karte fr remote E/A, die zur Kommunikation mit der Allen-Bradley SPS benutzt wird. Sie wird zur bertragung von Signalen angewandt, die denen der SIM Karte (nur Signale von der remote Schnittstelle) und denen der IOS Karte entsprechen und vom Allen-Bradley SPS kommen. Das System untersttzt nur eine RIO Karte. EIM - Diese Karte implementiert die Master, die Interbus Slave und die Ethernet -Schnittstelle. PFDP - Diese Karte ist die Slave Schnittstelle zum Profibus DP Netzwerk. EDN - Diese Karte implementiert die DeviceNet Slave und die Ethernet -Schnittstelle. Eine weitere Karte, die in das Gestell der C3G gesteckt werden kann, ist IBS-M (INTERBUS-S MASTER). Diese Karte benutzt nicht die ersten 32 Elemente von $WORD, erlaubt aber das Konfigurieren des restlichen Bereichs von Element t33 bis Element 2048. Das folgende Diagramm zeigt, wie $WORD verknpft wird. Die RIO Zuweisung wird als C3G Plus Protokoll bezeichnet, whrend die INTERBUS-S Definitionen INTERBUS Protokoll genannt werden. Verknpfung von $WORD (Words 1 - 16)
15 1 2 3 4 5
6

SIM

EingangHigh Input hoch Eingang tief Input Low


SIM 1 Output hoch AusgangHigh

Ausgang tief Output Low EingangHigh Input hoch Eingang tief Input Low AusgangHigh Output hoch Ausgang tief Output Low EingangHigh Input hoch
Input Low Eingang tief IOS 1 SIM 2

7 8 9 10 11 12 13 14 15 16

AusgangHigh Output hoch Ausgang tief Output Low EingangHigh Input hoch Eingang tief Input Low AusgangHigh Output hoch Ausgang tief Output Low
IOS 2

00/1200

5-13

MATRIZEN FR EIN-/AUSGABEPORTS Verknpfung von $WORD (Wrter 17 - 32)


16 1 2 3 4 5 $WORD INPUT ALTO/INPUT UP OUTPUT ALTO/OUTPUT UP OUTPUT BASSO/OUTPUT DOWN 1

PDL2

16 17 18 19 21 22 23 24 25 26 27 28 29 30 31 32 33
A DISP. PER UTENTE /SPARE FOR USER COPIA INPUT SIM COPIA INPUT IOS /SIM INPUT COPY /IOS INPUT COPY COPIA OUTPUT SIM COPIA OUTPUT IOS /SIM OUTPUT COPY /IDS OUTPUT COPY

AL PLC TO PLC

20

PROFIBUS DP (C3G-PFDP)

INTERBUS-S SLAVE (C3G-EIM)

INPUT LIBERO PER UTENTE

FREE INPUT FOR USER

DISPON. AVAIL.

DA PLC FROM PLC

INTERBUS-S MASTER (C3G-EIM)

512

Es sei darauf hingewiesen, das die Wrter 17, 18, 25 und 26 fr Anwenderzwecke verfgbar gemacht werden knnen, wenn sie richtig konfiguriert werden. Das wird dadurch erreicht, dass die Zahl von Systemwrtern so gesetzt wird wie in der Dokumentation zum IBS-IOS-RIO Configuration Tool beschrieben.

$GIN/$GOUT
Durch Benutzen von $GIN und $GOUT kann der Anwender die diskreten E/A Punkte (bis zu 16) in Gruppen zusammenfassen und sie lesen und schreiben, als wren sie Analogsignale (oder Binrdaten). $GOUT[1] kann z.B. auf 127 gesetzt werden; damit werden auch die entsprechenden Ausgnge auf den Binrcode 0000000001111111 gesetzt. Zur Implementierung dieser Eigenschaft wurde ein Teilbereich reserviert, der normalerweise fr die analogen E/A benutzt wird ($AIN/$AOUT im PDL2 und WX/WY im RLL). Es gibt maximal 16 $GIN und 16 $GOUT: die ersten 32 $AIN/$AOUT (WX/WY) sind daher fr diesen Zweck reserviert. WX1...WX16 entsprechen z.B. $GIN[1...16] und WY17...WY32 entsprechen $GOUT[1...16]. Damit kann auch ein SPS RLL Programm die Gruppe als eine Einheit ansprechen, auch wenn $GIN/$GOUT in einem SPS RLL Programm nicht vorkommen. Wenn immer das SPS RLL Programm auf $GIN/$GOUT zugreifen soll, kann es das entsprechende WX/WY benutzen. Falls es ein SPS RLL und ein entsprechendes PDL2 Programm gibt, die beide auf die gleiche als Einheit aufgefate Gruppe (z.B.: $GIN[2]) zugreifen sollen, mu diese Einheit im SPS Programm auf die oben beschriebene Weise adressiert werden. Ist die Einheit jedoch dem SPS Programm zugeordnet, und das PDL2 Programm braucht nicht auf sie zuzugreifen, ist es vorzuziehen, mittels der Anweisungen Move Word to Image Register (MWIR) und Move Image Register to Word (MIRW) eine Stelle im V-Speicher zu benutzen. (Fr weitere Informationen ber RLL SPS Programme und die Anweisungen MWIR/MIRW siehe das C3G SPS Handbuch.)

5-14

00/1200

DEVICENET SLAVE (C3G-EDN)

OUTPUT LIBERO PER UTENTE

FREE OUTPUT FOR USER

SIM 1 RIO (C3G-RIO)

INPUT BASSO/INPUT DOWN

PDL2

MATRIZEN FR EIN-/AUSGABEPORTS

$SDIN/$SDOUT
Dieser Abschnitt enthlt die Tabellen mit den Querverweisen, die gebraucht werden, um den Kabeln der physikalischen Karten die Verknpfungen von $SDIN, $SDOUT und $WORD zuzuordnen. Die $WORD, die in der Spalte $WORD aufgelistet sind, sind als schreibgeschtzte Stellen spezifiziert. Das System kann mit einer weiteren Schreiboperation die vom Benutzer eingerichteten Lese/Schreibzellen lschen. Die Tabellen mit den E/A Verknpfungen der Karten SIM, IOS, RIO, PFDP und EDN finden sich auf den folgenden Seiten. Die Anzeige von Warnungen kann auch durch einen Fernbefehl aktiviert werden. Diese Warnungen werden auf der CRT oder dem Programmierhandgert in Rollfenstern angezeigt und helfen dem Anwender, Ereignisse an Auenstellen zu verfolgen. Die Meldungen enthalten folgende Informationen: die Zeit, zu der der Befehl in der C3G Plus einging, den Befehl selbst und seine Quelle (SIM, IOS, RIO, and Netzwerk). Um die Anzeige dieser Warnungen zu aktivieren, muss Bit 14 der Systemvariablen $CNTRL_INIT gesetzt werden. SIM1 C3G Plus INPUT $SDIN Index 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 $WORD Index 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 $WORD Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SIM1 Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Bedeutung Monitor DRIVE ON PHG eingeschaltet 24V Sicherung ok uere Sicherung Bedienfeldschalter auf AUTO-LOCAL Bedienfeldschalter auf PROGRAMMING reduzierte Geschwindigkeit DRIVE ON von Remote DRIVE OFF von Remote START von Remote HOLD von Remote U1 von Remote U2 von Remote U3 von Remote U4 von Remote Alarm Roboter 1 Flansch Roboter 1 Luftdruck Roboter 1 Monitor Leistungsschtz 1

Bedienfeldschalter auf AUTO REMOTE Warnung bertemperatur Alarm bertemperatur Alarm Roboter 2 Flansch Roboter 2 Luftdruck Roboter 2 berwachen Schtz 2 Prfen der Sicherheitskette

00/1200

5-15

MATRIZEN FR EIN-/AUSGABEPORTS SIM1 C3G Plus OUTPUT $SDOUT Index 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 $WORD Index 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 $WORD Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SIM1 Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Drahtbedeutung DRIVE ON Freigabe DRIVE ON Reserviert ALARM nach Remote Alarmunterdrckung Reserve Ausschlu Roboter 1 Ausschlu Roboter 2 DRIVE ON/OFF nach Remote START/HOLD nach Remote LOCAL/REMOTE nach Remote TEACH EN/DIS nach Remote U1 nach Remote U2 nach Remote U3 nach Remote U4 nach Remote AUTO/MAN auf PHG nach Remote

PDL2

5-16

00/1200

PDL2 IOS C3G Plus INPUT $SDIN IOS1 IOS2 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 $WORD IOS1 IOS2 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 12 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 16 $WORD Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 IOS Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

MATRIZEN FR EIN-/AUSGABEPORTS

Drahtbedeutung Maschine 1 MOTOR ON Maschine 1 MOTOR OFF Maschine 1 RUN Maschine 1 STOP Reserve Reserve Reserve Reserve Maschine 2 MOTOR ON Maschine 2 MOTOR OFF Maschine 2 RUN Maschine 2 STOP Reserve Reserve Reserve Reserve

IOS C3G Plus OUTPUT $SDOUT IOS1 IOS2 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 $WORD IOS1 IOS2 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 $WORD Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 IOS Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Bedeutung Maschine 1 MOTOR ON Maschine 1 MOTOR OFF Maschine 1 RUN Maschine 1 STOP Reserve Reserve Reserve Reserve Maschine 2 MOTOR ON Maschine 2 MOTOR OFF Maschine 2 RUN Maschine 2 STOP Reserve Reserve Reserve Reserve

00/1200

5-17

MATRIZEN FR EIN-/AUSGABEPORTS RIO, IBS, PROFIBUS, DEVNET C3G Plus INPUT (Protokolle COMAU) $SDIN Index 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 $WORD Index 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 $WORD Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Bit Meaning Machine Machine Machine Machine

PDL2

Machine Machine Machine Machine

2 2 2 2

motor on motor off run stop

5-18

DUPLIZIERT DIE SIM SIGNALE FR DIE FERNSCHNITTSTELLE

drives-on drives-off start hold u1 u2 u3 u4

DUPLIZIERT DIE IOS SIGNALE FR MEHRFACHARM-ANWENDUNGEN

1 1 1 1

motor on motor off laufen stop

00/1200

PDL2

MATRIZEN FR EIN-/AUSGABEPORTS RIO, IBS, PROFIBUS, DEVNET C3G Plus OUTPUT (Protokolle COMAU)

$SDOUT Index 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160

$WORD Index 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17

$WORD Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Machine Machine Machine Machine

2 2 2 2

Motor on Motor off Start Stop

Heart Bit (640 ms pulse)

00/1200

DUPLIZIERT DIE SIM SIGNALE FR DIE FERNSCHNITTSTELLE

Kein Aarm Drives on/Drives off Start/Hold Remote Teach enable (DRI.ON+PROG) u1 u2 u3 u4 TP auto / TP manual

DUPLIZIERT DIE IOS SIGNALE FR MEHRFACHARM-ANWENDUNGEN

Bit Bedeutung Machine 1 Machine 1 Machine 1 Machine 1

Motor on Motor off Start Stop

5-19

MATRIZEN FR EIN-/AUSGABEPORTS Interbus-S Protokoll (Profile 91) - C3G Plus Input $SDIN Index 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 $WORD Index 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 $WORD Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Bitbedeutung extern DRIVE OFF extern DRIVE ON extern Aktivieren extern START FREI FREI FREI vom Hersteller spezifiziert bit0 der Programmnummer bit1 der Programmnummer bit2 der Programmnummer bit3 der Programmnummer bit4 der Programmnummer bit5 der Programmnummer bit6 der Programmnummer bit7 der Programmnummer

PDL2

Die Bits RESERVIERT werden fr zuknftige INTERBUS Erweiterungen benutzt. Das Bit vom Hersteller spezifiziert" ist nicht benutzt. Die 8 als bit0..7 der Programmnummer markierten Bits werden zur Angabe der Jobprogrammnummer benutzt. Diese Bits werden nicht vom System verwaltet, sondern mssen vom PDL2 Anwendungsprogramm benutzt werden. Interbus-S Protokoll (Profile 91) - C3G Plus Output $SDOUT Index 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 $WORD Index 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 $WORD Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Bitbedeutung betriebsbereit Automatisch extern Antriebe eingeschaltet RC Anwenderprogramm luft Anforderung-Programmnummer RESERVIERT ALARM NOTAUS ist aktiv RESERVIERT RESERVIERT RESERVIERT RESERVIERT vom Hersteller spezifiziert vom Hersteller spezifiziert vom Hersteller spezifiziert Herz Bit (640 mx pulse)

5-20

00/1200

PDL2

MATRIZEN FR EIN-/AUSGABEPORTS Die Bits vom Hersteller spezifiziert"sind fr den Roboterhersteller freigehalten. C3G Plus benutzt nur das letzte Bit als "Herzschlag" wie im C3G Protokoll. Dies Bit zeigt an, dass die Kommunikation funktioniert. Das Bit "betriebsbereit ist nach einem Neustart der C3G Plus Software auf 1, was heit, dass der Roboter an die INTERBUS Schnittstelle angeschlossen ist. Um Fernbefehle zu erlauben, muss in der Steuereinheit auch "automatisch extern" auf 1 gesetzt sein. Das Bit "Anforderung-Programmnummer" wird nicht vom System verwaltet. Es wird zusammen mit dem Bit "Programmnummer" vom Eingangswort benutzt. Dies ist das einzige Bit, das ein PDL2 Programm schreiben kann.. Das Bit NOTAUS aktiv" ist an, wenn der FERNNOTAUS einen Alarm verursacht oder Sicherheitstren um den Roboter bei arbeitendem Roboter offen sind. Interbus-S Protokoll (Profile IBS-2) - C3G Plus Input $SDIN Index 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 $WORD Index 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 $WORD Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Bitbedeutung DRIVES OFF START DRIVES ON HOLD bit0 der Programmnummer bit1 der Programmnummer bit2 der Programmnummer bit3 der Programmnummer bit4 der Programmnummer bit5 der Programmnummer Parittsbit der Programmnummer TROCKENLAUF ZURCK IN NULLPOSITION FEHLER-RESET ANWENDUNGS-ABHNGIG (SPOT: ANFORDERUNG VON ELEKTRODENSCHLEIFEN) ABTASTEN der Programmnummer

00/1200

5-21

MATRIZEN FR EIN-/AUSGABEPORTS Interbus-S Protokoll (Profile IBS-2) - C3G Plus Output $SDIN Index 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 $WORD Index 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 $WORD Bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Bitbedeutung ANTRIEBE FREIGEGEBEN AUTOMATISCHER MODUS LERNPROGRAMMIERMODUS ROBOTERFEHLER DCP FEHLER PROGRAMM LUFT ALARMSTOP NULLPOSITION ANWENDUNGS-ABHNGIG (SPOT: ELEKTRODENSCHLEIFPOSITION) ANWENDUNGS-ABHNGIG (SPOT: ELEKTRODENSCHLEIFPOSITION) ANFORDERUNG PROGRAMMNUMMER AUF BAHN T2 MODUS (AUTO-TEACH) RESERVIERT RESERVIERT INTERBUS MASTER ON

PDL2

Anwendungs-abhngige Bits werden erst benutzt, nachdem ein PDL2 Programm ON_POS_SET nach einer ON_POS Systemroutine aufgerufen hat. Das Bit auf Bahn wird benutzt, nachdem ein PDL2 Programm die Systemroutine ON_TRAJ_SET aufgerufen hat.

5-22

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS

Handbuch fr Programmiersprache

1 2 3 4 5

AUSFHRUNGSSTEUERUNG
ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

6
7 8 9 10 11 12 A B C D Index

INHALT
Abschnitt Seite

ABLAUFKONTROLLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-1 IF Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-1 SELECT Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-2 FOR Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-4 WHILE Anweisung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-5 REPEAT Anweisung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-6 GOTO Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-7 PROGRAMMSTEUERUNG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-8 Interne Funktion PROG_STATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-9 ACTIVATE Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-9 PAUSE Anweisung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-10 UNPAUSE Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-10 DEACTIVATE Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-11 CYCLE und EXIT CYCLE Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-11 DELAY Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-12 WAIT FOR Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-12 BYPASS Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-12

AUSFHRUNGSSTEUERUNG

Handbuch fr Programmiersprache

PDL2

INHALT (Fortsetzung)
Abschnitt Seite

SYNCHRONISIERUNG VON PROGRAMMEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-13 PRIORITT EINES PROGRAMMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-14

PDL2

AUSFHRUNGSSTEUERUNG

AUSFHRUNGSSTEUERUNG
Dieses Kapitel enthlt die PDL2 Anweisungen fr die Kontrolle der Ausfhrungsreihenfolge der Anweisungen innerhalb eines Programms sowie der Reihenfolge, in der mehrere Programme ausgefhrt werden. Die Anweisungen, die die Ausfhrung der einzelnen Programmschritte definieren, werden als Anweisungen fr die Ablaufkontrolle des Programms bezeichnet, whrend diejenigen, welche die Ausfhrung von ganzen Programmen berwachen, Programmberwachungsanweisungen genannt werden.

ABLAUFKONTROLLE
Die Ausfhrung eines Programms beginnt normalerweise mit der ersten Anweisung, die der BEGIN Anweisung folgt, und sie wird bis zur Erreichung der END Anweisung fortgesetzt PDL2 enthlt Anweisungen, die die Reihenfolge dieser Ausfhrung folgendermaen ndern: Wahl von Alternativen: IF Anweisung SELECT Anweisung

Zyklus: FOR Anweisung WHILE Anweisung REPEAT Anweisung

bedingungsloser Sprung: GOTO Anweisung

IF Anweisung
Die IF Anweisung lt das Programm zwischen zwei Ausfhrungsablufen, je nach dem Ergebnis eines BOOLEAN Ausdruck whlen. Wenn der Ausdruck TRUE (wahr) ist, werden die Anweisungen nach der IF Klausel ausgefhrt. Der Programmablauf geht dann mit der Anweisung nach ENDIF weiter. Wenn der Ausdruck FALSE (falsch) ist, werden die Anweisungen nach der IF Klausel bersprungen, und das Programm geht dann mit der Anweisung nach ENDIF weiter. Die Abbildung 6-1 zeigt die Ausfhrung einer IF Anweisung. Wenn der BOOLEAN Ausdruck FALSE ist, kann eine Optionsklausel ELSE zwischen die letzte Anweisung der IF Klausel und ENDIF gesetzt werden, so da eine Reihe von alternativen Anweisungen ausgefhrt wird. Die Abbildung 6-2 zeigt die Ausfhrung einer IF Anweisung mit der optionalen ELSE Klausel.

IF bool_exp FALSE

TRUE

Anweisungsstatement liste list

ENDIF

Abb. 6-1 Ausfhrung einer IF Anweisung 00/1200 6-1

AUSFHRUNGSSTEUERUNG

PDL2

Anweisungsstatement list 22 liste

FALSE

IF bool_exp

TRUE

Anweisungsstatement liste 1 list 1

ENDIF

Abb. 6-2 Ausfhrung einer ELSE Anweisung Die Syntax einer IF Anweisung ist wie folgt: IF bool_exp THEN <statement>... <ELSE <statement>...> ENDIF In IF oder ELSE Aweisungen knnen alle ausfhrbaren PDL2 Anweisungen geschachtelt sein, einschlielich der IF Anweisung selbst. Beispiele der IF Anweisung: IF car_num =3 THEN num_wheels :=4 ENDIF IF part_ok THEN good_parts := good_parts + 1 ELSE bad_parts := bad_parts + 1 ENDIF

SELECT Anweisung
Die SELECT Anweisung gibt dem Programm die Wahl zwischen einigen Alternativen, je nach dem Ergebnis eines INTEGER Ausdrucks. Jede dieser Alternativen wird Fall genannt. Das Ergebnis des INTEGER Ausdrucks wird mit dem Wert eines jeden Falls verglichen, um eine Entsprechung zu finden. Wenn eine Entsprechung vorliegt, werden die zu diesem Fall gehrigen Anweisungen ausgefhrt, und der Programmablauf geht zu der Anweisung nach der ENDSELECT Anweisung ber. Alle anderen Flle werden bersprungen. Die Abbildung 6-3 zeigt die Ausfhrung einer SELECT Anweisung.

6-2

00/1200

PDL2

AUSFHRUNGSSTEUERUNG

SELECT value Wert

ENDSELECT

Abb. 6-3 Ausfhrung einer SELECT Anweisung Wenn das Ergebnis des INTEGER Ausdrucks keinem Fall entspricht, kann die Optionsklausel ELSE zwischen dem letzten Fall und der ENDSELECT Anweisung verwendet werden. Ohne diese Klausel tritt bei Fehlen einer Entsprechung mit einem Fall ein Fehler auf. Die Syntax der SELECT Anweisung ist folgende: SELECT int_exp OF CASE (int_val <, int_val>...): <statement>... <CASE (int_val <, int_val>...): <statement>... >... <ELSE: <statement>...> ENDSELECT Die INTEGER Werte eines jeden Falls knnen Konstanten, vorbesetzte Literale oder vom Anwender definierte Werte sein. Es sind keine Ausdrcke zulssig. Auerdem ist es nicht zulssig, den gleichen INTEGER Wert fr mehrere Flle zu verwenden.

00/1200

. . .

Anweisungsstatement liste 1 list 1

Anweisungsstatement liste 2 list 2

. . .

CASE CASE Wertliste 11 value list

CASE CASE Wertliste 2 value list 2

CASE CASE Wertliste nn value list

ELSE

Anweisungsstatement liste n list n

alternative else statement Anweisungsliste list

6-3

AUSFHRUNGSSTEUERUNG Beispiel einer SELECT Anweisung: SELECT tool_type OF CASE (1): $TOOL := utool_weld style_weld CASE (2): $TOOL := utool_grip style_grip CASE (3): $TOOL := utool_paint style_paint ELSE: tool_error ENDSELECT

PDL2

FOR Anweisung
Die FOR Anweisung wird verwendet, wenn eine Abfolge von Anweisungen n-mal wiederholt werden soll. Sie basiert auf einer INTEGER Variablen, der zuerst ein Anfangswert zugewiesen wird, und die dann bei jedem Durchlaufen der Schleife erhht oder erniedrigt wird, bis der Endwert erreicht oder ber(unter)schritten ist. Start-, End- und Schrittwert werden als INTEGER Ausdrcke angegeben. Die Abbildung 6-4 zeigt die Ausfhrung einer FOR Anweisung. Von der Benutzung von GOTO Anweisungen in FOR Schleifen wird abgeraten. Vor jeder Schleife wird der Wert der INTEGER Variablen mit dem Endwert verglichen. Ist die Schleife so definiert, da von einem Anfangswert zu (TO) einem Endwert hochgezhlt wird, so wird eine "kleiner/gleich" Abprfung benutzt. Ist das Ergebnis dieses Vergleichs negativ, wird die Schleife nicht ausgefhrt. Wenn der Schrittwert Eins ist, wird sie so oft ausgefhrt, wie die absolute Differenz angibt (Endwert - Anfangswert + 1). Wenn die Schleife rckwrts vom Anfangswert bis zum Endwert zhlt (DOWNTO), wird ein "grer gleich"-Test durchgefhrt. Wenn das Ergebnis dieses Vergleichs negativ ausfllt, wird die Schleife nicht ausgefhrt. Wenn der Schrittwert Eins ist, wird sie so oft ausgefhrt, wie die absolute Differenz angibt (Endwert - Anfangswert - 1). Auch wenn der Anfangs- und der Endwert gleich sind, wird die Schleife noch einmal ausgefhrt. Eine optionale STEP Klausel kann benutzt werden, um den Schritt von Eins auf einen anderen Wert zu setzen. Wenn angegeben, wird die INTEGER Variable um diesen Wert (anstelle von 1) bei jedem Durchlaufen der Schleife erhht oder erniedrigt. Wenn die TO oder DOWNTO Klausel benutzt wird, sollte der STEP Wert ein positiver INTEGER Ausdruck sein, um sicherzustellen, da die Schleife richtig interpretiert wird.

6-4

00/1200

PDL2

AUSFHRUNGSSTEUERUNG

int_var := start_val

Erhhen increment (decrement) (Erniedrigen) int_var by von int_var um 1 stepping value

int_var > (<) end_val

FALSE

Anweisungsstatement liste list

TRUE

ENDFOR

Abb. 6-4 Ausfhrung einer FOR Anweisung Die Syntax einer FOR Anweisung ist folgende: FOR int_var := start_val || TO | DOWNTO || end_val <STEP step_val> DO <Anweisung>... ENDFOR Beispiel einer FOR Anweisung: FOR test := 1 TO num_hoses DO IF pressure[test] < 170 THEN WRITE('Niedr. Druck in Rohr #', test, ' Achtung: Verluste', NL) ENDIF ENDFOR

WHILE Anweisung
Die WHILE Anweisung fhrt eine Reihe von Anweisungen solange aus, bis ein BOOLEAN Ausdruck wahr (TRUE) ist. Wenn die BOOLEAN Ausdrck vor Beginn der Schleife falsch (FALSE) ist, wird sie nie ausgefhrt (der Schleife wird bersprungen). Die Abbildung 6-5 zeigt die Ausfhrung einer WHILE Anweisung.

00/1200

6-5

AUSFHRUNGSSTEUERUNG

PDL2

WHILE bool_exp

TRUE

DO DO Anweisungsstatement list liste

FALSE

ENDWHILE

Abb. 6-5 Ausfhrung einer WHILE Anweisung Die Syntax einer WHILE Anweisung ist folgende: WHILE bool_exp DO <Anweisung>... ENDWHILE Beispiel einer WHILE Anweisung: WHILE num < num_errors DO IF priority_index[num] < 2 THEN WRITE (err_text[num], (unwichtig) , NL) ELSE WRITE (err_text[num], ***WICHTIG***, NL) ENDIF num := num + 1 ENDWHILE

REPEAT Anweisung
Die REPEAT Anweisung sorgt dafr, da eine Reihe von Anweisungen solange ausgefhrt wird, bis ein BOOLEAN Ausdruck wahr (TRUE) ist. Die Schleife wird immer mindestens einmal ausgefhrt, auch wenn der BOOLEAN Ausdruck TRUE ist, bevor sie das erste Mal ausgefhrt wird. Die Abbildung 6-6 zeigt die Ausfhrung einer REPEAT Anweisung.

FALSE
REPEAT REPEAT Anweisungs statement liste1 list 1

UNTIL bool_exp

TRUE

Anweisungs statement liste 2

list 2

Abb. 6-6 Ausfhrung einer REPEAT Anweisung 6-6 00/1200

PDL2 Die Syntax einer REPEAT Anweisung ist folgende: REPEAT <Anweisung>... UNTIL bool_exp Beispiel einer REPEAT Anweisung: REPEAT WRITE (vorhandenes Programm, NL) WRITE (Bist du Sicher? (Y/N) : ) READ (ans) UNTIL (ans = Y) OR (ans = N) IF ans = Y THEN DEACTIVATE prog_1 ENDIF

AUSFHRUNGSSTEUERUNG

-- Anweisungsliste 1

-- Anweisungsliste 2

GOTO Anweisung
Die GOTO Anweisung verursacht einen bedingungslosen Sprung, der die direkte bertragung der Kontrolle auf einen anderen Teil des Programms ermglicht, wobei Zwischenbedingungen bersprungen werden. In den meisten Fllen, wo in einem Programm eine Schleife oder ein nicht sequenzieller Programmablauf bentigt wird, kann dies mit anderen in diesem Kapitel beschriebenen Steueranweisungen erreicht werden. Die Anweisungen fr einen bedingungslosen Sprung mssen als letzte Lsung betrachtet werden, wenn keine andere Steueranweisung funktioniert. Die Abbildung 6-7 zeigt die Ausfhrung einer GOTO Anweisung. Mit der GOTO Anweisung geht die Programmsteuerung auf einem Punkt, der mit einem Anweisungsetikett, einem Konstantenidentifizierer am linken Rand, spezifiziert ist. Das Anweisungsetikett wird von zwei aufeinanderfolgenden Doppelpunkten (::) gefolgt. Die ausfhrbaren Anweisungen knnen auf derselben Zeile wie das Etikett oder auf aufeinanderfolgenden Zeilen stehen. Die Syntax einer GOTO Anweisung ist folgende: GOTO statement_label Die GOTO Anweisungen mssen mit groer Vorsicht verwendet werden. Das Etikett mu innerhalb der Routine oder des Programms liegen, das auch die GOTO Anweisung enthlt. Die GOTO Anweisung darf nicht zum Sprung in eine strukturierte Anweisung (vor allem nicht in die eines FOR Zyklus) oder zum Verlassen einer strukturierten Anweisung verwendet werden, weil sonst einen run-time Fehler auftritt. GOTO Etikett

Anweisungsliste

Etikett

Anweisungsliste

Abb. 6-7 Ausfhrung einer GOTO Anweisung 00/1200 6-7

AUSFHRUNGSSTEUERUNG Beispiel einer GOTO Anweisung: PROGRAM prog_1 VAR jump : BOOLEAN BEGIN . . . IF jump THEN GOTO ex ENDIF . . . ex:: WRITE (GOTO geht zu diesem Punkt ber.) . . . END prog_1

PDL2

PROGRAMMSTEUERUNG
Die Anweisungen fr die Steuerung eines Programms verndern dessen Zustand. Die Zustnde eines (aktivierten) Programms sind: running, ready, paused und paused-ready. Ein Programm kann seinen eigenen Zustand und den von anderen Programmen kontrollieren und verndern. Auerdem knnen die Anweisungen fr die Programmsteuerung einen kontinuierlichen Zyklus erzeugen und diesen Zyklus verlassen. Programme knnen je nach Programmattribut, d.h. holdable oder non-holdable, in zwei Kategorien unterteilt werden. Holdable Programme werden durch die Befehle START und HOLD gesteuert. Im allgemeinen beinhalten solche Programme eine Bewegung, auch wenn das nicht notwendigerweise der Fall sein mu. Non-holdable Programme werden nicht durch die Befehle START und HOLD gesteuert. Im allgemeinen werden solche Programme fr die Prozesteuerung verwendet und knnen keine Bewegung enthalten. Sie knnen aber trotzdem Positionsvariablen zu anderen Zwecken verwenden. Die in non-holdable Programmen unzulssigen Bewegungsanweisungen sind: RESUME, CANCEL, LOCK, UNLOCK und MOVE.

Die Attribute HOLD und NOHOLD knnen in der PROGRAM Anweisung angegeben werden. Das Standardattribut eines Programms ist HOLD. Es gibt folgende Zustnde aktivierter Programme: laufend, in Bereitschaft, in Pause und in Pause - bereit. Diese haben folgende Bedeutung: laufend: das Programm wird gerade ausgefhrt; in Pause: die Ausfhrung ist durch einen Befehl PROGRAM STATE PAUSE oder eine PAUSE Anweisung unterbrochen; in Bereitschaft: ein HOLD-fhiges Programm ist ablaufbereit, muss aber durch Drcken der START Taste gestartet werden; in Pause - bereit: die zuvor beschriebenen Bedingungen bezglich der Pause- und Bereitzustnde sind WAHR. Damit das Programm aus diesem Status starten kann, mssen entweder der Befehl PROGRAM STATE UNPAUSE Befehl oder die UNPAUSE Anweisung gegeben und die START Taste gedrckt werden.

Die Abbildung 6-8 gibt die Programmzustnde und die Aktionen an, die den bergang von einem Zustand zum anderen verursachen.

6-8

00/1200

PDL2
N o n - H o ld a b le T ranslate

AUSFHRUNGSSTEUERUNG

Progra m Code .PDL Ram Disk .COD Loa d (Sta te = Loa ded)

Pa use Ac tiva te Running Unpa use Pa used

E dit

Memory

Dea c tiva te

H o ld a b le Pa usedRea dy
Unpa use Pa use

Hold Sta rt ** Unpa use Hold Unpa use* Pa used Pa use

T ranslate

De
Progra m Code

ac

t iv

e at

Dea c tiva te Rea dy ** Ac tiva te Ac tiva te*

.PDL Ram Disk

.COD

Loa d

(Sta te = Loa ded)

Running

Sta rt

E dit

Me mory

Dea c tiva te

* Zeigt eine von einem holdable Programm verursachte Aktion an indic a tes a holdable Programm oder einem Befehl ** Zeigt eine von*einem nicht n a c tion c a used by a holda ble progra mverursachte Aktion an
** indic a tes a n a c tion c a used by a non-holda ble progra m or a c omma nd

Abb. 6-8 Programmzustnde

Interne Funktion PROG_STATE


Mit der internen Funktion PROG_STATE kann ein Programm seinen eigenen Zustand und den von anderen Programmen berwachen. Ihre Aufrufsequenz ist folgende: PROG_STATE (prog_name_str) prog_name_str kann ein beliebiger, gltiger Ausdruck sein. Das Ergebnis dieser Funktion besteht aus einem INTEGER Wert, der den Zustand des durch prog_name_str spezifizierten Programms angibt. Das Kapitel "Interne Routinen" enthlt eine Liste der mit dieser Funktion erhaltenen Werte.

ACTIVATE Anweisung
Die im Speicher geladenen Programme knnen durch die ACTIVATE Anweisung konkurrierend aktiviert und ausgefhrt werden. Zu einem bestimmten Zeitpunkt kann nur ein bestimmtes Programm aktiviert werden. Das Ergebnis der Aktivierung eines Programms hngt davon ab, ob das Programms, das die Anweisung absetzt, und das Programm, das aktiviert werden soll, das Attribut holdable oder non-holdable haben. Wenn die Anweisung von einem non-holdable Programm ausgegeben wird, werden die holdable Programme in den Zustand ready und die non-holdable Programme in den Zustand running versetzt. Wenn die Anweisung von einem holdable Programm ausgegeben wird, werden die Programme in den Zustand running versetzt. Die Syntax einer ACTIVATE Anweisung ist folgende: ACTIVATE prog_name <, prog_name>...

00/1200

6-9

AUSFHRUNGSSTEUERUNG Zum Beispiel: ACTIVATE weld_main, weld_util, weld_ctrl Beim Aktivieren eines Programms geschieht folgendes: den initialisierten Variablen werden Anfangswerten zugewiesen.

PDL2

der Arm wird gesteuert, wenn das Programm ohne Attribut DETACH holdable ist und wenn das Programm mit Attribut ATTACH nicht holdable ist.

PAUSE Anweisung
Die PAUSE Anweisung versetzt ein Programm in den Zustand paused. Um das Programm zu reaktivieren, mu eine UNPAUSE Operation ausgefhrt werden. Die PAUSE Anweisung versetzt ein in Ausfhrung begriffenes Programm in den Zustand paused, whrend sie ein Programm im ready-Zustand in den Zustand paused-ready versetzt. Whrend ein Programm im Zustand paused ist, luft die Ausfhrung der folgenden Operationen weiter: laufende und auf Ausfhrung wartende Bewegungen; Abfrage der Bedingungshandler; mit der PULSE Anweisung erzwungene Signale; laufende und auf Ausfhrung wartende Systemaufrufe; asynchrone Anweisungen (DELAY, PULSE, WAIT, usw.)

Die Syntax einer PAUSE Anweisung ist folgende: PAUSE < || prog_name <, prog_name... | ALL ||> Wenn prog_name oder eine Liste von Namen spezifiziert wird, werden die angegebenen Programme in den Zustand paused versetzt. Wird kein Name angegeben, wird das Programm, das die Anweisung ausgibt, in den Zustand paused versetzt. Wird ALL angegeben, werden alle in Ausfhrung begriffenen Programme sowie diejenigen im Zustand ready in den Zustand paused versetzt. Die Anweisung hat keine Auswirkung auf Programme, die nicht in Ausfhrung begriffen sind. Zum Beispiel: PAUSE PAUSE weld_main, weld_util, weld_cntrl PAUSE ALL

UNPAUSE Anweisung
Die Anweisung UNPAUSE gibt die mit der PAUSE Anweisung unterbrochenen Programme wieder frei. Die Auswirkung, die diese Anweisung auf ein Programm hat, hngt davon ab, ob das Programm selbst das Attribut holdable oder non-holdable hat. Wenn die Anweisung von einem non-holdable Programm ausgegeben wird, werden die holdable Programme in den Zustand ready versetzt und die non-holdable Programme in den Zustand running. Wenn die Anweisung von einem holdable Programm ausgegeben wird, werden die Programme in den Zustand running versetzt. Die Syntax einer UNPAUSE Anweisung ist folgende: UNPAUSE || prog_name <, prog_name>... | ALL || Wenn prog_name oder eine Liste von Namen spezifiziert wird, werden die angegebenen Programme wieder aufgenommen. Durch die Angabe ALL werden alle Programme, die im Zustand paused waren, wieder aufgenommen. Die Anweisung hat keinerlei Auswirkung auf Programme, die nicht im Zustand paused waren. Zum Beispiel: UNPAUSE weld_main, weld_util, weld_cntrl UNPAUSE ALL

6-10

00/1200

PDL2

AUSFHRUNGSSTEUERUNG

DEACTIVATE Anweisung
Die DEACTIVATE Anweisung deaktiviert Programme, die sich in einem der folgenden Zustnde befinden: running, ready, paused oder paused-ready. Nach ihrer Deaktivierung verbleiben die Programme im Speicher, werden aber nicht mehr ausgefhrt und knnen nicht mehr ausgefhrt werden. Nur durch die Anweisung ACTIVATE knnen sie wieder aktiviert werden. In einem deaktivierten Programm werden die folgenden Operationen ausgefhrt: aktuelle und auf Ausfhrung wartende Bewegungen werden annulliert; die Bedingungshandler werden entfernt; das Programm wird aus allen Listen (semaphores) gestrichen; Lesungen, Impulse und Verzgerungen werden annulliert; aktuelle und auf Ausfhrung wartende Systemaufrufe werden abgebrochen; geffnete Dateien werden geschlossen; die Einrichtungen, die durch die Anweisung ATTACH reserviert worden waren, werden entlassen. die gesperrten Arme werden freigegeben, aber die Bewegung braucht nicht wieder aufgesetzt zu werden.

Die Syntax einer DEACTIVATE Anweisung ist folgende: DEACTIVATE < || prog_name <, prog_name>... | ALL || Wenn prog_name oder eine Liste von Namen spezifiziert wird, werden die in der Liste enthaltenen Programme deaktiviert. Wenn kein Name angegeben wird, wird das Programm, das die Anweisung ausgibt, deaktiviert. Durch die Angabe von ALL werden alle in Ausfhrung begriffenen Programme deaktiviert. Zum Beispiel: DEACTIVATE DEACTIVATE weld_main, weld_util, weld_cntrl DEACTIVATE ALL

CYCLE und EXIT CYCLE Anweisungen


Die CYCLE Anweisung kann eine selbstndige Anweisung sein, oder sie kann eine Option der BEGIN Anweisung darstellen. Sie ermglicht dem Programmierer, einen kontinuierlichen Zyklus zu erzeugen. Sobald das Programm seine END Anweisung erreicht, beginnt die Ausfhrung wieder mit der CYCLE Anweisung. Dieser Zyklus wird bis zur Deaktivierung des Programms fortgesetzt. Die CYCLE Anweisung ist nur im Hauptprogramm zulssig; sie kann nicht in einer Routine verwendet werden. Die Syntax einer CYCLE Anweisung ist folgende: CYCLE Die Syntax einer BEGIN Anweisung mit der Option CYCLE ist folgende: BEGIN CYCLE Durch die EXIT CYCLE Anweisung wird der verbleibende Teil des derzeitigen Zyklus ignoriert, und die Ausfhrung wird direkt mit dem folgenden Zyklus wieder aufgenommen. Ein Zyklus, der mit der EXIT CYCLE Anweisung verlassen wurde, kann nicht wieder aufgenommen werden. Diese Anweisung annulliert alle aufgeschobenen Anweisungen und setzt das gesamte Programm wieder auf. Sie ist demzufolge viel mchtiger als eine einfache GOTO Anweisung. Die EXIT CYCLE Anweisung kann sowohl im Hauptprogramm, als auch in Routinen verwendet werden. Die Syntax einer EXIT CYCLE Anweisung ist folgende: EXIT CYCLE < || prog_name <, prog_name... | ALL ||> Wenn prog_name oder eine Liste von Namen spezifiziert wird, werden die in der Liste enthaltenen Programme verlassen. Wenn kein Name angegeben wird, wird das Programm, das die Anweisung ausgibt, verlassen. Durch die Angabe von ALL werden alle in Ausfhrung begriffenen Programme verlassen.

00/1200

6-11

AUSFHRUNGSSTEUERUNG

PDL2

DELAY Anweisung
Die DELAY Anweisung hebt fr einen festgesetzten Zeitraum (ausgedrckt in Millisekunden) die Ausfhrung des Programms auf, das die Anweisung ausgegeben hat. Whrend der Programmverzgerung wird die Ausfhrung der folgenden Operationen fortgesetzt: aktuelle und auf Ausfhrung wartende Bewegungen; Abfrage der Bedingungshandler; mit PULSE Anweisungen erzwungene Signale; aktuelle und auf Ausfhrung wartende Systemaufrufe.

Die Syntax der DELAY Anweisung ist folgende: DELAY int_expr int_expr gibt die Verzgerungszeit in Millisekunden an.

WAIT FOR Anweisung


Die WAIT FOR Anweisung hebt die Ausfhrung des Programms auf, das die Anweisung ausgegeben hat, bis die angegebene Bedingung erfllt ist. Die Syntax ist folgende: WAIT FOR cond_expr Diese Anweisung verwendet denselben cond_expr, der auch in einer WHEN Klausel eines Bedingungshandlers gltig ist (wie im Kapitel "Bedingungshandler" beschrieben).

BYPASS Anweisung
Wenn ein bestimmtes Programm gerade eine unterbrechbare Anweisung ausfhrt, kann BYPASS dazu benutzt werden, aus dieser Anweisung herauszuspringen und mit der Ausfhrung der nchsten Zeile weiterzumachen: Folgende Anweisungen knnen unterbrochen werden: READ, WAIT FOR, WAIT bei einem SEMAPHORE, SYS_CALL, DELAY, PULSE, MOVE. Die Syntax der BYPASS Anweisung ist: BYPASS < || prog_name <, <prog_name>... | ALL ||><flags> Wenn ein prog_name oder eine Liste von Namen angegeben ist, wird die Ausfhrung dieser Programme mit der Zeile nach der unterbrechbaren Anweisung fortgesetzt, die gerade ausgefhrt wird. Wenn ALL eingesetzt ist, wird BYPASS auf alle ausgefhrten Programme angewandt. Wird kein Programm spezifiziert, umgeht das Programm, das die Anweisung absetzt, sich selbst. Dieser letzte Fall macht nur Sinn, wenn BYPASS von der Aktion eines Bedingungshandler oder einer Interrupt Service Routine abgesetzt wird (weitere Einzelheiten finden sich im Kapitel "Bedienungshandler"). flags ist eine optionale Maske, die benutzt werden kann, um zu spezifizieren, welche unterbrechbaren Anweisungen umgangen werden sollen. So ist z.B. 64 der Wert zum Umgehen von READ Anweisungen. Eine Liste mit diesen im Flag Feld benutzten Werten findet sich im Kapitel "Liste der internen Routinen". Um festzustellen, ob ein Programm auf einer bestimmten Anweisung unterbrochen ist, kann die internen Funktion PROG_STATE aufgerufen werden. Dann kann die von dieser Routine zurckgegebene Ganzzahlwert in die Feldmarke der BYPASS Anweisung bergeben werden. Ein Beispiel:

state:= PROG_STATE (weld_main) IF state = 64 THEN BYPASS weld_main 64 ENDIF

6-12

00/1200

PDL2

AUSFHRUNGSSTEUERUNG

SYNCHRONISIERUNG VON PROGRAMMEN


Bei gleichzeitiger Ausfhrung mehrerer Programme werden diese durch gemeinsame Semaphore Variablen synchronisiert. So werden die Programme whrend ihrer Ausfhrung wechselseitig ausgeschlossen. Wenn zum Beispiel zwei konkurrierende Programme den Zugriff auf dieselbe Variable erfordern, mu eins der beiden Programme ausgeschlossen werden. Wenn prog_a zum Beispiel den Arm 1 kontrolliert, prog_b den Arm 2 kontrolliert und beide Arme in dieselbe Richtung verschoben werden mssen, mu eine wechselseitige Ausschlieung der Richtung vorgenommen werden, um eine Kollision zu vermeiden. SEMAPHORE ist eine der Datenklassen von PDL2. Sie besteht aus einem Zhler von ganzen Zahlen, die unter der Bedingung SIGNAL erhht und unter der Bedingung WAIT erniedrigt wird; in diesem Fall bildet sich eine Warteschlange, die alle Programme enthlt, die auf diese SEMAPHORE warten. Die Synchronisierung wird durch die Verwendung der Anweisungen WAIT und SIGNAL (nicht zu verwechseln mit WAIT FOR) durchgefhrt. Die Syntax ist folgende: WAIT semaphore_var SIGNAL semaphore_var Wenn das Programm ein gemeinsam benutztes Betriebsmittel verwenden mu, benutzt es eine WAIT Anweisung, und nach Abschlu der Benutzung des Betriebsmittels gibt es die Anweisung SIGNAL aus. Wenn ein anderes Programm auf die Verwendung desselben Betriebsmittels wartet, kann dieses Programm die Ausfhrung wieder aufnehmen. Die Synchronisierung erfolgt nach dem Prinzip "first in first out". Da die Semaphore von PDL2 eine Zhlung vornehmen, ist es wichtig, da die Zahl fr SIGNAL und WAIT gleich ist. Eine zu groe Anzahl von Signalen verhindert die wechselseitige Ausschlieung des Betriebsmittels (es sei denn, es gibt mehrere Versionen desselben Mittels). Wenn man z. B. die Programme badsem1 und badsem2, die im folgenden beschrieben werden, aktiviert, funktioniert die wechselseitige Ausschlieung fr den ersten Zyklus. Beim zweiten Programmzyklus verliert man die wechselseitige Ausschlieung durch eine zu groe Anzahl von SIGNAL in badsem1. Wenn die erste SIGNAL Anweisung in badsem1 eine CYCLE Anweisung enthlt, werden alle nachfolgenden Zyklen korrekt ausgefhrt. PROGRAM badsem1 VAR resource : SEMAPHORE EXPORTED FROM badsem1 BEGIN CYCLE SIGNAL resource -- zur Initialisierung von Semaphore . . . WAIT resource -- Bereich der wechselseitigen Ausschlieung SIGNAL resource . . . END badsem1 PROGRAM badsem2 VAR resource : SEMAPHORE EXPORTED FROM badsem1 BEGIN CYCLE . . . WAIT resource -- Bereich der wechselseitigen Ausschlieung SIGNAL resource . . . END badsem2

00/1200

6-13

AUSFHRUNGSSTEUERUNG

PDL2

Auerdem mssen Stopbedingungen vermieden werden, die eintreten, wenn alle Programme gleichzeitig auf die Ressource warten und demzufolge keines in der Lage ist, eine SIGNAL Anweisung auszugeben, um einem anderen Programm den Zugang zu gewhren. Wenn es z.B. nur ein Programm gibt, und dieses in den Wartezustand fr ein Betriebsmittel geht, tritt eine Stopbedingung ein. Es ist weiterhin uerst wichtig, die Semaphore zu Beginn der Ausfhrung mit der CANCEL Anweisung wieder aufzusetzen. Die Syntax ist wie folgt: CANCEL semaphore_var Die Anweisung CANCEL semaphore setzt den Signalzhler auf Null zurck. Sie erzeugt einen Fehler, wenn z.Z. Programme auf der SEMAPHORE Variable warten. Diese Anweisung ist ntzlich, um bei einer vorherigen Ausfhrung nicht benutzte Signale zu lschen.

PRIORITT EINES PROGRAMMS


Die Definition der Prioritten fr ein Programm erfolgt durch das Attribut PRIORITY in der PROGRAM Anweisung. PROGRAM test PRIORITY=1 Gltige Priorittswerte sind 1 bis 3, wobei 3 die hchste Prioritt ist. Die Standardeinstellung ist 2. Wenn zwei oder mehr Programme dieselbe Prioritt haben, werden sie umlaufend mit der Ausfhrung einer bestimmten Anzahl von Anweisungen abgearbeitet. Suspendierte Programme, z. B. solche, die auf einem READ oder SEMAPHORE warten oder die im PAUSE Zustand sind, sind in der Definition der Prioritten nicht inbegriffen. Die Interrupt Routinen benutzen dieselben Werte fr die spezifischen vorbesetzten Variablen des Programms, des Arms, der Prioritt und der Stack Dimension sowie fr Fehlerabfangen (trapped errors) wie das Programm, das sie unterbrechen.

6-14

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG

Handbuch fr Programmiersprache

1 2 3 4 5 6

ROUTINEN
BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

7
8 9 10 11 12 A B C D Index

INHALT
Abschnitt PROZEDUREN UND FUNKTIONEN . . . . . . . . . . . . . . . . PARAMETER . . . . . . . . . . . . . . . . . . . . . . . . . . . . VEREINBARUNGEN . . . . . . . . . . . . . . . . . . . . . . . . LISTE DER PARAMETER. . . . . . . . . . . . . . . . . . . . VEREINBARUNGEN VON KONSTANTEN UND VARIABLEN . STACKGRE. . . . . . . . . . . . . . . . . . . . . . . . DATENKLASSE DER RCKGABEWERTE (RETURN TYPE) . RETURN ANWEISUNG . . . . . . . . . . . . . . . . . . . . . GEMEINSAM BENUTZTE ROUTINEN . . . . . . . . . . . . . BERGABE VON ARGUMENTEN . . . . . . . . . . . . . . . . . BERGABE DURCH VERWEIS . . . . . . . . . . . . . . . . BERGABE NACH WERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seite . . . . . . . . . . . . 7-2 7-2 7-3 7-4 7-4 7-5 7-5 7-5 7-6 7-6 7-6 7-6

ROUTINEN

Handbuch fr Programmiersprache

PDL2

Diese Seite wurde absichtlich leer gelassen

PDL2

ROUTINEN

ROUTINEN
Eine Routine ist wie ein Programm strukturiert, auch wenn sie im allgemeinen nur ein Task ausfhrt. Routinen dienen zur Abkrzung und Vereinfachung des Hauptprogramms. Die Tasks, die mehrmals innerhalb eines Programms wiederholt werden oder die verschiedenen Programmen gemeinsam sind, knnen in Einzelroutinen isoliert werden. Ein Programm kann mehrere Routinen oder eine Routine mehrmals aufrufen. Wenn ein Programm eine Routine aufruft, bernimmt diese die Kontrolle des Programms, und die darin enthaltenen Anweisungen werden ausgefhrt. Wenn die Routine fertig ausgefhrt ist, kehrt die Kontrolle zu dem Punkt zurck, an dem die Routine aufgerufen worden war. Die Routinen knnen von einem beliebigen Punkt innerhalb des ausfhrbaren Abschnitts eines Programms oder einer Routine aus aufgerufen werden. Der Programmierer schreibt die Routinen in den Vereinbarungsabschnitt eines Programms. Wie im folgenden Beispiel beschrieben wird, ist die Struktur einer Routine der eines Programms hnlich. PROGRAM arm_check -- steuert drei Armpositionen und digitale Ausgnge VAR perch, checkpt1, checkpt2, checkpt3 : POSITION ROUTINE reset_all -- Routinevereinbarung -- setzt die Ausgnge auf null und bringt den Arm zu perch zurck VAR n : INTEGER BEGIN FOR n := 21 TO 23 DO $DOUT[n] := OFF ENDFOR MOVE TO perch END reset_all BEGIN -- Hauptprogramm reset_all -- Aufruf Routine MOVE TO checkpt1 $DOUT[21] := ON reset_all MOVE TO checkpt2 $DOUT[22] := ON reset_all MOVE TO checkpt3 $DOUT[23] := ON reset_all END arm_check PDL2 enthlt auch interne Routinen, die zur Ausfhrung von Tasks allgemeiner Anwendungszwecke vordefiniert sind; sie sind im Kapitel "Liste der Internen Routinen" aufgelistet und beschrieben.

00/1200

7-1

ROUTINEN

PDL2

PROZEDUREN UND FUNKTIONEN


Das vorhergehende Beispiel zeigte eine Prozedurroutine. Diese Art von Routine besteht aus einer Sequenz von Anweisungen, die wie eine einzelne, ausfhrbare Anweisung aufgerufen und ausgefhrt werden. Es gibt auch noch eine andere Art von Routine, die Funktionsroutine. Diese Routinen bestehen aus einer Sequenz von Berechnungen und Vergleichen, und der sich daraus ergebende Wert wird zurckgegeben. Eine Funktionsroutine wird in einem Ausdruck aufgerufen und ausgefhrt. Funktionsroutinen werden hufig als Teil eines berprfungstests in einer Schleife oder in einem bedingten Sprung verwendet, oder der Wert, den sie liefern, wird durch Zuweisung einer Variablen zugeordnet. In dem folgenden Beispiel wird die Funktionsroutine als Test in einer IF Anweisung verwendet. PROGRAM input_check ROUTINE time_out : BOOLEAN -- kontrolliert, ob der Input innerhalb der Zeitgrenze empfangen wird CONST time_limit = 3000 VAR time_slice : INTEGER BEGIN $TIMER[1] := 0 REPEAT time_slice := $TIMER[1] UNTIL ($DIN[1] = ON) OR (time_slice > time_limit) IF time_slice > time_limit THEN RETURN (TRUE) ELSE RETURN (FALSE) ENDIF END time_out BEGIN -- Hauptprogramm . . . IF time_out THEN WRITE (Timeout Occurred) ENDIF . . . END input_check

PARAMETER
Um die Routinen in verschiedenen Zusammenhngen verwenden zu knnen, kann der Programmierer Routineparameter anstelle von Programmvariablen oder -konstanten verwenden. Die Parameter werden bei der Vereinbarung der Routine festgelegt. Wenn eine Routine aufgerufen wird, werden die Daten aus einer Argumentenliste, die im Aufruf der Routine selbst angegeben wird, an die Routineparameter bergeben. Die Anzahl der Argumente mu der Anzahl der fr die Routine vereinbarten Parameter entsprechen. Auerdem mssen sie mit der Datenklasse, mit der die Parameter vereinbart wurden, kompatibel sein.

7-2

00/1200

PDL2

ROUTINEN

In dem folgenden Beispiel kann die Routine time_out allgemeiner verwendet werden, indem ein Parameter aufgenommen wird, der den Index des Eingangssignals liefert. Eine so vernderte Routine kann fr die Kontrolle eines beliebigen Eingangssignals verwendet werden. PROGRAM input_check ROUTINE time_out (input : INTEGER) : BOOLEAN -- prft, ob der Eingang innerhalb der Zeitgrenze empfangen wird CONST time_limit = 3000 VAR time_slice : INTEGER BEGIN $TIMER[1] := 0 REPEAT time_slice := $TIMER[1] UNTIL ($DIN[input] = ON) OR (time_slice > time_limit) IF time_slice > time_limit THEN RETURN (TRUE) ELSE RETURN (FALSE) ENDIF END time_out BEGIN -- Hauptprogramm . . . IF time_out(6) THEN WRITE (Intervall abgelaufen) ENDIF . . . END input_check

VEREINBARUNGEN
Die Vereinbarung der Routine hngt von der Routineart ab, zu der sie gehrt: Prozedur oder Funktion. Die Syntax fr die Vereinbarung einer Prozedurroutine ist folgende: ROUTINE proc_name <parameter_list> <Vereinbarungen von Konstanten und Variablen> BEGIN <Anweisung...> END proc_name Die Syntax fr die Vereinbarung einer Funktionsroutine beinhaltet die Vereinbarung der Klasse des Datenelements, das die Routine zurckgibt. Sie mu mindestens eine RETURN Anweisung beinhalten, die wie folgt ausgefhrt werden mu: ROUTINE func_name <parameter_list> : return_type <Vereinbarungen von Konstanten und Variablen> BEGIN <Anweisung...> END func_name 00/1200

-- mu eine RETURN Anweisung beinhalten

7-3

ROUTINEN

PDL2

LISTE DER PARAMETER


Die optionale parameter_list gibt dem Programmierer die Mglichkeit, zu spezifizieren, welche Datenkategorien vom aufrufenden Programm oder von der Routine selbst an die Routine bergeben werden sollen. Die Syntax fr die Vereinbarung der Parameterliste ist folgende: <(id<, id>... : id_type<; id<, id>... : id_type>...)> id_type kann eine beliebige Datenklasse von PDL2 mit den folgenden Einschrnkungen sein: Fr eine Klasse STRING kann die Dimension nicht angegeben werden, so da ein String von beliebiger Dimension verwendet werden kann. Fr eine Klasse JOINTPOS oder XTNDPOS kann keine Armnummer angegeben werden, so da ein beliebiger Arm definiert werden kann. Fr einen String ARRAY kann die Dimension nicht angegeben werden, so da eine Matrix von beliebiger Dimension verwendet werden kann. Es ist mglich, einen Stern (*) zu verwenden, um die Dimension anzugeben, auch wenn das nicht notwendig ist. Zum Beispiel:

part_dim : ARRAY OF INTEGER part_dim : ARRAY[*] OF INTEGER


Ein zweidimensionaler String ARRAY enthlt die Sternzeichen (*,*) wie folgt:

part_grid : ARRAY[*,*] OF INTEGER

VEREINBARUNGEN VON KONSTANTEN UND VARIABLEN


Die Routinen knnen die Vereinbarungen von VAR und CONST so verwenden, wie sie auch vom Hauptprogramm verwendet werden, mit den folgenden Ausnahmen: die Variablen PATH und SEMAPHORE sind nicht zugelassen; die Klauseln EXPORTED FROM sind nicht zugelassen; die Klauseln NOSAVE sind nicht zugelassen.

Die in den Abschnitten VAR und CONST einer Routine deklarierten Variablen und Konstanten werden als lokal zur Routine genannt. Das bedeutet, da sie nur innerhalb der Routine selbst eine Bedeutung haben knnen und da sie in anderen Teilen des Programms nicht verwendet werden knnen. Die fr eine Routine als lokal vereinbarten Identifizierer mssen einen anderen Namen als die Routine haben. Die in einem Abschnitt VAR und CONST des Hauptprogramms deklarierten Konstanten knnen an einem beliebigen Punkt des Programms und auch innerhalb der Routinen selbst verwendet werden. Sie werden deshalb globale Variablen und Konstanten des Programms genannt. Wenn eine innerhalb einer Routine vereinbarte Variable denselben Namen wie eine globale Variable hat, kann die Routine nur auf der lokal vereinbarten Variablen zugreifen. PROGRAM example VAR x : INTEGER ROUTINE test_a VAR x : INTEGER BEGIN x := 4 WRITE(In test_a x = , x, NL) END test_a ROUTINE test_b BEGIN WRITE(In test_b x = , x, NL) END test_b 7-4 00/1200

PDL2 BEGIN x := 10 WRITE(Der Anfangswert von x ist , x, NL) test_a WRITE(Nach der Ausfhrung von test_a x = , x, NL) test_b WRITE(Nach der Ausfhrung von test_b = , x, NL) END example Das Ergebnis im Ausgang ist: Der Anfangswert von x ist 100 In test_a x = 4 Nach der Ausfhrung von test_a x = 10 In test_b x = 10 Nach der Ausfhrung von test_b x = 10 Die Unterscheidung zwischen global und lokal wird Gltigkeitsbereich einer Kategorie genannt.

ROUTINEN

STACKGRE
Die einzige Begrenzung fr die Aufrufe der Routine ist durch die Gre des Programmstacks gegeben, weil bei jedem Aufruf (einschl. der Aufrufe von Interrupt Routinen) ein Teil dieses Stacks belegt wird. Die Stackgre, die bei einem Routineaufruf benutzt wird, ist proportional zur Anzahl der in der Routine vereinbarten lokalen Variablen. Die Gre des Stacks kann durch das Attribut STACK in der PROGRAM Anweisung angegeben werden.

DATENKLASSE DER RCKGABEWERTE (RETURN TYPE)


Return_type kann fr eine Funktionsvereinbarung eine beliebige Datenklasse von PDL2 sein, mit den folgenden Einschrnkungen: Fr eine Klasse STRING kann die Dimension nicht angegeben werden, so da ein String von beliebiger Dimension verwendet werden kann; Fr eine Klasse JOINTPOS oder XTNDPOS kann keine Armnummer angegeben werden, soda ein Wert fr einen beliebigen Arm verwendet werden kann; Fr einen String ARRAY kann die Dimension nicht angegeben werden, soda eine Matrix von beliebiger Dimension verwendet werden kann. Es ist mglich, einen Stern (*) zu verwenden, um die Dimension anzugeben, auch wenn das nicht notwendig ist. Zum Beispiel:

part_dim : ARRAY OF INTEGER part_dim : ARRAY[*] OF INTEGER


Ein zweidimensionaler String ARRAY enthlt die Sternzeichen (*,*) wie folgt:

part_grid : ARRAY[*,*] OF INTEGER


Die Variablen PATH und SEMAPHORE sind nicht zugelassen.

RETURN ANWEISUNG
Mit der RETURN Anweisung gibt die gerade benutzte Routine die Kontrolle an das Programm an dem Punkt zurck, an dem sie aufgerufen worden war. Bei Funktionsroutinen wird auch ein Wert an das aufrufende Programm oder an die Routine zurckgegeben. Die Syntax fr die RETURN Anweisung ist folgende: RETURN <(value)> In Funktionsroutinen wird eine RETURN Anweisung mit einem Rckgabewert bentigt. Der Wert mu ein Ausdruck sein, der mit der Datenklasse des Rckgabewertes kompatibel ist. Wenn der Programminterpretierer whrend der Ausfhrung einer Funktion keine RETURN Anweisung findet, wird ein Fehler ausgegeben, sobald die END Anweisung erreicht ist.

00/1200

7-5

ROUTINEN

PDL2

Die RETURN Anweisung kann auch in den Prozedurroutinen verwendet werden, aber in diesem Fall wird kein Wert zurckgegeben. Wenn RETURN in einer Prozedur nicht verwendet wird, bergibt die END Anweisung die Kontrolle wieder an dem Punkt, an dem die Routine aufgerufen worden war.

GEMEINSAM BENUTZTE ROUTINEN


Die Routinen knnen durch die optionale Klausel EXPORTED FROM als einem anderen Programm zugehrig oder als nicht exklusiv und auch von anderen Programmen verwendbar vereinbart werden. Die Syntax ist folgende: EXPORTED FROM prog_name Prog_name gibt den Namen des Programms an, das die spezifizierte Routine enthlt. Zum Beispiel: ROUTINE error_check EXPORTED FROM utilities Die Vereinbarungs- und Ausfhrungsabschnitte der Routine erscheinen nur in dem Programm, das die entsprechende Routine enthlt. Fr weitere Informationen siehe Abschnitt ber gemeinsame Variablen und Routinen im Kapitel "Darstellung der Daten".

BERGABE VON ARGUMENTEN


Die einer Routine in einem Routineaufruf bergebenen Argumente mssen in Anzahl und Klasse mit der Liste der in der Vereinbarung der Routine angegebenen Parameter kompatibel sein. Ein Argument kann aus einem beliebigen, gltigen Ausdruck bestehen, der die Eigenschaften des entsprechenden Parameters aufweist. Es gibt zwei Arten, in denen Argumente an Parameter bergeben werden knnen: bergabe durch Verweis; bergabe nach Wert.

BERGABE DURCH VERWEIS


Wenn ein Argument durch Verweis bergeben wird, hat der entsprechende Parameter direkten Zugriff auf den Inhalt dieses Arguments. Jede in der Routine an dem Parameter vorgenommene nderung ndert auch den Wert des Arguments. Fr die bergabe durch Verweis mu das Argument eine vom Anwender definierte Variable sein.

BERGABE NACH WERT


Wenn ein Argument nach Wert bergeben wird, empfngt die Routine nur eine Kopie seines Werts. Das bedeutet, da keine in der Routine am Parameter vorgenommene nderung den Wert des Arguments ndern kann. Fr die bergabe einer vom Anwender nach Wert definierten Variablen mu das Argument in Doppelklammern gesetzt werden. Die aus Konstanten, Ausdrcken oder literalen Werten bestehenden Argumente werden automatisch nach Wert bergeben. Das gleiche gilt fr eine beliebige vorbesetzte Variable (einschlielich der Portmatrizen) sowie fr eine beliebige INTEGER Variable, die einem REAL Parameter bergeben wird. Die anderen Variablen werden durch Verweis bergeben, es sei denn, sie werden in Doppelklammern gesetzt. Beispiel fr die bergabe einer Variablen: check_status (status) -- bergabe durch Verweis check_status ( (status) ) -- bergabe nach Wert

Die Routine wird immer auf dieselbe Weise ausgefhrt, unabhngig davon, ob die Argumente durch Verweis oder nach Wert bergeben werden.

7-6

00/1200

PDL2 Beispiel fr Routinen, die den bergang durch Verweis und den bergang nach Wert anwenden: PROGRAM example VAR x : INTEGER ROUTINE test_a(param1 : INTEGER) BEGIN param1 := param1 + 4 WRITE(Im test_a param1 = , param1, NL) END test_a BEGIN x := 10 WRITE(Der Anfangswert von x ist, x, NL) test_a((x)) -- bergabe nach Wert WRITE(Nach der bergabe nach Wert x= , x, NL) test_a(x) -- bergabe durch Verweis WRITE(Nach der bergabe durch Verweis x = , x, NL) END example Die sich ergebende Ausgabe ist: Der Anfangswert von x ist 10 Im test_a param1 = 14 Nach der bergabe nach Wert x = 10 Im test_a param1 = 14 Nach der bergang durch Verweis x = 14

ROUTINEN

00/1200

7-7

ROUTINEN

PDL2

Diese Seite wurde absichtlich leer gelassen

7-8

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN

Handbuch fr Programmiersprache

1 2 3 4 5 6 7

BEDINGUNGSHANDLER
SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

8
9 10 11 12 A B C D Index

INHALT
Abschnitt Seite

OPERATIONEN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-1 DEFINITION VON BEDINGUNGSHANDLERN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-1 FOR ARM Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-1 NODISABLE Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-2 ATTACH Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-2 SCAN Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-2 FREIGABE, SPERRE UND ENTFERNEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-3 VARIABLENVERWEISE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-4 BEDINGUNGEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-4 RELATIONAL Zustnde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-4 BOOLEAN Zustand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-5 ZUSTNDE VON DIGITALEN E/As. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-5 EREIGNISSE VON DIGITALEN E/As . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-5 SYSTEMereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-6 ANWENDERereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-9 FEHLERereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-9 PROGRAMMereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-10 EREIGNIS BEI ABBRUCH EINER UNTERBRECHBAREN ANWEISUNG . . . . . . . . . . . . . . . . . . . 8-10 BEWEGUNGSereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-11 AKTIONEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-13

BEDINGUNGSHANDLER

Handbuch fr Programmiersprache

PDL2

INHALT (Fortsetzung)
Abschnitt ZUWEISUNGSaktion. . . . . . . . . . . . INCREMENT- und DECREMENT-Aktionen INTERNE Aktionen. . . . . . . . . . . . . SEMAPHORE Aktion. . . . . . . . . . . . MOTION und ARM Aktionen . . . . . . . . ALARM Aktionen . . . . . . . . . . . . . . PROGRAM Aktionen . . . . . . . . . . . . Aktionen fr BEDINGUNGSHANDLER . . DETACH Aktion . . . . . . . . . . . . . . PULSE Aktion . . . . . . . . . . . . . . . HOLD Aktion . . . . . . . . . . . . . . . . SIGNAL EVENT Aktion . . . . . . . . . . ROUTINE CALL Aktion . . . . . . . . . . AUSFHRUNGSORDNUNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seite 8-13 8-14 8-14 8-14 8-14 8-15 8-15 8-15 8-16 8-16 8-16 8-16 8-16 8-17

PDL2

BEDINGUNGSHANDLER

BEDINGUNGSHANDLER
Die Bedingungshandler ermglichen einem Programm die berwachung von bestimmten Bedingungen parallel zur normalen Ausfhrung, wobei die Aktionen ausgefhrt werden, die beim Auftreten dieser Bedingungen vorgesehen sind. Typische Anwendungsgebiete sind die berwachung und die Steuerung von periphren Einheiten und die Fehlerbehandlung. Der folgende Bedingungshandler zum Beispiel kontrolliert, ob eine PAUSE Bedingung vorliegt. Wenn das Programm in den Zustand paused versetzt wird, wird der digitale Ausgang $DOUT[21] gesperrt. Dieses Beispiel knnte benutzt werden, um auf ein Werkzeug hinzuweisen, das abgeschaltet werden mu, wenn das Programm unerwartet in den Zustand paused versetzt wird. CONDITION[1]: WHEN PAUSE DO $DOUT[21] := OFF ENDCONDITION ENABLE CONDITION[1] -- definiert den Bedingungshandler

-- gibt den Bedingungshandler frei

OPERATIONEN
Wie im vorangegangenen Beispiel gezeigt, ist die Verwendung von Bedingungshandlern ein in zwei Phasen unterteilter Proze. Der Bedingungshandler wird zunchst definiert und kann dann freigegeben werden. Die Bedingungshandler knnen auerdem gesperrt und entfernt werden.

DEFINITION VON BEDINGUNGSHANDLERN


Die Bedingungshandler werden mit Hilfe der CONDITION Anweisung in dem ausfhrbaren Abschnitt eines Programms definiert. Die Syntax der Anweisung ist folgende: CONDITION[number] <FOR ARM[n]> <NODISABLE> <ATTACH> <SCAN(number)>: WHEN cond_expr DO action_list <WHEN cond_expr DO action_list>... ENDCONDITION Der Programmierer identifiziert jeden Bedingungshandler durch number, einen INTEGER Ausdruck, der zwischen 1 und 255 liegen kann. Die zu berwachenden Bedingungen werden in dem Ausdruck der Bedingung (cond_expr) angegeben. Mehrere Bedingungen knnen in einem einzelnen Ausdruck zusammengefat werden, wozu die BOOLEAN Operatoren AND und OR verwendet werden. Die Bedingungen, die berwacht werden knnen, werden weiter unten in diesem Kapitel dargestellt. Wenn der Ausdruck TRUE wird, wird der Bedingungshandler aktiviert. Die Liste der Funktionen (action_list) gibt die Aktionen an, die ausgefhrt werden sollen, wenn der Bedingungshandler aktiviert wird. Die Funktionen, die in der Liste enthalten sein knnen, werden im Folgenden in diesem Kapitel dargestellt. Mehrere WHEN Klauseln knnen in einer einzigen Definition eines Bedingungshandlers zusammengefat werden. Die Folge davon ist, da die einzelnen WHEN Klauseln zusammen freigegeben und gesperrt werden. Das verursacht auerdem das wechselseitige Ausschlieen der Klauseln, in dem Sinne, da nur eine Klausel von der Gruppe aktiviert wird.

FOR ARM Klausel


Die optionale FOR ARM Klausel kann verwendet werden, um dem Bedingungshandler einen bestimmten Arm zuzuordnen. hnlich werden alle Arm-bezogenen Aktionen auf den durch ein FOR ARM spezifizierten Arm angewandt. Ist FOR ARM nicht angegeben, wird der Standardarm (PROG_ARM oder $DFT_ARM) fr alle Arm-bezogenen Aktionen benutzt. Global aktivierte Bewegungsereignisse gelten fr jeden bewegten Arm, whrend lokale Ereignisse nur auf den Arm der MOVE Anweisung wirken, mit der sie (durch die WITH Option) verknpft sind. 00/1200 8-1

BEDINGUNGSHANDLER Zum Beispiel: PROGRAM ch_test PROG_ARM=1 . . . BEGIN CONDITION[23] FOR ARM[2]: WHEN DISTANCE 60 BEFORE END DO LOCK WHEN $ARM_DATA[4].PROG_SPD_OVR > 50 DO LOCK ARM[4] ENDCONDITION CONDITION[24]: WHEN DISTANCE 60 BEFORE END DO LOCK ENDCONDITION

PDL2

In CONDITION[23] beziehen sich die erste WHEN Klausel und die erste LOCK Klausel auf den Arm 2, wie in der Klausel FOR ARM angegeben ist. Die zweite WHEN Klausel und die zweite LOCK Klausel beziehen sich auf den ARM 4, wie in der Bedingung und Funktion ausdrcklich angegeben ist. In CONDITION[24] wirken WHEN und LOCK auf den Arm der MOVE Anweisung, mit der die Bedingung verknpft ist.

NODISABLE Klausel
Die optionale NODISABLE Klausel gibt an, da der Bedingungshandler nicht automatisch gesperrt wird, wenn die Bedingung aktiviert wird. Die NODISABLE Klausel ist nicht zulssig fr Bedingungshandler, die Zustandsbedingungen enthalten.

ATTACH Klausel
Mit Definition der optionalen ATTACH Klausel wird eine unmittelbare Reservierung des Bedingungshandlers bewirkt. Wenn nichts weiter angegeben wird, kann das Bedingungshandler an einem beliebigen Programmpunkt mit der ATTACH CONDITION Anweisung reserviert werden. Die Syntax der ATTACH CONDITION Anweisung ist wie folgt: ATTACH CONDITION [number] <, CONDITION [number]> ... Falls ein Bedingungshandler reserviert wird, kann nur der Code des Programms, das die ATTACH Anweisung enthlt, dazu benutzt werden, dieses Steuerungsprogramm freizugeben, zu blockieren, seinen Inhalt zu lschen, es umzudefinieren oder seine exklusive Kontrolle durch das Programm mit der DETACH Anweisung zu beenden. Die Syntax ist wie folgt: DETACH CONDITION || ALL | [number] <, CONDITION [number]> ... || Durch Benutzen der ALL Option wird die exklusive Kontrolle aller reservierter Bedingungshandler aufgehoben. Anderenfalls werden nur die angegebenen Bedingungshandler aus der Reservierung entfernt. Fr weitere Information siehe den Abschnitt "Anweisungen ATTACH und DETACH" im Kapitel "Liste der Anweisungen".

SCAN Klausel
Die optionale SCAN Klausel kann dazu benutzt werden, eine andere Frequenz fr das Abfragen des Bedingungshandlers anzugeben. Ist dieses Attribut nicht spezifiziert, wird der Bedingungshandler mit der Frequenz berwacht, die im System (Wert von $TUNE[1]) definiert ist. Wenn in der Definition der Bedingung eine SCAN Klausel vorkommt, werden die Ausdrcke, die Zustnde in einem solchen Bedingungshandler sind, seltener abgefragt. Es muss eine positive INTEGER-Variable oder -Ausdruck in runden Klammern bei der SCAN Klausel spezifizieren. Diese Zahl gibt den Multiplikator an, mit der die normale Abfragerate bei der berwachung des Bedingungshandlers multipliziert wird. 8-2 00/1200

PDL2 Zum Beispiel: VAR a, b: INTEGER CONDITION[55] SCAN(2): WHEN a = b DO ENABLE CONDITION[4] ENDCONDITION

BEDINGUNGSHANDLER

Wenn die Bedingungshandler normalerweise alle 20 msek (Standardwert von $TUNE[1]) abgefragt werden, wird der oben angefhrte Handler alle 40 msek berwacht. Die SCAN Klausel ist nur von Nutzen, wenn sie auf solche Bedingen angewandt wird, die Zustnde sind und nicht sehr hufig berwacht werden mssen. Sie ist ein Filter mit dem der Systemverwaltungsaufwand beim berwachen reduziert werden kann. Es ist zu beachten, dass eine Bedingung bei Auslsen automatisch deaktiviert wird. Soll sie immer aktiviert bleiben, kann die Klause NODISABLE (Abfangen des Fehlers 40016) oder die Anweisung ENABLE CONDITION benutzt werden. Ereignisse werden von der SCAN Klausel nicht beeinflusst. Zustnde und Ereignisse sind in anderen Abschnitten dieses Kapitel definiert.

FREIGABE, SPERRE UND ENTFERNEN


Ein Bedingungsausdruck wird nur berwacht, wenn der Bedingungshandler freigegeben ist. Mehrfache Freigabe von Bedingungshandlern ist mglich, wenn die ENABLE CONDITION Anweisung oder Funktion verwendet wird. Die Syntax ist folgende: ENABLE CONDITION [number] <, CONDITION [number]> ... Die Bedingungshandler knnen gleichzeitig als Teil einer MOVE Anweisung durch die WITH Klausel freigegeben werden. Die Syntax ist folgende: WITH CONDITION [number] <, CONDITION [number]> ... Zum Beispiel: PROGRAM example . . . BEGIN CONDITION[1]: WHEN AT START DO $DOUT[22] := ON ENDCONDITION . . . MOVE TO p1 WITH CONDITION[1] . . . END example Die Bedingungshandler werden automatisch gesperrt, wenn die Bedingung aktiviert wird (auer wenn die NODISABLE Klausel spezifiziert ist). Mehrfache Sperre von Bedingungshandlern ist mglich, wenn man die DISABLE CONDITION Anweisung oder Funktion verwendet. Die Syntax ist folgende: DISABLE CONDITION || ALL | [number] <, CONDITION [number]> ... || Bei Benutzen der ALL Option werden alle freigegebenen Bedingungshandler blockiert. Andernfalls werden nur die angegebenen gesperrt. Wenn der Bedingungshandler auch als Teil einer WITH Klausel dauernd freigegeben ist, wird er nach Abschlu der Bewegung gesperrt und nicht, wenn die DISABLE CONDITION Anweisung ausgefhrt wird. 00/1200 8-3

BEDINGUNGSHANDLER

PDL2

Die zeitweise als Teil einer WITH Klausel freigegebenen Bedingungshandler werden automatisch gesperrt, wenn die Bewegung beendet ist oder gelscht wird. Sie werden auerdem automatisch gesperrt, wenn die Bewegung aufgeschoben wird (zum Beispiel durch eine LOCK Anweisung), und sie werden wieder freigegeben, wenn die Bewegung wieder aufgenommen wird. Die Systemroutinen COND_ENABLED und COND_ENBL_ALL knnen benutzt werden, um zu sehen, ob eine bestimmte Bedingung (global oder lokal) aktiviert ist. Einzelheiten finden sich im Kapitel "Liste der internen Routinen. Die Definitionen der Bedingungshandler werden automatisch entfernt, wenn das Programm deaktiviert wird. Die Definitionen der Bedingungshandler knnen auerdem durch die PURGE CONDITION Anweisung oder Funktion entfernt werden. Entfernte Bedingungshandler knnen nicht wieder freigegeben werden. Die Syntax ist folgende: PURGE CONDITION || ALL | [number] <, CONDITION [number]> ... || Wird die ALL Option benutzt, werden alle Definitionen von Bedingungshandler entfernt, andernfalls nur die spezifizierten. Wenn der angegebene Bedingungshandler als Teil einer WITH Klausel dauernd freigegeben wird, kann er nicht entfernt werden.

VARIABLENVERWEISE
Die Variablentypen, auf die in einem Bedingungshandler verwiesen werden kann, sind auf globale und vorbesetzte Variablen beschrnkt. Lokale Variable und Parameter von Routinen sind in Bedingungshandlern nicht erlaubt, auer wenn ihr Wert zum Zeitpunkt der Definition des Handlers bernommen wurde. Wenn in einem Bedingungshandler auf ein Matrizenelement verwiesen wird, so wird der Index zum Zeitpunkt der Definition der Bedingung errechnet. Daran muss gedacht werden, wenn Variable als Matrizenindizes in Bedingungen benutzt werden. Auerdem sind vorbesetzte Variable, zu derem Zugriff Systemroutinen gebraucht werden, in einem Bedingungshandler nicht erlaubt und der Wert einer vorbesetzten Variable mit Bereichsprfung kann nicht gendert werden.

BEDINGUNGEN
Eine Bedingung kann ein Zustand oder ein Ereignis sein. Die Zustnde gelten als gegeben, solange sie bestehen. Sie werden in festen Zeitabstnden durch einen Proze berwacht, der auch Abtasten genannt wird. Die Ereignisse gelten nur in dem Moment als gegeben, in dem sie eintreten. Dementsprechend knnen die Ereignisbedingungen in einem Bedingungsausdruck nicht durch den AND Operator verknpft werden. Mehrere Bedingungen knnen in einem einzelnen Ausdruck zusammengefat werden, wozu die BOOLEAN Operatoren AND und OR verwendet werden. Der AND Operator hat Vorrang. Deshalb wird der Ausdruck $DIN[1] OR $DIN[2] AND $DIN[3] freigegeben, wenn $DIN[1] ON ist oder wenn sowohl $DIN[2] wie auch $DIN[3] ON sind. Wenn BOOLEAN Zustandsbedingungen verbunden werden und die AND und OR Operatoren dabei in Klammern eingeschlossen werden, tritt ein Fehler auf. ($DIN[1] OR $DIN[2]) AND $DIN[3] erzeugt z.B. einen Fehler. Beschreibungen der Variablen $THRD_CEXP und $THRD_PARAM finden sich im Kapitel "Liste der vorbesetzten Variablen". Sie knnen beim Programmieren mit Bedingungen helfen. Die folgenden Bedingungen knnen in einem Bedingungsausdruck enthalten sein:

RELATIONALE Zustnde
Die Bedingung eines relationalen Zustands vergleicht bei jeder Abtastung zwei Operanden. Die Bedingung ist gegeben, wenn der Vergleich TRUE ist. Es kann ein beliebiger Vergleichsoperator verwendet werden. Die Operanden knnen vom Anwender definierte Variablen, vorbesetzte Va-riablen, Matrizen, literale Werte oder Konstanten sein. Mindestens mu ein Operand eine Variable sein. Wenn in einer TIL oder WHEN Klausel benutzt, knnen die Operanden nicht aus lokalen Variablen oder Parametern bestehen. Wenn REAL Operanden benutzt werden, kann das System unntig verlangsamt werden, was zu Fehlern fhren kann. Dies Problem wird noch bedeutender, wenn das System nicht ber einen Fliekommaprozessor verfgt oder Mehrfachausdrcke fr Bedingungen REAL Operanden enthalten. Um diese Schwierigkeiten zu vermeiden, sollten, wo immer mglich, INTEGER Operanden verwendet werden. Mu ein REAL Operand benutzt werden, sollte der Ausdruck so einfach wie mglich formuliert werden.

8-4

00/1200

PDL2

BEDINGUNGSHANDLER

Variablen, die in relationalen Zustandsbedingungen benutzt werden, brauchen nicht notwendigerweise zum Zeitpunkt der Definition des Bedingungshandlers initialisiert zu werden. Auch wird der Test auf nicht initialisierte Variablen nicht durchgefhrt, wenn der Bedingungshandler abgetastet wird. Zum Beispiel: WHEN WHEN WHEN WHEN WHEN

bool_var = TRUE DO int_var <= 10 DO real_var > 10.0 DO $TIMER[1] > max_time DO $GIN[2] <> $GIN[3] DO

BOOLEAN Zustand
Eine Bedingung eines BOOLEAN Zustands berprft bei jedem Abtasten eine BOOLEAN Variable. Die Bedingung ist gegeben, wenn die Variable TRUE ist. Wenn in einer TIL oder WHEN Klausel benutzt, darf die BOOLEAN Variable nicht aus einer lokalen Variable oder einem Parameter bestehen. Zum Beispiel: WHEN bool_var DO Der BOOLEAN Operator NOT kann verwendet werden, um zu spezifizieren, da die Bedingung gegeben ist, wenn die Variable FALSE ist. Zum Beispiel: WHEN NOT bool_var DO bool_var kann auch das Ergebnis der internen Routine BIT_TEST sein. Diese Funktion prft, ob ein angegebenes Bit eines INTEGER ON oder OFF ist. Das erste Argument ist die zu prfende Variable, das zweite das zu prfende Bit und das dritte gibt an, ob das Bit auf ON oder auf OFF geprft werden soll. Das dritte Argument von BIT_TEST mu spezifiziert werden, wenn die Routine in einem Bedingungsausdruck benutzt wird. Auerdem drfen die Variablen, die als Argumente benutzt werden, nicht lokale Variable oder Parameter sein. (Fr mehr Informationen ber BIT_TEST siehe den Abschnitt BIT_TEST im Kapitel "Liste der internen Routinen".) Die folgende Zeile ist ein Beispiel fr die Benutzung von BIT_TEST in einem Bedingungsausdruck: WHEN BIT_TEST (int_var, bit_num, TRUE) DO Wenn zwei Zustandsbedingungen in Boole'schen Variablen durch einen AND oder OR Operator verknpft werden, keine Klammern um den Ausdruck setzen. Werden Klammern gesetzt, so interpretiert der Editor den Operator als GLEICH (=) und nicht als AND oder OR. Das folgende Beispiel zeigt die richtige Syntax: WHEN a AND b DO

ZUSTNDE VON DIGITALEN E/As


Eine E/A Zustandsbedingung berwacht den Zustand eines digitalen E/A Signals. Das Signal wird bei jedem Abtasten berprft. Die Bedingung ist gegeben, wenn das Signal bei der Abfrage ON ist. Zum Beispiel: WHEN $DIN[1] DO WHEN $DOUT[22] DO Der BOOLEAN Operator NOT kann verwendet werden, um anzugeben, da die Bedingung gegeben ist, wenn das Signal bei der Abfrage OFF ist. Zum Beispiel: WHEN NOT $DIN[1] DO

EREIGNISSE VON DIGITALEN E/As


Auch eine Ereignisbedingung fr digitale E/As berwacht den Zustand eines digitalen E/A Signals. Anders als $FDIN, knnen die Matrizen $DIN, $DOUT, $SDIN, $SDOUT und $BIT als Ereignisse berwacht werden. $FDIN kann nicht als ein Ereignis berwacht werden. Fr die Ereignisse wird der Anfangswert des Signals getestet, wenn der Bedingungshandler freigegeben ist. Bei jedem Abtasten wird die angegebene nderung im Signal geprft. Die Bedingung ist gegeben, wenn die nderung festgestellt wird, whrend der Bedingungshandler freigegeben ist. 00/1200 8-5

BEDINGUNGSHANDLER Die nderung des Signals wird wie folgt angegeben: + (Wechsel von OFF auf ON) (Wechsel von ON auf OFF)

PDL2

Zum Beispiel: WHEN $DIN[1]+ DO WHEN $DOUT[22]- DO Die Systemfunktion BIT_FLIP kann benutzt werden, um negative und positive bergnge von Bits innerhalb einer der folgenden Analogportmatrizen zu berwachen: $AIN, $AOUT, $GIN, $GOUT, $WORD, $USER_BYTE, $USER_WORD, $USER_LONG, $PROG_UBYTE, $PROG_UWORD, $PROG_ULONG und $PLCSTW. Weitere Einzelheiten zu dieser Funktion finden sich im Kapitel "Liste der internen Routinen.

SYSTEMereignisse
Die Bedingung eines Systemereignisses berwacht ein vom System erzeugtes Ereignis. Die Bedingung ist gegeben, wenn das angegebene Ereignis eintritt, whrend der Bedingungshandler freigegeben ist. Das Abtasten des Bedingungsausdrucks erfolgt nur, wenn ein Systemereignis eintritt. Die Systemereignisse umfassen: POWERUP: Wiederaufnahme der Programmausfhrung nach Beseitigung eines Stromausfalls; HOLD: Jedes Drcken der HOLD Taste oder Ausfhrung der betreffenden PDL2 Anweisung; START: Jedes Drcken der START Taste; EVENT code: Es tritt ein Systemereignis ein, das durch einen Code identifiziert wird; SEGMENT WAIT path_var: das Feld $SEG_WAIT des ausgefhrten Knotens ist TRUE; WINDOW SELECT scrn_num: Wahl eines anderen Eingabefensters auf dem Bildschirm.

Die POWERUP Bedingung wird zu Anfang des Wiederanlaufs nach Stromausfall gesetzt: es mu daher eine kurze Zeit gewartet werden, ehe Prozeduren wie DRIVES ON ausgefhrt werden knnen. Der Anhang "Wiederanlauf nach Stromausfall" enthlt mehrere Programmbeispiele, die die Wiederanlauftechniken demonstrieren. Die HOLD Bedingung wird entweder durch Drcken der HOLD Taste auf der z.Z. freigegebenen Einrichtung oder durch Ausfhren der PDL2 Anweisung HOLD ausgelst. Die HOLD Bedingung wird auch bei einem Stromausfall ausgelst. Die START Taste mu mindestens einmal gedrckt werden, ehe das Ereignis durch Drcken der HOLD Taste ausgelst werden kann. Es mu die HOLD Taste auf der z.Z. freigegebenen Einrichtung gedrkt werden. Im AUTO-LOCAL Modus ist die zu drckende HOLD Taste die auf der Bedienungskonsole. Im AUTO-REMOTE Modus mu das HOLD Signal zum Auslsen dieses Ereignisses benutzt werden. In beiden Modi bewirkt eine Ausfhrung der HOLD Anweisung, da das Ereignis ausgelst wird. Im PROG Modus sollte dieses Ereignis nicht benutzt werden. Die START Bedingung wird durch Drcken der START Taste ausgelst. Dieses Ereignis kann nur im AUTO Modus benutzt werden. Es mu die START Taste auf der z.Z. freigegebenen Einrichtung gedrckt werden. Im AUTO-LOCAL Modus ist die zu drckende START Taste die auf der Bedienungskonsole. Im AUTO-REMOTE Modus mu das START Signal zum Auslsen dieses Ereignisses benutzt werden. Fr einige Ereigniscodes stehen vorbesetzte Konstanten zur Verfgung. Im folgenden werden gltige Codes fr die EVENT Bedingung aufgelistet: EVENT Code AC_ABORT Bedeutung ausgelst, wenn die Taste ^C gedrckt wird und die Umgebung Application Aid aktiv ist. Wenn Application Aid nicht aktiv ist, wird das Drcken von ^C nicht bemerkt ausgelst, wenn der Befehl UTILITY APPLICATION vom CRT abgesetzt wird, um die Aid Umgebung zu aktivieren. ausgelst, wenn der Befehl UTILITY APPLICATION vom PHG abgesetzt wird, um die Aid Umgebung zu aktivieren.

AC_CALL_CRT AC_CALL_TP

8-6

00/1200

PDL2

BEDINGUNGSHANDLER

EVENT Code 80 81 82 83 84 85 91 92 93 94 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 118 119 120 121 122 123 124 125 126 127 128 129 130

Bedeutung ausgelst, wenn das Protokoll des CRT Emulators (PCINT) auf der seriellen Leitung montiert wurde, die eine C3G Plus mit einem PC verbindet. ausgelst, wenn das Protokoll des CRT Emulators demontiert wird oder auf der seriellen Leitung ein Fehler auftritt. ausgelst, wenn die EZ Taste auf dem PHG gedrckt wird. ausgelst, wenn die A1 Taste auf dem PHG gedrckt wird. ausgelst, wenn die A2 Taste auf dem PHG gedrckt wird. ausgelst, wenn die generelle Prozenteinstellung durch Drcken der % Taste auf dem PHG oder Ausgabe des Befehls SET ARM GEN_OVR gendert wird. Taste U1 auf dem PHG gedrckt Taste U2 auf dem PHG gedrckt Taste U3 auf dem PHG gedrckt Taste U4 auf dem PHG gedrckt ausgelst, wenn die DRIVES eingeschaltet werden. ausgelst, wenn die DRIVES ausgeschaltet werden. Schlsselschalter auf der BK auf PROG gesetzt Schlsselschalter auf der BK auf AUTO-LOCAL gesetzt Schlsselschalter auf der BK auf AUTO-REMOTE gesetzt Schlsselschalter auf der PHG auf MAN gesetzt Schlsselschalter auf der PHG auf AUTO gesetzt bergang des Systems in den PROG Zustand bergang des Systems in den AUTO-L Zustand bergang des Systems in den AUTO-R Zustand bergang des Systems in den ALARM Zustand bergang des Systems in den HOLD Zustand Zustimmungsschalter auf dem PHG gedrckt Zustimmungsschalter auf dem PHG losgelassen Schalter "PHG am Schrank" gedrckt Schalter "PHG am Schrank" losgelassen PHG ist nicht angeschlossen PHG ist nicht angeschlossen in AUTO-T Status eingetreten ausgelst, wenn der Standardarm fr Tippbetrieb durch Ausgabe von SET ARM TP_MAIN Befehlen gewhlt wurde ARM Taste auf PHG gedrckt Hoch-Tief-bergang von HDIN von SCC1 Hoch-Tief-bergang von HDIN von SCC2 Hoch-Tief-bergang von HDIN von SCC3 Hoch-Tief-bergang von HDIN von SCC4 Arm 1 ist bereit zum Empfangen von Offsets von externem Sensor Arm 2 ist bereit zum Empfangen von Offsets von externem Sensor Arm 3 ist bereit zum Empfangen von Offsets von externem Sensor Arm 4 ist bereit zum Empfangen von Offsets von externem Sensor ^C Taste auf PHG oder PC Tastatur (bei aktivem PCINT) gedrckt lst aus, wenn Arm 1 in den automatischen Sperrstatus eintritt (aktiviert durch Setzen von $RCVR_LOCK auf TRUE)

00/1200

8-7

BEDINGUNGSHANDLER

PDL2

EVENT Code 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149

Bedeutung lst aus, wenn Arm 2 in den automatischen Sperrstatus eintritt (aktiviert durch Setzen von $RCVR_LOCK auf TRUE) lst aus, wenn Arm 3 in den automatischen Sperrstatus eintritt (aktiviert durch Setzen von $RCVR_LOCK auf TRUE) lst aus, wenn Arm 4 in den automatischen Sperrstatus eintritt (aktiviert durch Setzen von $RCVR_LOCK auf TRUE) Eintritt in die in $ON_POS_TBL[1] definierte Kugel Eintritt in die in $ON_POS_TBL[2] definierte Kugel Eintritt in die in $ON_POS_TBL[3] definierte Kugel Eintritt in die in $ON_POS_TBL[4] definierte Kugel Eintritt in die in $ON_POS_TBL[5] definierte Kugel Eintritt in die in $ON_POS_TBL[6] definierte Kugel Eintritt in die in $ON_POS_TBL[7] definierte Kugel Eintritt in die in $ON_POS_TBL[8] definierte Kugel Austritt aus der in $ON_POS_TBL[1] definierte Kugel Austritt aus der in $ON_POS_TBL[2] definierte Kugel Austritt aus der in $ON_POS_TBL[3] definierte Kugel Austritt aus der in $ON_POS_TBL[4] definierte Kugel Austritt aus der in $ON_POS_TBL[5] definierte Kugel Austritt aus der in $ON_POS_TBL[6] definierte Kugel Austritt aus der in $ON_POS_TBL[7] definierte Kugel Austritt aus der in $ON_POS_TBL[8] definierte Kugel

Der Verwendung von Ereignissen, die sich auf HDIN (121..124) beziehen, sollte ein Aufruf der internen Routine HDIN_SET vorausgehen, so die berwachung von HDIN bergngen aktiviert ist. Die SEGMENT WAIT Bedingung wird vor der Ausfhrung einer Bewegung zu einem Zweigknoten gesetzt, dessen Feld $SEG_WAIT den Wert TRUE hat. An diesem Punkt wird die Verarbeitung des Zweigs ausgesetzt, bis eine auf den Zweig bezogene SIGNAL SEGMENT Anweisung oder Funktion ausgefhrt wird. Die WINDOW SELECT Bedingung wird gesetzt, wenn auf dem angegebenen Bildschirm ein anderes Fenster zur Dateneingabe gewhlt wird. Die Auswahl eines Fensters zur Dateneingabe kann mit der SEL Taste auf der Tastatur oder auf dem Programmierhandgert durch die Routine WIN_SEL vorgenommen werden. Nach Setzen der Bedingung mu die interne Routine SCRN_GET benutzt werden, um das gewhlte Fenster zu definieren. Fr weitere Informationen ber den Gebrauch von WIN_SEL und SCRN_GET, siehe das Kapitel "Liste der Internen Routinen". Zum Beispiel: WHEN WHEN WHEN WHEN WHEN WHEN POWERUP DO HOLD DO START DO EVENT AE_CALL DO SEGMENT WAIT weld_path DO WINDOW SELECT SCRN_USER DO

Die Ereignisse AC_CALL_TP, AC_CALL_CRT und AC_ABORT werden fr die Umgebung Application Aid benutzt, die zum Aktivieren oder Deaktivieren einer Anwendungssitzung durch den Befehl UTILITY APPLICATION im Systembefehlsmen verwendet wird. Dies impliziert, das es ein aktives PDL2 Programm gibt, das folgende Ereignisse enthlt: WHEN EVENT AC_CALL_TP WHEN EVENT AC_CALL_CRT DO WHEN EVENT AC_ABORT DO

8-8

00/1200

PDL2

BEDINGUNGSHANDLER

Das Ereignis AC_CALL_TP wird ausgelst, wenn der Befehl UTILITY APPLICATION vom Programmierhandgert aus angesetzt wird. Das Ereignis AC_CALL_CRT wird ausgelst, wenn der Befehl UTILITY APPLICATION auf der Tastatur des PC bei aktiven PCINT Tool (Emulieren von C3G Bildschirm/Tastatur) eingegeben wird. Wird eines dieser Ereignisse ausgelst, so wird die assoziierte Aktion ausgefhrt, und dies ist ein Mittel fr Programmentwickler, ihr eigenes Programm vom Systembefehlmen aus zu aktivieren. Wenn die Anwendungsumgebung aktiv ist, ist das Systembefehlmen vorbergehend deaktiviert, bis die Taste ^C auf der Einrichtung gedrckt wird, von der aus der Befehl UTILITY APPLICATION abgesetzt wurde. Drcken von ^C lst das Ereignis AC_ABORT aus, womit die angeforderten Aktionen durchgefhrt werden, die bei aktivierter Anwendungsumgebung vorgesehen sind. Es ist daran zu denken, dass das Ereignis AC_ABORT nur auslst, wenn die Anwendungsumgebung mit dem oben beschriebenen Mechanismus aktiviert wurde, und nicht bei einem Drcken der Taste ^C auerhalb dieser Umgebung (siehe EVENT 129).

ANWENDERereignisse
Diese Klasse von Ereignissen kann zur Programmsynchronisierung benutzt werden. Der Anwender kann seine eigenen Ereignisse definieren, indem er eine Zahl zwischen 49152 und 50175 mit der EVENT Bedingung definiert. Die Bedingung ist erfllt, wenn die Anweisung SIGNAL EVENT auf der spezifizierten Zahl vorkommt. Ein Beispiel: CONDITION[90]: WHEN EVENT 50100 DO $DOUT[25] := OFF ENDCONDITION <Anweisungen..> SIGNAL EVENT 50100 -- dies lst die Bedingung [90] aus Der Programmierer kann einen Programmnamen angeben oder das reservierte Wort ANY benutzen, un festzulegen, welches Programm das Ereignis verursachen muss, damit Anwenderereignisse ausgelst wird. Die Syntax ist folgende: ||By prog_name | BY ANY || Ist nichts angegeben, wird das Programm benutzt, in dem der Bedingungshandler definiert ist. Zum Beispiel: WHEN EVENT 49300 DO WHEN EVENT 49300 BY ANY DO WHEN EVENT 49300 BY weld_prog DO

FEHLERereignisse
Die Bedingung eines Fehlerereignisses berwacht das Auftreten eines Fehlers. Die Bedingung ist gegeben, wenn ein spezifiziertes Fehlerereignis eintritt, whrend der Bedingungshandler freigegeben ist. Die Abfrage des Bedingungsausdrucks erfolgt nur, wenn ein Fehler auftritt. Die Fehlerereignisse umfassen: ANYERROR: das Auftreten jedweden Fehlers; ERRORNUM n: das Auftreten eines Fehlers der Klasse n; ERRORCLASS n: das Auftreten eines Fehlers der zu der Klasse gehrt, die durch einer der folgenden vorbesetzten Konstanten identifiziert ist: Abbrechen einer unterbrechbaren Anweisung (52224-52233) Fehler bezglich einer Bedingung (25600-25607) Fehler der fortlaufenden Anzeige (29696-29715) Fehler in der Datei ERROR.LOG (27648-27660) Fehler im Dateisystem (768-788) Mathematische Konversionsfehler (21505-21516) 8-9

EC_BYPASS EC_COND EC_DISP EC_ELOG EC_FILE EC_MATH 00/1200

BEDINGUNGSHANDLER EC_PIO EC_PLC EC_PROG EC_RLL EC_SYS EC_SYS_C EC_TRAP EC_USER Dateieingabe - oder - ausgabefehler (514-583) SPS Fehler (31745-31811) Fehler bei Programmausfhrung (36864-37191) Fehler des bersetzers von PDL2 in RLL (32768-32798) Fehler im Systemzustand (28672-28803) Startup und SYS_CALL Fehler (24576-24587) Von PDL2 erkennbare Fehler (39937-40059) Anwenderdefinierte Fehler (49152-50176)

PDL2

Das Tool PCINT, das auf dem PC luft, kann dazu benutzt werden, die Dokumentation ber C3G Fehler einzusehen. Der Programmierer kann einen Programmnamen angeben oder das reservierte Wort ANY verwenden, um zu spezifizieren, von welchem Programm der Fehler fr ein beliebiges Fehlerereignis verursacht werden mu. Die Syntax ist folgende: ||BY prog_name | BY ANY || Wenn nichts angegeben wird, verwendet man das Programm, in dem der Bedingungshandler definiert ist. Zum Beispiel: WHEN ANYERROR DO WHEN ERRORCLASS EC_FILE BY ANY DO WHEN ERRORNUM 36939 BY weld_prog DO Der Wert von $THRD_ERROR fr die durch die Fehlerereignisse aktivierten Interrupt Routinen ist gleich der Nummer des Fehlers, der das Ereignis ausgelst hat.

PROGRAMMereignisse
Die Bedingung eines Programmereignisses berwacht ein vom Programm verursachtes Ereignis. Die Bedingung ist gegeben, wenn das angegebene Programmereignis eintritt, whrend der Bedingungshandler freigegeben ist. Die Abfrage des Bedingungsausdrucks erfolgt nur, wenn ein Programmereignis eintritt. Die Programmereignisse umfassen: ACTIVATE: Aktivierung der Programmausfhrung; DEACTIVATE: Deaktivierung der Programmausfhrung; PAUSE: Unterbrechung der Programmausfhrung; UNPAUSE: Beseitigung der Bedingung fr die Unterbrechung des Programms; EXIT CYCLE: Verlassen des laufenden Zyklus und Start des folgenden Zyklus.

Der Programmierer kann einen Programmnamen angeben oder das reservierte Wort ANY verwenden, um ein beliebiges Programm zu spezifizieren. Zum Beispiel: WHEN WHEN WHEN WHEN WHEN ACTIVATE DO DEACTIVATE weld_prog DO PAUSE ANY DO UNPAUSE DO EXIT CYCLE DO

EREIGNIS BEI ABBRUCH EINER UNTERBRECHBAREN ANWEISUNG


Diese Ereignisklasse kann benutzt werden, um das Interpretieren unterbrechbarer Anweisungen (MOVE, DELAY, WAIT, WAIT FOR, READ, PULSE, SYS_CALL) abzubrechen. Das kann geschehen durch: Drcken der Taste ^C auf der laufenden Anweisung bei Arbeiten in den Umgebungen PROGRAM EDIT oder MEMORY DEBUG; Drcken der Pfeiltaste nach oben oder unten bei Arbeiten in der EZ Umgebung; 00/1200

8-10

PDL2

BEDINGUNGSHANDLER

Absetzen des Befehl PROGRAM STATE BYPASS im Systembefehlmen oder der BYPASS Anweisung.

Es wird derselbe Mechanismus wie bei Fehlerereignissen benutzt. Es gibt eine neue Klasse von Fehlern zwischen 52224 und 52233 mit folgender Bedeutung: 52224 - ^C oder BYPASS auf Bewegung auf ARM [1] 52225 - ^C oder BYPASS auf Bewegung auf ARM [2] 52226 - ^C oder BYPASS auf Bewegung auf ARM [3] 52227 - ^C oder BYPASS auf Bewegung auf ARM [4] 52228 - ^C oder BYPASS auf SYS_CALL 52229 - ^C oder BYPASS auf PULSE 52230 - ^C oder BYPASS auf READ 52231 - ^C oder BYPASS auf DELAY 52232 - ^C oder BYPASS auf WAIT 52233 - ^C oder BYPASS auf WAIT FOR

Zum berwachen des Ereignisses sollte der Anwender ein Fehlerereignis (WHEN ERRORNUM) schreiben und dabei einen der oben aufgelisteten Fehler spezifizieren. Dieses Ereignis sollte ggf. durch eine BY Klausel mit dem gewnschten Programm verknpft werden. Der BY Klausel knnen ein oder mehrere Programmnamen oder das reservierte Wort ANY folgen. Es kann auch die Bedingung WHEN ERROR CLASS EC_BYPASS benutzt werden, um die ganze Ereignisklasse zu berwachen. Das mit der BY Klause verknpfte Ereignis reprsentiert: das Programm, das in der Umgebung PROGRAM EDIT oder MEMORY DEBUG ausgefhrt, wenn die Taste ^C gedrckt wird, whrend der Cursor auf einer unterbrechbaren Anweisung steht; das Programm, das in der EZ Umgebung ausgefhrt wird, wenn die Pfeiltaste nach unten oder oben gedrckt wird, whrend der Cursor auf einer unterbrechbaren Anweisung steht; das Programm, das die unterbrechbare Anweisung ausfhrte, die durch eine BYPASS Anweisung oder einen SYS_CALL des Befehls PROGRAM STATE BYPASS verlassen wurde.

Die BY kann auch nicht angegeben werden, wenn die berwachung auf Abbrechen von unterbrechbaren Anweisungen das Programm betrifft, das die CONDITION definiert. Zum Beispiel: CONDITION [1]: WHEN ERRORNUM 52230 BY pippo DO -- ^C oder Bypass auf READ ausgefhrt aus pippo PAUSE pluto -- Pause Programm Pluto WHEN ERRORNUM 52225 BY ANY DO -- ^C oder Bypass auf MOVE auf ARM 2 ausgefhrt von ANY PAUSE -- dies Programm geht in Pause ENDCONDITION ENABLE CONDITION [1] Natrlich kann dieses Ereignis in einer WAIT FOR Anweisung benutzt werden. Zum Beispiel: WAIT FOR ERRORNUM 52228 BY pluto

BEWEGUNGSereignisse
Eine Bedingung fr ein Bewegungsereignis berwacht ein Ereignis, das sich auf eine gewisse Strecke der Bewegung bezieht. Die Bedingung ist gegeben, wenn das angegebene Bewegungsereignis eintritt, whrend der Bedingungshandler freigegeben ist. Die Abfrage des Bedingungsausdrucks erfolgt nur, wenn ein Bewegungsereignis eintritt. Die Bewegungsereignisse umfassen: TIME int_expr AFTER START: seit Beginn der Bewegung abgelaufene Zeit. Int_expr ausgedrckt in msek. 8-11

00/1200

BEDINGUNGSHANDLER

PDL2

TIME int_expr BEFORE END: vor Ende der Bewegung abgelaufene Zeit. Int_expr ausgedrckt in msek. DISTANCE real_expr AFTER START: seit Beginn der Bewegung durchlaufene Strecke. Real_expr ausgedrckt in mm. DISTANCE real_expr BEFORE VIA: Strecke vor der VIA Position. Real_expr ausgedrckt in mm. DISTANCE real_expr AFTER VIA: Strecke nach der VIA Position. Real_expr ausgedrckt in mm. DISTANCE real_expr BEFORE END: Strecke vor Ende der Bewegung. Real_expr ausgedrckt in mm. PERCENT int_expr AFTER START: seit Beginn der Bewegung durchlaufener Prozentteil der Strecke. PERCENT int_expr BEFORE END: vor Ende der Bewegung durchlaufener Prozentteil der Strecke. AT START: Beginn der Bewegung. AT VIA: Erreichen der VIA Position. AT END: Ende der Bewegung. RESUME: Wiederaufnahme der Bewegungsausfhrung; STOP: Anhalten der Bewegung.

Die reservierten Wrter START und END beziehen sich auf den Anfang und das Ende der Strecke einer Bewegung. Das reservierte Wort VIA bezieht sich auf die in der VIA Klausel einer MOVE Anweisung spezifizierte Zwischenposition einer Bewegung. (VIA wird i.A. fr Kreisbewegungen benutzt). PERCENT bezieht sich auf den Prozentwert der schon durchlaufenden Distanz. Zum Beispiel: WHEN WHEN WHEN WHEN WHEN TIME 200 AFTER START DO DISTANCE 500 BEFORE END DO PERCENT 30 AFTER START DO AT END DO AT VIA DO

Bewegungsereignisse knnen sich in einem Bedingungshandler nicht auf verschiedene Arme beziehen. Die Bewegung WHEN PERCENT ist auch bei Gelenkbewegungen zulssig. Die Bedingung kann nicht freigegeben werden, wenn einer der Werte eines Ausdrucks auerhalb des Bereichs der Bewegungsstrecke liegt; wenn z.B. die Zeit vor dem Ende lnger als die gesamte fr den Bewegungsabschnitt vorausgesehene Zeit ist. Es ist daran zu denken, dass bei Ausfhren von Kreisbewegungen zwischen PATH Knoten Bedingungen nicht mit dem VIA Knoten verknpft werden drfen, da sie nicht auslsen. Aus diesem Grund mssen AT VIA Bedingungen mit dem Zielknoten der Kreisbewegung und nicht mit dem VIA knoten aktiviert werden. Zum Beispiel: PROGRAM example TYPE ndef = NODEDEF $MAIN_POS $MOVE_TYPE $COND_MASK ENDNODEDEF VAR path_var : PATH OF ndef int_var: INTEGER BEGIN CONDITION[5] : -- Definieren einer AT VIA Bedingung WHEN AT VIA DO $FDOUT[5] := ON ENDCONDITION NODE_APP(path_var, 10) -- Anhngen von 10 Knoten an den Pfad path_var 8-12 00/1200

PDL2

BEDINGUNGSHANDLER

path_var.COND TBL[2] := 5 -- Einsetzen eines Elements der Bedingungstabelle FOR int var := 1 TO 10 DO -- Zuweisen von Werten zu Pfadknoten mit der Systemfunktion POS path_var.NODE[int_var].$MAIN_POS := POS(...) path_var.NODE[int_var].$MOVE_TYPE := LINEAR path_var.NODE[int_var].$COND_MASK := 0 ENDFOR -- Verknpfen der AT VIA Bedingung mit Knoten 5 path_var.NODE[5].$COND_MASK := 2 -- Definieren von Knoten 4 als dem VIA Punkt path_var.NODE[4].$MOVE_TYPE := SEG_VIA -- Definieren einer Kreisbewegung zwischen Knoten 3 und 5 path_var.NODE[5].$MOVE_TYPE := CIRCULAR CYCLE -- Ausfhren der Bewegung lngs dem Pfad -- Die Interpolation durch die Knoten ist LINEAR auer -- zwischen den Knoten 3.. 5, wo sie CIRCULAR ist. MOVE ALONG path_var[1..9] END example
Siehe auch das Kapitel "Bewegungssteuerung" fr weitere Einzelheiten zu Bedingungen in PATH. Die Bedingungen der Bewegungsereignisse STOP, RESUME, AT START und AT END knnen mit Bedingungshandlern, die fr das ganze System global freigegeben sind, benutzt werden. Es tritt ein Fehler auf, wenn die ENABLE Anweisung oder Funktion einen Bedingungshandler enthlt, zu dem andere Bewegungsereignisse gehren. Die global freigegebenen Bewegungsereignisse wirken auf alle Strecken der Bewegung. Sie wirken also auf jede MOVE Anweisung und jedes Knotensegment einer Zweigbewegung. Hinweis: STOP, RESUME und AT END, wenn lokal in einer MOVE Anweisung benutzt, lsen nicht bei Wiederherstellen einer unterbrochenen Bahn aus, wenn die Wiederherstellungsoperation auf dem Endpunkt erfolgt. Um zu entdecken, wann der Roboter nach Abbrechen einer Bewegungsanweisung (^C oder Bypass) anhlt, muss die WHEN STOP Bedingung global aktiviert sein. Wird sie lokal mit der MOVE Anweisung benutzt, lst sie nicht aus. Wenn das Bewegungsereignis auslst, wird die vorbesetzte $THRD_PARAM auf der Nummer des Knotens gesetzt, der mit dem ausgelsten Bewegungsereignis verknpft ist.

AKTIONEN
Die folgenden Aktionen knnen in einer action_list enthalten sein:

ZUWEISUNGSaktion
Diese Aktion weist einer vom Anwender definierten statischen Variablen, einer Systemvariablen oder einem Ausgang einen Wert zu. Der Wert kann eine vom Anwender definierte statische Variable, eine vorbesetzte Variable, ein Matrizelement, eine Konstante oder ein literaler Wert sein. Eine lokale Variable oder ein Parameter knnen nicht als Wert oder zugewiesene Variable benutzt werden. Falls eine Variable als rechter Operand des := Operators benutzt wird, braucht diese nicht bei der Definition des Bedingungshandlers oder bei Ausfhrung der Aktion initialisiert zu werden. Zum Beispiel:

int_var := 4 $DOUT[22] := ON int_var := other_int_var


Ist other_int_var im obigen Beispiel nicht initializiert, wenn die Aktion stattfindet, so wird int_var auf nicht initialisiert gesetzt.

00/1200

8-13

BEDINGUNGSHANDLER

PDL2

Wenn eine nicht initialisierte Boole'sche Variable einem Ausgangsport zugewiesen wird, ist der Port automatisch auf TRUE gesetzt. Das folgende Beispiel gilt nur innerhalb von Bedingungsaktionen - ein Fehler wrde in eine normale Programmanweisung zurckgebracht. $DOUT[25] := b -- b ist eine nicht initialisiert Boole'sche Variable -- $dout[25] wird auf AN gesetzt

INCREMENT- und DECREMENT-Aktionen


Die Inkremntieraktion addiert einen Wert zu einer ganzzahligen Programmvariablen; die Dekrementieraktion zieht einen Wert von einer ganzzahligen Programmvariablen ab. Der Wert kann eine statische Benutzer-definierte Variable, eine Konstante oder ein Literal sein. Lokale Variable oder Parameter knnen nicht als Wert oder zugewiesene Variablen dienen. Wenn eine Variable als der linke Operand eines += oder -= Operators verwendet wird, braucht sie nicht initialisiert zu werden, wenn der Bedingungshandler definiert oder die Aktion durchgefhrt wird. Zum Beispiel:

int_var int_var int_var int_var

+= -= += -=

4 4 other_int_var other_int_var

INTERNE Aktionen
Interne Aktionen sind interne Prozeduren, die als Aktionen fr einen Bedingungshandler benutzt werden knnen. Derzeit sind nur die internen Prozeduren BIT_SET und BIT_CLEAR zulssig. Beim Aufruf einer internen Prozedur als Aktion knnen lokale Variablen nicht als Parameter benutzt werden, die per Verweis bergeben werden. Siehe das Kapitel "Liste der internen Routinen" fr mehr Information ber die betreffenden internen Routinen. Zum Beispiel: BIT_SET(int_var, 1) BIT_CLEAR($WORD[12], int_var) BIT_ASSIGN(int_var, 4, bool_var, TRUE, FALSE)

SEMAPHORE Aktion
Die Semaphore Aktionen lschen oder signalisieren das Vorhandensein von Semaphorvariablen, whrend die SIGNAL Aktion die angegebene Semaphorvariable aussendet. Falls Programme darauf warten, wird das erste von ihnen ausgefhrt. Die CANCEL semaphore Aktion setzt den Signalzhler der angegebenen Semaphorvariablen auf Null. Warten Programme auf diese Semaphorvariable, so tritt ein Fehler auf. Diese Funktion hat die gleiche Wirkung wie die assoziierten Anweisungen, beschrieben im Kapitel "Ausfhrungssteuerung". Zum Beispiel: SIGNAL semaphore_var CANCEL semaphore_var Semaphore_var kann nicht eine lokale Variable oder ein Parameter sein.

MOTION und ARM Aktionen


Die Motion Aktionen knnen eine Bewegung lschen, whrend die Arm Aktionen Arme aus einer Reservierung entlassen, sperren und die Sperrung aufheben. Diese Aktionen haben dieselbe Auswirkung wie die assoziierten Anweisungen, wie im Kapitel "Bewegungssteuerung" beschrieben wurde. Die folgenden Aktionen (mit Ausnahme von SIGNAL SEGMENT) knnen fr den Standardarm, fr einen oder mehrere spezifizierte Arme oder fr alle Arme benutzt werden. Die RESUME Aktion produziert nicht immer die Ausfhrungsreihenfolge, wie aus der Aktionsliste erwartet. Die RESUME Aktion wird nach allen anderen Aktionen auer der Routineaufruf-Aktion ausgefhrt. Die anderen Aktionen werden in der Reihenfolge ausgefhrt, in der sie auftreten. CANCEL: lscht eine Bewegung; SIGNAL SEGMENT: nimmt die Zweigbewegung wieder auf; DETACH: gibt reservierte Arme frei; 00/1200

8-14

PDL2

BEDINGUNGSHANDLER

LOCK: sperrt einen Arm (oder mehrere Arme); RESUME: nimmt eine aufgrund einer LOCK Anweisung suspendierte Bewegung wieder auf; UNLOCK: gibt einen Arm (oder mehrere Arme) frei.

Zum Beispiel: CANCEL CURRENT CANCEL CURRENT SEGMENT SIGNAL SEGMENT weld_path DETACH ARM[1] LOCK ARM[1], ARM[2] RESUME ARM[1], ARM[2] UNLOCK ALL

ALARM Aktionen
Die CANCEL ALARM Aktion lscht den Alarmzustand des Systems. Diese Aktion hat die gleiche Wirkung wie die assoziierte Anweisung, beschrieben im Kapitel "Liste der Anweisungen". Zum Beispiel: CANCEL ALARM

PROGRAM Aktionen
Die Program Aktionen starten und stoppen die Ausfhrung des Programms. Diese Aktionen haben dieselbe Auswirkung wie die assoziierten Anweisungen, wie in Kapitel "Ausfhrungssteuerung" beschrieben. PAUSE: Unterbrechung der Programmausfhrung; UNPAUSE: Beseitigung der Bedingung der Programmunterbrechung; DEACTIVATE: Deaktivierung der Programmausfhrung; ACTIVATE: Aktivierung der Programmausfhrung; EXIT CYCLE: Verlassen des laufenden Zyklus und Start des folgenden Zyklus; BYPASS: bricht eine unterbrechbare Anweisung ab (READ, WAIT on a semaphore, WAIT FOR, SYS_CALL, DELAY, PULSE, MOVE), die gerade ausgefhrt wird.

Der Programmierer kann ein Programm oder eine Liste von Programmen angeben. Fr die ACTIVATE Aktion mu ein Programm angegeben werden. Zum Beispiel: PAUSE UNPAUSE DEACTIVATE weld_prog ACTIVATE util_prog EXIT CYCLE prog_1, prog_2, prog_3

Aktionen fr BEDINGUNGSHANDLER
Es werden die folgenden Operationen ausgefhrt: ENABLE CONDITION: gibt den/die angegebenen Bedingungshandler frei; DISABLE CONDITION: sperrt den/die angegebenen Bedingungshandler; PURGE CONDITION: entfernt den/die angegebenen Bedingungshandler; DETACH CONDITION: hebt die Reservierung des/die angegebenen Bedingungshandler auf.

Diese Aktionen haben dieselbe Auswirkung wie die assoziierten Anweisungen, wie in diesem Kapitel schon beschrieben. Der Programmierer kann eine einzelne Bedingung oder eine Reihe von Bedingungen angeben. 00/1200 8-15

BEDINGUNGSHANDLER

PDL2

DETACH Aktion
Die DETACH Aktion wird benutzt, um die Kontrolle eines reservierten Betriebsmittels wieder freizugeben. Dieses Betriebsmittel kann ein Arm (wie schon im Zusammenhang mit anderen die Arme betreffende Aktionen beschrieben), eine Einrichtung, ein Bedingungshandler (wie schon im Zusammenhang mit anderen die Bedingungssteuerung betreffende Aktionen beschrieben) oder ein Zeitgeber sein. Die DETACH Aktion hat dieselbe Bedeutung wie die assoziierte DETACH Anweisung, beschrieben im Kapitel "Liste der Anweisungen". Zum Beispiel: DETACH $TIMER[2] -- gibt einen Zeitgeber frei DETACH CRT2: -- gibt ein Fenster frei

PULSE Aktion
Die Aktion kehrt den momentanen Zustand eines digitalen Ausgangssignals fr eine spezifizierte Anzahl von Millisekunden um. Diese Aktion hat dieselbe Auswirkung wie die assoziierte PULSE Anweisung, wie im Kapitel "Liste der Anweisungen" beschrieben. Wenn PULSE als Aktion verwendet wird, mu die ADVANCE Klausel benutzt werden. Zum Beispiel: PULSE $DOUT[21] FOR 200 ADVANCE

HOLD Aktion
Die HOLD Aktion versetzt das System in den HOLD Zustand. Das bedeutet, da alle in Ausfhrung begriffenen holdable Programme in den Zustand ready versetzt werden und alle Bewegungen gestoppt werden.

SIGNAL EVENT Aktion


Die SIGNAL EVENT Aktion bewirkt das Auslsen des betreffenden Anwenderereignisses im Bereich 49152-50175, sofern im System solche definiert und aktiviert sind. Diese Aktion hat denselben Effekt wie die entsprechende Anweisung wie im Kapitel "Liste der Anweisungen" erlutert. Zum Beispiel: SIGNAL EVENT

50000

ROUTINE CALL Aktion


Die Aktion zum Routineaufruf unterbricht die Ausfhrung des Programms, um die angegebene Prozedurroutine aufzurufen. Die folgenden Einschrnkungen betreffen die Interrupt Routinen: Die Routine mu vom Anwender definiert werden (nicht intern). Die Routine darf nicht mehr als 16 Parameter haben und mu eine Prozedur sein. Mit Ausnahme von INTEGER, REAL und BOOLEAN Argumenten mssen alle Argumente mittels Verweis bergeben werden. Alle bergebenen Argumente mssen global sein und drfen nicht fr die Routine lokal sein. Das aufrufende Programm wird suspendiert, whrend die Interruptroutine ausgefhrt wird. Die Interrupt Routinen knnen von anderen Interrupt Routinen unterbrochen werden.

Die an eine Interrupt Routine nach Wert bergebenen Argumente benutzen den Wert zum Zeitpunkt der Definition des Bedingungshandlers (und nicht denjenigen bei seiner Freigabe). Jede Interrupt Routine erzeugt eine neue Kopie der vorbesetzten Variablen $THRD_ERROR, die auf Null gesetzt wird, wenn die Interrupt Routine nicht infolge eines Fehlerereignisses aktiviert wird. Ist der Interrupt durch ein Fehlerereignis verursacht, so wird $THRD_ERROR auf der Basis der Nummer des Fehlers, der die Freigabe des Ereignisses verursacht hat, initialisiert. Fr die programmspezifischen vorbesetzten Variablen, den Arm, die Prioritt und den Stack benutzen die Interrupt Routinen dieselben Werte sowie die gleichen erkennbaren Fehler wie das Programm, auf das sie einwirken. 8-16 00/1200

PDL2

BEDINGUNGSHANDLER

Routinen zum Bedienen von Interrupts sollten so kurz wie mglich geschrieben werden und keine unterbrechbaren Anweisungen (WAIT FOR, DELAY, etc) enthalten. Diese Routinen werden vom Interpreter im Multitaskbetrieb zusammen mit allen anderen im System aktiven Programmen ausgefhrt. Wenn ein anderes Programm eine hhere Prioritt hat als das mit dem Interrupt, so wird die Routine erst ausgefhrt, wenn das Programm mit der hheren Prioritt unterbrochen wird. Eine Interrupt Service Routine kann ihrerseits von einem aktivierten Bedingungshandler unterbrochen werden. Suspendierbare oder langlaufende Interrupt Service Routinen knnen den Programmkeller fllen und dem System wichtige Ressourcen entziehen. Das Unterbrechen einer Interrupt Service Routine durch eine andere kann mit der Anweisung DISABLE INTERRUPT unterbunden werden. Siehe das Kapitel "Liste der Anweisungen".

AUSFHRUNGSORDNUNG
Aktionen werden in der Reihenfolge ausgefhrt, in der sie aufgelistet sind. Die PDL2 Syntax fordert, dass alle Interrupt Service Routinen zuletzt aufgelistet werden, d.h. als letzte ausgefhrt werden. Die einzige Ausnahme bildet die RESUME Aktion. Das folgenden Beispiel zeigt eine Aktionssequenzen, die nicht der erwarteten Reihenfolge entsprechen. CONDITION[1] : WHEN $DIN[1] DO UNLOCK ARM[1] RESUME ARM[1] $DOUT[1] := ON User_isr ENDCONDITION

-----

Entsperren eines Arms, Neustart einer Bewegung zu ermglichen Wiederaufnahme einer Armbewegung Anzeige zur Auenwelt, dass eine Bewegung gestartet wurde Anwender-definierte Routine

Wenn das obige Beispiel auerhalb eines Bedingungshandler ausgefhrt wrde, wrde es das Ergebnis ergeben, das bei Entsperren eines Arms erwartet wird: Wiederaufnahme der Bewegung, Setzen eines Signals und dann Aufruf einer Routine. Werden diese Programmschritte innerhalb einer Bedingungsanweisung ausgefhrt, wird der digitale Ausgang gesetzt, bevor die RESUME Aktion ausgefhrt wird. Denn die RESUME Aktion wird immer erst ausgefhrt, wenn alle anderen Aktionen auer den Routineaufrufen erledigt sind.

00/1200

8-17

BEDINGUNGSHANDLER

PDL2

Diese Seite wurde absichtlich leer gelassen

8-18

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER

Handbuch fr Programmiersprache

1 2 3 4 5 6 7 8

SPS FUNKTIONEN
LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

9
10 11 12 A B C D Index

INHALT
Abschnitt KOMPONENTEN DER SPRACHE . . . . . . . . . KONSTANTEN . . . . . . . . . . . . . . . . . VARIABLEN . . . . . . . . . . . . . . . . . . . BOOLEAN E/A Matrizen:. . . . . . . . . . . INTEGER E/A Matrizen: . . . . . . . . . . . OPERATOREN . . . . . . . . . . . . . . . . . VOM ANWENDER DEFINIERTE ROUTINEN . ANWEISUNGEN . . . . . . . . . . . . . . . . INTERNE SPS ROUTINEN . . . . . . . . . ZHLER/ZEITGEBER ANWEISUNGEN. . . MATHEMATISCHE ANWEISUNGEN . . . . VERSCHIEBUNGSANWEISUNGEN . . . . WORD ANWEISUNGEN . . . . . . . . . . . BEDINGTE/UNBEDINGTE ANWEISUNGEN BIT ANWEISUNGEN. . . . . . . . . . . . . ONE-SHOT ANWEISUNGEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seite . . . . . . . . . . . . . . . . 9-1 9-1 9-1 9-1 9-1 9-2 9-2 9-2 9-2 9-3 9-4 9-4 9-4 9-5 9-5 9-6

SPS FUNKTIONEN

Handbuch fr Programmiersprache

PDL2

Diese Seite wurde absichtlich leer gelassen

PDL2

SPS FUNKTIONEN

SPS FUNKTIONEN
In industriellen Automationsstraen ist fast immer eine programmierbare Steuerung (SPS) zur berwachung einer Reihe von Armen oder zur Steuerung der Komponenten einer Arbeitsstation (Arme, Werkzeugmaschinen und lokale Logik) notwendig. Die Steuereinheit C3G erfllt diese Aufgabe, ohne dass zustzliche Steuereinheiten bentigt werden, indem der SPS Proze gleichzeitig mit den Programmen, die die Steuerung der Arme verwalten, programmiert und ausgefhrt wird. Die C3G Steuereinheit kann eine SPS Software-Karte (Standard) oder eine optionale SPS Karte enthalten. In beiden Fllen kann die SPS mit Hilfe der Programmiersprache PDL2 oder TISOFT programmiert werden, um RLL Programme (relay ladder logic) zu erstellen. Die RLL Programme fhren die Logikfunktion aus. Das Handbuch TISOFT User's Manual gibt Erluterungen zur Programmierung in RLL mit TISOFT. (Fr weitere Details ber SPS siehe "SPS C3G Handbuch"). In der C3G Steuereinheit sind die RLL Programme von den normalen PDL2 Programmen getrennt, so da ihre Ausfhrung von anderen PDL2 Programmen nicht beeinflut wird. Ein RLL Programm kehrt, wenn es sein Ende erreicht, automatisch zum Anfang des Programms zurck und fhrt so einen kontinuierlichen Zyklus aus. Ein RLL Programm wird ausgefhrt, sobald es aktiviert ist. Ein RLL Programm wird von den Programmen und Steuerungen der PDL2 Programme nicht beeinflut. RLL Programm ist in allen Zustnden aktiv, einschlielich Alarm- und drive-off Zustnden.

Gemeinsam benutzte, vorbesetze Variablen stellen die Verbindungen zwischen den PDL2 und den RLL Programmen her, wie in diesem Kapitel beschrieben wird. Die in RLL bersetzbaren PDL2 Programme knnen geschrieben werden, indem man Unteranweisungen von PDL2 und besondere interne SPS Routinen verwendet. Das Attribut des SPS Programms mu in der PROGRAM Anweisung angegeben werden. In diesem Kapitel werden die in SPS PDL2 Programmen zulssigen Sprachkomponenten und internen Routinen aufgelistet.

KOMPONENTEN DER SPRACHE


SPS Programme knnen, wie auch die PDL2 Programme, Leerstellen und Kommentare enthalten. Es knnen Etikette verwendet werden, auch wenn GOTO Anweisungen im Programm nur nach vorne springen knnen. Die folgenden Abschnitte geben die Komponenten der Sprache PDL2 wieder, die in den SPS Programmen verwendet werden knnen.

KONSTANTEN
Die Konstanten knnen literale Werte sein (z. B.: 0 und 12), vorbesetzte (z.B.: TRUE und FALSE) oder vom Anwender definierte Werte (z.B.: CONST max = 10). Es sind INTEGER und BOOLEAN Konstanten zugelassen.

VARIABLEN
Vom Anwender definierten Variablen knnen in SPS Programmen nicht verwendet werden, whrend die vorbesetzten Variablen INTEGER, BOOLEAN einschlielich der E/A Matrizen verwendet werden knnen. Das sind:

BOOLEAN E/A Matrizen:


$DIN[i] $DOUT[i] $BIT[i] -- Zugriff zum Lesen -- Zugriff zum Lesen/Schreiben -- Zugriff zum Lesen/Schreiben

INTEGER E/A Matrizen:


$AIN[i] $AOUT[i] $WORD[i] $PLCSTW[i] ----Zugriff Zugriff Zugriff Zugriff zum zum zum zum Lesen Lesen/Schreiben Lesen/Schreiben Lesen/Schreiben

00/1200

9-1

SPS FUNKTIONEN $GIN[i] $GOUT[i] -- Zugriff zum Lesen -- Zugriff zum Lesen/Schreiben

PDL2

Die Indizes ([i]), die E/A Matrizen darstellen, mssen Konstante oder Konstantenausdrcke sein.

OPERATOREN
Die Zuweisung (: =) kann verwendet werden, um den vorbesetzten Variablen, einschlielich den E/A Matrizen, Werte zuzuweisen. Doch sind in den SPS Programmen keine realen Werte und Ausdrcke zulssig. SPS Programme akzeptieren die folgenden BOOLEAN Operatoren: = <> AND OR XOR NOT

In SPS Programme werden die folgenden INTEGER Operatoren benutzt: + * DIV MOD = <> < <= > >= AND OR XOR - (unary) NOT

Ergebnis der INTEGER Operationen sind 16 Bit Werte. Wenn das Ergebnis grer ist, wird es automatisch ohne Fehleranzeige auf 16 Bit abgeschnitten.

VOM ANWENDER DEFINIERTE ROUTINEN


Vom Anwender definierten Routinen knnen verwendet werden. Es knnen ihnen aber keine Parameter, Rckgabewerte oder lokal vereinbarte Variablen zugeordnet werden.

ANWEISUNGEN
In SPS Programmen knnen die folgenden PDL2 Anweisungen verwendet werden: PROGRAM prog_name PLC CONST -- nur INTEGER und BOOLEAN ROUTINE rout_name BEGIN CYCLE EXIT CYCLE IF <ELSE> ENDIF SELECT CASE <ELSE> ENDSELECT GOTO -- nur vorwrts PULSE FOR ADVANCE END prog_name

INTERNE SPS ROUTINEN


PDL2 enthlt interne SPS Routinen, die genau den RLL Anweisungen entsprechen. (Fr weitere Informationen ber RLL siehe TISOFT 2 User's Manual). Alle diese internen Routinen sind Prozeduren: keine gibt also Werte zurck. Die Parameter knnen nur einzelne Variablen sein oder konstante Ausdrcke, wie in den vorangegangen Abschnitten beschrieben wurde; keinesfalls knnen sie Ausdrcke von Variablen sein.

9-2

00/1200

PDL2

SPS FUNKTIONEN

ZHLER/ZEITGEBER ANWEISUNGEN
Die Zeitgeber und die Zhler mssen der Reihenfolge nach numeriert werden. Diese Einrichtungen benutzen denselben Speicherbereich, und knnen also nicht dieselben Kennummern haben.

!TMRF(ref_num, start, preset, enable, output)


Parameter: ref_num start preset enable output 1..1024 $DIN[i], $DOUT[i], oder $BIT[i] 0..32767 0, $DIN[i], $DOUT[i], oder $BIT[i] $DOUT[i] oder $BIT[i]

Die Anweisung !TMRF (timer fast = Zeitgeber schnell) wird in Schritten zu 1 Millisekunde zur Zeitbestimmung von Ereignissen erniedrigt.

!TMR(ref_num, start, preset, enable, output)


Parameter: ref_num start preset enable output 1..1024 $DIN[i], $DOUT[i], oder $BIT[i] 0..32767 0, $DIN[i], $DOUT[i], oder $BIT[i] $DOUT[i] oder $BIT[i]

Die Anweisung !TMR (timer = Zeitgeber) wird in Schritten zu 0,1 Millisekunden zur Zeitbestimmung von Ereignissen erniedrigt.

!CTR(ref_num, input, preset, enable, output)


Parameter: ref_num input preset enable output 1..1024 $DIN[i], $DOUT[i], oder $BIT[i] 0..32767 0, $DIN[i], $DOUT[i], oder $BIT[i] $DOUT[i] oder $BIT[i]

Der Anweisung !CTR (counter = Zhler) zhlt wiederkehrende Ereignisse bis max 32767.

!UDC(ref_num, up_input, down_input, preset, enable, z_output, output)


Parameter: ref_num up_input down_input preset enable z_output output 1..1024 $DIN[i], $DOUT[i], oder $BIT[i] $DIN[i], $DOUT[i], oder $BIT[i] 0..32767 0, $DIN[i], $DOUT[i], oder $BIT[i] $DOUT[i] oder $BIT[i] $DOUT[i] oder $BIT[i]

Die Anweisung !UDC (up-down counter = Zhler erhhen/erniedrigen) zhlt die Anzahl der eingetretenen Ereignisse von min. 0 bis max. 32767.

00/1200

9-3

SPS FUNKTIONEN

PDL2

MATHEMATISCHE ANWEISUNGEN
!SQRT(value, result, output)
Parameter: value result output $WORD[i], $AIN[i], $AOUT[i], $GIN[i], oder $GOUT[i] $WORD[i], $AOUT[i], oder $GOUT[i] $DOUT[i] oder $BIT[i]

Die Anweisung !SQRT (square root = Quadratwurzel) errechnet die Quadratwurzel aus einem ganzzahligen positiven Wert und speichert das Ergebnis. Der interne Wert behlt seinen ursprnglichen Wert bei. Das Ergebnis ist ein 32 Bit Wert, der in result_iport[i] und result_iport[i+1] gespeichert ist.

!MULT(multiplicand, multiplier, result, output)


Parameter: multiplicand multiplier result output $WORD[i], $AIN[i], $AOUT[i], $GIN[i], oder $GOUT[i] $WORD[i], $AIN[i], $AOUT[i], $GIN[i], oder $GOUT[i] $WORD[i], $AOUT[i], oder $GOUT[i] $DOUT[i] oder $BIT[i]

Die Anweisung !MULT (multiply = Multiplikation) multipliziert zwei ganzzahlige 16 Bit Werte und erzeugt einen zu speichernden 32 Bit Wert. Das Ergebnis wird in result_iport[i] und result_iport[i+1] gespeichert.

!DIV(dividend, divisor, result, output)


Parameter: dividend divisor result output $WORD[i], $AIN[i], $AOUT[i], $GIN[i], oder $GOUT[i] $WORD[i], $AIN[i], $AOUT[i], $GIN[i], oder $GOUT[i] $WORD[i], $AOUT[i], oder $GOUT[i] $DOUT[i] oder $BIT[i]

Die Anweisung !DIV (division = Division) teilt einen ganzzahligen 32 Bit Wert durch einen ganzzahligen 16 Bit Wert und erzeugt einen 16 Bit Quotienten und einen 16 Bit Rest. Der Quotient wird in result_iport[i] und der Rest in result_iport[i+1] gespeichert.

VERSCHIEBUNGSANWEISUNGEN
!MOVW(source, destination, length)
Parameter: source destination length $PLCSTW[i], $WORD[i], $AIN[i], $AOUT[i], $GIN[i], oder $GOUT[i] $WORD[i], $AOUT[i], oder $GOUT[i] 1..256

Die Anweisung !MOVW (move word = Wort verschieben) verschiebt bei einer einzelnen Abtastung bis max. 256 Wrter vom angegebenen Quellepunkt an und endet in dem als Ziel angegebenen Punkt.

WORD ANWEISUNGEN
!CBD(source, result, output)
Parameter: source result output $WORD[i], $AIN[i], $AOUT[i], $GIN[i], oder $GOUT[i] $WORD[i], $AOUT[i], oder $GOUT[i] $DOUT[i] oder $BIT[i]

Die Anweisung !CBD (convert binary to BDC = Konvertieren eines Binrwerts in BCD) konvertiert einen binren Eingang in entsprechende Dezimalwerte in BCD (Binary Coded Decimal). Ganze binre Werte bis 32767 werden in entsprechende BCD Werte konvertiert.

9-4

00/1200

PDL2

SPS FUNKTIONEN

!CDB(source, result, length, output)


Parameter: source result length output $WORD[i], $AIN[i], $AOUT[i], $GIN[i], oder $GOUT[i] $WORD[i], $AOUT[i], oder $GOUT[i] 1..4 $DOUT[i] oder $BIT[i]

Die Anweisung !CDB (convert decimal to binary = Konvertieren eines Dezimalwerts in einen Binrwert) konvertiert die BCD Eingnge in entsprechende ganzzahlige Binrwerte. Die BCD Eingnge bis 9999 werden in entsprechende ganzzahlige Binrwerte konvertiert.

BEDINGTE/UNBEDINGTE ANWEISUNGEN
!JMP(input, ref_num)
Parameter: input ref_num $DIN[i], $DOUT[i], oder $BIT[i] 1..8

Die Anweisung !JMP (jump = Sprung) friert den Zustand aller Ausgnge innerhalb seines Kontrollbereiches ein. Jede !JMP Anweisung mu numeriert werden (1-8). Dieselbe Nummer kann mehrmals verwendet werden. Eine !JMP Anweisung hat keine Auswirkung auf eine !MCR Anweisung.

!JMPE(ref_num)
Parameter: ref_num 1..8

Die Anweisung !JMPE (jump end = Ende des Sprung) beendet eine !JMP Anweisung.

!MCR(input, ref_num)
Parameter: input ref_num $DIN[i], $DOUT[i], oder $BIT[i] 1..8

Die Anweisung !MCR (master control relay = Haupt-Steuerrelais) sperrt alle Relais innerhalb ihres Kontrollbereichs zwischen einer !MCR und eine !MCRE Anweisung. Wenn eine !MCR Anweisung ausgefhrt wird, werden alle !JMP Anweisungen innerhalb des von der !MCR Anweisung begrenzten Bereichs bersprungen; die von diesen !JMP Anweisungen gesteuerten Ausgnge werden also gesperrt.

!MCRE(ref_num)
Parameters: ref_num 1..8

Die Anweisung !MCRE (master control relay end = Ende des Haupt-Steuerrelais) beendet die !MCR Anweisung.

BIT ANWEISUNGEN
Bitanweisungen wirken auf die einzelnen Bits von 16 Bit Worten. Die Bits eines Worts werden der Reihe nach von 1 bis 16 nummeriert, wobei das Bit 1 das am meisten signifikante und Bit 16 das am wenigsten signifikante ist. Bei Whlen der Bitnummerist zu beachten, dass das signifikanteste Bit (Bit 1) links auen und das am wenigsten signifikante Bit (Bit 16) rechts auen ist.

MSB = das signifikanteste Bit LSB = das am wenigsten signifikante Bit Bit 16 LSB (Bitnummerierung)

Bit 1 MSB 00/1200

Bit 3

9-5

SPS FUNKTIONEN

PDL2

!BITC(word_addr, bit_num)
Parameter: word_addr bit_num $WORD[i], $AOUT[i], oder $GOUT[i] 1..16

Die Anweisung !BITC (bit clear = Annullieren der Bits) setzt ein bestimmtes Bit eines Wortes auf Null (0). Die Bits eines Wortes werden von links nach rechts numeriert (vom wichtigsten bis zum unwichtigsten).

!BITP(word_addr, bit_num, output)


Parameter: word_addr bit_num output $WORD[i], $AIN[i], $AOUT[i], $PLCSTW[i], $GIN[i], oder $GOUT[i] 1..16 $DOUT[i] oder $BIT[i]

Die Anweisung !BITP (bit pick) testet ein bestimmtes Bit eines Speicherwortes, um dessen Zustand festzustellen. Die Anweisung !BITP verndert das gewhlte Bit in keiner Weise.

!BITS(word_addr, bit_num)
Parameter: word_addr bit_num $WORD[i], $AOUT[i], oder $GOUT[i] 1..16

Die Anweisung !BITS (bit set = Setzen der Bits) setzt ein bestimmtes Bit eines Wortes auf Eins (1).

ONE-SHOT ANWEISUNGEN
!OS(number, leading, trigger, output)
Parameter: number_int leading_boo trigger_port output_port 1..1024 0 oder 1 $DIN[i], $DOUT[i], oder $BIT[i] $DOUT[i] oder $BIT[i]

Die Anweisung !OS (one-shot) liefert einen Ausgang fr jede Speicherabtastung.

9-6

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN

Handbuch fr Programmiersprache

1 2 3 4 5 6 7 8 9

LISTE DER ANWEISUNGEN


LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

10
11 12 A B C D Index

LISTE DER ANWEISUNGEN

Handbuch fr Programmiersprache

PDL2

Diese Seite wurde absichtlich leer gelassen

PDL2

LISTE DER ANWEISUNGEN

ACT ACT

LISTE DER ANWEISUNGEN


Dieses Kapitel listet die PDL2 Anweisungen in alphabetischer Reihenfolge auf und gibt fr jede einzelne Anweisung: eine kurze Beschreibung; die Syntax; Anmerkungen ber die Verwendung; Beispiele; eine Liste assoziierter Anweisungen.

Zur Wiedergabe der PDL2 Anweisungen wird die im Kapitel "Einfhrung in die Sprache PDL2" beschriebene Syntax benutzt.

ACTIVATE Anweisung
Die ACTIVATE Anweisung aktiviert ein geladenes Programm. Je nachdem, ob das Programmattribut holdable oder non-holdable ist, hat die Aktivierung eines Programms unterschiedliche Auswirkungen. Syntax: Anmerkungen: ACTIVATE prog_name <, prog_name>... Prog_name ist ein Identifizierer, der das zu aktivierende Programm angibt. Es ist mglich, eine Liste von Programmen zu spezifizieren. Wenn die Anweisung von einem non-holdable Programm erteilt wird, werden die holdable Programme in den Zustand ready und die non-holdable Programme in den Zustand running versetzt. Wenn die Anweisung von einem holdable Programm erteilt wird, werden die Programme in den Zustand running versetzt. Die Programme mssen im Speicher geladen sein, sonst wird ein Fehler ausgegeben. Es kann nur jeweils ein bestimmtes Programm in einem bestimmten Moment aktiviert werden. Wenn ein Programm aktiviert wird, geschieht folgendes: die initialisierte Variablen werden auf ihren Anfangswert gesetzt; wenn prog_name holdable ist und nicht das Attribut DETACH hat, wird der Arm reserviert; wenn prog_name nicht holdable ist und das Attribut ATTACH angegeben ist, wird der Arm ebenfalls reserviert.

Die ACTIVATE Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. Beispiele: Siehe auch: ACTIVATE weld_prog, weld_util, weld_cntrl DEACTIVATE Anweisung

ATTACH Anweisung
Die ATTACH Anweisung erlaubt einem Programm, die absolute Kontrolle eines Betriebsmittels zu erhalten, so da andere Programme nicht darauf zugreifen knnen. Diese Anweisung kann auf Arme, E/A Einrichtungen, Bedingungshandler und Zeitgeber angewandt werden. Syntax: ATTACH ATTACH ATTACH ATTACH || ARM <ALL> | ARM[n] <, ARM[n]>... || device_str <, device_str>... CONDITION[n] <, CONDITION[n]>... $TIMER[n] <, $TIMER[n]>...

Anmerkungen:

Ein Arm wird fr das Programm reserviert, das die ATTACH Anweisung ausfhrt, whrend andere Programme keine Bewegung am Arm durchfhren knnen. Der Programmierer kann einen Arm, eine Liste von Armen oder alle Arme spezifizieren. Wird keiner angegeben, so wird der Standardarm reserviert. Wenn ein Programm versucht, einen bereits von dem Programm reservierten Arm zu reservieren, erscheint nur eine Warnung; wenn ein Programm versucht, einen Arm zu reservieren, der bereits von einem anderen Programm reserviert wurde, wird ein Fehler ausgegeben. Wenn ein Programm versucht, eine MOVE oder RESUME Anweisung auf einen von einem anderen Programm reservierten Arm anzuwenden, wird ein Fehler ausgegeben.

00/1200

10-1

ACT ACT

LISTE DER ANWEISUNGEN

PDL2

Eine Einrichtung wird fr das Programm reserviert, das die ATTACH Anweisung ausfhrt. device_str kann aus einem der Namensstrings fr die folgenden Sys-temeinrichtungen oder Fenster bestehen: Kommunikationseinrichtungen COM0: COM1: COM2: COMP: DCM0: DCM1: DCM2: Fenster Einrichtungen CRT: CRT1: CRT2: CRT3: TP: TP0: TP1: TP2: TP3: Wenn eine E/A Einrichtung reserviert wird, knnen die anderen Programme keine LUN in dieser Einrichtung erffnen. Wenn die reservierte Einrichtung ein Fenster ist, knnen die anderen Programme dieses Fenster in den internen Routinen fr Fenster nicht verwenden. Wenn ein Programm versucht, sich eine E/A Einrichtung zu reservieren, fr die bereits LUNs erffnet wurden oder das schon von einem anderen Programm reserviert wurde, wird ein Fehler ausgegeben. Ein Bedingungshandler wird fr das Programm reserviert, das die ATTACH Anweisung ausfhrt, und nur der Code von demselben Programm, das diese Anweisung enthlt, kann ihn freigeben oder blockieren, entfernen, ihn aus der exklusiven Kontrolle entlassen oder umdefinieren. Die Bedingungshandler werden reserviert, um Probleme zu vermeiden, die auftreten, wenn die die Bedingungshandler definierenden Routinen die gleichen Nummern benutzen, wie die Programme, die diese Routinen benutzen. Wenn ein Programm versucht, einen nicht existierenden Bedingungshandler zu reservieren, tritt ein Fehler auf. Ein Zeitgeber wird fr das Programm reserviert, das die ATTACH Anweisung ausfhrt, und nur der Code, der zum selben Programm gehrt, das diese Anweisung enthlt, kann auf ihn zugreifen. Der Wert des Zeitgebers ndert sich nicht, wenn er reserviert wird. Um einen Arm, eine Einrichtung, einen Bedingungshandler oder einen Zeitgeber aus der exklusiven Kontrolle zu entlassen, so da andere Programme sie benutzen knnen, mu die DETACH Anweisung von demselben Programm abgesetzt werden, das die ATTACH Anweisung ausgefhrt hat. Die DETACH Anweisung mu also von dem Programm ausgefhrt werden, das die Arme und die Einrichtungen reserviert hat; das gleiche gilt fr Bedingungshandler und Zeitgeber. Wenn ein Programm beendet oder verlassen wird, werden alle reservierten Einrichtungen freigegeben. Folgendes Beispiel und die Tabelle veranschaulichen ein Programm, das eine Einrichtung reserviert hat: PROGRAM p1 ROUTINE r2 EXPORTED FROM p2 ROUTINE r1 BEGIN r2 END r1 BEGIN r1 END p1 PROGRAM p2 ROUTINE r2 EXPORTED FROM p2 ROUTINE r2 BEGIN -- ATTACH Anweisung END r2 BEGIN END p2

10-2

00/1200

PDL2

LISTE DER ANWEISUNGEN

BEG

Einrichtung $TIMER CONDITION

Eigentmer reserviert (p2) reserviert (p2)

Device ARM

esec (p1) esec (p1)

Begrenzter Zugang Nur das Eigentmerprogramm (p2) kann ein $TIMER lesen oder schreiben. Nur das Eigentmerprogramm (p2) kann den Bedingungshandler freigeben, sperren, entfernen, am der exklusiven Kontrolle entlassen oder ihn umdefinieren. Nur das Programm, das die ATTACH Anweisung ausfhrt, kann auf die Einrichtung zugreifen. Nur das Programm, das die ATTACH Anweisung ausfhrt, kann den Arm bewegen. LOCK und CANCEL knnen jedoch auch von anderen Programmen abgesetzt werden.

Beispiele:

ATTACH COM0: ATTACH CRT2:

-- reserviert eine Kommunikationseinrichtung -- reserviert ein Fenster

ATTACH ARM -- reserviert einen Standardarm ATTACH ARM[1], ARM[3] ATTACH CONDITION[5], CONDITION[8] ATTACH $TIMER[6] Siehe auch: --- reserviert die Bedingungshandler

reserviert einen Zeitgeber

DETACH Anweisung Programmattribut ATTACH Programmattribut DETACH

BEGIN Anweisung
Die BEGIN Anweisung bezeichnet den Beginn einer ausfhrbaren Anweisung in einem Programm oder einer Routine. Syntax: Anmerkungen: BEGIN <CYCLE> Die Vereinbarungsabschnitte fr Variablen und Konstanten mssen vor der BEGIN Anweisung stehen. Die Option CYCLE ist fr jede BEGIN Anweisung eines Programms zulssig, kann aber fr eine BEGIN Anweisung in einer Routine nicht verwendet werden. Die Option CYCLE erstellt einen kontinuierlichen Zyklus. Wenn die END Anweisung eines Programms gefunden wird, wird die Ausfhrung mit der BEGIN Anweisung wieder aufgenommen. Der Zyklus wird fortgesetzt, bis das Programm deaktiviert wird oder bis die EXIT CYCLE Anweisung ausgegeben wird. Eine EXIT CYCLE Anweisung beendet den laufenden Zyklus, die Ausfhrung wird sofort mit der BEGIN Anweisung fortgesetzt. Wenn das Programm eine CYCLE Anweisung enthlt, ist die CYCLE Option nach der BEGIN Anweisung nicht zulssig. PROGRAM example1 PROGRAM example2 -- Vereinbarungsabschnitt -- Vereinbarungsabschnitt BEGIN BEGIN CYCLE -- Ausfhrungsabschnitt END example1 -- Ausfhrungsabschnitt END example2

Beispiele:

PROGRAM example3 -- Vereinbarungsabschnitt BEGIN -- anfnglich ausfhrbarer Abschnitt CYCLE -- wiederholt ausfhrbarer Abschnitt END example3 00/1200 10-3

BYP

LISTE DER ANWEISUNGEN

PDL2

Siehe auch:

CYCLE Anweisung DEACTIVATE Anweisung END Anweisung EXIT CYCLE Anweisung

BYPASS Anweisung
Die BYPASS Anweisung wird benutzt, um aus der im Programm ablaufenden Anweisung zu springen, sofern diese unterbrechbar ist. Unterbrechbar sind folgende Anweisungen: READ, WAIT FOR, MOVE, SYS_CALL, DELAY, WAIT, PULSE. Syntax: Anmerkungen: BYPASS <flags> <||prog_name <, <prog_name>...| ALL ||> flags it eine INTEGER Maske, die benutzt wird, um anzuzeigen, aus welcher unterbrechbaren Anweisungen gesprungen werden ollen. Mgliche Maskenwerte sind: 0: 64: 128: 256: 512: 1024: 2048: 4096: zum Abbrechen der laufendenAnweisung (wenn unterbrechbar) zum Abbrechen einer READ zum Abbrechen einer WAIT FOR zum Abbrechen einer MOVE zum Abbrechen eines SYS_CALL zum Abbrechen einer DELAY zum Abbrechen einer WAIT bei einem Semaphor zum Abbrechen einer PULSE

Diese Ganzzahlwerte sind dieselben, die von der Systemfunktion PROG_STATE zurckgebracht werden. Nach Umgehen einer MOVE Anweisung muss die START Taste gedrckt werden, um das umgangene Programm wiederaufzunehmen. Wenn prog_name oder eine Liste von Namen angegeben wird, werden diese Programme in den Pausenzustand versetzt. Wird kein Name spezifiziert, so wird die unterbrechbare Anweisung des BYPASS aufrufenden Programms abgebrochen. In diesem Fall sollte BYPASS von einem Bedingungshandler abgesetzt werden, wenn das Hauptprogramm auf einer unterbrechbaren Anweisung hngt. Die BYPASS Anweisung ist als Aktion eines Bedingungshandler erlaubt. Weitere Einzelheiten finden sich im Kapitel "Bedingungshandler". BYPASS 0 ALL -- alle Programme umgehen, die eine unterbrechbare Anweisung ausfhren state:=PROG_STATE (pippo) IF state = 2048 THEN BYPASS state pippo -- pippo umgehen, wenn es auf ein Semaphor wartet ENDIF Siehe auch: interne Funktion PROG_STATE Kapitel Bedingungsanweisung

Beispiele:

CANCEL Anweisung
Die CANCEL Anweisung hat verschiedene Formen, je nachdem ob sie Bewegungen, SEMAPHOREn oder einen Alarmzustand des Systems lscht. Die CANCEL Anweisungen motion lschen die derzeitige Bewegung oder alle Bewegungen auf einem angegebenen Arm, einer Liste von Armen oder allen Armen. Eine Option dieser Anweisung erlaubt es, die derzeitige Zweigbahn oder alle Zweigbahnen eines angegebenen Arms, einer Liste von Armen oder aller Arme zu lschen. Syntax: CANCEL ||ALL | CURRENT|| <SEGMENT> <FOR || ARM[n] <, ARM[n]>... | ALL ||> CANCEL ALARM CANCEL semaphore_var

10-4

00/1200

PDL2

LISTE DER ANWEISUNGEN

CLO

Anmerkungen:

Beispiele:

Das Lschen einer Bewegung verlangsamt die Armbewegung bis zum Stop. Eine gelschte Bewegung kann nicht wieder aufgenommen werden. CANCEL CURRENT lscht nur die laufende Bewegung. Wenn bei der Eingabe der Anweisung eine Bewegung auf Ausfhrung wartet, wird diese sofort ausgefhrt. Wenn die derzeitige Bewegung eine Zweigbewegung ist, werden alle Bahnen des Zweigs gelscht. CANCEL ALL lscht die laufende Bewegung und jede andere auf Ausfhrung wartende Bewegung. CANCEL CURRENT SEGMENT lscht nur die derzeitige Zweigbahn. Verbleiben bei Ausfhrung der CANCEL CURRENT SEGMENT Anweisung noch einige Knoten im Zweig, so werden diese sofort verarbeitet. Wenn hingegen kein Knoten mehr vorhanden ist oder die CANCEL ALL SEGMENT Anweisung benutzt wurde, werden die wartenden Bewegungen (falls es solche gibt) sofort ausgefhrt. Diese Anweisung gleicht dem Lschen der derzeitigen Bewegung mit CANCEL CURRENT. Der Programmierer kann einen bestimmten Arm angeben, eine Reihe von Armen oder alle Arme. Wenn nichts spezifiziert wird, wird die Bewegung fr den Standardarm gelscht. Die CANCEL ALARM Anweisung annulliert den Alarmzustand der Steuereinheit. Man erhlt dasselbe Ergebnis wie bei Drcken der SHIFT SCRN Taste auf der Tastatur. Wenn sich die Steuereinheit in einer fatalen Fehlerbedingung befindet, kann die Anweisung nicht richtig ausgefhrt werden. Die CANCEL semaphore_var Anweisung lscht alle nicht benutzten Signale und setzt die Signalzhler auf Null. Diese Anweisung mu zu Anfang eines Programms ausgefhrt werden, um alle von einer vorhergehenden Ausfhrung zurckgebliebenen Signale zu lschen. Wenn z.Z. Programme auf eine SEMAPHORE Variable warten, erzeugt die CANCEL semaphore-var Anweisung einen Fehler. Die CANCEL Anweisung ist als Aktion fr einen Bedingungshandler zulssig. siehe das Kapitel "Bedingungshandler" fr mehr Information. CANCEL ALL CANCEL ALL SEGMENT CANCEL ALL FOR ARM[1], ARM[2] CANCEL ALL SEGMENT FOR ARM[1] CANCEL ALL FOR ALL CANCEL CANCEL CANCEL CANCEL CANCEL CURRENT CURRENT CURRENT CURRENT CURRENT

SEGMENT FOR ARM[3] SEGMENT FOR ARM[3], ARM[2] FOR ALL

CANCEL ALARM CANCEL resource Siehe auch: LOCK Anweisung HOLD Anweisung SIGNAL Anweisung WAIT Anweisung Kapitel "Bewegungssteuerung".

CLOSE FILE Anweisung


Die CLOSE FILE Anweisung schliet eine LUN und beendet die Verbindung zwischen dem Programm und der Einrichtung. Syntax: Anmerkungen: CLOSE FILE || lun_var | ALL || lun_var kann eine beliebige, vom Anwender definierte INTEGER Variable sein, die eine geffnete LUN darstellt. Die LUN kann nur von dem Programm geschlossen werden, das sie erffnet hat. Alle von einem Programm verwendeten LUNs werden automatisch geschlossen, wenn die Ausfhrung des Programms vollendet ist oder das Programm deaktiviert wird. CLOSE FILE ALL bewirkt das Schlieen aller z.Z. vom Programm geffneten Dateien. Dateien anderer Programme werden nicht beeinflut. Alle gepufferten Daten werden auf die Einrichtung geschrieben, bevor die CLOSE FILE Anweisung ausgefhrt wird. 00/1200 10-5

CLO

LISTE DER ANWEISUNGEN

PDL2

Beispiele:

CLOSE FILE file_lun CLOSE FILE crt1_lun CLOSE FILE ALL lun_var

Siehe auch:

OPEN FILE Anweisung Kapitel "Serielle Ein-/Ausgaben"

CLOSE HAND Anweisung


Die CLOSE HAND Anweisung schliet eine Zange (Tool). Syntax: Anmerkungen: CLOSE HAND number <FOR ||ARM[n] <, ARM[n]>... | ALL ||> number gibt die Nummer der zu schlieenden Zange an. Fr jeden Arm stehen zwei Zangen zur Verfgung. Die Schlieoperation hat je nach Art der Zange, auf die sie angewandt wird, unterschiedliche Auswirkungen (siehe das Kapitel "Bewegungssteuerung"). Die FOR ARM Optionsklausel kann verwendet werden, um einen bestimmten Arm anzugeben, eine Liste von Armen oder alle Arme. Wenn eine Angabe fehlt, wird der Standardarm verwendet. CLOSE HAND 1 CLOSE HAND 2 FOR ARM[2] Siehe auch: OPEN HAND Anweisung RELAX HAND Anweisung Kapitel "Bewegungssteuerung"

Beispiele:

CONDITION Anweisung
Die CONDITION Anweisung definiert einen Bedingungshandler im ausfhrbaren Abschnitt eines Programms. Syntax: CONDITION [int_expr] <FOR ARM[n]> <NODISABLE> <ATTACH> WHEN cond_expr DO <SCAN(number): action_list <WHEN cond_expr DO action_list>... ENDCONDITION Der Programmierer identifiziert die Bedingungshandler durch int_expr., einen INTEGER Ausdruck, der zwischen 1 und 255 liegen kann. Die zu berwachenden Bedingungen werden im Ausdruck der Bedingung cond_expr wie im Kapitel "Bedingungshandler" beschrieben, angegeben. Action_list gibt die auszufhrenden Aktionen an, wenn der Bedingungshandler aktiviert wird (der Ausdruck der Bedingung wird TRUE), wie im Kapitel "Bedingungshandler" beschrieben wird. Um die berwachung starten zu knnen, mssen die Bedingungshandler freigegeben sein. Die Optionsklausel FOR ARM kann verwendet werden, um einen bestimmten Arm fr den Bedingungshandler zu bezeichnen. Wird diese Klausel nicht angegeben, wird der im Attribut PROG_ARM der PROGRAM Anweisung spezifizierte Arm benutzt. Ist dieses Attribut nicht angegeben, wird der Wert der vorbesetzten Variablen $DFT_ARM genommen. Die CONDITION Anweisung wirkt auf den angegebenen Arm wie oben beschrieben. Die Optionsklausel NODISABLE bedeutet, da der Bedingungshandler nicht automatisch gesperrt wird, wenn die Bedingung aktiviert wird. Diese Klausel kann nicht fr Handler verwendet werden, die Zustandsbedingungen enthalten. Die optionale ATTACH Klausel erlaubt, ein Bedingungshandler sofort nach seiner Definition zu reservieren. Wird nichts angegeben, kann der Bedingungshandler an einem anderen Programmpunkt mit der ATTACH Anweisung reserviert werden.

Anmerkungen:

10-6

00/1200

PDL2

LISTE DER ANWEISUNGEN

CON

Wenn ein Bedingungshandler reserviert wird, dann kann nur der Code, der zum selben Programm gehrt, wie das, das die ATTACH Anweisung enthlt, ihn freigeben, blockieren, entfernen, aus der exklusiven Kontrolle entlassen oder es umdefinieren. Die DETACH Anweisung dient dazu, die exklusive Kontrolle eines Bedingungshandlers aufzuheben. Die optionale SCAN Klausel kann benutzt werden, um fr Bedingungen, die Zustnde sind, eine geringere Abfragfrequenz als die durch die Systemvariable ($TUNE[1]) angegebene zu definieren. CONDITION[14] NODISABLE ATTACH: WHEN PAUSE DO $DOUT[21] := OFF ENDCONDITION CONDITION[23] FOR ARM[2]: WHEN DISTANCE 60 BEFORE END DO -- anwendbar auf Arm 2 LOCK -- anwendbar auf Arm 2 WHEN $ARM_DATA[4].PROG_SPD_OVR > 50 DO LOCK ARM[4] ENDCONDITION -- Diese CONDITION wird alle $TUNE[1]*2 msek abgefragt CONDITION[55] SCAN(2): WHEN $DOUT[20]=TRUE DO PAUSE ENDCONDITION Siehe auch: ENABLE CONDITION Anweisung DISABLE CONDITION Anweisung PURGE CONDITION Anweisung ATTACH Anweisung DETACH Anweisung Kapitel "Bedingungshandler"

Beispiele:

CONST Anweisung
Die CONST Anweisung bezeichnet den Beginn eines Vereinbarungsabschnitts fr Konstanten in einem Programm oder einer Routine. Syntax: CONST name = || literal | predef_const_id || <name = || literal | predef_const_id ||>... Eine Konstantenvereinbarung legt einen Konstantenidentifizierer mit einem Namen und einem unvernderlichen Wert fest. name kann ein beliebiger, vom Anwender definierter Identifizierer sein. Die Datenklasse der Konstanten wird durch ihren Wert wie folgt bestimmt: INTEGER (ganze Zahl) REAL (Dezimalkomma oder wissenschaftliche Schreibweise) BOOLEAN (TRUE, FALSE, ON, oder OFF) STRING (zwischen Apostrophe gesetzt)

Anmerkungen:

Der Wert kann als literale oder vorbesetzte Konstante spezifiziert werden. Der Interpreter fhrt eine Kontrolle durch, um sicherzustellen, da die Werte gltig sind; Ausdrcke sind unzulssig. Der Vereinbarungsabschnitt fr Konstanten wird zwischen die PROGRAM oder ROUTINE Anweisung und die BEGIN Anweisung gesetzt.

00/1200

10-7

CYC

LISTE DER ANWEISUNGEN

PDL2

Beispiele:

PROGRAM example CONST temp = 179.04 -- REAL time = 300 -- INTEGER flag = ON -- BOOLEAN movement = linear -- STRING part_mask = 0xF3 -- INTEGER BEGIN . . . END example TYPE Anweisung VAR Anweisung Kapitel "Darstellung der Daten"

Siehe auch:

CYCLE Anweisung
Mit der CYCLE Anweisung kann der Programmierer einen kontinuierlichen Zyklus erstellen. Syntax: Anmerkungen: CYCLE Es ist innerhalb eines Programms nur eine CYCLE Anweisung zulssig, und das Programm mu das Hauptprogramm sein. Die CYCLE Anweisung ist in Routinen unzulssig. Die CYCLE Anweisung ist nicht zulssig, wenn die CYCLE Option in einer BEGIN Anweisung verwendet wird.Der Unterschied zwischen der CYCLE Anweisung und der CYCLE Option besteht darin, da bei Benutzen der CYCLE Anweisung einige Initialisierungscodes eingeschlossen werden knnen, die nicht in jedem Zyklus auszufhren sind. Wenn das Programm die END Anweisung erreicht, wird die Ausfhrung bei der CYCLE Anweisung wieder aufgenommen und bis zur Deaktivierung des Programms oder bis zur Ausfhrung einer EXIT CYCLE Anweisung fortgesetzt. Wenn eine EXIT CYCLE Anweisung ausgefhrt wird, endet der laufende Zyklus und die Ausfhrung beginnt sofort mit der CYCLE Anweisung. PROGRAM example1 PROGRAM example2 -- Vereinbarungsabschnitt -- Vereinbarungsabschnitt BEGIN BEGIN CYCLE -- anfnglich ausfhrbarer Abschnitt -- ausfhrbarer Abschnitt -section END example2 CYCLE -- in Zyklen ausfhrbarer Abschnitt -section END example1 BEGIN Anweisung EXIT CYCLE Anweisung

Beispiele:

Siehe auch:

DEACTIVATE Anweisung
Die DEACTIVATE Anweisung deaktiviert die Programme, die sich im Zustand running, ready, paused oder paused-ready befinden. Syntax: Anmerkungen: DEACTIVATE <|| prog_name <,prog_name>... | ALL ||> Wenn prog_name oder eine Liste von Namen angegeben wird, werden diese Programme deaktiviert. Wenn prog_name nicht angegeben wird, wird das Programm deaktiviert, das die Anweisung ausgegeben hat. Wenn ALL angegeben wird, werden alle in Ausfhrung begriffenen Programme deaktiviert. Wenn ein Programm deaktiviert wird, geschieht folgendes: 10-8 die laufenden und auf Ausfhrung wartenden Bewegungen werden gelscht die Bedingungshandler werden entfernt das Programm wird aus jeder Liste entfernt (semaphores) Lesevorgnge, Impulse und Verzgerungen werden gelscht 00/1200

PDL2

LISTE DER ANWEISUNGEN

DEC

die laufenden und auf Ausfhrung wartenden Systemaufrufe werden annulliert die geffneten Dateien werden geschlossen die Kontrolle reservierter Betriebsmittel wird aufgehoben die gesperrten Arme werden freigegeben, aber die Bewegung mu erst noch

Die deaktivierten Programme bleiben geladen, aber sie werden nicht ausgefhrt und knnen nicht wieder aufgenommen werden. Sie knnen mit der ACTIVATE Anweisung neu aktiviert werden. Die DEACTIVATE Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. DEACTIVATE DEACTIVATE weld_main, weld_util DEACTIVATE ALL Siehe auch: ACTIVATE Anweisung

Beispiele:

DECODE Anweisung
Die DECODE Anweisung konvertiert einen String in Einzelwerte. Syntax: Anmerkungen: DECODE (string_expr, var_id <, var_id>...) Der durch string_expr dargestellte STRING Wert wird in Einzelwerte konvertiert, die der entsprechenden var_id zugeordnet werden. Die Datenklasse des Werts wird durch die Datenklasse jeder einzelnen var_id bestimmt. Der STRING Wert mu in diese Klasse konvertierbar sein, sonst wird ein Fehler ausgegeben. Die gltigen Datenklasse sind folgende: BOOLEAN INTEGER JOINTPOS POSITION REAL STRING VECTOR XTNDPOS var_id kann von einem Verweis einer vorbesetzten Variablen dargestellt werden, sofern es keine Begrenzungen fr den Wert der Variablen gibt. Um die Wertgrenzen einer vorbesetzten Variablen festzustellen, siehe das Kapitel "Liste der vorbesetzten Variablen". Optionale Formatangaben knnen mit var_id auf dieselbe Art verwendet werden, wie sie in einer READ Anweisung benutzt werden (siehe Kapitel "Serielle Ein-/Ausgaben"). PROGRAM sample VAR s, str : STRING[10] i, x, y, z : INTEGER BEGIN READ(str) -- angenommen, dass 4 6 8 einegeben wird DECODE(str, x, y, z) -- x = 4, y = 6, z = 8 DECODE(1234abcd, i, s) -- erzeugt i = 1234, s = abcd DECODE(-1234abcd, i) -- erzeugt i = -1234 DECODE(+, i) -- abfangbarer Fehler READ(str) -- assume 101214 wird eingegeben DECODE(str, x::3, y::1, z::2) -- x = 101, y = 2, z = 14 END sample ENCODE Anweisung READ Anweisung Kapitel "Serielle Ein-/Ausgaben".

Beispiele:

Siehe auch:

00/1200

10-9

DEL

LISTE DER ANWEISUNGEN

PDL2

DELAY Anweisung
Die DELAY Anweisung schiebt die Ausfhrung des Programms, das sie ausgibt, fr eine spezifizierte Zeit auf. Syntax: Anmerkungen: DELAY int_expr int_expr gibt den Zeitraum in Millisekunden an. Folgendes wird nicht unterbrochen, auch wenn das Programm aufgeschoben ist: laufende und auf Ausfhrung wartende Bewegungen Abfrage des Bedingungshandlers mit einer PULSE Anweisung umgesetzte Signale laufende und auf Ausfhrung wartende Systemaufrufe

Beispiele:

DELAY ist eine asynchrone Anweisung, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den paused Zustand versetzt wird, und den Anlauf von Interrupt Routinen vor ihrer vollstndigen Ausfhrung erlaubt. MOVE TO pickup DELAY 200 CLOSE HAND 1 WAIT FOR Anweisung

Siehe auch:

DETACH Anweisung
Die DETACH Anweisung gibt ein reserviertes Betriebsmittel frei. Diese Anweisung kann auf Arme, E/A Einrichtungen, Bedingungshandler oder Zeitgeber angewandt werden. Syntax: DETACH DETACH DETACH DETACH || ARM <ALL> | ARM[n] <, ARM[n]>... || device_str <, device_str>... CONDITION || ALL | [number] <, CONDITION [number]> ... || $TIMER[n] <, $TIMER[n]>...

Anmerkungen:

Wenn ein Arm freigegeben wird, knnen andere Programme eine Armbewegung bewirken. Wenn die ARM ALL Option verwendet wird, werden alle Arme freigegeben, die momentan von dem Programm reserviert sind, das die DETACH Anweisung ausfhrt. Wenn ein Programm versucht, einen momentan nicht reservierten Arm freizugeben, erscheint nur eine Warnung, wenn es dagegen versucht, einen momentan von einem anderen Programm reservierten Arm freizugeben, wird ein Fehler ausgegeben. device_str kann eine der folgenden Systemeinrichtungen oder ein der vom Anwender definierten Fenster sein: Kommunikationseinrichtungen COM0: COM1: COM2: DCM0: DCM1: DCM2: Fenster Einrichtungen CRT: CRT1: CRT2: CRT3: TP: TP0: TP1: TP2: TP3: Wenn eine E/A Einrichtung freigegeben wird, knnen die anderen Programme eine LUN fr diese Einrichtung erffnen; wenn es sich um eine Fenstereinrichtung handelt, knnen die internen Fensterroutinen darauf angewendet werden. Versucht ein Programm eine z.Z. von einem anderen Programm reservierte Einrichtung freizugeben, so tritt eine Fehlerbedingung auf. Nach Aufheben der Reservierung kann ein Bedingungshandler von anderen Programmen freigegeben, blockiert, entfernt oder umdefiniert werden. Nach Aufheben der Reservierung eines Zeitgebers knnen andere Programme auf ihn zum Lesen und Schreiben zugreifen.

10-10

00/1200

PDL2

LISTE DER ANWEISUNGEN

DIS

Die DETACH Anweisung zum Aufheben einer Reservierung von Bedingungshandlern oder Zeitgebern mu in demselben Programm enthalten sein, zu dem die entsprechende ATTACH Anweisung gehrt. Wenn das Programm versucht, eine in einem anderen Programm enthaltenen DETACH Anweisung auszufhren, tritt eine Fehlerbedingung auf, genau so wie wenn ein Programm versucht, einen nicht existierenden Bedingungshandler zu entlassen. Bei Programmende oder -deaktivierung werden alle reservierten Einrichtungen automatisch aus der Reservierung entlassen. Die DETACH Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. DETACH COM0: -- gibt eine Kommunikationseinrichtung frei DETACH CRT2: -- gibt ein Fenster frei DETACH ARM -- gibt den Standardarm frei DETACH ARM[1], ARM[3] DETACH CONDITION[6] -- mu im selben Programm sein wie ATTACH DETACH CONDITION ALL DETACH $TIMER[1] -- mu im selben Programm sein wie ATTACH DETACH $TIMER[8], $TIMER[9] Siehe auch: ATTACH Anweisung Programmattribut DETACH Programmattribut ATTACH

Beispiele:

DISABLE CONDITION Anweisung


Die Anweisung DISABLE CONDITION wird zur Blockierung eines global freigegebenen Bedingungshandlers benutzt. Syntax: Anmerkungen: DISABLE CONDITION || ALL | [int_exp] <, CONDITION [int_exp]>... || Int_exp ist die Nummer des zu sperrenden Bedingungshandlers. Gesperrte Bedingungshandler knnen wieder eingesetzt werden. Die Bedingungshandler werden automatisch gesperrt, wenn der Ausdruck der Bedingung aktiviert wird und in der Definition keine NODISABLE Klausel enthalten ist.Wird die Option ALL angewandt, so werden alle global freigegebenen Handler des Programms blockiert. Wenn der angegebene Bedingungshandler auch als Teil einer WITH Klausel freigegeben ist, wird er nach Abschlu der Bewegung gesperrt und nicht, wenn die DISABLE CONDITION Anweisung ausgefhrt wird. Eine Fehlerbedingung tritt auf, wenn das Programm versucht, einen fr ein anderes Programm reservierten Bedingungshandler zu blockieren. Die DISABLE CONDITION Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. DISABLE CONDITION[2] DISABLE CONDITION[error_chk], CONDITION[signal_chk] DISABLE CONDITION ALL Siehe auch: CONDITION Anweisung ENABLE CONDITION Anweisung MOVE Anweisung PURGE CONDITION Anweisung Kapitel "Bedingungshandler".

Beispiele:

00/1200

10-11

DIS

LISTE DER ANWEISUNGEN

PDL2

DISABLE INTERRUPT Anweisung


Die Anweisung DISABLE INTERRUPT deaktiviert alle im aktuellen Ausfhrungspfad einkommenden Interrupts. Syntax: DISABLE INTERRUPT <Anweisungen> ENABLE INTERRUPT Zwischen DISABLE INTERRUPT und ENABLE INTERRUPT eingeschlossene Anweisungen knnen nicht von Interrupts Service Routinen aus demselben Programm unterbrochen werden. Diese Routinen werden abgearbeitet, nachdem die Anweisung ENABLE INTERRUPT ausgefhrt ist. Zwischen DISABLE INTERRUPT und ENABLE INTERRUPT ist nur die folgende Untermenge von PDL2 Anweisungen erlaubt: ATTACH und DETACH zur Reservierung/Freigabe von Armen, Zeitgebern und Bedingungen; OPEN, CLOSE und RELAX HAND; RETURN; ENABLE, DISABLE, PURGE CONDITION; SIGNAL EVENT, SEGMENT, SEMAPHORE; CANCEL ALARM, MOVE, SEMAPHORE; RESUME; LOCK und UNLOCK; HOLD; sowie Zuweisung, Inkrementierung, Dekrementierung von Variablen. Diese Anweisung sollte nur benutzt werden, wenn eine Verschachtelung von Pfadniveaus in der Programmaufrufkette wirklich vermieden werden mssen. Es darf nur ein Minimum an Anweisungen spezifiziert werden, um eine korrekte Programminterpretation nicht zu gefhrden. PROGRAM example ROUTINE user_isr BEGIN -- Anweisungen der Interrupt Service Routine <Anweisungen....> DISABLE INTERRUPT ENABLE CONDITION[13] $BIT[100] := ON RETURN ENABLE INTERRUPT END user_isr BEGIN -- Hauptprogramm CONDITION[13] : WHEN $DIN[18] DO user_isr ENDCONDITION ENABLE CONDITION[13] -- Hauptanweisungen <Anweisungen..> END example Siehe auch: Kapitel "Bedingungshandler".

Anmerkungen:

ENABLE CONDITION Anweisung


Die ENABLE CONDITION Anweisung erlaubt die globale Freigabe eines Bedingungshandlers. Syntax: Anmerkungen: ENABLE CONDITION [int_expr] <, CONDITION [int_expr]>... int_expr ist die Nummer des freizugebenden Bedingungshandlers. Ein Ausdruck der Bedingung wird nur berwacht, wenn der Bedingungshandler freigegeben ist. Wenn der angegebene Bedingungshandler z.Z. als Teil einer WITH Klausel freigegeben ist, bleibt er nach Ende der Bewegung freigegeben, anstelle gesperrt zu werden. Eine Fehlerbedingung tritt auf, wenn das Programm versucht, einen z.Z. fr ein anderes Programm reservierten Bedingungshandler zu blockieren. Die NABLE CONDITION Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. ENABLE CONDITION[3]

Beispiele:

10-12

00/1200

PDL2

LISTE DER ANWEISUNGEN

END

Siehe auch:

CONDITION Anweisung DISABLE CONDITION Anweisung MOVE Anweisung PURGE CONDITION Anweisung Kapitel "Bedingungshandler".

ENCODE Anweisung
Die ENCODE Anweisung konvertiert einzelne Werte in einen STRING. Syntax: Anmerkungen: ENCODE (string_id, expr <, expr>...) Die durch expr dargestellten Ausdrcke werden in einen Stringwert konvertiert und string_id zugeordnet. Die fr die Ausdrcke gltigen Datenklassen sind folgende: BOOLEAN INTEGER JOINTPOS POSITION REAL STRING VECTOR XTNDPOS Optionale Formatangaben knnen mit expr genauso angewendet werden, wie in einer WRITE Anweisung (siehe Kapitel "Serielle Ein-/Ausgaben"). Es ist zu beachten, dass das erste Zeichen von string_id ein Leerzeichen ist, wenn expr nicht linksbndig ist. Die max. STRING Lnge wird durch die in string_id angegebenen Lnge bestimmt. Wenn der neue STRING eine grere als die deklarierte Lnge hat, wird er abgeschnitten, um string_id angepat zu werden. PROGRAM sample VAR str : STRING[20] x,y : INTEGER z : REAL BEGIN x := 23 y := 1234567 z := 32.86 ENCODE (str, x, y, z) WRITE (str) -- Ausgnge 23 1234567 32.860 ENCODE (str, x::4, y::8, z::4::1) WRITE (str) -- Ausgnge 23 123456732.9 END sample DECODE Anweisung WRITE Anweisung Kapitel "Serielle Ein-/Ausgaben"

Beispiele:

Siehe auch:

END Anweisung
Die END Anweisung bezeichnet das Ende eines Programms oder einer Routine. Syntax: Anmerkungen: END name name ist der Identifizierer, der vom Anwender definiert wird, um einem Programm oder einer Routine einen Namen zu geben. Wenn die END Anweisung in einer Prozedurroutine vorhanden ist, wird die Kontrolle des Programms an die aufrufende Routine oder an das aufrufende Programm zurckgegeben. Eine Fehlerbedingung tritt auf, wenn die END Anweisung benutzt wird, um eine Funktionsroutine zu beenden. Diese Routinen mssen eine RETURN Anweisung ausfhren, um die Kontrolle an das rufende Programm oder Unterprogramm zurckzugeben. Wenn mit der BEGIN Anweisung die Option CYCLE verwendet wurde oder diese Anweisung im Programm verwendet wurde, bertrgt die END Anweisung die Kontrolle auf die entsprechende CYCLE Anweisung, und die Anweisungen zwischen CYCLE und END werden wieder ausgefhrt. Das Programm wird in diesem Fall solange ausgefhrt, bis es deaktiviert wird.

00/1200

10-13

EXIT

LISTE DER ANWEISUNGEN

PDL2

Beispiele:

PROGRAM example -- Vereinbarungsabschnitt BEGIN -- Ausfhrungsabschnitt END example BEGIN Anweisung CYCLE Anweisung EXIT CYCLE Anweisung RETURN Anweisung

ROUTINE r1 -- Abschnitt der lokalen Vereinbarungen BEGIN -- ausfhrbarer Abschnitt der Routine END r1

Siehe auch:

EXIT CYCLE Anweisung


Wenn die EXIT CYCLE Anweisung bei der Ausfhrung des Programms eingegeben wird, wird der verbleibende Teil des laufenden Zyklus unterdrckt, und der nchste Zyklus wird sofort gestartet. Syntax: Anmerkungen: EXIT CYCLE <|| prog_name <,prog_name>... | ALL ||> Wenn prog_name oder eine Liste von Namen angegeben wird, verlassen diese Programme ihren laufenden Zyklus. Wenn kein Name angegeben wird, ist das Programm, das seinen Zyklus verlt, dasjenige, das die Anweisung ausgegeben hat. Mit der Angabe ALL wirkt die Anweisung auf alle in Ausfhrung begriffenen Programme. Das Verlassen eines Zyklus lscht alle z.Z. laufenden und wartenden Bewegungen und alle Anweisungen wie DELAY, PULSE, SYS_CAL u.s.w. und setzt den Programmstack zurck. Das Verlassen eines NON Zyklus schliet die Dateien, gibt die Kontrolle nicht zurck, gibt nicht die Einrichtungen frei, setzt $HDIN nicht zurck, blockiert oder entfernt nicht die Bedingungshandler und gibt die Arme nicht frei. Die CYCLE Anweisung mu deshalb ans Ende dieser Anweisungsklassen gestellt werden, um eine Verdoppelung bei nachfolgenden Zyklen zu vermeiden. Wenn das Programm keine CYCLE Anweisung vor Durchfhrung der Anweisung EXIT CYCLE ausgefhrt hat und die Option CYCLE nicht bei BEGIN steht, wird ein Fehler ausgegeben. Ein verlassener Zyklus kann nicht wieder aufgenommen werden. Die EXIT CYCLE Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. EXIT CYCLE EXIT CYCLE weld_prog, weld_util EXIT CYCLE ALL Siehe auch: BEGIN Anweisung CYCLE Anweisung

Beispiele:

FOR Anweisung
Die FOR Anweisung fhrt eine Reihe von Anweisungen n-mal aus. Syntax: FOR intvar := startval || TO | DOWNTO || endval <STEP step_val> DO <Anweisung>... ENDFOR intvar wird anfnglich der Wert von startval zugeordnet. Danach wird er um den Schrittwert bei jedem Durchlaufen der Schleife erhht oder erniedrigt, bis endval erreicht oder ber/unterschritten ist. Der Zyklus besteht aus ausfhrbaren Anweisungen zwischen FOR und ENDFOR. startval, endval und step_val knnen beliebige INTEGER Ausdrcke sein. intvar mu eine INTEGER Variable sein. Bei Anwendung von TO wird intvar inkrementiert. startval mu kleiner oder gleich endval sein, andernfalls wird der Zyklus bersprungen. Bei Anwendung von DOWNTO wird intvar verringert. startval mu grer oder gleich endval sein, andernfalls wird der Zyklus bersprungen.

Anmerkungen:

10-14

00/1200

PDL2

LISTE DER ANWEISUNGEN

GOTO

Wenn die STEP Option angegeben ist, wird der Schrittwert durch step_val spezifiziert. Der benutzte Schrittwert sollte eine positive INTEGER sein, um sicherzustellen, da die Schleife richtig interpretiert wird. Ist kein Schrittwert angegeben, so wird ein Wert von Eins benutzt. Wenn der Schrittwert Eins ist, werden die Anweisungen so oft ausgefhrt, wie dem Absolutwert des Ausdrucks (end_val - start_val + 1) entspricht. Wenn startval gleich endval ist, wird der Zyklus einmal ausgefhrt. Die GOTO Anweisung kann nicht fr einen Sprung in eineN oder aus einem FOR Zyklus verwendet werden. Wird ENDFOR angetroffen, ohne vorher eine zugehrige FOR Anweisung ausgefhrt zu haben, tritt eine Fehlerbedingung auf. Falls eine GOTO Anweisung benutzt wird, um nach Ausfhren einer FOR Anweisung in eine Schleife oder aus ihr heraus zu springen, bleiben die die FOR Anweisung betreffenden Informationen im Stack. FOR i := 21 TO signal_total DO $DOUT[i] := OFF ENDFOR WHILE Anweisung REPEAT Anweisung

Beispiele:

Siehe auch:

GOTO Anweisung
Die GOTO Anweisung bertrgt bedingungslos die Kontrolle des Programms an den durch ein Anweisungsetikett angegebenen Programmpunkt. Syntax: Anmerkungen: GOTO statement_label statement_label ist eine Etikettenkennung am linken Rand gefolgt von zwei aufeinanderfolgenden Doppelpunkten (::). Die ausfhrbaren Anweisungen knnen auf der Zeile des Etiketts folgen oder auf einer beliebigen Zeile danach. Das Etikett mu sich in dem Programm oder der Routine der GOTO Anweisung befinden, andernfalls wird ein Interpreterfehler ausgegeben. Die GOTO Anweisung kann nicht fr einen Sprung in eine oder aus einer FOR Anweisung verwendet werden. Wird ENDFOR angetroffen, ohne vorher eine zugehrige FOR Anweisung ausgefhrt zu haben, tritt eine Fehlerbedingung auf. Falls eine GOTO Anweisung benutzt wird, um nach Ausfhren einer FOR Anweisung in eine Schleife oder aus ihr heraus zu springen, bleiben die die FOR Anweisung betreffenden Informationen im Stack. Die GOTO Anweisungen sind mit Vorsicht zu verwenden; bei den meisten Programmen, bei denen eine nderung der Ausfhrungsfolge gefordert ist, kann diese auch durch andere PDL2 Anweisungen vorgenommen werden (FOR, WHILE, REPEAT, IF, u.s.w.) PROGRAM example BEGIN . . . IF (error) THEN GOTO err_prt ENDIF . . . err_prt:: WRITE(GOTO geht zu diesem Punkt ber. ) END example FOR Anweisung IF Anweisung REPEAT Anweisung SELECT Anweisung WHILE Anweisung

Beispiele:

Siehe auch:

00/1200

10-15

HOLD

LISTE DER ANWEISUNGEN

PDL2

HOLD Anweisung
Die HOLD Anweisung versetzt alle holdable Programme, die im Zustand running sind, in den Zustand ready und verlangsamt die Bewegungen bis zum Stillstand. Syntax: Anmerkungen: HOLD Die HOLD Anweisung hat genau dieselbe Funktion wie der HOLD-Knopf auf dem Programmierhandgert und der Bedienungskonsole. Eine HOLD Anweisung verlangsamt einen Arm bis zum Stillstand. Die vorbesetzte Variable $HLD_DEC_PER bestimmt den Verzgerungswert. Um holdable Programme in den Zustand running zurckzubringen, mu START gedrckt werden. Die HOLD Anweisung kann sowohl in holdable als auch in non-holdable Programmen verwendet werden. HOLD ist eine asynchrone Anweisung, d.h. sie wird auch dann ausgefhrt, wenn das Programm in den Pausezustand versetzt wird, und die Abprfung der Bedingungshandler geht weiter. Wird jedoch ein Bedingungshandler freigegeben, whrend das Programm suspendiert ist, so werden die Funktionen erst bei Wiederaufnahme des Programms ausgefhrt. Die HOLD Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. HOLD CANCEL Anweisung LOCK Anweisung PAUSE Anweisung

Beispiele: Siehe auch:

IF Anweisung
Die IF Anweisung wird verwendet, um entsprechend dem Ergebnis eines booleschen Ausdrucks zwischen zwei Ausfhrungsablufen zu whlen. Syntax: IF bool_expr THEN <Anweisung>... <ELSE <Anweisung>... > ENDIF Bool_expr ist ein beliebiger Ausdruck, der ein boolesches Ergebnis ergibt. Wenn bool_expr TRUE ist, werden die Anweisung(en), die der IF Klausel folgen, ausgefhrt. Wenn bool_expr FALSE ist, wird die Kontrolle des Programms auf die erste Anweisung nach ENDIF bertragen. Wenn die Klausel ELSE spezifiziert wurde und wenn bool_expr FALSE ist, wird die Anweisung(en) zwischen ELSE und ENDIF ausgefhrt. IF (file_error) THEN WRITE (***FEHLER*** Datei nicht gefunden.) ELSE WRITE (Geladene Datei. . .) ENDIF SELECT Anweisung

Anmerkungen:

Beispiele:

Siehe auch:

LOCK Anweisung
Die LOCK Anweisung unterbricht die Bewegung fr einen bestimmten Arm, mehrere Arme oder alle Arme. Syntax: Anmerkungen: LOCK || <ARM[n] <,ARM[n]>...> | ALL || Bei Blockieren eines Arms wird dieser bis zum Stillstand verlangsamt. Die vorbesetzte Variable $HLD_DEC_PER bestimmt den Verzgerungswert. LOCK verhindert, da die auf Ausfhrungen wartenden Bewegungen ausgefhrt und neue Bewegungen fr den blockierten Arm gestartet werden. Der Programmierer kann einen Arm, mehrere oder alle Arme angeben. Wenn nichts angegeben wird, wird der Standardarm blockiert. 10-16 00/1200

PDL2

LISTE DER ANWEISUNGEN

MOVE

Um einen Arm wieder freizugeben, mu eine UNLOCK Anweisung von demselben Programm abgesetzt werden, das die LOCK Anweisung ausgegeben hatte. Wenn die UNLOCK Anweisung gegeben wurde, kann die Bewegung durch die RESUME Anweisung wieder aufgenommen werden. Whrend der Arm blockiert ist, kann die Bewegung mit der CANCEL Anweisung annulliert werden. Die LOCK Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. LOCK LOCK ALL LOCK ARM[2], ARM[5] CONDITION[3]: WHEN $DIN[3]+ DO LOCK ARM[3] ENDCONDITION Siehe auch: UNLOCK Anweisung RESUME Anweisung CANCEL Anweisung

Beispiele:

MOVE Anweisung
Die MOVE Anweisung steuert die Bewegungen der Arme. Verschiedene Klauseln und Optionen ermglichen unterschiedliche Bewegungsarten, wie in Kapitel "Steuerung von Bewegungen" beschrieben wird. Syntax: Anmerkungen: MOVE <ARM[n]> <trajectory> dest_clause <opt_clauses> <sync_clause> Die dest_clause Klausel gibt die Art der Bewegung und das entsprechende Ziel an. Sie kann aus einem der folgenden Elemente bestehen: TO || destination | joint_list || <VIA_clause> NEAR destination BY distance AWAY distance RELATIVE vector IN frame ABOUT vector BY distance IN frame BY relative_joint_list FOR distance TO destination destination (Ziel) in den obigen Klauseln kann durch POSITION, JOINTPOS oder XTNDPOS oder einen Knotenausdruck dargestellet werden. In letzterem Fall werden die Standardfelder des Bewegungsknotens benutzt.frame (Koordinaten) in obigem Knoten wird von einer der beiden vorbesetzten Konstanten BASE, TOOL oder UFRAME dargestellt. Die optionale Klausel ARM (ARM[n]) gibt den zu bewegenden Arm an. Der angegebene Arm wird fr die gesamte MOVE Anweisung verwendet. Wenn die Klausel ARM nicht enthalten ist, wird der Standardarm verschoben. Die optionale Klausel trajectory gibt eine Strecke fr die Bewegung an. Sie kann aus einer der folgenden vorbesetzten Konstanten bestehen: JOINT LINEAR CIRCULAR Wenn die Klausel trajectory nicht enthalten ist, wird der Wert $MOVE_TYPE verwendet. Die opt_clauses liefern detailliertere Anweisungen fr die Bewegung. Sie beinhalten: ADVANCE TIL cond_expr <, TIL cond_expr>... WITH designations <, Bezeichnung>... Wenn sowohl die TIL als auch die WITH Klausel spezifiziert ist, mssen alle TIL Klauseln vor den WITH Klausel angegeben werden.

00/1200

10-17

MOVE

LISTE DER ANWEISUNGEN

PDL2

Mit der Klausel sync_clause knnen sich zwei Arme gleichzeitig unter Benutzung von SYNCMOVE. bewegen. Die Arme starten und stoppen zusammen. Die optionalen Klauseln WITH und TIL knnen als Teil einer SYNCMOVE Klausel eingeschlossen werden. Die TIL Klausel kann nur auf der MOVE Seite spezifiziert werden. Anstelle des reservierten Worts MOVE kann MOVEFLY benutzt werden, um eine durchlaufende Bewegung zu spezifizieren. Zum Ausfhren von FLY muss auch die ADVANCE Klausel in die MOVEFLY Anweisung eingeschlossen werden. Wenn eine sync_clause Klausel angegeben wird, muss es SYNCMOVEFLY sein und die ADVANCE Klausel muss Teil der MOVEFLY sein. Wenn eine MOVE Anweisung sich ber mehr als eine Zeile erstreckt, mu ein Komma zum Abschluss jeder Zeile hinter dest_clause oder hinter jede optionale Klausel gesetzt werden. Am Ende der Anweisung wird das reservierte Wort ENDMOVE eingesetzt. Siehe die folgenden Beispiele. MOVE ist eine asynchrone Anweisung, d.h. sie wird auch dann ausgefhrt, wenn das Programm in den Zustand paused versetzt ist, und die Interrupt Routinen vor Beendigung der Anweisung starten knnen. MOVE NEAR pick_up BY 200.0 MOVE TO pick_up MOVE AWAY 400.0 MOVE RELATIVE VEC(100, 0, 100) IN TOOL MOVE ABOUT VEC(0, 100, 0) BY 90 IN BASE MOVE BY {alpha, beta, gamma, delta, omega} MOVE FOR dist TO destination MOVE ARM[1] TO destination MOVE JOINT TO pick_up MOVE CIRCULAR TO destination VIA arc MOVE ARM[1] TO part SYNCMOVE ARM[2] TO front MOVEFLY TO middle ADVANCE MOVE TO end_part MOVE NEAR slot BY 250 ADVANCE OPEN HAND 1 MOVE TO slot MOVE TO flange WITH CONDITION[2], CONDITION[3], WITH $PROG_SPD_OVR = 50, CONDITION[4], ENDMOVE MOVE TO pickup TIL $DIN[part_sensor]+, WITH CONDITION[1], WITH $PROG_SPD_OVR = 50, ENDMOVE MOVE ARM[1] TO slot WITH $PROG_SPD_OVR = 100, SYNCMOVE ARM[2] TO front WITH $LIN_SPD = 200, ENDMOVE MOVE TO slot TIL $DIN[1]+ MOVEFLY ARM[1] TO slot ADVANCE SYNCMOVEFLY ARM[2] TO front MOVE ARM[1] TO part, TIL $DIN[1]+, WITH CONDITION[1], -- applies to arm 1 SYNCMOVE ARM[2] TO front, WITH CONDITION[2], -- applies to arm 2 ENDMOVE Siehe auch: MOVE ALONG Anweisung Kapitel "Bewegungssteuerung"

Beispiele:

10-18

00/1200

PDL2

LISTE DER ANWEISUNGEN

OPEN

MOVE ALONG Anweisung


Die MOVE ALONG Anweisung gibt die Bewegung des Arms lngs der fr eine PATH Variable definierten Knotenpunkte an. Syntax: Anmerkungen: MOVE <ARM[n]> ALONG path_var<.NODE[node_range]> <opt_clauses> Die Optionsklausel ARM (ARM[n]) dient dazu, den zu verschiebenden Arm zu definieren und wird in der MOVE ALONG Anweisung eingeschlossen. Wenn die Klausel ARM nicht spezifiziert wird, wird der Standardarm verschoben. Der Arm ist nur im Feld fr das Hauptziel enthalten ($MAIN_POS, $MAIN_JNT, $MAIN_XTND). Wird als Hauptziel JOINTPOS ($MAIN_JNT) oder XTNDPOS ($MAIN_XTND) angegeben, mu die Armnummer mit der in der NODEDEF Definition eingesetzten bereinstimmen. Es gibt keine Mglichkeit, den Arm fr das Feld bezglich des Hilfsziels ($AUX_POS, $AUX_JNT, $AUX_XTND) zu spezifizieren. Wenn die Anweisung .NODE[node_range] nicht vorhanden ist, geht die Bewegung bis zum ersten Knotenpunkt von path_var weiter und durchluft dann alle folgenden Knotenpunkte, bis sie END path_var erreicht. Wenn dagegen die Anweisung .NODE[node_range] vorhanden ist, kann der Arm entlang einer ganzen Reihe von in Klammern spezifizierten Knotenpunkten verschoben werden. Der Bereich kann folgendermaen spezifiziert werden: [n..m] Die Bewegung geht bis zum Knotenpunkt n von path_var weiter und dann zu allen folgenden Knotenpunkten, bis sie den Knotenpunkt m von path_var erreicht. Die umgekehrte Bewegung ist mglich, wenn der Knotenpunkt n grer als der Knotenpunkt m spezifiziert wird. [n..] Die Bewegung geht bis zum Knotenpunkt n von path_var weiter und dann zu allen folgenden Knotenpunkten, bis sie das Ende von path_var erreicht. Opt_clauses kann detailliertere Informationen ber die Bewegung geben. Die Optionsklauseln sind: ADVANCE WITH designations <, Bezeichnungen>... Um eine kontinuierliche Bewegung anzugeben, kann MOVEFLY anstelle des reservierten Wortes MOVE benutzt werden. Fr die Ausfhrung von FLY mu die MOVEFLY Anweisung die Klausel ADVANCE enthalten. MOVEFLY wird am Ende des Zweigs ausgefhrt und nicht bei jedem Knotenpunkt. Auch $TERM_TYPE wird am Ende des Zweigs und nicht bei jedem Knotenpunkt ausgefhrt. Wenn eine MOVE Anweisung sich ber mehr als eine Zeile erstreckt, mu ein Komma zum Abschlu jeder Zeile hinter path_var oder hinter jede optionale Klausel gesetzt werden. Am Ende der Anweisung wird das reservierte Wort ENDMOVE eingesetzt. Siehe die folgenden Beispiele. MOVE ist eine asynchrone Anweisung, d.h. sie wird auch dann ausgefhrt, wenn das Programm in den Zustand paused versetzt ist, und die Interrupt Routinen vor Beendigung der Anweisung starten knnen. MOVE ALONG pth MOVE ALONG pth.NODE[1..5] MOVE ARM[2] ALONG pth MOVE ALONG pth, WITH $PROG_SPD_OVR = 50, ENDMOVE Siehe auch: MOVE Anweisung Kapitel "Bewegungssteuerung".

Beispiele:

OPEN FILE Anweisung


Die OPEN FILE Anweisung ffnet eine LUN fr eine angegebene Einrichtung und stellt eine Verbindung zwischen dem Programm und der Einrichtung her, durch die E/A Operationen ausgefhrt werden knnen. Syntax: Anmerkungen: OPEN FILE lun_var (device_str, access_str) <with_clause> lun_var kann eine beliebige, vom Anwender definierte INTEGER Variable sein. Das System PDL2 ordnet ihr eine LUN zu, die in den nchsten E/A Operationen verwendet werden kann, um die Einrichtung anzugeben.

00/1200

10-19

OPEN

LISTE DER ANWEISUNGEN

PDL2

device_str kann ein beliebiger STRING Ausdruck sein, die eine Einrichtung darstellt. Die Speichereinrichtungen umfassen auch einen Namen und eine Erweiterung. Die Standardeinrichtung ist 'RD:'. access_str kann ein beliebiger STRING Ausdruck sein, der die Art des Zugangs zur Einrichtung angibt. Die gltigen Zugangsbezeichnungen sind folgende: R -- read only (nur Lesen) W -- write only (nur Schreiben) RW -- read and write (Lesen und Schreiben) WA -- write append (im Anhang zur Datei schreiben) RWA -- read and write append (im Anhang zur Datei lesen und schreiben) Eine LUN bleibt geffnet, bis sie mit einer CLOSE FILE Anweisung geschlossen wird, bis die Ausfhrung des Programms vervollstndigt ist oder bis das Programm deaktiviert wird. Die Optionsklausel WITH kann vorbergehende Werte fr vorbesetzte LUN- Variablen angeben (siehe Kapitel "Serielle Ein-/Ausgaben"). WITH predef_lun_var = value <, predef_lun_var = value>... Wenn es auf der RD schon eine Datei gibt und auf diese eine OPEN FILE Anweisung angewendet wird, gibt es die folgenden beiden Mglichkeiten: Bei ffnen mit RWA Attributen wird dieselbe Datei geffnet und an ihren Inhalt wird angehngt. Bei ffnen mit RW Attributen wird eine neue Datei angelegt. Wenn eine OPEN Anweisung sich ber mehr als eine Zeile erstreckt, mu ein Komma zum Abschluss jeder Zeile hinter die letzte Klammer oder hinter jede WITH Klausel gesetzt werden. Am Ende der Anweisung wird das reservierte Wort ENDOPEN eingesetzt. Siehe die folgenden Beispiele. OPEN FILE crt1_lun (CRT1:, RW) OPEN FILE com_port (COM0:, RW) OPEN FILE file_lun (stats.log, R), WITH $FL_SWAP = TRUE, WITH $FL_BINARY = TRUE, ENDOPEN Siehe auch: CLOSE FILE Anweisung READ Anweisung WRITE Anweisung Kapitel "Serielle Ein-/Ausgaben"

Beispiele:

OPEN HAND Anweisung


Die OPEN HAND Anweisung ffnet eine Zange (tool). Syntax: Anmerkungen: OPEN HAND number <FOR ||ARM[n] <,ARM[n]>... | ALL ||> number gibt die Nummer der zu ffnenden Zange an. Fr jeden Arm stehen zwei Zangen zur Verfgung. Die ffnungsoperation hat je nach Art der Zange, auf die eingewirkt wird, unterschiedliche Auswirkungen (siehe Kapitel "Bewegungssteuerung") entsprechend der Konfiguration mit dem Tool zur HAND Konfiguration, das mit der Systemsoftware geliefert wird. Die Optionsklausel FOR ARM kann verwendet werden, um einen bestimmten Arm, eine Liste von Armen oder alle Arme anzugeben. Wenn nicht angegeben, wird der Standardarm benutzt. OPEN HAND 1 OPEN HAND 2 FOR ARM[2] Siehe auch: CLOSE HAND Anweisung RELAX HAND Anweisung Kapitel "Bewegungssteuerung"

Beispiele:

10-20

00/1200

PDL2

LISTE DER ANWEISUNGEN

PRO

PAUSE Anweisung
Die PAUSE Anweisung unterbricht ein Programm bis zur Ausfhrung einer UNPAUSE Anweisung fr das Programm. Syntax: Anmerkungen: PAUSE <|| prog_name <, prog_name>... | ALL ||> Wenn prog_name oder eine Liste von Namen angegeben wird, werden diese Programme unterbrochen. Wenn kein Name angegeben wird, wird das Programm unterbrochen, das die Anweisung ausgegeben hat. Wenn ALL angegeben wird, werden alle in Ausfhrung begriffenen Programme unterbrochen. Wenn die Anweisung fr ein Programm im Zustand running verwendet wird, wird das Programm in den Zustand paused versetzt; ein Programm im Zustand ready dagegen wird in den Zustand paused-ready versetzt. Folgendes wird nicht unterbrochen, auch wenn sich das Programm im Zustand paused befindet: laufende und auf Ausfhrung wartende Bewegungen Abfrage des Bedingungshandlers mit einer PULSE Anweisung umgekehrte Signale laufende und auf Ausfhrung wartende Systemaufrufe andere asynchrone Anweisungen (DELAY, WAIT, u.s.w.)

Obwohl die Abprfung der Bedingungshandler fortgesetzt wird, wenn das Programm in den Zustand paused versetzt ist, werden die Funktionen nicht ausgefhrt, solange das Programm in diesem Zustand ist. Die PAUSE Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. PAUSE PAUSE weld_main, weld_util, weld_cntrl PAUSE ALL UNPAUSE Anweisung

Beispiele:

Siehe auch:

PROGRAM Anweisung
Die PROGRAM Anweisung identifiziert das Programm und spezifiziert seine Attribute. Dies ist immer die erste Anweisung in einem PDL2 Programm. Syntax: Anmerkungen: PROGRAM name <attribute_list> name ist ein vom Anwender definierter Identifizierer, der dazu verwendet wird, dem Programm und der Datei, in der das Programm gespeichert werden soll, einen Namen zu geben. Der ausfhrbare Abschnitt eines Programms wird durch die BEGIN Anweisung und die END Anweisung bezeichnet. attribute_list ist eine optionale Liste, die durch Kommas von den folgenden Attributen getrennt wird: Standardarm Syntax: PROG_ARM = int_value

Die Werte von 1 bis 32 knnen verwendet werden, um einen Standardarm fr das Programm anzugeben. Wenn kein Standardarm angegeben wird, wird der Wert $DFT_ARM eingesetzt. Zustand des Arms Syntax: ATTACH | DETACH

ATTACH gibt an, da der Standardarm reserviert sein mu, wenn das Programm die Ausfhrung beginnt, whrend DETACH angibt, da er frei sein mu, wenn das Programm die Ausfhrung beginnt. ATTACH stellt den Standard fr holdable und DETACH fr nicht holdable Programme dar. In EZ Programmen kann das Attribute DETACH nicht benutzt werden.

00/1200

10-21

PUL

LISTE DER ANWEISUNGEN

PDL2

Prioritt

Syntax:

PRIORITY = int_value

Die Werte von 1 bis 3 knnen verwendet werden, um eine Prioritt fr das Programm anzugeben, wobei 3 die hchste Prioritt angibt (wie im Kapitel "Ausfhrungssteuerung" beschrieben wird). Die Standardprioritt ist 2. Klassifizierung Syntax: HOLD | NOHOLD | PLC

HOLD gibt an, da es sich um ein holdable Programm handelt; NOHOLD gibt an, da es sich um ein non-holdable Programm handelt, und SPS gibt ein SPS Programm an. HOLD wird standardmig gewhlt. Stack Size Syntax: STACK = int_value

Das Stackformat wird als Wert zwischen 0 und 65534 angegeben. Der Standardwert ist 300 Bytes. Bei Absetzen von PROGRAM VIEW mit der Option FULL wird der maximale op Keller angezeigt, der im Programm benutzt wird. Diese Information kann dazu verwendet werden, in der Endversion des Programms einen gut dimensionierten Kellerbereich vorzusehen. EZ Syntax: EZ

Wenn dieses Attribut in der Kopfzeile eines Programms benutzt wird, ergeben sich mehrere nderungen in der Behandlung des Programms durch das System. Erstens wird ein Programm mit diesem Attribut immer mit der /FULL Option geladen. Zweitens sind mehrere Anweisungen auf derselben Zeile nicht erlaubt. Drittens wird eine Routine implizit definiert, wenn eine CALL Anweisung eingefgt wird. Viertens mu das EZ Attribut angegeben werden, wenn die EZ Umgebung benutzt werden soll. Beispiele: PROGRAM example1 PROG_ARM = 2, HOLD -- VAR und CONST Abschnitt BEGIN . . . END example1 PROGRAM example2 PRIORITY = 3, NOHOLD PROGRAM example3 PLC Siehe auch: BEGIN Anweisung END Anweisung

PULSE Anweisung
Die PULSE Anweisung kehrt den aktuellen Zustand eines digitalen Ausgangssignals fr einen bestimmten Zeitraum um. Syntax: Anmerkungen: PULSE || $DOUT | $BIT || [indx] FOR p_time <ADVANCE> Indx ist ein INTEGER Ausdruck, der einen Matrizenindex darstellt. p_time ist ein INTEGER Ausdruck, der den Zeitraum in Millisekunden darstellt. Wenn die Optionsklausel ADVANCE verwendet wird, werden die nchsten PDL2 Anweisungen zusammen mit PULSE ausgefhrt; andernfalls wird das Programm bis zur Vervollstndigung der PULSE Anweisung unterbrochen. Wenn die Option ADVANCE spezifiziert ist und eine andere PULSE Anweisung vor deren Vervollstndigung ausgefhrt wird, kommt es zur berlagerung. Durch die berlagerung von PULSE Anweisungen kann es vorkommen, da die Anweisungszeit verlngert wird, bis sie eventuell die Zeit einer neuen PULSE Anweisung am selben Port umfat.

10-22

00/1200

PDL2

LISTE DER ANWEISUNGEN

PUR

PULSE ist eine asynchrone Anweisung, d.h. sie wird auch dann ausgefhrt, wenn das Programm in den Zustand paused versetzt ist, und die Interrupt Routinen vor Beendigung der Anweisung starten knnen. Die PULSE Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Es mu jedoch die ADVANCE Option benutzt werden. Siehe das Kapitel "Bedingungshandler" fr weitere Informationen. PULSE $DOUT[i] FOR 300 PULSE $DOUT[24] FOR 700 ADVANCE PULSE $BIT[4] FOR 200 Siehe auch: Kapitel "Matrizen fr Ein-/Ausgabeports".

Beispiele:

PURGE CONDITION Anweisung


Die PURGE CONDITION Anweisung lscht die Definition eines Bedingungshandlers. Syntax: Anmerkungen: PURGE CONDITION || ALL | [int_expr] <, CONDITION[int_expr]>... || int_expr ist die Nummer des zu entfernenden Bedingungshandlers. Entfernte Bedingungshandler knnen nicht wieder freigegeben werden. Die Definitionen der Bedingungshandler werden automatisch entfernt, wenn das Programm deaktiviert wird. Wird die Option ALL angegeben, so werden alle vom Programm definierten Bedingungshandler entfernt. Wenn der Bedingungshandler im vorliegenden Fall als Teil einer WITH Klausel freigegeben ist, kann er nicht entfernt werden. Wenn das Programm versucht, einen Bedingungshandler zu entfernen, der z.Z. fr ein anderes Programm reserviert ist, tritt eine Fehlerbedingung auf. Die PURGE CONDITION Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. PURGE CONDITION[1] PURGE CONDITION[error_chk], CONDITION[signal_chk] PURGE ALL ATTACH Anweisung CONDITION Anweisung ENABLE CONDITION Anweisung DISABLE CONDITION Anweisung Kapitel "Bedingungshandler"

Beispiele:

Siehe auch:

READ Anweisung
Die READ Anweisung liest die Eingabedaten aus der angegebenen LUN in die Programmvariablen. Syntax: Anmerkungen: READ <lun_var> (var_id <,var_id>...) lun_var kann eine Variable sein, die eine beliebige geffnete LUN oder die vorbesetzten LUNs, LUN_CRT, LUN_TP oder LUN_NULL angibt. Wenn lun_var nicht spezifiziert wird, wird die durch $DFT_LUN angegebene Standardausgabe-LUN verwendet. var_id kann ein beliebiger Variablenidentifizierer aus einer der folgenden Datenklassen sein: INTEGER VECTOR REAL POSITION BOOLEAN JOINTPOS STRING XTNDPOS var_id kann auch aus einem Variablenverweis bestehen, sofern es keine Begrenzungen des Werts der vorbesetzten Variablen gibt. Um festzustellen, ob es Wertgrenzen der vorbesetzten Variablen gibt, siehe das Kapitel "Liste der vorbesetzten Variablen".

00/1200

10-23

REL

LISTE DER ANWEISUNGEN

PDL2

Fr var_id kann auch das reservierte Wort NL benutzt werden. In diesem Fall wird der Rest der vorliegenden Eingabezeile ignoriert. Alle gelesenen Daten werden den entsprechenden Variablen aus der Liste der Identifizierer zugeordnet. Das gelesene Datenelement muss zum selben Typ gehren, wie der betreffende von READ bergebene Identifizierer. Bei Inkompatibilitt wird ein Fehler zurckgegeben. Optionale Formatspezifizierer knnen mit jedem var_id verwendet werden, um die Eingabe zu formatieren, wie im Kapitel "Serielle Ein-/Ausgaben" beschrieben wird. READ ist eine asynchrone Anweisung, d.h. sie wird auch dann ausgefhrt, wenn das Programm in den Zustand paused versetzt ist, und die Interrupt Routinen vor Beendigung der Anweisung starten knnen. Die vorbesetzte Variable $READ_TOUT gibt das Zeitintervall an, das fr asynchrones Lesen reserviert wird. Wenn der Begrenzer in READ bei Lesen von einem Kommunikationsport aus Mehrfachzeichen besteht, sollte die Systemprozedur COM_PORT_SET2 aufgerufen werden, um dem Port das Attribute COM_RDAHD zuzuweisen. READ (x, y, z) -- lun_var ist standardmig $DFT_LUN READ LUN_TP (Lnge, Hhe, Gewicht) OPEN FILE crt1_lun (CRT1:, RW) READ crt1_lun (menu_selection) COM_PORT_SET2 (COM0:, COM_RDAHD) -- ASCII Begrenzer auf Wagenrcklauf gefolgt von Zeilenvorschub setzen OPEN FILE com0_lun(COM0:, r) WITH $FL_ADLMT = \013\010 READ com0_lun (str::8) Siehe auch: Systemprozedur COM_PORT_SET2 DECODE Anweisung OPEN FILE Anweisung WRITE Anweisung Kapitel "Serielle Ein-/Ausgaben".

Beispiele:

RELAX HAND Anweisung


Die RELAX HAND Anweisung schliet eine Zange (Werkzeug). Syntax: Anmerkungen: RELAX HAND number <FOR ||ARM[n] <,ARM[n]>... | ALL ||> number gibt die Nummer der zu schlieenden Zange an. Fr jeden Arm stehen zwei Zangen zur Verfgung. Die Schlieoperation hat je nach Art der mit dem HAND KonfigurationsTool (mit der Systemsoftware geliefert) konfigurierten Zange, auf die eingewirkt wird, unterschiedliche Auswirkungen (siehe Kapitel "Bewegungssteuerung"). Die Optionsklausel FOR ARM kann verwendet werden, um einen bestimmten Arm, eine Liste von Armen oder alle Arme anzugeben. Wenn genaue Angaben fehlen, wird der Standardarm verwendet. RELAX HAND 1 RELAX HAND 2 FOR ARM[2] Siehe auch: CLOSE HAND Anweisung OPEN HAND Anweisung Kapitel "Bewegungssteuerung"

Beispiele:

10-24

00/1200

PDL2

LISTE DER ANWEISUNGEN

RET

REPEAT Anweisung
Die REPEAT Anweisung fhrt eine Reihe von Anweisungen aus, bis ein boolescher Ausdruck TRUE ist. Syntax: REPEAT <Anweisung>... UNTIL bool_expr bool_expr ist ein beliebiger Ausdruck, der ein boolesches Ergebnis ergibt. Da bool_expr am Ende des Zyklus ermittelt wird, wird der Zyklus selbst immer mindestens einmal ausgefhrt, auch wenn bool_expr TRUE ist, wenn der Zyklus gestartet wird. Wenn bool_expr FALSE ist, wird die Schleife erneut ausgefhrt. Wenn dieser Ausdruck dagegen TRUE ist, wird der Zyklus angehalten und das Programm mit den Anweisungen nach UNTIL fortgesetzt. REPEAT WRITE (Vorhandenes Programm,NL) WRITE (Bist du sicher? (Y/N) : ) READ(ans, NL) UNTIL (ans = Y) OR (ans = N) WHILE Anweisung FOR Anweisung

Anmerkungen:

Beispiele:

Siehe auch:

RESUME Anweisung
Die RESUME Anweisung erlaubt, eine auf Ausfhrung wartende Bewegung wieder aufzunehmen, die infolge einer LOCK Anweisung wartet. Syntax: Anmerkungen: RESUME <|| ARM[n] <,ARM[n]>... | ALL ||> Der Programmierer kann die Wiederaufnahme der Bewegung fr einen Arm, fr mehrere Arme, oder fr alle Arme spezifizieren. Wenn nichts spezifiziert wird, wird die Bewegung fr den Standardarm wieder aufgenommen. Vor Wiederaufnahme der Bewegung mu der Arm mit der UNLOCK Anweisung freigegeben werden. Falls ein Programm versucht, eine Bewegung auf einem noch blockierten Arm wieder aufzunehmen, tritt eine Fehlerbedingung auf. Die RESUME Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. RESUME RESUME ARM[3], ARM[1] RESUME ALL LOCK Anweisung UNLOCK Anweisung

Beispiele:

Siehe auch:

RETURN Anweisung
Die RETURN Anweisung gibt die Kontrolle von der ausgefhrten Routine an dem Punkt des Programms zurck, an dem die Routine aufgerufen wurde. Syntax: Anmerkungen: RETURN <(result)> Wenn die RETURN Anweisung in einer Funktionsroutine (function routine) enthalten ist, mu (result) eingeschlossen werden; dies besteht aus einem Ausdruck desselben Typs wie der der Funktionsroutine. Die RETURN Anweisung ist fr Funktionsroutinen notwendig. Wenn kein RETURN vor Erreichen vom END der Routine ausgefhrt wird, tritt eine Fehlerbedingung auf. In einer Prozedurroutine ist die RETURN Anweisung optional. Wenn sie verwendet wird, darf sie jedoch kein Ergebnis zurckgeben, sonst tritt eine Fehlerbedingung auf. In einer Routine knnen verschiedene RETURN Anweisungen verwendet werden, es wird aber nur eine ausgefhrt.

00/1200

10-25

ROU

LISTE DER ANWEISUNGEN

PDL2

Beispiele:

ROUTINE time_out : BOOLEAN -- Prfen, ob in der vorgesehenen Zeit ein Eingang empfangen wurde CONST time_limit = 3000 VAR time_slice : INTEGER BEGIN $TIMER[1] := 0 REPEAT time_slice := $TIMER[1] UNTIL ($DIN[1] = ON) OR (time_slice > time_limit) IF time_slice > time_limit THEN RETURN (TRUE) ELSE RETURN (FALSE) ENDIF END time_out ROUTINE Anweisung Kapitel "Routinen".

Siehe auch:

ROUTINE Anweisung
Die ROUTINE Anweisung deklariert eine vom Anwender definierte Routine im Vereinbarungsabschnitt eines Programms. Syntax: Prozedurroutine: ROUTINE proc_name <param_list> <Vereinbarung der Konstanten und Variablen> BEGIN <Anweisung...> END proc_name Funktionroutine : ROUTINE func_name <param_list> : return_type <Vereinbarung der Konstanten und Variablen> BEGIN <Anweisung...> -- mu eine RETURN Anweisung enthalten END func_name Param_list (Parameterliste): <(id <,id>... : id_type <; id <, id>... : id_type>...)> Gemeinsam benutzte Routine: ROUTINE name <param_list> Anmerkungen: <: return_type> EXPORTED FROM prog_name

proc_name oder func_name sind vom Anwender definierte Identifizierer, die den Namen der Routine angeben. Die Vereinbarungen VAR und CONST werden verwendet, um lokale Variablen und Konstanten der Routine zu vereinbaren. return_type ist die Datenklasse des von einer Funktion zurckgegebenen Wertes. Eine optionale param_list kann verwendet werden, um zu spezifizieren, welche Daten an die Routine bergeben werden. id ist ein vom Anwender definierter Identifizierer, und id_type ist die Datenklasse des Parameters. Die Routinen knnen als einem anderen Programm zugehrig vereinbart werden oder als ffentlich, d.h. fr andere Programme mit Hilfe der Optionsklausel EXPORTED FROM verwendbar. Bei den gemeinsam benutzten Routinen gibt prog_name den Namen des Programms an, das die Routine enthlt. Der Vereinbarungs- und der Ausfhrungsabschnitt der Routine erscheint nur in dem Programm, das die Routine enthlt. Fr weitere Informationen ber Vereinbarung und Gebrauch von Routinen siehe das Kapitel "Routinen".

10-26

00/1200

PDL2

LISTE DER ANWEISUNGEN

SIG

Beispiele:

ROUTINE positive (x : INTEGER) : BOOLEAN BEGIN RETURN (x >= 0) END positive ROUTINE push (stack : stack_type; item : POSITION) BEGIN stack.top := stack.top + 1 stack.data[stack.top] := item END push

Siehe auch:

RETURN Anweisung Kapitel "Routinen"

SELECT Anweisung
Die SELECT Anweisung wird verwendet, um abhngig vom Ergebnis eines INTEGER Ausdrucks zwischen verschiedenen Ausfhrungsablufen zu whlen. Syntax: SELECT int_expr OF CASE (int_val <, int_val>...) : <Anweisung>... <CASE (int_val <, int_val>...) : <Anweisung>... >... <ELSE: <Anweisung>... > ENDSELECT Die SELECT Anweisung sucht eine bereinstimmung zwischen den Werten von int_expr und int_val. Wenn eine bereinstimmung vorhanden ist, werden die Anweisung oder die Anweisungen, die CASE folgen, ausgefhrt, und die anderen Flle werden bersprungen. Die ELSE Optionsklausel wird, falls sie benutzt wird, ausgefhrt, wenn keine bereinstimmung vorhanden ist. Wenn keine bereinstimmung vorhanden ist und die Klausel nicht benutzt wird, wird ein Fehler ausgegeben. int_val ist ein Literalwert, eine vorbesetzte Konstante oder eine anwenderdefinierte INTEGER Konstante. Zwei CASE Klauseln knnen nicht den gleichen INTEGER Wert benutzen. Beispiele: SELECT tool_type OF CASE (1): $TOOL := utool_weld style_weld CASE (2): $TOOL := utool_grip style_grip CASE (3) $TOOL := utool_paint style_paint ELSE: tool_error(tool_type) ENDSELECT IF Anweisung

Anmerkungen:

Siehe auch:

SIGNAL Anweisung
Die SIGNAL Anweisung wird benutzt, nachdem ein begrenztes Betriebsmittel gebraucht wurde. Sie wird zusammen mit SEMAPHORE oder PATH angewandt. Syntax: Anmerkungen: SIGNAL || semaphore_var|SEGMENT path_var|EVENT user_event_code || Die SIGNAL Anweisung zeigt an, da das angegebene Betriebsmittel fr andere Programme, die darauf warten, es zu benutzen, zur Verfgung steht. semaphore_var ist eine SEMAPHORE Variable und mu zumindest mit SIGNAL initialisiert werden, um eine Anhaltbedingung zu vermeiden.

00/1200

10-27

TYPE

LISTE DER ANWEISUNGEN

PDL2

Wenn bei Ausfhrung der SIGNAL Anweisung Programme auf semaphore_var warten, wird das erste dieser Programme wieder aufgenommen. Wartet kein Programm, so wird das Signal gespeichert, und das nchste Programm, das in einen Wartezustand (WAIT) auf die semaphore_var gesetzt wird, braucht nicht zu warten. Die SIGNAL SEGMENT Anweisung erlaubt, eine z.Z. suspendierte Zweigbewegung wieder aufzunehmen. Diese Art von Bewegung wird suspendiert, wenn das Feld $SEG_WAIT eines Knotens TRUE ist. Eine Zweigbewegung kann nur durch Ausfhren einer SIGNAL SEGMENT Anweisung wieder aufgenommen werden. Das Feld $SEG_WAIT ist ein BOOLEAN Wert, der angibt, ob die Verarbeitung des Zweigs bis zur vollstndigen Ausfhrung des Zweigs suspendiert werden soll oder nicht. Dieses Feld wird zur Synchronisation der Verarbeitung einer Zweigbahn mit den anderen Aspekten der Anwendung wie z.B. Abfrage eines Fhlers, wechselseitigem Ausschlu u.s.w. benutzt. Ist der Wert des Feldes $SEG_WAIT FALSE (falsch), wird die Verarbeitung des Zweigs bezglich dieses Knotens nicht suspendiert. Die SIGNAL SEGMENT Anweisung hat keine Wirkung, wenn sie ausgefhrt wird, whrend der betreffende Zweig nicht suspendiert ist. Die Anweisung SIGNAL EVENT befriedigt ein spezifisches Anwenderereignis (siehe das Kapitel "Bedingungshandler"), wenn irgendeine Bedingung mit derselben Ereignisnummer definiert und im System aktiviert ist. Wenn keine Bedingung mit dieser Ereignisnummer aktiviert ist, hat die Anweisung keine Auswirkung. Fr Anwenderereignisse sind die Nummern von 49152 bis 50175 zulssig. Die SIGNAL Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. SIGNAL resource SIGNAL SEGMENT weld_path SIGNAL sem[1] SIGNAL EVENT 50100. WAIT Anweisung Kapitel "Bewegungssteuerung".

Beispiele:

Siehe auch:

TYPE Anweisung
Die TYPE Anweisung definiert den Beginn eines Abschnitts fr die Vereinbarung von Klassen innerhalb eines Programms. Syntax: TYPE type_name = RECORD name <, name>... : Data_type <name <, name>... : data_type>... ENDRECORD

type_name = NODEDEF <predefined_name <, predefined_name>... <NOTEACH> >... <name <, name>... : data_type <NOTEACH> >... ENDNODEDEF
Anmerkungen: Durch die Vereinbarung einer Klasse definiert der Anwender eine neue Datenklasse, die in der Vereinbarung von Variablen und Parametern verwendet werden kann. type_name kann aus einem beliebigen, vom Anwender definierten Identifizierer bestehen. Die vom Anwender definierten Datenklassen gelten fr das gesamte System. Zur Vermeidung eventueller Konflikte unter den Namen ist sicherzustellen, da immer verschiedene Namen verwendet werden. Die Feldnamen gelten lokal fr die vom Anwender definierte Datenklasse. Aus diesem Grund ist es mglich, da es zwei anwenderdefinierte Datenklassen gibt, die ein Feld mit demselben Namen enthalten. Die Datenklassen der gltigen Felder sind im Kapitel "Darstellung der Daten" beschrieben. Die TYPE Anweisung ist in ROUTINEN nicht zugelassen. Die TYPE Anweisung mu jeder Vereinbarung von Variablen vorausgehen, die vom Anwender definierte Datenklassen verwendet. Eine NODEDEF Klasse definiert die Struktur eines Zweigknotens. 10-28 00/1200

PDL2

LISTE DER ANWEISUNGEN

UNL

Eine NODEDEF Klasse kann eine beliebige Anzahl von Feldern predefined_name und eine beliebige Anzahl von Feldern name enthalten. Die NODEDEF Klasse mu aber mindestens ein Feld enthalten. predefined_name ist ein Feld des Standardknotens und hat dieselbe Bedeutung wie die entsprechende vorbesetzte Variable. Es ist z.B. mglich $MOVE_TYPE zu verwenden, die die gleiche Bedeutung hat (im Kapitel "Liste der vorbesetzten Va-riablen" beschrieben). Die NOTEACH Option, wenn in einer NODEDEF Klasse eingeschlossen, bedeutet, da diese Dateien in der Lernumgebung nicht zur Verfgung gestellt werden, und der Anwender sie folglich nicht modifizieren kann. Fr eine Liste der gltigen Felder predefined_name und weitere Informationen bezglich der Klassen RECORD und NODEDEF siehe das Kapitel "Darstellung der Daten". PROGRAM main TYPE ddd_part = RECORD name: STRING[15] count: INTEGER params: ARRAY[5] OF REAL ENDRECORD

Beispiele:

lapm_pth1 = NODEDEF $MAIN_POS $MOVE_TYPE $ORNT_TYPE $SPD_OPT $SEG_TERM_TYPE $SING_CARE weld_sch : ARRAY[8] OF REAL gun_on : BOOLEAN ENDNODEDEF
VAR count, index : INTEGER part_rec : ddd_part weld_pth : PATH OF lapm_pth1 BEGIN -- Ausfhrungsabschnitt END main Siehe auch: VAR Anweisung Kapitel "Darstellung der Daten".

UNLOCK Anweisung
Die UNLOCK Anweisung ermglicht es, die Bewegung eines Arms wieder aufzunehmen, der durch die LOCK Anweisung gesperrt wurde. Die Bewegung startet jedoch erst wieder bei Ausfhrung einer RESUME Anweisung. Syntax: Anmerkungen: UNLOCK <|| ARM[n] <, ARM[n]>... | ALL ||> Die UNLOCK Anweisung mu von demselben Programm gegeben werden, das auch die LOCK Anweisung gegeben hatte. Der Programmierer kann einen bestimmten Arm, mehrere Arme oder alle Arme angeben. Bei Fehlen einer Angabe, wird die Sperre des Standardarms aufgehoben. Um die auf Ausfhrung wartende Bewegung wieder aufzunehmen, mu nach einer UNLOCK Anweisung eine RESUME Anweisung gegeben werden. Die UNLOCK Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. UNLOCK UNLOCK ARM[4], ARM[5] UNLOCK ALL 00/1200 10-29

Beispiele:

UNP

LISTE DER ANWEISUNGEN

PDL2

Siehe auch:

LOCK Anweisung RESUME Anweisung

UNPAUSE Anweisung
Die UNPAUSE Anweisung hebt die Suspendierung der Programme auf, die durch die PAUSE Anweisung angehalten wurden. Die Auswirkung dieser Anweisung ist unterschiedlich, je nachdem ob das Attribut des Programms holdable oder non-holdable ist. Syntax: Anmerkungen: UNPAUSE || prog_name <, prog_name>... | ALL || Wenn prog_name oder eine Liste von Namen angegeben wird, wirkt die Anweisung auf die angegebenen Programme. Wenn kein Name angegeben wird, wirkt die Anweisung auf das Programm, das sie ausgegeben hat. Wenn ALL angegeben wird, betrifft die Anweisung alle Programme, die sich im Zustand paused befinden. Wenn die Anweisung von einem holdable Programm erteilt wird, werden die Programme in den Zustand running versetzt. Wenn die Anweisung von einem non-holdable Programm erteilt wird, werden die holdable Programme in den Zustand ready versetzt und die non-holdable Programme werden in den Zustand running versetzt. Die Anweisung hat keine Auswirkung auf nicht unterbrochene Programme. Die UNPAUSE Anweisung ist als Aktion fr einen Bedingungshandler zulssig. Siehe das Kapitel "Bedingungshandler" fr mehr Information. UNPAUSE weld_main, weld_util, weld_cntrl UNPAUSE ALL Siehe auch: PAUSE Anweisung

Beispiele:

VAR Anweisung
Die VAR Anweisung bezeichnet den Beginn eines Vereinbarungsabschnittes fr Variablen in einem Programm oder einer Routine. Syntax: VAR: name <, name>... : data_type <var_options> <name <, name>... : data_type <var_options>>... Gemeinsam benutzte Variablen: name <, name>... : data_type EXPORTED FROM prog_name <var_options> Var_Options: <( initial_value )> <NOSAVE> Anmerkungen: Die Vereinbarung von Variablen definiert einen Variablenidentifizierer mit Namen und Datenklasse. name kann ein beliebiger anwenderdefinierter Identifizierer sein, der noch nicht im selben Kontext gebraucht wurde. Ein und dasselbe Programm kann also nicht zwei Variable mit demselben name haben. Die gltigen Datenklassen sind im Kapitel "Darstellung der Daten" dargestellt. Der Vereinbarungsabschnitt der Variablen wird zwischen die Anweisung PROGRAM oder ROUTINE und die BEGIN Anweisung gesetzt. Die Variablen knnen als einem anderen Programm zugehrig oder als "ffentlich", d.h. fr alle Programme verwendbar vereinbart werden, wenn man die Optionsklausel EXPORTED FROM einsetzt. Fr gemeinsam benutzte Variablen gibt prog_name den Namen des Programm an, dem die Variable angehrt. Ist die NOSAVE Klausel angegeben, so werden die in dieser Vereinbarung enthaltenen Variablen nicht in der Variablendatei gesichert (.VAR Datei). Die Klauseln NOSAVE und EXPORTED FROM sind in den VAR Vereinbarungen der Routinen nicht zulssig. Die Option initial_value ist in den Vereinbarungen REAL, INTEGER, BOOLEAN und STRING zulssig. Sie wird benutzt, um einen Wert anzuzeigen, der der Variablen vor Ausfhren der BEGIN Anweisung des Programms oder der Routine zugewiesen wird. 10-30 00/1200

PDL2

LISTE DER ANWEISUNGEN

WAIT

Beispiele:

PROGRAM main VAR count, index : INTEGER (0) NOSAVE angle, dist : REAL job_complete : BOOLEAN EXPORTED FROM main error_msg : STRING[30] EXPORTED FROM error_chk menu_choices : ARRAY[4] OF STRING[30] matrix : ARRAY[2,10] OF INTEGER offset : VECTOR pickup, perch : POSITION EXPORTED FROM data1 option : STRING[10] (backup) NOSAVE safety_pos : JOINTPOS FOR ARM[2] door_frame : XTNDPOS FOR ARM[3] work_area : SEMAPHORE NOSAVE default_part : INTEGER (0xFF) NOSAVE BEGIN -- Ausfhrungsabschnitt END main CONST Anweisung TYPE Anweisung Kapitel "Darstellung der Daten".

Siehe auch:

WAIT Anweisung
Die WAIT Anweisung verlangt Zugang zu einem begrenzten Betriebsmittel. Syntax: Anmerkungen: WAIT semaphore_var semaphore_var ist eine SEMAPHORE Variable. Wenn das angeforderte Betriebsmittel nicht zur Anwendung zur Verfgung steht, wartet das Programm, bis es verfgbar ist. Dies geschieht, wenn eine SIGNAL Anweisung ausgefhrt wird. WAIT ist eine asynchrone Anweisung, d.h. sie wird auch dann ausgefhrt, wenn das Programm in den Zustand paused versetzt ist, und die Interrupt Routinen vor Beendigung der Anweisung starten knnen. WAIT resource WAIT sem[1] SIGNAL Anweisung

Beispiele: Siehe auch:

WAIT FOR Anweisung


Die WAIT FOR Anweisung setzt die Ausfhrung des Programms aus, bis die angegebene Bedingung erfllt ist. Syntax: Anmerkungen: WAIT FOR cond_expr cond_expr gibt eine Reihe von Bedingungen an, unter denen das Programm in eine Wartesituation versetzt wird. Der Ausdruck kann mit AND oder OR Operatoren erstellt werden. Die Bedingungen sind im Kapitel "Bedingungshandler" beschrieben. Wenn die Bedingung cond_expr erfllt ist, wird die Ausfhrung des Programms fortgesetzt. WAIT FOR ist eine asynchrone Anweisung, d.h. sie wird auch dann ausgefhrt, wenn das Programm in den Zustand paused versetzt ist, und die Interrupt Routinen vor Beendigung der Anweisung starten knnen. Die berwachung der WAIT FOR Bedingung kann whrend des ganzen HOLD Zustands des Programms deaktiviert werden. Dies wird erreicht, indem das Bit 5 von $PROG_CNFG auf 1 gesetzt wird. Wenn alle Programme auf diese Weise arbeiten sollen, reicht es, Bit 5 von $CNTRL_CNFG bei Systemstart auf 1 zu setzen. (Dies Bit wird bei jeder Programmaktivierung in das Bit 5 von $PROG_CNFG kopiert). Ein Deaktivieren der berwachung von WAIT FOR wie oben beschrieben hat Auswirkungen auf alle Arten von Ausdrcken, Zustnden und Ereignisse, die in WAIT FOR vorhanden sind. Es ist zu beachten, dass das Bit 5 von $PROG_CNFG zum Zeitpunkt der Interpretation von WAIT FOR betrachtet wird, so dass es innerhalb der Interrupt Service Routine gendet werden kann. Dies ist jedoch nicht zu empfehlen, da der Status des Bits dann in anderen Programmbereichen unklar sein knnt. 00/1200 10-31

WHI

LISTE DER ANWEISUNGEN

PDL2

Beispiele: Siehe auch:

WAIT FOR $DOUT[24]+ DELAY Anweisung Kapitel "Bedingungshandler".

WHILE Anweisung
Die WHILE Anweisung fhrt eine Reihe von Anweisungen solange aus, wie ein boolescher Ausdruck TRUE ist. Syntax: WHILE bool_expr DO <Anweisung>... ENDWHILE Anmerkungen: Bool_expr ist ein beliebiger Ausdruck, der ein boolesches Ergebnis produziert. Wenn bool_expr anfnglich FALSE ist, wird der Zyklus nie ausgefhrt, sondern gnzlich bersprungen. Wenn bool_expr TRUE ist, wird der Zyklus ausgefhrt und bool_expr wird wieder geprft. WHILE num < num_errors DO IF priority_index[num] < 2 THEN WRITE(err_text[num], (nicht wichtig), NL) ELSE WRITE(err_text[num], ***WICHTIG***, NL) ENDIF num := num + 1 ENDWHILE FOR Anweisung REPEAT Anweisung

Beispiele:

Siehe auch:

WRITE Anweisung
Die WRITE Anweisung schreibt die Ausgabedaten aus einem Programm auf die angegebene LUN. Syntax: WRITE <lun_var> (expr <, expr>...) Anmerkungen: lun_var kann eine Variable sein, die eine beliebige geffnete LUN oder die vorbesetzten LUNs LUN_CRT, LUN_TP oder LUN_NULL angibt. Wenn lun_var nicht spezifiziert ist, wird die durch $DFT_LUN angegebene Standardausgabe-LUN verwendet. expr kann ein beliebiger Ausdruck der folgenden Datenklassen sein: INTEGER VECTOR REAL POSITION BOOLEAN JOINTPOS STRING XTNDPOS Es kann auch das reservierte Wort NL verwendet werden. Wenn angegeben, wird ein erzwungener Zeilenumbruch eingefgt, soda folgende Eintrge auf der nchsten Ausgabezeile beginnen. Jeder expr wird in der Reihenfolge geschrieben, in der er aufgelistet ist. Optionale Formatspezifizierer knnen fr jeden expr verwendet werden, um die Ausgabe zu formatieren, wie im Kapitel "Serielle Ein-/Ausgaben" beschrieben. Die Schreiboperation auf einigen Einrichtungen (z.B. Kommunikationsports) erfolgt asynchron, soda auch andere Programme gleichzeitig ausgefhrt werden knnen. Die vorbesetzte Variable $WRITE_TOUT gibt das Zeitintervall fr Schreiboperationen an. WRITE (x, y, z) -- lun_var ist Standard $DFT_LUN WRITE LUN_TP (Der Wert von x ist , x) WRITE LUN_NULL (Dieser String wird verschwinden) OPEN FILE crt1_lun (CRT1:, RW) WRITE crt1_lun (num, NL, error_msg) Siehe auch: OPEN FILE Anweisung READ Anweisung Kapitel "Serielle Ein-/Ausgaben".

Beispiele:

10-32

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN

Handbuch fr Programmiersprache

1 2 3 4 5 6 7 8 9 10

LISTE DER INTERNEN ROUTINEN


LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

11
12 A B C D Index

LISTE DER INTERNEN ROUTINEN

Handbuch fr Programmiersprache

PDL2

Diese Seite wurde absichtlich leer gelassen

PDL2

LISTE DER INTERNEN ROUTINEN

DIS

LISTE DER INTERNEN ROUTINEN


In diesem Kapitel werden in alphabetischer Reihenfolge die internen PDL2 Routinen aufgelistet, und fr jede wird folgendes angegeben: eine kurze Beschreibung die Aufrufsequenz eine Beschreibung der Parameter Anmerkungen fr die Anwendung Beispiele

Dies Kapitel benutzt, die Syntaxnotation, die im Kapitel "Einfhrung in die Sprache PDL2" beschrieben ist, um die internen Routinen von PDL2 darzustellen. Im Absatz "Anmerkungen" der Beschreibung jeder internen Routine sind die Parameter kursiv dargestellt, um den Namen des Arguments anzuzeigen. Die folgende Liste fhrt alle internen Routinen und Funktionen auf. Mathematische Routinen: ABS - interne Funktion ACOS - interne Funktion ASIN - interne Funktion ATAN2 - interne Funktion COS - interne Funktion EXP - interne Funktion LN - interne Funktion ROUND - interne Funktion SIN - interne Funktion SQRT - interne Funktion TAN - interne Funktion TRUNC - interne Funktion ARM_COOP - interne Prozedur ARM_GET_NODE - interne Funktion ARM_JNTP - interne Funktion ARM_NUM - interne Funktion ARM_POS - interne Funktion ARM_SOFT - interne Prozedur ARM_SET_NODE - interne Prozedur ARM_XTND - interne Funktion AUX_COOP - interne Prozedur AUX_MMUX - interne Prozedur AUX_SET- interne Prozedur CONV_SET_OFST - interne Prozedur HDIN_READ - interne Prozedur HDIN_SET - interne Prozedur ON_JNT_SET - interne Prozedur ON_POS Buil t interne Prozedur ON_POS_SET - interne Prozedur ON_TRAJ_SET - interne Prozedur JNT_SET_TAR - interne Prozedur STANDBY - interne Prozedur

Arm Built-In Routines:

01/0401

11-1

DIS

LISTE DER INTERNEN ROUTINEN

PDL2

Serielle E/A Interne Routinen:

COM_PORT_GET - interne Funktion COM_PORT_SET2 - interne Prozedur DV_CNTRL - interne Prozedur DV_STATE - interne Funktion EOF - interne Funktion FL_BYTES_LEFT - interne Funktion FL_GET_POS - interne Funktion FL_SET_POS - interne Prozedur FL_STATE - interne Funktion VOL_SPACE - interne Prozedur NODE_APP - interne Prozedur NODE_DEL - interne Prozedur NODE_GET_NAME - interne Prozedur NODE_INS - interne Prozedur NODE_SET_NAME - interne Prozedur PATH_GET_NODE - interne Prozedur PATH_LEN - interne Funktion JNTP_TO_POS - interne Prozedur POS - interne Funktion POS_FRAME - interne Funktion POS_COMP_IDL - interne Prozedur POS_IDL_COMP - interne Prozedur POS_GET_APPR - interne Funktion POS_GET_CNFG - interne Funktion POS_GET_LOC - interne Funktion POS_GET_NORM - interne Funktion POS_GET_ORNT - interne Funktion POS_IN_RANGE - interne Prozedur POS_INV - interne Funktion POS_MIR - interne Funktion POS_SET_APPR - interne Prozedur POS_SET_CNFG - interne Prozedur POS_SET_LOC - interne Prozedur POS_SET_NORM - interne Prozedur POS_SET_ORNT - interne Prozedur POS_SHIFT - interne Prozedur POS_TO_JNTP - interne Prozedur POS_XTRT - interne Prozedur VEC - interne Funktion SCRN_ADD - interne Prozedur SCRN_CLEAR - interne Prozedur SCRN_CREATE - interne Funktion SCRN_DEL - interne Prozedur SCRN_FONT - interne Prozedur SCRN_GET - interne Funktion SCRN_REMOVE - interne Prozedur SCRN_SET - interne Prozedur

Pfad-Routinen:

Position-Routine:

Bildschirm-Routinen:

11-2

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

DIS

Sensorverfolgungs-Routinen:

SENSOR_GET_DATA - interne Prozedur SENSOR_GET_OFST - interne Prozedur SENSOR_SET_DATA - interne Prozedur SENSOR_SET_OFST - interne Prozedur SENSOR_TRK - interne Prozedur

Fenster-Routinen:

WIN_ATTR - interne Prozedur WIN_CLEAR - interne Prozedur WIN_COLOR - interne Prozedur WIN_CREATE - interne Prozedur WIN_DEL - interne Prozedur WIN_DISPLAY - interne Prozedur WIN_GET_CRSR - interne Prozedur WIN_LINE - interne Funktion WIN_LOAD - interne Prozedur WIN_POPUP - interne Prozedur WIN_REMOVE - interne Prozedur WIN_SAVE - interne Prozedur WIN_SEL - interne Prozedur WIN_SET_CRSR - interne Prozedur WIN_STATE - interne Funktion WIN_SIZE - interne Prozedur String-Routinen: CHR - interne Prozedur ORD - interne Funktion STR_CAT - interne Funktion STR_DEL - interne Prozedur STR_EDIT - interne Prozedur STR_INS - interne Prozedur STR_LEN - interne Funktion STR_LOC - interne Funktion STR_OVS - interne Prozedur STR_XTRT - interne Prozedur

Bitmanipulations-Routines:

BIT_ASSIGN - interne Prozedur BIT_CLEAR - interne Prozedur BIT_FLIP - interne Funktion BIT_SET - interne Prozedur BIT_TEST - interne Funktion

00/1200

11-3

ABS

LISTE DER INTERNEN ROUTINEN

PDL2

Systemdaten-Routinen:

CLOCK - interne Funktion CNTRL_GET - interne Funktion CNTRL_SET - interne Prozedur DATE - interne Funktion KEY_LOCK - interne Prozedur MEM_SPACE - interne Prozedur SYS_CALL - interne Prozedur SYS_VAR_GET - interne Prozedur SYS_VAR_SET - interne Prozedur ERR_POST - interne Prozedur ERR_TRAP_OFF - interne Prozedur ERR_TRAP_ON - interne Prozedur ARRAY_DIM1 - interne Funktion ARRAY_DIM2 - interne Funktion COND_ENABLED - interne Funktion COND_ENBL_ALL - interne Prozedur IS_FLY - interne Funktion PROG_OWNER - interne Funktion PROG_STATE - interne Funktion VAR_UNINIT - interne Funktion

FehlerbehandlungsRoutinen:

Unterschiedliche Routinen:

Interne Funktion ABS


Die interne Funktion ABS gibt den absoluten Wert einer angegebenen Zahl aus. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: ABS (number) || REAL | INTEGER || number : || REAL | INTEGER || [IN] number gibt eine positive oder negative Zahl an. number mu zum normalen Bereich fr die Datenklasse gehren. Die Klasse des Rckgabewerts ist gleich der Klasse von number. Wenn z.B. number REAL ist, ist auch der zurckgegebene Wert REAL. ABS(99.5) -- das Ergebnis ist 99.5 ABS(-28.3) -- das Ergebnis ist 28.3 ABS(-19) -- das Ergebnis ist 19 ABS(324) -- das Ergebnis ist 324

Beispiele:

Interne Funktion ACOS


Die interne Funktion ACOS gibt den Arkuskosinus des Arguments zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: ACOS (number) REAL number :REAL [IN] Der Arkuskosinus wird in Grad gemessen.. Das Ergebnis liegt in dem Bereich zwischen 0 und 180 Grad. Beispiele: number gibt die reale Zahl in dem Bereich zwischen -1 und 1. ACOS(0.5) -- das Ergebnis ist 60 ACOS(-0.5) -- das Ergebnis ist 120

11-4

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

ARM

Interne Prozedur ARM_COOP


Die interne Prozedur ARM_COOP erlaubt, die kooperative Bewegung zwischen zwei Armen an- und abzuschalten. Aufrufsequenz: Parameter: ARM_COOP (flag <, positioner_arm <,working_arm>>) flag : BOOLEAN positioner_arm : INTEGER working_arm : INTEGER [IN] [IN] [IN]

Anmerkungen:

flag wird auf ON oder OFF gesetzt, um die kooperative Bewegung an- bzw. abzuschalten. positioner_arm, wenn vorhanden, gibt die Nummer des Positionierarms an. Wenn nicht vorhanden wird $SYNC_ARM angenommen. working_arm, wenn vorhanden, gibt die Nummer des Arbeitsarms an. Wenn nicht vorhanden wird $PROG_ARM benutzt. PROGRAM coop PROG_ARM=2 VAR p: POSITION BEGIN -- Programm zum Aktivieren Kooperation zwischen arm 1 und arm 2 -- arm 1 ist der Positionierer und arm 2 der Arbeiter ARM_COOP(ON,1,2) MOVE LINEAR TO p -- arm 2 wird sich bewegen und arm 1 folgen ARM_COOP(OFF,1,2) ARM_COOP(ON) -- Fehler, da $SYNC_ARM nicht initialisiert ist $SYNC_ARM := 1 -- Aktivieren zwischen arm 1 ($SYNC_ARM) -- und arm 2 ($PROG_ARM) ARM_COOP(ON) ... END coop

Beispiele:

Interne Funktion ARM_GET_NODE


Die interne Funktion ARM_GET_NODE gibt die Nummer des nchsten zu bearbeitenden Knotens zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: ARM_GET_NODE <(arm_num)> INTEGER arm_num : INTEGER [IN] Wenn arm_num nicht angegeben wird, wird der Standardarm benutzt. Der zurckgegebene Wert gibt den nchsten Zweigknoten an, der zu bearbeiten ist. Die Bearbeitung des Zweigs erfolgt vor der Bewegung, daher betrifft der zurckgegebene Wert nicht notwendigerweise die nchste Bewegung des Zweigknotens. Wenn z.Z. kein PATH auf dem Arm bearbeitet wird, wird der Wert Null zurckgegeben. Ist PATH beendet, wird der Wert -1 zurckgegeben. Die PATH Bewegung kann niemals vor Beendigung der Verarbeitung abgeschlossen sein, da die Verarbeitung von PATH vor der Bewegung erfolgt. ROUTINE skip_node (arm_num, skip_num : INTEGER) VAR node_num : INTEGER BEGIN node_num := ARM_GET_NODE(arm_num) WHILE (node_num <> skip_num) AND (node_num > 0) DO node_num := ARM_GET_NODE(arm_num) ENDWHILE IF node_num > 0 THEN ARM_SET_NODE(skip_num + 1, arm_num) ELSE WRITE(FEHLER: Der Knoten kann nicht bersprungen werden, NL) ENDIF END skip_node

Beispiele:

00/1200

11-5

ARM

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Funktion ARM_JNTP


Die interne Funktion ARM_JNTP gibt den JOINTPOS Wert der aktuellen Position des spezifizierten Arms zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: ARM_JNTP <(arm_num)> JOINTPOS arm_num : INTEGER [IN] Wenn arm_num nicht spezifiziert wird, wird der Standardarm gewhlt. PROGRAM reset VAR zero, robot : JOINTPOS i : INTEGER BEGIN robot := ARM_JNTP FOR i := 1 TO 6 DO zero[i] := -robot[i] ENDFOR MOVE TO zero END reset

Interne Funktion ARM_NUM


Die interne Funktion ARM_NUM gibt die Komponente der Armnummer eines Wertes JOINTPOS oder XTNDPOS zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: ARM_NUM (arm_value) INTEGER arm_value : || JOINTPOS | XTNDPOS || [IN] arm_value ist der JOINTPOS oder XTNDPOS Wert, fr den die Armnummer zurckgegeben werden mu. ROUTINE loader (dest:JOINTPOS) BEGIN ... MOVE ARM[ARM_NUM(dest)] TO dest ... END loader

Interne Funktion ARM_POS


Die interne Funktion ARM_POS gibt den POSITION Wert der aktuellen Position des spezifizierten Arm zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: ARM_POS <(arm_num)> POSITION arm_num : INTEGER [IN] Der zurckgegebene Wert bezieht sich auf den derzeitigen Wert von $BASE. Wenn arm_num nicht spezifiziert wird, wird der Standardarm gewhlt. PROGRAM main VAR source : POSITION EXPORTED FROM supply dest : POSITION ROUTINE get_part EXPORTED FROM part_util ROUTINE paint_part EXPORTED FROM part_util ROUTINE release_part EXPORTED FROM part_util BEGIN dest := ARM_POS(3) MOVE NEAR source get_part paint_part MOVE TO dest release_part END main 00/1200

11-6

PDL2

LISTE DER INTERNEN ROUTINEN

ARM

Interne Prozedur ARM_SET_NODE


Die interne Funktion ARM_SET_NODE bestimmt den nchsten zu verarbeitenden Zweigknoten. Aufrufsequenz: Parameter: Anmerkungen: ARM_SET_NODE (node_num <, arm_num>) node_num : INTEGER arm_num : INTEGER [IN] [IN]

Wird kein arm_num angegeben, so wird das Standardprogramm benutzt. ARM_SET_NODE setzt den als nchstes zu verarbeitenden Arm. Dieser wird nicht notwendigerweise durch den nchsten PATH Knoten wiedergegeben, da die Verarbeitung von PATH vor der eigentlichen Bewegung erfolgt. ROUTINE skip_node (arm_num, skip_num : INTEGER) VAR node_num : INTEGER BEGIN node_num := ARM_GET_NODE(arm_num) WHILE (node_num <> skip_num) AND (node_num > 0) DO node_num := ARM_GET_NODE(arm_num) ENDWHILE IF node_num > 0 THEN ARM_SET_NODE(skip_num + 1, arm_num) ELSE WRITE(FEHLER: Knoten kann nicht bersprungen werden, NL) ENDIF END skip_node

Beispiele:

Interne Prozedur ARM_SOFT


Die interne Prozedur ARM_SOFT wird benutzt, um die Soft Servo Modalitt auf einer oder mehreren Achsen (einschl. derjenigen, die der Schwerkraft unterliegen) auf einem bestimmten Arm zu aktivieren oder zu deaktivieren. Diese Funktion wird in einigen Anwendungen benutzt, wo der Roboter sich Bewegungen anpassen muss, die von externen Krften verursacht werden. Wenn z.B. ein Werkstck aus einer Presse gezogen werden soll, schiebt eine Rolle das Stck heraus. Der Roboter muss dieser Bewegung ohne Gegenkraft folgen. Wenn die Modalitt Soft Servo aktiviert ist, sollte der Roboter stetig arbeiten. Diese Modalitt wird durch DRIVE OFF automatisch deaktiviert. Soft Servo funktioniert gut, wenn der Algorithmus des dynamischen Modells (Fast Move) aktiv ist. Der Grad der Nachgiebigkeit jeder Achse muss bei Aktivieren dieser Funktion definiert werden. Ein Wert von 100 besagt, dass die Bremsen der Achse vllig freigegeben werden sollen, 50 bedeutet halb angezogen und 0 vollstndig angezogen. Aufrufsequenz: ARM_SOFT (flag <, ax1, ax2, ax3, ax4, ax5, ax6, arm_num>) Parameter: flag : BOOLEAN ax1, 1x2, ax3, ax4, ax5, ax6: INTEGER arm_num : INTEGER [IN] [IN] [IN]

Anmerkungen:

Flag wird zum Aktivieren (ON) und Deaktivieren (OFF) der Soft Servo Modalitt benutzt. ax1, ax2, ax3, ax4, ax5, ax6 ist der Grad der Nachgiebigkeit fr jede Achse. Diese Parameter sollten nur angegeben werden, wennSoft Servo aktiviert wird. arm_num ist ein optionaler Parameter mit der Armnummer. Wenn nicht angegeben wird der Standardprogrammarm benutzt. MOVE LINEAR TO pnt0001p ARM_SOFT (ON, 100, 100, 20, 1, 0, 1) -- in diesem Abschnitt wird dem Arm ermglicht, sich unter der Einwirkung externer Krfte zu bewegen ARM_SOFT (OFF)

Beispiele:

00/1200

11-7

ARR

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Funktion ARM_XTND


Die interne Funktion ARM_XTND gibt den XTNDPOS Wert der aktuellen Position des spezifizierten Arms zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: ARM_XTND <(arm_num)> XTNDPOS arm_num : INTEGER [IN] Wenn arm_num nicht spezifiziert wird, wird der Standardarm gewhlt. curxpos := ARM_XTND MOVE TO checkxpos MOVE TO curxpos

Interne Funktion ARRAY_DIM1


Die interne Funktion ARRAY_DIM1 gibt das Format der ersten Dimension eines ARRAY zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: ARRAY_DIM1 (array_val) INTEGER array_val : ARRAY [IN] array_val kann ein ARRAY beliebiger Klasse und Dimension sein. ROUTINE print_ary(partlist : ARRAY OF INTEGER) VAR i, size : INTEGER BEGIN size := ARRAY_DIM1(partlist) FOR i := 1 TO size DO WRITE(Element , i, --> , partlist[i], NL) ENDFOR END print_ary

Interne Funktion ARRAY_DIM2


Die interne Funktion ARRAY_DIM2 gibt das Format der zweiten Dimension eines ARRAY zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: ARRAY_DIM2 (array_val) INTEGER array_val : ARRAY [IN] array_val mu eine zweidimensionale Matrix sein. Wenn eine eindimensionale Matrix verwendet wird, wird ein Fehler ausgegeben. ROUTINE print_2dim_ary(matrix : ARRAY[*, *] OF INTEGER) VAR i, j, size1, size2 : INTEGER BEGIN size1 := ARRAY_DIM1(matrix) size2 := ARRAY_DIM2(matrix) FOR i := 1 TO size1 DO FOR j := 1 TO size2 DO WRITE(Element , i, , j, --> , matrix[i, j], NL) ENDFOR END print_2dim_ary

11-8

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

ASI

Interne Funktion ASIN


Die interne Funktion ASIN gibt den Arkussinus des Arguments zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: ASIN (number) REAL number : REAL [IN] Der Arkussinus wird in Grad gemessen. Das Ergebnis liegt in dem Bereich zwischen -90 und 90 Grad. Beispiele: Number ist eine reale Zahl zwischen -1 und 1. ASIN(0.5) -- das Ergebnis ist 30 ASIN(-0.5) -- das Ergebnis ist -30

Interne Funktion ATAN2


Die interne Funktion ATAN2 berechnet den Arcus Tangens eines Quotienten. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: ATAN2 (y, x) REAL y : REAL x : REAL [IN] [IN]

Der Arcus Tangens wird in Grad berechnet. Das Ergebnis liegt zwischen -180 und 180. Der Quadrant des Punkts (x, y) bestimmt das Vorzeichen. Wenn sowohl x als auch y gleich 0 sind, tritt ein Fehler auf. x := ATAN2(0, 0) -- FEHLER x := ATAN2(1, -1) -x = 135 (siehe Diagramm)
Y -Y - a x i s Achse

Beispiele:

+1
= 135

XX - a x i s - Achse

-1

+1

Interne Prozedur AUX_COOP


Die interne Prozedur aktiviert und deaktiviert kooperative Bewegung zwischen einem Roboter und einem Stellwerk. Das Stellwerk ist als eine Gruppe von Hilfsachsen und nicht als ein zweiter Arm definiert. Aufrufsequenz: Parameter: AUX_COOP (flag, aux_joint <,arm_num>) flag : BOOLEAN aux_joint : INTEGER arm_num : INTEGER [IN] [IN] [IN]

Anmerkungen:

flag wird zum Aktivieren der kooperativen Hilfsbewegung auf ON und zum Deaktivieren auf OFF gesetzt. aux_joint ist die Anzahl der Hilfsachsen. arm_num, wenn vorhanden, gibt die Nummer des Arms an, auf dem die kooperative Hilfsbewegung ausgefhrt wird. Wenn nicht angegeben, wird $PROG_ARM benutzt. PROGRAM aux VAR x: XTNDPOS -- nimmt an, dass dies Programm auf einem System mit einem 11-9

Beispiele:

00/1200

AUX

LISTE DER INTERNEN ROUTINEN

PDL2

-- 5-achsigem Roboter, einem Positionierttisch mit zwei Achsen -- (Achsen 6 und 7) und einem zustzlichen Positionierer (Achse 8) -- luft. BEGIN -- Aktivieren der kooperativen Bewegung zwischen dem Roboter und -- dem ersten Positionierer AUX_COOP(ON,7) MOVE LINEAR TO x -- der Roboter bewegt sich in Kooperation -- Aktivieren der kooperativen Bewegung zwischen dem Roboter und -- dem zweiten Positionierer AUX_COOP(ON,8,1) -- Deaktivieren der kooperativen Bewegung zwischen dem Roboter und -- allen Positionierern AUX_COOP(OFF) END aux

Interne Prozedur AUX_MMUX


Die interne Prozedur AUX_MMUX whlt eine Gruppe von Hilfsachsen zur Steuerung, wenn die Ausrstung C3G Motor Multiplexer eingesetzt ist. Aufrufsequenz: Parameter: Anmerkungen: AUX_MMUX (operation <,aux_conf>) operation aux_conf : : INTEGER INTEGER [IN] [IN]

operation gibt die Aktion an, die auf einer Gruppe von Hilfsachsen ausgefhrt wird. Dies geschieht durch eine der folgenden vorbesetzten Konstanten: MMUX_ON -- zum Starten der aktiven Gruppe von Hilfsachsen -- in AUTO und in DRIVE-ON MMUX_OFF --MMUX_SET ---zum Abschalten in AUTO und in zum Umschalten in AUTO und in (von Gruppe a der aktiven Gruppe von Hilfsachsen DRIVE-ON der aktiven Gruppe von Hilfsachsen DRIVE-ON auf Gruppe b und umgekehrt).

Beispiele:

aux_conf muss nur angegeben werden, wenn die aktive Gruppe von Hilfsachsen umgeschaltet wird (Operation auf MMUX_SET gesetzt). Mgliche Werte werden durch die vorbesetzten Konstanten MMUX_A und MMUX_B definiert. -- schaltet die aktive Hilfsachsengruppe von Gruppe B auf Gruppe A AUX_MMUX(MMUX_SET, MMUX_A) -- startet die aktive Gruppe von Hilfsachsen AUX_MMUX(MMUX_ON)

Interne Prozedur AUX_SET


Die interne Prozedur AUX_SET wird benutzt, wenn der Roboter die elektrische Schweizange wechseln muss. Motorstrom und Resolverlesen der Schweizange mssen deaktiviert werden. Nachdem das Programm eine neue elektrische Schweizange entdeckt hat, mssen Motorstrom und Resolverlesen wieder aktiviert werden. Aufrufsequenz: Parameter: AUX_SET (flag <,aux_axis <,arm_num>>) flag : BOOLEAN aux_axis: INTEGER arm_num : INTEGER [IN] [IN] [IN]

Anmerkungen:

flag kann die Werte ON oder OFF annehmen. aux_axis gibt die Achse an, auf der Motor und Resolver abgetrennt (falls flag auf OFF gesetzt ist) oder angeschlossen (falls flag auf ON gesetzt ist) werden mssen. Ist nichts angegeben, wird die erste Achse genommen, die als Schweizange erklrt ist. arm_num gibt die Nummer des Arms an, zu der die Schweizange gehrt. Falls nicht angegeben, wird $PROG_ARM benutzt. AUX_SET(OFF, 8, 1) AUX_SET(ON, 8) 00/1200

Beispiele: 11-10

PDL2

LISTE DER INTERNEN ROUTINEN

BIT

Interne Prozedur BIT_ASSIGN


Die interne Prozedur BIT_ASSIGN weist einer INTEGER Variablen oder einem Port den Wert 1 oder 0 zu. Der dem Bit zugewiesene Wert ist das Ergebnis eines Vergleichs zweier Boole'schen Parameter, die der Prozedur bergeben werden. Aufrufsequenz: Parameter: BIT_ASSIGN (var_def, bit_num, bool_test <, op_set_clear <, bool_value >>) var_ref: bit_num: bool_test: op_set_clear: bool_value: INTEGER INTEGER BOOLEAN BOOLEAN BOOLEAN [IN, OUT] [IN] [IN] [IN] [IN]

Anmerkungen:

var_ref ist der Verweis auf eine INTEGER Variable oder einen Port. Diese interne Prozedur setzt ein Bit dieser Variablen. bit_num ist ein INTEGER Ausdruck, der das Bit angibt, das gesetzt werden soll. Der Wert muss zwischen 1 und 32 liegen, wobei 1 das am wenigsten signifikante Bit ist. Die interne Prozedur BIT_ASSIGN setzt das durch bit_num spezifizierte Bit der Variablen var_ref auf den Wert, der sich aus dem Vergleich zwischen der Boole'schen Variablen oder dem Port bool_test und dem Boole'schen Wert bool_value ergibt. Wenn bool_test gleich bool_value ist, nimmt bit_num in var_ref den in op_set_clear angegebenen Wert an; andernfalls wird auf die Negation von op_set_clear gesetzt. op_set_clear und bool_value sind optionale Parameter. Wird nichts angegeben, ist ihr Standardwert TRUE. Die folgende Abbildung zeigt die Ausfhrung der internen Prozedur BIT_ASSIGN.
IF

IF bool_test bool_test ist is equal to gleich bool_value bool_value

FALSE

Den Wert assign the value (NOT op_set_clear) (NOT op_set_clear) bit_num in var_ref to bit_num in var_ref zuweisen

TRUE assign the value Den Wert op_set_clear op_set_clear bit_num inin to bit_num var_ref zuweisen var_ref

Beispiele:

Die interne Prozedur BIT_ASSIGN kann als Aktion in einem Bedingungshandler benutzt werden. In diesem Fall werden die Werte von op_set_clear und bool_test in dem Moment bestimmt, in dem die Bedingung definiert wird, und nicht wenn die Aktion ausgefhrt wird. -- wenn $DOUT[20] TRUE ist, wird Bit 3 von value auf FALSE -- gesetzt, sonst auf TRUE BIT_ASSIGN(value, 3, $DOUT[20], FALSE, TRUE) -- wenn bool_var TRUE ist, wird Bit 2 in $AOUT[4] auf TRUE -- gesetzt,sonst auf FALSE BIT_ASSIGN($AOUT[4], 2, bool_var) BIT_ASSIGN(int_var, 7, bool_var, bool2_var, bool3_var)

Siehe auch:

POS_IDL_COMP.

00/1200

11-11

BIT

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur BIT_CLEAR


Die interne Prozedur BIT_CLEAR lscht ein Bit in einer INTEGER Variablen. Aufrufsequenz: Parameter: Anmerkungen: BIT_CLEAR(var_ref, bit_num) var_ref : INTEGER bit_num : INTEGER [IN, OUT] [IN]

var_ref ist eine INTEGER Variable oder ein Verweis auf einen Port. bit_num ist ein INTEGER Ausdruck, der das zu lschende Bit angibt. Der Wert mu zwischen 1 und 32 (einschl.) liegen, wobei 1 das am wenigsten signifikante Bit in der INTEGER ist. Die interne Prozedur BIT_CLEAR lscht das von bit_num spezifizierte Bit in der Variablen var_ref. Die interne Prozedur BIT_CLEAR kann als Aktion fr einen Bedingungshandler benutzt werden. Siehe das Kapitel "Bedingungshandler" fr mehr Information. BIT_CLEAR(value, 1) BIT_CLEAR(value, bit_num) BIT_CLEAR($WORD[2], bit_num)

Beispiele:

Interne Funktion BIT_FLIP


Die interne Funktion BIT_FLIP kann dazu benutzt werden, den positiven oder negativen bergang eines Bits auf einem der folgenden Analogports zu entdecken: $AIN, $AOUT, $GIN, $GOUT, $WORD, $USER_BYTE, $USER_WORD, $USER_LONG, $PROG_UBYTE, $PROG_UWORD, $PROG_ULONG und $PLCSTW. Diese Funktion kann in einem Bedingungsausdruck in einem Bedingungshandler oder einer WAIT FOR Anweisung benutzt werden. BIT_FLIP kann nicht als normale Anweisung im Programmkrper verwendet werden. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: BIT_FLIP(port, bit_num, bit_state) BOOLEAN port bit_num bit_state : : : INTEGER INTEGER BOOLEAN [IN] [IN] [IN]

Anmerkungen:

port ist ein INTEGER Verweis auf einen Analogport, dessen Bit getestet werden soll. bit_num ist ein INTEGER, die das zu testende Bit angibt. Der Wert muss zwischen 1 und 32 liegen, wobei 1 das am wenigsten signifikante Bit ist. Wichtig: der Bitwert wird zu Zeitpunkt der Bedingungsdefinition und nicht whrend der Abfrage des Ausdrucks bestimmt. bit_state ist ein Boole'scher Wert, der angibt, ob ein positiver (TRUE, ON) oder negativer (FALSE, OFF) bergang getestet werden soll.

Beispiel:

CONDITION[1]: WHEN BIT_FLIP ($WORD[100], 4, ON) DO HOLD ENDCONDITION ENABLE CONDITION[1] ...... WAIT FOR ($USER_BYTE[3], 5, FALSE)

11-12

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

BIT

Interne Prozedur BIT_SET


Die interne Prozedur BIT_SET setzt ein Bit in einer INTEGER Variablen. Aufrufsequenz: Parameter: Anmerkungen: BIT_SET(var_ref, bit_num) var_ref : INTEGER bit_num : INTEGER [IN, OUT] [IN]

var_ref ist eine INTEGER Variable oder ein Verweis auf einen Port. bit_num ist ein INTEGER Ausdruck, der das zusetzende Bit angibt. Der Wert muss zwischen 1 und 32 liegen, wobei 1 das am wenigsten signifikante Bit der INTEGER ist. Die interne Prozedur BIT_SET setzt das durch bit_num spezifizierte Bit in der Variablen var_ref. Die interne Prozedur BIT_SET kann in Aktionen in Bedingungshandlern benutzt werden. Weitere Informationen finden sich im Kapitel "Bedingungshandler". BIT_SET(value, 1) BIT_SET(value, bit_num) BIT_SET($WORD[2], bit_num)

Beispiele:

Interne Funktion BIT_TEST


Die interne Funktion BIT_TEST gibt einen BOOLEAN Wert zurck, der angibt, ob ein Bit in einer INTEGER gesetzt oder gelscht ist. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: BIT_TEST(test_val, bit_num <, bit_state>) BOOLEAN test_val bit_num bit_state : : : INTEGER INTEGER BOOLEAN [IN] [IN] [IN]

Anmerkungen:

test_val ist ein INTEGER Wert, dessen Bit getestet werden soll. test_val kann ein Ausdruck, ein benutzerdefinierter Variablenverweis oder ein Verweis auf einen Port sein. bit_num ist ein INTEGER Wert, der das zu testende Bit angibt. Der Wert mu zwischen 1 und 32 (einschl.) liegen, wobei 1 das am wenigsten signifikante Bit des INTEGER ist. bit_state ist ein BOOLEAN Wert, der angibt, auf welchen Bitzustand geprft werden soll. Wenn nicht angegeben, wird ON angenommen. Wenn die interne Funktion BIT_TEST in einem Bedingungshandler benutzt wird, mu bit_state angegeben werden. Dies ist auch bei Benutzen von BIT_TEST in einer WAIT FOR Anweisung TRUE. Die interne Funktion BIT_TEST gibt TRUE zurck, wenn das von bit_num spezifizierte Bit in test_val sich z.Z. im von bit_state angegebenen Zustand befindet. bool_var:= BIT_TEST($WORD[index], bit_num) bool_var:= BIT_TEST(test_val, bit_num) bool_var:= BIT_TEST(test_val, bit_num, FALSE)

Beispiele:

Interne Prozedur CHR


Die interne Prozedur CHR ordnet einem String in der angegebenen Position ein Zeichen zu, das durch den entsprechenden numerischen Code spezifiziert wird. Aufrufsequenz: Parameter: CHR (str, index, char_code) str : STRING index : INTEGER char_code : INTEGER [IN, OUT] [IN] [IN]

Anmerkungen:

str ist die STRING Variable, die das Zeichen erhalten soll. Index ist die Position in str, in der das Zeichen zugeordnet wird.

00/1200

11-13

CLO

LISTE DER INTERNEN ROUTINEN

PDL2

char_code ist der numerische Code, der zur Spezifizierung des Zeichens verwendet wird. (Der Anhang "Zeichensatz" enthlt eine Tabelle der Standard ASCII Zeichen und die verschiedenen anderen Zeichenstze des Systems.) Wenn str nicht initialisiert ist und index eins ist, wird str mit der Lnge eins mit einem Wert, der gleich dem Zeichen ist, initialisiert. Wenn dagegen eine Initialisierung gegeben wird, kann eine beliebige Position in str spezifiziert werden. str kann um ein Zeichen erweitert werden, wenn die neue Lnge noch innerhalb des fr STRING deklarierten Lngenfeldes liegt. str wird nicht verndert, wenn die deklarierte Lnge durch die Erweiterung berschritten wird. PROGRAM chr_test VAR abc : STRING[5] indx, code : INTEGER BEGIN abc := ACCD code := 66 -- ASCII Code fr B indx := 2 CHR(abc, indx, code) -- abc entspricht ABCD code := 69 -- ASCII Code fr E indx := 5 CHR(abc, indx, code) -- abc entspricht ABCDE code := 70 -- ASCII Code fr F indx := 6 CHR(abc, indx, code) -- abc ist noch gleich 'ABCDE' (kein Fehler) END chr_test

Beispiele:

Interne Funktion CLOCK


Die interne Funktion CLOCK gibt die aktuelle Uhrzeit zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Anmerkungen: CLOCK INTEGER Die aktuelle Uhrzeit wird vom 1. Januar 1980 an in Sekunden angegeben; der Wert 0 zum Beispiel bedeutet Mitternacht am 31. Dezember 1979. CLOCK wird typischerweise zur Messung von Unterschieden in der Uhrzeit verwendet. Ein negativer Wert gibt die fehlende Regulierung der Hardware Uhr an. Beispiele: Der Wert wird jede zweite Sekunde erhht. cur_time := CLOCK WRITE(CLOCK, NL) -- angenommen die Uhrzeit ist 1514682000 -- Zeitinterval von 30 Sekunden WRITE(CLOCK, NL) -- jetzt ist die Uhrzeit 1514682030

Interne Funktion CNTRL_GET


Die interne Funktion CNTRL_GET gibt die Parameter der Steuereinheit zurck, die nicht ber vorbesetzte Variablen zugnglich sind. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: CNTRL_GET(code) INTEGER code : INTEGER [IN] code gibt den Parameter der Steuereinheit an, der gendert werden soll. Der Rckgabewert ist der aktuelle Wert dieses Parameters. Fr eine Liste der modifizierbaren Parameter der Steuereinheit siehe die interne Routine CNTRL_SET. x : = CNTRL_GET(1)

Beispiele:

11-14

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

CNT

Interne Prozedur CNTRL_SET


Die interne Prozedur CNTRL_SET erlaubt es, die Steuerparameter zu setzen, die nicht ber vorbesetzte Variablen zugnglich sind. Aufrufsequenz: Parameter: Anmerkungen: CNTRL_SET(code, value) code : INTEGER value : INTEGER [IN] [IN]

code gibt den Steuerparameter an, der modifiziert werden soll, whrend value den neuen Wert darstellt, der dem Parameter zugewiesen wird. Es muss kalt oder warm neu gestartet werden, um die neuen Werte wirksam zu machen. Ohne Neustart gibt CNTRL_GET die Werte zurck, die beim letzten Start aktuell waren. Mit CNTRL_SET knnen die folgenden Steuereinheitsparameter gendert werden: Code 1 Wiederanlauf nach Stromausfall Wiederanlauf nach Stromausfall wird zunchst durch Aufrufen der internen Routine CNTRL_SET mit dem Parameter value auf 1 aktiviert. Es muss kalt oder warm neu gestartet werden, damit dieser neue Wert wirksam wird. Wenn value auf 1 gesetzt ist, wird der Wert der vorbesetzten Variablen $PWR_RCVR betrachtet. Ist deren Wert 1, so fhrt das System eine volle Wiederaufnahme durch. Wenn $PWR_RCVR den Wert 0 hat, erfolgt ein Warmstart. Wenn value auf 1 gesetzt ist, ist Wiederanlauf nach Stromausfall unabhngig vom Wert der $PWR_RCVR deaktiviert, da deren Wert in diesem Fall nicht bercksichtigt wird. Code 2 Maximalzahl von Netzservern. value gibt die maximale Anzahl von Netzservern an, die gleichzeitig aktiv sein knnen. Die Standardzahl ist 0. Wenn irgendein Netzserver benutzt werden soll, mu daher die - interne Prozedur CNTRL_SET aufgerufen werden. Maximalzahl der installierten Kanle. value gibt die maximale Anzahl der Kanle zur Kommunikation an. Standardmig stehen zwei zur Verfgung, was fr die meisten Systeme in DDCMP Netzen reicht. Bedeutung Bedeutung

CNTRL_SET (1,1)

CONFIGURE CNTRLER RESTART CNTRLER RESTART WARM OR WARM OR COLD COLD KONFIGURIEREN NOW THE POWER FAILURE JETZT IST DER WIEDERANLAUF NACH RECOVERY IS ENABLED STROMAUSFALL FREIGEGEBEN

TRUE

IF
IF $PWR_RCVR $PWR_RCVR has value 1 mit Wert 1

FALSE

Das System luft The system will nach einem Stromrecover vollen Moausfall imin full mode after awiederfailure dus power an

The system will Das System luft perform a Stromnach einemrestart ausfall warm wieder warm after a power an failure

Beispiele:

CNTRL_SET(1, 0) -- sperrt Wiederanlauf nach Stromausfall CNTRL_SET(2, 3) -- setzt ein Maximum von 3 Netzservern CNTRL_SET(3, 4) -- erhht die Maximalzahl von installierten Kanlen auf 4 11-15

00/1200

COM

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Funktion COM_PORT_GET


Die interne Funktion COM_PORT_GET gibt die aktuellen Attribute eines Kommunikationsports zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: COM_PORT_GET (device_str <,rd_buff_size>) INTEGER device_str : STRING rd_buff_size : INTEGER [IN] [OUT]

device_str kann irgendeiner der Einrichtungsstrings der Kommunikationsports sein: COM0: COM1: COMP: COM2: Der zurckgegebene Wert ist eine INTEGER Maske, die die aktuellen Attribute des spezifizierten Kommunikationsports anzeigt (die 8 Bits ganz rechts und die 3 Bits ganz links in der Maske werden nicht benutzt). Die Maske ist wie folgt zu lesen:

3Bits -

3Bits

2Bits Zeichen

1Bit Vorauslesen

1Bit Xon/Xoff

2Bits

2Bits

2Bits 8Bits8bits -

Protokoll

7/8 Bits Stop Bits Paritt Baud

Fr die obigen Felder gelten die folgenden Bedingungen: Baud: Paritt: Stop Bits: 7/8 Bits: Xon/Xoff: Vorauslesen: Zeichen: Protokoll: 1 fr 9600, 2 fr 4800, 3 fr 2400, 4 fr 1200, 5 fr 300, 6 fr 110, 7 fr 19200, 8 fr 38400. 1 fr ungerade Paritt, 2 fr gerade Paritt, 3 fr keine Paritt. 1 fr 1 Stop Bit, 2 fr 1,5 Stop Bits, 3 fr 2 Stop Bits. 1 fr 7 Bits pro Zeichen, 2 fr 8 Bits pro Zeichen 0 fr kein Xon/Xoff, 1 fr Xon/Xoff. 0 fr keinen Vorauslese-Puffer, 1 fr Vorauslese-Puffer benutzt 1 fr Passall, 2 fr Ascii, 3 fr Ascii+Passall, 0 fr None. 0 Standard, 1 fr TTY, 2 fr FD, 3 fr TISOFT, 4 fr KERMIT, 5 fr DDCMP, 6 fr CRT Emulator. Die 8 Bits ganz rechts und die 3 Bits ganz links in der Maske werden nicht benutzt. Zum Lesen der Portattribute knnen die folgenden vorbesetzten Konstanten benutzt werden: COM_PAR_ODD, COM_PAR_EVEN, COM_PAR_NO, COM_CHAR, COM_PASAL, COM_STOP1, COM_STOP2, COM_STOP1_5, COM_BIT7, COM_BIT8, COM_RDAHD, COM_XSYNC. rd_buff_size ist ein optionaler Parameter, der dieser Routine bergeben werden muss, um zu erfahren, wie gro der aktuell benutzte Vorauslese-Puffer ist. PROGRAM get_port NOHOLD VAR attr_mask, temp_mask, buff_size : INTEGER BEGIN attr_mask := COM_PORT_GET(COM0:, buff_size) temp_mask := COM_CHAR OR COM_PASAL IF attr_mask AND temp_mask = temp_mask THEN WRITE (Ascii+Passall, NL) ELSE IF attr_mask AND COM_CHAR = COM_CHAR THEN WRITE (Ascii, NL) ELSE IF attr_mask AND COM_PASAL = COM_PASAL THEN WRITE (Pasall, NL) ELSE WRITE (keine Zeichenmanipulierung, NL) ENDIF

Beispiele:

11-16

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

COM

ENDIF ENDIF IF attr_mask AND COM_PAR_NO = COM_PAR_NO THEN WRITE (keine Paritt, NL) ELSE IF attr_mask AND COM_PAR_EVEN = COM_PAR_EVEN THEN WRITE (gerade Paritt, NL) ELSE WRITE (ungerade Paritt, NL) ENDIF ENDIF IF attr_mask AND COM_STOP2 = COM_STOP2 THEN WRITE (2 Stop Bits, NL) ELSE IF attr_mask AND COM_STOP1 = COM_STOP1 THEN WRITE (1 stop bit, NL) ELSE WRITE (1.5 stop bit, NL) ENDIF ENDIF IF attr_mask AND COM_BIT7 = COM_BIT7 THEN WRITE (7 bits, NL) ELSE WRITE (8 bits, NL) ENDIF IF attr_mask AND COM_XSYNC = COM_XSYNC THEN WRITE (Xon/Xoff, NL) ELSE WRITE (kein Xon/Xoff, NL) ENDIF IF attr_mask AND COM_RDAHD = COM_RDAHD THEN WRITE (Vorauslesepuffer-Gre:, buff_size ,NL) ELSE WRITE (kein Vorauslese-Puffer, NL) ENDIF

attr_mask := attr_mask AND 0xFF00 SHR 8 SELECT attr_mask OF CASE (1): WRITE (9600, NL) CASE (2): WRITE (4800, NL) CASE (3): WRITE (2400, NL) CASE (4): WRITE (1200, NL) CASE (5): WRITE (300, NL) CASE (6): WRITE (110, NL) CASE (7): WRITE (19200, NL) CASE (8): WRITE (38400, NL) ENDSELECT END getport

00/1200

11-17

COM

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur COM_PORT_SET


Ab SW Version 4.21 ist die interne Prozedur COM_PORT_SET durch COM_PORT_SET2 ersetzt worden. Programme, die mit SW Versionen vor 4.21 geschrieben wurden, werden weiterhin untersttzt. Zum Schreiben neuer Programme, die die Attribute bestimmter Kommunikationsport ndern sollen, benutze man die neue Routine COM_PORT_SET2 .

Interne Prozedur COM_PORT_SET2


Die interne Prozedur COM_PORT_SET2 legt die Attribute eines Kommunikationsports fest. Aufrufsequenz: Parameter: COM_PORT_SET2 (device_str, attributes <,rd_buff_size>) device_str : STRING attributes : INTEGER rd_buff_size : INTEGER [IN] [IN] [IN]

Anmerkungen:

device_str kann einer der folgenden Strings sein: COM0: COM1: COMP: COM2: attributes ist eine INTEGER Maske, die die Attribute angibt, die fr einen bestimmten Kommunikationsport gesetzt werden sollen. Die folgenden vorbesetzten Konstanten reprsentieren diese Attribute: COM_BD110 COM_PAR_ODD COM_BD300 COM_PAR_EVEN COM_BD1200 COM_PAR_NO COM_BD2400 COM_PASAL COM_BD4800 COM_STOP1 COM_BD9600 COM_STOP2 COM_BD19200 COM_STOP1_5 COM_BD38400 COM_BIT7 COM_CHAR COM_BIT8 COM_CHARNO COM_RDAHD COM_XSYNC COM_RDAHD_NO COM_XSYNC_NO Es kann eine Sequenz von Attributen durch Aneinanderreihen mit OR Operatoren erzeugt werden. Wenn im attributes Parameter die vorbesetzte Konstante angegeben ist, wird auf dem spezifizierten Port ein Vorauslese-Puffer benutzt. Dessen Standardgre ist 384 Bytes. Wird ein grerer Puffer verlangt, muss die gewnschte Puffergre COM_PORT_SET2 bergeben werden. Dies muss so aufgerufen werden, dass auer dem Attribut COM_RDAHD auch die Puffergre im optionalen Parameter rd_buff_size bergeben wird.

Beispiele:

Bei bergabe des Parameters rd_buff_size muss auch COM_RDAHD angegeben werden. attr_mask := COM_BD2400 OR COM_PAR_ODD COM_PORT_SET2(COM0:, attr_mask) COM_PORT_SET2(COM0:, COM_BD4800 OR COM_BIT7 OR COM_STOP1) -- ntzlich, wenn der READ Begrenzer aus Mehrfachzeichen besteht COM_PORT_SET2(COM0:, COM_RDAHD) -- Benutzen des Systempuffers von 384 Bytes COM_PORT_SET2(COM0:, COM_RDAHD , 1000) -- Benutzen eines Vorauslese-Puffers von 1000 Bytes

11-18

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

CON

Interne Funktion COND_ENABLED


Die interne Funktion COND_ENABLED testet eine Bedingung, um zu sehen, ob sie aktiviert ist, und bringt ein Boole'sches Ergebnis zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: COND_ENABLED (cond_num <,prog_name >) BOOLEAN cond_num : INTEGER prog_name: STRING [IN] [IN]

cond_num ist die Nummer der Bedingung, die getestet werden soll. prog_name ist der Name des Programms, zu dem die Bedingung cond_num gehrt. Ist nichts angegeben, wird angenommen, dass sie zu dem Programm gehrt, das die Routine aufgerufen hat. Der zurckgegebene Wert ist TRUE, wenn die die Bedingung cond_num (lokal oder global) aktiviert ist, und FALSE, wenn sie deaktiviert ist. Ist keine solche Bedingung definiert, wird ein Fehler gemeldet. -- Testen der Bedingung 3 im Programm pippo bool_var := COND_ENABLED(3, pippo) -- Testen der Bedingung 5 im ausfhrenden Programm bool_var := COND_ENABLED(5) -- Prfen, ob Bedingung 1 aktiviert ist, um sie zu deaktivieren IF COND_ENABLED(1) THEN DISABLE CONDITION[1] ENDIF

Beispiele:

Siehe auch:

Das Kapitel Bedingungshandler.

Interne Prozedur COND_ENBL_ALL


Die interne Prozedur COND_ENBL_ALL bringt den aktuellen Status (aktiviert oder deaktiviert) der Bedingungen zurck, die durch ein bestimmtes Programm definiert sind. Aufrufsequenz: Parameter: Anmerkungen: COND_ENBL_ALL (cond_map <,prog_name >) cond_map : ARRAY OF INTEGER prog_name: STRING [IN, OUT] [IN]

cond_map ist eine Matrix mit mindestens 9 Elementen, die nach Ausfhrung dieser Routine die Bitverknpfung der mit dem Programm verbundenen Bedingungshandlern enthlt. Fr jedes Matrixelement werden nur die Bits von 1 bis 30 benutzt. Ist ein Bit auf 1 gesetzt, bedeutet dies, dass die betreffende Bedingung aktiviert ist. Wenn ein Bit gleich 0 ist, ist die Bedingung entweder nicht aktiviert oder nicht definiert. Eine hnliche Verknpfung gilt in der Programmkellervariablen $PROG_CONDS, aber diese enthlt Informationen darber, welche Bedingungshandler vom Programm definiert sind. Mit dieser Routine kann geprft werden, welche Bedingungshandler aktiviert sind. prog_name ist der Name des Programms, zu dem die Bedingungen gehren. Wenn nichts angegeben ist, wird das aufrufende Programm angenommen. Mit dieser Routine kann man dieselbe Information von PDL2 erhalten wie durch den Systembefehl PROGRAM VIEW /FULL, wo die aktivierten Bedingungen durch ein Stellvertreter Symbol markiert sind. PROGRAM enball NOHOLD VAR al_enbl_chh : ARRAY[15] OF INTEGER i, j, mask : INTEGER s : SEMAPHORE NOSAVE BEGIN -- Informationen ber aktivierte Bedingungen im Programm "enball" holen COND_ENBL_ALL(al_enbl_chh, enball) WRITE (NL) -- nur die ersten 9 Elemente von $PROG_CONDS und al_enbl_chh 11-19

Beispiele:

00/1200

CON

LISTE DER INTERNEN ROUTINEN

PDL2

FOR i := 1 TO 9 DO mask := j := 1 WHILE mask AND 0x3FFFFFFF <> 0 DO -- ist die Bedingung definiert? IF $PROG_CONDS[i] AND mask <> 0 THEN WRITE ( Bedingung , (i - 1) * 30 + j::3, ist definiert) -- ist sie aktiviert? IF al_enbl_chh[i] AND mask <> 0 THEN WRITE ( und aktiviert, NL) ELSE WRITE (NL) ENDIF ENDIF mask := mask SHL 1 j := j + 1 ENDWHILE ENDFOR WAIT s END enball Siehe auch: das Kapitel Liste der vorbesetzten Variablen ($PROG_CONDS) das Kapitel Bedingungshandler.

Interne Prozedur CONV_SET_OFST


Die interne Prozedur CONV_SET_OFST setzt den Verschiebeabstand der Frdererbasis. Aufrufsequenz: Parameter: CONV_SET_OFST (distance, conv_tbl_idx <,arm_num >) distance: conv_tbl_idx: arm_num: REAL INTEGER INTEGER [IN] [IN] [IN]

Anmerkungen:

distance ist der Abstand zwischen dem Werkstck und dem Sensor, der seinen Durchlauf auf dem Frderer aufnahm. Bei einem Kreisfrderer muss die Entfernung lngs des Umfangs berechnet werden. conv_tbl_idx ist der Index der Frderertabelle. arm_num ist die Armnummer. Wenn nichts angegeben ist, wird der Standardarm benutzt. Weitere Einzelheiten finden sich im Kapitel Bewegungssteuerung im Handbuch C3G Programmieranleitung. -- Setzen der Verschiebung von Frderer 1 des Arms 2 auf 1000.5 CONV_SET_OFST (1000.5, 1, 2)

Beispiele:

Interne Funktion COS


Die interne Funktion COS gibt den Kosinus eines angegebenen Winkels zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: COS (angle) REAL angle : REAL [IN] angle wird in Grad angegeben. Der ausgegebene Wert liegt zwischen -1.0 und 1.0. x := COS(87.4) -- x = 0.04536 x := SIN(angle1) * COS(angle2)

11-20

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

DAT

Interne Funktion DATE


Die interne Funktion DATE gibt das derzeitige Datum oder das Datum eines bestimmten Zeitpunkts. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: DATE <(date_in)> STRING date_in : INTEGER [IN] Das Datum wird im Format Tag/Monat/Jahr zurckgegeben. Der Tag hat zwei Zeichen, der Monat drei und das Jahr zwei. Jede Zeichengruppe ist durch einen Bindestrich (-) getrennt. Die Mindestlnge des Strings ist 9 Zeichen zur Aufnahme von Tag, Monat und Jahr. Um auch Stunde, Minute und Sekunde zu erhalten, muss der String mit 20 Zeichen vereinbart werden. Wird der Rckgabewert einer Variablen mit einer Maximallnge von weniger als 9 zugewiesen, so wird das Ergebnis abgeschnitten. date_in muss als Ganzzahlformat entsprechend folgender Tabelle bergeben werden. Das Beispiel macht verstndlich, wie der Eingabedatumswert eingerichtet werden muss. 7Bits JAHR 4Bits MONAT 5Bits TAG 5Bits 6Bits 5Bits

STUNDE MINUTEN SEKUNDEN

Fr die obigen Felder gelten die folgenden Bedingungen: JAHR: MONAT: TAG: STUNDE: MINUTEN: SEKUNDEN: der bergebene wert ist das gewnschte Jahr minus 1980 (fr 1980 ist das Feld also Null; fr 2001 ist es 2001 - 1980 d.h. 21.) ein Wert zwischen 1 und 12 ein Wert zwischen 1 und 31 ein Wert zwischen 0 und 23 ein Wert zwischen 0 und 59 ein Wert zwischen 0 und 29, die wirkliche Sekundenzahl wird durch 2 geteilt

Beispiele:

Wenn date_in nicht angegeben wird, wird das aktuelle Datum zurckgegeben. Sonst wird das date_in entsprechende Datum zurckgegeben. PROGRAM pr_date VAR date_str : STRING[20] old_time : INTEGER BEGIN old_time := 0b00011100111111000101110011001010 . . . date_str := DATE WRITE(Aktuelles DATUM (tt-mmm-jj) = , date_str, NL) WRITE(Altes DATUM = , DATE(old_time), NL) -- should be 28-JUL-94 END pr_date

00/1200

11-21

DV_

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur DV_CNTRL


Die interne Prozedur DV_CNTRL wird zur Steuerung einer Kommunikationseinrichtung benutzt. Aufrufsequenz: Parameter: Anmerkungen: DV_CNTRL (code <, param>...) code : INTEGER param : Datenklasse wird vom Code [IN] [IN/OUT] angegeben

code ist ein Ganzzahlausdruck, der den Befehl angibt, der ausgefhrt werden soll. param stellt die Liste der Parameter dar, die fr den von code spezifizierten Befehl gebraucht werden. Die folgende Liste zeigt die Werte fr code und die mit ihnen verbundenen Parameter: Code 1 Bedeutung DDCMP Statistik zurckgeben. Parameter: - ein STRING mit dem Einrichtungsnamen. Dieser muss als Wert bergeben werden. - eine INTEGERMATRIX [20], der auf die DDCMP Statistik gesetzt wird. Dies muss als Verweis bergeben werden. - eine INTEGER Marke, die anzeigt, ob die DDCMP Statistik zurckgesetzt werden soll. Diese muss als Wert bergeben werden. 8 Netzwerkverbindung unterbrechen. Parameter: - ein INTEGER lun Index, der beim ffnen von NET0: zurckgegeben wurde . Als Wert bergeben. 11 Anhalten des Netzwerk-Servers oder der Service Tasks. Parameter: - eine INTEGER fr Server ID Nummer. Als Wert bergeben.. 16 Starten oder Stop des DDCMP Treibers auf einem bestimmten Port. Parameter: - ein STRING mit dem Einrichtungsnamen - ein INTEGER Befehlswert mit folgender Bedeutung: 1. Start (voller Modus) 2. Start (Wartungsmodus) 3. Stop Die vorbesetzte Variable $DV_STS zeigt den Status der letzten internen Routine DV_CNTRL an. Im Gegensatz zu den anderen vorbesetzten Variablen gibt es nicht eine vorbesetzte Variable $DV_STS fr jedes Programm, sondern nur eine fr das gesamte System. Ein interner Aufruf DV_CNTRL ist eine asynchrone Anweisung, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den Zustand paused versetzt wird, und die Interrupt Routinen starten knnen, bevor die Routine beendet ist.

Beispiele:

PROGRAM dcmstats NOHOLD VAR as_dev : STRING[20] gi_stats : ARRAY[20] OF INTEGER lun : INTEGER BEGIN OPEN FILE lun (CRT2:, rw) WRITE lun (Device Name ? ) READ lun (as_dev) DV_CNTRL(1, (as_dev), gi_stats, 0) -- as_dev als Wert bergeben . . . END dcmstats 00/1200

11-22

PDL2

LISTE DER INTERNEN ROUTINEN

DV_

Interne Funktion DV_STATE


Die interne Funktion DV_STATE gibt Information ber eine spezifizierte Einrichtung zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: DV_STATE (dev_name_str) INTEGER dev_name_str : STRING [IN] dev_name_str ist der Name der Einrichtung, ber die Informationen eingeholt werden sollen. dev_name_str mu der logische Name des Protokolls sein, das auf der Einrichtung installiert ist. Ist das Protokoll DDCMP auf COM0: installiert, so ist der logische Name 'DCM0:'. Jedes Bit des Rckgabewerts gibt bestimmte Informationen ber die Einrichtung an. Ein Rckgabewert Null bedeutet, da die Einrichtung nicht existiert. In der folgende Tabelle finden sich die Bedeutungen der einzelnen Bits. Bits 1 2 3-5 3 4 5 6 -: : : : Wert 1 1 Bedeutung die Einrichtung ist reserviert auf der Einrichtung ist eine Datei geffnet auf der Einrichtung ist ein Protokoll montiert: TISOFT Kermit DDCMP CRT_Emulator nicht benutzt Einrichtungstyp: die NULL: Einrichtung eine Fenstereinrichtung eine Dateieinrichtung ein serieller Port ohne montiertes Protokoll das Diskettenlaufwerk serielle Leitung mit montiertem TISOFT Protokoll serielle Leitung mit montiertem Kermit Protokoll serielle Leitung mit montiertem DDCMP Protokoll serielle Leitung mit montiertem Protokoll eine Netzwerkeinrichtung eine Filter nicht benutzt

6-8 9-15

1 : 2 : 3 : 4 : 6 : 7 : 8 : 9 : 10 : 11 : 16-32 Beispiele: 12 : --

inform_int := DV_STATE(dev_name_str)

Interne Funktion EOF


Die interne Funktion EOF bringt einen Bool'schen Wert zurck, der sich aus einer Abprfung ergibt, ob das Dateiende (EOF) beim letzten Lesen angetroffen wurde. Die lun muss mit dem Attribute " rwa oder r geffnet sein, sonst wird das EOF nicht angetroffen und EOF gibt immer FALSE zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: 00/1200 EOF (lun_id) BOOLEAN lun_id : INTEGER [IN] 11-23

ERR

LISTE DER INTERNEN ROUTINEN

PDL2

Anmerkungen:

lun_id kann eine beliebige, vom Anwender definierte Variable sein, die eine geffnete LUN darstellt. Wenn die letzte Operation mit lun_id eine READ Operation war und das Ende der Datei erreicht worden war, bevor alle angegebenen Variablen gelesen wurden, wird eine Bedingung TRUE ausgegeben. Wird das Ende der Datei erreicht, bevor die READ Anweisung beendet ist, werden alle noch nicht gelesenen Variablen als nicht initialisiert gesetzt. Wenn lun_id mit einem Kommunikationsport verknpft ist, wird das Dateiende (EOF) nicht erkannt. In diesem Fall muss im Programm definiert werden, welches Zeichen als Dateiende gilt, und auf diesen abgeprft werden. OPEN FILE lun_id (data.txt, R) READ lun_id (str) WHILE NOT EOF(lun_id) WRITE (str, NL) READ lun_id (str) ENDWHILE OPEN FILE lun_id2 (COM0:, r) WITH $FL_NUM_CHARS = 1 bool_var := FALSE WHILE NOT bool_var DO READ lun_id2 (str::1) IF str = \033 THEN -- angenommen ! bedeutet Dateiende WRITE (EOF gefunden, NL) CLOSE FILE lun_id2 ENDIF ENDWHILE

Beispiele:

Interne Prozedur ERR_POST


Die interne Prozedur ERR_POST fhrt zu einem vom Anwender definierten Fehler. Aufrufsequenz: Parameter: ERR_POST (error_num, error_str, error_sev <, post_flags>) error_num error_str error_sev post_flags : : : : INTEGER STRING INTEGER INTEGER [IN] [IN] [IN] [IN]

Anmerkungen:

error_num kann ein beliebiger INTEGER Ausdruck sein, dessen Wert zwischen 43008 und 44031 liegt. error_str ist ein STRING Ausdruck, der eine anzuzeigende Fehlermeldung enthlt. error_sev ist ein INTEGER Ausdruck, dessen Wert zwischen 2 und 12 liegt. Diese Werte stellen die folgenden Fehlerschweregrade dar: 2 : Warning (Warnung) 4 : Pause, die Anweisung wird aufgeschoben, wenn holdable 6 : Pause all, alle Anweisungen werden aufgeschoben, wenn holdable 8 : Hold 10 : Drive off, pause all, Abschaltung 12 : Drive off, Gesamtabschaltung Bei Ausfhren von ERR_POST wird der Fehler wie jeder andere Systemfehler behandelt. Der Fehler wird in das Fehler-Log eingetragen und es werden alle Fehler-spezifischen Bedingungshandler abgefragt. Die Variable $ERROR ist nicht fr das Programm aufgesetzt, das die Routine ERR_POST aufruft. Um zu testen, ob der in ERR_POST spezifizierte Fehler aufgetreten ist, kann die vorbesetzte Variable $SYS_ERROR benutzt werden. Post_flags ist ein INTEGER Ausdruck, dessen Wert aus einer der folgenden Masken besteht: Bit 1: Nicht in der ERROR.LOG Datei registrieren Bit 2: Nicht im Zustandsfenster des Systembildschirms registrieren Bit 3: Nicht im Abtasten des Bedingungshandlers registrieren Bit 4: Nicht im Rollfenster des Bildschirms des PHG registrieren Bit 5: Nicht im Rollfenster des Bildschirms der BK registrieren

11-24

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

ERR

Bit 6: Bit 7:

Verndert nicht den Zustand der Maschine Verursacht eine Systemtransaktion aufgrund des Schweregrads des Fehlers (ist dieses Bit nicht gesetzt, so erfolgt keine Transaktion) Bit 10: Automatische Rckkehr von der aktuellen Routine (Bit 7 mu ebenfalls gesetzt sein) Beispiele: err_msgs[8] := Ein Fehler 8 ist aufgetreten. ... IF err_detected = 8 THEN ERR_POST(43008, err_msgs[8], 2) -- nur eine Warnung ENDIF

Interne Prozedur ERR_TRAP_OFF


Die interne Prozedur ERR_TRAP_OFF blockiert die Erkennung eines spezifizierten Fehlers durch das System. Aufrufsequenz: Parameter: Anmerkungen: ERR_TRAP_OFF (error_num) error_num : INTEGER [IN] error_num gibt die Nummer des Fehlers an, der nicht erkannt werden soll. Whrend die Funktion blockiert ist, wird die Fehlerkontrolle vom System ausgefhrt. Das stellt den Normalfall dar. PROGRAM flib NOHOLD VAR s : STRING[30] ROUTINE filefound(as_name : STRING) : BOOLEAN EXPORTED FROM flib ROUTINE filefound(as_name : STRING) : BOOLEAN BEGIN ERR_TRAP_ON(39960) -- erkannte Fehler von SYS_CALL SYS_CALL(fv, as_name) ERR_TRAP_OFF(39960) IF $SYS_CALL_STS > 0 THEN -- prft den Status von SYS_CALL RETURN(FALSE) ELSE RETURN(TRUE) ENDIF END filefound BEGIN CYCLE WRITE (Dateinamen eingeben: ) READ (s) IF filefound(s) = TRUE THEN WRITE (*** Datei gefunden ***, NL) ELSE WRITE (*** Datei NICHT gefunden ***, NL) ENDIF END flib Siehe auch: ERR_TRAP_ON

Beispiele:

00/1200

11-25

ERR

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur ERR_TRAP_ON


Die interne Prozedur ERR_TRAP_ON gibt die Erkennung eines spezifizierten Fehlers durch das System frei. Aufrufsequenz: Parameter: Anmerkungen: ERR_TRAP_ON (error_num) error_num : INTEGER [IN] error_num gibt die Nummer des Fehlers an, fr den Abfangen aktiviert ist. Nur die Fehler in der Gruppe EC_TRAP (von 39937 bis 40059) knnen abgefangen werden. Whrend die Funktion freigegeben ist, verwaltet das Programm den angegebenen Fehler. $ERROR oder die verschiedenen vorbesetzten Zustandsvariablen ($SYS_CALL_STS u.s.w.) zeigen den aufgetretenen Fehler, auch wenn dieser gerade von der ERR_TRAP_ON Funktion abgehandelt wird. Beispiele: PROGRAM flib NOHOLD VAR s : STRING[30] ROUTINE filefound(as_name : STRING) : BOOLEAN EXPORTED FROM flib ROUTINE filefound(as_name : STRING) : BOOLEAN BEGIN ERR_TRAP_ON(39960) -- erkannte Fehler von SYS_CALL SYS_CALL(fv, as_name) ERR_TRAP_OFF(39960) IF $SYS_CALL_STS > 0 THEN -- prft den Status von SYS_CALL RETURN(FALSE) ELSE RETURN(TRUE) ENDIF END filefound BEGIN CYCLE WRITE (Dateinamen eingeben: ) READ (s) IF filefound(s) = TRUE THEN WRITE (*** Datei gefunden ***, NL) ELSE WRITE (*** Datei NICHT gefunden ***, NL) ENDIF END flib

Interne Funktion EXP


Die interne Funktion EXP gibt den Wert der Exponentialfunktion fr den spezifizierten Wert zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: EXP (exponent) REAL exponent : REAL [IN] Der max. Wert des Exponenten ist 88,7 e ist die Basis des natrlichen Logarithmus, ca. 2.71828. x := EXP(1) -- x = 2.71828 x := EXP(15.2) -- x = 3992786.835 x := EXP(4.1) -- x = 60.34028

11-26

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

FL_

Interne Funktion FL_BYTES_LEFT


Die interne Funktion FL_BYTES_LEFT gibt die Anzahl der verfgbaren Bytes in der spezifizierten LUN zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: FL_BYTES_LEFT (lun_id) INTEGER lun_id : INTEGER [IN] lun_id kann eine beliebige, vom Anwender definierte Variable sein, die eine geffnete LUN darstellt. lun_id mu fr Direktzugriffe erffnet sein, andernfalls wird ein Fehler ausgegeben. Beispiele: Im zurckgegebenen Wert werden die Zeilenendzeichen gezhlt. OPEN FILE file_lun (data.txt, RWA), WITH $FL_RANDOM = TRUE, ENDOPEN FL_SET_POS(file_lun, 0) -- Dateianfang ... IF FL_BYTES_LEFT(file_lun) > 0 THEN get_next_value ELSE write_error ENDIF

Interne Funktion FL_GET_POS


Die interne Funktion FL_GET_POS gibt die aktuelle Position in einer Datei fr die folgende Lese-/Schreiboperation zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: FL_GET_POS (lun_id) INTEGER lun_id : INTEGER [IN] lun_id kann eine beliebige, vom Anwender definierte Variable sein, die eine geffnete LUN darstellt. Wenn lun_id nicht fr Direktzugriff geffnet wurde, wird ein Fehler ausgegeben. Beispiele: In dem ausgegebenen Wert sind auch die Zeichen fr das Zeilenende enthalten. PROGRAM test NOHOLD VAR i, lun : INTEGER arr : ARRAY[20] OF REAL ROUTINE write_values(values : ARRAY[*] OF REAL; lun : INTEGER) VAR i : INTEGER back_patch : INTEGER total : INTEGER (0) auf 0 initialisieren BEGIN back_patch := FL_GET_POS(lun) WRITE lun (0, NL) FOR i := 1 TO ARRAY_DIM1(values) DO IF values[i] <> 0 THEN total := total + 1 WRITE lun (values[i], NL) ELSE ENDIF ENDFOR Anzahl der Ausgaben und Backups, die in der Datei registriert wurden FL_SET_POS(lun, back_patch) WRITE lun (total) FL_SET_POS(lun, 1) zum Ende der Datei zurckkehren END write_values BEGIN Array vervollstndigen 11-27

00/1200

FL_

LISTE DER INTERNEN ROUTINEN

PDL2

FOR i := 1 TO 20 DO

arr[i] := i ENDFOR OPEN FILE lun (temp.txt, rw), WITH $FL_RANDOM = TRUE, ENDOPEN write_values(arr, lun) CLOSE FILE lun END test

Interne Prozedur FL_SET_POS


Die interne Prozedur FL_SET_POS gibt die Position in einer Datei fr die nchste Lese-/Schreiboperation vor. Aufrufsequenz: Parameter: Anmerkungen: FL_SET_POS (lun_id, file_pos) lun_id : INTEGER file_pos : INTEGER [IN] [IN]

file_pos mu zwischen -1 und der Anzahl der Bytes in der Datei liegen. - -1 bedeutet, da die Position am Dateiende vorgegeben werden soll. - 0 bedeutet, da die Position am Dateianfang vorgegeben werden soll. - Jede andere Zahl stellt eine Abweichung in Bytes vom Anfang der Datei dar, wo die Position vorgegeben werden soll. Im Wert von file_pos mssen die Zeilenendzeichen gezhlt werden. lun_id kann eine beliebige, vom Anwender definierte INTEGER Variable sein, die eine geffnete logische Einheitszahl (LUN) darstellt.

Beispiele:

lun_id mu fr Direktzugriff geffnet sein, andernfalls wird ein Fehler ausgegeben. PROGRAM test NOHOLD VAR i, lun : INTEGER arr : ARRAY[20] OF REAL ROUTINE write_values(values : ARRAY[*] OF REAL; lun : INTEGER) VAR i : INTEGER back_patch : INTEGER total : INTEGER (0) auf 0 initialisieren BEGIN back_patch := FL_GET_POS(lun) WRITE lun (0, NL) FOR i := 1 TO ARRAY_DIM1(values) DO IF values[i] <> 0 THEN total := total + 1 WRITE lun (values[i], NL) ELSE ENDIF ENDFOR -- Anzahl der Ausgaben and Backups, die in der Datei registriert wurden FL_SET_POS(lun, back_patch) WRITE lun (total) FL_SET_POS(lun, 1) zum Ende der Datei zurckkehren END write_values BEGIN -- Array vervollstndige FOR i := 1 TO 20 DO arr[i] := i ENDFOR OPEN FILE lun (temp.txt, rw), WITH $FL_RANDOM = TRUE, ENDOPEN write_values(arr, lun) CLOSE FILE lun END test

11-28

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

FL_

Interne Funktion FL_STATE


Die interne Funktion FL_STATE gibt Information ber eine Datei zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: FL_STATE (file_name_str, < size_int < , time_int < , attr_int >>>) BOOLEAN file_name_string size_int time_int attr_int : : : : STRING INTEGER INTEGER INTEGER [IN] [OUT] [OUT] [OUT]

Anmerkungen:

Der Rckgabewert gibt an, ob es die Datei gibt oder nicht. file_name_string spezifiziert die Datei, ber die Information eingeholt werden soll. size_int wird auf die Dateigre in Bytes gesetzt. time_int wird auf die Zeit der Dateierstellung gesetzt. attr_int wird auf die Dateiattribute wie versteckt, schreibgeschtzt oder Systemdatei gesetzt. Die folgende Tabelle gibt die Bedeutung der Bits in attr_int: 1 2 3 : schrebgeschtzte Datei : versteckte Datei : Systemdatei

Beispiele:

Wenn z.B. eine Datei versteckt und schreibgeschtzt ist, ist der Wert von attr_int 3 (d.h. Bit 1 und 2 sind gesetzt). exist_bool := FL_STATE(file_name_str) exist_bool := FL_STATE(file_name_str, size_int, time_int)

Interne Prozedur HDIN_READ


Die interne Prozedur HDIN_READ liest den Wert der Position in dem Moment, in dem das digitale Eingangssignal mit hoher Geschwindigkeit ankommt ($HDIN). Aufrufsequenz: Parameter: Anmerkungen: HDIN_READ (pos_class <, arm_num>) pos_class : || POSITION | JOINTPOS | XTNDPOS ||[OUT] arm_num : INTEGER [IN] pos_class gibt eine POSITION, JOINTPOS, oder XTNDPOS Variable an und ist auf den gesicherten Positionswert gesetzt. arm_num ist eine optionale Armnummer. Wenn nicht angegeben, wird der Standardarm benutzt. Ein interner Aufruf HDIN_READ ist eine asynchrone Anweisung, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den Zustand paused versetzt wird, und die Interrupt Routinen starten knnen, bevor die Routine beendet ist. Siehe das fr die interne Prozedur HDIN_SET gezeigte Programmbeispiel.

Beispiele:

Interne Prozedur HDIN_SET


Die interne Prozedur HDIN_SET setzt einen digitalen Hochgeschwindigkeitseingang ($HDIN). Aufrufsequenz: Parameter: HDIN_SET (servo, enbl, cont, record_flag <, arm_num>...) servo enbl cont record_flag arm_num : : : : : INTEGER BOOLEAN BOOLEAN BOOLEAN INTEGER [IN] [IN] [IN] [IN] [IN]

Anmerkungen:

Wenn ein digitaler Hochgeschwindigkeitseingang festgesetzt wird, kann der Arm angehalten und seine aktuelle Position registriert werden. servo gibt die Nummer der Servokarte an. enbl ist ein Flag, das angibt, ob der Interrupt HDIN freigegeben oder gesperrt ist. cont ist ein Flag, das angibt, ob HDIN nach dem ersten Durchgang stndig freigegeben oder gesperrt ist.

00/1200

11-29

FL_

LISTE DER INTERNEN ROUTINEN

PDL2

record_flag ist ein Flag, das angibt, ob die Position im Moment des HDIN registriert wird. Ist dies der Fall, so kann HDIN_READ benutzt werden, um den Wert des Records zu erhalten. arm_num gibt eventuell anzuhaltende Arme an. Es knnen maximal vier Nummern mit getrennten Parametern angegeben werden. Die Arme mssen durch die Servokarte gesteuert werden. Der Interrupt HDIN wird durch eine fallende Flanke (von positiv auf negativ) ausgelst. Zum Entdecken des negativen bergangs von HDIN knnen in der CONDITION Anweisung Ereignisse von 121 bis 124 benutzt werden. Weitere Einzelheiten finden sich im Kapitel "Bedingungshandler". Der HDIN Interrupt wird trotz Aktivierung nicht ausgelst, wenn die vorbesetzte Variable $HDIN_SUSP den Wert 1 hat. Es muss unterstrichen werden, dass bei Aktivieren des HDIN Interrupts durch HDIN_SET diese vorbesetzte Variable unabhngig von ihrem aktuellen Wert auf 0 gesetzt wird. Siehe auch das Kapitel "Liste der vorbesetzten Variablen". Programm zum Behandeln von HDIN; Es wurde ein Werkstck lernprogrammiert und seine Punkte wurden unter wp_siding gespeichert. HDIN wird zum Suchen des Werkstckpfads benutzt und, wenn es ausgelst wird, werden alle Bewegungen auf dem Werkstck verschoben. PROGRAM hdin_ex DETACH CONST ki_siding = 6 VAR pnt0001j, pnt0002j, pnt0003j, pnt0004j: JOINTPOS FOR ARM[1] wp_siding: ARRAY[ki_siding] OF POSITION -- Punktmatrix -- zum Bestimmen des Werkstckbereichs ROUTINE isr_siding VAR lp_shift: POSITION lp_hdin_pos: POSITION -- beim Auslsen von HDIN -- gelesene Position lv_diff: VECTOR lv_i: INTEGER BEGIN -- Lesen der Roboterposition bei einem bergang von $HDIN HDIN_READ(lp_hdin_pos, 1) -- Holen des Offsets zwischen dem ersten Ort auf dem Werkstck -- und der Position, an der HDIN ausgelst hat lv_diff := POS_GET_LOC(lp_hdin_pos) - POS_GET_LOC (wp_siding[1]) -- Lesen von HDIN deaktivieren HDIN_SET (1, FALSE, FALSE, FALSE) FOR lv_i :=1 TO ki_siding DO -- alle Bewegungen auf dem Werkstck um diesen Unterschied der -- zuvor berechneten Offsets verschieben lp_shift := wp_siding[lv_i] POS_SHIFT(lp_shift, lv_diff) MOVE LINEAR TO lp_shift ENDFOR END isr_siding BEGIN CONDITION[1] NODISABLE: WHEN HOLD DO -- HDIN Auslsen vorbergehend deaktivieren, -- wenn das System in HOLD geht $HDIN_SUSP:=1 WHEN START DO -- HDIN Auslsen wieder aktivieren, wenn die -- Bewegung wieder startet (START Taste) $HDIN_SUSP:= 0

Beispiele:

11-30

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

IS_

ENDCONDITION CONDITION[2]: WHEN EVENT 121 DO -- Auslsen von HDIN (negativer bergang) CANCEL ALL UNLOCK RESUME DISABLE CONDITION[1] isr_siding ENDCONDITION CONDITION[3]: -- Aktivieren von HDIN bei Start der Bewegung WHEN AT START DO $HDIN_SUSP :=0 ENABLE CONDITION[1], CONDITION[2] ENDCONDITION MOVE TO pnt0001j CYCLE RESUME -- falls der Arm gesperrt ist MOVE TO pnt0002j -- HDIN zum Sperren des Arms und Notieren der Position einrichten HDIN_SET(1, TRUE, FALSE, TRUE) $HDIN_SUSP := 1 -- pnt0004j ist der erste Suchpunkt auf dem Werkstck MOVE LINEAR TO pnt0004j WITH CONDITION[3] .... END hdin_ex

Interne Funktion IS_FLY


Die interne Funktion IS_FLY gibt einen Boole'schen Wert (TRUE, FALSE) zurck, der anzeigt, ob die durch das spezifizierte Programm ggf. interpretierte MOVE Anweisung eine MOVEFLY oder eine normale MOVE Anweisung ist. BeiMOVEFLY wird TRUE, andernfalls FALSE zurckgegeben. IS_FLY prft nur die gerade interpretierte aber nicht schon vom Roboter ausgefhrte MOVE Anweisungen. Die Funktion ist ntzlich, um aus der Funktion in der WITH Klausel zur Bewegungsanweisung zu verstehen, um welche MOVE (mit oder ohne FLY) es sich handelt. Aufrufsequenz: IS_FLY (prog_name) Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: BOOLEAN prog_name : STRING [IN] prog_name ist der Name des Programms, dessen MOVE Interpretation geprft wird. PROGRAM prg_1 ROUTINE f1 (VAR spd: INTEGER) VAR b: BOOLEAN BEGIN b := IS_FLY(prg_1) IF B = TRUE THEN -- im Fall von MOVEFLY -- werden die fr FLY vorgesehenen Anweisungen ausgefhrt ELSE -- werden die fr nicht FLY vorgesehenen Anweisungen ausgefhrt ENDIF END f1 BEGIN MOVEFLY TO p1 WITH $PAR = f1(10) ... END prg_1

00/1200

11-31

JNT_

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur JNT_SET_TAR


Die interne Prozedur JNT_SET_TAR setzt den Wert fr eine Achsenposition. Aufrufsequenz: Parameter: JNT_SET_TAR(axis, value <, arm_num>) axis value arm_num : INTEGER : REAL : INTEGER [IN] [IN] [IN]

Anmerkungen:

Beispiele:

axis gibt die zu ndernde Achse an. value ist die Position in Grad, die der Achse zugewiesen wird. arm_num ist ein optionaler Parameter, der angibt, welcher Arm gendert werden soll. Wenn es den spezifizierten Arm nicht gibt, die Achse fr diese Operation nicht freigegeben oder der Wert ungltig ist, wird ein Fehler ausgegeben. Zur richtigen Ausfhrung der Routine JNT_SET_TAR muss man eine Ganzzahl (z.B. 124) fr das bersetzungsverhltnis ($TX_RATE) haben. Das heit, dass der Motor (Resolver) fr jede Achsenumdrehung (360 um die Achse) eine ganze Zahl von Umdrehungen ausfhrt. Das bersetzungsverhltnis kann nicht die Nherung einer Gleitkommazahl sein, da dies zu einem Abbruchfehler beim Achsenpositionieren fhren knnte. Bei Ausfhren dieser Routine mssen alle mit der Maschine (Servo CPU Karte) verbunden Achsen stetig sein: es darf keine wartenden oder aktiven Bewegungen und keine bergangspositionierungen geben. Es sollte ein wohl definierter Positioniertoleranzbereich ($TERM_TYPE : = FINE oder $TERM_TYPE : = JNT_FINE) fr die Bewegung vor dem Aufruf von JNT_SET_TAR gewhlt werden. Es ist gute Praxis, nach dem Ausfhren dieser Routine etwa eine Sekunde bis zum Ausfhren neuer Bewegungen zu warten, damit der Prozess zum Aktualisieren der Position zum Abschluss kommen kann. PROGRAM rotate CONST axis = 7 arm_num = 1 VAR pnt0001x, pnt0002x, pnt0003x, pnt0004x : XTNDPOS ROUTINE weld(sch : INTEGER) EXPORTED FROM weldrout BEGIN MOVE JOINT TO pnt0001x -- Drehtisch um 30 drehen CYCLE WAIT FOR $DIN[10] -- warten, bis das Werkstck eingelegt ist MOVE JOINT TO pnt0002x -- Drehtisch um 180 drehen weld(1) MOVE JOINT TO pnt0003x -- Drehtisch um 120 drehen weld(2) MOVE JOINT TO pnt0004x -- Drehtisch um 60 drehen weld(3) -- Position von Achse 7 auf 30 setzen JNT_SET_TAR(axis, 30, arm_num) END rotate

Interne Prozedur JNTP_TO_POS


Die interne Prozedur JNTP_TO_POS konvertiert einen JOINTPOS Ausdruck in POSITION. Aufrufsequenz: Parameter: Anmerkungen: JNTP_TO_POS (jnt_expr, pos_var) jnt_expr : JOINTPOS pos_var : POSITION [IN] [OUT]

jnt_expr ist der zu konvertierende JOINTPOS Ausdruck. pos_var ist die Variable POSITION, die abhngig vom Ergebnis der Konvertierung festgesetzt wird. Ein interner Aufruf JNTP_TO_POS ist eine asynchrone Anweisung, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den Zustand paused versetzt wird, und die Interrupt Routinen starten knnen, bevor die - interne Prozedur beendet ist.

11-32

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

KEY_

Beispiele:

JNTP_TO_POS(jp1, p1) v1 := VEC(0, 100, 0) POS_SHIFT(p1, v1) POS_TO_JNTP(p1, jp1)

-----

konvertiert von JOINTPOS in POSITION erstellt einen Vektor verschiebt eine Position mittels Vektor konvertiert die verschobene Position in JOINTPOS

Interne Prozedur KEY_LOCK


Die interne Prozedur KEY_LOCK sperrt entweder die Tastatur der BK oder das Tastenfeld des Programmierhandgerts oder beide. Aufrufsequenz: Parameter: KEY_LOCK (physical_device, enabl_disabl <, flags>) physical_device : INTEGER enabl_disabl : BOOLEAN flags : INTEGER [IN] [IN] [IN]

Anmerkungen:

Physical_device gibt die Einrichtung(en) an, die gesperrt werden soll(en). Gltige Einrichtungen sind PDV_TP oder PDV_CRT. Diese mssen mit OR verbunden werden, wenn sowohl die BK Tastatur als auch das Tastenfeld des Programmierhandgerts gesperrt werden soll. enabl_disabl gibt an, ob die Einrichtung(en) freigegeben (TRUE) oder gesperrt (FALSE) werden soll(en). flags ist ein optionaler Parameter, der anzeigt, ob die Einrichtungen automatisch freigegeben werden sollen. Die Bits des Werts geben an, welchen Zustnden die automatische Freigabe verursachen sollen. Siehe die Beschreibung von $SYS_STATE im Kapitel "Vorbesetzte Variablen" fr die mglichen Werte. Wenn die Umgebungen EXECUTE, EDIT oder TEACH aktiv sind oder der PROG/AUTO Schalter auf AUTO steht, tritt ein Fehler auf. Die Einrichtung wird automatisch freigegeben, wenn das System in den PROG Zustand wechselt, nach Stromausfall wieder anluft oder ein fataler Fehler entdeckt wird. KEY_LOCK(PDV_TP, FALSE) -- sperrt das Tastenfeld des PHG KEY_LOCK(PDV_CRT, FALSE) -- sperrt die Tastatur der Steuereinheit KEY_LOCK(PDV_TP, TRUE) -- gibt das Tastenfeld des PHG frei

Beispiele:

Interne Funktion LN
Die interne Funktion LN gibt den natrlichen Logarithmus einer Zahl zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: LN (number) REAL number : REAL [IN] number mu grer als Null sein, andernfalls wird ein Fehler ausgegeben. x := LN(5) -- x = 1.61 x := LN(62.4) -- x = 4.13356 x := LN(angle - offset)

Interne Prozedur MEM_SPACE


Die interne Prozedur MEM_SPACE gibt Informationen ber den freien Speicherplatz der Steuereinheit zurck. Aufrufsequenz: Parameter: MEM_SPACE (total, num_blocks, largest) total : INTEGER num_blocks : INTEGER largest : INTEGER [OUT] [OUT] [OUT]

Anmerkungen:

total ist die Gesamtanzahl der freien, verfgbaren Bytes. num_blocks ist die Anzahl der einzelnen freien Blcke. largest ist das Ausma des grten verfgbaren Blocks in Bytes. MEM_SPACE(total, num_blocks, largest) WRITE(Gesamtzahl freier Bytes: , total, NL)

Beispiele:

00/1200

11-33

NOD

LISTE DER INTERNEN ROUTINEN

PDL2

WRITE(Zahl freier Blcke: , num_blocks, NL) WRITE(Maximale Blockgre: , largest, NL)

Interne Prozedur NODE_APP


Die interne Prozedur NODE_APP fgt nicht initialisierte Knotenpunkte am Ende einer PATH Variablen ein. Aufrufsequenz: Parameter: Anmerkungen: NODE_APP (path_var <, num_nodes>) path_var : PATH num_nodes : INTEGER [IN, OUT] [IN]

path_var ist die zu ndernde PATH Variable. num_nodes ist die Anzahl der Knotenpunkte, die dem Zweig hinzugefgt werden sollen. Wenn die Zahl nicht angegeben wird, wird ein Knotenpunkt hinzugefgt. Es werden die anwenderdefinierten Felder und die Felder der Standardziel- knoten ($MAIN_ und/oder $AUX_) der hinzugefgten Knoten initialisiert. Die Felder der Standardknoten, die Ziele darstellen, werden auf denselben Wert wie der letzten Zweigknoten gesetzt. Ein interner Aufruf NODE_APP stellt eine asynchrone Anweisung dar, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den Zustand paused versetzt wird, und die Interrupt Routinen beginnen knnen, bevor die - interne Prozedur abgeschlossen ist. NODE_APP(weld_pth) -- fgt einen Knotenpunkt an NODE_APP(weld_pth, 4) -- fgt vier Knotenpunkte an

Beispiele:

Interne Prozedur NODE_DEL


Die interne Prozedur NODE_DEL lscht Knotenpunkte einer PATH Variablen. Aufrufsequenz: Parameter: NODE_DEL (path_var, node_indx <, num_nodes>) path_var : PATH node_indx : INTEGER num_nodes : INTEGER [IN, OUT] [IN] [IN]

Anmerkungen:

path_var ist die zu ndernde PATH Variable. node_indx ist der Index des ersten Knotens, der gelscht werden soll. Er muss zwischen 1 und der Gesamtzahl der Knoten im Pfad liegen. num_nodes ist die Anzahl der Knotenpunkte, vom node_indx an, die aus dem Zweig gelscht werden sollen. Wenn die Zahl nicht angegeben wird, wird ein Knotenpunkt gelscht. Nachdem ein Knotenpunkt gelscht wurde, werden alle Knotenpunkte neu numeriert. Nach Entfernen des Knotens werden die restlichen neu nummeriert. Wenn der entfernte Knoten einen symbolischen Namen hatte, kann diese Namen nun fr einen anderen Knoten benutzt werden. Ein interner Aufruf NODE_DEL stellt eine asynchrone Anweisung dar, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den Zustand paused versetzt wird, und die Interrupt Routinen beginnen knnen, bevor die - interne Prozedur abgeschlossen ist. ROUTINE clear_path (name : PATH OF weld_node) BEGIN NODE_DEL(name, 1, PATHLEN(name)) END clear_path

Beispiele:

Interne Prozedur NODE_GET_NAME


Die interne Prozedur NODE_GET_NAME ermglicht es, den symbolischen Namen eines Knotens zu erhalten. Aufrufsequenz: Parameter: NODE_GET_NAME (path_var, node_num, name) path_var node_num name : PATH : INTEGER : STRING [IN] [IN] [OUT]

Anmerkungen:

path_var ist die PATH Variable des Knotens. Man kann den Namen des Knotens node_num erhalten.

11-34

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

NOD

name wird entsprechend dem symbolischen Wert des Knotens node_num des Zweigs path_var gesetzt. Ist der symbolische Name lnger als die Maximallnge von name, so wird er abgeschnitten. Wenn node_num keinen symbolischen Namen besitzt, tritt eine Fehlerbedingung auf. Ist node_num kleiner als 1 oder grer als die derzeitige Lnge von path_var, so tritt eine Fehlerbedingung auf. Ein interner Aufruf NODE_GET_NAME stellt eine asynchrone Anweisung dar, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den Zustand paused versetzt wird, und die Interrupt Routinen beginnen knnen, bevor die - interne Prozedur abgeschlossen ist. NODE_GET_NAME(weld_pth, 3, str_var)

Beispiele:

Interne Prozedur NODE_INS


Die interne Prozedur NODE_INS fgt nicht initialisierte Knotenpunkte in eine PATH Variable ein. Aufrufsequenz: Parameter: NODE_INS (path_var, node_indx <, num_nodes>) path_var: PATH node_indx : INTEGER num_nodes : INTEGER [IN, OUT] [IN] [IN]

Anmerkungen:

path_var ist die zu ndernde PATH Variable. Die neuen Knoten werden hinter dem Knoten node_indx eingefgt. Letzterer mu zwischen 0 und der Gesamtzahl der Zweigknoten liegen. num_nodes ist die Anzahl der Knotenpunkte, die in den Zweig eingefgt werden sollen. Wenn die Zahl nicht angegeben wird, wird ein Knotenpunkt eingefgt. Alle Knotenpunkte, von node_indx + 1 bis zum Ende des Zweigs, werden neu numeriert. Die anwenderdefinierten Felder und die Felder der Standardzielknoten ($MAIN_ und/oder $AUX_) werden initialisiert. Knotenfelder, die keine Ziele bedeuten, werden auf die gleichen Werte wie die des Knotens node_indx gesetzt. Ein interner Aufruf NODE_INS stellt eine asynchrone Anweisung dar, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den Zustand paused versetzt wird, und die Interrupt Routinen beginnen knnen, bevor die - interne Prozedur abgeschlossen ist. NODE_INS(weld_pth, 3) -- fgt einen Knoten hinter dem Knoten 3 ein NODE_INS(weld_pth, 3, 4)-- fgt vier Knoten hinter dem Knoten 3 ein

Beispiele:

Interne Prozedur NODE_SET_NAME


Die interne Prozedur NODE_SET_NAME weist einem Zweigknoten einen symbolischen Namen zu oder lscht ihn. Aufrufsequenz: Parameter: NODE_SET_NAME (path_var, node_num <, name>) path_var node_num name : PATH : INTEGER : STRING [IN] [IN] [IN]

Anmerkungen:

path_var ist eine PATH Variable des Knotens. node_num ist der Knoten, dessen symbolischer Name gesetzt oder gelscht wird. name ist der neue symbolische Name des Knotens. Wird name schon fr einen anderen Knoten im Zweig path_var benutzt oder besteht er aus einem leeren String (''), so tritt eine Fehlerbedingung auf. Wenn kein Name angegeben wird, wird der symbolische Name des Knotens gelscht. Falls node_num kleiner als 1 oder grer als die derzeitige Lnge von path_var ist, tritt eine Fehlerbedingung auf. Ein interner Aufruf NODE_SET_NAME stellt eine asynchrone Anweisung dar, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den Zustand paused versetzt wird, und die Interrupt Routinen beginnen knnen, bevor die - interne Prozedur abgeschlossen ist. NODE_SET_NAME(weld_pth, 3, start_welding)

Beispiele:

00/1200

11-35

ON_

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur ON__JNT_SET


Die Systemroutine ON_JNT_SET, die im Fall der On Pos Funktion benutzt wird, assoziiert ein Bit eines INTEGER Ports (z.B. $WORD) mit dem Armstatus bei Erreichen der in der vorbesetzten Variablen $ON_POS_TBL[on_pos_idx].OP_JNT definierten Position. Sobald diese Position erreicht wird, nimmt das Bit den Wert 1 und $ON_POS_TBL[on_pos_idx].OP_REACHED den Wert TRUE an. Damit diese Verknpfung aktiviert wird, muss jedoch ON_POS (ON) auf demselben Element der $ON_POS_TBL aufgerufen werden. Anstelle des ON_POS_SET sollte der ON_JNT_SET gewhlt werden, wenn Hilfsachsen vorhanden sind und getestet werden sollen. Es ist daran zu denken, dass der Wert von $ON_POS_TBL[on_pos_idx].OP_JNT nicht direkt gesetzt werden kann, da dies eine schreibgeschtzte Variable ist. Einer der Parameter fr diese Prozedur ist eine JOINTPOS und ihr Wert wird bei Aufruf dem Feld $ON_POS_TBL[on_pos_idx].OP_JNT zugewiesen. Aufrufsequenz: Parameter: ON_JNT_SET (port, bit, on_pos_idx, jnt_pos <, jnt_mask>) port bit on_pos_idx jnt_pos jnt_mask : : : : : INTEGER INTEGER INTEGER JOINTPOS INTEGER [IN] [IN] [IN] [IN] [IN] das den Wert von

Anmerkungen:

Port ist eine ganzzahlige Portreferenz (z.B. $WORD). Bit ist ein INTEGER Ausdruck, der das Bit anzeigt, $ON_POS_TBL[on_pos_idx].OP_REACHED wiedergibt.

On_pos_idx ist der $ON_POS_TBL Index des Elements, das mit dem Portbit verknpft ist. Jnt_pos wird dem Feld $ON_POS_TBL[on_pos_idx].OP_JNT zugewiesen, das eine schreibgeschtzte PDL2 Variable ist. Der Arm von jnt_pos ist derselbe Arm, das der ON_POS(ON, on_pos_idx<,arm_num>) zugewiesen wird, die als nchste aufgerufen werden muss. Jnt_mask ist die Maske der Gelenke, die bei der Roboterbewegung berwacht werden, um festzustellen, ob $ON_POS_TBL[on_pos_idx].OP_JNT erreicht wurde. Sollen einige Gelenke oder Hilfsachsen bei dieser Prfung ausgeschlossen werden, brauchen nur die entsprechenden Bits dieser Maske mit dem Wert 0 bergeben zu werden. Jnt_mask ist ein optionaler Parameter. Wird er nicht spezifiziert, erhlt er den Standardwert $ARM_DATA[arm_num]JNT_MASK. Beispiele: -- Programm fr H4 Roboter und integrierten Schlitten PROGRAM op45 VAR p1, p2, p3, : POSITION VAR j1, j2 : JOINTPOS VAR i : INTEGER BEGIN -- Die Funktion On Pos fr die ersten 5 Elemente der $ON_POS_TBL deaktivieren FOR i := 1 TO 5 DO ON_POS(FALSE, i) ENDFOR CONDITION[1] NODISABLE: WHEN EVENT 134 DO $FDOUT[21] := TRUE WHEN EVENT 135 DO $FDOUT[22] := TRUE WHEN EVENT 136 DO $FDOUT[23] := TRUE ENCONDITION CONDITION[2] NODISABLE : WHEN EVENT 142 DO $FDOUT[21] := FALSE

11-36

01/0401

PDL2

LISTE DER INTERNEN ROUTINEN

ON_

WHEN EVENT 143 DO $FDOUT[22] FALSE WHEN EVENT 144 DO $FDOUT [23] := FALSE ENDCONDITION ENABLE CONDITION[1], CONDITION[2] $TOOL_RMT := TRUE $BASE := POS(0. 0. 0. 0. 0. 0.) $TOOL := POS(1000. 3000. -1000. 180. 0. 0.) $UFRAME := POS(0, 0, 50, 0, 90, 0, ) -- On Pos Definition auf POSITIONen fr die ersten 3 Elemente der $ON_POS_TBL ON_POS_SET($WORD[20], 1, 1) -- Element 1 benutzt Bit 1 von $WORD[20] ON_POS_SET($WORD[20], 2, 2) -- Element 2 benutzt Bit 3 von $WORD[20] ON_POS_SET($WORD[20], 3, 3) -- Element 3 benutzt Bit 3 von $WORD[20] -- On Pos Definition auf JOINTPOS ON_JNT_SET($WORD[20], 4, 4, j1, $JNT_MASK) -- Element 4 benutzt Bit 4 von $WORD[20] ON_JNT_SET($WORD[20], 5, 5, j2, 0x40) -- Element 4 benutzt Bit 4 von $WORD[20] FOR i := TO 5 DO $ON_POS_TBL[i].OP_TOOL := $TOOL $ON_POS_TBL[i].OP_UFRAME := $UFRAME $ON_POS_TBL[i].OP_TOOL_DISBL := FALSE $ON_POS_TBL[i].OP_TOOL_RMT := TRUE ENDFOR $ON_POS_TBL[1].OP_POS := p1 $ON_POS_TBL[2].OP_POS := p2 $ON_POS_TBL[3].OP_POS := p3 -- Die Funktion On Pos fr die ersten 5 Elemente der $ON_POS_TBL aktivieren. FOR i := 1 TO 5 DO ON_POS(TRUE, i, 1) ENDFOR -- Bit 8 von $WORD [20] mit der Funktion On Trajectory assoziieren ON_TRAJ_SET($WORD[20], 8, 1) -- Start der Zyklusschleife CYCLE MOVE TO p1 DELAY 1000 MOVE TO p2 DELAY 1000 MOVE LINEAR TO p3 p1 DELAY 1000 MOVE TO j1

01/0401

11-37

ON_

LISTE DER INTERNEN ROUTINEN

PDL2

DELAY 1000 MOVE LINEAR TO j2 DELAY 1000 END op45 Siehe auch: Systemprozeduren ON_POS und ON_POS_SET, vorbesetzte Variable $ON_POS_TBL.

Interne Prozedur ON_POS


Mit der Systemprozedur ON_POS kann die On Pos Funktion mit den Werten aktiviert und deaktiviert werden, die in einem Element der Tabelle $ON_POS_TBL zugewiesen sind. Aufrufsequenz: Parameter: ON_POS (flag, on_pos_idx<, arm_num>) flag : BOOLEAN [IN] on_pos_idx : INTEGER [IN] arm_num : INTEGER [IN] flag ist ein BOOLscher Wert, der anzeigt, ob der Algorithmus aktiviert (ON) oder deaktiviert (OFF) werden sollte. on_pos_idx ist der $ON_POS_TBL Index des Elements, fr das die ON POS Funktion gelten soll. arm_num ist ein optionaler Parameter mit der Armnummer. Falls nicht angegeben, wird der Standardarm benutzt. Dieser Parameter wird nur bei ON_POS(ON) bercksichtigt. Wegen der Ausfhrung von ON_POS (ON, ..), sind die vorbesetzen Variablen $ON_POS_TBL[on_pos_idx].OP_REACHED und das mit ON_POS_SET definierte Portbit auf TRUE bzw. 1 zugewiesen, wenn $ON_POS_TBL[on_pos_idx].OP_POS oder $ON_POS_TBL[on_pos_idx].OP_JNT erreicht sind. Jedes fr dieses Tabellenelement freigegebene Bedingungsereignis (WHEN EVENT 134..149) kann auslsen. Es ist zu beachten, dass der ON_POS Aufruf durch Setzen aller Felder des $ON_POS_TBL Elements und Aufrufen der Systemroutinen ON_POS_SET oder ON_JNT_SET fortgefhrt werden sollte. Nach ON_POS (ON, ) bleibt die Funktion On Pos aktiviert bis zum nchsten ON_POS (OFF, ) auf demselben $ON_POS_TBL Element oder dem nchsten Neustart der Steuereinheit. Bei ON_POS (OFF, ) erhlt das entsprechende Bit den Wert 0. PROGRAM op44 VAR p1, p2, p3, p4 : POSITION VAR i : INTEGER BEGIN -- definition einer Bedingung, die das Eintreten und -- Verlassen der in $ON_POS_TBL definierten Kugel berwacht. CONDITION[1] NODISABLE: WHEN EVENT 134 DO $FDOUT[21] := TRUE WHEN EVENT 135 DO $FDOUT[22] := TRUE WHEN EVENT 136 DO $FDOUT[23] := TRUE ENDCONDITION CONDITION[2] NODISABLE : WHEN EVENT 142 DO $FDOUT[21] := FALSE WHEN EVENT 143 DO $FDOUT[22] := FALSE WHEN EVENT 144 DO $FDOUT[23] := FALSE ENDCONDITION 11-38 01/0401

Anmerkungen:

Beispiele:

PDL2

LISTE DER INTERNEN ROUTINEN

ON_

ENABLE CONDITION[1], CONDITION[2] -- definition der Bits 1, 2, 3 von $WORD[5] -- verknpft mit den Elementen 1,2,3 der Nullposition von $ON_POS_TBL ON_POS_SET($WORD[5], 1, 1); ON_POS_SET($WORD[5], 2, 2) ON_POS_SET($WORD[5], 3, 3) FOR i := 1 TO 3 DO $ON_POS_TBL[i].OP_TOOL := $TOOL $ON_POS_TBL[i].OP_UFRAME := $UFRAME $ON_POS_TBL[i].OP_TOOL_DSBL:= FALSE $ON_POS_TBL[i].OP_TOOL_RMT := FALSE ENDFOR -- Nullposition $ON_POS_TBL[1].OP_POS := p1 -- Aktivieren der ON POS Funktion auf Element 1 von $ON_POS_TBL ON_POS(TRUE, 1, 1) -- Elektrodenschleifposition $ON_POS_TBL[2].OP_POS := p2 ON_POS(TRUE, 2, 1) -- Serviceposition $ON_POS_TBL[3].OP_POS := p3 ON_POS(TRUE, 3, 1) CYCLE MOVE ARM[1] TO p1; END op44 Siehe auch:

MOVE ARM[1] TO p2;

MOVE ARM[1] TO p3

Systemprozedur ON_POS_SET, vorbesetzte Variable $ON_POS_TBL. Programmieranleitungshandbuch.

Interne Prozedur ON_POS_SET


Im Fall der ON_POS_SET Funktion ermglicht die Systemprozedur, ein Bit eines INTEGER Ports (z.B. $WORD) mit dem Armstatus bzgl. Erreichen einer in der vorbesetzten Variablen $ON_POS_TBL[on_pos_idx].OP_POS definierten Position zu verknpfen. Bei Erreichen dieser Position wird das Bit auf 1 gesetzt und $ON_POS_TBL[on_pos_idx].OP_REACHED nimmt den Wert TRUE an. Um diese Verknpfung zu aktivieren, muss jedoch ON_POS (ON,..) auf demselben Element von $ON_POS_TBL aufgerufen werden. Auer $OP_POS mssen auch die Felder $OP_TOOL und $OP_UFRAME der $ON_POS_TBL initialisiert werden. Aufrufsequenz: ON_POS_SET (port, bit, on_pos_idx) Parameter: port : INTEGER [IN] bit : INTEGER [IN] on_pos_idx : INTEGER [IN] Port ist eine ganzzahlige Portreferenz (z.B. $WORD). Bit ist ein Ganzzahlausdruck, der das Bit angibt, $ON_POS_TBL[on_pos_idx].OP_REACHED reprsentiert. Beispiele: Siehe auch: das den Wert von

Anmerkungen:

On_pos_idx ist der $ON_POS_TBL Index des Elements, das mit dem Portbit verknpft ist. Siehe das Beispiel zur Systemprozedur ON_POS. Systemprozedur ON_POS, vorbesetzte Variable $ON_POS_TBL. Programmieranleitungshandbuch.

01/0401

11-39

ORD

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur ON_TRAJ_SET


Die Systemprozedur ON_TRAJ_SET definiert ein Bit eines analogen Ports (z.B. $WORD), um anzuzeigen, ob der Roboter auf dem geplanten Pfad ist oder nicht. Wenn $CRNT_DATA[arm_num].OT_COARSE den Wert TRUE annimmt, wird dies Bit auf 1 gesetzt. Aufrufsequenz: ON_TRAJ_SET (port, bit <, arm_num>) Parameter: port : bit : arm_num: INTEGER [IN] INTEGER [IN] INTEGER [IN]

Anmerkungen:

Port ist eine ganzzahlige Portreferenz (z.B. $WORD). Bit ist ein Ganzzahlausdruck, der das Bit angibt, $CRNT_DATA[arm_num].OT_COARSE verknpft ist. das mit dem Wert von

Beispiele:

Arm_num ist die Armnummer. Falls nicht angegeben, wird der Standardarm benutzt. Das folgende Beispiel verknpft Bit 3 von $WORD[5] mit dem Status von $CRNT_DATA[2].OT_COARSE. Wenn diese Variable den Wert TRUE hat, ist das Bit auf 1 gesetzt. ON_TRAJ_SET($WORD[5], 3, 2) Klasse der vorbesetzten Variablen mit dem Prfix $OT_, Felder von $CRNT_DATA. Programmieranleitungshandbuch.

Siehe auch:

Interne Funktion ORD


Die interne Funktion ORD gibt den numerischen ASCII Code eines Zeichens in einem String zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: ORD (str, index) INTEGER str : STRING [IN] index : INTEGER [IN] str ist der String, der das Zeichen enthlt. index ist die Position des Zeichens in str, dessen ASCII Wert ausgegeben werden soll. Wenn index kleiner als 1 oder grer als die aktuelle Lnge von str ist, wird ein Fehler ausgegeben. Der Anhang "Zeichenstze" enthlt eine Tabelle des ASCII Standard-Zeichensatzes und die Zeichenstze des Systems. PROGRAM ordinal VAR str : STRING[10] x : INTEGER BEGIN str := ABCDEF x := 0 x := ORD(str, 7) -- FEHLER: Index auerhalb Bereich x := ORD(str, -1) -- FEHLER: Index auerhalb Bereich x := ORD(str, 2) -- x ist gleich 66 (ASCII fr 'B') END ordinal

Beispiele:

PATH_GET_NODE Built-In Procedure


Die interne Prozedur PATH_GET_NODE ermglicht es, die Knotennummer einer PATH Variablen zu erhalten, die einem symbolischen Namen entspricht. Aufrufsequenz: Parameter: PATH_GET_NODE (path_var, name, node_num) path_var name node_num : PATH : STRING : INTEGER [IN] [IN] [OUT]

Anmerkungen:

path_var ist die PATH Variable des Knotens.

11-40

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

POS

name ist der symbolische Name des gesuchten Knotens. node_num wird auf die Knotennummer, die dem symbolischen name entspricht, gesetzt. Wenn name nicht dem symbolischen Namen irgendeines Knotens von path_var entspricht, tritt eine Fehlerbedingung auf. Ein interner Aufruf PATH_GET_NODE ist eine asynchrone Anweisung, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den Zustand paused versetzt wird, und die Interrupt Routinen starten knnen, bevor die - interne Prozedur beendet ist. NODE_SET_NAME(weld_pth, 3, start_welding) NODE_INS(weld_pth, 1, 2) -- fgt zwei Knoten hinter dem Knoten 1 ein PATH_GET_NODE(weld_pth, start_welding, i) -- i = 5

Beispiele:

Interne Funktion PATH_LEN


Die interne Funktion PATH_LEN gibt die Lnge einer PATH Variablen aus. Sie gibt die Anzahl der z.Z. in PATH vorhandenen Knoten zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: PATH_LEN (path_var) INTEGER path_var : PATH [IN] Der Rckgabewert gibt die Zahl der z.Z. in path_var vorhandenen Knoten an. Wenn path_var nicht initialisiert ist, wird der Wert Null zurckgegeben. ROUTINE clear_path (name : PATH OF weld_node) BEGIN NODE_DEL(name, 1, PATHLEN(name)) END clear_path

Interne Funktion POS


Die interne Funktion POS erstellt eine POSITION Variable, die aus den Koordinaten, den Eulerschen Winkeln und der Konfiguration besteht. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: POS (x, y, z, e1, e2, e3, cnfg) POSITION x y z e1 e2 e3 cnfg : : : : : : : REAL REAL REAL REAL REAL REAL STRING [IN] [IN] [IN] [IN] [IN] [IN] [IN]

Anmerkungen:

x, y, und z geben die kartesischen Koordinaten einer Position an. e1, e2 und e3 geben die Eulerschen Winkel einer Position an. cnfg gibt den Konfigurationsstring einer Position an. Zur Beschreibung des Konfigurationsstrings siehe das Kapitel "Darstellung der Daten". ROUTINE shift_x (curpos : POSITION; shift_val : REAL) VAR x, y, z, e1, e2, e3 : REAL cnfg : STRING[15] BEGIN POS_XTRT(curpos, x, y, z, e1, e2, e3, cnfg) x := x + shift_val curpos := POS(x, y, z, e1, e2, e3, cnfg) END shift_x

Beispiele:

00/1200

11-41

POS

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur POS_COMP_IDL


Die interne Prozedur POS_COMP_IDL wandelt den kompensierten Maschinenpositionswert (der den Offset durch Maschinenbesonderheiten bercksichtigt) in den idealen Wert um. Aufrufsequenz: Parameter: Anmerkungen: Beispiele: POS_COMP_IDL (pos_comp, pos_idl) pos_comp: || POSITION|JOINTPOS|XTNDPOS||[IN] pos_idl: ||POSITION|JOINTPOS|XTNDPOS|| [OUT] pos_comp ist die kompensierte Position pos_idl ist die ideale Position, die nach dem Aufruf als Ausgabe zurckgegeben wird. PROGRAM test VAR p1, p2:POSITION J1, J2: JOINTPOS FOR ARM[1] X1, X2: XTNDPOS FOR ARM[1] X3, X4: XTNDPOS FOR ARM[2] BEGIN POS_COMP_IDL (p1, p2) POS_COMP_IDL(j1, j2) POS_COMP_IDL (x1, x2) POS_COMP_IDL(x1, x3) -- Fehler wegen fehlender bereinstimmung -- der Armnummern POS_COMP_IDL(p1, j2) -- Fehler wegen fehlender bereinstimmung der Datenklassen END test POS_IDL_COMP

Siehe auch:

Interne Funktion POS_FRAME


Die interne Funktion POS_FRAME gibt die durch drei oder vier kartesische Positionen spezifizierten Bezugskoordinaten zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: POS_FRAME (corner, x, xy <, orig>) POSITION corner x xy orig : : : : POSITION POSITION POSITION POSITION [IN] [IN] [IN] [IN]

Anmerkungen:

orig ist der Ursprung des neuen Koordinatensystems. Wenn orig nicht angegeben wird, wird corner als Ursprung verwendet. Die x-Achse ist parallel zu einer Linie, die durch die Punkte corner und x definiert wird. Die Ebene xy ist parallel zu einer Ebene, die durch corner, x und xy definiert wird. xy liegt auf der positiven Seite der Ebene xy. Die Achse y liegt auf der Ebene xy und im rechten Winkel zur x-Achse. Die Achse z ist rechtwinklig zur Ebene xy und schneidet die Achsen x und y. Die positive Seite der z-Achse wird durch die Rechte-Hand-Regel ermittelt.

Beispiele:

Diese Funktion ist hauptschlich fr die Definition von $UFRAME von Nutzen. $UFRAME := POS_FRAME(origin, xaxis, xyplane)

Interne Funktion POS_GET_APPR


Die interne Funktion POS_GET_APPR gibt den Annherungsvektor fr eine spezifizierte Position zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: POS_GET_APPR (source_pos) VECTOR source_pos : POSITION [IN] Der Anfahrvektor ist die positive Z-Richtung des von source_pos definierten Bezugssystems.

11-42

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

POS

Beispiele:

ROUTINE rotate_orient (posn : POSITION) VAR temp : VECTOR BEGIN temp := POS_GET_APPR(posn) POS_SET_APPR(posn, POS_GET_NORM(posn)) POS_SET_NORM(posn, temp) END rotate_orient

Interne Funktion POS_GET_CNFG


Die interne Funktion POS_GET_CNFG gibt den Konfigurationsstring einer angegebenen POSITION Variablen zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: POS_GET_CNFG (source_pos) STRING source_pos : POSITION [IN] Die max. Lnge eines Konfigurationsstrings betrgt 33 Stellen. Wenn also der Rckgabewert von POS_GET_CNFG einer Stringvariablen zugeordnet wird, mu diese eine max. Lnge von mindestens 33 Zeichen haben, um zu vermeiden, da etwas abgeschnitten wird. Zur Beschreibung des Konfigurationsstrings siehe das Kapitel "Darstellung der Daten". cnfg_str := POS_GET_CNFG(cur_pos)

Beispiele:

Interne Funktion POS_GET_LOC


Die interne Funktion POS_GET_LOC gibt den Ortsvektor einer spezifizierten Position zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: POS_GET_LOC (source_pos) VECTOR source_pos : POSITION [IN] Der ausgegebene Ortsvektor stellt die Komponente x, y, z von source_pos dar. ROUTINE shift_loc (posn:POSITION; x_delta, y_delta, z_delta:REAL) VAR alter, old, new : VECTOR BEGIN alter := VEC(x_delta, y_delta, z_delta) old := POS_GET_LOC(posn) new := old # alter POS_SET_LOC(posn, new) END shift_loc

Interne Funktion POS_GET_NORM


Die interne Funktion POS_GET_NORM gibt den Normalenvektor des durch eine Position spezifizierten Bezugssystem zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: POS_GET_NORM (source_pos) VECTOR source_pos : POSITION [IN] Der Normalenvektor ist die positive X-Achse des durch source_pos spezifizierten Bezugssystems.

00/1200

11-43

POS

LISTE DER INTERNEN ROUTINEN

PDL2

Beispiele:

ROUTINE rotate_approach (posn : POSITION) VAR temp : VECTOR BEGIN temp := POS_GET_NORM(posn) POS_SET_NORM(posn, POS_GET_ORNT(posn)) POS_SET_ORNT(posn, temp) END rotate_approach

Interne Funktion POS_GET_ORNT


Die interne Funktion POS_GET_ORNT gibt den Ausrichtungsvektor einer angegebenen Position zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: POS_GET_ORNT (source_pos) VECTOR source_pos : POSITION [IN] Der Ausrichtungsvektor ist die positive Y-Achse des durch source_pos spezifizierten Bezugssystems. ROUTINE rotate_approach (posn : POSITION) VAR temp : VECTOR BEGIN temp := POS_GET_NORM(posn) POS_SET_NORM(posn, POS_GET_ORNT(posn)) POS_SET_ORNT(posn, temp) END rotate_approach

Interne Prozedur POS_IDL_COMP


Die interne Prozedur POS_IDL_COMP wandelt die ideale Maschinenposition in die kompensierte um, die die Offsets fr mechanische Besonderheiten der Maschine bercksichtigt. Aufrufsequenz: Parameter: Anmerkungen: Beispiele: POS_IDL_COMP (pos_idl, pos_comp) [IN] [OUT] pos_idl:||POSITION|JOINTPOS|XTNDPOS|| pos_comp:||POSITION|JOINTPOS|XTNDPOS||

pos_idl ist die ideale Position. pos_comp ist die kompensierte Position, die nach Prozeduraufruf zurckgegeben wird. PROGRAM test VAR p1, p2:POSITION J1, J2: JOINTPOS FOR ARM[1] X1, X2: XTNDPOS FOR ARM[1] X3, X4: XTNDPOS FOR ARM[2] BEGIN POS_IDL_COMP (p1, p2) POS_IDL_COMP (j1, j2) POS_IDL_COMP (x1, x2) POS_IDL_COMP (x1, x3) -- Fehler, da die Armnummern nicht bereinstimmen POS_IDL_COMP (p1, j2) -- Fehler, da die Datenklassen nicht bereinstimmen END test POS_COMP_IDL

Siehe auch:

11-44

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

POS

Interne Prozedur POS_IN_RANGE


Die interne Prozedur POS_IN_RANGE setzt einen BOOLEAN Wert, der angibt, ob sich ein Wert POSITION, JOINTPOS oder XTNDPOS innerhalb des Bereiches eines spezifizierten Armes befindet. Aufrufsequenz: POS_IN_RANGE (test_pos, bool_ans <, arm_num>) Parameter: test_pos : ||POSITION | JOINTPOS | XTNDPOS || [IN] bool_ans : BOOLEAN [OUT] arm_num : INTEGER [IN] bool_ans wird als TRUE angesetzt, wenn der Arm test_pos erreichen kann, andernfalls wird bool_ans als FALSE gesetzt. Die aktuellen $BASE und $TOOL werden bei test_pos angewendet. Wenn arm_num nicht angegeben wird, wird der Standardarm verwendet. Ein interner Aufruf POS_IN_RANGE ist eine asynchrone Anweisung, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den Zustand paused versetzt wird, und die Interrupt Routinen starten knnen, bevor die interne Prozedur beendet ist. Diese Routine wird durch Umwandlung einer POSITION oder XTNDPOS Variablen in das JOINTPOS Format implementiert. Falls die Steuereinheit diese Mglichkeit nicht besitzt, gibt POS_IN_RANGE keinen Fehler sondern bool_ans als FALSE zurck. Der Anwender sollte deshalb $ERROR und $THRD_ERROR testen, wie im zweiten der folgenden Beispiele gezeigt, um die Bedeutung des FALSE Ausgangs voll zu verstehen (nmlich, ob die Position wirklich auer Bereich ist oder die Routine nicht richtig ausgefhrt wurde). POS_IN_RANGE(posn, bool) IF bool THEN MOVE TO posn ELSE out_of_range(posn) ENDIF $ERROR:=0 POS_IN_RANGE(p, boo) IF boo THEN MOVE TO p ELSE IF $ERROR = 40028 THEN -- inverse Kinematik nicht verfgbar -- kann nicht feststellen, ob Position im Bereich war ELSE -- Position auer Bereich ENDIF

Anmerkungen:

Beispiele:

Interne Funktion POS_INV


Die interne Funktion POS_INV gibt das Umgekehrte einer kartesischen Position zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: POS_INV (source_pos) POSITION source_pos : POSITION [IN] Der ausgegebene Wert ist das Umgekehrte von source_pos. Die Konfiguration des ausgegebenen Wertes ist die source_pos. ROUTINE get_flange_frame (posn, flange_pos : POSITION) BEGIN flange_pos := posn : POS_INV ($TOOL) -- wenn TCP in Position ist, -- die Position des Flanschbezugsystems END get_flange_frame

00/1200

11-45

POS

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Funktion POS_MIR


Die interne Funktion POS_MIR gibt das Spiegelbild einer Position bezglich der xz Ebene einer anderen Position zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: POS_MIR (source, mplane, orient) POSITION source mplane orient : POSITION : POSITION : BOOLEAN [IN] [IN] [IN]

Anmerkungen:

Der Konfigurationsstring wird durch Negativsetzen der Werte fr die Umdrehungszahl gespiegelt. Die Marken fr Schulter, Ellbogen und Handgelenk werden nicht gendert. Die Marken fr die Umdrehungs-Konfiguration werden negativ gesetzt. Die Ausrichtung ergibt sich aus den Euler'schen Winkel. Wenn orient TRUE ist, werden die Euler'schen Winkel (und also die Ausrichtung) gespiegelt. Ist orient FALSE, bleiben Winkel und Ausrichtung unverndert. Als gute Technik bei der Benutzung dieser Funktion empfiehlt es sich, die Position mplane im Tool-Bezugssystem zu lernprogrammieren, nachdem die Tool-Ebene XZ mit der Ebene ausgerichtet ist, die als source angesehen werden wird. new_pos := POS_MIR(old_pos, mplane, orntatn).

Beispiele:

Interne Prozedur POS_SET_APPR


Die interne Prozedur POS_SET_APPR setzt die Ausrichtungskomponenten einer POSITION Variablen, indem sie den Annherungsvektor (Z-Richtung) des entsprechenden Bezugssystems zuweist. Aufrufsequenz: Parameter: Anmerkungen: POS_SET_APPR (posn, appr_vec) posn : POSITION appr_vec : VECTOR [IN, OUT] [IN]

posn ist die POSITION Variable. Wenn sie nicht initialisiert ist, wird ein Fehler ausgegeben. Die positive z-Seite von posn wird dem durch appr_vec angegebenen Annherungsvektor vorgegeben. ROUTINE rotate_orient (posn : POSITION) VAR temp : VECTOR BEGIN temp := POS_GET_APPR(posn) POS_SET_APPR(posn, POS_GET_NORM(posn)) POS_SET_NORM(posn, temp) END rotate_orient

Beispiele:

Interne Prozedur POS_SET_CNFG


Die interne Prozedur POS_SET_CNFG legt den Konfigurationsstring einer angegebenen POSITION Variablen fest. Aufrufsequenz: Parameter: Anmerkungen: POS_SET_CNFG (posn, new_cnfg) posn : POSITION new_cnfg : STRING [IN, OUT] [IN]

posn ist die POSITION Variable. Wenn sie nicht initialisiert ist, wird ein Fehler ausgegeben. Der Konfigurationsstring von posn wird dem angegebenen Wert von new_cnfg vorgegeben. Zur Beschreibung des Konfigurationsstrings siehe das Kapitel "Darstellung der Daten". POS_SET_CNFG(posn, SW)

Beispiele:

Interne Prozedur POS_SET_LOC


Die interne Prozedur POS_SET_LOC legt den Ortsvektor einer spezifizierten Position fest. Aufrufsequenz: Parameter: POS_SET_LOC (posn, new_loc) posn new_loc : POSITION : VECTOR [IN, OUT] [IN] 00/1200

11-46

PDL2

LISTE DER INTERNEN ROUTINEN

POS

Anmerkungen:

posn ist die POSITION Variable. Wenn sie nicht initialisiert ist, wird ein Fehler ausgegeben. Die Positionskomponente (x, y, z) von posn wird dem durch new_loc spezifizierten Ortsvektor vorgegeben. ROUTINE shift_loc (posn:POSITION; x_delta, y_delta, z_delta:REAL) VAR alter, old, new : VECTOR BEGIN alter := VEC(x_delta, y_delta, z_delta) old := POS_GET_LOC(posn) new := old # alter POS_SET_LOC(posn, new) END shift_loc

Beispiele:

Interne Prozedur POS_SET_NORM


Die interne Prozedur POS_SET_NORM setzt die Ausrichtungskomponenten einer POSITION Variablen, indem sie den Normalenvektorvektor (X-Richtung) des entsprechenden Bezugssystems zuweist. Aufrufsequenz: Parameter: Anmerkungen: POS_SET_NORM (posn, new_norm) posn : POSITION new_norm : VECTOR [IN, OUT] [IN]

posn ist die POSITION Variable. Wenn sie nicht initialisiert ist, wird ein Fehler ausgegeben. Die positive x-Achse von posn wird dem durch new_norm angegebenen senkrechten Vektor vorgegeben. ROUTINE rotate_approach (posn : POSITION) VAR temp : VECTOR BEGIN temp := POS_GET_NORM(posn) POS_SET_NORM(posn, POS_GET_ORNT(posn)) POS_SET_ORNT(posn, temp) END rotate_approach

Beispiele:

Interne Prozedur POS_SET_ORNT


Die interne Prozedur POS_SET_ORNT setzt die Ausrichtungskomponenten einer POSITION Variablen, indem sie den Ausrichtungsvektor (Y-Richtung) des entsprechenden Bezugssystems zuweist. Aufrufsequenz: Parameter: Anmerkungen: POS_SET_ORNT (posn, new_orient) posn : POSITION [IN, OUT] new_orient : VECTOR [IN] posn ist die POSITION Variable. Wenn sie nicht initialisiert ist, wird ein Fehler ausgegeben. Die positive y-Seite von posn wird dem durch new_orient spezifizierten Ausrichtungsvektor vorgegeben. ROUTINE rotate_approach (posn : POSITION) VAR temp : VECTOR BEGIN temp : = POS_GET_NORM(posn) POS_SET_NORM(posn, POS_GET_ORNT(posn)) POS_SET_ORNT(posn, temp) END rotate_approach

Beispiele:

Interne Prozedur POS_SHIFT


Die interne Prozedur POS_SHIFT verschiebt eine kartesische Position um einen angegebenen Vektor. Aufrufsequenz: Parameter: POS_SHIFT (posn, shf_vec) posn : POSITION shf_vec : VECTOR [IN, OUT] [IN]

00/1200

11-47

POS

LISTE DER INTERNEN ROUTINEN

PDL2

Anmerkungen:

posn ist die POSITION Variable. Wenn sie nicht initialisiert ist, wird ein Fehler ausgegeben. shf_vec ist der Vektor, durch den posn verschoben wird. Seine Komponenten werden mit den Positionskomponenten von posn summiert. JNTP_TO_POS(jp1, p1) -- konvertiert von jointpos in position v1 := VEC(0, 100, 0) -- erstellt den Vekto POS_SHIFT(p1, v1) -- verschiebt die Position durch den Vektor POS_TO_JNTP(p1, jp1) -- konvertiert die verschobene position in JOINTPOS

Beispiele:

Interne Prozedur POS_TO_JNTP


Die interne Prozedur POS_TO_JNTP konvertiert einen POSITION Ausdruck in eine JOINTPOS Variable. Aufrufsequenz: Parameter: Anmerkungen: POS_TO_JNTP (pos_expr, jnt_var) pos_expr : POSITION jnt_var : JOINTPOS [IN] [OUT]

pos_expr ist der zu konvertierende POSITION Ausdruck. jnt_var ist die JOINTPOS Variable, die sich aus der Konversion ergibt. Ein interner Aufruf POS_TO_JNTP ist eine asynchrone Anweisung, d.h. sie wird weiter ausgefhrt, auch wenn das Programm in den Zustand paused versetzt wird, und die Interrupt Routinen starten knnen, bevor die interne Prozedur beendet ist. JNTP_TO_POS(jp1, p1) -- konvertiert von JOINTPOS in POSITION v1 := VEC(0, 100, 0) -- erstellt den Vektor POS_SHIFT(p1, v1) -- verschiebt die Position durch den Vektor POS_TO_JNTP(p1, jp1) -- konvertiert die verschobene Position in JOINTPOS

Beispiele:

Interne Prozedur POS_XTRT


Die interne Prozedur POS_XTRT ermittelt die Positionskomponenten, die Eulerschen Winkel und den Konfigurationsstring einer kartesischen Position. Aufrufsequenz: Parameter: POS_XTRT (posn, x, y, z, e1, e2, e3, cnfg) posn x y z e1 e2 e3 cnfg : : : : : : : : POSITION REAL REAL REAL REAL REAL REAL STRING [IN] [OUT] [OUT] [OUT] [OUT] [OUT] [OUT] [OUT]

Anmerkungen:

posn ist die POSITION, fr die die Komponenten ermittelt werden sollen. Die kartesischen Koordinaten von posn werden x, y und z zugeordnet. Die Eulerschen Winkel von posn werden e1, e2 und e3 zugeordnet. Der Konfigurationsstring von posn wird cnfg zugeordnet. ROUTINE shift_x (curpos : POSITION; shift_val : REAL) VAR x, y, z, e1, e2, e3 : REAL cnfg : STRING[15] BEGIN POS_XTRT(curpos, x, y, z, e1, e2, e3, cnfg) x := x + shift_val CURPOS := POS(x, y, z, e1, e2, e3, cnfg) END shift_x

Beispiele:

11-48

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

PROG

Interne Funktion PROG_OWNER


Die interne Funktion PROG_OWNER gibt die Codenummer des EZ Programms zurck, das Eigentmer dieser Routine ist. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: PROG_OWNER INTEGER None Der zurckgegebene Wert ist die Codenummer des EZ Programms, das Eigentmer dieser Routine ist. Wenn das Programm kein EZ Programm ist, wird -1 zurckgegeben. Ist es ein EZ Programm, aber es kann im Programmnamen keine Nummer gefunden werden, gibt die Routine -3 zurck. Schlgt die Umwandlung fehl, wird -2 zurckgegeben. Prog_20 EZ ROUTINE seam (i : INTEGER) EXPORTED FROM wa_appl ROUTINE call_prog_20 EXPORTED FROM prog_20 BEGIN seam (PROG_OWNER) END call_prog_20 BEGIN call_prog_20 END call_prog_20 -- PROG_OWNER gibt 20 zurck

Beispiele:

Interne Funktion PROG_STATE


Die interne Funktion PROG_STATE gibt den aktuellen Zustand eines Programms zurck. Diese Funktion funktioniert nicht mit SPS Programmen. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: PROG_STATE (prog_name) INTEGER prog_name : STRING [IN] prog_name ist der Name des Programms, dessen Zustand angegeben werden soll. Wenn das Programm nicht existiert, wird ein Fehler ausgegeben. Der ausgegebene Wert ist eine INTEGER Maske, die den Zustand des Programms angibt. Nur einige der Maskenbits haben Bedeutung fr den Anwender, andere werden intern verwendet Der Programmierer muss deshalb eine Maske zum Interpretieren des von der Funktion zurckgegeben Werts vorsehen. Wenn das Programm nicht aktiv ist, werden alle Bits auf 1 gesetzt. Andere bliche Werte sind: 0 : active and running (aktiv und in Funktion) <0 : not active (nicht aktiv) >0 : suspended (aufgeschoben) -1 -2 2 4 6 64 128 unknown program (unbekanntes Programm) loaded, but not active (geladen, aber nicht aktiv) paused (in Pause) ready state (d.h. in HOLD) (in Bereitschaft, d.h. in HOLD) ready-paused (in Bereitschaft und Pause) waiting on a READ statement (wartet auf eine READ Anweisung) waiting on a WAIT FOR statement (wartet auf eine WAIT FOR Anweisung) 256 : motion currently in progress (laufende Bewegung) 512 : SYS_CALL currently in progress (SYS_CALL momentan in Ausfhrung) 00/1200 11-49 : : : : : : :

ROU

LISTE DER INTERNEN ROUTINEN

PDL2

1024 : DELAY currently in progress (DELAY luft momentan) 2048 : waiting on a WAIT statement (wartet auf eine WAIT Anweisung) 4096 : PULSE currently in progress (PULSE momentan in Ausfhrung) Beispiele: ROUTINE check_state (name : STRING) CONST ki_held_paused_bit = 6 BEGIN SELECT PROG_STATE(name) AND ki_held_paused_bit OF CASE (2): WRITE (paused) CASE (4): WRITE (ready) CASE (6): WRITE (ready-paused) CASE (0): WRITE (active and running) ELSE WRITE (nicht aktiv - kann im Wartezustand sein) ENDSELECT END check_state

Interne Funktion ROUND


Die interne Funktion ROUND rundet eine REAL Zahl auf oder ab, um ein Ergebnis mit einem INTEGER Wert zu liefern. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: ROUND (num) INTEGER num : REAL [IN] Der ausgegebene Wert wird nach unten abgerundet, wenn num einen Dezimalbruchteil von mehr als 0.0 und weniger als 0.5 hat. Wenn der Wert grer als 0.5 ist, wird nach oben aufgerundet. (siehe Schema).

-.5 0 .5
Beispiele: Diese Funktion kann verwendet werden, um einen REAL Ausdruck in einen INTEGER Wert zu konvertieren. ROUND(17.4) -- das Ergebnis ist 17 ROUND(96.5) ROUND(-17.4) ROUND(-96.5) -- das Ergebnis ist 97 -- das Ergebnis ist -17 -- das Ergebnis ist -97

Interne Prozedur SCRN_ADD


Die interne Prozedur SCRN_ADD fgt einer Einrichtung eine Bildschirmseite hinzu, die dann in den Ausgabezyklus der SCRN Taste aufgenommen wird. Aufrufsequenz: Parameter: Anmerkungen: SCRN_ADD (dev_num, scrn_num) dev_num : INTEGER scrn_num : INTEGER [IN] [IN]

Die Bildschirmseite wird dem Ausgabezyklus der SCRN Taste auf der durch dev_num angegebenen Einrichtung hinzugefgt. Diese kann eine von denen sein, die mit folgenden vorbesetzten Konstanten definiert werden: PDV_TP -- Programmierhandgert PDV_CRT -- bei Benutzen des Tool PCINT der PC Bildschirm

11-50

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

SCRN

scrn_num gibt die Bildschirmseite an, die hinzugefgt werden soll. Wenn es sich um eine vom Anwender erstellte Ausgabe handelt, wird der von der internen Prozedur SCRN_CREATE erhaltene Wert angegeben. Eine Bildschirmseite wird den Zyklender SCRN Taste auf einer Einrichtung nur einmal hinzugefgt, egal wie oft die interne Prozedur SCRN_ADD aufgerufen wird. Beispiele: Entspricht scrn_num keiner Bildschirmseite, so tritt eine Fehlerbedingung auf. appl_screen := SCRN_CREATE(weld_disp, PDV_TP) SCRN_ADD(PDV_TP, appl_screen) IF SCRN_GET(PDV_TP) <> appl_screen THEN SCRN_SET(PDV_TP, appl_screen) -- Anzeige von appl auf dem Bildschirm ENDIF

SCRN_CLEAR Built-In Procedure


Die interne Funktion SCRN_CLEAR lscht alle Fenster vom Anwenderbildschirm, sowohl die vom Anwender erstellten als auch die vom System erzeugten. Aufrufsequenz: Parameter: SCRN_CLEAR (dev_num <, code <, scrn_num>>) dev_num : INTEGER code : INTEGER scrn_num : INTEGER [IN] [IN] [IN]

Anmerkungen:

dev_num gibt die Einrichtung an, die die zu lschende Anzeige besitzt. Die folgenden vorbesetzten Konstanten reprsentieren die Einrichtungen, die fr dev_num angegeben werden knnen: PDV_TP -- Programmierhandgert PDV_CRT -- bei Benutzen des PCINT Tool der PC Bildschirm code ist ein ganzzahliger Ausdruck, der angibt, was vom Anwenderbildschirm entfernt werden soll; es knnen die folgenden vorbesetzten Konstanten benutzt werden: SCRN_CLR_CHR -- entfernt alle Zeichen von der spezifizierten Anzeige SCRN_CLR_REM -- entfernt alle Fenster vom spezifizierten Bildschirm SCRN_CLR_DEL -- entfernt und lscht alle vom Anwender erstellten Fenster vom spezifizierten Bildschirm Wenn code nicht angegeben wird, wird SCRN_CLR_REM als Standard verwendet. scrn_num gibt die vom Anwender erzeugte Anzeige an, die gelscht werden soll. Wird keiner spezifiziert, so wird der vom System erzeugte Anwenderbildschirm (SCRN_USER) gelscht. Die interne Funktion SCRN_CREATE kann benutzt werden, um neue Anwenderbildschirme zu erstellen. SCRN_CLEAR(PDV_CRT) -- lscht den vordefinierten Anwenderbildschirm auf -- der CRT -- lscht den Anwender-definierten Schirm SCRN_CLEAR(PDV_CRT, SCRN_CLR_CHR, appl_screen) SCRN_CLEAR(PDV_TP) -- lscht den vordefinierten Anwenderbildschirm -- auf dem PHG SCRN_CLEAR(PDV_CRT, SCRN_CLR_DEL) -- die Fenster werden gelscht

Beispiele:

Interne Funktion SCRN_CREATE


Die interne Funktion SCRN_CREATE erstellt einen neuen Anwenderbildschirm. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: SCRN_CREATE (scrn_name, dev_num) INTEGER scrn_name : STRING dev_num : INTEGER [IN] [IN]

00/1200

11-51

SCRN

LISTE DER INTERNEN ROUTINEN

PDL2

Anmerkungen:

scrn_name ist der Name, der dem neuen Bildschirm gegeben wird. dev_num gibt die Einrichtung an, fr die der Bildschirm erstellt wurde. Die folgenden vorbesetzten Konstanten reprsentieren die Einrichtungen, die fr dev_num benutzt werden knnen: PDV_TP -- Programmierhandgert PDV_CRT -- bei Benutzen des PCINT Tool der PC Bildschirm Obengenannte Einrichtungen knnen mit dem OR Operator verbunden werden, so da ein Bildschirm fr beide Einrichtungen erstellt wird. Der Rckgabewert ist eine Nummer fr den Schirm, die in anderen internen Routinen benutzt werden kann, um den gerade erstellten Anwenderbildschirm zu spezifizieren. Der neue Bildschirm wird nicht automatisch dem mit der SCRN Taste verbundenen Zyklus hinzugefgt. Um den neuen Schirm in eine Zyklusserie mit anderen Bildschirmen einzuschlieen, wird die Routine SCRN_ADD benutzt.

Beispiele:

Wenn es schon einen mit num_scrn bezeichneten Schirm gibt, tritt eine Fehlerbedingung auf. appl_screen := SCRN_CREATE(weld_disp, PDV_TP) SCRN_ADD(PDV_TP, appl_screen) IF SCRN_GET(PDV_TP) <> appl_screen THEN SCRN_SET(PDV_TP, appl_screen) -- Anzeige von appl auf dem Bildschirm ENDIF

Interne Prozedur SCRN_DEL


Die interne Prozedur SCRN_DEL lscht eine vom Anwender erstellte Anzeige. Aufrufsequenz: Parameter: Anmerkungen: SCRN_DEL (scrn_name) scrn_name : STRING [IN] scrn_name bezeichnet die zu lschende Anzeige. Ein Schirm mu aus allen Zyklen der SCRN Taste entfernt werden, ehe er gelscht werden kann. Zu diesem Zweck wird die interne Funktion SCRN_REMOVE benutzt. Wenn scrn_name keinen definierten Bildschirm bezeichnet oder er sich z.Z. in einem Zyklus der SCRN Taste einer Einrichtung befindet, tritt eine Fehlerbedingung auf. appl_screen := SCRN_CREATE(weld_disp, PDV_TP) SCRN_ADD(PDV_TP, appl_screen) IF SCRN_GET(PDV_TP) <> appl_screen THEN SCRN_SET(PDV_TP, appl_screen) -- Anzeige von appl auf dem Bildschirm ENDIF . . . SCRN_REMOVE(PDV_TP, appl_screen) SCRN_DEL(weld_disp);

Beispiele:

Interne Prozedur SCRN_FONT


Die interne Prozedur SCRN_FONT ermglicht es, den Zeichensatz eines Bildschirms auf einer angegebenen Einrichtung zu ndern. Aufrufsequenz: Parameter: SCRN_FONT (dev_num, font_num, <scrn_num>) dev_num : INTEGER font_num : INTEGER scrn_num : INTEGER [IN] [IN] [IN]

Anmerkungen:

dev_num gibt an, an welcher Einrichtung des Zeichensatzes des angegebenen Bildschirms verndert wird. Die folgenden vorbesetzten Konstanten geben die Vorrichtungen an: PDV_TP -- Programmierhandgert PDV_CRT -- bei Benutzen des PCINT Tool der PC Bildschirm font_num gibt an, welcher Zeichensatz verwendet werden soll. Momentan sind nur der Zeichensatz 1 (Standard) und 2 vorgesehen. Beschreibung der Zeichenstze siehe Anhang "Zeichenstze".

11-52

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

SCRN

scrn_numgibt an, auf welchem Bildschirm der Zeichensatz gendert werden soll: auf einem vom System oder vom Anwender erstellten Schirm. Der Standardbildschirm ist der Anwenderbildschirm (SCRN_USER). Die vom System erstellten Schirme werden von den im Folgenden aufgefhrten vorbesetzten Konstanten dargestellt: SCRN_USER -- Anwenderbildschirm SCRN_SYS -- Systembildschirm Beispiele: -- ndert den Zeichensatz des vom System erstellten Anwenderbildschirms SCRN_FONT(PDV_TP, 2, SCRN_USER) SCRN_FONT(PDV_TP, 2, appl_screen)

Interne Funktion SCRN_GET


Die interne Funktion SCRN_GET gibt den aktuell auf der spezifizierten Einrichtung angezeigten Bildschirm zurck. Ferner kann das z.Z. ausgewhlte Fenster auf diesem Bildschirm ausgegeben werden. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: SCRN_GET (dev_num <, win_name>) INTEGER dev_num : INTEGER win_name : STRING [IN] [OUT]

dev_num gibt die Einrichtung an, auf der der aktuell angezeigte Bildschirm zurckgegeben werden soll. Die Einrichtungen werden durch die folgenden, vorbesetzten Konstanten dargestellt: PDV_TP -- Programmierhandgert PDV_CRT -- bei Benutzen des PCINT Tool der PC Bildschirm Der Rckgabewert bezeichnet den vom System oder vom Anwender erstellten Bildschirm. Die vom System erstellten Schirme werden durch die folgenden vorbesetzten Konstanten reprsentiert: SCRN_USER -- Anwenderbildschirm SCRN_SYS -- Systembildschirm SCRN_EDIT -- Editor-Bildschirm Wenn der Parameter win_name angegeben wird, wird dieser fr den Namen des z.Z. auf dem Bildschirm ausgewhlten Fensters eingesetzt. IF SCRN_GET(PDV_TP) <> SCRN_SYS THEN SCRN_SET(PDV_TP, SCRN_SYS) -- sys screen auf dem PHG gewnscht ENDIF IF SCRN_GET(PDV_CRT) <> appl_screen THEN SCRN_SET(PDV_CRT, appl_screen) -- appl screen auf der CRT gewnscht ENDIF

Beispiele:

Interne Prozedur SCRN_REMOVE


Mit der internen Prozedur SCRN_REMOVE kann ein Bildschirm von einer Einrichtung entfernt werden, so da er nicht mehr im Anzeigezyklus der SCRN Taste enthalten ist. Aufrufsequenz: Parameter: Anmerkungen: SCRN_REMOVE (dev_num, scrn_num) dev_num : INTEGER scrn_num : INTEGER [IN] [IN]

dev_num bezeichnet die zu benutzende Einrichtung. Der Bildschirm wird aus dem Anzeigezyklus der SCRN Taste entfernt. Die Einrichtungen werden durch die folgenden vorbesetzten Konstanten reprsentiert: PDV_TP -- Programmierhandgert PDV_CRT -- bei Benutzen des PCINT Tool der PC Bildschirm scrn_num bezeichnet den vom Anwender erstellten Bildschirm, der entfernt werden soll. Seinen Wert ermittelt man mit der internen Routine SCRN_CREATE. Wenn scrn_num nicht existiert oder sich z.Z. nicht in einem Zyklus auf der angegebenen Einrichtung befindet, tritt eine Fehlerbedingung auf.

00/1200

11-53

SCRN

LISTE DER INTERNEN ROUTINEN

PDL2

Beispiele:

appl_screen := SCRN_CREATE(weld_disp, PDV_TP) SCRN_ADD(PDV_TP, appl_screen) IF SCRN_GET(PDV_TP) <> appl_screen THEN SCRN_SET(PDV_TP, appl_screen) -- Anzeige appl auf dem Bildschirm ENDIF . . . SCRN_REMOVE(PDV_TP, appl_screen) SCRN_DEL(weld_disp);

Interne Prozedur SCRN_SET


Die interne Prozedur SCRN_SET zeigt den angegebenen Bildschirm auf der angegebenen Einrichtung an. Aufrufsequenz: Parameter: Anmerkungen: SCRN_SET (dev_num, scrn_num) dev_num : INTEGER scrn_num : INTEGER [IN] [IN]

dev_num gibt die Einrichtung an, auf der der angegebene Bildschirm angezeigt werden soll. Die Einrichtungen werden durch die folgenden, vorbesetzten Konstanten dargestellt: PDV_TP -- Programmierhandgert PDV_CRT -- bei Benutzen des PCINT Tool der PC Bildschirm scrn_num gibt den anzuzeigenden Bildschirm an. Es knnen vom Anwender oder vom System erstellte Bildschirme angegeben werden. Die vom System erstellten Bildschirme werden von folgenden vorbesetzten Konstanten reprsentiert: SCRN_USER -- Anwenderbildschirm SCRN_SYS -- Systembildschirm SCRN_EDIT -- Editor-Bildschirm Wenn scrn_num als SCRN_EDIT gesetzt wird und der Editor nicht aktiv ist, wird ein Fehler ausgegeben.

Beispiele:

Falls scrn_num nicht existiert, tritt eine Fehlerbedingung auf. IF SCRN_GET(PDV_TP) <> SCRN_SYS THEN SCRN_SET(PDV_TP, SCRN_SYS) -- Systembildschirm auf dem PHG ENDIF IF SCRN_GET(PDV_CRT) <> appl_screen THEN SCRN_SET(PDV_CRT, appl_screen) -- Anzeige appl auf dem Bildschirm ENDIF

Interne Prozedur SENSOR_GET_DATA


Die interne Prozedur SENSOR_GET_DATA holt Sensorendaten von integrierten Sensoren. Aufrufsequenz: Parameter: SENSOR_GET_DATA (sens_read <,flag> <,arm>) sens_read flag arm : ARRAY [6] of REAL : INTEGER : INTEGER [OUT] [OUT] [IN]

Anmerkungen:

sens_read empfngt die sechs Elemente, die vom Sensor kommen. Die ersten drei stellen die Translation in den Richtungen X, Y und Z dar, die letzten drei die Drehungen um die Achsen X, Y und Z . flag wird 1 zugewiesen, wenn die Daten noch nie von einer SENSOR_GET_DATA Anweisung gelesen wurden, sonst 0. Dieser Parameter ist optional. arm ist optional und bezeichnet, wenn vorhanden, einen anderen als den Standardarm, von dem die Sensordaten geholt werden sollen.

11-54

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

SEN

Beispiele:

$SENSOR_ENBL := TRUE ... SENSOR_GET_DATA(sens_read, flag) -- sensor data sorgt fr Berichtigungen in den Richtungen X, Y und Z IF flag=1 THEN WRITE(Neu gelesene Daten: ) WRITE([,sens_read[1], ,sens_read[2], ) WRITE(sens_read[3],],NL) ENDIF

Interne Prozedur SENSOR_GET_OFST


Die interne Prozedur SENSOR_GET_OFST liest die ganze Offsetmatrix, die die wahre Roboterposition im Vergleich zur programmierten darstellt. Aufrufsequenz: Parameter: Anmerkungen: SENSOR_GET_OFST (ofst_tot <,arm>) ofst_tot arm : ARRAY [6] of REAL : INTEGER [OUT] [IN]

ofst_tot empfngt die sechs Elemente, die vom Sensor kommen. Die ersten drei stellen die Offsets in den Richtungen X, Y und Z dar, die letzten drei die Drehungen um die Achsen X, Y und Z . arm ist optional und bezeichnet, wenn vorhanden, einen anderen als den Standardarm, von dem die Sensordaten geholt werden sollen.. $SENSOR_ENBL := TRUE ... SENSOR_GET_OFST(ofst_tot) WRITE(Actual Offsets: ,NL) -- Fall eines Sensors, der Offsets und Drehungen liefert WRITE([,ofst_tot[1], ,ofst_tot[2], ,ofst_tot[3],],NL) WRITE([,ofst_tot[4], ,ofst_tot[5], ,ofst_tot[6],],NL) ENDIF

Beispiele:

Interne Prozedur SENSOR_SET_DATA


Die interne Prozedur SENSOR_SET_DATA wird benutzt, um Offsets zur Bewegungsumgebung zu senden. Aufrufsequenz: Parameter: Anmerkungen: SENSOR_SET_DATA (err_track <,arm>) err_track arm : ARRAY [6] of REAL : INTEGER [IN] [IN]

err_track enthlt die Offsets, die auf die Bahn angewandt werden. Die ersten drei stellen die Verschiebungsoffsets in den Richtungen X, Y und Z dar, die letzten drei die Drehungen um die Achsen X, Y und Z. Alle nicht benutzten Elemente von err_track mssen mit 0 initialisiert werden arm ist optional und bezeichnet, wenn vorhanden, einen anderen als den Standardarm, von dem die Sensordaten gesetzt werden sollen. err_track[1] := 0; err_track[2] := 0; err_track[3] := 0 err_track[4] := 0; err_track[5] := 0; err_track[6] := 0 $SENSOR_ENBL := TRUE $SENSOR_TIME := 500 -- Zeit zwischen Sensorabfragen WHILE (bool) DO ... -- Routine, die zwei vom Sensor zurckgegebene Offsets liest get_corr(err_track[2], err_track[3]) SENSOR_SET_DATA(err_track) DELAY 500 -- Zeit zwischen jeder Sensorabfrage ... ENDWHILE

Beispiele:

00/1200

11-55

SEN

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur SENSOR_SET_OFST


Diese interne Prozedur ist ntzlich fr die Funktion fr Sensorverfolgung, wenn Anfangsoffsets in Bezug auf die theoretische Roboterposition zugewiesen werden mssen. Sie kann nur ausgefhrt werden, wenn keine Bewegungen laufen. Aufrufsequenz: Parameter: Anmerkungen: SENSOR_SET_OFST (pos<,arm_num>) pos arm_num : POSITION : INTEGER [IN] [IN]

pos gibt die Position an, die zur Bestimmung der Offsets von der aktuellen kartesischen Roboterposition benutzt wird. Diese Offsets werden durch Subtraktion der aktuellen kartesischen Roboterposition und dem im pos Parameter spezifizierten Wert berechnet. arm_num gibt die Armnummer an. Wenn nicht spezifiziert, wird $PROG_ARM benutzt. $SENSOR_SET_OFST (pos_var, 2)

Beispiel:

Interne Prozedur SENSOR_TRK


Die interne Prozedur SENSOR_TRK, die nur aus einem HOLD-fhigem Programm heraus ausgefhrt wird, whlt einen besonderen Status von Sensorverfolgung. Damit kann der angegebene Arm (oder bei keiner Angabe der Standardarm) auch ohne programmierte Bewegung unter Sensorkontrolle gehalten werden. Aufrufsequenz: Parameter: Anmerkungen: SENSOR_TRK (bool <,arm_num>) bool arm_num : BOOLEAN : INTEGER [IN] [IN]

bool ist entweder TRUE oder FALSE und zeigt an, welcher Status fr Sensorverfolgung aktiviert werden soll. arm_num ist optional und bezeichnet, wenn vorhanden, einen anderen als den Standardarm, von dem die Sensordaten geholt werden sollen. Die effektive Aktivierung dieses Typs von Sensorverfolgung hngt von dem Wert von $SENSOR_ENBL ab. SENSOR_TRK(TRUE) braucht nicht nochmal ausgefhrt zu werden, wenn $SENSOR_ENBL auf FALSE und dann wieder auf TRUE gesetzt wurde. Diese Verfolgung kann nur durch dasselbe Programm deaktiviert werden, das sie aktiviert hat. SENSOR_TRK kann nicht ausgefhrt werden, wenn diese Funktion schon von einem zweiten HOLD-fhigem Programm aktiviert wurde, das zur gleichen Zeit aktiv ist. Der SENSOR_TRK Modus wird automatisch deaktiviert, wenn das Programm deaktiviert wird, das es aktiviert hat. ROUTINE send_corr BEGIN $TIMER[1] := 0 -- Routine, die zwei vom Sensor zurckgegebene Offsets liest get_corr(err_track[2], err_track[3]) SENSOR_SET_DATA(err_track) ENABLE CONDITION[1] END send_corr BEGIN CONDITION[1] : WHEN $TIMER[1] > 500 DO N send_corr -- alle 500 msek Offsets senden ENDCONDITION $SENSOR_TIME := 500 -- Zeit zwischen jeder Sensorabfrage MOVE TO p_start -- den Sensorverfolgungsmodus whlen, um den Arm unter Sensorkontrolle -- ohne programmierte Bewegung zu stellen SENSOR_TRK(TRUE) -- Sensorverfolgung aktivieren $SENSOR_ENBL := TRUE

Beispiele:

11-56

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

SIN

ENABLE CONDITION[1] -- Dieser Semaphor wird von einem anderen Programm oder einer -- anderen Bedingung signalisiert. WAIT sem $SENSOR_ENBL := FALSE MOVE TO p_end ....

Interne Funktion SIN


Die interne Funktion SIN gibt den Sinus eines spezifizierten Winkels zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: SIN (angle) REAL angle : REAL [IN] angle wird in Grad gemessen. Der ausgegebene Wert liegt zwischen -1.0 und 1.0. value := radius * SIN(angle)

x := SIN(angle1) * COS(angle2) x := SIN(60)


-- x = 0.866025

Interne Funktion SQRT


Die interne Funktion SQRT gibt die Quadratwurzel einer angegebenen Zahl zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: SQRT (num) REAL num : REAL [IN] Wenn num kleiner als Null ist, wird ein Fehler ausgegeben. legal := SQRT(answer) > 100.0 -- erhlt einen booleschen Wer

x := SQRT(276.971)

-- x = 16.6424

Interne Prozedur STANDBY


Die interne Prozedur STANDBY ist ntzlich, wenn die Energiesparfunktion aktiviert ist ($TUNE[27] > 0), damit der Arm in den Bereitschaftszustand versetzt werden kann, wenn folgende Bedingungen erfllt sind: System in AUTO, Antriebe in ON und keine laufenden Bewegungen. Aufrufsequenz: Parameter: Anmerkungen: STANDBY (flag <, arm_num>) flag : arm_num : BOOLEAN INTEGER [IN] [IN]

Wenn flag auf ON gesetzt ist, geht der Arm sofort in den Bereitschaftszustand und bleibt darin, bis die nchste Bewegung ausgefhrt oder das nchste Mal die STANDBY Prozedur mit flag auf OFF aufgerufen wird. Wenn flag auf OFF gesetzt ist, wird der Bereitschaftszustand des Arms verlassen. arm_num gibt die Armnummer an. Wenn nicht spezifiziert, wird $PROG_ARM benutzt. STANDBY(OFF, 2) -- Anforderung den Bereitschaftsstatus fr Arm 2 -- zu verlasse STAND-B (ON) -- Anforderung, $PROGRAMM in den Bereitschaftszu-- stand zu versetzen

Beispiele:

00/1200

11-57

STR

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Funktion STR_CAT


Die interne Funktion STR_CAT verkettet zwei Strings. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: STR_CAT (str1, str2) STRING str1 : STRING str2 : STRING [IN] [IN]

Wenn man den Wert von str1 und str2 aneinander hngt, erhlt man den Rckgabewert. Wenn der Ergebnisstring einer Variablen zugeordnet wird und das Ergebnis fr die spezifizierte Variable zu lang ist, wird der Rest des Strings abgeschnitten (so wie auch bei jeder anderen Zuweisung eines Strings). PROGRAM conct VAR str : STRING[8] s1, s2, s3 : STRING[5] BEGIN s1 := Hi s2 := Hello s3 := There str := STR_CAT(s1, s3) -- str entspricht jetzt Hi There str := STR_CAT(s2, s3) -- str ergibt jetzt Hello Th END conct

Beispiele:

Interne Prozedur STR_DEL


Die interne Prozedur STR_DEL lscht eine Reihe von Zeichen aus einem STRING. Aufrufsequenz: Parameter: STR_DEL (str, start_idx, length) str start_idx length : STRING : INTEGER : INTEGER [IN, OUT] [IN] [IN]

Anmerkungen:

str mu ein Verweis der STRING Variablen sein. start_idx ist ein Index, der angibt, wo die Lschung in str beginnt. length ist die Gesamtzahl der zu lschenden Zeichen. Wenn str nicht initialisiert ist, wird ein Fehler ausgegeben. Wenn start_idx oder length kleiner als 1 ist, wird ein Fehler ausgegeben. Wenn start_idx grer als die max. Lnge von str ist, hat die interne Prozedur keine Auswirkung. Wenn length grer ist, als die Anzahl der Zeichen von start bis zum Ende von str ist, werden alle Zeichen nach start gelscht. PROGRAM str VAR letters : STRING[10] BEGIN letters := abcdefghij STR_DEL(letters, 0, 3) -- FEHLER: start_idx < 1 STR_DEL(letters, 1, -1) -- FEHLER: length < 1 STR_DEL(letters, 30, 5) -- es erscheint nichts: 30 > max. Lnge STR_DEL(letters, 4, 2) -- Buchstaben = abcfghij letters := abcdefghij -- fr das folgende Beispiel STR_DEL(letters, 8, 5) -- Buchstaben = abcdefg END str

Beispiele:

11-58

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

STR

Interne Prozedur STR_EDIT


Die interne Prozedur STR_EDIT bearbeitet oder konvertiert einen spezifizierten STRING und bietet dazu mehrere Mglichkeiten. Aufrufsequenz: Parameter: Anmerkungen: STR_EDIT(string_var, operator) string_var : STRING operator : INTEGER [IN, OUT] [IN]

string_var gibt den zu ndernden STRING an. operator ist ein INTEGER Wert, der die Operation spezifiziert, die mit dem STRING vorgenommen werden soll. Es knnen mehrere Operatoren mit dem OR Operator verknpft werden. Die folgenden vorbesetzten Konstanten reprsentieren die verschiedenen Operationen, die mit dem STRING vorgenommen werden knnen. STR_LWR STR_UPR ndert alle Grobuchstaben in Kleinbuchstaben um. ndert alle Kleinbuchstaben in Grobuchstaben um.

STR_TRIM

Entfernt alle Leerzeichen, Tabulatoren und Zeilenvorschbe am Anfang und Ende des STRING. STR_COMP Konvertiert mehrfache weie Leerzeichen in ein einzelnes Zeichen. STR_COLL Entfernt alle weien Leerzeichen aus dem STRING. STR_EDIT(string_var, STR_UPR) STR_EDIT(string_var, STR_TRIM) STR_EDIT(string_var, STR_LWR OR STR_COLL)

Beispiele:

Interne Prozedur STR_INS


Die interne Prozedur STR_INS fgt eine Reihe von Zeichen in einen STRING ein. Aufrufsequenz: Parameter: STR_INS (source_str, start_idx, insert_str) source_str : STRING start_idx : INTEGER insert_str : STRING [IN, OUT] [IN] [IN]

Anmerkungen:

source_str ist der zu verndernde STRING. Wenn er nicht initialisiert ist, mu start_idx Null sein, andernfalls wird ein Fehler ausgegeben. start_idx ist ein Index, der angibt, wo in source_str die neue Sequenz von Zeichen eingefgt werden soll. start_idx mu zwischen 1 und der aktuellen Stringlnge liegen. Ein Wert auerhalb dieser Grenzen fhrt zu einem Fehler, auch wenn die max. Stringlnge grer ist, als sein aktueller Wert. insert_str ist die neue Zeichenfolge. Wenn das Ergebnis grer als die deklarierte Lnge von source_str ist, wird der String abgeschnitten.

Beispiele:

insert_str wird in source_str eingefgt und berlagert sie nicht. PROGRAM instr VAR str : STRING[20] BEGIN STR_INS(str, 3, Specify number) -- FEHLER: start_idx > 0 STR_INS(str, 1, Specify number) -- str = Specify number STR_INS( str, 15, arm ) -- str = Specify numberarm STR_INS( str, -2, arm ) -- FEHLER: Start auerhalb der Grenzen STR_INS( str, 9, arm ) -- str = Specify arm numberar END instr

00/1200

11-59

STR

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Funktion STR_LEN


Die interne Funktion STR_LEN gibt die Lnge eines STRING zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: STR_LEN (source_str) INTEGER source_str : STRING [IN] source_str ist der Ausdruck des Quellstrings. Der ausgegebene Wert ist nicht die deklarierte Lnge von source_str, sondern die Lnge des derzeitigen Werts. PROGRAM strlen VAR str : STRING[10] length : INTEGER BEGIN str := abcdef -- Initialisierung str length := STR_LEN(str) -- length entspricht jetzt 6 str := ab -- ndert den Wert str length := STR_LEN(str) -- length entspricht jetzt 2 END strlen

Beispiele:

Interne Funktion STR_LOC


Die interne Funktion STR_LOC gibt den Punkt eines STRING zurck, wo eine angegebene Folge von Zeichen beginnt. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: STR_LOC (given_str, find_str) INTEGER given_str : STRING find_str : STRING Suche find_str in given_str. Wenn find_str nicht aufgefunden wird, wird der Wert Null ausgegeben. PROGRAM str VAR start_idx : INTEGER letters : STRING[10] BEGIN letters := abcdefghij start_idx := STR_LOC(letters, d) -- start_idx = 4 STR_DEL(letters, start_idx, 2) -- letters = abcfghij END str [IN] [IN]

Interne Prozedur STR_OVS


Die interne Prozedur STR_OVS tauscht eine Reihe von Zeichen in einem STRING gegen eine neuen Zeichenfolge aus. Aufrufsequenz: Parameter: STR_OVS (source_str, start_idx, replace_str) source_str : STRING start_idx : INTEGER replace_str : STRING [IN, OUT] [IN] [IN]

Anmerkungen:

source_str ist der zu verndernde STRING. Wenn er nicht initialisiert ist, wird ein Fehler ausgegeben. start_idx ist ein Index, der angibt, wo in source_str die neue Sequenz von Zeichen beginnen soll. start_idx mu zwischen 0 und der aktuellen STRING Lnge liegen. Ein Wert auerhalb dieser Grenzen fhrt zu einem Fehler, auch wenn die max. STRING Lnge grer ist als die Lnge seines aktuellen Werts. replace_str ist die neue Zeichenfolge.

11-60

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

STR

Beispiele:

Wenn das Ergebnis grer als die deklarierte Lnge von source_str ist, wird der String abgeschnitten. PROGRAM over_str VAR source : STRING[10] BEGIN source := The Cat STR_OVS(source, 5, Dog) -- source = The Dog STR_OVS(source, 1, BIG) -- source = BIG Dog STR_OVS(source, 5, Chicken) -- source = BIG Chicke END over_str

Interne Prozedur STR_XTRT


Die interne Prozedur STR_XRT ergibt einen Unterstring aus einem angegebenen STRING. Aufrufsequenz: Parameter: STR_XTRT (source_str, start_idx, length, target_str) source_str start_idx length target_str : : : : STRING INTEGER INTEGER STRING [IN] [IN] [IN] [OUT]

Anmerkungen:

source_str ist der Quell STRING. Er wird nicht verndert. start_idx ist ein Index, der den Punkt angibt, an dem mit dem Kopieren begonnen werden soll. start_idx mu zwischen 0 und der aktuellen STRING Lnge liegen. Ein Wert auerhalb dieser Grenzen fhrt zu einem Fehler, auch wenn die max. STRING Lnge grer ist als die seines aktuellen Wertes. length ist die Anzahl der zu kopierenden Zeichen. Wenn sie kleiner als Null ist, wird ein Fehler ausgegeben. Wenn length grer ist, als die Anzahl der Zeichen von start_idx bis zum Ende von source_str, werden alle Zeichen in target_str kopiert. target_str ist der STRING, der den kopierten Unterstring aufnehmen soll. Wenn die Lnge des Ergebnisses grer als die deklarierte Lnge von target_str ist, wird das Ergebnis abgeschnitten. PROGRAM strg VAR str, target : STRING[10] BEGIN str := The Cat STR_XTRT(str, 5, 3, target) -- target = Cat END strg

Beispiele:

Interne Prozedur SYS_CALL


Die interne Prozedur SYS_CALL fhrt den angegebenen Systembefehl aus. Aufrufsequenz: Parameter: Anmerkungen: SYS_CALL (cmnd_str <, param>...) cmnd_str : STRING param : STRING [IN] [IN]

cmnd_str ist ein STRING Ausdruck, dessen Wert eine Liste der einzelnen Zeichen ist, die ntig wren, um einen Befehl ber das PHG oder die PC Tastatur (bei aktivem PCINT Tool) einzugeben. Fr ein Absetzen des Befehls FILER VIEW wrde z.B. FV benutzt. Weitere Einzelheiten finden sich im Kapitel "Operator Interface" des C3G Handbuchs Operations and Maintenance. cmnd_str kann eine beliebige Option einschlieen, die mit dem Befehl eingegeben werden kann. Einige Optionen sind nur verfgbar, wenn der Befehl aus SYS_CALL ausgegeben wird: /4 hilft beim Anzeigen von Befehlen (wie MVP, PV etc.), um anzugeben, dass die in ein Fenster oder eine Datei ($SYS_CALL_OUT) ausgegebenen Daten auf 40 Zeichen begrenzt bleiben sollen.

00/1200

11-61

SYS

LISTE DER INTERNEN ROUTINEN

PDL2

/T in DISPLAY Befehlen erlaubt, die Ausgabe des Befehls auf das PGH zu lenken. Standardmig geben DISPLAY Befehle zum PC Bildschirm aus (wenn das Tool PCINT aktiv ist). /N wird in MEMORY LOAD dazu benutzt, das Speichern der .VAR Datei zu deaktivieren, wenn fr das Programm ein SAVE Befehl gegeben wurde. Diese Option ist ntzlich, wenn die Variablen nur vom .COD Programm verwaltet werden sollen. /P wird in MEMORY LOAD zum permanenten Laden von Anwendungsprogrammen benutzt. param ist ein Stringausdruck, dessen Wert aus einem Parameter besteht, der mit dem Befehl angegeben werden kann. Mehrfache, durch Kommas getrennte param Parameter knnen als fr die Anweisung notwendige Parameter verwendet werden. Es knnen auch mehr als die vom Befehl verlangten Parameter angegeben werden. Dann werden jedoch nur die signifikanten bercksichtigt. Per Standard werden die mit SYS_CALL eingegebenen Befehle ohne Zutun des Anwenders, wie z.B. Besttigung, ausgefhrt. Die vorbesetzte Variable $SYS_CALL_OUT gibt die LUN an, auf der das Ergebnis des Befehls ausgegeben wird. Sie kann nur fr eine System-LUN oder fr eine von dem Programm geffnete LUN vorgegeben werden, von dem SYS_CALL ausgegeben wird. Die vorbesetzte Variable $SYS_CALL_TOUT gibt das Zeitintervall fr SYS_CALL an. Der Wert 0 bedeutet, da es kein solches Intervall gibt. Wird die interne Prozedur SYS_CALL whrend des angegebenen Zeitintervalls nicht abgeschlossen, so wird sie gelscht. Die vorbesetzte Variable $SYS_CALL_STS zeigt den Status der letzten internen Routine SYS_CALL an. Es gibt eine Variable $SYS_CALL_STS fr jedes Programm, das ausgefhrt wird. Die folgenden Befehlen knnen in der internen Prozedur SYS_CALL nicht verwendet werden: PE FE MT MD UA CCP CCRB CCRR CI DCS FUAH FUAR FUAS SCK SCPC SCPM SCPS SV UCP SCP --------------------PROGRAM EDIT FILER EDIT MEMORY TEACH MEMORY DEBUG UTILITY APPLICATN CONFIGURE CNTRLER PASSWORD CONFIGURE CNTRLER RESTART BOOTMON CONFIGURE CNTRLER RESTART REBOOT CONFIGURE IO_CONF DISPLAY CLOSE SELECT FILER UTILITY ATTRIBUTE HIDDEN FILER UTILITY ATTRIBUTE READONLY FILER UTILITY ATTRIBUTE SYSTEM SET CNTRLER KEY-LOCK SET CNTRLER PROTECT CLEAR SET CNTRLER PROTECT MEMORY SET CNTRLER PROTECT SYSTEM SET VIEW_IO UTILITY COMMUNICN PORT_CHAR SET CNTRLER PROTECT

Das Programm setzt die Ausfhrung nicht fort, bis die Routine SYS_CALL abgeschlossen ist. SYS_CALL ist jedoch eine asynchrone Anweisung , d.h. sie luft, whrend das Programm pausiert und Interrupt Service Routinen knnen beginnen, bevor die Routine zu ende ist. Wenn bei der Ausfhrung von SYS_CALL ein Fehler auftritt, wird das Programm in Pause gesetzt. Um Programmunterbrechung wegen SYS_CALL Fehler zu vermeiden, kann die interne Prozedur ERR_TRAP_ON (39960) benutzt oder Bit 6 in $PROG_CNFG auf 1 gesetzt werden. 11-62 00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

SYS

Beispiele:

SYS_CALL(FC, temp, data)

--

temp wird in datei kopiert

OPEN FILE lun_id (dir.dat, RW) $SYS_CALL_OUT := lun_id -- leitet die sys_call Ausgabe auf dir.dat SYS_CALL(FV) -- filer Anzeige am dir.dat SYS_CALL(ML/V, prog3) -- ladet nur prog3.var

Interne Prozedur SYS_VAR_GET


Die interne Prozedur SYS_VAR_GET gibt den aktuellen Wert der spezifizierten vorbesetzten Variablen an. Aufrufsequenz: Parameter: SYS_VAR_GET (source, target <, num_bytes <, conv>>) source target num_bytes conv : : : : Verweis auf die vorbesetzte var Verweis auf die anwenderdefinierte var INTEGER INTEGER [IN] [OUT] [IN] [IN]

Anmerkungen:

source ist der Verweis der Systemvariablen an, deren Wert erhalten werden soll. target mu ein Verweis der vom Anwender definierten Variablen aus derselben Datenklasse von source sein. SYS_VAR_GET setzt target auf den aktuellen Wert von source. Optionale Formatspezifizierer knnen mit beiden Parametern source und target verwendet werden, um eine Byte-Abweichung anzugeben. Der optionale Parameter num_bytes gibt die Anzahl der Bytes an, die von source auf target zu kopieren sind. Wenn genaue Angaben fehlen, wird das kleinste Format von source und target verwendet. Der optionale Parameter conv enthlt die Konversioninformationen. Momentan ist nur eine Konversionsform vorgesehen. Ein Wert von 1 bewirkt die Konversion eines INTEGER von ein oder zwei Byte in einen INTEGER von vier Byte. Diese Konversion ist unzulssig, wenn die Systemvariable definierte Grenzen hat oder auf target eine Abweichung angegeben ist. SYS_VAR_GET($DFT_ARM, cur_dft_arm) store_dft_arm := cur_dft_arm SYS_VAR_SET($DFT_ARM, new_dft_arm) . . . SYS_VAR_SET($DFT_ARM, store_dft_arm)

Beispiele:

Interne Prozedur SYS_VAR_SET


Die interne Prozedur SYS_VAR_SET setzt den Wert der spezifizierten vorbesetzten Variablen. Aufrufsequenz: Parameter: SYS_VAR_SET (target, value <, num_bytes <, conv>> ) target value num_bytes conv : : : : a predefined var reference exp same data type as target INTEGER INTEGER [OUT] [IN] [IN] [IN]

Anmerkungen:

target gibt den Namen der Systemvariablen an, deren Wert gesetzt werden soll. Das kann ein beliebiger Systemvariablenverweis mit Schreibzugriff sein. value mu ein Ausdruck von der gleichen Datenklasse wie die in target angegebene Systemvariable sein. SYS_VAR_SET setzt target auf value. Optionale Formatspezifizierer knnen mit beiden Parametern target und value verwendet werden, um eine Byte-Abweichung anzugeben. Der optionale Parameter num_bytes gibt die Anzahl der Bytes an, die von value auf target zu kopieren sind. Wenn die Bytezahl nicht angegeben ist, wird die kleinste Dimension von value und target verwendet. Der optionale Parameter conv enthlt die Konversioninformationen. Momentan gibt es nur eine Konversionsform. Ein Wert von 1 bewirkt die Konversion eines INTEGER von ein oder zwei Byte in einen INTEGER von vier Byte. Diese Konversion ist unzulssig, wenn die Systemvariable definierte Grenzen hat oder wenn eine Abweichung von target angegeben ist.

00/1200

11-63

TAN

LISTE DER INTERNEN ROUTINEN

PDL2

Beispiele:

SYS_VAR_GET($HAND_TYPE, cur_hand) store_cur_hand := cur_hand SYS_VAR_SET($HAND_TYPE, new_hand) . . . SYS_VAR_SET($HAND_TYPE, store_cur_hand)

Interne Funktion TAN


Die interne Funktion TAN gibt die Tangens eines angegebenen Winkels zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: Beispiele: TAN (angle) REAL angle : REAL [IN] angle wird in Grad angegeben. x := TAN(1) -- x = 0.01745 x := TAN(18.9) -- x = 0.34237

Interne Funktion TRUNC


Die interne Funktion TRUNC schneidet einen REAL Wert ab, um einen INTEGER Wert zu erhalten. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: TRUNC (value) INTEGER value : REAL [IN] value ist der REAL Ausdruck, aus dem der INTEGER Wert ermittelt werden soll. Diese Funktion kann verwendet werden, um einen REAL Ausdruck in einen INTEGER Wert zu konvertieren. x := TRUNC(16.35) -- x wird 16 zugewiesen ROUTINE real_to_int (value : REAL) : INTEGER BEGIN RETURN(TRUNC(value)) END real_to_int

Beispiele:

Interne Funktion VAR_UNINIT


Die interne Funktion VAR_UNINIT testet einen Verweis der angegebenen Variablen, um zu kontrollieren, ob sie initialisiert wurde, und gibt ein BOOLEAN Ergebnis zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: Anmerkungen: VAR_UNINIT (var_ref) BOOLEAN var_ref : irgendein Verweis der Variablen [IN] var_ref ist die zu testende Variable. Es kann ein Verweis einer einzelnen Va-riable, eines Matrizenelements (ary_var[43]) oder eines Felds (fld_var.fld_name) sein. Wenn var_ref kein Wert zugewiesen wurde, wird TRUE zurckgegeben, andernfalls FALSE. Wenn eine ARRAY Variable verwendet wird, mu ein Index angegeben werden. Wird eine RECORD oder NODE Variable benutzt, mu ihr eine Felddefinition zugeordnet werden. Wenn eine PATH Variable spezifiziert wird, so wird der gesamte Zweig bezeichnet. Ein PATH wird als nicht initialisiert betrachtet, wenn er null Knotenpunkte hat. Wird ein ganzer Zweig geprft, so mu ein spezifisches Feld angegeben werden. PROGRAM testinit VAR ok : BOOLEAN count : INTEGER (0) pallet : ARRAY[4,2] OF BOOLEAN spray_pth : PATH 00/1200

Beispiele

11-64

PDL2

LISTE DER INTERNEN ROUTINEN

VEC

BEGIN -- ok es wird FALSE eingegeben, weil count initialisiert ist ok := VAR_UNINIT(count) -- ein Matrixelement testen ok := VAR_UNINIT(pallet[1, 2]) -- einen ganzen Zweig testen ok := VAR_UNINIT(spray_pth) END testinit

Interne Funktion VEC


Die interne Funktion VEC gibt einen VECTOR zurck, der aus den drei angegebenen REAL Komponenten erzeugt wird. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: VEC (x, y, z) VECTOR x : REAL y : REAL z : REAL [IN] [IN] [IN]

Anmerkungen: Beispiele:

x, y, und z geben die kartesischen Komponenten an, aus denen VECTOR erstellt wird. v1 := VEC(0, 100, 0) -- erstellt den Vektor

Interne Prozedur VOL_SPACE


Die interne Prozedur VOL_SPACE untersucht einen angegebenen Datentrger hinsichtlich statistischer Daten ber seine Benutzung. Aufrufsequenz: Parameter: VOL_SPACE (device, total, free, volume) device total free volume : : : : STRING INTEGER INTEGER STRING [IN] [OUT] [OUT] [OUT]

Anmerkungen:

device gibt den Namen der Einrichtungan, die den zu kontrollierende Datentrger enthlt. Die folgenden Einrichtungsnamen knnen verwendet werden: RD: Ein Datentrger ist ein Speichermedium in einer Einrichtung, z. B. eine Platte in einem Laufewerk. total ist auf die Gesamtanzahl der Bytes gesetzt, die auf dem Datentrger verfgbar sind. free ist auf die Gesamtanzahl der Bytes gesetzt, die auf dem Datentrger nicht belegt sind. volume ist das Etikett des Datentrgers. Ein leerer STRING gibt an, da das Volumen kein Etikett hat. VOL_SPACE(RD:, total, free, volume)

Beispiele:

Interne Prozedur WIN_ATTR


Die interne Prozedur WIN_ATTR legt die Bildschirmattribute fr ein angegebenes Fenster fest. Aufrufsequenz: Parameter: Anmerkungen: WIN_ATTR (attributes <, win_name>) attributes : INTEGER win_name : STRING [IN] [IN]

attributes ist eine INTEGER Maske, die die fr das angegebene Fenster festzulegenden Attribute angibt. Diese Attribute werden durch die folgenden, vorbesetzten Konstanten dargestellt: WIN_REVERSE -- Invertierter Bildschirm WIN_BLINK_ON -- Aktivierung Blinken WIN_BLINK_OFF -- Deaktivierung Blinken WIN_BOLD_ON -- Aktivierung Fettdruck WIN_BOLD_OFF -- Deaktivierung Fettdruck 11-65

00/1200

WIN

LISTE DER INTERNEN ROUTINEN

PDL2

WIN_CRSR_OFF WIN_CRSR_ON

-- Deaktivierung Cursor-Anzeige -- Aktivierung Cursor-Anzeige

Durch den Operator OR kann eine Sequenz von Attributen verbunden werden. Der optionale Parameter win_name kann verwendet werden, um das Fenster anzugeben, fr das die Attribute festgelegt werden sollen. Wenn kein Fenster angegeben wird, wird das durch $DFT_DV[1] bestimmte Standardfenster verwendet. win_name kann einer der folgenden Fensternamen sein, die vom System definiert werden, oder ein beliebiger, vom Anwender definierter Fenstername: TP: -- Durchlauffenster auf dem Systembildschirm TP1: -- Fenster 1 auf Anwenderbildschirm des PHG TP2: -- Fenster 2 auf Anwenderbildschirm des PHG TP3: -- Fenster 3 auf Anwenderbildschirm des PHG CRT: -- Rollfenster auf Systembildschirm des PC -- (bei aktiven PCINT Tool) CRT1: -- Fenster 1 auf Anwenderbildschirm des PC CRT2: -- Fenster 2 auf Anwenderbildschirm des PC CRT3: -- Fenster 3 auf Anwenderbildschirm des PC Beispiele: PROGRAM wattr NOHOLD VAR lun : INTEGER BEGIN OPEN FILE lun (crt2:, rw)

Fenster 2 auf dem Anwenderbildschirm

WRITE lun (This is ) WIN_ATTR(WIN_BLINK_ON, crt2:) Aktivierung Blinken WRITE lun (BLINK, NL) WIN_ATTR(WIN_BLINK_OFF, crt2:) Deaktivierung Blinken Reverse video and bold WIN_ATTR(WIN_REVERSE OR WIN_BOLD_ON, crt2:) WRITE lun (This is REVERSE and BOLD, ) WIN_ATTR(WIN_REVERSE, crt2:) Bildschirm wieder normal stellen WRITE lun (this is only BOLD., NL) WIN_ATTR(WIN_BOLD_OFF, crt2:) Deaktivierung Fettdruck CLOSE FILE lun END wattr Die Ausgabe des Beispielprogramms sieht folgendermaen aus:
Dies ist BLINKEN Dies ist INVERTIERT und FETT Dies ist nur FETT

Interne Prozedur WIN_CLEAR


Die interne Prozedur WIN_CLEAR leert ein angegebenes Fenster. Aufrufsequenz: Parameter: Anmerkungen: WIN_CLEAR (clear_spec <, win_name>) clear_spec : INTEGER win_name : STRING [IN] [IN]

clear_spec ist eine INTEGER, die den zu leerenden Fensterteil angibt. Es knnen die folgenden, vorbesetzten Konstanten verwendet werden: WIN_CLR_ALL -- leert das gesamte Fenster WIN_CLR_LINE -- leert die Zeile, auf der sich der Cursor befindet WIN_CLR_BOLN -- leert vom Cursor an bis zum Anfang der Zeile WIN_CLR_BOW -- leert vom Cursor an bis zum Anfang des Fensters WIN_CLR_EOLN -- leert vom Cursor an bis zum Ende der Zeile WIN_CLR_EOW -- leert vom Cursor an bis zum Ende des Fensters Der optionale Parameter win_name kann verwendet werden, um das zu leerende Fenster anzugeben. Wenn kein Fenster angegeben wird, wird das durch $DFT_DV[1] bestimmte Standardfenster verwendet.

11-66

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

WIN

win_name kann einer der folgenden Fensternamen sein, die vom System definiert werden oder ein beliebiger, vom Anwender definierter Fenstername: TP: -- Durchlauffenster auf dem Systembildschirm TP1: -- Fenster 1 auf Anwenderbildschirm des PHG TP2: -- Fenster 2 auf Anwenderbildschirm des PHG TP3: -- Fenster 3 auf Anwenderbildschirm des PHG CRT: -- Rollfenster auf Systembildschirm des PC -- (bei aktiven PCINT Tool) CRT1: -- Fenster 1 auf Anwenderbildschirm des PC CRT2: -- Fenster 2 auf Anwenderbildschirm des PC CRT3: -- Fenster 3 auf Anwenderbildschirm des PC Beispiele: WIN_CLEAR (WIN_CLR_ALL, TP1:)

Interne Prozedur WIN_COLOR


Die interne Prozedur WIN_COLOR legt die Vordergrund- und die Hintergrundfarben fr ein angegebenes Fenster fest. Aufrufsequenz: Parameter: WIN_COLOR (fore_spec, back_spec, all_flag <, win_name>) fore_spec back_spec all_flag win_name : : : : INTEGER INTEGER BOOLEAN STRING [IN] [IN] [IN] [IN]

Anmerkungen:

fore_spec und back_spec sind INTEGER, die die fr das angegebene Fenster festzulegenden Vordergrund- und Hintergrundfarben angeben. Es knnen die folgenden, vorbesetzten Konstanten verwendet werden: WIN_BLACK WIN_RED WIN_BLUE WIN_MAGENTA WIN_GREEN WIN_YELLOW WIN_CYAN WIN_WHITE Wenn nur eine der beiden Farben gendert werden soll, sollte fr die unverndert bleibende Farbe -1 benutzt werden. Wenn all_flag TRUE ist, betrifft die Vernderung der Farbe alle Zeichen auf dem Bildschirm. Wenn all_flag dagegen FALSE ist, werden nur die neuen Zeichen, die auf dem Bildschirm erscheinen, verndert. Der optionale Parameter win_name kann verwendet werden, um das Fenster anzugeben, fr das die Farben festgelegt werden sollen. Wenn kein Fenster angegeben wird, wird das durch $DFT_DV[1] bestimmte Standardfenster verwendet. win_name kann einer der folgenden Fensternamen sein, die vom System definiert werden oder ein beliebiger, vom Anwender definierter Fenstername: TP: -- Durchlauffenster auf dem Systembildschirm TP1: -- Fenster 1 auf Anwenderbildschirm des PHG TP2: -- Fenster 2 auf Anwenderbildschirm des PHG TP3: -- Fenster 3 auf Anwenderbildschirm des PHG CRT: -- Rollfenster auf Systembildschirm des PC -- (bei aktiven PCINT Tool) CRT1: -- Fenster 1 auf Anwenderbildschirm des PC CRT2: -- Fenster 2 auf Anwenderbildschirm des PC CRT3: -- Fenster 3 auf Anwenderbildschirm des PC

Beispiele:

PROGRAM wcolor NOHOLD VAR i : INTEGER 11-67

00/1200

WIN

LISTE DER INTERNEN ROUTINEN

PDL2

lun : INTEGER BEGIN OPEN FILE lun (CRT2:, rw)

--

Fenster 2 auf dem Anwenderbildschirm (CRT)

WRITE lun (Dies ist) WIN_COLOR(WIN_WHITE, WIN_BLUE, FALSE, CRT2:) WRITE lun (WEISS auf BLUE, NL) WIN_COLOR(WIN_WHITE, WIN_BLACK, FALSE, CRT2:) WRITE lun (Dies ist) WIN_COLOR(WIN_BLACK, WIN_RED, FALSE, CRT2:) WRITE lun (SCHWARZ auf ROT, NL) FOR i := 1 TO 3 DO WRITE lun (Immer noch SCHWARZ auf ROT, NL) ENDFOR DELAY 5000 -- ndert die Farbe des ganzen Fensters WRITE lun (Jetzt ndert sich das ganze Fenster in WEISS auf SCHWARZ, NL) WIN_COLOR(WIN_WHITE, WIN_BLACK, TRUE, CRT2:) CLOSE FILE lun END wcolor

Interne Prozedur WIN_CREATE


Die interne Prozedur WIN_CREATE erstellt ein vom Anwender definiertes Fenster. Aufrufsequenz: Parameter: WIN_CREATE (win_name, dev_num, attributes, num_rows) win_name dev_num attributes num_rows : : : : STRING INTEGER INTEGER INTEGER [IN] [IN] [IN] [IN]

Anmerkungen:

win_name ist ein STRING, der zur Bezeichnung des Fensters verwendet wird. Er folgt der gleichen Bezeichnungslogik, wie bei Fenstern, die vom System definiert werden ('xxxx'). win_name kann in anderen internen Routinen verwendet werden, die einen Spezifizierungsparameter fr den Fensternamen brauchen. dev_num gibt die Einrichtung an, auf der das spezifizierte Fenster angezeigt werden soll. Die Einrichtungen werden durch die folgenden, vorbesetzten Konstanten dargestellt: PDV_TP -- Programmierhandgert PDV_CRT -- PC Bildschirm bei aktivem PCINT Tool attributes ist eine INTEGER Maske, die die festen Attribute angibt, die fr das spezifizierte Fenster festgelegt werden sollen. Diese Attribute werden durch die folgenden, vorbesetzten Konstanten dargestellt: WIN_SCROLL -- Ausgabe in das Rollfenster WIN_WRAP -- Zeilen, die lnger sind, als der des Bildschirms werden auf die nchste Zeile geschoben. Durch den Operator OR kann eine Sequenz von Attributen verbunden werden. Null gibt an, da weder Durchrollen noch Umlaufen verwendet werden soll. Andere Attribute knnen durch die internen Routinen WIN_ATTR und WIN_COLOR festgelegt werden. Die Standardattribute fr ein eben erstelltes Fenster sind folgende: WIN_WHITE -- Vordergrundfarbe WIN_BLACK -- Hintergrundfarbe WIN_BOLD_OFF -- Fettdruck deaktiviert WIN_BLINK_OFF -- Blinken deaktiviert WIN_CRSR_ON -- Anzeige Cursor num_rows gibt die Anzahl der Zeilen an, die von dem Fenster besetzt werden. Die fr PDV CRT erstellten Fenster drfen nicht mehr als 25 Zeilen haben und die fr PDV_TP nicht mehr als 16. Die erstellten Fenster werden nicht automatisch angezeigt. Fr die Anzeige knnen die internen Routinen WIN_DISPLAY und WIN_POPUP verwendet werden.

11-68

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

WIN

Der Programmierer ist fr die Verwaltung der vom Anwender definierten Fenster verantwortlich, einschlielich der Leerung der Fenster, wenn das Programm endet. Bevor in einem vom Anwender definierten Fenster gelesen oder geschrieben wird, mu eine LUN erffnet werden. -- Dies ist Teil eines lngeren Beispiels im Anhang -- "Programmbeispiele". --- Anlegen eines neuer Anwender-definierten Fenster fr -- Anwenderbildschirme WIN_CREATE(USR1:, PDV_CRT, WIN_SCROLL OR WIN_WRAP, 25) WIN_CREATE(POP1:, PDV_CRT, WIN_SCROLL OR WIN_WRAP, 10) -- Einstellen von Farbe und Attributen fr Anwenderfenster WIN_COLOR(WIN_WHITE, WIN_BLUE, TRUE, USR1:) WIN_ATTR(WIN_BOLD_ON, USR1:) WIN_COLOR(WIN_BLACK, WIN_RED, TRUE, POP1:) -- System-definierte Fenster vom Anwenderbildschirm entfernen WIN_REMOVE(CRT1:) WIN_REMOVE(CRT2:) WIN_REMOVE(CRT3:) WIN_DISPLAY(USR1:, SCRN_USER, 0)

Beispiele:

Interne Prozedur WIN_DEL


Die interne Prozedur WIN_DEL lscht das angegebene, vom Anwender definierte Fenster. Aufrufsequenz: Parameter: Anmerkungen: WIN_DEL (win_name) win_name : STRING [IN] win_name kann ein beliebiger, vom Anwender definierter Fenstername sein (erstellt durch die interne Routine WIN_CREATE). Ein Fenster kann erst dann gelscht werden, wenn es vom Bildschirm entfernt wurde. Wenn ein Fenster gelscht wird, kann sein Name nicht in internen Routinen verwendet werden, die sich auf Fenster beziehen. Wenn ein Fenster gelscht wird, bevor alle in dem Fenster geffneten LUNs geschlossen wurden, wird ein Fehler ausgegeben, und das Fenster mu freigegeben werden. Die vom System definierten Fenster knnen nicht gelscht werden. Es ist unzulssig, win_name zu lschen, wenn das Fenster des alphabetischen Mens ("TP0") ein Popup Fenster in win_name ist. WIN_DEL (menu:) -- Die folgenden Angaben sind Teil eines Beispiels aus -- dem Anhang "Programmbeispiele". --- Popup Fenster in Fenster USR1 WIN_POPUP(POP1:, USR1:) -- eine LUN in Fenster POP1 ffnen OPEN FILE lun (POP1:, rw) FOR i := 1 TO 10 DO WRITE lun (i, : Dies ist ein Beispiel fr ein Popup Fenster, NL) ENDFOR CLOSE FILE lun -- dem Anwender das Lesen der Meldung erlauben DELAY 5000 Fenster POP1 aus dem Anwenderbildschirm entfernen und lschen WIN_REMOVE(POP1:) WIN_DEL(POP1:)

Beispiele:

00/1200

11-69

WIN

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur WIN_DISPLAY


Die interne Prozedur WIN_DISPLAY zeigt das angegebene Fenster als ein festes Fenster auf dem angegebenen Bildschirm in den spezifizierten Zeilen an. Aufrufsequenz: Parameter: WIN_DISPLAY (win_name, scrn_num, row_num) win_name : STRING scrn_num : INTEGER row_num : INTEGER [IN] [IN] [IN]

Anmerkungen:

win_name kann einer der folgenden Fensternamen sein, die vom System definiert werden oder ein beliebiger, vom Anwender definierter Fenstername: TP: -- Durchlauffenster auf dem Systembildschirm TP1: -- Fenster 1 auf Anwenderbildschirm des PHG TP2: -- Fenster 2 auf Anwenderbildschirm des PHG TP3: -- Fenster 3 auf Anwenderbildschirm des PHG CRT: -- Rollfenster auf Systembildschirm des PC -- (bei aktiven PCINT Tool) CRT1: -- Fenster 1 auf Anwenderbildschirm des PC CRT2: -- Fenster 2 auf Anwenderbildschirm des PC CRT3: -- Fenster 3 auf Anwenderbildschirm des PC scrn_num gibt den Bildschirm (vom Anwender oder System erstellt) an, auf dem das Fenster angezeigt werden soll. Die Bildschirme werden durch die folgenden, vorbesetzten Konstanten dargestellt: SCRN_USER Anwenderbildschirm SCRN_SYS Systembildschirm Das Fenster wird auf der Einrichtung angezeigt, fr die es erstellt worden ist: PDV_TP oder PDV_CRT. row_num gibt die Zeilennummer an, wo das Fenster beginnen soll. Die durch row_num erzeugte berlagerung der Fenster oder fehlender Platz fr das Fenster auf dem Bildschirm werden als Fehler betrachtet. Ein Fenster kann nur einmal auf demselben Bildschirm angezeigt werden. Es kann aber auf mehreren Bildschirmen gleichzeitig angezeigt werden. WIN_DISPLAY (menu:, SCRN_USER, 1) -- Anlegen eines neuer Anwender-definierten Fenster auf dem Anwenderbildschirm Create new user defined windows for user screen WIN_CREATE(USR1:, PDV_CRT, WIN_SCROLL OR WIN_WRAP, 25) WIN_CREATE(POP1:, PDV_CRT, WIN_SCROLL OR WIN_WRAP, 10) -- Farbe und Attribute fr die Anwenderfenster angeben WIN_COLOR(WIN_WHITE, WIN_BLUE, TRUE, USR1:) WIN_ATTR(WIN_BOLD_ON, USR1:) WIN_COLOR(WIN_BLACK, WIN_RED, TRUE, POP1:) -- Die vom System definierten Fenster vom Anwenderbildschirm entfernen. WIN_REMOVE(CRT1:) WIN_REMOVE(CRT2:) WIN_REMOVE(CRT3:) -- Das soeben erstellte Fenster anzeigen. WIN_DISPLAY(USR1:, SCRN_USER, 0)

Beispiele:

Interne Prozedur WIN_GET_CRSR


Die interne Prozedur WIN_GET_CRSR ergibt die Zeile und die Spalte des Cursors in dem angegebenen Fenster. Aufrufsequenz: Parameter: WIN_GET_CRSR (row, col <, win_name>) row : INTEGER col : INTEGER win_name : STRING [OUT] [OUT] [IN] 00/1200

11-70

PDL2

LISTE DER INTERNEN ROUTINEN

WIN

Anmerkungen:

row und col geben die Zeile und die Spalte an, in der sich der Cursor im angegebenen Fenster befindet. Die Home-Position (obere linke Ecke) in einem Fenster ist (0,0). Der optionale Parameter win_name kann verwendet werden, um das Fenster anzugeben. Wenn kein Fenster angegeben wird, wird das durch $DFT_DV[1] bestimmte Standardfenster verwendet. win_name kann einer der folgenden Fensternamen sein, die vom System definiert werden, oder ein beliebiger, vom Anwender definierter Fenstername: TP: -- Durchlauffenster auf dem Systembildschirm TP1: -- Fenster 1 auf Anwenderbildschirm des PHG TP2: -- Fenster 2 auf Anwenderbildschirm des PHG TP3: -- Fenster 3 auf Anwenderbildschirm des PHG CRT: -- Rollfenster auf Systembildschirm des PC -- (bei aktiven PCINT Tool) CRT1: -- Fenster 1 auf Anwenderbildschirm des PC CRT2: -- Fenster 2 auf Anwenderbildschirm des PC CRT3: -- Fenster 3 auf Anwenderbildschirm des PC

Beispiele:

OPEN FILE crt1_lun (CRT1:, RW) row := 0 col := 5 WIN_SET_CRSR (row, col, CRT1:) -- setzt auf 0,5 WHILE row <= max_row DO WRITE (msg_str) row := row + 1 col := 5 WIN_SET_CRSR (row, col, CRT1:) WIN_GET_CRSR (row, col, CRT1:) ENDWHILE

Interne Funktion WIN_LINE


Die interne Funktion WIN_LINE gibt die Zeichenfolge zurck, die z.Z. an der angegebenen Stelle in dem spezifizierten Fenster angezeigt wird. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: WIN_LINE <(row <, column <, num_chars <, win_name)>>>> STRING row col num_chars win_name : : : : INTEGER INTEGER INTEGER STRING [IN] [IN] [IN] [IN]

Anmerkungen:

row bezeichnet die Zeile innerhalb win_name. Fehlt eine gltige Angabe oder hat row einen negativen Wert, so wird die derzeitige Zeile genommen. col bezeichnet die Spalte innerhalb von win_name. Fehlt eine gltige Angabe oder hat col einen negativen Wert, so wird die derzeitige Spalte genommen. num_chars gibt die Zahl von Zeichen an, die zurckgegeben werden sollen. Fehlt eine gltige Angabe oder hat num_chars einen negativen Wert, so erhlt man die ganze Zeile. win_name ist der Name des Fensters, aus dem die Zeichen geholt werden sollen. Ist kein Fenster angegeben, so wird das Standardfenster genommen. PROGRAM winline NOHOLD VAR gs_line : ARRAY[20] OF STRING[80] vi_lun : INTEGER BEGIN OPEN FILE vi_lun (CRT:, w) . . . -- gibt die Zeile 4 zurck gs_line := WIN_LINE(4, 0, -1, CRT:) . . . END winline 11-71

Beispiele:

00/1200

WIN

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur WIN_LOAD


Die interne Prozedur WIN_LOAD ldt den Inhalt der gespeicherten Fensterdatei in das angegebene Fenster. Bei Benutzen der internen Routine WIN_LOAD zum Laden eines Fensters aus einer Datei auf den PC Bildschirm (Emulation der C3G Konsole durch das Tool PCINT) muss die Datei von einem Tool (WIN_SAVE) gespeichert worden sein, das unter der CRT Emulation luft. Aufrufsequenz: Parameter: WIN_LOAD (file_name, win_name <, start_row <, start_col>>) file_name win_name start_row start_col : : : : STRING STRING INTEGER INTEGER [IN] [IN] [IN] [IN]

Anmerkungen:

file_name ist der Name der gespeicherten Fensterdatei, die durch den internen WIN_SAVE erstellt wurde. Der gesamte Inhalt der Datei mu in das durch win_name angegebene Fenster geladen werden. win_name ist der Name des Fensters, in das der Inhalt der gespeicherten Fensterdatei geladen werden soll. start_row ist die Position der Anfangszeile innerhalb von win_name. Wenn start_row nicht angegeben ist, wird die Zeile 0 verwendet. Wenn start_row -1 ist, erhlt man die Position der Anfangszeile aus file_name, daher wird der Inhalt in dieselben Zeilen geladen, von denen er gespeichert worden war. Wenn start_row kleiner als -1 oder grer als die Anzahl der Zeilen in win_name -1 ist (die erste Zeile ist 0), entsteht eine Fehlersituation. Da der gesamte Inhalt von file_name geladen wird, erhlt man die Anzahl der zu ladenden Zeilen aus der Datei. Wenn sie grer ist als die Anzahl der Zeilen in win_name start_row, entsteht eine Fehlersituation. start_col ist die Position der Anfangsspalte innerhalb von win_name. Wenn start_col nicht angegeben ist, wird die Spalte 0 verwendet. Wenn start_col -1 ist, ergibt sich die Position der Ausgangsspalte aus file_name, daher wird der Inhalt in dieselben Spalten geladen, aus denen er gespeichert worden war. Wenn start_col kleiner als -1 oder grer als die Anzahl der Spalten in win_name -1 ist (die erste Spalte ist 0), entsteht eine Fehlersituation. Da der gesamte Inhalt von file_name geladen wird, erhlt man die Anzahl der zu ladenden Spalten aus der Datei. Wenn sie grer als die Anzahl der Spalten in win_name - start_col ist, entsteht eine Fehlersituation. PROGRAM winsl NOHOLD BEGIN -- Speichert 5 Zeilen und 50 Spalten; Beginn bei Zeile 1 und Spalte 5 WIN_SAVE(win1.win, CRT:, 1, 5, 5, 50) WIN_CLEAR(WIN_CLR_ALL, CRT2:) -- das gespeicherte Fenster auf CRT2:in Zeile 1 Spalte 5 anzeigen WIN_LOAD(win1.win, CRT2:, -1, -1) WIN_CLEAR(WIN_CLR_ALL, CRT2:) -- das gespeicherte Fenster auf CRT2:in Zeile 0 Spalte 5 anzeigen WIN_LOAD(win1.win, CRT2:, 0, -1) WIN_CLEAR(WIN_CLR_ALL, CRT2:) --das gespeicherte Fenster auf CRT2:in Zeile 10 Spalte 0 anzeigen WIN_LOAD(win1.win, CRT2:, 10, 0) WIN_CLEAR(WIN_CLR_ALL, CRT2:) -- das gespeicherte Fenster auf CRT2:in Zeile 0 Spalte 0 anzeigen WIN_LOAD(win1.win, CRT2:) END winsl

Beispiele:

11-72

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

WIN

Interne Prozedur WIN_POPUP


Die interne Prozedur WIN_POPUP zeigt das angegebene Fenster als Popup Fenster im oberen Teil des angegebenen festen Fensters an. Aufrufsequenz: Parameter: WIN_POPUP (pop_win_name, fix_win_name <, scrn_num>) pop_win_name : STRING fix_win_name : STRING scrn_num : INTEGER [IN] [IN] [IN]

Anmerkungen:

pop_win_name berlagert den oberen Teil von fix_win_name. pop_win_name kann einer der folgenden Fensternamen, die vom System definiert werden, oder ein beliebiger, vom Anwender definierter Fenstername sein: TP: -- Durchlauffenster auf dem Systembildschirm TP1: -- Fenster 1 auf Anwenderbildschirm des PHG TP2: -- Fenster 2 auf Anwenderbildschirm des PHG TP3: -- Fenster 3 auf Anwenderbildschirm des PHG CRT: -- Rollfenster auf Systembildschirm des PC -- (bei aktiven PCINT Tool) CRT1: -- Fenster 1 auf Anwenderbildschirm des PC CRT2: -- Fenster 2 auf Anwenderbildschirm des PC CRT3: -- Fenster 3 auf Anwenderbildschirm des PC fix_win_name kann der Name eines beliebigen Fensters sein, das als feste Fenster angezeigt wird. Wenn mehrere Popup Fenster im oberen Teil eines einzelnen festen Fensters angezeigt werden, erscheinen sie untereinander. Das erste Fenster z. B. beginnt auf der Zeile 0 von fix_win_name, und das folgende beginnt auf der ersten verfgbaren Zeile nach dem ersten Popup Fenster. Wenn pop_win_name nicht in den verbleibenden Raum von fix_win_name pat, entsteht eine Fehlersituation. Der optionale Parameter scrn_num kann verwendet werden, um den Bildschirm anzugeben, auf dem das Popup Fenster angezeigt werden soll. scrn_num kann eine vom System oder vom Anwender erstellte Anzeige bezeichnen. Die vom System erstellten Bildschirme werden durch die folgenden vorbesetzten Konstanten definiert: SCRN_USER Anwenderbildschirm SCRN_SYS Systembildschirm Ein Parameter scrn_num ist nur dann notwendig, wenn fix_win_name auf mehreren Bildschirmen angezeigt werden soll. WIN_POPUP (emsg:, menu:) -- Dies ist Teil eines lngeren Beispiels im Anhang -- "Programmbeispiele". --- Popup Fenster im Fenster USR1 WIN_POPUP(POP1:, USR1:) -- LUN im Fenster POP1 erffnen OPEN FILE lun (POP1:, rw) FOR i := 1 TO 10 DO WRITE lun (i, : Dies ist ein Beispiel fr ein Popup Fenster, NL) ENDFOR CLOSE FILE lun -- den Anwender die Meldung lesen lassen DELAY 5000 -- Fenster POP1 vom Anwenderbildschirm entfernen und lschen WIN_REMOVE(POP1:) WIN_DEL(POP1:)

Beispiele:

00/1200

11-73

WIN

LISTE DER INTERNEN ROUTINEN

PDL2

Interne Prozedur WIN_REMOVE


Die interne Prozedur WIN_REMOVE entfernt das angegebene Fenster vom Bildschirm. Aufrufsequenz: Parameter: Anmerkungen: WIN_REMOVE (win_name <, scrn_num>) win_name : STRING scrn_num : INTEGER [IN] [IN]

win_name kann einer der folgenden Namen von systemdefinierten Fenstern, ein beliebiger Name eines anwenderdefinierten Fensters, das z.Z. angezeigt wird, oder ein Popup Fenster sein: TP: -- Durchlauffenster auf dem Systembildschirm TP1: -- Fenster 1 auf Anwenderbildschirm des PHG TP2: -- Fenster 2 auf Anwenderbildschirm des PHG TP3: -- Fenster 3 auf Anwenderbildschirm des PHG CRT: -- Rollfenster auf Systembildschirm des PC -- (bei aktiven PCINT Tool) CRT1: -- Fenster 1 auf Anwenderbildschirm des PC CRT2: -- Fenster 2 auf Anwenderbildschirm des PC CRT3: -- Fenster 3 auf Anwenderbildschirm des PC Wenn ein festes Fenster entfernt wird, erscheint der davon besetzte Bildschirmteil schwarz. Auerdem werden alle in diesem Festfenster angezeigten Popup Fenster entfernt. Wenn ein Popup Fenster entfernt wird, wird der versteckte Teil des festen Fensters wieder sichtbar. Der optionale Parameter scrn_num kann verwendet werden, um den Bildschirm anzugeben, aus dem das Fenster entfernt werden soll. Es kann ein vom System oder vom Anwender erstellter Bildschirm spezifiziert werden. Die vom System erstellten Bildschirme werden durch die folgenden vorbesetzten Konstanten definiert: SCRN_USER -- Anwenderbildschirm SCRN_SYS -- Systembildschirm Der Parameter scrn_num ist nur dann notwendig, wenn win_name auf mehreren Bildschirmen angezeigt wird. WIN_REMOVE (menu:) -- Dies ist Teil eines lngeren Beispiels im Anhang -- "Programmbeispiele".--- Popup Fenster im Fenster USR1 WIN_POPUP(POP1:, USR1:) -- LUN im Fenster POP1 erffnen OPEN FILE lun (POP1:, rw) FOR i := 1 TO 10 DO WRITE lun (i, : Dies ist ein Beispiel fr ein Popup Fenster, NL) ENDFOR CLOSE FILE lun -- den Anwender die Meldung lesen lassen DELAY 5000 -- Fenster POP1 vom Anwenderbildschirm entfernen und lschen WIN_REMOVE(POP1:) WIN_DEL(POP1:)

Beispiele:

Interne Prozedur WIN_SAVE


Die interne Prozedur WIN_SAVE sichert ein Fenster ganz oder teilweise in einer gespeicherten Fensterdatei ab. Bei Benutzen von WIN_SAVE zum Speichern des Inhalts eines auf dem PC Bildschirm angezeigten Fensters (bei aktiven PCINT Tool), ist die angelegte Datei nur mit C3G Systemen kompatibel, die das Tool PCINT zum Emulieren der C3G Konsole benutzen. Aufrufsequenz: WIN_SAVE ( file_name, win_name <, start_row <, start_col <, num_rows <, num_cols <, output_row <, output_col>>>>>> ) 00/1200

11-74

PDL2

LISTE DER INTERNEN ROUTINEN

WIN

Parameter:

file_name win_name start_row start_col num_rows num_cols output_row output_col

: : : : : : : :

STRING STRING INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER

[IN] [IN] [IN] [IN] [IN] [IN] [IN] [IN]

Anmerkungen:

file_name ist der Name der gespeicherten Fensterdatei, der verwendet wird, um den Inhalt des Fensters zu speichern. win_name ist der Name des Fensters, das in der gespeicherten Fensterdatei gespeichert werden soll. start_row ist die Position der Ausgangszeile in dem Fenster. Wenn dieser Parameter nicht angegeben wird, wird die erste Zeile des Fensters (Zeile 0) verwendet. Wenn start_row kleiner als 0 oder grer als die letzte Zeile von win_name ist, entsteht eine Fehlersituation. start_col ist die Position der Ausgangsspalte in dem Fenster. Wenn dieser Parameter nicht spezifiziert wird, wird die Spalte 0 verwendet. Wenn start_col kleiner als 0 oder grer als die letzte Spalte von win_name ist, entsteht eine Fehlersituation. num_row ist die Anzahl der Zeilen, die aus dem Fenster in der gespeicherten Fensterdatei gesichert werden sollen. Wenn dieser Parameter nicht angegeben wird, werden alle Zeilen gespeichert. Wenn num_row kleiner als 1 oder grer als die Anzahl der Zeilen von win_name-start_row ist, entsteht eine Fehlersituation. num_cols ist die Anzahl der Spalten, die aus dem Fenster in der gespeicherten Fensterdatei gesichert werden sollen. Wenn dieser Parameter nicht angegeben wird, werden alle Spalten gespeichert. Wenn num_cols kleiner als 1 oder grer als die Anzahl der Spalten von win_name-start_col ist, entsteht eine Fehlersituation. output_row ist die erste Zeile auf dem Ausgabeschirm, wenn die Ausgabeeinrichtung ein Fenster ist. output_col ist die erste Spalte auf dem Ausgabeschirm, wenn die Ausgabeeinrichtung ein Fenster ist. PROGRAM winsl NOHOLD CONST ks_dev = CRT2: Demonstrationsfenster. VAR vi_i, vi_lun : INTEGER BEGIN -- Beginn mit leerem Fenster WIN_CLEAR(WIN_CLR_ALL, ks_dev) WIN_COLOR(WIN_RED, WIN_BLACK, FALSE, ks_dev) OPEN FILE vi_lun (CRT2:, w) -- Beginn Zeichnung des Quadrats in der Ecke WIN_SET_CRSR(0, 0, ks_dev) WRITE vi_lun (\201) FOR vi_i := 1 TO 10 DO WRITE vi_lun (\205) ENDFOR WRITE vi_lun (\187) -- Zwischenlinien des Quadrats FOR vi_i := 1 TO 5 DO WIN_COLOR(WIN_RED, WIN_BLACK, FALSE, ks_dev) WIN_SET_CRSR(vi_i, 0, ks_dev) WRITE vi_lun (\186) WIN_COLOR(1, WIN_GREEN, FALSE, ks_dev) WRITE vi_lun ( ::10) WIN_COLOR(WIN_RED, WIN_BLACK, FALSE, ks_dev) WRITE vi_lun (\186) ENDFOR -- Untere Linie des Quadrats WIN_SET_CRSR(5, 0, ks_dev) WRITE vi_lun (\200) FOR vi_i := 1 TO 10 DO WRITE vi_lun (\205) 11-75

Beispiele:

00/1200

WIN

LISTE DER INTERNEN ROUTINEN

PDL2

ENDFOR WRITE vi_lun (\188) -- Speicherung der Konfiguration in zwei Dateien WIN_SAVE(winex.win, ks_dev, 0, 0, 6, 12) CYCLE WIN_LOAD(winex.win, ks_dev, $CYCLE MOD 15, $CYCLE MOD 69) DELAY 150 IF $CYCLE MOD 69 = 0 THEN WIN_COLOR($CYCLE MOD 8, $CYCLE MOD 8 + 1, TRUE, ks_dev) ENDIF END winsl

Interne Prozedur WIN_SEL


Die interne Prozedur WIN_SEL whlt das spezifizierte Anwenderfenster aus, das fr die Datenausgabe verwendet werden soll. Aufrufsequenz: Parameter: Anmerkungen: WIN_SEL (win_name <, scrn_num>) win_name : STRING scrn_num : INTEGER [IN] [IN]

win_name kann ein beliebiger, vom Anwender definierter Fenstername sein (das durch die interne Routine WIN_CREATE erstellt wurde). scrn_num bezeichnet den Bildschirm, auf dem das Fenster ausgegeben wird: es kann sich um einen vom Anwender oder vom System erstellten Bildschirm handeln. Wird keiner angegeben, so wird der vom System erstellte Bildschirm (SCRN_USER) genommen. WIN_SEL (menu:) OPEN FILE lun (CRT2:, RW) WRITE lun (Enter value: ) WIN_SEL(CRT2:) -- auf SCRN_USER READ lun (val)

Beispiele:

Interne Prozedur WIN_SET_CRSR


Die interne Prozedur WIN_SET_CRSR setzt den Cursor auf die angegebene Zeile und Spalte des Fensters. Aufrufsequenz: Parameter: WIN_SET_CRSR (row, col <, win_name>) row : INTEGER col : INTEGER win_name : STRING [IN] [IN] [IN]

Anmerkungen:

row und col geben die Zeile und die Spalte an, in die der Cursor positioniert werden soll. Die Home-Position (obere linke Ecke) in einem Fenster ist (0,0). Der optionale Parameter win_name kann zur Spezifizierung des Fensters verwendet werden. Wenn kein Fenster angegeben wird, wird das durch $DFT_DV[1] bestimmte Standardfenster verwendet. win_name kann einer der folgenden, vom System erzeugten Fensternamen oder ein beliebiger, vom Anwender definierter Fenstername sein. TP: -- Durchlauffenster auf dem Systembildschirm TP1: -- Fenster 1 auf Anwenderbildschirm des PHG TP2: -- Fenster 2 auf Anwenderbildschirm des PHG TP3: -- Fenster 3 auf Anwenderbildschirm des PHG CRT: -- Rollfenster auf Systembildschirm des PC -- (bei aktiven PCINT Tool) CRT1: -- Fenster 1 auf Anwenderbildschirm des PC CRT2: -- Fenster 2 auf Anwenderbildschirm des PC CRT3: -- Fenster 3 auf Anwenderbildschirm des PC

11-76

00/1200

PDL2

LISTE DER INTERNEN ROUTINEN

WIN

Beispiele:

OPEN FILE crt1_lun (CRT1:, RW) row := 0 col := 5 WIN_SET_CRSR (row, col, CRT1:) -- setzt auf 0,5 an WHILE row <= max_row DO WRITE (msg_str) row := row + 1 col := 5 WIN_SET_CRSR (row, col, CRT1:) WIN_GET_CRSR (row, col, CRT1:) ENDWHILE

Interne Prozedur WIN_SIZE


Die interne Prozedur WIN_SIZE wird benutzt, um die Dimensionen eines Fensters dynamisch den Gegebenheiten des Bildschirms anzupassen, auf dem es ausgegeben werden soll. Das Fenster muss in der grten Gre angelegt worden sein, in der es je angezeigt werden soll. Bei Vergrern des Fensters muss gengend Platz auf dem Bildschirm verfgbar sein, sonst wird es abgeschnitten. Aufrufsequenz: Parameter: Anmerkungen: WIN_SIZE (<window_name>, <number_of_rows>) window_name : number_of_rows: STRING INTEGER [IN] [IN]

window_name kann einer der folgenden System-definierten Fenstername oder ein beliebiger Anwender-definierter Name sein: TP: -- Durchlauffenster auf dem Systembildschirm TP1: -- Fenster 1 auf Anwenderbildschirm des PHG TP2: -- Fenster 2 auf Anwenderbildschirm des PHG TP3: -- Fenster 3 auf Anwenderbildschirm des PHG CRT: -- Rollfenster auf Systembildschirm des PC -- (bei aktiven PCINT Tool) CRT1: -- Fenster 1 auf Anwenderbildschirm des PC CRT2: -- Fenster 2 auf Anwenderbildschirm des PC CRT3: -- Fenster 3 auf Anwenderbildschirm des PC number_of_rows ist die Anzahl von Zeilen, die das spezifierte Fenster belegen muss. WIN_CREATE(win_name, PDV_TP, WIN_SCROLL, win_original_size) IF screen_size <win_original_size THEN WIN_SIZE(win_name, win_reduced_size) ENDIF WIN_POPUP(win_name, TP2:)

Beispiele:

Interne Funktion WIN_STATE


Die interne Funktion WIN_STATE gibt den aktuellen Zustand des angegebenen Fensters zurck. Aufrufsequenz: Datenklasse des Rckgabewerts: Parameter: WIN_STATE (win_name <, scrn_num <, parent <, num_rows>>>) INTEGER win_name scrn_num parent num_rows : : : : STRING INTEGER STRING INTEGER [IN] [IN] [OUT] [OUT]

Anmerkungen:

win_name kann einer der folgenden Fensternamen sein, die vom System definiert werden, oder ein beliebiger, vom Anwender definierter Fenstername: TP: -- Durchlauffenster auf dem Systembildschirm TP1: -- Fenster 1 auf Anwenderbildschirm des PHG TP2: -- Fenster 2 auf Anwenderbildschirm des PHG TP3: -- Fenster 3 auf Anwenderbildschirm des PHG

00/1200

11-77

WIN

LISTE DER INTERNEN ROUTINEN

PDL2

CRT: CRT1: CRT2: CRT3:

------

Rollfenster auf Systembildschirm (bei aktiven PCINT Tool) Fenster 1 auf Anwenderbildschirm Fenster 2 auf Anwenderbildschirm Fenster 3 auf Anwenderbildschirm

des PC des PC des PC des PC

Der ausgegebene Wert ist eine INTEGER Maske, die den aktuellen Zustand des Fensters angibt. Die Bedeutung von INTEGER ist folgende: Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Bits 8-10 Bits 11-13 Bit 14 Bit 15 Bit 16 Bit 17 Bit 18 Bit 19 Bits 20-21 Bit 22 Bit 23 Bit 24 Bits 25-32 : : : : : : : : : : : : : : : : : : : : Fenster auf SCRN_SYS wiedergegeben Fenster als Popup auf SCRN_SYS Fenster auf SCRN_USER wiedergegeben Fenster als Popup auf SCRN_USER auf dem Fenster geffnete LUNs Fenster reserviert Fr ein Programm Fenster definiert Fr CRT die Vordergrundfarbe die Hintergrundfarbe auf dem durch das Argument SCRN_NUM angeben Bildschirm wiedergegebenes Fenster auf dem durch das Argument SCRN_NUM angeben Bildschirm als Popup wiedergegebenes Fenster nicht benutzt Fenster gespeichert Eingabe in Fenster erlaubt Ausgabe luft im Fenster durch nicht benutzt Cursor ausgeschaltet nicht benutzt Ausgabe luft im Fenster um nicht benutzt

scrn_num bezeichnet den Schirm, auf dem das Fenster angezeigt werden soll. Dieser kann vom Anwender oder vom System erstellt sein. Vom System erstellte Schirme werden durch die folgenden vorbesetzten Konstanten definiert: SCRN_USER -- Anwender Bildschirm SCRN_SYS -- Systembildschirm parent wird mit dem Namen des Fensters angegeben, in dem win_name erscheint (wenn es kein festes Fenster ist). num_rows wird auf der Grundlage der in win_name enthaltenen Zeilen eingegeben. Beispiele: -- Routine fr das Schreiben des Fensterzustands -- Die folgenden Angaben sind Teil eines Beispiels aus dem Anhang C ROUTINE write_state(win : STRING; scrn : INTEGER) VAR state : INTEGER parent : STRING[6] nrows : INTEGER BEGIN state := WIN_STATE(win, scrn, parent, nrows) -- Write window name and state value WRITE (win::5, state::9::2) -- Einrichtung IF state AND ws_crt = ws_crt THEN WRITE ( CRT) ELSE WRITE ( TP) ENDIF ... -- Gibt es ein Ursprungsfenster? 00/1200

11-78

PDL2

LISTE DER INTERNEN ROUTINEN

WIN

IF NOT VAR_UNINIT(parent) THEN WRITE (parent::6) ELSE WRITE ( ::6) ENDIF -- Anzahl der Zeilen WRITE (nrows::3) -- Datei geffnet? IF state AND ws_fopen = ws_fopen THEN WRITE (X::3) ELSE WRITE ( ::3) ENDIF ... IF state AND ws_nocrsr = ws_nocrsr THEN WRITE (X::3) ELSE WRITE ( ::3) ENDIF WRITE (NL) END write_state

00/1200

11-79

WIN

LISTE DER INTERNEN ROUTINEN

PDL2

Diese Seite wurde absichtlich leer gelassen

11-80

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN

Handbuch fr Programmiersprache

1 2 3 4 5 6 7 8 9 10 11

LISTE DER VORBESETZTEN VARIABLEN


Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

12
A B C D Index

LISTE DER VORBESETZTEN VARIABLEN

Handbuch fr Programmiersprache

PDL2

Diese Seite wurde absichtlich leer gelassen

PDL2

LISTE DER VORBESETZTEN VARIABLEN

LISTE DER VORBESETZTEN VARIABLEN


Dieses Kapitel listet die vorbesetzten PDL2 Variablen in alphabetischer Reihenfolge auf und gibt fr jede die folgenden Informationen an: Speicherkategorie; Ladekategorie; Datenklasse; Max. und min. Grenze ("none" bedeutet keine Grenze); Attribute ("none" bedeutet kein Sonderattribut); Softwareversion; Beschreibung.

Die vorbesetzten Variablen werden durch das Dollarzeichen ($) gekennzeichnet, damit man sie leichter von den vom Anwender definierten Variablen unterscheiden kann.

SPEICHERKATEGORIEN
Die vorbesetzten Variablen gehren einer der folgenden Speicherkategorien an, die den Punkt anzeigen, an dem der Wert gesetzt ist: Port; statisch; stack; field.

Die PORT Variablen beziehen sich auf die E/As und auf den gemeinsamen Speicher von PDL2 und SPS Programmen, wie im Kapitel Matrizen fr Ein-/Ausgabeports beschrieben. Die STATIC vorbesetzten Variablen werden von allen PDL2 Programmen gemeinsam benutzt. Die STACK vorbesetzten Variablen sind fr jedes Programm spezifisch. Vorbesetzte Feldvariablen sind vorbesetzte Felder von Ursprungsvariablen. Fr jede Feldvariable wird die Ursprungsvariable angefhrt. Auf Feldvariable kann man mit der Feldnotation oder auch nur mit dem Feldnamen zugreifen. Wenn nur der Feldname benutzt wird, wird der Standardursprung verwendet. So benutz z.B. $ARM_DATA[2].CAL_USER den Arm 2, whrend $CAL_USER den Standardarm verwendet.

LADEKATEGORIE
Die Werte der STATIC und FIELD Variablen knnen gesichert und geladen werden. Hierzu die Befehle ConfigureSave und ConfigureLoad benutzen, wie im Handbuch C3G Anwendung und Wartung beschrieben. Die vorbesetzten Variablen werden in die folgenden Ladekategorien unterteilt: Steuereinheit-Ladekategorie; Initialisierungs-Ladekategorie; (serielle und Matrix-) E/A Ladekategorie; Arm-Ladekategorie; Servo-Ladekategorie, Datenkommunikations-Ladekategorie.

Die Ladekategorie entspricht den Optionen, die fr den Befehl ConfigureLoad verfgbar sind. Bei Anwendung einer dieser Optionen werden nur die Variablen geladen, die in der angegebenen Ladekategorie vorbesetzt sind.

00/1200

12-1

LISTE DER VORBESETZTEN VARIABLEN

PDL2

DATENKLASSEN
Die vorbesetzten Variablen benutzen dieselben Datenklassen der vom Anwender definierten Variablen, wie sie im Kapitel Darstellung der Daten beschrieben werden, mit Ausnahme der Klasse SYSTEM.

ATTRIBUTE
Der Abschnitt Attribute gibt eine Auflistung der Zugriffsinformationen. Im allgemeinen knnen PDL2 Programms vorbesetzten Variablen Werte zuweisen (Schreiben) oder ihren Wert prfen (Lesen). Einige dieser Variablen knnen jedoch nur gelesen werden. Dies wird durch das Attribut "schreibgeschtzt" angezeigt. Auf einige vorbesetzte Variablen kann nur mit den internen Routinen SYS_VAR_GET und SYS_VAR_SET zugegriffen werden, was durch das Attribut "Zugriff nur mit interner Routine" angezeigt wird. Auf einige vorbesetzte Variablen kann von SPS Programmen zugegriffen werden. Dies wird mit dem Attribut "SPS" angezeigt. Auerdem kann einigen vorbesetzten Variablen mit der PDL2 Klausel WITH in den Anweisungen MOVE, MOVE ALONG, oder OPEN FILE ein vorbergehender Wert zugewiesen werden. Dies wird durch die Attribute WITH MOVE, WITH MOVE ALONG und WITH OPEN FILEangezeigt. Einige vorbesetzte Variable sind NUR mit der WITH Klausel zugnglich, was durch das Attribute "beschrnkter Zugriff" angezeigt wird. Einige vorbesetzte Variablen sind Matrizen. Das Attribut "zweidimensional" wird fr zweidimensionale Matrizen benutzt. Ist nichts angegeben, ist die Matrix eindimensional.

PORT ZUGEORDNETE SYSTEMVARIABLEN


$AIN $DOUT $GOUT $PROG_UBYTE $SDOUT $USER_LONG $AOUT $FDIN $HDIN $PROG_ULONG $TIMER $USER_WORD $BIT $FDOUT $PLCSTW $PROG_UWORD $USER_BIT $WORD $DIN $GIN $PROG_UBIT $SDIN $USER_BYTE

PROGRAMMSTACK ZUGEORDNETE SYSTEMVARIABLEN


$CYCLE $FLY_TYPE $PROG_ACC_OVR $PROG_DEC_OVR $PROG_ULEN $SYNC_ARM $TERM_TYPE $WEAVE_NUM $ERROR $FL_STS $PROG_ARM $PROG_NAME $READ_TOUT $SYS_CALL_OUT $THRD_CEXP $WEAVE_TYPE $FLY_PER $MOVE_TYPE $PROG_CNFG $PROG_SPD_OVR $SPD_OPT $SYS_CALL_STS $THRD_ERROR $WRITE_TOUT $FLY_TRAJ $ORNT_TYPE $PROG_CONDS $PROG_UADDR $STRESS_PER $SYS_CALL_TOUT $THRD_PARAM

ARM_DATA ZUGEORDNETE SYSTEMVARIABLEN


$ARM_ACC_OVR $ARM_OVR $AUX_OFST $AX_LEN $A_ALONG1 $A_AWORD1 $CAL_SYS $CONV_BASE $CONV_WIN $FLY_DIST $HOME $JNT_OVR $LIN_SPD $MOD_ACC_DEC $ARM_DEC_OVR $ARM_SPD_OVR $AUX_TYPE $AX_OFST $A_ALONG2 $A_AWORD2 $CAL_USER $CONV_CNFG $CONV_ZERO $FL_COMP $JERK $JOG_SPD_OVR $LIN_SPD_LIM $MOD_MASK $ARM_LINKED $AUX_BASE $AX_CNVRSN $A_ABYTE $A_AREAL1 $BASE $CNFG_CARE $CONV_NUM $DRV_ADDR $HAND_TYPE $JNT_MASK $LIN_ACC_LIM $LOG_TO_PHY $MTR_ACC_TIME $ARM_LOADED $AUX_MASK $AX_INF $A_ABYTE2 $A_AREAL2 $CAL_DATA $CONV_ACC_LIM $CONV_SPD_LIM $DRV_TYPE $HLD_DEC_PER $JNT_MTURN $LIN_DEC_LIM $MAN_SCALE $MTR_DEC_TIME

12-2

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

ARM_DATA ZUGEORDNETE SYSTEMVARIABLEN (Fortsetzung)


$MTR_RES $OP_TOL_DIST $PAR $RB_NAME $RCVR_TYPE $ROT_SPD $SENSOR_CNVRSN $SENSOR_TIME $STRK_END_N $TOL_COARSE $TOOL $TP_ORNT $MTR_SPD_LIM $OP_TOL_ORNT $RB_FAMILY $RB_STATE $RESOLVER $ROT_SPD_LIM $SENSOR_ENBL $SENSOR_TYPE $STRK_END_P $TOL_FINE $TOOL_CNTR $TURN_CARE $NUM_AUX_AXES $OT_TOL_DIST $RB_MARK $RB_VARIANT $ROT_ACC_LIM $RPT_ADDR $SENSOR_GAIN $SFRAME $STRK_END_SYS $TOL_JNT $TOOL_MASS $TX_RATE $NUM_JNT_AXES $OT_TOL_ORNT $RB_MODEL $RCVR_DIST $ROT_DEC_LIM $SC_BOARD $SENSOR_OFST_LIM $SING_CARE $TOL_ABT $TOL_TOUT $TOOL_RMT $UFRAME

CRNT_DATA ZUGEORDNETE SYSTEMVARIABLEN


$ARM_DISB $CONV_DIST $C_ALONG1 $C_AWORD1 $MTR_CURR $OT_POS $RAD_IDL_QUO $ARM_SIMU $CONV_SHIFT $C_ALONG2 $FLY_DBUG $MTR_TEMP $OT_TOOL $RAD_VEL $ARM_VEL $CONV_SPD $C_AREAL1 $FOLL_ERR $OT_COARSE $OT_UFRAME $RCVR_LOCK $CAUX_POS $C_ABYTE1 $C_AREAL2 $MOVE_STATE $OT_JNT $OT_UNINIT $SAFE_ENBL

DSP_DATA SYSTEMVARIABLE
$D_ALONG1 $D_MTR $D_AWORD1 $D_AXES $D_CTRL

DSP_DATA ZUGEORDNETE SYSTEMVARIABLEN


$HDIN_SUSP $S_ABYTE1 $IPERIOD $S_ALONG1 $PWR_ADDR $REF_ARMS

WEAVE_TBL SYSTEMVARIABLE
$WV_AMP_PER $WV_PLANE $WV_TRV_SPD $WV_CNTR_DWL $WV_RIGHT_AMP $WV_LEFT_AMP $WV_RIGHT_DWL $WV_LEFT_DWL $WV_SMOOTH

CONV_TBL SYSTEMVARIABLE
$CT_JNT_MASK $CT_TX_RATE $CT_RADIUS $CT_RES $CT_SCC

ON_POS_TBL SYSTEMVARIABLE
$OP_JNT $OP_TOOL $OP_JNT_MASK $OP_TOOL_DSBL $OP_POS $OP_TOOL_RMT $OP_REACHED $OP_UFRAME

01/0401

12-3

LISTE DER VORBESETZTEN VARIABLEN

PDL2

WITH MOVE ZUGEORDNETE SYSTEMVARIABLEN


$ARM_ACC_OVR $ARM_SPD_OVR $FLY_DIST $GUN $MOVE_TYPE $PROG_DEC_OVR $SENSOR_TIME $SPD_OPT $TOL_FINE $TOOL_RMT $WEAVE_TYPE $ARM_DEC_OVR $AUX_OFST $FLY_PER $JNT_MTURN $ORNT_TYPE $PROG_SPD_OVR $SENSOR_TYPE $STRESS_PER $TOOL $TURN_CARE $WV_AMP_PER $ARM_LINKED $BASE $FLY_TRAJ $JNT_OVR $PAR $ROT_SPD $FRAME $TERM_TYPE $TOOL_CNTR $UFRAME $ARM_LOADED $CNFG_CARE $FLY_TYPE $LIN_SPD $PROG_ACC_OVR $SENSOR_ENBL $SING_CARE $TOL_COARSE $TOOL_MASS $WEAVE_NUM

WITH MOVE ALONG ZUGEORDNETE SYSTEMVARIABLEN


$ARM_ACC_OVR $AUX_OFST $COND_MASK_BACK $FLY_TYPE $MOVE_TYPE $SEG_FLY $SEG_FLY_TYPE $SEG_TERM_TYPE $SING_CARE $TOL_COARSE $TOOL_MASS $ARM_DEC_OVR $BASE $FLY_DIST $JNT_MTURN $ORNT_TYPE $SEG_FLY_DIST $SEG_OVR $SEG_TOL $SPD_OPT $TOL_FINE $TURN_CARE $ARM_LOADED $CNFG_CARE $FLY_PER $JNT_OVR $ROT_SPD $SEG_FLY_PER $SEG_REF_IDX $SEG_TOOL_IDX $STRESS_PER $TOOL $WEAVE_NUM $ARM_SPD_OVR $COND_MASK $FLY_TRAJ $LIN_SPD $SEG_DATA $SEG_FLY_TRAJ $SEG_STRESS_PER $SEG_WAIT $TERM_TYPE $TOOL_CNTR $WEAVE_TYPE

WITH OPEN FILE ZUGEORDNETE SYSTEMVARIABLEN


$FL_ADLMT $FL_NUM_CHARS $FL_SWAP $FL_BINARY $FL_PASSALL $FL_DLMT $FL_RANDOM $FL_ECHO $FL_RDFLUSH

PATH NODE FIELD SYSTEMVARIABLE


$CNFG_CARE $LIN_SPD $MOVE_TYPE $SEG_FLY $SEG_FLY_TYPE $SEG_TERM_TYPE $SING_CARE $WEAVE_TYPE $COND_MASK $MAIN_JNTP $ORNT_TYPE $SEG_FLY_DIST $SEG_OVR $SEG_TOL $SPD_OPT $COND_MASK_BACK $MAIN_POS $ROT_SPD $SEG_FLY_PER $SEG_REF_IDX $SEG_TOOL_IDX $TURN_CARE $JNT_MTURN $MAIN_XTND $SEG_DATA $SEG_FLY_TRAJ $SEG_STRESS_PER $SEG_WAIT $WEAVE_NUM

12-4

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$AIN

UNTERSCHIEDLICHE SYSTEMVARIABLE
$ARM_DATA $CNTRL_INIT $CRNT_DATA $DFT_LUN $DV_TOUT $FL_CNFG $LEN_ELOG $NET_C_CNFG $NET_C_USER $NET_S_INT $NUM_DEVICES $NUM_MB_AHEAD $NUM_TIMERS $PIO_GOUTTBL $RBT_CNFG $SEV_ELOG $SYS_PROT $TP_GEN_INCR $USER_ADDR $ARM_USED $CNTRL_NUM $DEVNET_INIT $DFT_SPD $EXE_HELP $GEN_OVR $MASTER_INIT $NET_C_DIR $NET_I_INT $NET_S_STR $NUM_ELOG $NUM_PROGS $NUM_TRACES $PIO_LOGTBL $RBT2_CNFG $STARTUP $SYS_PROT_STATE $TP_MJOG $USER_LEN $CAL_FILE $CNTRL_OPT $DFT_ARM $DSP_DATA $FB_CNFG $HOUR_METER $NET_B $NET_C_HOST $NET_I_STR $NOLOG_ERROR $NUM_LUNS $NUM_SCRSN $NUM_WEAVES $PROFDP_INIT $REC_SETUP $SWIM_INIT $SYS_STATE $TP_SYNC_ARM $VERSION $CNTRL_CNFG $CONV_TBL $DFT_DV $DV_STS $FB_INIT $IBSSL_INIT $NET_B_DIR $NET_C_PASS $NET_L $NUM_ARMS $NUM_MB $NUM_SC_BOARDS $PIO_GINTBL $PWR_RCVR $SC_DATA $SYS_ERROR $TP_ARM $TUNE $WEAVE_TBL

ALPHABETISCHE LISTE
$AIN: Analoge Eingabe
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array schreibgeschtzt, SPS keine 1.00 Stellt die analogen Eingnge dar.

$AOUT: Analoge Ausgabe


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array SPS keine 1.00 Stellt die analogen Ausgnge dar.

$ARM_ACC_OVR: Arm acceleration override


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig WITH MOVE; MOVE ALONG 1..100 1.03 Gibt die prozentuale Beschleunigungsgeschwindigkeit fr die auf einem bestimmten Arm gestartete Bewegung an. (Es gibt einen Wert fr jeden Arm). Hchstgeschwindigkeit und -beschleunigung werden nicht durch nderungen in ihrem Wert beeinflusst. nderungen in $ARM_ACC_OVR werden bei der nchsten Bewegung fr die ganze Bewegung wirksam. 12-5

00/1200

$ARM

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$ARM_DATA: Daten eines Roboterarms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Arm eindimensionaler Array von arm_data keine keine 1.00 $ARM_DATA ist eine Matrix vorbesetzter Datenstze. Die Felder jedes Elements stellen Arm-bezogene Daten dar. Man braucht nicht immer das Prfix von $ARM_DATA zu spezifizieren, wenn auf ein Feld von $ARM_DATA verwiesen werden soll. Das Feld von $ARM_DATA, das standardmig benutzt wird, ist dasjenige fr den in PROG_ARM angezeigten Arm. PROGRAM tarmdata PROG_ARM=1 VAR init_tool : POSITION BEGIN $ARM_DATA[2].TOOL := init_tool $TOOL := init_tool END tarmdata

-- Arm 2 -- Arm 1

$ARM_DEC_OVR: Arm deceleration override


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig WITH MOVE; MOVE ALONG 1..100 3.00 Gibt die prozentuale Verzgerungsgeschwindigkeit fr die auf einem bestimmten Arm gestartete Bewegung an. (Es gibt einen Wert fr jeden Arm). Eventuelle nderungen haben keine Wirkung auf die max. Geschwindigkeit und Beschleunigung, beeinflussen jedoch die folgende Bewegung fr ihre gesamte Dauer.

$ARM_DISB: Marke Arm deaktiviert


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung boolesch schreibgeschtzt keine 3.10 Zeigt den aktuellen Zustand des Arms und, ob er fr Bewegungen und DRIVE ON freigegeben oder gesperrt ist. Wenn ein DRIVE ON in PROG gegeben wird und der Roboter gesperrt ist, wird eine Warnung angezeigt. Der Wert TRUE bedeutet, da der Arm gesperrt ist.

$ARM_LINKED: Armkopplung aktiviert/deaktiviert


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Feld von arm_data Arm boolesch WITH MOVE keine 4.30

12-6

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$ARM

Beschreibung:

Diese Variable wird in Konfigurationen benutzt, in denen ein Arm mechanisch mit einem anderen gekoppelt ist (integrierte Arme). In diesen Fllen kann sich der erste Arm (derjenige, der direkt mit dem Bezugssystem Welt verknpft ist) in Koppelung bewegen ($ARM_DATA[previuos_arm].ARM_LINKED=TRUE) oder nicht ($ARM_DATA[previous_arm].ARM_LINKED=FALSE). Wenn sich der erste Arm gekoppelt bewegt, bewegt sich auch der nchste (derjenige, der mit dem Flansch des ersten gekoppelt ist) so, dass sein TCP stetig gehalten wird. Im anderen Fall, wenn $ARM_LINKED als FALSE gesetzt ist, wird der nchste Arm einfach von dem ersten so getragen, dass die Achsen stetig gehalten werden (und sich der TCP also bewegt). Whrend einer nicht gekoppelten Bewegung des ersten Arms kann keine Bewegung des nchsten starten. Die Variable hat nur eine Bedeutung fr den ersten Arm eines integrierten Armpaars. In allen anderen Fllen hat sie keine Wirkung.

$ARM_LOADED: Arm voll belastet


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm boolesch WITH MOVE; MOVE ALONG keine 3.20 Zeigt an, da z.Z. die maximale Zuladung auf dem Arm ist. (Es gibt einen Wert pro Arm.) Der Anwender mu vorsichtig sein, wenn er $ARM_LOADED auf FALSE setzt, da der Arm sich dann schneller bewegt. Es ist ratsam, die WITH Klausel zu benutzen, wenn $ARM_LOADED fr eine bestimmte Bewegung auf FALSE gesetzt wird, so da nur diese Bewegung die schnelleren Bewegungsmerkmale hat. -- Roboter z.Z. nicht beladen. MOVE TO pay_load_pickup WITH $ARM_LOADED = FALSE

$ARM_OVR: Arm override


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig keine 1..100 2.20 $ARM_OVR hnelt $GEN_OVR, ist jedoch von PDL2 zugnglich, whrend $GEN_OVR vom PHG zugnglich ist. Diese Variable reduziert die Geschwindigkeit, Beschleunigung und Verzgerung in solchem Verhltnis, da die Bahn erhalten bleibt, auch wenn ihr Wert gendert wird. Eine nderung von $ARM_OVR wirkt sofort auf die Form des Geschwindigkeitsprofils.

$ARM_SIMU: Marke Arm simulate


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung boolesch schreibgeschtzt keine 3.10 Zeigt den aktuellen Zustand des Arms und, ob er im Simulationszustand ist. In diesem Zustand knnen Bewegungen auf dem Arm interpretiert werden, aber er bewegt sich nicht wirklich. Dies ist von Nutzen, um das Zeitverhalten und den Flu eines Programms zu testen, ohne Armbewegungen zu verursachen. Der Wert TRUE bedeutet, da der Arm im Simulationszustand ist.

00/1200

12-7

$AUX

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$ARM_SPD_OVR: Arm speed override


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig WITH MOVE; MOVE ALONG 1..100 1.03 Gibt die prozentuale Geschwindigkeit fr die auf einem bestimmten Arm gestarteten Bewegungen an. (Es gibt einen Wert fr jeden Arm). nderungen von $ARM_SPD_OVR haben keine Wirkung auf die max. Verzgerung und Beschleunigung, beeinflussen jedoch die folgende Bewegung fr ihre gesamte Dauer.

$ARM_USED: Anzahl der Programme, die diesen Arm benutzen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert eindimensionaler boolescher Array schreibgeschtzt keine 1.03 Jedes Element dieser Matrix Boole'scher Werte zeigt an, ob wenigstens ein Programm auf dem Arm aktiv ist. Der Matrizenindex entspricht der Armnummer.

$ARM_VEL: Armgeschwindigkeit
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung real schreibgeschtzt keine 1.00 Gibt die derzeitige Geschwindigkeit des Arms an. Die Variable hat nur bei kartesischen Bewegungen Bedeutung und gibt die mittlere TCP Geschwindigkeit in m/sek an. PROGRAM vel NOHOLD BEGIN CYCLE WRITE ($CRNT_DATA[1].ARM_VEL, NL) DELAY 500 END vel

$AUX_BASE: Hilfsbasis fr ein Stellwerk fr einen Arm


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Position- Array keine keine 4.00 Stellt den Ort und die Ausrichtung einer Stellwerkbasis im Bezugssystem Welt dar. Die Variable wird benutzt fr Stellwerke, die mittels Hilfsachsen in denselben Roboterarm integriert sind. Es gibt ein Matrixelement fr jedes mgliche Stellwerk.

$AUX_MASK: Maske der Arm-Hilfsachsen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: 12-8 Feld von arm_data Arm ganzzahlig schreibgeschtzt 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$AUX

Grenzwerte: Softwareversion: Beschreibung:

keine 1.03 Jedes Bit in der INTEGER zeigt an, ob die betreffende Hilfsachse fr den Arm vorhanden ist.

$AUX_OFST: OFFSET der Hilfsachsen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array WITH MOVE; MOVE ALONG keine 5.00 Mit dieser Variablen kann ein Offset fr jede Hilfsachse definiert werden. Es gibt ein Matrixelement fr jede Hilfsachse. Diese Offsets werden zu den Feldern der erweiterten Position (XTNDPOS) addiert, whrend sie in einer Bewegungsanweisung ausgefhrt werden. Dies ist hauptschlich ntzlich bei integrierten Achsen wie Schienen oder rotierenden Sulen, auf die der Roboter montiert ist, um ein Programm in einer anderen Position als der ursprngliche auszufhren. In diesen Fllen wird $UFRAME benutzt, um die kartesische Komponente der XTNDPOS zu transformieren, whrend $AUX_OFST nur auf die Komponenten der Hilfsachsen wirkt. $AUX_OFST wird nur bei Hilfsachsen verwendet, die Hilfsachsen als Stellwerke, integrierte Achsen oder elektrische Schweizangen definieren. Auch DISPLAY ARM STATUS bercksichtigt diese Offsets.

$AUX_TYPE: Stellwerktype
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm zweidimensional INTEGER Array keine keine 4.00 Zeigt eine Beschreibung der fr kooperative Bewegung aktivierten Stellwerke. Die erste Dimension ist eine INTEGER zum Setzen des Stellwerktyps, die zweite eine Bitmaske der in das Stellwerk einbezogenen Achsen. nderungen an dieser Variablen werden sofort wirksam.

$AX_CNVRSN: Konversion der Achsen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array schreibgeschtzt keine 1.00 Diese Variable gibt den Konversionsfaktor von Radianten auf Grade und umgekehrt fr jede Drehachse und von Millimetern in Millimeter fr jede lineare Achse an. Es gibt ein Array Element fr jede Achse. PROGRAM quo NOHOLD VAR i : INTEGER gr_quo : ARRAY [6] OF REAL BEGIN FOR i := 1 TO 6 DO -- Umwandlung des in Achsen-Radianten -- ausgedrckten Maes in Achsen-Grade gr_quo[i] := $CRNT_DATA[1].RAD_IDL_QUO[i] * $ARM_DATA[1].AX_CNVRSN[i] ENDFOR END quo 12-9

00/1200

$AX_

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$AX_INF: Gegenseitige Beeinflussung unter den Achsen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array schreibgeschtzt keine 1.00 Gibt den Wechselwirkungsfaktor fr zwei Achsen an, d.h. wenn die Drehung der einen auf die der anderen einwirkt. PROGRAM quo NOHOLD VAR i : INTEGER gr_quo : ARRAY [6] OF REAL BEGIN FOR i := 1 TO 6 DO -- Umwandlung des in Achsen-Radianten -- ausgedrckten Maes in Achsen-Grade gr_quo[i] := 0 IF i = 6 THEN gr_quo[6] := $CRNT_DATA[1].RAD_IDL_QUO[5] * $ARM_DATA[1].AX_INF[6] * $ARM_DATA[1].AX_CNVRSN[6] ENDIF gr_quo[i] := gr_quo[i] + $CRNT_DATA[1].RAD_IDL_QUO[i] * $ARM_DATA[1].AX_CNVRSN[i] ENDFOR END quo

$AX_LEN: Lnge der Achsen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array schreibgeschtzt keine 1.00 Diese Variable gibt die Lngen der Achsen des Arms in Millimetern an.

$AX_OFST: Fluchtabweichung der Achsen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array schreibgeschtzt keine 1.00 Diese Variable enthlt die Fluchtabweichung zwischen zwei aufeinander folgenden Achsen. Einige SMART Roboter z.B. haben eine Fluchtabweichung zwischen der Roboterachse auf der Maschinenbasis und dem Zapfen der Achse 2.

$A_ABYTE1: Interne Armdaten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: 12-10 Feld von arm_data Arm eindimensionaler Array von Systemdaten Zugriff nur ber interne Routinen, schreibgeschtzt 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$A_A

Grenzwerte: Softwareversion: Beschreibung:

keine 1.00 Es gibt bestimmte Felder von $ARM_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$A_ABYTE2: Interne Armdaten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm zweidimensionaler Array von Systemdaten Zugriff nur ber interne Routinen, schreibgeschtzt keine 3.00 Es gibt bestimmte Felder von $ARM_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$A_ALONG1: Interne Armdaten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler ganzzahliger Array schreibgeschtzt keine 2.20 Es gibt bestimmte Felder von $ARM_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$A_ALONG2: Interne Armdaten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Zweidimensionaler ganzzahliger Array schreibgeschtzt keine 1.00 Es gibt bestimmte Felder von $ARM_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$A_AREAL1: Interne Armdaten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array schreibgeschtzt keine 2.20 Es gibt bestimmte Felder von $ARM_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$A_AREAL2: Interne Armdaten


Speicherkategorie: Feld von arm_data Ladekategorie: Arm Datenklasse: zweidimensionaler Real-Array 00/1200 12-11

$A_A

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Attribute: Grenzwerte: Softwareversion: Beschreibung:

schreibgeschtzt keine 2.20 Es gibt bestimmte Felder von $ARM_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$A_AWORD1: Interne Armdaten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Array von Systemdaten Zugriff nur ber interne Routinen, schreibgeschtzt keine 1.03 Es gibt bestimmte Felder von $ARM_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$A_AWORD2: Interne Armdaten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm zweidimensionaler Array von Systemdaten Zugriff nur ber interne Routinen, schreibgeschtzt keine 2.20 Es gibt bestimmte Felder von $ARM_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$BASE: Arm-Grundposition
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Position WITH MOVE; MOVE ALONG keine 1.00 Gibt die Position und Ausrichtung des Roboters in Bezug auf die Auenwelt an.

$BIT: SPS BIT-Daten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler boolescher Array SPS keine 1.00 Es handelt sich um eine Darstellung des CR Speichers der SPS Logik Ladder. Diese Variable kann fr den Datenaustausch unter SPS und PDL2 Programmen verwendet werden; in diesem Fall betrgt die Grenze 200 Elemente. Sie kann ebenfalls als lokaler Speicher in einem SPS Programm, das in PDL2 geschrieben wurde, benutzt werden; in diesem Fall hngt die Anzahl der Elemente von der Systemkonfiguration ab. Fr die SPS- Hardware gibt es 7168 Punkte, und fr die SPS Software gibt es 1536 Punkte.

12-12

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$CAL

$CAL_DATA: Kalibrierdaten
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler ganzzahliger Array keine 32768..32767 1.00 Diese Variable enthlt den Kalibrierfehler, der aufgrund der Differenz zwischen der Sollund Istposition des Arms entsteht. Der Wert wird in Resolver-Bits ausgedrckt.

$CAL_FILE: Kalibrierdatei
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit String keine keine 5.00 Diese Variable enthlt den Namen der Kalibrierdatei. Der Name muss mit der Nummer der betreffenden Servosteuerkarte (SCC) enden, z.B. CALIB1.

$CAL_SYS: System-Kalibrierposition
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm jointpos schreibgeschtzt keine 1.00 Es handelt sich um die Kalibrierposition des Systems. Der Anwender muss bei jeder neuen Maschine den Roboter im Tippbetrieb auf die durch Prgemarken identifizierte Kalibrierposition bringen und dann die Kalibrierprozedur durchfhren, ehe der Roboter im AUTO Modus benutzt werden kann. PROGRAM calpos PROG_ARM=4 VAR pnt0001j : JOINTPOS BEGIN WRITE($ARM_DATA[4].CAL_SYS, NL) pnt0001j := $CAL_SYS MOVE JOINT TO $CAL_SYS END calpos

$CAL_USER: Anwender-Kalibrierposition
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm jointpos keine keine 1.00 Es handelt sich um die vom Anwender definierte Kalibrierposition. Mit dieser Variablen kann der Roboter in einer anderen als der System-definierten Kalibrierposition kalibriert werden.

00/1200

12-13

$CAU

LISTE DER VORBESETZTEN VARIABLEN

PDL2

PROGRAM userpos PROG_ARM=2 BEGIN -- die Anwenderkalibrierposition schreiben und sich auf diese Position bewegen $CAL_USER := $CAL_SYS $CAL_USER[3] := $CAL_USER[3] - 90 WRITE($ARM_DATA[2].CAL_USER, NL) MOVE JOINT TO $CAL_USER END userpos

$CAUX_POS: Kartesische Stellwerkposition


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung Position keine keine 4.00 Enthlt die kartesische Position des fr kooperative Bewegung aktivierten Stellwerks.

$CNFG_CARE: Verwaltung der Konfiguration


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm boolesch NODE-Feld, WITH MOVE; MOVE ALONG keine 1.00 Es handelt sich um eine Marke, die bestimmt, ob eine kartesische Bahn mit unterschiedlichen Konfigurationen fr Anfang und Ende ausgefhrt werden soll. Wenn die Marke TRUE ist und die Anfangs- und End-Konfigurationen unterschiedlich sind, wird die Bewegung nicht ausgefhrt. Wenn die Marke FALSE ist, wird die Endkonfiguration gleich wie die Anfangskonfiguration, und es wird keine Meldung dem Anwender angezeigt. Standardmig ist die Marke TRUE.

$CNTRL_CNFG: Konfigurationsmodus fr die Steuereinheit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig keine keine 3.20 Verschiedene Bits dieser vorbesetzten Variablen werden zur Einrichtung von Steuereinheitskonfiguration und - anlaufen benutzt: Bit 1: wenn gesetzt wird das Popup-Fenster mit Systeminformationen bei Systemwiederstart nicht angezeigt. Bit 2: wenn gesetzt, werden beim Start 17Kb Speicher fr den Befehl FILER UTILITY COMPRESS EXTRACT reserviert wenn nicht gesetzt, kann dieser Befehl einen Fehler zurckgeben, wenn nicht gengend zusammenhngender Speicher zur Verfgung steht. Bit 3: wenn gesetzt, ist bei allen im System aktivierten Programmen das Bit 3 in $PROG_CNFG gesetzt, was das Setzen eines Ausgangs unter folgenden Umstnden deaktiviert: a: wenn im PROG Status von einem aktiven Programm.

12-14

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$CNT

Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit

b: wenn im PROG Status bei Ausfhren einer Anweisung von der PC Tastatur (bei aktiven PCINT Tool) und freigegebenen Schaltern "PHG Im Schrank". c: wenn im PROG Status unter MEMORY DEBUG oder PROGRAM EDIT auf der BK /PC Tastatur (bei aktiven PCINT Tool). und freigegebenen Schaltern "PHG Im Schrank". d: wenn der Whlschalter Prog/Auto auf der BK auf AUTO bei freigegebenen Schaltern "PHG Im Schrank" gedreht wurde. 4: reserviert. 5: wenn gesetzt, lst WAIT FOR nicht aus, wenn das Programm in HOLD Status ist (wegen einem HOLD oder einem Fehler). 6: reserviert. 7: wenn gesetzt, wird PCINT automatisch nach einem Kaltoder Warmstart auf dem COM: Port montiert. 8: reserviert. 9: wenn gesetzt, startet der EZ Emulator nicht automatisch, wenn EZ aktiviert wird. 10: wenn gesetzt wartet EZ nicht auf den Befehl UTILITY APPLICATION oder Drcken der EZ Taste auf dem PHG. 11: wenn gesetzt, ldt EZ die Programme in den Speicher, auf die im Hauptprogramm verwiesen wird. 12: wenn gesetzt, fhrt EZ whrend der Installationsphase keine Prfungen an den Anwendungen durch. 13: wenn auf 1 gesetzt, sollte EZ die Knotenbewegung verwalten. 14-15: fr EZ reserviert. 16-32: reserviert.

$CNTRL_INIT: Verfahren zur Initialisierung der Steuereinheit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig schreibgeschtzt keine 1.03 Jedes Bit stellt dar, wie sich die verschiedenen Aspekte der Steuereinheit bei der Initialisierung verhalten: Bit 1: Wenn gesetzt, wird die erste gefundene SIM Karte vom System gesteuert. Bit 2: reserviert Bit 3: Wenn gesetzt, wird die erste gefundene IOS Karte vom System gesteuert. Bit 4: Wenn gesetzt, wird die zweite gefundene IOS Karte vom System gesteuert. Bit 5-6: Reserviert. Bit 7: Wenn gesetzt, wird das remote HOLD Signal im AUTO-LOCAL oder PROG Zustand ignoriert. Bit 8,9,10: Mit diesen drei Bits wird konfiguriert, wiedie $WORD Elemente 17, 18, 25 und 26 von der Steuereinheit behandelt werden, wenn entweder die RIO Karte installiert und richtig konfiguriert ist oder die NIO Funktion auf der SINEC Karte vorhanden ist. Die folgende Tabelle zeigt den derzeitigen Gebrauch:

00/1200

12-15

$CNT

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$WORD[17/25] Gebrauch PDL2 Zugriff

$WORD[18/26] Gebrauch PDL2 Zugriff

$CNTRL_INIT bits 10,9,8 011 010 111 000 001 100 101 110

----------------------UNINIT------------------------------------Use different $WORDs--------------Anwender System Anwendung System System Anwendung Bit 11: Bit Bit $WORD $SDIN/SDOUT RESERVIERT $SDIN/SDOUT $SDIN/SDOUT RESERVIERT Anwender Anwender Anwender System Anwendung Anwendung $WORD $WORD $WORD $SDIN/SDOUT RESERVIERT RESERVIERT

Bit

Bit Bit

Bit

Bit Bit

Dieses Bit konfiguriert den remote Ausgang als Kopie des PROG/AUTO Schalters in AUTO-REMOTE Stellung. 12: Dieses Bit konfiguriert den Ausgang "Lernfreigabe" als Kopie des PROG/AUTO Schalters in PROGr Stellung. 13: Dieses Bit konfiguriert den Zustimmungsschalter wie die DRIVE OFF Taste, wenn in PROG anstelle von HOLD freigegeben. 14: Dieses Bit erlaubt das Erzeugen von Warnungen bei Eingang eines Befehls von einer Ferneinrichtung (SIM, RIO, SINEC und Netzwerk) 15: Dieses Bit aktiviert Fehleraufzeichnung nach dem ersten Abbruchfehler. 16: Zeigt die Bedeutung der Bits in den System $WORDs, die vom Interbus-S oder Profibus L2/DP benutzt werden. Wenn auf 0 gesetzt, werden die COMAU Definitionen (RIO) benutzt, bei 1 die Interbus Standard-Definitionen. 17: Aktiviert den SW Zeitgeber(0,9sec), der die Motorbremse nach einem Fernbefehl DRIVE OFF (als KONTROLLIERTES NOTAUS benutzt). 18: Wenn gesetzt, knnen Rundsendebefehle fr Antriebsmodule benutzt werden. 19-32: Reserviert

$CNTRL_NUM: Seriennummer der Steuereinheit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig schreibgeschtzt keine 2.10 Diese Variable ist die Seriennummer der betreffenden Steuereinheit.

$CNTRL_OPT: Controller options


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig schreibgeschtzt keine 1.03 Jedes Bit des INTEGER stellt die verschiedenen in der Steuereinheit installierten Optionen dar (in der Tabelle nicht aufgefhrte Bits werden nicht benutzt): Bit 1: Reserviert 00/1200

12-16

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$CON

Bit 2: Bit 3..5: Bit 6:

Schleichgang installiert Reserviert Die Kabel der elektrischen Endanschlge sind richtig angeschlossen Bit 7..32: Reserviert

$COND_MASK: Maske der PATH Segmentbedingungen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG keine 3.00 Jeder PATH enthlt eine Bedingungshandlertabelle (COND_TBL), die bis zu 32 INTEGERs beinhalten kann. Diese Tabelle wird benutzt, um die Bedingungshandler anzugeben, die bei der PATH Bewegung benutzt werden sollen. Das Standardfeld des Knotens $COND_MASK ist ein INTEGER auf Bit Basis, der benutzt wird, um festzustellen, welche Bedingungshandler in COND_TBL lokal vom Segment gebraucht werden sollen. Wenn z.B. die COND_TBL Elemente 1, 2 und 3 die Bedingungshandlernummern 10, 20 und 30 enthlt und $COND_MASK wird fr den Knoten auf 5 gesetzt, so wird bewirkt, da die Bedingungshandler 10 und 30 lokal auf dem Segment hnlich wie bei einer MOVE TO ... WITH CONDITION Anweisung freigegeben werden (der Wert 5 besteht aus Bit 1 und 3, damit werden COND_TBL[1] und COND_TBL[3] freigegeben). PROGRAM pth TYPE nd = NODEDEF $MAIN_POS $MOVE_TYPE $COND_MASK i : INTEGER b : BOOLEAN ENDNODEDEF -- Die Knoten dieses Pfads sollten lernprogrammiert oder mit NODE_APP angehngt werden VAR p : PATH OF nd BEGIN CONDITION[10]: WHEN TIME 10 AFTER START DO ...... ENDCONDITION CONDITION[30] : WHEN TIME 20 BEFORE END DO ...... ENDCONDITION CONDITION[20] : WHEN AT START DO ...... ENDCONDITION ...... p.COND_TBL[1] := 10 -- Initialisieren von COND_TBL p.COND_TBL[2] := 20 p.COND_TBL[3] := 30 -- auf Knoten 1 lsen die Bedingungen 10 und 30 aus, da 5 gleich -- Bit 1 und 3 und die Elemente 1 und 3 von COND_TBL die -- Nummer 10 und 30 enthalten. p.NODE[1].$COND_MASK := 5 12-17

00/1200

$CON

LISTE DER VORBESETZTEN VARIABLEN

PDL2

-- auf Knoten 4 lst Bedingung 20 aus p.NODE[4].$COND_MASK := 2 CYCLE MOVE ALONG p .... END pth

$COND_MASK_BACK: Maske der PATH Segmentbedingungen bei Rckwrtsinterpretation


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG keine 3.00 Jeder PATH enthlt eine Bedingungshandlertabelle (COND_TBL), die bis zu 32 INTEGERs beinhalten kann. Diese Tabelle wird benutzt, um die Bedingungshandler anzugeben, die bei der PATH Bewegung benutzt werden sollen. Das Standardfeld des Knotens $COND_MASK ist ein INTEGER auf Bit Basis, der benutzt wird, um festzustellen, welche Bedingungshandler in COND_TBL lokal vom Segment gebraucht werden sollen, wenn der PATH rckwrts interpretiert wird. Wenn z.B. die COND_TBL Elemente 1, 2 und 3 die Bedingungshandlernummern 10, 20 und 30 enthlt und $COND_MASK_BACK wird fr den Knoten auf 6 gesetzt, so wird bewirkt, da die Bedingungshandler 10 und 30 lokal auf dem Segment (der Wert 6 besteht aus Bit 2 und 3, damit werden COND_TBL[2] und COND_TBL[3] freigegeben).

$CONV_ACC_LIM: Begrenzung fr Frderergeschwindigkeit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real keine keine 4.10 Stellt die max. Beschleunigung/Verzgerung dar, mit denen der Arm den Frderer verfolgt.

$CONV_BASE: Basisbezugssystem Frderer


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Position keine keine 4.10 Gibt die Position der Frdererbasis in bezug auf das Bezugssystem Welt des Roboters an. Es muss gemessen werden, wenn der Frdererwagen in der Nullposition oder einer anderen bekannten Position ist. Die X-Achse des resultierenden Bezugssystems (Frdererbasis-Bezugssystem) muss mit der Frdererrichtung ausgerichtet werden. Die XY Ebene fllt mit der Ebene des Frdererwagens zusammen und der Ursprung liegt in dem Punkt, in dem der Sensor den Durchgang des Wagens entdeckt. Wenn der Frderer kreisfrmig ist, muss die Y-Achse zum Rotationszentrum hin ausgerichtet sein. Sind drei Punkte des Frderers gegeben (Ursprung, x und xy), kann $CONV_BASE mit der internen Routine POS_FRAME errechnet werden.

12-18

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$CON

$CONV_CNFG: Konfiguration zur Frdererverfolgung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig keine keine 4.10 Diese Variable ist eine Bitmaske zum Konfigurieren des Frderers. Das 1. Bit bestimmt die Art der Verfolgung: bei FALSE kartesisch, bei TRUE Schiene. Das 2. Bit gibt die Richtung auf der Schiene an: TRUE, wenn die positive Richtung des Frderers die positive Richtung der Schiene ist. Das 3. Bit spezifiziert, ob kartesisches Verfolgen auf einem linearen (FALSE) oder kreisfrmigen Frderer (TRUE) durchgefhrt wird. Diese Konfiguration wird sowohl fr Frdererverfolgen als auch zum Auslesen des Frderers benutzt. Diese Variable wird mit dem Konfigurationstool von PDL2 initialisiert.

$CONV_DIST: Frdererverschiebung in Mikron


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung ganzzahlig keine keine 4.20 $CRNT_DATA[n].CONV_DIST stellt eine Verschiebung des Frderwagen-Bezugssystems gegen die Nullposition (Frdererbasis-Bezugssystem) dar. Diese ist im Mikrons ausgedrckt und kann gelesen werden, wenn der Frderer im Verfolge- oder im Lesemodus aktiviert ist ($CONV_NUM ungleich Null). Da es sich um eine INTEGER Variable handelt, wird sie hauptschlich in BEDINGUNGEN verwendet.

$CONV_NUM: Frderertabellen-Nummer
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig keine -2..2 4.10 Spezifiziert das Element der Frderertabelle ($CONV_TBL), das bei den nchsten Bewegungen benutzt werden soll. Ist diese Variable auf Null gesetzt, so ist Frdererverfolgung deaktiviert. 1 oder 2 aktivieren Verfolgen auf dem 1. oder 2. Frderer; -1 oder - 2 aktivieren Lesen auf dem 1. oder 2. Frderer.

$CONV_SHIFT: Frdererverschiebung in mm
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung real keine keine 4.20 $CRNT_DATA[n].CONV_SHIFT stellt eine Verschiebung des Frderwagen-Bezugssystems gegen die Nullposition (Frdererbasis-Bezugssystem) dar. Diese ist im Millimeter ausgedrckt und kann gelesen werden, wenn der Frderer im Verfolge- oder im Lesemodus aktiviert ist ($CONV_NUM ungleich Null).

00/1200

12-19

$CON

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$CONV_SPD: Frderergeschwindigkeit
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung real keine keine 4.10 $CRNT_DATA[n].CONV_SPD gibt die Geschwindigkeit des Frderers in m/sek an. Sie kann zur Prozessberwachung benutzt und gelesen werden, wenn der Frderer im Verfolge- oder im Lesemodus aktiviert ist ($CONV_NUM ungleich Null).

$CONV_SPD_LIM: Frderergeschwindigkeitsbegrenzung
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real keine keine 4.10 Stellt die max. Armgeschwindigkeit bei Frdererverfolgung dar.

$CONV_TBL: Daten der Frdererverfolgstabelle


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler Array von conv_tbl keine keine 4.10 $CONV_TBL ist eine Matrix [$CONV_NUM] von Fahrplnen, von denen jeder die Felder $CT_xxx enthlt.

$CONV_WIN: Frdererfenster
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array keine keine 4.10 Definiert das Verfolgefenster, d.h. den Bereich, in dem der Frderer verfolgt werden kann. $CONV_WIN[1] enthlt den Abstand der Einlaufgrenze vom Frdererbasis-Bezugssystem und $CONV_WIN[2] den Abstand der Auslaufgrenze. Wenn der Roboter versucht, auf eine Position zu gehen, die noch nicht im Fenster ist, wartet die Steuereinheit, bis dieser Teil in das Fenster kommt. Wenn der Roboter versucht, eine Position zu erreichen, die bereits das Fenster verlassen hat, wird ein Fehler erzeugt.

$CONV_ZERO: Frderer-Resolver-Null
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: 12-20 Feld von arm_data Arm ganzzahlig keine keine 4.10 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$CRN

Beschreibung:

Diese Variable wird benutzt, um den Wert des mit dem Frderermotor verbundenen Resolvers zu speichern, wenn der Wagen in der Nullposition ist ($CONV_ZERO = $CONV_TBL[n].CT_RES). Diese Operation muss im PDL2 Programm oder durch ein Anwendungspaket erfolgen.

$CRNT_DATA: Daten des aktuellen Arms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Initialisierung eindimensionaler Array von crnt_data schreibgeschtzt keine 1.00 $CRNT_DATA ist ein Array von vorbesetzten Records mit einem Element fr jeden Arm. Die Felder jeden $CRNT_DATA Elements stellen die Daten des entsprechenden aktuellen Arms dar.

$CT_JNT_MASK: Frdererankupplungsmaske
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von conv_tbl Steuereinheit ganzzahlig keine 0..255 4.10 Diese Variable wird bei Anwendungen mit Frdererverfolgung benutzt, wo ein externer Resolver mit dem Frderermotor verbunden ist. Es handelt sich um eine Bitmaske, die die physikalische Achse spezifiziert, an die der Resolver angekuppelt ist.

$CT_RADIUS: Frdererradius in mm
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von conv_tbl Steuereinheit real keine keine 4.20 $CONV_TBL[n].CT_RADIUS ist ntzlich bei kreisfrmigem kartesischem Verfolgen und gibt den Radius des Frderers in bezug auf die Nullposition (Ursprung des Frdererbasis-Bezugssystem) an. Der Wert ist in Millimetern ausgedrckt.

$CT_RES: Frdererposition in Resolver-Bits


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von conv_tbl Steuereinheit ganzzahlig keine keine 4.10 $CONV_TBL[n].CT_RES gibt die Frdererposition ausgedrckt in Bits von dem Resolver an, der mit dem Frderermotor verbunden ist. Sie wird benutzt, um den Frdereroffset wieder aufzusetzen, indem ihr Wert in die Variable $CONV_ZERO kopiert wird.

00/1200

12-21

$CT_

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$CT_SCC: Frderer SCC


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von conv_tbl Steuereinheit ganzzahlig keine 0..2 4.10 Diese Variable wird bei Anwendungen mit Frdererverfolgung benutzt, wo ein externer Resolver mit dem Frderermotor verbunden ist. Sie gibt die Nummer der Servosteuerkarte (SCC) an, an die der Resolver angeschlossen ist.

$CT_TX_RATE: bersetzungsverhltnis
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von conv_tbl Steuereinheit real keine keine 4.10 Der Skalierfaktor des Frderers ausgedrckt in [mm/resolver_turn] fr lineares kartesisches Verfolgen und Schienenverfolgen bzw. in [resolver_turns/conveyor_turn] fr kreisfrmiges Verfolgen.

$CYCLE: Programmzykluszhler
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig schreibgeschtzt keine 1.00 Variable des Zhlers der von einem vorgegebenen Programm ausgefhrten Zyklen. Der Anfangswert ist 0, wenn das Attribut CYCLE nicht in der BEGIN Anweisung angegeben ist, andernfalls ist er 1. Der Zhler wird inkrementiert, wenn die EXIT CYCLE Anweisung oder die END Anweisung des Programms ausgefhrt wird. Es ist bei der Initialisierung von Programmen von Nutzen. PROGRAM tcycle ROUTINE do_clean_gun EXPORTED FROM gun BEGIN -- $CYCLE hat Wert 0 CYCLE -- $CYCLE wird bei jedem CYCLE inkrementiert IF $CYCLE MOD 10 = 0 THEN WRITE (CYCLE = , $CYCLE, NL) do_clean_gun ENDIF END tcycle

$C_ABYTE1: Innere Daten des aktuellen Arms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Feld von crnt_data Initialisierung eindimensionaler Array von Systemdaten Zugriff nur ber interne Routinen, schreibgeschtzt

12-22

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$C_A

Grenzwerte: Softwareversion: Beschreibung:

keine 1.00 Es gibt bestimmte Felder von $CRNT_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$C_ALONG1: Innere Daten des aktuellen Arms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung eindimensionaler ganzzahliger Array schreibgeschtzt keine 5.00 Es gibt bestimmte Felder von $CRNT_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$C_ALONG2: Innere Daten des aktuellen Arms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung zweidimensonaler ganzzahliger Array schreibgeschtzt keine 1.00 Es gibt bestimmte Felder von $CRNT_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$C_AREAL1: Innere Daten des aktuellen Arms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung eindimensionaler Real-Array schreibgeschtzt keine 1.00 Es gibt bestimmte Felder von $CRNT_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$C_AREAL2: Innere Daten des aktuellen Arms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung zweidimensonaler Real Array schreibgeschtzt keine 5.10 Es gibt bestimmte Felder von $CRNT_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

00/1200

12-23

$DEV

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$C_AWORD1: Innere Daten des aktuellen Arms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung eindimensionaler Array von Systemdaten Zugriff nur ber interne Routinen, schreibgeschtzt keine 1.03 Es gibt bestimmte Felder von $CRNT_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$DEVNET_INIT: DEVNET Slave-Initialisierungsparameters


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Ein/Ausgabe eindimensionaler ganzzahliger Array keine keine 5.30 Diese Variable enthlt Informationen zum Initialisieren und Einrichten des DeviceNet, das auf der Karte C3G-EDM luft. Sie muss richtig initialisiert werden, bevor der Annex in der Steuereinheit benutzt wird, und ist eine Matrix mit 10 Elementen, die folgende Bedeutungen haben: [1]: dies ist eine Bitmaske, wo: Bit 1: wenn auf 1 gesetzt, anzeigt, dass das Protokoll aktiviert ist. Andernfalls nimmt die Steuereinheit an, dass keine C3G-EDN Karte vorhanden ist. Damit nderungen wirksam werden, muss die Steuereinheit (kalt oder warm) neugestartet werden. Bit 2: wenn auf 1 gesetzt, kann die Fern-SPS logisch von der Steuereinheit C3G abgetrennt werden, obwohl die Kommunikation weiter aktiv bleibt. Nur die Systemausgnge werden aktualisiert, nicht die Eingnge. Dies Bit ist dynamisch aktiv. Bit 3: konfiguriertes Protokoll Bit 4..8: reserviert Bit 9: reserviert Bit 10: wenn auf 1 gesetzt, tauscht die Steuereinheit die Bytes der Eingangs-/Ausgangs-$WORDS. Dies geschieht, um mit jeder Notation kompatibel zu sein, die SPS annehmen kann. Bit 11..16: reserviert Bit 17..32: reserviert [2]: reserviert, muss mit 0 initialisiert werden [3]: MAC ID. [4]: DeviceNet Hersteller ID [5]: DeviceNet Produktcode [6]: Anzahl von$WORD, die als Anwenderwrter definiert sind. [7]: wenn die Summe der Anzahl von System- und Anwenderwrtern grer als 8 ist, muss der Index angegeben werden, ab dem der zweite Block mit den Daten von DeviceNet kopiert werden soll. Andernfalls muss dieses Element gelscht werden.

12-24

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$DFT

[8]:

[9]: [10]:

wenn das Interface primr ist, sollte dieses Element gelscht werden. Andernfalls, wenn es sekundr ist, enthlt dieses Element den Index, ab dem der zweite Block mit den Daten von DeviceNet kopiert werden soll. In diesem Fall muss der Wert grer als 32 sein und Bit 7 hat nur Bedeutung, wenn die Zahl der Anwenderwrter grer als 8 ist. Seriennummer Reserviert

$DFT_ARM: Standardarm
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig schreibgeschtzt keine 1.00 Diese Variable enthlt den Standardarm des Systems. Sie wird in Mehrarmsystemen verwendet, wenn das Attribut PROG_ARM nicht in der Kopfsanweisung des Programms angegeben wurde. Die Werte gehen von 1 bis 32.

$DFT_DV: Standardeinrichtungen
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler String-Array keine keine 2.10 Gibt die von der Steuereinheit benutzten Standardeinrichtungen an. Dies ist eine Matrix mit 6 Elementen mit folgender Bedeutung: [1]: PDL2 Standardeinrichtung ('CRT:'). [2]: Standardeinrichtung fr die Befehlssprache ('RD:'). [3]: Standardsicherungseinrichtung (FD:bei integriertem Diskettenlaufwerk, sonst COMP: ). [4]: Standardeinrichtung fr TISOFT (COM1:). [5]: Standardkommunikationseinrichtung (COM1:). [6]: Standardeinrichtung zur Installation von PDL2 Tools.

$DFT_LUN: Standard-LUN-Nummer
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig keine keine 1.00 Stellt die Standard Logical Unit Nummer (LUN) dar, die in PDL2 Programmen fr READ und WRITE Operationen benutzt wird. Vernnftige Werte fr diese Variable werden von den vorbesetzten Konstanten LUN_CRT, LUN_TP und LUN_NULL angezeigt. Der Standardwert ist LUN_TP. Bei Arbeiten mit PC Bildschirm/Tastatur unter PCINT sollte diese Variable auf LUN_CRT gesetzt werden, um serielle Ein-/Ausgaben standardmig zur vom PC emulierten BK zu lenken.

00/1200

12-25

$DFT

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$DFT_SPD: Standardeinrichtungsgeschwindigkeit
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler ganzzahliger Array keine keine 5.00 Enthlt die Standardgeschwindigkeit fr einige Steuereinheitseinrichtungen. Sie ist eine Matrix von 4 Elementen mit folgender Bedeutung: [1]: Standardgeschwindigkeit fr Dateibertragung bei Benutzen von FD: [2]: Standardgeschwindigkeit fr Dateibertragun auf COMP: (mit dem PCINT Tool) [3]: Reserviert [4]: Reserviert

$DIN: Digitale Eingabe


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler Boole'scher Array schreibgeschtzt, SPS keine 1.00 stellt die Zahl von digitalen Eingangspunkten dar. Die Zahl von verfgbaren Eingangsepunkten hngt von der Zahl der im System installierten E/A-Karten ab.

$DOUT: Digitale Ausgabe


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler boolescher Array SPS keine 1.00 Stellt die Zahl von digitalen Ausgangspunkten dar. Die Zahl von verfgbaren Ausgangspunkten hngt von der Zahl der im System installierten E/A-Karten ab.

$DRV_ADDR: Adressen der Antriebe


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm eindimensionaler ganzzahliger Array schreibgeschtzt keine 1.00 Diese Variable enthlt die Adresse der seriellen Leitung des Antriebs.

$DRV_TYPE: Typ der Antriebseinheit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Feld von arm_data arm eindimensionaler ganzzahliger Array schreibgeschtzt

12-26

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$DSP

Grenzwerte: Softwareversion: Beschreibung:

keine 1.00 Diese Variable enthlt den Antriebstyp, der der entsprechenden Achse zugeordnet ist.

$DSP_DATA: DSP Daten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Servo eindimensionaler dsp_data Array keine keine 1.00 $DSP_DATA ist ein Array von vorbesetzten Records mit einem Element fr jede Servosteuerkarte. Die Felder jedes $DSP_DATA Elements stellen die Daten des entsprechenden DSP (Digital Signal Processor) dar. Jedes Element ist eine elektormechanische Besonderheit der Maschine und der Servosteuerungsparameter.

$DV_STS: Status eines DV_CNTRL Aufrufs


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig keine 0..0 3.00 Enthlt den Status der letzten Operation DV_CNTRL.

$DV_TOUT: Zeitintervall fr die Aufrufe von DV_CNTRL


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Datenbertragung ganzzahlig keine 0..MAXINT 3.00 Enthlt den Wert des Zeitintervalls fr asynchrone Aufrufe von DV_CNTRL; ein Wert Null bedeutet unbestimmtes Warten.

$D_ALONG1: Interne DSP Daten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von dsp_data Servo eindimensionaler ganzzahliger Array schreibgeschtzt keine 5.10 Es gibt bestimmte Felder von $DSP_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen ARRAYs verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind nicht spezifiziert.

$D_AWORD1: Interne DSP Daten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: 00/1200 Feld von dsp_data Servo eindimensionaler Array von Systemdaten Zugriff nur ber interne Routinen, schreibgeschtzt 12-27

$D_A

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Grenzwerte: Softwareversion: Beschreibung:

keine 1.00 Es gibt bestimmte Felder von $DSP_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen ARRAYs verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind nicht spezifiziert.

$D_AXES: Interne DSP Daten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von dsp_data Servo eindimensionaler Real-Array schreibgeschtzt keine 5.00 Es gibt bestimmte Felder von $DSP_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen ARRAYs verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$D_CTRL: Interne DSP Daten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von dsp_data Servo eindimensionaler Real-Array schreibgeschtzt keine 1.00 Es gibt bestimmte Felder von $DSP_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen ARRAYs verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$D_MTR: Interne DSP Daten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von dsp_data Servo eindimensionaler Real-Array schreibgeschtzt keine 5.00 Es gibt bestimmte Felder von $DSP_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen ARRAYs verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$ERROR: Letzter Fehler auf einem PDL2 Programm


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig keine 0..0 1.00 Systemvariable, die den letzten Fehler (falls es welche gibt) enthlt, der in diesem Programm auftrat.

12-28

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$EXE

$EXE_HELP: Hilfe zum Execute Befehl


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler String-Array keine keine 4.20 Diese Matrix kann vom Anwender so eingerichtet werden, dass sie diejenigen Anweisungen enthlt, die am hufigsten in dem EXECUTE Befehl des Systemmens gebraucht werden. Diese Anweisungen werden zusammen mit anderen im System vordefinierten Anweisungen im Hilfe-Fenster wiedergegeben, das mit Drcken der HILFE Taste des EXECUTE Befehls verknpft ist. Dieser Wert hat nur Wirkung, wenn er in der Konfigurationsdatei gespeichert und das System neugestartet wird.

$FB_CNFG: Feldbus-Konfiguartionsmodus der Steuereinheit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert eindimensionaler String-Array schreibgeschtzt keine 5.10 Stellt die verschiedenen im System vorhandenen Roboterkonfigurationen und -optionen dar: Bit 1: reserviert Bit 4: Netzwerkkarte vorhanden Bit 5: reserviert Bit 6: reserviert Bit 7: RIO/DP konfiguriert Bit 8..18: Reserviert Bit 19: RIO Karte vorhanden Bit 22: PROFIBUS DP Slave Karte vorhanden Bit 23: IBS Karte vorhanden und konfiguriert Bit 24: IBS Master Karte vorhanden und konfiguriert Bit 25: Netzwerkkarte vom Typ TCP/IP Bit 26: reserviert Bit 27: DeviceNet Slave Karte vorhanden Bit 29: zweiter HW Release fr Feldbuskarten Bit 30: C3G-EIM Karte eingesteckt Bit 31..32: reserviert

$FB_INIT: Feldbus-Initialisierungsmodus der Steuereinheit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler ganzzahliger Array schreibgeschtzt keine 5.10 Derzeit werden nur 3 Elemente dieser Variablen benutzt. Element 1 identifiziert C3G-ICA, Element 2 identifiziert PFDP und Element 3 EIM-IBS-SL. Jedes Element ist eine Bitmaske mit derselben Bedeutung wie die in $CNTRL_INIT vorhandenen Bits. Der Unterschied ist, dass $FB_INIT nur Daten fr die Feldbusse enthlt. Jedes Bit gibt an, wie verschieden Aspekte der Steuereinheit sich bei Initialisierung verhalten: 12-29

00/1200

$FLY

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Bit 1,7: reserviert Bit 8,9,10: der Wert dieser drei Bits bestimmt, wie die System-$WORDs 17,18,25,26: von der Steuereinheit C3G PLUS gehandhabt werden, wenn die Feldbusse installiert und richtig konfi guriert sind.

Vorbesetzter Bereich 8 + 8 Wrter $WORD [17/25] $WORD [18/26] $WORD [19...24] $WORD [27..32] $WORD [>32] 1^ Block $FB_INIT [ ]

Verwen- benutz- Verwendung bar dung Anwender Ja System Anwendung System System Ja Ja

benutz- Verwenbar dung

benutz- Verwenbar dung

benutz- bits 8, 9, 10 bar 111 000 001

Anwender Ja Anwender Ja Anwender Ja

Anwender Ja Anwender Ja Anwender Ja

Anwender Nein Anwender Nein Anwender Nein

Ja Ja

System Anwendung Anwendung -

Ja Ja

Anwender Ja Anwender Ja

Anwender Nein Anwender Nein

100 101

Anwendung -

Ja

Ja

Anwender Ja

Anwender Nein

110

Nein Nein

Nein Nein

Nein Nein

Anwender Ja Anwender Nein

010 011

Bit 11,15: Bit 16:

Bit 17,32:

reserviert zeigt die Bedeutung der Bits in den von Interbus-S oder Profibus DP benutzten System-$WORDs an. Wenn auf 0 gesetzt, werden die COMAU Definitionen (RIO) benutzt, bei 1 die Interbus Standard-Definitionen. reserviert

Um die Einstellungen von $FB_INIT operativ zu machen, muss die Steuereinheit neu gestartet werden.

$FDIN: Funktionstchtigkeit der digitalen Eingaben


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler boolescher Array schreibgeschtzt keine 1.00 Gibt die Funktionspunkte digitaler Eingnge wieder.

$FDOUT: Funktionstchtigkeit der digitalen Ausgaben


Speicherkategorie: Port Ladekategorie: nicht gesichert Datenklasse: eindimensionaler boolescher Array 12-30 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$FLY

Attribute: Grenzwerte: Softwareversion: Beschreibung:

keine keine 1.00 Gibt die Funktionspunkte digitaler Ausgnge wieder.

$FLY_DBUG: Austesten eines kartesischen FLY


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung ganzzahlig keine 0..0 3.30 Enthlt einen Nummerncode, der beim Austesten des Verhaltens eines kartesischen FLY hilft. Sie wird nur benutzt, wenn $FLY_TYPE auf FLY_CART gesetzt ist. Der Anwender kann nur den Wert wieder auf Null setzen. Alle anderen mglichen Werte werden von der Steuereinheit gesetzt.

$FLY_DIST: Entfernung in FLY Bewegung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real WITH MOVE; MOVE ALONG keine 3.30 Stellt den Wert fr Bahnplanung bei kartesischem FLY in mm dar. Die Variable wird nicht verwendet, wenn $FLY_TYPE auf FLY_CART gesetzt ist. Dieser Parameter hat verschiedene Bedeutungen je nach dem aktuellen Wert von $FLY_TRAJ. Der Standardwert betrgt 5 Millimeter.

$FLY_PER: Prozentsatz der Verzgerung der Fly-Bewegung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig WITH MOVE; MOVE ALONG 1..100 1.00 Gibt die prozentuale Zeit fr die berlagerung der Verzgerung einer MOVEFLY Bewegung mit der Beschleunigung der Folgebewegung an. Die Variable wird bei FLY zwischen Gelenkbewegungen benutzt, whrend sie bei kartesischem FLY nur Auswirkungen hat, wenn $FLY_TYPE auf FLY_NORM gesetz ist.

$FLY_TRAJ: Steuertyp bei kartesischem FLY


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig WITH MOVE; MOVE ALONG FLY_AUTO..FLY_TOL 3.30 Zeigt die Bedeutung von $FLY_DIST fr Bahnplanung bei kartesischem FLY an. Die Variable wird nur benutzt, wenn $FLY_TYPE auf FLY_CART gesetzt ist. Die folgenden vorbesetzten Konstanten knnen zum Setzen des Werts von $FLY_TRAJ benutzt werden: FLY_AUTO, FLY_TOL, FLY_PASS, FLY_FROM. Der Standardwert ist FLY_TOL, was erzwingt, dass die Entfernung von der Bahn zum FLY Punkt kleiner oder gleich der in $FLY_DIST gesetzten Entfernung ist. 12-31

00/1200

$FL_

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$FLY_TYPE: Art der Fly-Bewegung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig WITH MOVE; MOVE ALONG FLY_NORM..FLY_CART 1.00 Bezeichnet die Art der kartesischen Bewegung in Fly. Gltige Werte stellen die vorbesetzten Konstanten FLY_NORMAL, FLY_HIGH und FLY_CART dar. Der Standardwert ist FLY_NORMAL.

$FL_ADLMT: Begrenzer Array


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert String beschrnkter Zugriff, WITH OPEN FILE keine 2.20 Stellt ein Array von ASCII Begrenzungszeichen fr asynchrone READ Operationen dar. Der Array kann durch Einsetzen dieser Variablen in die WITH Klausel der OPEN FILE Anweisung gendert werden. Der erhaltene Begrenzer wird in den Lesepuffer gesetzt. Es knnen bis zu 16 Begrenzungszeichen angegeben werden. Wenn $FL_PASSALL nicht TRUE ist, nehmen die Tasten ENTER und die Cursor nach unten andere Funktionen an.

$FL_BINARY: Text Datenformat


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert boolesch beschrnkter Zugriff, WITH OPEN FILE keine 1.00 Gibt das Format der Daten einer Datei an. Das Standardformat ist Text, es kann aber auf binr gendert werden, indem diese Variable als TRUE in die WITH Klausel der OPEN FILE Anweisung gesetzt wird. OPEN FILE lunidx (FRED.DAT, R) WITH $FL_BINARY = TRUE

$FL_CNFG: Konfigurationsdateiname
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit String schreibgeschtzt keine 3.30 Gibt den Namen der Konfigurationsdatei an.

$FL_COMP: Begrenzungsspezifikation
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: 12-32 Feld von arm_data arm String keine 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$FL_

Grenzwerte: Softwareversion: Beschreibung:

keine 5.10 Gibt den Namen der Kompensationsdatei an, der vom Kompensationsalgorithmus benutzt wird. Es gibt eine dieser Variablen fr jeden Arm. Der Anwender kann dieser Variablen den Namen des Algorithmus zuweisen, der fr den Arm benutzt werden soll. Der Name darf NICHT die Erweiterung und die Spezifikation der Einrichtung enthalten. Wenn die Variable nicht initialisiert oder auf den Nullstring ('') gesetzt ist, sucht der Algorithmus auf der RAMDISK nach einer Datei mit der Erweiterung .ROB und mit der Armnummer als letztem Zeichen des Dateinamens. Gibt es mehr als eine solche Datei auf der RAMDISK, wird die erste mit diesen Eigenschaften (nicht notwendigerweise in alphabetischer Reihenfolge) genommen. Um den Algorithmus zu deaktivieren, muss diese Variable auf den Nullstring gesetzt und die .ROB Datei von der RAMDISK entfernt werden. Das System bringt nur dann einen Fehler zurck, wenn $FL_COMP auf einen bestimmten Wert (anders als der Nullstring) gesetzt wird und die betreffende Datei nicht auf der RAMDISK ist.

$FL_DLMT: Begrenzungsspezifizierer
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, WITH OPEN FILE 1..255 1.00 Diese Variable stellt das ASCII Begrenzungszeichen dar, das beim Lesen von Daten benutzt wird. Standardmig ist es Zeilenvorschub oder -umbruch und kann durch Einsetzen von $FL_DLMT in die WITH Klausel einer OPEN FILE Anweisung gendert werden.

$FL_ECHO: Echo-Zeichen
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert boolesch beschrnkter Zugriff, WITH OPEN FILE keine 1.00 Diese Variable gibt an, ob die in einer READ Anweisung eingegebenen Zeichen auf der entsprechenden Ausgangseinrichtung angezeigt werden sollen. Fr die Fenster hat diese Variable den Standardwert TRUE. Dies kann aber gendert werden, indem diese Variable in die WITH Klausel der OPEN FILE Anweisung gesetzt wird.

$FL_NUM_CHARS: Zeichenanzahl beim Lesen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, WITH OPEN FILE 1..80 1.00 Die Variable stellt die max. Anzahl der zu lesenden Zeichen dar. Dies kann aber gendert werden, indem diese Variable in die WITH Klausel der OPEN FILE Anweisung gesetzt wird.

$FL_PASSALL: Flag fr den Durchlauf aller Zeichen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: 00/1200 statisch nicht gesichert boolesch beschrnkter Zugriff, WITH OPEN FILE keine 12-33

$FL_

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Softwareversion: Beschreibung:

1.00 Bedeutet, da alle Zeichen ber die in der READ Anweisung benutzten Variable laufen mssen. Dies kann aber gendert werden, indem diese Variable in die WITH Klausel der OPEN FILE Anweisung gesetzt wird. Eine solche Einstellung ist ntzlich, wenn versucht werden soll, alle Eingnge von der Tastatur zu lesen.

$FL_RANDOM: Entladen Eingabe-Puffer


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert boolesch beschrnkter Zugriff, WITH OPEN FILE keine 1.03 Die Variable stellt das Verfahren fr Dateizugriff dar. Das normalerweise benutzte Verfahren ist das sequentielle Verfahren. Das kann in Direktzugriff gendert werden, indem diese Variable in einer WITH- Klausel innerhalb einer OPEN FILE Anweisung auf TRUE gesetzt wird. Es ist wichtig, diese Variable zu setzen, wenn FL_GET_POS oder FL_SET_POS benutzt werden.

$FL_RDFLUSH: Entladen Eingabe-Puffer


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert boolesch beschrnkter Zugriff, WITH OPEN FILE keine 1.03 Zeigt an, ob der Eingangspuffer vor Ausfhrung einer READ Anweisung geleert wird. Fr eine eventuelle nderung kann diese Variable in die WITH Klausel der OPEN FILE Anweisung gesetzt werden. Dies ist beim Lesen von einer seriellen Einrichtung oder einem Fenster ntzlich, wenn kein bertragungspuffer besteht.

$FL_STS: Zustand der letzten Operation auf einer Datei


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig keine 0..0 1.00 Diese Variable stellt den Zustand der letzten Operation auf einer Datei dar, die von einem bestimmten Programm ausgefhrt wurde.

$FL_SWAP: Erstes meist oder am wenigsten signifikantes Bit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert boolesch beschrnkter Zugriff, WITH OPEN FILE keine 1.00 Diese Variable legt fest, ob in einer LUN zuerst der hchste oder der niedrigste Byte eingeschrieben wird. Zur nderung mu diese Variable in der WITH Klausel der OPEN FILE Anweisung gesetzt werden.

12-34

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$GIN

$FOLL_ERR: Schleppsfehler
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung eindimensionaler ganzzahliger Array schreibgeschtzt keine 1.00 Die Variable gibt den Schleppsfehler an, der aus der Differenz zwischen Soll- und Istposition der Maschine herrhrt. Der Wert wird in Resolver-Bits angegeben.

$GEN_OVR: General override


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig schreibgeschtzt 1..100 1.00 Diese Variable drckt einen Prozentsatz aus, der fr die koordinierte Steuerung der Armgeschwindigkeit, -beschleunigung, und - verlangsamung benutzt wird. Es ist ein fr das System globaler Wert, der auf alle Arme wirkt.

$GIN: Eingabegruppe
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array schreibgeschtzt, SPS keine 1.00 Stellt eine Eingabegruppe dar.

$GOUT: Ausgabegruppe
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array SPS keine 1.00 Stellt eine Ausgabegruppe dar.

$GUN: Elektrische Schweizangen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler String-Array keine keine 5.40 Diese Variable ist eine Matrix von 3 Strings. Jedes Element enthlt den Namen einer auf die entsprechende Hilfsachse montierte Schweizange. Der Index von $GUN entspricht der Nummer der Hilfsachse, genauso wie der Index der Hilfsachse in einer Variablen XTNDPOS. Wenn die elektrische Schweizange verwaltet werden soll, initialisiert das FAMILY Tool diese Variable. 12-35

00/1200

$HLD

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$HAND_TYPE: Handtyp
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Array von Systemdaten Zugriff nur ber interne Routinen keine 1.00 Gibt den HAND Typ an. Bestimmte Eigenschaften der Hand, wie Typ (SINGLE, LINE, PULSE und DUAL), die digitalen Ausgabeverbindungen, und die Werte fr Zeitverhalten knnen mit dieser Variablen gesetzt werden.

$HDIN: Digitale Hochgeschwindigkeits-Eingabe


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler boolescher Array schreibgeschtzt keine 1.00 Gibt die Punkte der digitalen Hochgeschwindigkeitseingnge fr die Servokarte an. Die Zahl der Elemente hngt von der Zahl der Servokarten ab. Dieser Eingang kann benutzt werden, um eine schnelle Antwort fr die Aufnahme der Roboterposition oder die Armblockierung zu erhalten. Siehe interne Routinen HDIN_READ und HDIN_SET.

$HDIN_SUSP: HDIN Unterbrechen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von sc_data Servo ganzzahlig keine 0..1 4.11 Diese Variable wird auf 1 gesetzt, um das zeitweise zu unterbrechen, was der vorherige Aufruf zur Funktion HDIN_SET fr $HDIN definiert hat. Um die berwachung von $HDIN wieder zu aktivieren (wenn es vorher aktiviert war) wird $HDIN_SUSP auf 0 gesetzt. Bei Aufruf der internen Routine HDIN_SET wird $HDIN_SUSP automatisch auf 0 gesetzt. Daher sollte $HDIN_SUSP nur nach einem Aufruf von HDIN_SET gesetzt werden.

$HLD_DEC_PER: Prozentuale Verzgerung mit Hold


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler ganzzahliger Array schreibgeschtzt 100..400 3.00 Gibt den Prozentwert der Verzgerung fr jede Achse im Falle von HOLD oder LOCK an. Ein Wert 100 bedeutet dasselbe Verzgerungsprofil, das in $MTR_DEC_TIME eingesetzt ist. Ein Wert 200 bedeutet, es wird die halbe Zeit fr eine Verzgerung gebraucht.

$HOME: Ruheposition des Arms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: 12-36 Feld von arm_data Arm jointpos keine 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$IBS

Grenzwerte: Softwareversion: Beschreibung:

keine 1.00 Enthlt eine Ruheposition des Arms.

$HOUR_METER: Software Betriebsstundenzhler


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch keine eindimensionaler ganzzahliger Array schreibgeschtzt keine 5.50 Diese Variable speichert die Betriebssekunden mit DRIVE ON fr jede Maschine. Es handelt sich um einen Array mit drei Elementen, deren erstes reserviert ist und deren anderen beiden mit dem/den SCC(s) in der Steuereinheit in Beziehung stehen. Diese Variable sollte vom zweiten Element an gelesen werden.

$IBSL_INIT: IBS Slave Initialisierungsparameter


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Ein/Ausgabe eindimensionaler ganzzahliger Array keine keine 5.10 Die Variable enthlt die Initialisierungs- und Einrichtungsinformationen fr das INTERBUS Slave Protokoll. Es muss vor Benutzen der Karte in der Steuereinheit richtig initialisiert werden.

$IPERIOD: Interpolationszeitraum
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von sc_data Servo ganzzahlig keine 10..40 1.00 Diese Variable zeigt den Zeitraum fr die Erstellung der Positionsreferenzen durch den Interpolator an.

$JERK: Kontrollwerte fr Rucken


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm eindimensionaler ganzzahliger Array schreibgeschtzt 0..100 1.00 Gibt den Prozentwert des Beschleunigung- und Verzgerungszeitanteils an, der bei einer Phase konstanten Ruckens benutzt wird. Dies bedeutet eine nderung in der Beschleunigung. $JERK[1]: Bestimmt den Prozentwert des Bescheunigungszeitanteils bei konstantem Rucken. $JERK[2]: Reserviert $JERK[3]: Reserviert $JERK[4]: Bestimmt den Prozentwert des Verzgerungszeitanteils bei konstantem Rucken. 12-37

00/1200

$JNT

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$JNT_MASK: Maske der Armachsen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig schreibgeschtzt keine 1.00 Jedes Bit des INTEGER gibt an, ob die entsprechende Achse auf dem Arm vorhanden ist.

$JNT_MTURN: Prfen von Gelenkmehrfachumdrehung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm boolesch NODE-Feld, WITH MOVE; MOVE ALONG keine 5.00 Diese Variable wirkt nur auf Achsen mit einem Bereich grer 360 ($STRK_END_P[axis] $STRK_END_N[axis] > 360). Bei Setzen auf FALSE werden die Achsen auf weniger als 180 eingeschrnkt. Die Variable wirkt nur bei Gelenkbewegungen auf POSITION Ziele und kartesische Bewegungen mit $ORN_TYPE = WRIST_JNT. Der Standardwert ist TRUE, d.h. Mehrfachumdrehungen sind erlaubt.

$JNT_OVR: Joint override


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm eindimensionaler ganzzahliger Array WITH MOVE; MOVE ALONG 1..100 1.00 Stellt den prozentualen Geschwindigkeitswert fr jedes Armgelenk dar. Diese Variable reduziert die Geschwindigkeit von Beschleunigung und Verzgerung in einem solchen Verhltnis, da die Bahn konstant gehalten wird, auch wenn der prozentuale Geschwindigkeitswert verndert wird. Der Standardwert ist 100%.

$JOG_SPD_OVR: Prozentualgeschwindigkeit bei Tippbetrieb


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig keine 1..100 1.03 Stellt den prozentualen Geschwindigkeitswert fr Tippbetrieb in kartesischen Koordinaten auf einem bestimmten Arm dar. Es gibt einen Wert pro Arm. Beschleunigung und Verzgerung werden durch nderungen des Werts nicht beeinflusst. nderungen von $JOG_SPD_OVR werden bei der nchsten Sitzung in Tippbetrieb wirksam.

$LEN_ELOG: Lnge der eingespeicherten Fehler


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: 12-38 statisch Steuereinheit ganzzahlig keine 40..132 1.00 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$LIN

Beschreibung:

Die Variable stellt die max. Lnge des Fehlerstrings dar, der in der ERROR.LOG Datei gespeichert wird.

$LIN_ACC_LIM: Grenzwert der linearen Beschleunigung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real schreibgeschtzt keine 1.00 Die Variable stellt die max. lineare Beschleunigung, ausgedrckt in Meter/Sek.2 dar. Dieser Wert wird vom Bahnenplaner benutzt, wenn $SPD_OPT auf SPD_CONST gesetzt ist.

$LIN_DEC_LIM: Grenzwert der linearen Verlangsamung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm real schreibgeschtzt keine 1.00 Die Variable stellt den max. Wert der linearen Verlangsamung, ausgedrckt in Meter/Sek.2, dar. Dieser Wert wird whrend der Planung der Bahn benutzt, wenn $SPD_OPT auf SPD_CONST gesetzt ist.

$LIN_SPD: Lineare Geschwindigkeit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm real NODE-Feld, WITH MOVE; MOVE ALONG keine 1.00 Ist der Wert der Lineargeschwindigkeit in Meter/Sek fr eine kartesische Bewegung. Dieser Wert wird benutzt, wenn die Variable $SPD_OPT den Wert SPD_LIN minus die Overrides hat, vorausgesetzt da die Geschwindigkeit innerhalb des Werts von $LIN_SPD_LIM zu liegen kommt.

$LIN_SPD_LIM: Grenzwert der linearen Geschwindigkeit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real schreibgeschtzt keine 1.00 Die Variable stellt den max. Wert der linearen Geschwindigkeit, ausgedrckt in Meter/Sek. dar. Dieser Wert wird whrend der Planung der Bahn benutzt, wenn die Variable $SPD_OPT den Wert SPD_CONST einnimmt (Standard).

$LOG_TO_PHY: Erstellen der Verknpfung zwischen logischen und physikalischen E/A


Speicherkategorie: Feld von arm_data Ladekategorie: Arm 00/1200 12-39

$MAI

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung:

eindimensionaler ganzzahliger Array schreibgeschtzt keine 1.00 Zeigt die Verknpfung zwischen den Armachsen und den physikalischen Kanle, der an die Servokarte angeschlossen ist.

$MAIN_JNTP: Ziel der Hauptgelenkposition eines PATH Knotens


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert jointpos beschrnkter Zugriff, NODE-Feld keine 3.00 Siehe Beschreibung von $MAIN_POS.

$MAIN_POS: Ziel der Hauptposition des PATH Knotens


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert Position beschrnkter Zugriff, NODE-Feld keine 3.00 Die Standardknotenfelder MAIN_POS, MAIN_JNTP und MAIN_XTND knnen zur Definition der Positionsdatenklasse fr das Ziel jeden PATH Knotens benutzt werden. In der Definition eines Knotens (NODEDEF) kann nur eins dieser Felder spezifiziert werden.

$MAIN_XTND: Ziel der Haupt-Xtndpos des PATH Knotens


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert xtndpos beschrnkter Zugriff, NODE-Feld keine 3.00 Siehe die Beschreibung von $MAIN_POS.

$MAN_SCALE: Manueller Skalierfaktor


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real schreibgeschtzt keine 3.00 Gibt das Verhltnis zwischen manueller und automatischer Geschwindigkeit an.

$MASTER_INIT: Master Initialisierungsparameters


Speicherkategorie: Ladekategorie: Attribute: Grenzwerte: 12-40 statisch Ein-/Ausgabe keine keine 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$MOD

Softwareversion: Beschreibung:

4.11 Die Variable enthlt Informationen fr Initialisierung und Einrichtung des MASTERs der Feldbus-Kommunikation. Sie muss vor Benutzen der Karte in der Steuereinheit richtig initialisiert werden. Die folgende Tabelle zeigt die Bedeutung jedes Elements dieser Variablen fr die IBS Karte: [1]: Optionsmarken: Bit 1: Master Interface aktivieren Bit 2: Autokonfiguration aktivieren Bit 3: automatischer Neustart mit CLEAR-ALARM Bit 4: automatische Neukonfiguration nach Alarm [2]: Lnge des E/A-Bereichs [Wrter] [3]: Startindes Eingabe-$WORD[] [4]: Startindex Ausgabe-$WORD[] [5]: Startindex Befehls-$WORD[] [6]: Startindex Status-$WORD[] [7..20]: reserviert

$MOD_ACC_DEC: Modulation von Beschleunigung und Verzgerung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm eindimensionaler Real-Array schreibgeschtzt keine 3.10 Dieser ist ein Datensatz fr den Algorithmus, der variable Beschleunigung und Verzgerung in Funktion der Armposition steuert.

$MOD_MASK: Gelenkmodulationsmaske
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm ganzzahlig schreibgeschtzt keine 3.30 Jedes Bit der INTEGER zeigt, ob fr die betreffende Achse der Modulationsalgorithmus luft.

$MOVE_STATE: MOVE Status


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung ganzzahlig schreibgeschtzt keine 4.30 Diese Variable stellt den aktuellen Status der MOVE Umgebung dar. Mgliche Werte sind: 0 : 1 : 2 : 16 : 32 : kein MOVE ausgegeben Bewegungen warten auf Ausfhrung Bewegungen wurden unterbrochen und knnen wiederaufgenommen werden. Bewegungen laufen gerade ab. Eine Wiederherstellungsbewegung luft gerade.

00/1200

12-41

$MTR

LISTE DER VORBESETZTEN VARIABLEN

PDL2

64 :

Es gibt aktive Bewegungen in Tippbetrieb.

Der Wert dieser Variablen wird dynamisch aktualisiert. Ihr Wert muss als Bitmaske gelesen werden, da mglicherweise mehr als eine der oben genannten Situationen ansteht.

$MOVE_TYPE: Bewegungsart
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig NODE-Feld, WITH MOVE; MOVE ALONG JOINT..SEG_VIA 1.00 Gibt die fr die Bewegungsbahn zu benutzende Interpolationsart an. Gltige Werte werden von den vorbesetzten Konstanten JOINT, LINEAR und CIRCULAR dargestellt. Bei kreisfrmigen Bewegungen auf Pfaden, sollte $MOVE_TYPE zur Definition des VIA Knotens auf SEG_VIA gesetzt werden. Der Standardwert ist JOINT.

$MTR_ACC_TIME: Motor-Beschleunigungszeit
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm eindimensionaler ganzzahliger Array schreibgeschtzt keine 1.00 Die Variable stellt die min. Beschleunigungszeit fr jeden Motor in Millisek. dar.

$MTR_CURR: Stromaufnahme der Motoren


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung eindimensionaler Real-Array schreibgeschtzt keine 1.00 Die Variable enthlt den aktuellen vom Motor angeforderten Stromwert in Ampere.

$MTR_DEC_TIME: Motor-Verlangsamungszeit
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm eindimensionaler ganzzahliger Array schreibgeschtzt keine 1.00 Die Variable stellt die min. Verlangsamungszeit fr jeden Motor in Millisek. dar.

$MTR_RES: Motor-bertragungsverhltnis
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: 12-42 Feld von arm_data arm eindimensionaler Real-Array schreibgeschtzt keine 1.00 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$NET

Beschreibung:

Die Variable stellt das bertragungsverhltnis zwischen den Achsen des Motors und den Achsen des Resolvers dar.

$MTR_SPD_LIM: Motorgeschwindigkeits-Grenzwert
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm eindimensionaler ganzzahliger Array schreibgeschtzt keine 1.00 Gibt die maximale Geschwindigkeit jedes Motors in UpM an.

$MTR_TEMP: Motortemperatur
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung eindimensionaler ganzzahliger Array schreibgeschtzt keine 1.03 Die Variable stellt die Motortemperatur dar.

$NET_B: Einrichten des Ethernet Laders


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler String-Array keine keine 5.10 Diese Variable ist eine Matrix von 4 Elementen mit folgender Bedeutung: [1]: IP Serveradresse mit der Urladerdatei (z.B. 129.144.32.100) [2]: Anwender-Login fr Urladerdatei (z.B. C3G_USER) [3]: Passwort (z.B. C3G_PASS) [4]: Konfigurationsdatei (z.B. C3G_CNFG)

$NET_B_DIR: Einrichtungsverzeichnis des Ethernet Laders


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit String keine keine 5.10 Enthlt den Namen des Verzeichnisses mit der Urladerdatei (z.B. /export/home/c3g).

$NET_C_CNFG: Einstellmodi fr Ethernet Client


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: statisch Steuereinheit ganzzahliger Array keine keine 5.11

00/1200

12-43

$NET

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Beschreibung:

Diese Matrix hat zwei Elemente: das erste wird auf NET1: abgebildet, das zweite auf NET2:. Die Bits jedes Elements knnen folgende Bedeutungen annehmen: Bit 1: wenn gesetzt, erfolgt die bertragung im Binr- sonst im ASCII Modus Bit2: wenn gesetzt, werden einige Zusatzinformationen zum Anwender gesendet (Verbose) Bit 3: wenn gesetzt, ist der berschreibmodus aktiviert Bit 4-8: reserviert

$NET_C_DIR: Standardverzeichnis fr Einrichten des Ethernet Client


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit Stringarray keine keine 5.10 Diese Matrix hat zwei Elemente: das erste wird auf NET1: abgebildet, das zweite auf NET2:. Jedes Element enthlt den Namen des Standardsverzeichnisses (z.B. /home/fred). Wenn beide Elemente definiert und benutzt werden, muss der Verzeichnispfad absolut (also zum Stammverzeichnis) und nicht relativ zum letzten geffneten Verzeichnis definiert werden. Zum Absetzen des FilerView Befehls zum Inhalt von subdir1, das ein Unterverzeichnis von dir1 auf dem Hostrechner von NET1: ist, sollte die Variable auf $NET_C_DIR[1] := gesetzt werden.

$NET_C_HOST: Einrichten des Ethernet auf dem Remote Host


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit Stringarray keine keine 5.10 Diese Matrix hat zwei Elemente: das erste wird auf NET1: abgebildet, das zweite auf NET2:. Jedes Element enthlt den Namen des abgesetzten Wirtsrechners (z.B. ibm_server).

$NET_C_PASS: Einrichten des Ethernet Client Passworts


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit Stringarray keine keine 5.10 Diese Matrix hat zwei Elemente: das erste wird auf NET1: abgebildet, das zweite auf NET2:. Jedes Element enthlt den Namen des Passworts (z.B. Smith).

$NET_C_USER: Einrichten des Ethernet Client Login Namen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit Stringarray keine keine 5.10 Diese Matrix hat zwei Elemente: das erste wird auf NET1: abgebildet, das zweite auf NET2:. Jedes Element enthlt den Login Namen (z.B. Pippo).

12-44

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$NET

$NET_I_INT: Ethernet Network Information (Integer)


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler ganzzahliger Array schreibgeschtzt keine 5.10 Diese Variable ist eine Matrix von zwei Elementen mit folgender Bedeutung: [1]: Zahl der aktiven Server [2]: Statusinformation

$NET_I_STR: Ethernet Netzwerkinformation (Strings)


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit zweidimensionaler ganzzahliger Array schreibgeschtzt keine 5.10 Diese Variable ist eine Matrix von zwei Elementen mit folgender Bedeutung: [1]: Liste der angeschlossenen Wirtsrechner [2]: Liste der angeschlossenen Anwender

$NET_L: Lokale Einrichtung des Ethernet


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler String-Array keine keine 5.10 Diese Variable ist eine Matrix von drei Elementen mit folgender Bedeutung: [1]: IP Adresse dieser Karte(z.B. 129.144.32.100) [2]: Host ID, d.h. der Name dieser Karte (z.B. Robot1). Dies Element sollte keine Strings lnger als 8 Zeichen enthalten, damit ein gutes Funktionieren des FTP Protokolls gewhrleistet ist. [3]: Subnet Maske (z.B. 255.0.0)

$NET_S_INT: Einrichten von Ethernet Netzwerk Servern (Integer)


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler String-Array keine keine 5.10 Diese Variable ist eine Matrix von drei Elementen mit folgender Bedeutung: [1]: Zahl der Server [2]: Zeitberschreitung fr einen Server in Minuten [3]: Server Anlaufzeit

00/1200

12-45

$NUM

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$NET_S_STR: Einrichten von Ethernet Netzwerk Servern (Strings)


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit zweidimensionaler Stringarray keine keine 5.10 Diese Variable ist eine Matrix von drei Elementen mit folgender Bedeutung: [1,*]: Liste der Anwender, die sich an diesen Server anschlieen knnen (z.B. doug, jerry, tom) [2, *]: Liste der Anwender-Passwrter(z.B.. fred, bill) [3, *]: Zugriffsrechte der Anwender (z.B. rwods, rw, r)

$NOLOG_ERROR: Meldungen von Registrierung ausschlieen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler String-Array keine keine 5.10 Diese Variable ist eine Matrix von 8 Elementen. Wenn in sie ein Fehlercode geladen wird und der betreffende Fehler aufritt, wird er nicht in der Datei error.log registriert. Element 1 ist standardmig auf 28694 gesetzt.

$NUM_ARMS: Armanzahl
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig schreibgeschtzt 1..16 1.00 Die Variable stellt die Anzahl der im System vorhandenen Arme dar.

$NUM_AUX_AXES: Anzahl der Hilfsachsen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm ganzzahlig schreibgeschtzt keine 1.00 Die Variable stellt die Anzahl der Hilfsachsen fr einen bestimmten Arm dar.

$NUM_DEVICES: Anzahl der Einrichtungen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig keine 4..20 1.00 Die Variable stellt die max. Anzahl der gleichzeitig definierbaren Einrichtungen dar.

12-46

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$NUM

$NUM_ELOG: Anzahl der eingespeicherten Fehler


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig keine 0..200 1.00 Gibt die Anzahl der in der ERROR.LOG Datei gespeicherten Fehler an.

$NUM_JNT_AXES: Anzahl der Gelenke


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm ganzzahlig schreibgeschtzt keine 1.00 Die Variable stellt die Anzahl der Gelenke fr einen bestimmten Arm dar.

$NUM_LUNS: Anzahl der LUNs


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig keine 1..25 1.00 Die Variable stellt die max. Anzahl der gleichzeitig benutzbaren LUNs (Logical Unit Numbers) dar.

$NUM_MB: Anzahl der Bewegungspuffer


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig keine 5..50 1.00 Die Variable stellt die Anzahl der konkurrierenden Bewegungen dar, die sich gleichzeitig auf der Ausfhrungszeile befinden drfen.

$NUM_MB_AHEAD: Anzahl von Vorgriffpuffern fr Bewegungen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig keine 2..30 4.10 Stellt die Anzahl von Bewegungspuffern zum Vorgriff bei Ausfhren von Pfaden dar. Diese Variable ist besonders ntzlich, wenn sehr enge Pfadknoten ausgefhrt werden, da so die Bewegungsausfhrung verbessert wird.

$NUM_PROGS: Anzahl der aktiven Programme


Speicherkategorie: statisch Ladekategorie: keine 00/1200 12-47

$NUM

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung:

ganzzahlig schreibgeschtzt keine 1.00 Die Variable stellt die Anzahl der im System vorhandenen aktiven PDL2 Programme dar.

$NUM_SCRNS: Anzahl der Bildschirme


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig keine 4..12 3.00 Gibt die Zahl der auf PDL2 Programmebene verfgbaren Bildschirme an. Der Anwender kann mit den internen Routinen SCRN_CREATE, SCRN_DEL, SCRN_ADD und SCRN_REMOVE Bildschirme erstellen, lschen, hinzufgen und entfernen. Dieser Wert kann vom Anwender gendert werden. Die nderung wird nur wirksam, wenn sie in der Konfigurationsdatei gespeichert und die Steuereinheit neu gestartet wird. Der Standardwert dieser Systemvariablen ist 6.

$NUM_SC_BOARDS: Anzahl der Servosteuerkarten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig schreibgeschtzt 1..4 1.00 Die Variable stellt die Anzahl der im System vorhandenen Servokarten dar.

$NUM_TIMERS: Anzahl der $TIMER


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig keine 1..50 1.00 Stellt die Anzahl von Zeitgebern mit 10 msek Auflsung dar, die auf PDL2 Programmebene verfgbar sind.

$NUM_TRACES: Anzahl der von einer Spur benutzten Zeilen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig keine 8..256 1.00 Die Variable stellt die Anzahl der gespeicherten Spurzeilen dar.

$NUM_WEAVES: Schwingungszahl ($WEAVE_TBL)


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: 12-48 statisch nicht gesichert ganzzahlig schreibgeschtzt 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$OP_

Grenzwerte: Softwareversion: Beschreibung:

1..16 3.00 Gibt die Zahl der auf PDL2 Programmebene verfgbaren Elemente der Oszillationstabelle an.

$ON_POS_TBL: ON POS Tabellendaten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch keine eindimensionaler ganzzahliger Array keine keine 5.50 $ON_POS_TBL ist ein Array mit 8 Elementen. Jedes enthlt die $OP_XXX Felder.

$OP_JNT: On Pos jointpos


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von on_pos_tbl Steuereinheit jointpos schreibgeschtzt keine 5.52 Diese ist die Gelenkposition, die mit einem Element der $ON_POS_TBL assoziiert ist. Da es sich um eine schreibgeschtzte Variable handelt, kann ihr ein Wert nur mit der Systemroutine ON_JNT_SET zugewiesen werden.

$OP_JNT_MASK: On Pos Joint Mask


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von on_pos_tbl Steuereinheit Integer schreibgeschtzt keine 5.52 Dies ist die Maske der Gelenke, die berwacht werden, wenn die Funktion On Pos die Variable $ON_POS_TBL[on_pos_idx].OP_JNT benutzt. Falls die Maske 0 ist, wird $ON_POS_TBL[on_pos_idx].OP_POS benutzt. Diese Maske nimmt den Wert an, der der Systemroutine ON_JNT_SET als Parameter bergeben wird.

$OP_POS: On Pos Position


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von on_pos_tbl Steuereinheit position keine keine 5.50 Dies ist die mit einem Element von $ON_POS_TBL assoziierte Position.

$OP_REACHED: Flag fr On Pos Position erreicht


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: 01/0401 Feld von on_pos_tbl Steuereinheit boolesch schreibgeschtzt 12-49

$OP_

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Grenzwerte: Softwareversion: Beschreibung:

keine 5.50 Falls $ON_POS_TBL[on_pos_index].OP_REACHED gleich TRUE ist, ist der Arm in einer Kugel um die Position $ON_POS_TBL[on_pos_index].OP_POS Position.

$OP_TOL_DIST: On Pos-Jnt Toleranzabstand


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Real schreibgeschtzt keine 5.50 Diese Variable enthlt eine Toleranz in Millimetern. Der Wert bezieht sich auf: die Koordinaten X, Y, Z der tatschlichen kartesischen Roboter POSITION in bezug auf $ON_POS_TBL[on_pos_idx].OP_POS; die linearen Gelenke der tatschlichen JOINTPOS in bezug auf $ON_POS_TBL[on_pos_idx].OP_JNT. Die Funktion ON_POS muss aktiviert werden (ON_POS(ON,..)), nachdem sie auf der POSITION (ON_POS_SET) oder auf der JOINTPOS (ON_JNT_SET) definiert wurde.

$OP_TOL_ORNT: On Pos-Jnt Toleranzausrichtung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Real schreibgeschtzt keine 5.50 Diese Variable enthlt eine Toleranz in Grad. Der Wert bezieht sich auf: die drei Eulerschen Winkel der tatschlichen kartesischen Roboter POSITION in bezug auf $ON_POS_TBL(on_pos_idx).OP_POS die Drehgelenke der tatschlichen JOINTPOS in bezug auf $ON_POS_TBL[on_pos_idx]OP_JNT. Die Funktion ON_POS muss aktiviert werden (ON_POS(ON,..)), nachdem sie auf der POSITION (ON_POS_SET) oder auf der JOINTPOS (ON_JNT_SET) definiert wurde.

$OP_TOOL: Das On Pos Tool


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von on_pos_tbl Steuereinheit Position keine keine 5.50 Diese Variable ist das Tool, das mit $ON_POS_TBL[on_pos_idx].OP_POS assoziiert ist. Sie muss immer initialisiert sein, es sei denn $ON_POS_TBL[on_pos_idx].OP_TOOL_DSBL ist auf TRUE gesetzt.

$OP_TOOL_DSBL: Flag On Pos Tool deaktiviert


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von on_pos_tbl Steuereinheit boolesch keine keine 5.50 Wenn diese Variable TRUE ist, wird das Tool nicht beim Bewerten des Erreichens von $ON_POS_TBL[on_pos_idx].OP_POS bercksichtigt.

12-50

01/0401

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$OT_

$OP_TOOL_RMT: Flag On Pos Ferntool


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von on_pos_tbl Steuereinheit boolesch keine keine 5.50 Wenn TRUE, ist das Ferntool fr das betreffende Element $ON_POS_TBL aktiviert. In diesem Fall sollte $ON_POS_TBL[on_pos_idx].OP_TOOL_DSBL auf FALSE gesetzt werden und $ON_POS_TBL[on_pos_idx].OP_POS, $ON_POS_TBL[on_pos_idx].OP_TOOL sowie $ON_POS_TBL[on_pos_idx].OP_UFRAME mssen alle initialisiert sein.

$OP_UFRAME: Der On Pos UFRAME


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von on_pos_tbl Steuereinheit Position keine keine 5.50 Dies ist das mit einem bestimmten Element von $ON_POS_TBL verknpfte Anwenderreferenzsystem.

$ORNT_TYPE: Ausrichtungsart
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig KNOTE-Feld, WITH MOVE; MOVE ALONG EUL_WORLD..RS_TRAJ 1.00 Die Variable stellt die Entwicklungsart der Ausrichtung fr die Bewegungsausfhrung dar. Gltige Werte sind die vorbesetzten Konstanten EUL_WORLD (3 Winkel), RS_WORLD (2 Winkel in bezug auf Welt), RS_TRAJ (2 Winkel in bezug auf die Bahn) und WRIST_JNT (Handgelenk). Der Standardwert ist RS_WORLD.

$OT_COARSE: Anzeige fr auf Bahn


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung boolesch schreibgeschtzt keine 5.50 Diese BOOLEsche Variable zeigt an, ob der TCP (Tool Center Point) auf der Bahn ist (TRUE) oder nicht (FALSE).

$OT_JNT: On Trajectory joint position


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung jointpos schreibgeschtzt keine 5.50 Dies ist die aktuelle Position der Roboterachsen (JOINTPOS) in der Bahn. Der Wert wird bei jedem Stoppen des Roboter aktualisiert. 12-51

01/0401

$OT

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$OT_POS: Position auf Bahn


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung Position schreibgeschtzt keine 5.50 Dies ist die aktuelle Roboterposition (POSITION) auf der Bahn. Der Wert wird jedesmal aktualisiert, wenn der Roboter stoppt.

$OT_TOL_DIST: Toleranzabstand auf Bahn


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Real schreibgeschtzt keine 5.50 Diese Variable enthlt die Toleranz (in mm bezogen auf die Koordinaten X, Y und Z) der aktuellen Roboterposition im Verhltnis zu $CRNT_DATA[arm].OT_POS. Damit wird auch die Toleranz fr die linearen Hilfsachsen ausgedrckt.

$OT_TOL_ORNT: Ausrichtung auf Bahn


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Real schreibgeschtzt keine 5.50 Diese Variable enthlt die Toleranz (in Grad bezogen auf die Eulerschen Winkel) der aktuellen Roboterposition im Verhltnis zu $CRNT_DATA[arm].OT_POS. Damit wird auch die Toleranz fr die linearen Hilfsdrehachsen ausgedrckt.

$OT_TOOL: TOOL Position auf Bahn


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung Position schreibgeschtzt keine 5.50 Dies ist das TOOL Referenzsystem $CRNT_DATA[arm_num].OT_POS.

bezogen

auf

die

Position

$OT_TOOL_RMT: Flag Ferntool auf Bahn


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung boolesch schreibgeschtzt keine 5.50 Wenn diese Variable TRUE ist, ist $CRNT_DATA[arm_num].OT_POS aktiviert.

das

Ferntool

fr

die

Variable

12-52

01/0401

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$PAR

$OT_UFRAME: Anwenderreferenzsystem auf Bahn


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung Position schreibgeschtzt keine 5.50 Dies ist das Anwenderreferenzsystem $CRNT_DATA[arm_num].OT_POS.

bezogen

auf

die

Position

$OT_UNINIT: Flag Position auf Bahn nicht initialisiert


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung boolesch schreibgeschtzt keine 5.50 Wenn TRUE ist die Variable $CRNT_DATA[arm_num].OT_POS nicht initialisiert.

$PAR: Knoten-MOVE-Variable
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig WITH MOVE keine 5.10 Diese Variable kann in der WITH Klausel einer MOVE Anweisung benutzt werden, um den Modus mit Knoteninterpretation einer MOVE Anweisung zu implementieren. Dies besteht darin, das INTEGER Ergebnis eines Anwender-geschriebenen Funktionsaufrufs der $PAR Variablen zuzuweisen. Die Parameter dieser Funktion sollten die Werte sein, die den vorbesetzten Bewegungsvariablen zugewiesen werden sollen, die bei der Bewegung angewandt werden. Wenn die Parameter ihrerseits Funktionsaufrufe sind, sollten diese so kurz wie mglich sein, um nicht die Ausfhrung jeder Bewegung zu verlangsamen. Ein Beispiel: -- Routine zur Berechnung von Tool und Frame, exportiert aus dem Programm pex5 ROUTINE tl_fr(ai_tool_idx,ai_frame_idx: INTEGER): INTEGER EXPORTED FROM pex5 ROUTINE velo(ai_spd: INTEGER): INTEGER BEGIN $ARM_SPD_OVR := ai_spd RETURN(0) END velo ROUTINE ter(ai_term: INTEGER): INTEGER BEGIN $TERM_TYPE := ai_term RETURN(0) END ter ROUTINE func(par1,par2,par3: INTEGER):INTEGER BEGIN RETURN(0) END func MOVE JOINT TO jnt0001p WITH $PAR = func(tl_fr (1,3),velo(20),ter(NOSETTLE)) MOVE JOINT TO jnt0002p WITH $PAR = func(tl_fr (1,3),velo(20),ter(NOSETTLE)) MOVE LINEAR TO pnt0001p WITH $PAR = func(tl_fr (1,2),velo(40),ter(COARSE))

00/1200

12-53

$PIO

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Einige Ratschlge zur Verwendung von $PAR: Mit $PAR sollten folgende Namen nicht benutzt werden, da sie fr eine spezielle Anwendung reserviert sind: tf, rtf, v, vl, zone, gp, mp, ap, orn. Die mit $PAR durch WITH verknpfte Funktion(die Funktion func im obigen Beispiel) sollte immer Null zurckbringen. Wenn die $PAR Variable fr MOVE Anweisungen herangezogen wird, ist es eine gute Programmierregel, sie in jeder Bewegung zu benutzen. Von gemischter Programmierung (nodal und modal) ist abzuraten. Wenn eine MOVE Anweisung mehrfache WITH Klauseln enthlt (eine Programmierweise, die nicht zu empfehlen ist), sollte die Klausel WITH $PAR die erste sein, andernfalls htten die anderen WITH Klauseln keine Wirkung. In der MOVE Anweisung sollte immer der Bahntyp (LINEAR, JOINT, CIRCULAR) angegeben sein.

$PIO_GINTBL: Tabelle der Eingabegruppen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Eingabe/Ausgabe Systemdaten Zugriff nur ber interne Routinen, schreibgeschtzt keine 1.00 Die Tabelle enthlt die Beschreibung der Zusammenfassung der digitalen Eingabepunkte zur Bildung einer Eingabegruppe.

$PIO_GOUTTBL: Tabelle der Ausgabegruppen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Eingabe/Ausgabe Systemdaten Zugriff nur ber interne Routinen, schreibgeschtzt keine 1.00 Die Tabelle enthlt die Beschreibung der Zusammenfassung der digitalen Ausgabepunkte zur Bildung einer Ausgabegruppe.

$PIO_LOGTBL: Logische Ein-/Ausgabentabelle


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Eingabe/Ausgabe Systemdaten Zugriff nur ber interne Routinen, schreibgeschtzt keine 1.00 Zeigt die Verknpfung zwischen den physikalischen E/As und dem internen IMAGE Bereich.

$PLCSTW: SPS Status-Wort


Speicherkategorie: Port Ladekategorie: nicht gesichert Datenklasse: eindimensionaler ganzzahliger Array 12-54 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$PRO

Attribute: Grenzwerte: Softwareversion: Beschreibung:

SPS keine 1.00 Enthlt Informationen ber den Status des SPS Systems und der E/As. Fr mehr Information siehe das C3G SPS Handbuch.

$PROFDP_INIT: Profibus DP Initialisierungsparameter


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Eingabe/Ausgabe eindimensionaler ganzzahliger Array keine keine 5.10 Diese Variable enthlt Informationen zum Initialisieren und Einrichten fr Profibus DP, das auf der PFDP luft. Sie muss richtig initialisiert werden, ehe der Annex in der Steuereinheit benutzt werden kann. Die Variable ist eine Matrix von 10 Elementen mit folgender Bedeutung: [1]: dies ist eine Bitmaske, wo: wenn auf 1 gesetzt, anzeigt, dass das Protokoll aktiBit 1: viert ist; andernfalls nimmt die Steuereinheit an, dass die PFBP Karte nicht vorhanden ist. Um operative nderungen an diesem Bit vorzunehmen, muss die Steuereinheit (Kalt oder warm) neu gestartet werden. Bit 2: wenn auf 1 gesetzt, erlaubt dies, die SPS logisch von der Steuereinheit zu trennen, obwohl die Kommunikation weiter aktiviert bleibt. Es werden nur die Systemausgnge aber nicht die Eingnge aktualisiert. Bit 3: konfiguriertes Protokoll Bit 4..5: reserviert Bit 6: wenn auf 1 gesetzt, ist die SPS in Wrtern (16 Bit) und nicht in Bytes (8 Bit) konfiguriert. Bit 7,8: reserviert Bit 9 reserviert wenn auf 1 gesetzt, tauscht die Steuereinheit die ByBit 10: tes der Ein-/Ausgabe $WORDs. Dies geschieht, um mit allen fr die SPS mglichen Notationen kompatibel zu sein. Bit 11..16: reserviert Bit 17,18,19: Modularitt Bit 20..32: Reserviert [2]: reserviert, es muss mit 0 initialisiert werden. [3]: Slave Adresse. Gltige Adressen 3 - 124. [4]: Slave ID Nummer. Diese Nummer identifiziert die C3G auf dem PROFIBUS. [5]: Modulkonfiguration (wenn eins vorhanden ist) [6]: Zahl der $WORDs, die als Anwenderwrter definiert sind. [7]: Wenn die Summe aus System- und Anwenderwrter grer als 8 ist, muss der Index angegeben werden, an dem der zweite Block beginnt, wo die Daten vom PROFIBUS kopiert werden sollen. Andernfalls muss dieses Element gelscht werden. Wenn das Interface primr ist, sollte dieses Element gelscht werden. Andernfalls, wenn das Interface sekundr ist, enthlt dieses Element den Index, von dem ab die vom PROFIBUS kommenden Daten kopiert werden. 12-55

00/1200

$PRO

LISTE DER VORBESETZTEN VARIABLEN

PDL2

[8]:

[9]: [10]:

Bit 1: Bit 2: Bit 3:

Bit 4: Bit 5: Bit 6:

In diesem Fall muss der Wert grer als 32 sein und Element 7 ist nur von Bedeutung, falls die Zahl von Anwenderwrtern grer als 8 ist. reserviert, muss mit 0 initialisiert werden. normalerweise muss dieses Element gelscht werden. Es ist nur in der Phase der Netzwerkinstallation von Nutzen, wenn einige Daten wie PROFIBUS Parameter und Konfigurationsdaten, die von der SPS kommen, geprft werden mssen. Es kann gebraucht werden, um den Grad von Einzelheiten in Systemmeldungen zu erhhen. In diesem Fall kann mit der folgenden Bitmaske gearbeitet werden: reserviert wenn auf 1 gesetzt, bringt es einige Meldungen ber die Konfiguration der C3G und der SPS. wenn auf 1 gesetzt, wird die Datei PRDPCNFG.LOG angelegt. Diese Datei enthlt die Konfigurationsdaten der C3G und der SPS. wenn auf 1 gesetzt, werden Meldungen ber die Parametrisierung zwischen der SPS und der C3G geliefert. wenn auf 1 gesetzt, wird PRDPPRMT.LOG angelegt. Diese Datei enthlt die SPS Parameter. reserviert

$PROG_ACC_OVR: Prozentsatz der Beschleunigung des Programms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig WITH MOVE 1..100 1.00 Die Variable drckt den Prozentsatz des Beschleunigungsprofils fr die Bewegung eines bestimmten Programms aus. Eine nderung der Variablen hat keine Auswirkung auf die Geschwindigkeit oder Verzgerung. Sie wird nur vor dem Beginn der Bewegung in der Phase der Bewegungsprogrammierung benutzt. Eine nderung der Variable hat keine Auswirkung auf die aktive Bewegung, aber sie wird fr die neue benutzt.

$PROG_ARM: Arm eines Programms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig schreibgeschtzt keine 1.00 Die Variable stellt den aktuellen Arm fr dieses Programm dar. Wenn die Angabe der Armnummer fehlt, benutzen die Anweisungen und die Ausdrcke, die diese Nummer erfordern, diesen Wert. Wenn das Programmattribut PROG_ARM nicht angegeben wird, wird der Wert $DFT_ARM benutzt. Die Werte gehen von 1 bis 32.

12-56

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$PRO

$PROG_CNFG: Programmkonfiguration
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Bit 1: Programmstack nicht gesichert ganzzahlig keine keine 3.20 Bestimmte Aspekte der Programmausfhrung knnen mit dieser vorbesetzten Programmvariablen gesteuert werden. Die verschiedenen Bits bedeuten folgendes. keine Sicherheitsreduzierung der Geschwindigkeit nach Unterbrechung der Programmausfhrung. Bit 2: keine Sicherheitsreduzierung der Geschwindigkeit ber der ersten Bewegung. Bit 3: Das Programm kann unter besonderen Umstnden keinen Ausgang setzen: a: wenn durch ein aktives Programm in den PROG Zustand versetzt. b: wenn im PROG Zustand durch Ausfhren der Anweisung auf der BK, falls das PHG angeschlossen ist und die "PHG am Schrank"-Schalter freigegeben sind. c: wenn im PROG Zustand unter MEMORY DEBUG auf der BK, falls das PHG angeschlossen ist und die "PHG am Schrank"-Schalter freigegeben sind. d: wenn der PROG/AUTO Schalter auf den AUTO Zustand gestellt wurde und die "PHG am Schrank"-Schalter noch freigegeben sind. Wird von $CNTRL_CNFG (Bit 3) kopiert, wenn das Programm aktiviert wird. Bit 4: Das Programm kann vom Befehlsmen aus nicht deaktiviert werden. Wenn aus MEMORY DEBUG oder EXECUTE eine Deaktivierung angefordert wird, wird das Programm immer noch deaktiviert. Wenn das Programm HOLD fhig ist und der erste START nach Aktivierung noch nicht gedrckt wurde, kann das Programm noch deaktiviert werden. Bit 5: wenn gesetzt, lst WAIT FOR nicht aus, wenn das Programm in HOLD ist. Bit 6: wenn gesetzt, geht das Programm bei einem SYS_CALL Fehler nicht in Pause hnlich wie bei Absetzen einer ERR_TRAP_ON (39960). Es ist zu beachten, dass auch der Fehler 39960 nicht abgefangen wird, wenn das Bit den Wert 1 hat. Bit 7: wenn gesetzt, erfolgt der Speicherzugriff mit den Systemvariablen $PROG_UBIT/BYTE/WORD/LONG/ADDR/LEN im Supervisormodus (eine spezifische Zugriffsart auf dem VME Bus fr einige Karten). Bit 8-32: reserviert.

$PROG_CONDS: Fr ein Programm definierte Bedingungen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Programmstack nicht gesichert eindimensionaler ganzzahliger Array schreibgeschtzt keine 1.03

00/1200

12-57

$PRO

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Beschreibung:

Stellt die z.Z. fr das Programm definierten Bedingungshandler dar. Jedes Element dieser Variablen sollte als eine Bitmaske gelesen werden, in der jedes Bit der Nummer eines Bedingungshandlers entspricht. In jedem Element sind nur die Bit 1 - 30 signifikant (die Bits 31 und 32 sollten ignoriert werden). Das folgende Beispiel zeigt, wie diese Variable gelesen werden sollte, um zu verstehen, welche Bedingungen fr ein bestimmtes Programm definiert sind. Angenommen fr ein Programm sind die Bedingungshandler 1, 30, 31 und 32 definiert: $PROG_CONDS[1] ist dann 0x20000001 (Bits 1 und 30 auf 1 gesetzt) und $PROG_CONDS[2] ist 0x3 (Bits 1 und 2 set gesetzt). Die restlichen Bits sind gleich 0.

$PROG_DEC_OVR: Prozentsatz der Verlangsamung des Programms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig WITH MOVE 1..100 1.00 Die Variable drckt den Prozentsatz des Verlangsamungsprofils aus. Eine nderung des Werts hat keine Auswirkung auf Beschleunigung oder Geschwindigkeit. Sie wird nur whren der Bewegungs-Planungsphase benutzt, bevor die Bewegung beginnt. Eine nderung der Variablen beeinflusst nicht die laufende Bewegung, sondern wird fr alle neuen Bewegungen wirksam.

$PROG_NAME: Name des ausfhrenden Programms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert String schreibgeschtzt keine 4.30 Stellt den Namen des ausfhrenden Programms dar. Diese Variable ist besonders ntzlich, um in der Umgebung einer Bibliotheksroutine zu bestimmen, welches das aufrufende Programm ist und abhngig davon unterschiedliche Aktionen zu unternehmen. Es ist zu beachten, dass der Name in Grobuchstaben gespeichert ist.

$PROG_SPD_OVR: Prozentsatz der Programmgeschwindigkeit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig WITH MOVE 1..100 1.00 Die Variable drckt den Prozentsatz des Geschwindigkeitsprofils fr die Bewegung des Programms aus. Eine nderung der Variablen hat keinen Einflu auf Beschleunigung oder Verzgerung.

$PROG_UADDR: Adresse der fr ein Programm Anwender-definierten Speicherzugriffsvariablen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: 12-58 Programmstack nicht gesichert eindimensionaler ganzzahliger Array keine 1048576..2130706432 4.10 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$PRO

Beschreibung:

Diese Variable hat dieselbe Bedeutung wie $USER_ADDR. Der Unterschied ist, dass es pro Programm eine $PROG_UADDR geben kann, aber nur eine $USER_ADDR fr das ganze System. Sie wird benutzt, um die Speicherstartadresse fr $PROG_UBIT, $PROG_UBYTE, $PROG_UWORD und $PROG_ULONG zu setzen, die zum selben Programm gehren.

$PROG_UBIT: Fr ein Programm Anwender-definierter Bitspeicher


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler Boole'scher Array keine keine 4.10 Diese Variable hat diesselbe Bedeutung wie $USER_BIT und wird benutzt, um auf ein Bit in einem Speicherplatz zuzugreifen. Der Unterschied ist, dass es pro Programm eine $PROG_UBIT geben kann, aber nur eine $USER_BIT fr das ganze System.

$PROG_UBYTE: Fr ein Programm Anwender-definierter Bytespeicher


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array keine keine 4.10 Diese Variable hat diesselbe Bedeutung wie $USER_BYTE und wird benutzt, um auf einen Speicherplatz zuzugreifen. Der Unterschied ist, dass es pro Programm eine $PROG_UBYTE geben kann, aber nur eine $USER_BYTE fr das ganze System.

$PROG_ULEN: Lnge der fr ein Programm Anwender-definierten Speicherzugriffsvariablen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert eindimensionaler ganzzahliger Array keine 0..65535 4.10 Stellt die Speicherlnge dar, auf die angefangen mit der Adresse in $PROG_UADDR im selben Programm mit $PROG_UBIT, $PROG_UBYTE, $PROG_UWORD oder $PROG_ULONG zugegriffen werden kann.

$PROG_ULONG: Fr ein Programm Anwender-definierter Langwortspeicher


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array keine keine 4.10 Diese Variable hat diesselbe Bedeutung wie $USER_LONG und wird benutzt, um auf ein Langwort (4 Bytes) an einem Speicherplatz zuzugreifen. Der Unterschied ist, dass es pro Programm eine $PROG_ULONG geben kann, aber nur eine $USER_LONG fr das ganze System.

00/1200

12-59

$PRO

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$PROG_UWORD: Fr ein Programm Anwender-definierter Wortspeicher


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array keine keine 4.10 Diese Variable hat diesselbe Bedeutung wie $USER_WORD und wird benutzt, um auf ein Wort (2 Bytes) an einem Speicherplatz zuzugreifen. Der Unterschied ist, dass es pro Programm eine $PROG_UWORD geben kann, aber nur eine $USER_WORD fr das ganze System.

$PWR_ADDR: Netzgertetyp
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von sc_data Servo eindimensionaler ganzzahliger Array schreibgeschtzt keine 1.00 Die Variable enthlt die Adresse der seriellen Leitung des Netzgerts/der Netzgerte fr die Antriebe.

$PWR_RCVR: Wiederanlauf nach Ausfall der Stromversorgung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig keine keine 1.00 Gibt die Art an, in der nach einer Stromunterbrechung wieder gestartet wird. Null bedeutet, da die Steuereinheit nach einem Stromausfall nicht wieder im selben Zustand startet, sondern so als ob ein Warmstart eingegeben worden wre. Ein Wert von 1 bedeutet, die Steuereinheit wird wieder in denselben Zustand gebracht wie vor dem Stromausfall. Der Wert hngt von der Eingabe von CNTRL_SET(1,1) ab. Der Standard ist volles Wiederaufsetzen nach Stromausfall. Es ist zu beachten, dass der Wert von $PWR_RCVR nur bercksichtigt wird, wenn die Systemroutine CNTRL_SET(1,1) mindestens einmal ausgefhrt und danach das System neu gestartet wurde. Sonst ist $PWR_RCVR nicht signifikant. Man braucht jedoch kein CNTRL_SET(1,1) abzusetzen, wenn CNTRL_SET(1,0) noch nicht ausgefhrt wurde, da die Prozedur zum Wiederanlauf nach Stromausfall standardmig aktiviert ist.

$RAD_IDL_QUO: Maschinenposition
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung eindimensionaler Real-Array schreibgeschtzt keine 1.00 Zeigt die ideale Position und bercksichtigt keine eventuelle gegenseitige Beeinflussung der Achsen.

12-60

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$RAD

$RAD_TARG: Zielposition
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung eindimensionaler Real-Array schreibgeschtzt keine 1.00 Die Variable stellt die gewnschte Maschinenposition in Radianten oder Millimetern dar.

$RAD_VEL: Armgeschwindigkeit in Radianten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung eindimensionaler Real-Array schreibgeschtzt keine 1.00 Die Variable stellt die gewnschte Maschinengeschwindigkeit in Radianten pro Schritt oder Millimetern pro Schritt dar.

$RBT2_CNFG: Roboterkartenkonfiguration
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig schreibgeschtzt keine 5.40 Diese Variable ist eine Erweiterung der $RBT_CNFG. Derzeit sind folgende Bits definiert: Bit 1: SWIM1 Karte konfiguriert Bit 2: SWIM2 Karte konfiguriert Bit 16: SWIM1 Karte eingesteckt Bit 17: SWIM2 Karte eingesteckt

$RBT_CNFG: Konfiguration der Roboterkarte


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig schreibgeschtzt keine 1.00 Stellt die verschiedenen Roboterkonfigurationen und -optionen im System dar (Bits 27 - 32 werden nicht benutzt): Bit 1: Reserviert Bit 2: Integriertes Diskettenlaufwerk (FD:) vorhanden Bit 3: Mathematischer Koprozessor fr Gleitkomma vorhanden Bit 4: Netzkarte vorhanden Bit 5-6: Reserviert Bit 7: RIO/NIO/SL2 konfiguriert Bit 8: reserviert Bit 9..11: Geladene Sprachen: 0: Englisch 1: Italienisch

00/1200

12-61

$RB_

LISTE DER VORBESETZTEN VARIABLENPDL2

Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit

2: 3: 4: 5: 12..16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:

Franzsisch Deutsch Spanisch Portugiesisch Reserviert IOS1 vorhanden IOS2 vorhanden RIO vorhanden IWELD vorhanden zweite IWELD Karte vorhanden IPROFIBUS DP Slave Karte vorhanden IBS Karte vorhanden und konfiguriert IBS Master vorhanden und konfiguriert Netzwerk Karte vom Typ TCP/IP reserviert DeviceNet Slave Karte vorhanden C3G PLUS Schrank zweiter HW Release der Feldbus Karten C3G-EIM Karte eingesteckt reserviert reserviert

$RB_FAMILY: Familie des Roboterarms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig schreibgeschtzt keine 1.00 Die Variable stellt die Codenummer der Roboterfamilie dar, der der Arm angehrt. Die verschiedenen Familien sind: 1: SMART Arm 2: MAST Arm 3: SCARA Arm 4: C3G PLUS Arm (ohne inverse und direkte Kinematik) 5: PMAST Arm 6: ZYLINDRISCHER Arm 7: TRICEPT HP1 Arm 7: SNAP 9..14: Reserviert 15: S3 Arm 16..17: Reserviert 18: BEHR (Lackierroboter)

$RB_MARK: Marke des Roboterarms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: 12-62 Feld von arm_data Arm ganzzahlig schreibgeschtzt keine 1.00 Gibt die Versionsnummer der Roboterarmmechanik an. 00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$RB_

$RB_MODEL: Armmodell
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig schreibgeschtzt keine 1.00 Die Variable stellt die Codenummer dieses Armmodells dar. Fr unterschiedliche Robotermodelle werden verschiedene Nummer verwendet.

$RB_NAME: Armidentifizierung
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm String schreibgeschtzt keine 1.00 Gibt die COMAU Bezeichnung fr einen Arm an.

$RB_STATE: Armzustand
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig schreibgeschtzt keine 4.10 Die Variable stellt den aktuellen Armzustand dar. Einige Zustnde sind definiert. Bit 1: Der Arm ist nicht in RESUME Bit 2: Der Arm ist nicht KALIBRIERT Bit 3: Der Arm ist in HOLD Status Bit 4: Der Arm ist in DRIVE OFF Status Bit 5: Der Arm ist in SIMULATE Status

$RB_VARIANT: Armvarianten
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig schreibgeschtzt keine 1.00 Die Variable stellt die Handgelenkkonfiguration und fr einige Robotertypen die Verknpfung zwischen Gelenkrichtung und kartesischer Richtung dar. Es handelt sich um eine Variante der Normalausfhrung.

00/1200

12-63

$RCV

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$RCVR_DIST: Entfernung von Wiederaufnahmeposition


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real keine keine 5.00 Stellt die Entfernung in mm dar, die in Rckwrtsbewegung zurckgelegt wurde, nachdem eine unterbrochene Bahn (im Modus "Process Resume") wiederaufgenommen wurde. Sie wirkt auf Gelenk- wie auch auf kartesische Bahnen. Die Rckwrtsphase beginnt beim START nach jedem Stopbefehl (HOLD, LOCK, Notaus, Stromausfall). Der Rckweg kann auch die vorhergehende (in bezug auf die aktuelle) Bewegung einbeziehen, falls es eine FLY war. Sie ist nur im Zustand AUTO und, wenn $RCVR_TYPE auf 0 oder 4 gesetzt ist, aktiviert.

$RCVR_LOCK: ndern des Armstatus nach Rckstellung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung Boole'sch keine keine 4.30 Setzt den Arm nach einer Wiederherstellbewegung automatisch in einen wiederaufnehmbaren Status. Um den Arm wieder zu bewegen, muss entweder aus dem Programm oder per EXECUTE Befehl im Systemmen eine RESUME Anweisung gegeben werden.

$RCVR_TYPE: Bewegungsart bei Rckstellung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig keine 0..10 1.00 Die Variable stellt die Art der Rckwrtsbewegung auf die Bahn nach einer Unterbrechung dar. Die mglichen Werte dieser Variablen sind: 0: Wiederherstellung zu der unterbrochenen Bahn, Gelenk-Interpolation. 1: Wiederherstellung zu der Anfangsposition der unterbrochenen Bewegung, Gelenk-Interpolation. 2: Wiederherstellung zu der Endposition der unterbrochenen Bewegung, Gelenk-Interpolation. 3: Nicht wiederherstellen, der Anwender erhlt eine Fehlermeldung. 4: Wiederherstellung zu der unterbrochenen Bahn, mit derselben Bahn wie die unterbrochene Bewegung. Die Entwicklung erfolgt als WRIST_JNT, falls implementiert, sonst als RS_WORLD. 5: Wiederherstellung zu der Anfangsposition der unterbrochenen Bahn, mit derselben Bahn wie die unterbrochene Bewegung. Die Entwicklung erfolgt als WRIST_JNT, falls implementiert, sonst als RS_WORLD. 6: Wiederherstellung zu der Endposition der unterbrochenen Bahn, mit derselben Bahn wie die unterbrochene Bewegung. Die Entwicklung erfolgt als WRIST_JNT, falls implementiert, sonst als RS_WORLD. 7: Bei Anwendungen mit Sensorverfolgung wird nicht zurckgestellt, da der Anwender den Roboter im Tippbetrieb in die richtige Position auf dem Werkstck bringt und die Bewegung von dort wieder startet. 00/1200

12-64

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$REA

8:

9:

Bei Anwendungen mit Sensorverfolgung werden die Sensoroffsets wieder gesetzt und die unterbrochene Bewegung startet nach einer Rckstellung wieder auf der programmierten Bahn, nachdem die C3G PLUS von der aktuellen Position auf die geplante zurckgestellt hat. Nicht mehr verwendet. Man braucht nur die Variable $RCVR_DIST zu setzen.

$READ_TOUT: Timeout auf einer READ


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig keine 0..2147483647 1.00 Die Variable stellt den Timeout in Millisek. fr eine READ Anweisung dar. Der Standardwert ist Null, d.h. es erfolgt keine Lschung der READ nach einer gewissen Zeit (diese Zeit kann unendlich sein).

$REC_SETUP: Vorgabe der RECord Taste


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit String schreibgeschtzt keine 3.10 Enthlt Informationen ber die aktuelle Einstellung, wenn ein REC in der EZ Umgebung gegeben wird. Diese Information kann nur ber die Mens der EZ Umgebung gendert werden.

$REF_ARMS: Referenzarme
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von sc_data Servo ganzzahlig schreibgeschtzt keine 1.00 Die Variable ist eine Bitmaske, die die fr jede SCC Karte vereinbarten Arme darstellt.

$RESOLVER: Resolver-Bit-Auflsung
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array schreibgeschtzt keine 1.00 Die Variable stellt die Auflsung des Resolvers dar, ausgedrckt in Bitanzahl pro Motorumdrehung.

00/1200

12-65

$ROT

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$ROT_ACC_LIM: Grenzwert der Drehungsbeschleunigung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real schreibgeschtzt keine 1.00 Die Variable ist der max. Beschleunigungswert der Drehung, ausgedrckt in Radianten pro Sek.2. Der Wert wird bei Festlegung der Bahn benutzt, wenn $SPD_OPT auf SPD_CONST gesetzt ist.

$ROT_DEC_LIM: Grenzwert der Drehungsverlangsamung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real schreibgeschtzt keine 1.00 Die Variable ist der max. Verlangsamungswert der Drehung, ausgedrckt in Radianten pro Sek.2. Der Wert wird bei Festlegung der Bahn benutzt, wenn $SPD_OPT auf SPD_CONST gesetzt ist.

$ROT_SPD: Drehgeschwindigkeit
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real NODE-Feld, WITH MOVE; MOVE ALONG keine 1.00 Die Variable ist der Drehgeschwindigkeitswert, ausgedrckt in Radianten pro Sekunde. Dieser Wert wird benutzt, wenn die Variable $SPD_OPT einen anderen Wert als SPD_JNT, SPD_LIN oder SPD_CONST minus die Overrides annimmt, vorausgesetzt da der Wert unter $ROT_SPD_LIM ist. In diesem Fall entspricht die TCP Rotationsgeschwindigkeit $ROT_SPD minus die allgemeine Prozentgeschwindigkeit, solange dies Ergebnis kleiner ist als $ROT_SPD_LIM. Wenn die Hilfsachse linear ist, wird auerdem $ROT_SPD nicht bercksichtigt, gleichgltig ob $SPD_OPT auf SPD_AUX1, SPD_AUX2 oder SPD_AUX3 gesetzt ist.

$ROT_SPD_LIM: Grenzwert der Drehgeschwindigkeit


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real schreibgeschtzt keine 1.00 Die Variable ist der max. Drehgeschwindigkeitswert, ausgedrckt in Radianten pro Sekunde. Der Wert wird bei Festlegung der Bahn benutzt, wenn $SPD_OPT den Wert von SPD_CONST einnimmt (Standard).

12-66

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$RPT

$RPT_ADDR: RPT-Adresse
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm ganzzahlig schreibgeschtzt keine 1.00 Die Variable enthlt die Adresse der seriellen Leitung fr die Kommunikation mit RPT.

$SAFE_ENBL: Sicherheitsgeschwindigkeit freigegeben


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von crnt_data Initialisierung boolesch schreibgeschtzt keine 3.20 Zeigt an, da die aktuelle Bewegung aus Sicherheitsgrnden mit reduzierter Geschwindigkeit ausgefhrt wird. Diese Marke wird bei Ausfhrung der ersten Bewegung eines aktivierten Programms gesetzt oder, wenn der Anwender den Programmablauf in MEMORY DEBUG unterbrochen hatte.

$SC_BOARD: Arm-Servosteuerkarte
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig schreibgeschtzt 1..4 1.00 Die Variable stellt die Nummer der Servokarte eines bestimmten Arms dar.

$SC_DATA: Daten der Servosteuerkarte


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Servo eindimensionaler sc_data-Array keine keine 1.00 $SC_DATA stellt die Daten der Servosteuerkarte dar. Es gibt ein SC_DATA-Element fr jede in der Steuerung vorhandene Servokarte.

$SDIN: Digitale Systemeingaben


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler boolescher Array schreibgeschtzt keine 1.00 Die Variable stellt die digitalen Systemeingaben dar.

00/1200

12-67

$SEG

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$SDOUT: Digitale Systemausgaben


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler boolescher Array keine keine 1.00 Die Variable stellt die digitalen Systemausgaben dar.

$SEG_DATA: Daten des PATH Segments


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert boolesch beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG keine 3.00 Wenn dieses Standardfeld in der Knotendefinition (NODEDEF) eingeschlossen und der Wert fr einen bestimmten Knoten auf TRUE gesetzt ist, werden anstelle der derzeitigen Programmdaten, die standardmig eingesetzt werden, die Segmentdaten bezglich des letzten MOVE ALONG Knotens benutzt (d.h. es wird $TERM_TYPE anstelle von $SEG_TERM_TYPE benutzt). Dieses Feld ist von Nutzen, wenn die mit MEMORY TEACH definierten Daten anstelle der Programmdaten in einer MOVE ALONG Anweisung benutzt werden sollen.

$SEG_FLY: PATH Segment mit oder ohne FLY


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert boolesch beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG keine 3.00 Zeigt an, ob die Bewegung zwischen Knoten in FLY erfolgt. Diese Variable hat die gleiche Bedeutung wie das Wort FLY in einer MOVEFLY Anweisung. Dieses Standardknotenfeld wird beim letzten Knoten nicht angewandt. Dort wird statt dessen die Anweisung MOVE oder MOVEFLY benutzt, um festzulegen, ob die Bewegung in FLY erfolgen soll.

$SEG_FLY_DIST: Parameter in FLY Bewegung auf einem Segment


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert real beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG keine 3.30 Diese Variable hat denselben Zweck wie $FLY_DIST, wird aber auf einem Pfadsegment benutzt. $SEG_FLY_DIST lsst sich nicht auf den letzten Knoten eines Pfads anwenden, wo statt dessen $FLY_DIST benutzt wird.

12-68

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$SEG

$SEG_FLY_PER: FLY Prozentanteil auf einem PATH Segment


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG 1..100 3.00 Gibt den Teil einer Bewegung in FLY auf einem PATH Segment in Prozent an. Dieses Standardknotenfeld hat die gleiche Bedeutung wie $FLY_PER. $SEG_FLY_PER wird aber nicht beim letzten Knoten angewandt, wo statt dessen $FLY_PER benutzt wird. Wenn das Standardfeld in der Knotendefinition oder in einer WITH Klausel nicht angegeben wird, wird der derzeitige Programmwert benutzt. Der Standardwert ist 100%.

$SEG_FLY_TRAJ: Art der FLY Steuerung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG FLY_AUTO..FLY_TOL 3.30 Diese Variable hat denselben Zweck wie $FLY_TRAJ, wird aber auf einem Pfadsegment benutzt. $SEG_FLY_TRAJ lsst sich nicht auf den letzten Knoten eines Pfads anwenden, wo statt dessen $FLY_TRAJ benutzt wird.

$SEG_FLY_TYPE: FLY Typ auf einem PATH Segment


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG FLY_NORM..FLY_CART 3.00 Gibt die Art von FLY an, die auf einem PATH Segment ausgefhrt wird. Dieses Standardknotenfeld hat die gleiche Bedeutung wie $FLY_TYPE. $SEG_FLY_TYPE wird aber nicht beim letzten Knoten angewandt, wo statt dessen $FLY_TYPE benutzt wird. Wenn das Standardfeld in der Knotendefinition (NODEDEF) oder in einer WITH Klausel nicht angegeben wird, wird das derzeitige Programm benutzt.

$SEG_OVR: Prozentuale Geschwindigkeit auf einem PATH Segment


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG 1..100 3.00 Gibt den Prozentwert von Beschleunigung, Verzgerung und Geschwindigkeit fr ein bestimmtes PATH Segment an, hnlich wie die Variablen $PROG_ACC_OVR, $PROG_DEC_OVR und $PROG_SPD_OVR bei einer normalen Bewegung ohne PATH. Wenn das Standardfeld in der Knotendefinition (NODEDEF) oder in einer WITH Klausel nicht angegeben wird, werden die Werte des derzeitigen Programms benutzt.

00/1200

12-69

$SEG

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$SEG_REF_IDX: Referenzindex des PATH Segments


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG 0..7 3.00 Jeder PATH enthlt eine Frame Tabelle (FRM_TBL) mit 7 Positionselementen, die entweder fr ein Werkzeug oder ein Bezugssystem in dem Knoten benutzt werden knnen, der das Standardfeld MAIN_POS enthlt. $SEG_REF_IDX stellt den Index von FRM_TBL fr das Bezugssystem dar, das von dem speziellen Knoten benutzt werden soll. Ist $SEG_REF_IDX nicht in der Knotendefinition eingeschlossen oder hat einen Wert von 0 (Standardwert), so wird auf das Pfadsegment kein Bezugssystem angewendet. Da es fr jeden Pfad nur eine FRM_TBL gibt, sollten die Elemente 1 bis 3 fr Bezugssysteme und die Elemente 4 bis 7 fr Werkzeuges benutzt werden. TYPE frm = NODEDEF $MOVE_TYPE $MAIN_POS $SEG_REF_IDX $SEG_TOOL_IDX ENDNODEDEF -- Die Knoten dieses Pfads sollten entweder lernprogrammiert oder mit NODE_APP angehngt werden VAR frmpth: PATH OF frm ...... BEGIN frmpth.FRM_TBL[1] := POS(1000, 200, 1000, 0, 180, 0, ) frmpth.FRM_TBL[4] := POS(100, -200, 0, 0, -90, 0, )

frmpth.NODE[5].$MOVE_TYPE := LINEAR frmpth.NODE[5].$MAIN_POS := POS(100, -200, 300, 0, 180, 0, ) frmpth.NODE[5].$SEG_REF_IDX := 1 frmpth.NODE[6].$MOVE_TYPE := LINEAR frmpth.NODE[6].$MAIN_POS := POS(-1000, -1000, 1000, 0, 180, 0, ) frmpth.NODE[6].$SEG_TOOL_IDX := 4

$SEG_STRESS_PER: In FLY verlangter Belastungsprozentwert


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG 1..100 3.30 Diese Variable hat denselben Zweck wie $STRESS_PER, wird aber auf einem PATH Segment benutzt. $SEG_STRESS_PER lsst sich nicht auf den letzten Knoten eines Pfads anwenden, wo statt dessen $STRESS_PER benutzt wird.

12-70

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$SEG

$SEG_TERM_TYPE: Beendigungsart des PATH Segments


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG FINE..JNT_COARSE 3.00 Gibt die Art der Beendigung fr ein PATH Segment an. Diese Variable hat die gleiche Bedeutung wie $TERM_TYPE, wird aber nicht beim letzten Knoten angewandt, wo statt dessen $TERM_TYPE benutzt wird. Wenn das Standardfeld in der Knotendefinition oder in einer WITH Klausel nicht angegeben wird, wird der derzeitige Programmwert benutzt.

$SEG_TOL: Toleranz des PATH Segments


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert real beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG keine 3.00 Gibt den Toleranzwert fr ein PATH Segment an. $SEG_TOL hat die gleiche Bedeutung wie $TOL_FINE oder $TOL_COARSE, entsprechend der Beendigungsart: FINE oder COARSE. $SEG_TOL wird beim letzten Knoten nicht angewandt, wo statt dessen der derzeitige Armwert benutzt wird. Wenn das Standardfeld in der Knotendefinition (NODEDEF) oder in einer WITH Klausel nicht angegeben wird, wird der derzeitige Armwert benutzt.

$SEG_TOOL_IDX: Werkzeugindex eines PATH Segments


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG 0..7 3.00 Jeder PATH enthlt eine Frame Tabelle (FRM_TBL) mit 7 Positionselementen, die entweder fr ein Werkzeug oder ein Bezugssystem in dem Knoten benutzt werden knnen, der das Standardfeld MAIN_POS enthlt. $SEG_REF_IDX stellt den Index von FRM_TBL fr das Bezugssystem dar, das von dem speziellen Knoten benutzt werden soll. Ist $SEG_REF_IDX nicht in der Knotendefinition eingeschlossen oder hat einen Wert von 0 (Standardwert), so wird auf das Pfadsegment kein Bezugssystem angewendet. Da es fr jeden Pfad nur eine FRM_TBL gibt, sollten die Elemente 1 bis 3 fr Bezugssysteme und die Elemente 4 bis 7 fr Werkzeuges benutzt werden. Siehe das Beispiel fr $SEG_REF_IDX.

$SEG_WAIT: WAIT eines PATH Segments


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert boolesch beschrnkter Zugriff, NODE-Feld, WITH MOVE ALONG keine 3.00 Wenn dieses Standardfeld in der Knotendefinition (NODEDEF) enthalten und der Wert fr einen bestimmten Knoten auf TRUE gesetzt ist, wird die Interpretation der PATH Bewegung unterbrochen, bis der PATH signalisiert wird. Der Standardwert fr $SEG_WAIT ist FALSE. Das Ereignis des Bedingungshandlers von SEGMENT WAIT kann benutzt werden, um zu sehen, ob ein PATH gerade wartet. Daher sollte die Bedingung, die dieses Ereignis 12-71

00/1200

$SEG

LISTE DER VORBESETZTEN VARIABLEN

PDL2

enthlt, global aktiviert werden, um zu berwachen, wann der Pfad auf einem Segment wartet. Die Anweisung oder Aktion SIGNAL SEGMENT kann verwendet werden, um die Unterbrechung des PATH aufzuheben. PROGRAM segwait VAR pnt0001j, pnt0002j, pnt0003j : JOINTPOS FOR ARM[1] TYPE path_type = NODEDEF $MAIN_JNTP $SEG_WAIT ENDNODEDEF -- Die drei Knoten dieses Pfads sollten entweder lernprogrammiert oder mit NODE_APP angehngt werden VAR pth : PATH OF path_type i : INTEGER BEGIN -- Diese Bedingung zeigt die Interpretation der Pfadknoten an CONDITION[1] NODISABLE : WHEN SEGMENT WAIT pth DO ..... SIGNAL SEGMENT pth ENDCONDITION ENABLE CONDITION[1] ... pth.NODE[1].$MAIN_JNTP := pnt0001j pth.NODE[1].$SEG_WAIT := FALSE ... pth.NODE[2].$MAIN_JNTP := pnt0002j -- Die Pfadinterpretation stoppt an diesem Knoten pth.NODE[2].$SEG_WAIT := TRUE ... pth.NODE[3].$MAIN_JNTP := pnt0003j pth.NODE[3].$SEG_WAIT := FALSE MOVE ALONG pth END segwait

$SENSOR_CNVRSN: Umrechnungsfaktoren fr Sensoren


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array keine keine 3.30 Diese Variable ist eine Matrix mit 6 REAL Elementen, die benutzt werden, um die von den Sensoren gelesenen Werte aus den speziellen Einheiten (z.B. Ampere, Newton usw.) in Millimeter umzurechnen. Die ersten drei Elemente dienen zur Korrektur in X-, Y- und Z-Richtung, die anderen drei fr Drehungen um die X-, Y- und Z-Achse.

12-72

00/1200

PDL2

PREDEFINED VARIABLE LIST

$SEN

$SENSOR_ENBL: Sensoraktivierung
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Boole'sch WITH MOVE keine 3.30 Diese Variable wird benutzt, um die Funktionen von Sensorverfolgung zu aktivieren bzw. zu deaktivieren. Das kann entweder modal oder mit einer WITH Klausel einer MOVE Anweisung geschehen. Auer wenn die interne Routine SENSOR_TRK(ON) ausgefhrt wurde, wirkt die Variable nur auf die aktuelle Bewegung.

$SENSOR_GAIN: Sensorverstrkungen
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler ganzzahliger Array keine 0..100 3.30 Diese Variable ist eine Matrix mit 6 INTEGER Elementen, die die Geschwindigkeit der Korrekturen definieren. Die ersten drei Elemente dienen zur Korrektur in X-, Y- und Z-Richtung, die anderen drei fr Drehungen um die X-, Y- und Z-Achse.

$SENSOR_OFST_LIM: Grenzwerte fr Sensor Offset


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array keine keine 3.30 Diese Variable ist eine Matrix mit 2 REAL Elementen, die die max. zulssige Entfernung zwischen der programmierten Bahn und dem Roboter unter Sensorsteuerung definiert. Das erste Element ist fr die Verschiebung (X, Y, Z) und ist in Millemetern ausgedrckt, das zweite fr die Drehung und ist in Grad. Wird die Grenze berschritten, erscheint eine Fehlermeldung und der Roboter geht in HOLD.

$SENSOR_TIME: Sensorzeitdauer
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig WITH MOVE 0..10000 4.00 Diese Variable ist optional und ermglicht dem Anwender zu definieren, in welcher Zeit (in Millisekunden) die Korrekturen erfolgen sollen. Ein Wert von 0 msek bedeutet Deaktivierung und in diesem Fall basiert das Kriterium zur Verteilung der Korrekturen auf der Geschwindigkeit, die mit $SENSOR_GAIN programmiert ist. Wenn eine $SENSOR_TIME spezifiziert ist, werden die Korrekturen ber diese Dauer verteilt. Die mit $SENSOR_GAIN eingestellte Geschwindigkeit wird jedoch nie berschritten.

00/1200

12-73

$SEN

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$SENSOR_TYPE: Sensortyp
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig WITH MOVE 0..30 3.30 Diese Variable ist ein Codewert zum Konfigurieren von Sensorverfolgung. Er definiert drei Eigenschaften: wo die Informationen ber den Sensor in welchem Datenformat gelesen werden knnen, in welchem Bezugssystem die Korrekturen angewandt werden sollen und ob die Korrekturen absolut oder relativ ausgefhrt werden sollen. Das folgende ist eine Liste gltiger Werte: 0: Sensor suspendiert 1: Durch-den-Bogen-Sensor (erste INTEC Karte) in TOOL Bezugssystem; 2: Durch-den-Bogen-Sensor (erste INTEC Karte) in WEAVE Bezugssystem; 3: Durch-den-Bogen-Sensor (zweite INTEC Karte) in TOOL Bezugssystem; 4: Durch-den-Bogen-Sensor (zweite INTEC Karte) in WEAVE Bezugssystem; 5: externer Sensor im TOOL Bezugssystem, Relativmodus; 6: externer Sensor im UFRAME Bezugssystem, Relativmodus; 7: externer Sensor im WORLD Bezugssystem, Relativmodus; 8: externer Sensor im WEAVE Bezugssystem, Relativmodus; 9: externer Sensor im TOOL Bezugssystem, Absolutmodus; 10: externer Sensor im UFRAME Bezugssystem, Absolutmodus; 11: externer Sensor im WORLD Bezugssystem, Absolutmodus; 12: externer Sensor im WEAVE Bezugssystem, Absolutmodus; 13...14: reserviert; 15: zum Verwalten einer bestimmten Laserkamera benutzt; 16...30: reserviert. Der Durch-den-Bogen-Sensor fr Bogenschweien ist in der C3G PLUS Umgebung integriert und verlangt die zustzliche INTEC Karte. Dagegen sind die externen Sensoren nicht in C3G PLUS integriert und knnen von einem PDL2 Anwenderprogramm verwaltet werden.

$SEV_ELOG: Schwereniveau der eingespeicherten Fehler


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit ganzzahlig keine 1..15 1.00 Gibt die Untergrenze der Fehlerschwere an. Schwerere Fehler werden in der Protokolldatei (ERROR.LOG) registriert.

12-74

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$SEN

$SFRAME: Sensorbezugssystem eines Arms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Position WITH MOVE keine 4.00 Dies ist ein Bezugssystem wie $BASE, $TOOL und $UFRAME. Die Variable kann das Bezugssystem ndern, indem die Sensorkorrekturen angewandt werden mssen. Dies ist abhngig von $SENSOR_TYPE in bezug auf das Werkzeug- oder Anwender-Bezugssystem definiert.

$SING_CARE: Behandlung von Singularitten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm boolesch NODE-Feld, WITH MOVE; MOVE ALONG keine 1.00 Es handelt sich um eine Marke, die (wenn es vorgegeben ist) die Bewegung unterbricht, wenn der Arm einen Singularittspunkt erreicht. Wenn sie nicht vorgegeben ist, wird die Geschwindigkeit auf jeden Fall vermindert. Der Standardwert ist FALSE.

$SPD_OPT: Art der Geschwindigkeitssteuerung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig NODE-Feld, WITH MOVE; MOVE ALONG SPD_JNT..SPD_AUX3 1.00 Diese Variable dient zur Anwahl des Parameters, der die Geschwindigkeit einer kartesischen Bewegung steuert. Die folgenden vorbesetzten Konstanten knnen als Werte benutzt werden: SPD_JNT, SPD_CONST, SPD_LIN, SPD_ROT, SPD_SPN, SPD_AZI, SPD_ELV, SPD_ROLL, SPD_FIRST, SPD_SECOND, SPD_THIRD, SPD_AUX1, SPD_AUX2 und SPD_AUX3. Der Standardwert ist $SPD_CONST.

$STARTUP: Startup-Programm
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit String keine keine 1.00 Die Variable stellt das zu ladende und zu aktivierende Programm beim Systemstart dar. Sie kann entweder mittels einer PDL2 Zuweisung oder den Befehl CONFIGURE CONTROLLER STARTUP (CCS) gesetzt werden. Zum Lschen des Werts dieser vorbesetzten Variablen einen leeren String zuweisen oder im CCS Befehl keinen Programmnamenparameter angeben.

00/1200

12-75

$SEN

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$STRESS_PER: In kartesischem FLY verlangter Belastungsprozentwert


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig WITH MOVE; MOVE ALONG 1..100 3.30 Diese Variable gibt die maximale Belastung eines Arms bei kartesischem Fly an und wird nur verwendet, wenn $FLY_TYPE auf FLY_CART gesetzt ist. Sie ndert die Flugbahn und reduziert ntigenfalls die programmierte Geschwindigkeit. Der Standardwert ist 50%. 100% bedeutet Durchfahren des programmierten Punktes mit Hchstgeschwindigkeit.

$STRK_END_N: Anwender-definiertes negatives Hubende


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array keine keine 1.00 Die Variable ist der Wert des negativen Hubendes, der jeder Achse zugeordnet wird. Dieser Wert kann vom Anwender gendert werden; die nderung hat jedoch nur Wirkung, wenn sie in einer Konfigurationsdatei eingespeichert wurde und die Steuerung neu gestartet wird.

$STRK_END_P: Anwender-definiertes positives Hubende


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array keine keine 1.00 Die Variable ist der Wert des positiven Hubendes, der jeder Achse zugeordnet wird. Dieser Wert kann vom Anwender gendert werden; die nderung hat jedoch nur Wirkung, wenn sie in einer Konfigurationsdatei eingespeichert wurde und die Steuerung neu gestartet wird.

$STRK_END_SYS: Hubende des Systems


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm zweidimensionaler Real-Array schreibgeschtzt keine 1.03 Die Variable stellt das vom System definierte negative und positive Hubende des Arms dar. Dieser Wert kann vom Anwender nicht gendert werden. In dieser zweidimensionalen Matrix ist enthlt die erste Dimension 2 und die zweite 8 Elemente. Die erste Dimension bestimmt die Hubenden: Element 1 das positive und Element 2 das negative. Die zweite Dimension stellt die Achsennummern dar.

12-76

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$SYN

$SYNC_ARM: Synchronisierter Arm des Programms


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig keine 1..32 4.00 $SYNC_ARM gibt den als Standard synchronisierten Arm fr die SYNCMOVE Klausel an. Der Anwender muss diese Variable initialisieren, ehe eine SYNCMOVE Klausel ohne Armangabe ausgefhrt wird, sonst wird eine Fehlermeldung zurckgebracht, da der Standardwert dieser Variablen "nicht initialisiert" ist.

$SWIM_INIT: Initialisierungsparameter fr SWIM Karten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Eingabe/Ausgabe zweidimensionaler ganzzahliger Array keine keine 5.40 Diese Variable enthlt Informationen zum Initialisieren und Einrichten fr die SWIM Karte. Sie muss richtig initialisiert sein, bevor die Karte in der Steuereinheit benutzt werden kann. Der erste Index ist die Nummer der SWIM Karte. Die Bedeutung des zweiten Index ist wie folgt: [1]: dies ist eine Bitmaske, wo: Bit 1: wenn auf 1 gesetzt, anzeigt, dass die Karte von der Steuereinheit erkannt werden kann. Andernfalls nimmt die Steuereinheit an, dass die SWIM Karte nicht vorhanden ist. Um die nderung dieses Bits operativ zu machen, muss die Steuereinheit (warm oder kalt) neu gestartet werden. Bit 2: SWIM Karte per SW deaktiviert. Das bedeutet, die Daten von der SWIM Karte werden nicht in die $WORD Matrix kopiert. Umgekehrt werden die Ausgangs-$WORDs in die SWIM Karte kopiert. Bit 12: Wenn die SWIM Karte per SW deaktiviert ist, wird das erste $WORD der Eingangsdaten nicht aktualisiert. [2]: Index in der $WORD Matrix, von wo ab die Daten kopiert werden. [3]: Anzahl der zu kopierenden $WORDs . [4..8]: reserviert

$SYS_CALL_OUT: Ausgabe lun fr SYS_CALL


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig keine keine 1.00 Gibt die Ausgabe-LUN an, die fr SYS_CALL Anforderungen benutzt werden soll. Diese Variable nimmt standardmig den aktuellen Wert von $DFT_LUN an.

00/1200

12-77

$SYS

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$SYS_CALL_STS: Zustand der letzten sys_call Operation


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig keine 0..0 1.00 Die Variable stellt den Zustand der letzten SYS_CALL- Operation fr dieses Programm dar.

$SYS_CALL_TOUT: SYS_CALL Timeout


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig keine 0..MAXINT 1.00 Die Variable enthlt die max. Ausfhrungszeit einer SYS_CALL. Der Wert 0 zeigt an, da die SYS_CALL eine unbegrenzte Dauer haben kann. Wenn die SYS_CALL nicht innerhalb der in $SYS_CALL_TOUT definierten Zeit endet, wird sie gelscht.

$SYS_ERROR: Letzter Systemfehler


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig keine 0..0 1.00 Die Variable stellt den letzten Systemfehler dar.

$SYS_PROT: Systemschutz
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig schreibgeschtzt keine 1.00 Diese schreibgeschtzte Systemvariable kann benutzt werden, um zu sehen, welche Schutzstufe gerade fr das Systembefehlsmen angewandt wird. Die Schutzstufe fr das Systembefehlsmen wird mit dem Untermen SET CONTROLLER PROTECT eingestellt, wozu man das Systempasswort kennen muss. $SYS_PROT kann folgende Werte annehmen: 0: kein Schutz 1: Speicherschutz 2: Systemschutz 4: Programmschutz

12-78

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$SYS

$SYS_PROT_STATE: Systemschutz fr jeden Zustand


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler ganzzahliger Array keine keine 3.10 Diese Variable wird benutzt, um die Schutzstufe mit den verschiedenen Stellungen des Statuswhlschalters PROG/AUTO zu verknpfen. Sie besteht aus einer INTEGER Matrix, in der Element 1 der Stellung PROG, Element 2 der Stellung AUTO und Element 3 der Stellung REMOTE entspricht. Die Standardwerte fr jede Schalterstellung sind: Element [1] fr PROG: kein Schutz Element [2] fr AUTO: kein Schutz Element [3] fr REMOTE: Systemschutz Jedem dieser Elemente kann einer der im folgenden mit seiner Bedeutung aufgelisteten Werte zugewiesen werden: 0: fr keinen Schutz 1: fr Speicherschutz 2: fr Systemschutz 4: fr Programmschutz Es muss unterstrichen werden, dass der Wert dieser Variablen fr jeden PROG/AUTO Statuswhlschalter mit den ggf. schon im System gesetzten und mit den Befehlen des Untermens SET CONTROLLER PROTECT eingerichteten (und in der Variablen $SYS_PROT gespeicherten) Schutzeinstellungen kombiniert wird. Wenn z.B. $SYS_PROT den Wert 1 hat (d.h. Speicherschutz ist an) und in $SYS_PROT_STATE ist das Element [1] (fr PROG) auf 0, Element [2] (fr AUTO) auf 4 und Element [3] (fr REMOTE) auf 2, dann ist die resultierende Schutzeinstellung: Speicher in PROG, Speicher + Programm in AUTO, Speicher + System in REMOTE.

$SYS_STATE: Systemzustand
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig schreibgeschtzt keine 1.00 Stellt eine vollstndige Beschreibung des Systemzustands dar und besteht aus folgender Maske: Bit 1: zeigt an, dass alle Arme im Bereitschafts- (Energiespar-) Status sind Bit 2: zeigt an, dass eine Tippbewegung luft Bit 3: es laufen HOLD fhige Programme Bit 4: NOTAUS- oder SICHERHEITSTR-Alarm aktiv. Bit 5: PCINT auf PC angeschlossen Bit 6-8: reserviert Bit 9: Dies Bit bleibt whrend der ganzen Wiederanlaufprozedur nach Stromausfall auf 1 gesetzt. Bit 10: Dies Bit ist auf 1 gesetzt, wenn das PHG am Schrank ist. Bit 11: Status der PTU4 Zustimmungseinrichtung: 1=gedrckt, 0=freigegeben. Bit 12: PTU4 AUTO/MAN Schalter auf MANUAL. Wenn die PTU4 nicht angeschlossen ist, hat dieses Bit den Wert 1 (Standard).

00/1200

12-79

$S_A

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Bit 13:

Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit Bit

Bit Bit Bit Bit Bit Bit

PTU4 AUTO/MAN Schalter auf AUTO (diese Position bestimmt den AUTO-T Status, wenn der Whlschalter am Schrank auf PROG steht). 14: Prog/Auto Statuswhlschalter auf AUTO-REMOTE. 15: Prog/Auto Statuswhlschalter auf AUTO-LOCAL. 16: Prog/Auto Statuswhlschalter auf PROG. 17: HOLD Signal von REMOTE Quelle (SIM Karteneingang) 18: HOLD Taste auf PTU4 eingerastet 19: reserviert 20: DRIVE OFF von REMOTE Quelle (SIM Karteneingang) 21: DRIVE OFF Taste auf PTU4 eingerastet 22-23:reserviert 24: Dies Bit ist auf 1, wenn das System wegen eines Abbruchfehlers (Schwere 13 - 15) im ALARM Zustand ist. 25: zeigt an, dass das System im Zustand AUTO-REMOTE ist (siehe auch Bit 29). 26: START Taste gedrckt: in AUTO: ist bei ersten Drcken von START auf 1 gesetzt, wenn das System in DRIVE ON ist Gibt 0 zurck, wenn ein HOLD oder DRIVE OFF Befehl gegeben wird. in PROG: behlt den Wert 1, solange die START Taste fr die FORWARD Funktion gedrckt bleibt. 27: zeigt an, dass der Systemstatus ALARM ist. 28: zeigt an, dass der Systemstatus PROG ist. 29: zeigt an, dass der Systemstatus AUTO (LOCAL oder REMOTE) ist (siehe auch Bit 25). 30: zeigt an, dass der Systemstatus HOLD ist. 31: Antriebstatus: 1 fr DRIVE OFF, 0 fr DRIVE ON 32: reserviert

$S_ABYTE1: Interne Servosteuerdaten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von sc_data Servo eindimensionaler Array fr Datensystem Zugriff nur ber interne Routinen, schreibgeschtzt keine 1.00 Es gibt bestimmte Felder von $SC_DATA, denen keine vorbesetzte Variablen entsprechen. Auf sie kann mit diesen allgemeinen Arrays verwiesen werden. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

$S_ALONG1: Interne Servosteuerdaten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von sc_data Servo eindimensionaler ganzzahliger Array schreibgeschtzt keine 3.20 Es gibt bestimmte Felder von $SC_DATA, denen keine vorbesetzte Variablen entsprechen und auf die statt dessen mit diesem allgemeinen Array zugegriffen werden kann. Format und Bedeutung der Daten in diesen Feldern sind reserviert.

12-80

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$TER

$TERM_TYPE: Beendigungsart der Bewegung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig WITH MOVE; MOVE ALONG FINE..JNT_COARSE 1.00 Die Variable gibt die Beendigungsart der Bewegung abhngig davon an, wie nah der Arm an seinem Bestimmungsort sein soll. Gltige Werte stellen die vorbesetzten Konstanten NOSETTLE, COARSE, FINE, JNT_COARSE und JNT_FINE dar. Der Standardwert ist NOSETTLE. NOSETTLE: Die Bewegung wird als beendet erklrt, wenn der Bahngenerator die letzte Position erzeugt hat. Die tatschliche Position des Arms wird nicht beachtet. COARSE: Die Bewegung wird als beendet erklrt, wenn der Werkzeugmittelpunkt (TCP) in die vom Wert der Variablen $TOL_COARSE definierte Toleranzzone eintritt. FINE: Die Bewegung wird als beendet erklrt, wenn der Werkzeugmittelpunkt (TCP) in die vom Wert der Variablen $TOL_FINE definierte Toleranzzone eintritt. JNT_COARSE: Die Bewegung wird als beendet erklrt, wenn jedes Gelenk in der Toleranzzone ist, die durch den Wert der vorbesetzten Variablen $TOL_JNT[2, axis_num] definiert ist. JNT_FINE: Die Bewegung wird als beendet erklrt, wenn jedes Gelenk in der Toleranzzone ist, die durch den Wert der vorbesetzten Variablen $TOL_JNT[1, axis_num] definiert ist.

$THRD_CEXP: Bedingungsauslser-Ausdruck
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig keine 0..0 4.10 Diese Variable zeigt an, welcher Ausdruck in einem Bedingungshandler oder einer WAIT FOR Anweisung ausgelst hat. Wenn eine Interrupt Service Routine als Aktion einer Bedingung startet, wird diese Variable auf die Nummer des Bedingungsausdrucks initialisiert, der das Auslsen der Bedingung verursacht hat. Bei einer WAIT FOR Anweisungen zeigt sie an, welcher Ausdruck in der WAIT FOR ausgelst hat. Die vom System zurckgegebene Nummer entspricht der Reihenfolge, in der die Bedingungsausdrcke vereinbart wurden. Es gibt eine $THRD_CEXP fr jede Ausfhrungsfaden. Der Anwender darf diese Variable nur auf 0 setzen, zum Beispiel: WAIT FOR HOLD OR EVENT 95 OR ($FDIN[5] = TRUE) AND ($FDOUT[5] = FALSE) IF $THRD_CEXP = 3 THEN WRITE (FDIN[5] IS TRUE AND $FDOUT[5] IS FALSE, NL) ELSE IF $THRD_CEXP = 2 THEN WRITE (Ereignis EVENT 95 hat ausgelst, NL) ELSE -- $THRD_CEXP ist 1 WRITE (Das HOLD Ereignis hat ausgelst, NL) ENDIF ENDIF

00/1200

12-81

$THR

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Wenn in einer Bedingung oder WAIT FOR ein bestimmter Bedingungsausdruck entfernt oder hinzugefgt wird, kann sich die Nummerierung ndern, falls es Mehrfachausdrcke in dieser Bedingung oder WAIT FOR gibt, und das hngt auch von der Position des entfernten/hinzugefgten Ausdrucks ab. Wenn in obigem Beispiel der zweite Bedingungsausdruck (EVENT 95) aus der WAIT FOR Anweisung entfernt wird, nimmt $THRD_CEXP den Wert 1 an, falls das HOLD Ereignis auslst, und wird 2, falls der Ausdruck ($FDIN[5] = TRUE) AND ($FDOUT[5] = FALSE) auslst.

$THRD_ERROR: Fehler jeder Ausfhrungssequenz


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig keine 0..0 2.20 Gibt die Nummer des letzten Fehlers whrend der derzeitigen Ausfhrung an. Es gibt ein $THRD_ERROR fr jede Ausfhrungssequenz. Bei der Aktivierung einer Interrupt Routine wird auch eine neue Ausfhrungssequenz gestartet. Wird die Interrupt Routine aufgrund einer Fehlerbedingung gestartet, so wird die vorbesetzte Variable mit der Nummer des Fehlers initialisiert, der die Bedingung verursacht hat, sonst wird sie mit Null initialisiert.

$THRD_PARAM: Sequenzparameter
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig schreibgeschtzt keine 3.00 Stellt einen zugeordneten Parameter dar, der sich auf das Ereignis bezieht, das den Start der ISR verursacht hat. Es gibt ein $THRD_PARAM fr jede Ausfhrungssequenz. Bei der Aktivierung einer Interrupt Routine wird auch eine neue Ausfhrungssequenz gestartet. Diese Variable wird abhngig von spezifischen Informationen ber die Bedingung initialisiert. Fr Bewegungsbedingungen wie AT START, TIME BEFORE und fr das SEGMENT WAIT Ereignis handelt es sich dabei um die Nummer des PATH Knotens, bei Fehlerbedingungen ist es die Nummer des Fehlers und bei EVENT Ereignissen die Ereignisnummer. Diese Variable ist von Nutzen, wenn eine ISR fr unterschiedliche Typen von Ereignissen benutzt wird.

$TIMER: Zeitgeber
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array keine keine 1.00 Stellt 1 msek Zeitgeber mit 10 msek Auflsung dar, die in PDL2 Programmen zur Verfgung stehen. Die Anzahl der Elemente hngt von der vorbesetzten Variablen $NUM_TIMERS ab. Die Zeitgeberelemente knnen von verschiedenen Programmen reserviert werden. Siehe die ATTACH und DETACH Anweisungen.

12-82

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$TOL

$TOL_ABT: Schwellenverweilzeit
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data arm ganzzahlig keine 0..2000 1.00 Die Variable drckt den Zeitraum aus, in dem die Bewegung enden mu, und zwar von dem Augenblick an gerechnet, an dem der Werkzeugmittelpunkt (TCP) zum erstenmal in den Toleranzbereich eintritt. Aufgrund der Trgheitskrfte kann der TCP in den Toleranzbereich eintreten und ihn sofort darauf wieder verlassen. Die Zeitmessung beginnt, wenn der TCP zum ersten Mal in den Toleranzbereich eintritt. Der Standardwert betrgt 0 Millisekunden.

$TOL_COARSE: Normaltoleranz
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real WITH MOVE; MOVE ALONG keine 1.00 Die Variable drckt den Radius in Millimetern des Bereichs aus, innerhalb dessen die Maschine die Bewegung beendet haben mu, wenn die Variable $TERM_TYPE auf COARSE gesetzt ist. Der Standardwert hngt vom Robotertyp ab.

$TOL_FINE: Feintoleranz
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm real WITH MOVE; MOVE ALONG keine 1.00 Die Variable drckt den Radius in Millimetern des Bereichs aus, innerhalb dessen die Maschine die Bewegung beendet haben mu, wenn die Variable $TERM_TYPE auf FINE gesetzt ist. Der Standardwert hngt vom Robotertyp ab.

$TOL_JNT: Toleranz in den Gelenken


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm zweidimensionaler Real-Array keine keine 1.00 Die Variable drckt die Toleranz in Grad fr das jeweilige Gelenk aus. Die erste Gre wird benutzt, wenn $TERM_TYPE JNT_FINE ist, und die zweite, wenn $TERM_TYPE JNT_COARSE ist. Augenblicklich erfolgt keine Kontrolle der Grenzen dieser Werte. nderungen des Werts dieser Variablen werden bei der nchsten Bewegung wirksam.

00/1200

12-83

$TOL

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$TOL_TOUT: Timeout zum Eintreten in den Schwellenbereich


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig keine 0..20000 1.00 Die Variable ist der max. Zeitraum in Millisekunden, innerhalb dessen der Maschinen-TCP in den gewnschten Toleranzbereich eintreten mu. Wenn der Arm nicht innerhalb der angegebenen Zeitspanne in den Bereich eintritt, wird eine Meldung ausgegeben. Der Standardwert hngt vom Robotertyp ab.

$TOOL: Armwerkzeug
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Position WITH MOVE; MOVE ALONG keine 1.00 Gibt die Dimension und Ausrichtung des Werkzeugs an.

$TOOL_CNTR: Werkzeug-Schwerpunkt
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Position WITH MOVE; MOVE ALONG keine 4.20 Gibt die Position der WerkzeugSchwerpunkts an. In diesem Punkt kann man sich die gesamte Masse des Werkzeugs ($TOOL_MASS) konzentriert vorstellen. Es werden nur die ersten drei Komponenten der POSITION (X, Y, Z) benutzt. (Die Euler'schen Winkel sind bedeutungslos).

$TOOL_MASS: Werkzeugmasse
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Real WITH MOVE; MOVE ALONG keine 4.20 Gibt die Masse des Werkzeugs in Kg an.

$TOOL_RMT: Festes Werkzeug


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Boole'sch WITH MOVE keine 4.00 Wenn auf TRUE gesetzt ist das getrennte Werkzeugsystem aktiviert. In diesem Fall stellt $TOOL die Position dessen TCP in bezug auf das Bezugssystem Wellt dar. $UFRAME ist in bezug auf das Flanschbezugssystem definiert. 00/1200

12-84

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$TP_

$TP_ARM: Von PHG z.Z. angewhlter Arm


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig schreibgeschtzt 1..32 1.00 Stellt den aktuell auf der PTU4 gewhlten und in der Statuszeile des Systemdisplays angezeigten Arms dar. Diese Variable kann durch Drcken der ARM Taste auf der PTU4 oder den Befehl SET ARM TP_MAIN gendert werden.

$TP_GEN_INCR: Inkrementalwert der allgemeinen Prozentgeschwindigkeit der PTU4


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig keine 1..10 1.00 Stellt die aktuelle allgemeine Prozentualgeschwindigkeit dar, die auf der PTU4 benutzt wird.

$TP_MJOG: Tippbetriebtyp vom PHG


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert ganzzahlig keine 0..3 1.00 Stellt den aktuellen auf der PTU4 aktivierten Bewegungstyp dar. Mgliche Werte sind: 0: Joint 1: Base 2: Tool 3: User frame

$TP_ORNT: Werterhhung des allgemeinen Overrride vom PHG


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm ganzzahlig keine WRIST_JNT..RPY_WORLD 3.10 Stellt den Typ der Ausrichtung dar, wenn die Tipptasten 4, 5 und 6 gedrckt werden und die auf der PTU4 gewhlte Bewegung nicht JOINT ist. Wenn $TP_ORNT auf RPY_WORLD gesetzt ist, bestimmen diese Tasten eine Drehung um die Achsen X, Y bzw. Z im gewhlten Bezugssystem (BAS, TOL oder USR). Ist $TP_ORNT auf WRIST_JNT gesetzt, bestimmen diese Tasten unabhngig vom aktiven Bezugssystem eine Bewegung der Achsen 4, 5 and 6 im Gelenkmodus. $TP_ORNT kann sowohl aus PDL2 als auch durch Drcken der umgeschalteten TYP Taste auf der PTU4 gendert werden.

00/1200

12-85

$TP_

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$TP_SYNC_ARM: Die synchronisierten Arme des PHG


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert eindimensionaler ganzzahliger Array schreibgeschtzt 0..32 4.00 Diese Variable ist eine Matrix zweier INTEGER, wo das erste Element den Hauptarm darstellt und mit der ARM Taste der PTU4 gewhlt ist, Das zweite Element enthlt den synchronisierten Arm und kann mit Umschalttaste plus ARM Taste auf der PTU4 gewhlt werden. Beide Selektionen mssen erfolgen, wenn die Antriebe OFF sind. Der Wert dieser Variablen wird auf der Statuszeile des Systemdisplays angezeigt. Wenn die Antriebe eingeschaltet sind, zeigt eine Marke -, welches der beiden Elemente auf der PTU4 fr Tippbetrieb benutzt wird.

$TUNE: Interne Abgleichparameter


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler ganzzahliger Array keine keine 1.00 Die Variable stellt die internen Abgleichparameter dar. Einige ntzliche Elemente sind: [1]: Zeitintervall zum Abprfen der Bedingungen. Der Standardwert ist 20 msek. Die schnellste Abtastrate ist 10 msek. [2]: reserviert. [3]: reserviert. [4]: Anfangswert der SPS Zyklusabfragezeit. Standardwert 0: variables Abfragen. [5]: stellt den Aufwand fr die SW SPS dar. Der Standardwert ist 50%. Vernnftige Werte gehen von 20% bis 80%. [6]: Zeitabschaltung fr Antriebsrckmeldung in msek. Der Standardwert ist 3 Sek. [7]: Zeitabschaltung fr Auftragsrckmeldung in msek. Der Standardwert ist 0,8 Sek. [8]: Zeitabschaltung fr das Relais auf der SIM Karte in msek. Der Standardwert ist 0,06 Sek. [9]: Verzgerung bei Antriebsfreigabe in msek. Der Standardwert ist 0,3 Sek. [10]: Verzgerung von Schleichgang, Bremse und DSP an/aus im msek. Der Standardwert ist 0,1 Sek. [11]: Verzgerung bei PHG Anschlu in msek. Der Standardwert ist 1,5 Sek. [12]: Reserviert. [13]: Verzgerung von Alarmausschlu in msek. Der Standardwert ist 60 Sek. [14]: Anlaufverzgerung bei dem REMOTE Befehl in msek. Der Standardwert ist 5 Sek. [15]: Bildauffrischzeit des DISPLAY Befehls in msek. Der Standard ist jede Sekunde. [16]: max. Zeilenzahl fr den DISPLAY Befehl auf dem PC Bildschirm (bei aktivem PCINT Tool). Der Standardwert ist 16 Zeilen. [17]: max. Zeilenzahl fr den DISPLAY Befehl auf dem PTU4 Display. Der Standardwert ist 4 Zeilen. 00/1200

12-86

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$TUR

reserviert. aktiviert bei vorhandener HW SPS Karte die Zyklusabfragezeit von 2 msek. [20]: Auffrischzeit in msek fr den FOLLOW Befehl in den Umgebungen PROGRAM EDIT und MEMORY DEBUG. Der Standardwert ist eine halbe Sekunde. [21]: Auffrischzeit der Statuszeile in msek. Der Standardwert ist eine Sekunde. [22]: deaktiviert Lschen des SPS Programms bei kaltem Neustart. [23]: reserviert. [24]: ist die Verzgerung von SIM Fehlerregistrierung bei Wiederanlauf nach Stromausfall. [25]: reserviert. [26]: SW Zeitgeber zum Aktivieren der Motorbremsen bei Zeitberschreitung nach kontrolliertem Notaus. Die Standardwartezeit ist 0,9 Sek. [27]: Zeitberschreitung fr Energiesparen [28]: reserviert [29]: Standardkellergre fr PDL2 Programme [30]: max. fr Vorauslesepuffer [31]: max. Ausfhrzeit (msek) fr Kalibrierprogramm [32..41]: reserviert [42]: Standard-Kellergre fr den EXECUTE Befehl

[18]: [19]:

$TURN_CARE: Turn care - Umdrehungsprfung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm Boole'sch NODE-Feld, WITH MOVE; MOVE ALONG keine 2.20 Die kartesische Bahn folgt normalerweise dem krzesten Pfad fr die Gelenke. Daher kann der Konfigurationsstring fr die Endposition anders sein als der in der MOVE Anweisung. $TURN_CARE ist eine Marke, mit der festgestellt werden kann, ob die Umdrehungszahl der Konfiguration geprft werden muss. Ist die Marke FALSE, braucht nicht geprft zu werden. Wenn sie TRUE ist, sendet das System eine Fehlermeldung, falls die kartesische Bahn versucht, den Roboter auf eine Endposition zu bewegen, bei der die Umdrehungszahl der Konfiguration verschieden von der in der MOVE Anweisung ist.

$TX_RATE: bersetzungsverhltnis
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm eindimensionaler Real-Array schreibgeschtzt keine 1.00 Gibt das Verhltnis zwischen einer Motorumdrehung und einer Achsenumdrehung an. Fr eine Translationsachse wird der Wert in Millimeter angegeben.

00/1200

12-87

$UFR

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$UFRAME: Anwenderbezugssystem des Arms (User Frame)


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von arm_data Arm position WITH MOVE keine 3.31 Stellt den Ort und die Ausrichtung des Anwenderbezugssystems dar.

$USER_ADDR: Adresse der vom Anwender definierten Variablen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler ganzzahliger Array keine 9240576..2130706432 1.00 Die Variable wird benutzt, um die Speicheradresse von $USER_BIT, $USER_BYTE, $USER_WORD und $USER_LONG anzugeben.

$USER_BIT: Anwenderdefinition von Speicherbits


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler boolescher Array keine keine 1.00 Diese Variable kann fr den Zugriff auf die Speicherbits in einer vom Anwender vorgegebenen Adresse verwendet werden. Die Anfangsadresse, von der aus die Bits gezhlt werden, ist in $USER_ADDR[1] angegeben. Die Bitnummerierung bercksichtigt das Speicherbyte, zu dem jedes Bit gehrt. So ist z.B. $USER_BIT[4] das 4. Bit von rechts im ersten Byte ab der in $USER_ADDR[1] angegebenen Adresse; $USER_BIT[10] ist das zweite Bit von rechts vom zweiten Byte ab der Adresse in $USER_ADDR[1].

$USER_BYTE: Anwenderdefinition von Speicherbytes


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array keine keine 1.00 Diese Variable kann fr den Zugriff auf ein Speicherbyte in einer vom Anwender vorgegebenen Adresse verwendet werden. Die Startadresse, von der die Bits gezhlt werden, ist in $USER_ADDR[2] angegeben.

12-88

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$USE

$USER_LEN: Lnge der vom Anwender definierten Variablen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch Steuereinheit eindimensionaler ganzzahliger Array keine 0..65535 1.00 Gibt den Speicherbereich an, auf den mit $USER_BIT, $USER_BYTE, $USER_WORD, $USER_LONG angefangen von der Adresse in $USER_ADDR zugegriffen wird.

$USER_LONG: Anwenderdefinition von Langwort-Speicher


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array keine keine 1.00 Diese Variable kann fr den Zugriff auf ein langes Wort (4 Bytes) im Speicher in einer vom Anwender vorgegebenen Adresse verwendet werden. Die Startadresse, von der ab die Langwrter gezhlt werden, ist in $USER_ADDR[4] angegeben.

$USER_WORD: Anwenderdefinition der Word-Speicher


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array keine keine 1.00 Diese Variable kann fr den Zugriff auf ein Speicherwort (2 Bytes) in einer vom Anwender vorgegebenen Adresse verwendet werden. Die Startadresse, von der ab die Wrter gezhlt werden, ist in $USER_ADDR[3] angegeben.

$VERSION: Softwareversion
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert real schreibgeschtzt keine 1.00 Stellt die aktuelle SW Version dar.

$WEAVE_NUM: Nummer der Oszillationstabelle


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig NODE-Feld, WITH MOVE; MOVE ALONG 0..10 3.00 Gibt das Element der Oszillationstabelle ($WEAVE_TBL) an, das fr die nchsten Bewegungen benutzt werden soll. Um die Schwingung zu sperren, wird diese Variable auf Null gesetzt.

00/1200

12-89

$WEA

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$WEAVE_TBL: Daten der Oszillationstabelle


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: statisch nicht gesichert eindimensionaler Array von weave_tbl keine keine 3.00 $WEAVE_TBL ist ein Array [$NUM_WEAVES] von programmierten Schwingungspunkten, wo jeder Punkt die Felder $WV_xxx enthlt. Um die Schwingung einer Bewegung zu berlagern, mu das entsprechende Element der Oszillationstabelle in der $WEAVE_NUM Variable angegeben werden.

$WEAVE_TYPE: Schwing-Typ
Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig NODE-Feld, WITH MOVE; MOVE ALONG 0..8 3.30 Diese Variable whlt den Schwingtyp zwischen dem kartesischen Modus und dem Gelenkmodus. Diese Variable auf 0 setzen, um kartesisches Schwingen zu aktivieren. Andernfalls kann fr Gelenkschwingen ein Wert zwischen 1 und 8 gewhlt werden, um die Achse fr das Schwingen zu bestimmen.

$WORD: SPS WORD-Daten


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Port nicht gesichert eindimensionaler ganzzahliger Array SPS keine 1.00 Stellt den V Speicher fr die SPS Leiterlogik dar. Diese Variable kann benutzt werden, um Daten zwischen SPS und PDL2 Programmen auszutauschen. Es gibt eine Schattenkopie der ersten 1024 Eintrge fr die HW SPS und die ersten 512 Eintrge fr die SW SPS sowie 8192 Punkte fr die HW SPS und 2048 Punkte fr die SW SPS.

$WRITE_TOUT: Timeout fr ein WRITE


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Programmstack nicht gesichert ganzzahlig keine 0..2147483647 2.20 Gibt den Zeitabbruchswert fr eine asynchrone WRITE Operation in Millisekunden an. Der Standardwert ist Null, d.h. es ist kein Timeout fr WRITE gesetzt. Diese Mglichkeit ist von Nutzen, wenn eine Meldung in einer bestimmten Zeit abgesetzt werden soll.

12-90

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$WV_

$WV_AMP_PER: Prozentuale Schwingungsamplitude


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von weave_tbl Steuereinheit ganzzahlig WITH MOVE 0..1000 3.00 Die Schwingungsverstrkung ist ein Parameter, der die Schwingungsamplitude variabel sein lt. Es ist ein Prozentualwert, der die Amplitude am Ende der derzeitigen Bahn angibt. Die Amplitude verndert sich linear vom Anfangswert bis zum Endwert. Diese Variable wird nur am Anfang der derzeitigen Bewegungsbahn benutzt und wird nicht dynamisch whrend der Bewegung selbst gelesen. Der Standardwert ist 100%.

$WV_CNTR_DWL: Aufenthalt in der Schwingungsmitte


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von weave_tbl Steuereinheit ganzzahlig keine 0..10000 3.00 Gibt die Aufenthaltsdauer auf dem Mittelpunkt der Schwingung an. Der Wert ist in Millisekunden.

$WV_LEFT_AMP: Linke Schwingungsamplitude


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von weave_tbl Steuereinheit real keine keine 3.00 Diese Variable stellt die linke Amplitude der Schwingungen dar. Bei kartesischem Schwingen wird sie in mm ausgedrckt und bei Gelenkschwingen in Grad oder Millimeter, je nachdem ob die gewhlt Achse eine Dreh- oder eine Verschiebeachse ist.

$WV_LEFT_DWL: Linksseitiger Aufenthalt der Schwingung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von weave_tbl Steuereinheit ganzzahlig keine 0..10000 3.00 Gibt die Aufenthaltsdauer auf der linken Seite der Schwingung an. Der Wert ist in Millisekunden.

00/1200

12-91

$WV_

LISTE DER VORBESETZTEN VARIABLEN

PDL2

$WV_PLANE: Winkelstellung der Schwingungsebene


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von weave_tbl Steuereinheit real keine keine 3.00 Bei kartesischem Schwingen ist diese Variable ein Winkel zur Zuweisung der Schwingrichtung. Sie wird in bezug auf den Annherungsvektor (-180 oder +180) am ersten Schwingpunkt berechnet. Ein Wert von 0 bedeutet, dass die Schwingebene senkrecht zur Werkzeugannherung und zur Bahnlinie ist. Diese Variable wird nur am Anfang nicht kontinuierlicher kartesischer Bewegungen benutzt und wird nicht dynamisch whrend der Bewegung gelesen. Bei Gelenkschwingen wird diese Variable ignoriert.

$WV_RIGHT_AMP: Rechte Schwingungsamplitude


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von weave_tbl Steuereinheit real keine keine 3.00 Diese Variable stellt die rechte Amplitude der Schwingungen dar. Bei kartesischem Schwingen wird sie in mm ausgedrckt und bei Gelenkschwingen in Grad oder Millimeter, je nachdem ob die gewhlt Achse eine Dreh- oder eine Verschiebeachse ist.

$WV_RIGHT_DWL: Rechtsseitiger Aufenthalt der Schwingung


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von weave_tbl Steuereinheit ganzzahlig keine 0..10000 3.00 Gibt die Aufenthaltsdauer auf der linken Seite der Schwingung an. Der Wert ist in Millisekunden.

$WV_SMOOTH: Aktivieren von glattem Schwingen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von weave_tbl Steuereinheit boolesch keine keine 3.00 Mit dieser Marke kann sinusfrmiges anstelle von trapezfrmigem Schwingen eingestellt werden. Bei Setzen von $WV_SMOOTH auf TRUE reduziert sich die Frequenz ein wenig. Ein ndern dieser Variable whrend der Bewegung wirkt auf das Schwingen.

12-92

00/1200

PDL2

LISTE DER VORBESETZTEN VARIABLEN

$WV_

$WV_TRV_SPD: Quergeschwindigkeit bei Schwingen


Speicherkategorie: Ladekategorie: Datenklasse: Attribute: Grenzwerte: Softwareversion: Beschreibung: Feld von weave_tbl Steuereinheit real keine keine 3.00 Diese Variable stellt die Quergeschwindigkeit des Werkzeugs beim Schwingen dar. Bei kartesischem Schwingen wird diese in m/sek und bei Gelenkschwingen in Radiant/sek oder in m/sek ausgedrckt, je nachdem ob die gewhlt Achse eine Dreh- oder eine Verschiebeachse ist.

00/1200

12-93

$WV_

LISTE DER VORBESETZTEN VARIABLEN

PDL2

Diese Seite wurde absichtlich leer gelassen

12-94

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN

Handbuch fr Programmiersprache

1 2 3 4 5 6 7 8 9 10 11 12

Anhang A: ZEICHENSTZE
Anhang B: SYNTAX-DIAGRAMME Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

A
B C D Index

INHALT
Abschnitt Seite

ZEICHENSATZ 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-2 ZEICHENSATZ 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-6

Anhang A: ZEICHENSTZE

Handbuch fr Programmiersprache

PDL2

Diese Seite wurde absichtlich leer gelassen

PDL2

ZEICHENSTZE

ZEICHENSTZE
Dieser Anhang listet die ASCII Dezimalcodes, die entsprechenden Hexadezimalcodes, die Zeichenwerte und die graphischen Zeichen auf. Zeichenwerte in Klammern () sind ASCII Steuerzeichen, die auf dem Display des PHG oder - bei aktiven PCINT Tool - auf dem PC Bildschirm als graphische Zeichen wiedergegeben werden. In einem System knnen mehrere Zeichenstze zur Verfgung stehen. Der Standardzeichensatz ist Zeichensatz 1, der mit jedem System geliefert wird. Der Anwender kann mit der im Kapitel "Liste der internen Routinen" beschriebenen Routine SCRN_FONT zwischen den Zeichenstzen umschalten. Jeder Zeichensatz enthlt graphische Zeichen, die auf dem Bildschirm dargestellt werden knnen, wie auch Steuerzeichen, auf die Anwender nicht zugreifen kann. Dieser Anhang listet jeden Satz zusammen mit den entsprechenden Dezimal- und Hexadezimalcodes auf. Der numerische Dezimal- oder Hexadezimalwert eines Zeichens wird in einem STRING benutzt, um das betreffende Zeichen anzugeben. (Zum Beispiel: "Dies \003 ist ein graphisches Zeichen.")

00/1200

A-1

ZEICHENSTZE

PDL2

ZEICHENSATZ 1
Dec 000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024
A-2

Hex 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18

Value (NUL) (SOH) (STX) (ETX) (EOT) (ENQ) (ACK) (BEL) (BS) (HT) (LF) (VT) (FF) (CR) (SO) (SI) (DLE) (DC1) (DC2) (DC3) (DC4) (NAK) (SYN) (ETB) (CAN)

Char

Dec 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049

Hex 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31

Value (EM) (SUB) (ESC) (FS) (GS) (RS) (US) SP ! " # $ % & ' ( ) * + , . / 0 1

Char

Dec 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074

Hex 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A

Value Char 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J


00/1200

PDL2

ZEICHENSTZE

Dec 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100
00/1200

Hex 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64

Value K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d

Char

Dec 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

Hex 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E

Value e f g h i j k l m n o p q r s t u v w x y z { | } ~

Char

Dec 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152

Hex 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98

Value (DEL)

Char

A-3

ZEICHENSTZE

PDL2

Dec 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
A-4

Hex 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2

Value

Char

Dec 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204

Hex B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC

Value

Char

Dec 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230

Hex CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6

Value

Char

00/1200

PDL2

ZEICHENSTZE

Dec 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
00/1200

Hex E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

Value

Char

A-5

ZEICHENSTZE

PDL2

ZEICHENSATZ 2
Dec 000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024
A-6

Hex 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18

Value (NUL) (SOH) (STX) (ETX) (EOT) (ENQ) (ACK) (BEL) (BS) (HT) (LF) (VT) (FF) (CR) (SO) (SI) (DLE) (DC1) (DC2) (DC3) (DC4) (NAK) (SYN) (ETB) (CAN)

Char

Dec 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049

Hex 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31

Value (EM) (SUB) (ESC) (FS) (GS) (RS) (US) SP ! " # $ % & ' ( ) * + , . / 0 1

Char

Dec 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074

Hex 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A

Value Char 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J


00/1200

PDL2

ZEICHENSTZE

Dec 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100
00/1200

Hex 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64

Value K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d

Char

Dec 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

Hex 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E

Value e f g h i j k l m n o p q r s t u v w x y z { | } ~

Char

Dec 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152

Hex 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98

Value (DEL)

Char

A-7

ZEICHENSTZE

PDL2

Dec 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
A-8

Hex 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2

Value

Char

Dec 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204

Hex B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC

Value

Char

Dec 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230

Hex CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6

Value

Char

00/1200

PDL2

ZEICHENSTZE

Dec 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

Hex E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

Value

Char

00/1200

A-9

ZEICHENSTZE

PDL2

Diese Seite ist absichtlich leer gelassen

A-10

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE

Handbuch fr Programmiersprache

1 2 3 4 5 6 7 8 9 10 11 12 A

Anhang B: SYNTAX-DIAGRAMME
Anhang C: PROGRAMMBEISPIELE Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

B
C D Index

Anhang B: SYNTAX-DIAGRAMME

Handbuch fr Programmiersprache

PDL2

Diese Seite wurde absichtlich leer gelassen

PDL2

SYNTAX-DIAGRAMME

SYNTAX-DIAGRAMME
Dieser Anhang enthlt die Syntax-Diagramme der Sprache PDL2. Die Diagramme sind eine visuelle Hilfe zur Beschreibung der Syntaxregeln von PDL2. Zum Lesen der Syntax-Diagramme sollte man links starten und den Geraden und Kurven folgen, bis man das Ende des Diagramms rechts erreicht. Lngs dieses Weges tauchen ovale und rechteckige Objekte auf. Jedes Oval (oder Kreis) reprsentiert ein reserviertes PDL2 Wort oder Symbol. Jedes Rechteck ist ein Element, das in einem anderen Syntax-Diagramm beschrieben ist. Auer den Ovalen und Rechtecken gibt es noch dicke Punkte ber den Linien der Diagramme. Diese zeigen an, dass die folgenden Abschnitte der Anweisung mit einer neuen Zeile beginnen mssen. Falls diese spezielle Regel nicht befolgt wird, setzt der PDL2 Programmeditor in den meisten Fllen automatisch das Zeichen fr einen Zeilenumbruch ein, damit das Programm syntaktisch richtig wird. Der Programmeditor versucht auch, Anweisungen durch automatisches Einfgen reservierter Worte und Symbole zu korrigieren, die in der Anweisung fehlen. Als Beispiel zeigt die folgende Abbildung eine HOLD Anweisung. Bei Lesen von links nach rechts trifft man auf ein ovales Objekt mit dem reservierten PDL2 Wort HOLD. Daher ist die Syntax einfach HOLD.

Beim Folgen der Linien eines Syntax-Diagramms darf nie rckwrts (nach links) gelesen werden, es sei denn es wird einer Kurve gefolgt, die eine Schleife oder eine Elementeliste anzeigt. Auerdem nie auf einer Kurve zurcklaufen. Kurven sollten entsprechend ihres natrlichen Verlaufs gefolgt werden. Das folgende ist z.B. das Syntax-Diagramm fr eine Anweisungsliste. Als erstes findet man eine nach oben vorwrts gewendete Kurve (Kurve A). Kurve A kann gefolgt werden, da keine Notwendigkeit besteht, sich nach hinten zu wenden. Bei Folgen der Kurve A geht der Pfad nach rechts und es folgen drei weitere Kurven (B, C und D), bis das Ende des Diagramms erreicht wird. Dieser spezielle Pfad beschreibt eine leere Anweisungsliste.

Wird nicht der Kurve A gefolgt, stt man auf ein rechteckiges Objekt, das eine ausfhrbare Anweisung anzeigt. Der Grund dafr, dass dies und nicht Kurve E das nchste Element darstellt, ist, dass die Kurve E nach unten zurckgeht, was einen rckwrts gerichteten Pfad verlangt, um der Kurve zu folgen. Nach der ausfhrbaren Anweisung erreicht man eine nach vorn und unten gerichtete Kurve (Kurve F). Dies ist eine optionale Kurve, da man statt ihrer auch die Gerade nehmen kann. Bei Verfolgen der Kurve F erreicht man eine Verzweigung mit entweder einem Doppelpunkt (:) oder einer neuen Zeile (durch einen Punkt angezeigt), dann die Kurve E und dann eine weitere ausfhrbare Anweisung. Daher ist die einzige Mglichkeit, jemals die Kurve E zu durchlaufen, vorher der Kurve F zu folgen. Diese Sequenz im Diagramm einer Anweisungsliste ist ein Schleifenmechanismus mit einer Liste ausfhrbarer Anweisungen, die durch Semikolons oder Zeilenumbrche getrennt sind. Als ein weiters Beispiel zeigt die folgende Abbildung das SyntaxDiagramm fr eine PDL2 IF Anweisung. Ganz links im Diagramm sieht man einen Punkt, was heit, die IF Anweisung muss auf einer neuen Zeile anfangen. Weitergehend findet sich ein Oval mit dem reservierten Wort IF. 00/1200 B-1

SYNTAX-DIAGRAMME

PDL2

Das nchste Element ist ein Rechteck, was anzeigt, dass dem Wort IF ein Ausdruck folgen muss. Die Syntax fr einen Ausdruck ist in einem anderen Syntax-Diagramm beschrieben. Die nchsten beiden Komponenten sind das reservierte Wort THEN gefolgt von einer Anweisungsliste, die weil durch ein Rechteck dargestellt in einem weiteren (weiter oben dargestelltem) Syntax-Diagramm beschrieben ist. Hinter der Anweisungsliste findet sich ein Verzweigungpunkt im Diagramm. Wie man sieht, gibt es zwei Optionen. Die eine ist ein gerader Pfad zum ENDIF und die andere ist ein Pfad mit einem ELSE Absatz vor Erreichen von ENDIF.

PDL2 PROGRAMM

B-2

00/1200

PDL2

SYNTAX-DIAGRAMME

Attribute-Liste

TYPE Vereinbarung

RECORD Typ

00/1200

B-3

SYNTAX-DIAGRAMME

PDL2

NODE Typ

Knotenfeld-Optionen

VAR Vereinbarung

TYPE Verweis
data type

, * ,
A R R AY [ (INTEGER) constant u s e r- d e f i n e d NODE type PAT H OF identifier

(INTEGER) constant ] OF data type

B-4

00/1200

PDL2

SYNTAX-DIAGRAMME

DATA Typ

VAR Klausel

Export Klausel

CONST Vereinbarung

00/1200

B-5

SYNTAX-DIAGRAMME

PDL2

ROUTINE Vereinbarung

Parameter-/Rckgabeklasse-Verweis

B-6

00/1200

PDL2

SYNTAX-DIAGRAMME

Parameter-/Rckgabe-Datenklasse

Anweisungsliste

00/1200

B-7

SYNTAX-DIAGRAMME

PDL2

Ausfhrbare Anweisung
label name identifier :: actionstatement ATTACH statement CLOSE FILE statement CLOSE HAND statement CONDITION statement CYCLE statement DECODE statement DELAY statement ENCODE statement FOR statement GOTO statement IF statement INTERRUPT statement MOVE statement OPEN FILE statement OPEN HAND statement READ statement RELAX HAND statement REPEA T statement RETURN statement SELECT statement WAIT statements WAIT FOR statement WHILE statement WRITE statement

B-8

00/1200

PDL2

SYNTAX-DIAGRAMME

Aktionsanweisung

ACTIVATE statement assignmentstatement CANCEL statement DEACTIV ATE statement decrementstatement DETACH statement
DISABLE CONDITION statement

ENABLE CONDITION statement

EXIT CYCLE statement HOLD statement Incrementstatement LOCK statement PAUSE statement PULSE statement PURGE statement RESUME statement routinecall SIGNAL statement UNLOCK statement UNPAUSE statement

ACTIVATE Anweisung

Zuweisungsanweisung
variable reference
:=

expression

00/1200

B-9

SYNTAX-DIAGRAMME

PDL2

ATTACH Anweisung

CANCEL Anweisung

B-10

00/1200

PDL2

SYNTAX-DIAGRAMME

CLOSE FILE Anweisung

CLOSE HAND Anweisung

CONDITION Anweisung

CONDITION

(INTEGER) expression

CONDITION statement options

WHEN

condition expression

DO

action statement

ENDCONDITION

00/1200

B-11

SYNTAX-DIAGRAMME

PDL2

CONDITION Anweisungsoptionen
FOR arm reference

SCAN

(INTEGER) expression

NODISABLE

ATTACH

CYCLE Anweisung

DEACTIVATE Anweisung

DECODE Anweisung

Decrement Anweisung
(INTEGER) variable reference (INTEGER) expression

-=

DELAY Anweisung

B-12

00/1200

PDL2

SYNTAX-DIAGRAMME

DETACH Anweisung

DISABLE CONDITION Anweisung

ENABLE CONDITION Anweisung

00/1200

B-13

SYNTAX-DIAGRAMME

PDL2

ENCODE Anweisung

EXIT CYCLE Anweisung

FOR Anweisung

GOTO Anweisung

B-14

00/1200

PDL2

SYNTAX-DIAGRAMME

HOLD Anweisung

IF Anweisung

Increment Anweisung
(INTEGER) variable reference
+=

(INTEGER) expression

INTERRUPT Anweisung
DISABLE INTERRUPT statement list ENABLE INTERRUPT

LOCK Anweisung

00/1200

B-15

SYNTAX-DIAGRAMME

PDL2

MOVE Anweisung

Koordinierte Bewegung
= (INTEGER) expression

ADVANCE motion specification

SYNCMOVE

SYNCMOVEFL Y

til clause

til clause

B-16

00/1200

PDL2

SYNTAX-DIAGRAMME

Bewegungsspezifikation

TIL Klausel

Datenliste fr MOVE WITH

00/1200

B-17

SYNTAX-DIAGRAMME

PDL2

OPEN FILE Anweisung

Datenliste fr OPEN WITH

OPEN HAND Anweisung

B-18

00/1200

PDL2

SYNTAX-DIAGRAMME

PAUSE Anweisung

PULSE Anweisung

PURGE Anweisung

READ Anweisung
input item

READ

logical unit number variable reference

00/1200

B-19

SYNTAX-DIAGRAMME

PDL2

RELAX HAND Anweisung

REPEAT Anweisung

RESUME Anweisung

RETURN Anweisung

Routineaufruf

B-20

00/1200

PDL2

SYNTAX-DIAGRAMME

SELECT Anweisung

SIGNAL Anweisung
SIGNAL (SEMAPHORE) variable reference

PATH name SEGMENT identifier

EVENT

(INTEGER) expression

UNLOCK Anweisung

00/1200

B-21

SYNTAX-DIAGRAMME

PDL2

UNPAUSE Anweisung

WAIT Anweisung

WAIT FOR Anweisung

WHILE Anweisung

WRITE Anweisung

B-22

00/1200

PDL2

SYNTAX-DIAGRAMME

Eingabeelement

Ausgabeelement

ARM Verweis

Bedingungsausdruck

Bedingungsausdruck mit AND

00/1200

B-23

SYNTAX-DIAGRAMME

PDL2

Bedingung
( motion condition POWERUP HOLD START SEGMENT WAIT (PATH) identifier (INTEGER) variable reference (INTEGER) constant condition )

WINDOW

SELECT (INTEGER) variable reference (INTEGER) constant

EVENT

BY

ANY programname identifier

ANYERROR ERRORNUM

Program Status condition (INTEGER) variable reference (INTEGER) constant + [ (INTEGER) expression ] BY ANY programname identifier

ERRORCLASS portname predifined variable relational condition (BOOLEAN) variable reference functionname identifier

expression ,

B-24

00/1200

PDL2

SYNTAX-DIAGRAMME

Bewegungsbedingung

Programmzustands-Bedingung

00/1200

B-25

SYNTAX-DIAGRAMME

PDL2

Relationale Bedingung

relational condition operand =

relational condition operand

<>

<

<=

>

>=

Operand fr relationale Bedingungen


variable reference ) + unsigned numeric value

cast data type

Ausdruck
sh if t

B-26

00/1200

PDL2

SYNTAX-DIAGRAMME

Verschiebung
su m

Summe

Produkt

00/1200

B-27

SYNTAX-DIAGRAMME

PDL2

Faktor
cast data type

+
NOT primary

: @ # **

Primr

Konstante

B-28

00/1200

PDL2

SYNTAX-DIAGRAMME

Variablenverweis

Zusammengesetzter Werteaggregat

Identifizierer

Typisierungs-Datenklassen

INTEGER

REAL

00/1200

B-29

SYNTAX-DIAGRAMME

PDL2

INTEGER Wert ohne Vorzeichen


digit

B 0 b O 0 o X 0 x

binary digit

octal digit

hexadecimal digit

REAL Wert ohne Vorzeichen

B-30

00/1200

PDL2
EINFHRUNG IN DIE SPRACHE PDL2 DARSTELLUNG DER DATEN BEWEGUNGSSTEUERUNG SERIELLE EIN-/AUSGABEN MATRIZEN FR EIN-/AUSGABEPORTS AUSFHRUNGSSTEUERUNG ROUTINEN BEDINGUNGSHANDLER SPS FUNKTIONEN LISTE DER ANWEISUNGEN LISTE DER INTERNEN ROUTINEN LISTE DER VORBESETZTEN VARIABLEN Anhang A: ZEICHENSTZE Anhang B: SYNTAX-DIAGRAMME

Handbuch fr Programmiersprache

1 2 3 4 5 6 7 8 9 10 11 12 A B

Anhang C: PROGRAMMBEISPIELE
Anhang D: WIEDERANLAUF NACH STROMAUSFALL INDEX

C
D Index

Anhang C: PROGRAMMBEISPIELE

Handbuch fr Programmiersprache

PDL2

Diese Seite wurde absichtlich leer gelassen

PDL2

PROGRAMMBEISPIELE

PROGRAMMBEISPIELE
Dieser Anhang enthlt eine Reihe von PDL2 Programmbeispielen. Alle hier beschriebenen Bewegungsprogramme wurden fr einen SMARTS4-Roboter entwickelt und getestet. Es ist mglich, diese Programme auch fr andere Robotertypen zu verwenden, wenn die jeweiligen Anweisungen entsprechend gendert werden.

DATENKLASSEN UND VEREINBARUNGEN


Das folgende Programm zeigt Beispiele fr die Vereinbarung von Variablen, und die verschiedenen fr die PDL2 Variablen verwendeten Datenklassen. PROGRAM types NOHOLD CONST c = 8 anum = 1 VAR i : INTEGER

r : REAL b1, b2, b3, b4 : BOOLEAN s1 : STRING[10]


s2 : STRING[c] -- 10 ist die max. Anzahl an Zeichen fr den Wert des Strings

sem : SEMAPHORE NOSAVE ai1 : ARRAY[5] OF INTEGER ab2 : ARRAY[5, 3] OF BOOLEAN v : VECTOR p : POSITION j1 : JOINTPOS j2 : JOINTPOS FOR ARM[1] j3 : JOINTPOS FOR ARM[anum] x1 : XTNDPOS x2 : XTNDPOS FOR ARM[1] x3 : XTNDPOS FOR ARM[anum]
BEGIN -- ARM[1] ist die Spezifizierung fr ein System -- mit mehreren Armen -- Das ist ein zweidimensionaler Array

i := 25 r := 4.5 b1 b2 b3 b4
:= := := := TRUE FALSE ON OFF

s1 := Smart ai1[1] ai1[2] ai1[3] ai1[4] ai1[5]


:= := := := := 10 20 * c 30 + anum c anum 1

00/1200

C-1

PROGRAMMBEISPIELE

PDL2

ab2[1, 1] := TRUE ab2[3, 2] := OFf ab2[5, 3] := FALSE v.X := 15 v.Y := 30 v.Z := 45 p := POS(10, 20, 40.5, 0, 90, 0, ) j1[1] j1[2] j1[3] j1[4] j1[5] j1[6]
:= := := := := := 30 62.369999 90 100 0 45

j2[1] := 0 j2[2] := 0 j2[3] := 90


END types

ROUTINEN
Das folgende Programm zeigt Beispiele fr den Aufruf und die Vereinbarungen von Routinen. Es sind Beispiele sowohl fr Funktionen als auch fr Prozeduren enthalten. PROGRAM rout NOHOLD VAR a, i : INTEGER ROUTINE r1(pi : INTEGER) VAR c : INTEGER -- Das ist eine Prozedurvereinbarung

BEGIN c := 4 IF pi > 10 THEN pi := pi + 10 ELSE pi := pi - c ENDIF WRITE (pi, NL) RETURN -- Die RETURN Anweisungen sind optional in den Prozeduren END r1 ROUTINE r2(pi : INTEGER) : INTEGER VAR e : INTEGER BEGIN e := 10 * pi RETURN(e) -- In den Funktionen mu RETURN eingegeben werden END r2 BEGIN a := 0 i := 4 r1(a) -- Ruft die Prozedur R1 auf -- Der Parameter wird als Verweis bergeben i := i * 2 a := r2((i)) -- Ruft die Funktion R2 auf -- Der Parameter wird als Wert bergeben WRITE (a, NL) END rout C-2 00/1200 -- Das ist eine Funktionsvereinbarung mit einem -- INTEGER-Rckgabewert

PDL2

PROGRAMMBEISPIELE

BEDINGUNGSHANDLER
Das folgende Programm ist ein Beispiel fr Anweisungen mit Bedingungshandlern. Bevor das Programm ausgefhrt wird, mssen die jeweiligen Array Elemente fr Ein- und Ausgabe angegeben werden. PROGRAM cond NOHOLD VAR b : BOOLEAN d, e : INTEGER BEGIN CONDITION[1] : -- Definition eines Bedingungshandlers WHEN (d = e) AND (b = FALSE) DO b := TRUE ENABLE CONDITION[2] -- Gibt einen Bedingungshandler frei ENDCONDITION CONDITION[2] : WHEN b = TRUE DO -- Beispiel fr eine Zustandsbedingung ACTIVATE pippo ENABLE CONDITION[3] PURGE CONDITION[1] -- Lscht die Definition eines Bedingunghandlers ENDCONDITION CONDITION[3] : WHEN $DIN[1]+ DO PULSE $DOUT[33] FOR 2000 ADVANCE PULSE $DOUT[34] FOR 1000 ADVANCE ENABLE CONDITION[4] ENDCONDITION CONDITION[4] : WHEN ANYERROR DO -- Beispiel einer Ereignisbedingung PAUSE pippo WHEN START DO UNPAUSE pippo DEACTIVATE pippo ENDCONDITION

d := 2 e := 2 b := FALSE ENABLE CONDITION[1] PAUSE END cond

E/A-ANWEISUNGEN
Das folgende Programm enthlt Beispiele fr Anweisungen OPEN FILE, READ und WRITE sowie fr interne Routinen in den Fenstern. PROGRAM color NOHOLD VAR screen_lun : INTEGER risposta : BOOLEAN screen : STRING[5] bc, fc : INTEGER BEGIN WRITE (Do you want to use the System Screen (T/F) ? ) -- Bildschirm-Aufforderung READ (answer) IF answer THEN screen := CRT: -- Es wird der Durchlaufbereich des Systembildschirms verwendet 00/1200 C-3 -- LUN Vereinbarung

PROGRAMMBEISPIELE

PDL2

ELSE screen := CRT2: -- Es wird der Durchlaufbereich des Anwenderbildschirms verwendet ENDIF OPEN FILE screen_lun (screen, rw) WIN_COLOR(0, 0, TRUE, screen) WIN_SET_CRSR(0, 0, screen) FOR bc := 0 TO 7 DO FOR fc := 0 TO 7 DO WIN_COLOR(fc, bc, FALSE, screen) -- Verndert die Farbe des Bildschirms WRITE screen_lun (HELLO!!!!!!) ENDFOR WRITE screen_lun (NL) ENDFOR WIN_COLOR(7, 0, FALSE, screen) -- Kehrt zur Standardfarbe des Bildschirms zurck END color

KALIBRIERUNG DES ANWENDERARMS


Das folgende Programm ist ein Beispiel fr die Kalibrierung des Anwenderarms. PROGRAM cala VAR j0 : JOINTPOS BEGIN $PROG_SPD_OVR := 100 $PROG_ACC_OVR := 100 $PROG_DEC_OVR := 100 $ARM_SPD_OVR := 50 $JNT_OVR[1] := 100 $JNT_OVR[2] := 100 $JNT_OVR[3] := 100 $JNT_OVR[4] := 100 $JNT_OVR[5] := 100 $JNT_OVR[6] := 100 -- Zuweisung der Geschwindigkeit -- Zuweisung der Beschleunigung -- Zuweisung der Verlangsamung

j0[1] j0[2] j0[3] j0[4] j0[5] j0[6]

:= := := := := :=

0.0 0.0 90.0 0.0 0.0 0.0

MOVE TO j0 DEACTIVATE END cala -- Deaktiviert das Programm

C-4

00/1200

PDL2

PROGRAMMBEISPIELE

BEWEGUNG
Das folgende Programm lt den Roboter verschiedene Bewegungen ausfhren, um die unterschiedlichen Bewegungsanweisungen zu zeigen. Das Beispiel stellt die Verwendung von verschiedenen Basen und verschiedenen Bewegungsarten sowie den Unterschied zwischen der Bewegung fly und non-fly dar. PROGRAM testmove VAR p0, p1, p2, p3, p4 : POSITION new_base : POSITION j1, j2, j3, j4 : JOINTPOS choose, lun1, lun2, lun3 : INTEGER str : STRING[1] ROUTINE start_rout BEGIN WRITE lun2 WRITE lun2 WRITE lun2 WRITE lun2 MOVE JOINT MOVE JOINT

(NL) (PRELIMINARY MOVEMENTS, NL) (_____________________, NL) (NL) TO p0 TO p1

END start_rout ROUTINE linear_rout BEGIN WRITE lun2 (NL) WRITE lun2 (LINEAR MOVEMENTS, NL) WRITE lun2 (________________, NL) WRITE lun2 (NL) WRITE lun2 (BASE= , $BASE, NL) WRITE lun2 (move linear to p*, NL) MOVE LINEAR TO p2 MOVE LINEAR TO p3 MOVE LINEAR TO p4 MOVE LINEAR TO p1 DELAY 1000 WRITE lun2 (movefly linear to p*, NL) MOVEFLY LINEAR TO p2 ADVANCE MOVEFLY LINEAR TO p3 ADVANCE MOVEFLY LINEAR TO p4 ADVANCE MOVEFLY LINEAR TO p1 ADVANCE DELAY 1000 WRITE lun2 (move linear to j*, NL) MOVE LINEAR TO j2 MOVE LINEAR TO j3 MOVE LINEAR TO j4 MOVE LINEAR TO j1 DELAY 1000 WRITE lun2 (movefly linear to j*, NL) MOVEFLY LINEAR TO j2 ADVANCE MOVEFLY LINEAR TO j3 ADVANCE MOVEFLY LINEAR TO j4 ADVANCE MOVE LINEAR TO j1 ADVANCE DELAY 3000 WRITE lun2 (NL) new_base := POS(150, 150, 150, 0, 0, 0, ) WRITE lun2 (NEW_BASE= , new_base, NL) 00/1200 C-5

PROGRAMMBEISPIELE WRITE lun2 (move linear to p*, NL) MOVE LINEAR TO p2 WITH $BASE = new_base MOVE LINEAR TO p3 WITH $BASE = new_base MOVE LINEAR TO p4 WITH $BASE = new_base MOVE LINEAR TO p1 WITH $BASE = new_base DELAY 1000 WRITE lun2 (movefly linear to p*, NL) MOVEFLY LINEAR TO p2 ADVANCE WITH $BASE MOVEFLY LINEAR TO p3 ADVANCE WITH $BASE MOVEFLY LINEAR TO p4 ADVANCE WITH $BASE MOVEFLY LINEAR TO p1 ADVANCE WITH $BASE DELAY 1000 WRITE lun2 (move linear to j*, NL) MOVE LINEAR TO j2 WITH $BASE = new_base MOVE LINEAR TO j3 WITH $BASE = new_base MOVE LINEAR TO j4 WITH $BASE = new_base MOVE LINEAR TO j1 WITH $BASE = new_base

PDL2

= = = =

new_base new_base new_base new_base

DELAY 1000 WRITE lun2 (movefly linear to j*, NL) MOVEFLY LINEAR TO j2 ADVANCE WITH $BASE = new_base MOVEFLY LINEAR TO j3 ADVANCE WITH $BASE = new_base MOVEFLY LINEAR TO j4 ADVANCE WITH $BASE = new_base MOVE LINEAR TO j1 ADVANCE WITH $BASE = new_base DELAY 3000 END linear_rout

ROUTINE joint_rout BEGIN WRITE lun2 (NL) WRITE lun2 (JOINT MOVEMENTS, NL) WRITE lun2 (_______________, NL) WRITE lun2 (NL) WRITE lun2 (BASE= , $BASE, NL) WRITE lun2 (move joint to p*, NL) MOVE JOINT TO p2 MOVE JOINT TO p3 MOVE JOINT TO p4 MOVE JOINT TO p1 DELAY 1000 WRITE lun2 (movefly joint to p*, NL) MOVEFLY JOINT TO p2 ADVANCE MOVEFLY JOINT TO p3 ADVANCE MOVEFLY JOINT TO p4 ADVANCE MOVEFLY JOINT TO p1 ADVANCE DELAY 1000 WRITE lun2 (move joint to j*, NL) MOVE JOINT TO j2 MOVE JOINT TO j3 MOVE JOINT TO j4 MOVE JOINT TO j1 DELAY 1000 WRITE lun2 (movefly joint to j*, NL) MOVEFLY JOINT TO j2 ADVANCE MOVEFLY JOINT TO j3 ADVANCE MOVEFLY JOINT TO j4 ADVANCE MOVEFLY JOINT TO j1 ADVANCE DELAY 3000 WRITE lun2 (NL) new_base := POS(150, 150, 150, 0, 0, 0, ) C-6 00/1200

PDL2 WRITE lun2 (NEW_BASE= , new_base, NL) WRITE lun2 (move joint to p*, NL) MOVE JOINT TO p2 WITH $BASE = new_base MOVE JOINT TO p3 WITH $BASE = new_base MOVE JOINT TO p4 WITH $BASE = new_base MOVE JOINT TO p1 WITH $BASE = new_base DELAY 1000 WRITE lun2 (movefly joint to p*, NL) MOVEFLY JOINT TO p2 ADVANCE WITH $BASE MOVEFLY JOINT TO p3 ADVANCE WITH $BASE MOVEFLY JOINT TO p4 ADVANCE WITH $BASE MOVEFLY JOINT TO p1 ADVANCE WITH $BASE DELAY 1000 WRITE lun2 (move joint to j*, NL) MOVE JOINT TO j2 WITH $BASE = new_base MOVE JOINT TO j3 WITH $BASE = new_base MOVE JOINT TO j4 WITH $BASE = new_base MOVE JOINT TO j1 WITH $BASE = new_base DELAY 1000 WRITE lun2 (movefly joint to j*, NL) MOVEFLY JOINT TO j2 ADVANCE WITH $BASE MOVEFLY JOINT TO j3 ADVANCE WITH $BASE MOVEFLY JOINT TO j4 ADVANCE WITH $BASE MOVEFLY JOINT TO j1 ADVANCE WITH $BASE DELAY 3000 END joint_rout

PROGRAMMBEISPIELE

= = = =

new_base new_base new_base new_base

= = = =

new_base new_base new_base new_base

ROUTINE circular_rout BEGIN WRITE lun2 (NL) WRITE lun2 (CIRCULAR MOVEMENTS, NL) WRITE lun2 (__________________, NL) WRITE lun2 (NL) WRITE lun2 (BASE= , $BASE, NL) WRITE lun2 (move circular to p* via p#, NL) MOVE CIRCULAR TO p3 VIA p2 MOVE CIRCULAR TO p1 VIA p4 DELAY 1000 WRITE lun2 (movefly circular to p* via p#, NL) MOVEFLY CIRCULAR TO p3 VIA p2 ADVANCE MOVEFLY CIRCULAR TO p1 VIA p4 ADVANCE DELAY 1000 WRITE lun2 (move circular to j* via j#, NL) MOVE CIRCULAR TO j3 VIA j2 MOVE CIRCULAR TO j1 VIA j4 DELAY 1000 WRITE lun2 (movefly circular to j* via j#, NL) MOVEFLY CIRCULAR TO j3 VIA j2 ADVANCE MOVE CIRCULAR TO j1 VIA j4 ADVANCE DELAY 3000 WRITE lun2 (NL) new_base := POS(150, 150, 150, 0, 0, 0, ) WRITE lun2 (NEW_BASE= , new_base, NL) WRITE lun2 (move circular to p* via p#, NL) MOVE CIRCULAR TO p3 VIA p2 WITH $BASE = new_base MOVE CIRCULAR TO p1 VIA p4 WITH $BASE = new_base DELAY 1000 WRITE lun2 (movefly circular to p* via p#, NL) MOVEFLY CIRCULAR TO p3 VIA p2 ADVANCE WITH $BASE = new_base 00/1200 C-7

PROGRAMMBEISPIELE MOVEFLY CIRCULAR TO p1 VIA p4 ADVANCE WITH $BASE = new_base DELAY 1000 WRITE lun2 (move circular to j* via j#, NL) MOVE CIRCULAR TO j3 VIA j2 WITH $BASE = new_base MOVE CIRCULAR TO j1 VIA j4 WITH $BASE = new_base DELAY 1000 WRITE lun2 (movefly circular to j* via j#, NL) MOVEFLY CIRCULAR TO j3 VIA j2 ADVANCE WITH $BASE = new_base MOVE CIRCULAR TO j1 VIA j4 ADVANCE WITH $BASE = new_base DELAY 3000 END circular_rout ROUTINE built_points_rout BEGIN WRITE WRITE WRITE WRITE WRITE

PDL2

lun2 lun2 lun2 lun2 lun2

(NL) (MOVEMENTS TO BUILT POINTS, NL) (_________________________, NL) (NL) (move for, NL)

MOVE FOR 100 TO p0 MOVE JOINT TO p1 WRITE lun2 (move about, NL) MOVE ABOUT VEC(0, 100, 0) BY 45 IN BASE MOVE JOINT TO p1 MOVE ABOUT VEC(100, 0, 100) BY 45 IN BASE MOVE JOINT TO p1 MOVE ABOUT VEC(0, 100, 0) BY 45 IN TOOL MOVE JOINT TO p1 MOVE ABOUT VEC(100, 0, 100) BY 45 IN TOOL MOVE JOINT TO p1 WRITE lun2 (move relative, NL) MOVE RELATIVE VEC(0, 200, 200) IN BASE MOVE JOINT TO p1 MOVE RELATIVE VEC(0, 200, 200) IN TOOL WRITE lun2 (move near, NL) MOVE LINEAR NEAR p0 BY 200 MOVE JOINT TO p1 WRITE lun2 (move away, NL) MOVE LINEAR AWAY 300 MOVE JOINT TO p1 MOVE JOINT NEAR p0 BY 200 MOVE JOINT TO p1 MOVE JOINT AWAY 300 MOVE JOINT TO p1 WRITE lun2 (move by, NL) MOVE BY {10, , 10} MOVE JOINT TO p1 END built_points_rout

BEGIN $ORNT_TYPE := EUL_WORLD $BASE := POS(0, 0, 0, 0, 0, 0, ) $TOOL := POS(0, 0, 234, 0, 0, 0, ) $ARM_SPD_OVR := 100 $PROG_SPD_OVR := 100 $PROG_ACC_OVR := 100 $PROG_DEC_OVR := 100 $TERM_TYPE := COARSE C-8 00/1200

PDL2 $JNT_OVR[1] := 100 $JNT_OVR[2] := 100 $JNT_OVR[3] := 100 $JNT_OVR[4] := 100 $JNT_OVR[5] := 100 $JNT_OVR[6] := 100 $LIN_SPD := 1 $SPD_OPT := SPD_LIN p0 := POS(900, 0, 965, 180.0, 178.2, 180.0, ) p1 := p0 p2 := p0 p3 := p0 p4 := p0 p1.X := p1.X 200 p2.Y := p2.Y 200 p3.X := p3.X + 200 p4.Y := p4.Y + 200 POS_TO_JNTP(p1, j1) POS_TO_JNTP(p2, j2) POS_TO_JNTP(p3, j3) POS_TO_JNTP(p4, j4) WIN_CLEAR(WIN_CLR_ALL, crt1:) WIN_CLEAR(WIN_CLR_ALL, crt2:)

PROGRAMMBEISPIELE

WIN_CLEAR(WIN_CLR_ALL, crt3:) SCRN_SET(PDV_CRT, SCRN_USER) WIN_SEL(crt2:) OPEN FILE lun1 (crt1:, rw) OPEN FILE lun2 (crt2:, rw) OPEN FILE lun3 (crt3:, rw) WIN_COLOR(WIN_BLACK, WIN_CYAN, TRUE, crt1:) WIN_COLOR(WIN_WHITE, WIN_BLUE, TRUE, crt2:) WIN_COLOR(WIN_BLACK, WIN_CYAN, TRUE, crt3:) WIN_SET_CRSR(0, 0, CRT1:) WRITE lun1 (**************************** PROGRAM TESTMOVE ) WRITE lun1 (****************************) WRITE lun2 (LOCATIONS LIST FOR THE TEST :, NL) WRITE lun2 (NL) WRITE lun2 (P1= , p1, NL) WRITE lun2 (P2= , p2, NL) WRITE lun2 (P3= , p3, NL) WRITE lun2 (P4= , p4, NL) WRITE lun2 (J1= , j1, NL) WRITE lun2 (J2= , j2, NL) WRITE lun2 (J3= , j3, NL) WRITE lun2 (J4= , j4, NL) WRITE lun2 (NL) WRITE lun2 (CHOOSE A TESTING PROGRAM :, NL) WRITE lun2 (NL) WRITE lun2 ( 1 : LINEAR MOVEMENTS, NL) WRITE lun2 ( 2 : JOINT MOVEMENTS, NL) WRITE lun2 ( 3 : CIRCULAR MOVEMENTS, NL) WRITE lun2 ( 4 : MOVEMENTS TO BUILT POINTS , NL) WRITE lun2 ( 5 : MAKE ALL TESTS, NL) WRITE lun2 ( 0 : EXIT PROGRAM TESTMOVE, NL) WRITE lun2 ( ANSWER > ) lab:: READ lun2 (choose, NL) WIN_SET_CRSR(0, 0, CRT3:) WRITE lun3 (NL) WRITE lun3 (**************************** TEST IN PROGRESS ) WRITE lun3 (****************************) SELECT choose OF

00/1200

C-9

PROGRAMMBEISPIELE CASE (0): WIN_CLEAR(WIN_CLR_ALL, crt1:) WIN_CLEAR(WIN_CLR_ALL, crt2:) WIN_CLEAR(WIN_CLR_ALL, crt3:) CLOSE FILE lun1 CLOSE FILE lun2 CLOSE FILE lun3 SCRN_SET(PDV_CRT, SCRN_SYS) DEACTIVATE DELAY 1000 CASE (1): start_rout linear_rout CASE (2): start_rout joint_rout CASE (3): start_rout circular_rout CASE (4): start_rout built_points_rout CASE (5): start_rout linear_rout joint_rout

PDL2

circular_rout built_points_rout ELSE: GOTO lab ENDSELECT WIN_CLEAR(WIN_CLR_ALL, crt3:) WIN_SET_CRSR(0, 0, CRT3:) WRITE lun3 (NL) WRITE lun3 (******************* END OF TEST WRITE lun3 (********************) READ lun2 (str) WIN_CLEAR(WIN_CLR_ALL, crt1:) WIN_CLEAR(WIN_CLR_ALL, crt2:) WIN_CLEAR(WIN_CLR_ALL, crt3:) CLOSE FILE lun1 CLOSE FILE lun2 CLOSE FILE lun3 SCRN_SET(PDV_CRT, SCRN_SYS) END testmove

STRIKE ANY KEY TO EXIT )

C-10

00/1200

PDL2

PROGRAMMBEISPIELE

PUNKTSCHWEISSEN
Durch das folgende Programm positioniert sich der Roboter auf den Ausgangspunkt (POS0) und fhrt dann eine Punktschweiung in zwei verschiedenen Stellen (POS1 und POS2) aus. Die Koordinaten der drei Punkte mssen mit Hilfe des Programmierhandgerts erlernt und in einer Datei mit der Erweiterung .VAR abgespeichert werden.

PROGRAM

spot

VAR pos0, pos1, pos2 : JOINTPOS BEGIN $TOOL := POS(130, 0, 160, 0, 0, 0, ) -- Zuweisung Tool $BASE := POS(0, 0, 0, 0, 0, 0, ) -- Zuweisung Base MOVE JOINT TO pos0 MOVE JOINT TO pos1 $DOUT[17] := TRUE -- Beginn Schweien WAIT FOR $DIN[16] $DOUT[17] := FALSE -- Stop Schweien MOVE JOINT TO pos2 $DOUT[17] := TRUE -- Beginn Schweien WAIT FOR $DIN[16] $DOUT[17] := FALSE -- Stop Schweien PULSE $DOUT[18] FOR 100 END spot

00/1200

C-11

PROGRAMMBEISPIELE

PDL2

KREIS- UND LINEARBEWEGUNG


Mit diesem Programm beschreibt der Roboter eine stndige Kreisbewegung. Diese Bewegung erfolgt auf der geometrischen Ebene x-y und verwendet vier Bezugspunkte. Der Roboter verschiebt sich mit einer Kreisbewegung von einem Punkt zum anderen und beschreibt dann zwei lineare Bewegungen lngs des Durchmessers des Umfangs. Dieser Zyklus wird nach der anfnglichen Gelenkpositionierung unendlich oft ausgefhrt.

PROGRAM

circle

VAR p0, p1, p2, p3, p4 : POSITION BEGIN $ARM_SPD_OVR := 100 $JNT_OVR[1] := 100 $JNT_OVR[2] := 100 $JNT_OVR[3] := 100 $JNT_OVR[4] := 100 $JNT_OVR[5] := 100 $JNT_OVR[6] := 100 -- Zuweisung der prozentualen Geschwindigkeit -- von Gelenken und Arm

$TOOL := POS(130, 0, 160, 0, 0, 0, ) $BASE := POS(0, 0, 0, 0, 0, 0, ) p0 := POS(995, 0, 1665, 0, 90, 0, ) p1 := POS(995, 0, 1765, 0, 90, 0, ) p2 := POS(995, 0, 1565, 0, 90, 0, ) p3 := POS(995, 100, 1665, 0, 90, 0, ) p4 := POS(995, 100, 1665, 0, 90, 0, ) MOVE JOINT TO p0 CYCLE -- unendliche Schleife MOVE CIRCULAR TO p2 VIA p3 ADVANCE MOVE CIRCULAR TO p1 VIA p4 ADVANCE MOVE LINEAR TO p2 ADVANCE MOVE LINEAR TO p1 ADVANCE END circle

KONTINUIERLICHE BEWEGUNG
Mit diesem Programm beschreibt der Roboter einen rechteckigen Bereich, wobei er die Anweisung MOVEFLY verwendet. Es ist wichtig festzuhalten, da die Ecken des Rechtecks im Programm definiert werden. Die Routine procsignal wurde dem Programm SUB0 entnommen und wird fr jede Schleife des Programms RECTANG verwendet.

C-12

00/1200

PDL2 PROGRAM

PROGRAMMBEISPIELE

rectang

VAR p0, pa, pb, pc, pd : POSITION ROUTINE procsignal EXPORTED FROM sub0 BEGIN SYS_CALL(ML, SUB0)

-- Das procsignal der Routine gehrt -- dem Programm SUB0

-- Ldt die Datei SUB0.COD

$BASE := POS(0, 0, 0, 0, 0, 0, ) $TOOL := POS(130, 0, 160, 0, 0, 0, ) $ARM_SPD_OVR := 100 $PROG_SPD_OVR := 100 $PROG_ACC_OVR := 100 $PROG_DEC_OVR := 100 $TERM_TYPE := FINE $JNT_OVR[1] $JNT_OVR[2] $JNT_OVR[3] $JNT_OVR[4] $JNT_OVR[5] $JNT_OVR[6] := := := := := := 100 100 100 100 100 100 -- Das ist die Geschwindigkeit des TCP Legt die konstante -- Geschwindigkeit entsprechend der TCP Bahn fest

$LIN_SPD := 0.5 $SPD_OPT := SPD_LIN

p0 := POS(995, 0, 1665, 0, 90, 0, ) $ARM_SPD_OVR := 10 MOVE JOINT TO p0 $ARM_SPD_OVR := 100 pa := POS(995, pb := POS(995, pc := POS(995, pd := POS(995, MOVE LINEAR TO
CYCLE 100, 100, 100, 100, pa 1565, 1565, 1765, 1765, 0, 0, 0, 0, 90, 90, 90, 90, 0, 0, 0, 0, ) ) ) )

procsignal MOVEFLY LINEAR MOVEFLY LINEAR MOVEFLY LINEAR MOVEFLY LINEAR


END rectang

TO TO TO TO

pb pc pd pa

ADVANCE ADVANCE ADVANCE ADVANCE

PROGRAM

sub0 NOHOLD

ROUTINE procsignal EXPORTED FROM sub0 -- Das ist eine exportierte Routine, die somit -- auch von anderen Programmen benutzt werden kan ROUTINE procsignal BEGIN PULSE $DOUT[17] FOR 200 DELAY 5000 END procsignal BEGIN END sub0 00/1200 C-13

PROGRAMMBEISPIELE

PDL2

VOM ANWENDER DEFINIERTE FENSTER


Dieses Programm erstellt vom Anwender definierte Fenster und zeigt sie auf dem Anwenderbildschirm an. Es werden sowohl feste als auch Popup Fenster verwendet. PROGRAM win NOHOLD VAR i : INTEGER lun : INTEGER BEGIN -- Erstellt neue vom Anwender definierte Fenster fr den Anwenderbildschirm WIN_CREATE(USR1:, PDV_CRT, WIN_SCROLL OR WIN_WRAP, 25) WIN_CREATE(POP1:, PDV_CRT, WIN_SCROLL OR WIN_WRAP, 10) -- Gibt Farbe und Attribute der Anwenderfenster ein WIN_COLOR(WIN_WHITE, WIN_BLUE, TRUE, USR1:) WIN_ATTR(WIN_BOLD_ON, USR1:) WIN_COLOR(WIN_BLACK, WIN_RED, TRUE, POP1:) -- Entfernt Systemfenster vom Anwenderbildschirm WIN_REMOVE(CRT1:) WIN_REMOVE(CRT2:) WIN_REMOVE(CRT3:) -- Zeigt Anwenderfenster auf dem Anwenderbildschirm an WIN_DISPLAY(USR1:, SCRN_USER, 0) -- ffnet ein E/A lun auf dem anwenderdefinierten Fenster OPEN FILE lun (USR1:, rw) -- Fenster USR1 auf dem Anwenderbildschirm (CRT) FOR i := 1 TO 25 DO WRITE lun (i, : This is an example of window builtins, NL) ENDFOR CLOSE FILE lun -- Popup Fenster ber das bestehende Fenster USR1 legen WIN_POPUP(POP1:, USR1:) OPEN FILE lun (POP1:, rw) -- Fenster POP1 auf dem Anwenderbildschirm (CRT) FOR i := 1 TO 10 DO WRITE lun (i, : This is an example of a popup window, NL) ENDFOR CLOSE FILE lun -- Der Anwender liest die Ausgabe auf dem Popup Fenster DELAY 5000 -- Entfernt und lscht Fenster POP1 vom Anwenderbildschirm WIN_REMOVE(POP1:) WIN_DEL(POP1:) -- Entfernt und lscht Fenster USR1 vom Anwenderbildschirm WIN_REMOVE(USR1:) WIN_DEL(USR1:) -- Ze