540.756 aktive Mitglieder*
8.415 Besucher online*
Kostenfrei registrieren
Anmelden Registrieren
Siemens Forum

Digital Industries, Motion Control, Machine Tool Systems

Nullpunkt mit Variable angeben

Beitrag 01.02.2021, 18:20 Uhr
Malukin
Malukin
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 30.09.2012
Beiträge: 10

Hallo zusammen,

ich arbeite an einer Karusseldrehmaschine und suche einen Weg, den Nullpunkt nicht per ankratzen am Rohteil, sondern als Variable im Programmkopf zu definieren.
Angenommen vom Rohteil bis zur Planscheibe sind 100 mm, dann soll es ca. so aussehen:

DEF REAL ABSTAND ;ist nur das reservieren von speicher für eine Kommazahl.
ABSTAND = 100 ;hier gibt man den immer wieder neu gemessenen Abstand ein

Jetzt hatte ich ganz einfach gedacht und folgendes probiert:

G54 = G54 + Abstand

Das war allerdings zu einfach gedacht smile.gif
Dann hab ich das ganze mit Trans probiert, klappt grundsätzlich auch, aber ich will das alles lieber im Programmkopf definiert haben.

Wie macht ihr das bei euch? Gibt es eine saubere Lösung?

Danke euch für die Unterstützung.

TOP    
Beitrag 01.02.2021, 18:41 Uhr
CNCFr
CNCFr
Level 7 = IndustryArena-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.588

Falls dein Abstand in der X Achse ist, dann z.B. so:
QUELLTEXT
DEF REAL ABSTAND = 100
.
.
.
$P_UIFR[1,X,TR] = $P_UIFR[1, X, TR] + ABSTAND
G54


Der Beitrag wurde von CNCFr bearbeitet: 01.02.2021, 18:42 Uhr
TOP    
Beitrag 01.02.2021, 21:07 Uhr
Malukin
Malukin
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 30.09.2012
Beiträge: 10

ZITAT(CNCFr @ 01.02.2021, 18:41 Uhr) *
Falls dein Abstand in der X Achse ist, dann z.B. so:
QUELLTEXT
DEF REAL ABSTAND = 100
.
.
.
$P_UIFR[1,X,TR] = $P_UIFR[1, X, TR] + ABSTAND
G54


Danke Dir für die schnelle Antwort. Werde ich direkt morgen ausprobieren!
TOP    
Beitrag 01.02.2021, 22:04 Uhr
CNCFr
CNCFr
Level 7 = IndustryArena-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.588

ZITAT(Malukin @ 01.02.2021, 18:20 Uhr) *
Dann hab ich das ganze mit Trans probiert, klappt grundsätzlich auch, aber ich will das alles lieber im Programmkopf definiert haben.

Was spricht dagegen, das im Programmkopf zu machen? Also z.B. so:
QUELLTEXT
DEF REAL ABSTAND = 100
.
.
.
TRANS X=ABSTAND
G54

Die Lösung hat natürlich den Vorteil, dass dein Grundmaß in G54 nicht verändert wird, während in der Lösung nach #2 der alte Wert eben überschrieben wird. Ob das bei deiner Anwendung stört oder nicht, weiß ich allerdings nicht.
Den gleichen Effekt, dass das Basismaß und das Zusatzmaß (ABSTAND) getrennt gehalten werden, erreichst du aber auch, wenn du den Abstand im einstellbaren Frame (G54) in den Feinverschiebungsanteil schreibst.

Der Beitrag wurde von CNCFr bearbeitet: 01.02.2021, 22:05 Uhr
TOP    
Beitrag 22.03.2021, 11:50 Uhr
Malukin
Malukin
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 30.09.2012
Beiträge: 10

Ich habe, dank eurer Hilfe, die optimale Lösung für uns gefunden. Nur eine einzige Sache würde ich noch gerne besser machen.
Gibt es eine Möglichkeit, die Variablendefinitionen in ein Unterprogramm zu packen? Mir ist klar, dass es sich aktuell um lokale
Variablen handelt. Ich poste hier nochmal Beispielhaft wie es aktuell ausschaut:

N10 PROC ZWEITE_SEITE


;ANLEGEN DER BENOETIGTEN VARIABLEN
N20 DEF REAL ROHTEIL ;SPEICHER FUER VARIABLE ROHTEIL
N30 DEF REAL ABSTAND ;SPEICHER FUER VARIABLE ABSTAND
N50 DEF REAL FERTIGTEIL ;SPEICHER FUER VARIABLE FERTIGTEIL
N60 DEF REAL REST ;SPEICHER FUER VARIABLE REST
N70 DEF REAL DAUSSEN ;SPEICHER FUER VARIABLE DAUSSEN
N75 DED REAL DINNEN ;SPEICHER FUER VARIABLE DINNEN
;///////////////////////////////////////////////////////////////////////

ROHTEIL=60
FERTIGTEIL=45
DAUSSEN=900
DINNEN=400
REST=ROHTEIL-FERTIGTEIL

;MASSE FUER ABSTANDHALTER
;// LANG 128.95
;// KURZ 105.8
N80 ABSTAND=128.95
;///////////////////////////////////////////////////////////////////////

;G54 WIRD IN Z VERSCHOBEN UM DEN IN VARIABLE ABSTAND HINTERLEGTEN WERT
;1 IST G54, 2 G55 ETC.
N90 $P_UIFR[1,Z,TR]=-1490.678 ;SETZT NULLPUNKT AUF FUTTERKANTE

;NEUER NULLPUNKT
N100 $P_UIFR[1,Z,TR]=$P_UIFR[1,Z,TR]+ABSTAND+FERTIGTEIL
;//////////////////////////////////////////////////////////////////////

Gibt es da eine Möglichkeit?







ZITAT(CNCFr @ 01.02.2021, 22:04 Uhr) *
Was spricht dagegen, das im Programmkopf zu machen? Also z.B. so:
QUELLTEXT
DEF REAL ABSTAND = 100
.
.
.
TRANS X=ABSTAND
G54

Die Lösung hat natürlich den Vorteil, dass dein Grundmaß in G54 nicht verändert wird, während in der Lösung nach #2 der alte Wert eben überschrieben wird. Ob das bei deiner Anwendung stört oder nicht, weiß ich allerdings nicht.
Den gleichen Effekt, dass das Basismaß und das Zusatzmaß (ABSTAND) getrennt gehalten werden, erreichst du aber auch, wenn du den Abstand im einstellbaren Frame (G54) in den Feinverschiebungsanteil schreibst.

TOP    
Beitrag 22.03.2021, 15:15 Uhr
CNCFr
CNCFr
Level 7 = IndustryArena-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.588

So wie du es dir offensichtlich vorstellst geht es - denke ich - nicht.
Was ist überhaupt der Grund, dass du die Definition von der Benutzung der Variablen trennen willst. Ich finde es so, wie es jetzt ist besser.
Dazu noch eine Anmerkung:
Du musst die die Definition und die Initialisierung der Variablen nicht trennen. Du kannst also z.B. für deine erste Variable auch schreiben:

N20 DEF REAL ROHTEIL = 60 ;SPEICHER FUER VARIABLE ROHTEIL

Zu deiner ursprünglichen Frage: Du kannst im Hauptprogramm sogenannte PUDs (Programmglobale Anwendervariable) definieren, die dann, wie der Name schon sagt, von überall aus gesehen werden. Das ist natürlich nicht das, was du willst.
Weiterhin kannst du Files anlegen, in denen Du GUDs (Gloable Anwendervariable) definierst. Die sind dann ebenfalls von überall verwendbar und bleiben zusätzlich beim Ausschalten der Steuerung erhalten, verhalten sich als ähnlich wie R-Parameter.
Nachlesen kannst du das im Handbuch "Arbeitsvorbereitung" im Kapitel "Definition von Anwendervariablen" (ist nur etwa eine Seite).

Die letzte Möglichkeit, die mir noch einfällt: Du definierst die Variablen in einem Unterprogramm. Zu jedem dieser Variablen bekommt das Unterprogramm einen Parameter mit Call-by-Reference, dem im Unterprogramm der jeweilige Variablenwert zugewiesen wird. Das Unterprogramm kann man dann da aufrufen, wo man es braucht.
Ich würde das aber nicht empfehlen. Das ist unübersichtlich und umständlich. Außerdem erzeugt man damit indirekt letztlich so etwas wie globale Variable, mit den bekannten Nachteilen (die Variablen können an beliebigen Stellen nicht nur gelesen, sondern auch verändert werden).
Von allen Varianten scheint mir die die beste zu sein, die du schon realisiert hast.
TOP    
Beitrag 22.03.2021, 22:39 Uhr
Malukin
Malukin
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 30.09.2012
Beiträge: 10

Ich möchte nur, dass mein Hauptprogramm etwas übersichtlicher wirkt. Ein wirkliches "muss" ist es nicht, es wäre aber schöner.

Ich werde mich mal mit den GUDs einlesen. Danke für den Tipp.
TOP    
Beitrag 23.03.2021, 09:14 Uhr
RalfS.
RalfS.
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 09.07.2006
Beiträge: 27

Hallo,
Warum packst du die Verschiebung nicht in einen Zyklus mit Parameterübergabe? dann bleibt dein Hauptprogramm auch übersichtlich...
Also so in der Art....

Abstand(1,100)

Im Zyklusprogramm mit dem Dateinamen "Abstand "dann die eins für G45 und die 100 dann für den Abstand definieren.

Würde die Verschiebung dann inkremental machen, das der NP 54 nicht verändert wird.

Dann ist es übersichtlich, und flexibel....
TOP    
Beitrag 23.03.2021, 12:48 Uhr
CNCFr
CNCFr
Level 7 = IndustryArena-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.588

Was ist G45?
TOP    
Beitrag 23.03.2021, 12:50 Uhr
RalfS.
RalfS.
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 09.07.2006
Beiträge: 27

Sorry, G54 :wacko: :grr:

Der Beitrag wurde von RalfS. bearbeitet: 23.03.2021, 12:53 Uhr
TOP    



1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: