Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

Schleife programmieren, Messprogramm soll Intervall-Messung ausführen

Beitrag 05.04.2022, 07:44 Uhr
Lindenmann_Hirner
Lindenmann_Hirne...
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 07.12.2019
Beiträge: 12
Hallo,

wir messen immer wieder unsere Rohteile auf unseren Maschinen mit Siemens 840D-Steuerung.
Messprogramme mit L3201,L3101.... ( der Inhalt ist eigentlich für euch sekundär ).
Es ist am Anfang des Bearbeitungsprogramm.
Kurz messen und dann folgt die Bearbeitung.

- 1-fach Spannungen ( bei anderen Produkten auch mehrfach )
- 1. und 2. Arbeitsgang
- im 1. Arbeitsgang gibt es einen Zähler ( R913 ) für die Gravur der laufenden Teilenummer
- im 2. Arbeitsgang messen wir unsere Spannpunkte vom 1.AG.

Jetzt läuft das Messprogramm permanent im 2. AG.
Was müssen wir tun, dass das Messprogramm z.Bsp jeden 5. Umlauf aktiv ist, oder jeden 8?
Entweder mit R-Parametern oder UGUD`s bzw. auch den GM_PALNCPARA .
Wie muss dieses aussehen?
Danke.

Gruß
Hirner
   
Beitrag 05.04.2022, 09:05 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.928
Du brauchst einen Zähler, der die Programmdurchläufe zählt und - wenn ich das richtig verstehe - seinen Wert über das Programmende hinaus behält, d.h. du brauchst eine GUD-Variable oder einen R- Parameter.
Angenommen der der Zähler steht in R100 könntest du das folgendermaßen lösen:
CODE
DEF INT _MESS_INTERVALL = 5
.
.
.
R100 = R100 + 1
IF (R100 MOD MESS_INTERVALL == 0
; Messprogramm ausführen
ENDIF
   
Beitrag 05.04.2022, 09:30 Uhr
Lindenmann_Hirner
Lindenmann_Hirne...
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 07.12.2019
Beiträge: 12
QUOTE (CNCFr @ 05.04.2022, 09:05 Uhr) *
Du brauchst einen Zähler, der die Programmdurchläufe zählt und - wenn ich das richtig verstehe - seinen Wert über das Programmende hinaus behält, d.h. du brauchst eine GUD-Variable oder einen R- Parameter.
Angenommen der der Zähler steht in R100 könntest du das folgendermaßen lösen:
CODE
DEF INT _MESS_INTERVALL = 5
.
.
.
R100 = R100 + 1
IF (R100 MOD MESS_INTERVALL == 0
; Messprogramm ausführen
ENDIF


Hallo,
oben heißt dann jeden 5 Durchlauf, oder?
Muss dann nicht "IF (R100 MOD MESS_INTERVALL == 0" heißen IF (R100 MOD MESS_INTERVALL == 5 ?
danke.
   
Beitrag 05.04.2022, 09:42 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.928
== 5 geht nicht. Aber alles von == 0 bis ==4 ist OK.
Der Programmzähler wird durch 5 dividiert und MOD gibt den Rest der Division zurück, der die Werte von 0 bis 4 annehmen kann. Damit schlägt die Abfrage in jedem 5. Durchlauf zu.
Der Unterschied besteht nur darin, wann das zum ersten Mal passiert.
Wenn mir mal davon ausgehen, R100 am Anfang gleich 0 ist bedeutet das, dass zum ersten Mal im 5. Durchlauf gemessen wird. Denn zunächst wird R100 inkrementiert und hat deshalb den Wert 1. Bei Division durch 5 bleibt der Rest 1, und in den folgenden Durchläufen dann 2, 3, und 4.
Im fünften Durchlauf hat auch der Zähler den Wert 5. Dividiert durch 5 ergibt 1 mit dem Rest 0 und damit ist die Abfragebedingung erfüllt.

Der Beitrag wurde von CNCFr bearbeitet: 05.04.2022, 09:48 Uhr
   
Beitrag 05.04.2022, 10:16 Uhr
Lindenmann_Hirner
Lindenmann_Hirne...
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 07.12.2019
Beiträge: 12
QUOTE (CNCFr @ 05.04.2022, 09:42 Uhr) *
== 5 geht nicht. Aber alles von == 0 bis ==4 ist OK.
Der Programmzähler wird durch 5 dividiert und MOD gibt den Rest der Division zurück, der die Werte von 0 bis 4 annehmen kann. Damit schlägt die Abfrage in jedem 5. Durchlauf zu.
Der Unterschied besteht nur darin, wann das zum ersten Mal passiert.
Wenn mir mal davon ausgehen, R100 am Anfang gleich 0 ist bedeutet das, dass zum ersten Mal im 5. Durchlauf gemessen wird. Denn zunächst wird R100 inkrementiert und hat deshalb den Wert 1. Bei Division durch 5 bleibt der Rest 1, und in den folgenden Durchläufen dann 2, 3, und 4.
Im fünften Durchlauf hat auch der Zähler den Wert 5. Dividiert durch 5 ergibt 1 mit dem Rest 0 und damit ist die Abfragebedingung erfüllt.


Danke, hab es verstanden.
Letzte Frage, fehlt dort eine Klammer oder können wir es so probieren?
IF (R100 MOD MESS_INTERVALL == 0
   
Beitrag 05.04.2022, 10:39 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.928
Ja, die schließende Klammer fehlt.
Es bestätigt sich mal wieder: Man sollte auch eine einzelne Zeile nicht publizieren, wenn man sie nicht vorher getestet hat.
   
Beitrag 05.04.2022, 14:44 Uhr
Lindenmann_Hirner
Lindenmann_Hirne...
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 07.12.2019
Beiträge: 12
QUOTE (CNCFr @ 05.04.2022, 11:39 Uhr) *
Ja, die schließende Klammer fehlt.
Es bestätigt sich mal wieder: Man sollte auch eine einzelne Zeile nicht publizieren, wenn man sie nicht vorher getestet hat.


Letzte Frage, runden.

R905=(ROUND(R905*10))/10

Bei einer bestimmten Konstellation bekommen wir einen Wert z.Bsp. 91
Ein Mitarbeiter möchte aber gerne in der Ausgabe ( write - Befehl ) 91.0

In der Praxis machen wir es so,

N260 R901=(ROUND(R83*10))/10 ; OBEN LINKS
N270 OL=<<R901
N280 IF STRLEN(OL)<2
N290 OL=<<OL<<".0"
N300 ENDIF

vorher am Programmanfang,

N120 DEF STRING[6] OL, LI_OR, UL, UR, ALO, ALU, NR

Ein hoher Aufwand, geht es auch einfacher?
Danke.
   
Beitrag 05.04.2022, 15:06 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.928
Das sollte so gehen (auch nicht getestet):
DEF STRING[20] _ZAHL
.
.
.
CODE
DEF STRING[20]
.
.
_ZAHL =  SPRINT("%10.1F", R905)


Siehe dazu das Handbuch "Arbeitsvorbereitung", Kapitel "String formatieren (SPRINT)"
   
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: