20. Januar 2019, 18:07:06
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

 Indirekte Adressierung


normal_post Autor Thema:  Indirekte Adressierung  (Gelesen 2186 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

29. November 2005, 20:58:50
Gelesen 2186 mal

mod-poser

Gast
Immer wieder muss man Variablen abhängig vom Prozess anders beschreiben.
Meist progrmmieren meine Kollegen dies mit IF THEN ELSE oder TEST Befehlen.
Einfacher aber ist es dafür Arrays zu deklarieren, das geht mit jedem Datentyp.
Einfach unter View > 4 Datentyp auswählwen, und dann mit mit VIEW > 6 NEW ARRAY neues
Datenfeld anlegen.
Unter VIEW > 4 Datenyp auswählen und Variable mit Cursor markieren ENTER drücken,
schon sieht man das Array mit allen Dimensionen.
Jetzt braucht man nur noch eine Prozess-ID,bekommt man meist in Form einer Programm- oder
Werkzeugnummmer, und schon geht's los.
Wo früher stand : IF nMould_No=1 THEN
                                nOutput:=15;
                             ELSEIF nMould_No=2 THEN
                                nOutput:=19;
                              .
                              .
                             ENDIF

steht jetzt nur noch :  PERS num nOutPut_Array{3}:=[15,19,22];

                                    nOutput:=nOutPut_Array{nMould_No};

Gruß
msc
  • gefällt mir    Danke

Heute um 18:07:06
Antwort #1

Werbung

Gast

04. Dezember 2005, 11:13:22
Antwort #1
Offline

Werner Hampel

Administrator
 :supi:

is zwar kürzer, dafür schauts total kompliziert aus.

Denke das is nix für ne Instandhaltung.
  • gefällt mir    Danke
Menschen brauchen Roboter, aber auch Roboter brauchen Menschen.
Roboter sichern die Arbeitsplätze und den Fortschritt der Industrieländer, da sie kostengünstig und qualitativ hochwertig produzieren.
Ohne Automatisierung mit Robotern werden unsere Produkte in Billiglohnländern hergestellt.

04. Dezember 2005, 15:13:53
Antwort #2
Offline

rmac


Also ich würde auch die zweite Version (mit Array) bevorzugen.
Allerdings würde ich (bei beiden Versionen) weitestgehend mit Konstanten arbeiten. Ist zwar mehr Schreiberei und auf den ersten Blick auch nicht wirklich übersichtlich, aber spätestens der nächste Kollege der an diesem Projekt arbeiten muß wird es einem danken...

Also etwa so:
  CONST num CMaxItems:=3;
  CONST num CItemNo4711:=1;
  CONST num CItemNo4712:=2;
  CONST num CItemNo4799:=3;
 
  CONST num CIN4711_Param1:=15;
  CONST num CIN4712_Param1:=19;
  CONST num CIN4799_Param1:=22;

! Das geht leider bei Persistenten nicht, da bei PERS keine Deklaration mit bezeichneten Konstanten erlaubt ist
!  PERS num nOutPut_Array{CMaxItems}:=[CIN4711_Param1,CIN4712_Param1,CIN4799_Param1];  <- Fehler !!!
! aber bei VARs gehts
  VAR num nOutPut_Array{CMaxItems}:=[CIN4711_Param1,CIN4712_Param1,CIN4799_Param1];
! wenn's PERS sein muß, dann nur so:
  PERS num nOutPut_Array{CMaxItems}:=[15,19,22];

! in der "alten" Version sähe es dann so aus:
   TEST nMould_No
     CASE CItemNo4711 : nOutput := CIN4711_Param1;
     CASE CItemNo4712 : nOutput := CIN4712_Param1;
     CASE CItemNo4799 : nOutput := CIN4799_Param1;
     DEFAULT: Stop;
   ENDTEST

Ein Nachteil der Array-Methode ist jedoch das die Indizierung lückenlos sein muß und bei Eins beginnt. Wenn z.B. die Teile/Artikel/Item-Nummer von einem übergeordneten Prozessleitrechner in ASCII-Form ("ABC-221244", "ADB-469809", "XYZ-909850", usw.) geliefert wird, oder als Ganzzahl mit großen Lücken (z.B.: 0, 23, 567, 698977, usw.) dann müsste man diese Nummer erst wieder in einen fortlaufenden Index konvertieren und dann kann man schon fast wieder besser mit TEST bzw. IF THEN ELSE arbeiten.
Bei einer großen Anzahl von Varianten und/oder bei großen Parametersätzen würde ich aber ohnehin alles in eine externe Konfig.-Datei packen die vom Rob gelesen wird und mit einem (Text-)Editor angepasst werden kann.

Schönes WE noch
Rainer
  • gefällt mir    Danke

06. Dezember 2005, 12:29:46
Antwort #3

mod-poser

Gast
Klasse Tip Rainer, Danke!

Gruß
msc
  • gefällt mir    Danke


Teile per facebook Teile per linkedin Teile per pinterest Teile per reddit Teile per twitter
 

über das Roboterforum

Nutzungsbedingungen Impressum Datenschutzerklärung

Sponsoren des Roboterforums

ROBTEC GmbH