Roboterforum Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?
22. Mai 2012, 04:14:42
Übersicht Hilfe Suche Kalender Einloggen Registrieren
News: >> Roboterprogrammierer gesucht !? <<

Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  ABB Roboter (Moderatoren: burlibua, Sven Weyer, rmac)  |  Thema: Indirekte Adressierung 0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Indirekte Adressierung  (Gelesen 1524 mal)
mod-poser
Gast
« am: 29. November 2005, 20:58:50 »

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
Gespeichert
Werner Hampel
Administrator
Forenjunkie
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1484



WWW
« Antworten #1 am: 04. Dezember 2005, 11:13:22 »

 supi

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

Denke das is nix für ne Instandhaltung.
Gespeichert

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.
rmac
Global Moderator
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 282


« Antworten #2 am: 04. Dezember 2005, 15:13:53 »

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:
Code:
  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
Gespeichert
mod-poser
Gast
« Antworten #3 am: 06. Dezember 2005, 12:29:46 »

Klasse Tip Rainer, Danke!

Gruß
msc
Gespeichert
Seiten: [1] Nach oben Drucken 
Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  ABB Roboter (Moderatoren: burlibua, Sven Weyer, rmac)  |  Thema: Indirekte Adressierung « vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS