Essetre-TURN 2.5b1 :

- primo commit.
This commit is contained in:
DarioS
2023-03-03 10:13:29 +01:00
commit 818bd1650a
26 changed files with 9023 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
/Tools
/Machinings
/SetUp
/Beam/Ts3Data.bak
/Beam/CutData.lua
/Beam/DrillData.lua
/Beam/MillingData.lua
/Beam/PocketingData.lua
/Beam/SawingData.lua
/Beam/Ts3Data.lua
/Wall/Ts3Data.bak
/Wall/CutData.lua
/Wall/DrillData.lua
/Wall/MillingData.lua
/Wall/PocketingData.lua
/Wall/SawingData.lua
/Wall/Ts3Data.lua
+125
View File
@@ -0,0 +1,125 @@
-- BeamData.lua by Egaltech s.r.l. 2022/04/04
-- Raccolta dati generali per Travi
EgtOutLog( ' TURN-BeamData started', 1)
-- Tabella per definizione modulo
local BeamData = {
SIMUL_VIEW_DIR = 4, -- direzione di vista predefinita per la simulazione (1=NW, 2=SW, 3=NE, 4=SE)
GO_FAST = 0, -- flag abilitazione modalità veloce (0=no, 1=carrelli, 2=anche cambio utensili)
MIN_WIDTH = 40, -- larghezza minima del grezzo
MIN_HEIGHT = 40, -- altezza minima del grezzo
MAX_WIDTH = 650, -- larghezza massima del grezzo
MAX_HEIGHT = 400, -- altezza massima del grezzo
LEN_SHORT_PART = 1200, -- lunghezza massima pezzo corto
LEN_VERY_SHORT_PART = 400, -- lunghezza massima pezzo molto corto (molto probabile lo scarico a caduta)
MAX_RAW = 30000, -- massima lunghezza grezzo (deve essere minore di LenTable - RAW_OFFSET)
STD_RAW = 14000, -- lunghezza standard della barra di grezzo
OVM_HEAD = 10, -- sovramateriale testa
OVM_MID = 5.4, -- sovramateriale intermedio (spessore lama)
MINRAW_S = 750, -- minimo grezzo in coda scaricabile per sezioni piccole
MINRAW_L = 1070, -- minimo grezzo in coda scaricabile per sezioni grandi
MAX_LEN_SCRAP = 270, -- massima lunghezza scarto di coda
MAX_LEN_SCRAP_START = 270, -- massima lunghezza scarto di testa
MAX_DIM_HTCUT = 200, -- larghezza massima taglio di testa o coda
MAX_DIM_HTCUT_HBEAM = 180, -- larghezza massima taglio di testa o coda con trave alta
MIN_DIM_HBEAM = 360, -- altezza minima di trave alta
MAX_DIM_DICE = 110, -- dimensione trasversale massima cubetto
MAX_LEN_DICE = 400, -- lunghezza massima cubetto
COLL_SIC = 5, -- distanza di sicurezza per collisioni
CUT_SIC = 60, -- distanza di sicurezza per tagli
CUT_EXTRA = 5, -- affondamento extra standard per tagli di lama e fresature
CUT_EXTRA_MIN = 1, -- affondamento extra ridotto per tagli di lama e fresature
NZ_MINA = -2, -- componente limite in Z normale di una faccia (-36.8deg)
NZ_MINB = -2, -- componente limite in Z normale di un insieme di facce (-23deg)
DRILL_TOL = 0.2, -- tolleranza tra diametro foro e diametro punta
DRILL_RANGE = 100, -- distanza max tra fori da raggruppare
DRILL_RANGE_SP = 75, -- distanza max tra fori da raggruppare se pezzo corto
DRILL_VZ_MIN = -2, -- componente limite in Z del versore di un foro
DRILL_VX_MAX = 0.867, -- componente limite in X del versore di un foro sulle facce laterali
DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature
MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature
MAX_DIST_HTFEA = 50.0, -- massima distanza di feature da testa o coda per essere considerata tale
MAX_LEN_HTFEA = 2000.0, -- massima lunghezza di feature di testa o coda
LONGCUT_ENDLEN = 800, -- lunghezza lavoro estremi iniziale e finale
LONGCUT_MAXLEN = 1200, -- lunghezza massima sezione di taglio longitudinale
MAX_LEN_RIDGELAP_FROM_BOTTOM = 141, -- massima lunghezza ridgelap lavorabile da sotto
MAX_LEN_RIDGELAP_FROM_BOTTOM_HBEAM = 96, -- massima lunghezza ridgelap lavorabile da sotto con trave alta
DIM_TO_CENTER_STRIP = 0, -- larghezza minima trave per inseriemento codolo nel centro del trave; 0 = automatico
DIM_STRIP = -1, -- dimensione codolo sostegno parti lasciate su contorno libero o archi (-1 = da Q...)
DIM_STRIP_SMALL = 1, -- dimensione codolo piccolo (quando le parti sostenute sono sicuramente sulla parte sopra del pezzo)
RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo
RAW_OFFSET = 2000, -- spostamento grezzo rimanente dopo split
VICE_MINH = 110, -- altezza minima della morsa
OFFSET_DRILL_TENON = 0, -- offset fori su tenoni verso base degli stessi (0=non fare)
USER_HOLE_DIAM = 0, -- diametro foro per L20
MAX_TOOL_LEN_FOR_HOR_MACH = 311, -- massima lunghezza utensile per poter fare forature (fresature) oltre i 10 gradi dalla verticale
DRILL_VZ_MIN_LONG_TOOL = 0.984, -- componente limite per lavorazioni con punta lunga
MAX_TOOL_LEN_BACK_HOR_MACH = 500, -- massima lunghezza utensile per poter eseguire lavorazioni (forature/svuotature) da dietro (faccia 4)
TURN = true, -- macchina tipo Turn
TWO_EQUAL_HEADS = true, -- macchina con due teste equivalenti
KIOTP = 3.5, -- coefficiente moltiplicativo per attacco/uscita lama tangente anzichè perpendicolare
MAXDIAM_POCK_CORNER = 30, -- diametro massimo utensile ammesso per tasche con angoli interni
HEAD_DIM_FOR_BH = 190 -- dimensione di ingombro della testa per block haus
}
-- Aggiornamento con dati da TechnoEssetre7
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-TURN.qqq.data"
local sData = EgtGetSourceDir().."\\Ts3Data.qqq.lua"
if EgtExistsFile( sTs3Data) then
EgtCopyFile( sTs3Data, sData)
local sTs3DataOld = sTs3Data..'.old'
EgtEraseFile( sTs3DataOld)
EgtRenameFile( sTs3Data, sTs3DataOld)
end
if EgtExistsFile( sData) then
local Machine = dofile( sData)
if Machine then
if Machine.Offsets then
BeamData.ANG_TRASM = ( Machine.Offsets.SECSUP and Machine.Offsets.SECSUP >= 2)
end
if Machine.Trave then
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
BeamData.MIN_HEIGHT = Machine.Trave.ZMIN or BeamData.MIN_HEIGHT
BeamData.MAX_WIDTH = Machine.Trave.XMAX or BeamData.MAX_WIDTH
BeamData.MAX_HEIGHT = Machine.Trave.ZMAX or BeamData.MAX_HEIGHT
end
if Machine.User then
BeamData.OFFSET_DRILL_TENON = Machine.User.L040_OFFSET_P1 or BeamData.OFFSET_DRILL_TENON
if Machine.User.OPTIMIZATIONS_ENABLE_SLICES_F5 == 1 then
BeamData.MAX_LEN_SCRAP = Machine.User.OPTIMIZATIONS_LENGTH_SLICES or BeamData.MAX_LEN_SCRAP
else
BeamData.MAX_LEN_SCRAP = 100000
end
if Machine.User.OPTIMIZATIONS_ENABLE_SLICES_F6 == 1 then
BeamData.MAX_LEN_SCRAP_START = Machine.User.OPTIMIZATIONS_LENGTH_SLICES or BeamData.MAX_LEN_SCRAP_START
else
BeamData.MAX_LEN_SCRAP_START = 100000
end
BeamData.USER_HOLE_DIAM = Machine.User.L020_DIAM_HOLE or BeamData.USER_HOLE_DIAM
end
end
end
---------------------------------------------------------------------
local function GetMaxLenRidgeLapFromBottom( dHRaw)
if dHRaw < BeamData.MIN_DIM_HBEAM then
return BeamData.MAX_LEN_RIDGELAP_FROM_BOTTOM + 0.01
else
return BeamData.MAX_LEN_RIDGELAP_FROM_BOTTOM_HBEAM + 0.01
end
end
BeamData.GetMaxLenRidgeLapFromBottom = GetMaxLenRidgeLapFromBottom
---------------------------------------------------------------------
local function GetChainSawBlockedAxis( nInd)
if nInd == 1 then
return 'Q=-90'
else
return 'Q=0'
end
end
BeamData.GetChainSawBlockedAxis = GetChainSawBlockedAxis
---------------------------------------------------------------------
return BeamData
+9
View File
@@ -0,0 +1,9 @@
-- %TABLE_NAME%.lua by Egaltech s.r.l. %DATE_TIME%
-- Gestione dati lavorazioni per Travi
-- Tabella per definizione modulo
local %TABLE_NAME% = {
}
---------------------------------------------------------------------
return %TABLE_NAME%
+62
View File
@@ -0,0 +1,62 @@
; PIndex = Type, PName, Default, Description
; Type : d=double, l=length, s=string
[1]
Name=Offsets
1=l,X1_NEG,0,X1_NEG
2=l,X1_POS,1185,X1_POS
3=l,PARK_X1,0,PARK_X1
4=l,Z1_NEG,-1690,Z1_NEG
5=l,Z1_POS,0.0,Z1_POS
6=l,PARK_Z1,0,PARK_Z1
7=l,DIST_FTZERO,1880.5,DIST_FTZERO
8=l,DELTA_CARICZERO,269.5,DELTA_CARICZERO
9=l,DIST_UNLOAD,-2400,DIST_UNLOAD
10=l,CNTRRLL_T1_X1,710.75,CNTRRLL_T1_X1
11=l,CNTRRLL_T1_Z1,-903.5,CNTRRLL_T1_Z1
12=l,OFFSETXT1,391.1,OFFSETXT1
13=l,OFFSETZT1,-924.8,OFFSETZT1
14=d,A1_NEG,-270,A1_NEG
15=d,A1_POS,270,A1_POS
16=l,CNTRRLL_T2_X2,711.5,CNTRRLL_T2_X2
17=l,CNTRRLL_T2_Z2,-904.3,CNTRRLL_T2_Z2
18=l,OFFSETXT2,393.081,OFFSETXT2
19=l,OFFSETZT2,-806.2,OFFSETZT2
20=l,X2_NEG,0,X2_NEG
21=l,X2_POS,1185,X2_POS
22=l,PARK_X2,0,PARK_X2
23=l,Z2_NEG,-1690,Z2_NEG
24=l,Z2_POS,0,Z2_POS
25=l,PARK_Z2,0,PARK_Z2
26=d,A2_NEG,-270,A2_NEG
27=d,A2_POS,270,A2_POS
28=d,B_NEG,-91,B_NEG
29=d,B_POS,271,B_POS
30=l,PIVOTFRESAT1,176.5,PIVOTFRESAT1
31=l,PIVOTLAMAT1,-242.35,PIVOTLAMAT1
32=l,PIVOTFRESAT2,178.05,PIVOTFRESAT2
33=l,PIVOTLAMAT2,-252.2,PIVOTLAMAT2
34=d,PARK_A1,0,PARK_A1
35=d,PARK_A2,0,PARK_A2
36=l,MIN_Y,55,MIN_Y
37=l,MAX_Y,5545,MAX_Y
38=l,PARK_Y,600,PARK_Y
39=l,MIN_V,-5559,MIN_V
40=l,MAX_V,-67,MAX_V
41=l,PARK_V,-500,PARK_V
42=l,DIREZ_SXDX,1,DIREZ_SXDX
[2]
Name=Trave
1=l,XMIN,30,XMIN
2=l,XMAX,651,XMAX
3=l,ZMIN,30,ZMIN
4=l,ZMAX,300,ZMAX
[3]
Name=User
1=d,OPTIMIZATIONS_ENABLE_SLICES_F5,1,OPTIMIZATIONS_ENABLE_SLICES_F5
2=d,OPTIMIZATIONS_ENABLE_SLICES_F6,1,OPTIMIZATIONS_ENABLE_SLICES_F6
3=l,OPTIMIZATIONS_LENGTH_SLICES,100,OPTIMIZATIONS_LENGTH_SLICES
4=d,L020_DIAM_HOLE,12,L020_DIAM_HOLE
5=l,L040_OFFSET_P1,0,L040_OFFSET_P1
+37
View File
@@ -0,0 +1,37 @@
[Cut]
1=HeadSide
2=TailSide
[Drill]
1=Drill
2=Pocket
[Milling]
1=Prof
2=FreeContour
3=Tenon
4=DtTenon
5=DtMortise
6=BirdsMouth
7=Chamfer
8=Mark
9=Text
10=Decor01
11=Long2Cut
12=Long2CutDown
13=LongSmallCut
14=BHSideMill
15=SideMillAsBlade
16=CleanCorner
17=ProfTCone
18=Long2CutSide
19=SmallToolContour
20=AntiSplintMillCut
[Pocketing]
1=Pocket
2=OpenPocket
3=Mortise
[Sawing]
1=Sawing
File diff suppressed because it is too large Load Diff
+151
View File
@@ -0,0 +1,151 @@
; Commento per evitare BOM con UTF-8
[General]
Material=Beam
NCType=4 ; 1=Tpa, 2=Num Flexium, 3=Num Axium APServer, 4=Num Axium PCToolkit
Flow=2
ConnectionString=XIP01,0,63,0,0,0
[Axes]
; 1 = Type, Id, Name
; Type => l=linear;r=rotational
1=l,0,X
2=l,1,Y
3=l,2,Z
4=l,3,U
5=l,4,V
6=l,5,W
7=r,6,A
8=r,7,B
9=r,8,C
[Channels]
1=0,Channel 1
[MainVariables]
; 1 = Name, Variable Path, ReadType, Type
; ReadType => o=one time;c=continuous
; Type => plc;cn
1=P_Prod,E81295,c,cn
2=P_Machgroup,E81296,c,cn
3=P_Part,E81297,c,cn
4=P_State,E81298,c,cn
5=Reset_State,E80048,c,cn
6=ISO_Num,E80045,c,cn
7=ISO_Sent,E80046,c,cn
8=Running,E80047,c,cn
9=Start_State,%R3.2,c,plc
10=Stop_State,%R3.1,c,plc
11=MachIndex,E80000,c,cn
12=PLC_Messages1,%V800.L,c,plc
13=PLC_Messages2,%V804.L,c,plc
14=PLC_Messages3,%V808.L,c,plc
15=PLC_Messages4,%V80C.L,c,plc
16=PLC_Messages5,%V810.L,c,plc
17=PLC_Messages6,%V814.L,c,plc
[MDI]
; 1 = Command, Description
1=M6T1,1
2=M6T2,2
3=M6T3,3
4=M6T4,4
5=M6T5,5
6=M6T6,6
7=M6T7,7
8=M6T8,8
9=M6T9,9
10=M6T10,10
11=M6T11,11
12=M6T12,12
13=M6T13,13
14=M6T14,14
15=M6T15,15
16=M6T16,16
17=M6T17,17
18=M6T18,18
19=M6T50,19
20=M6T101,20
21=M90,21
22=M198T1,22
23=M199T1,23
24=M198T2,24
25=M199T2,25
26=M196,26
27=M197,27
28=M111,28
29=M112,29
30=M113,30
31=M114,31
32=M151,32
33=M152,33
34=M153,34
35=M154,35
36=M155,36
37=E80001=0,37
[Languages]
Enable=1
Language1=Italiano,Ita.txt
Language2=English,Eng.txt
[Tools]
Drillbit=1
Sawblade=1
Mill=1
Mortise=1
Chisel=0
DrillMaker=MakeWoodDrill.lua
SawbladeMaker=MakeSawblade.lua
MillMaker=MakeWoodCylMill.lua
MortiseMaker=MakeMortise.lua
ChiselMaker=MakeChisel.lua
Active=1
[ToolHolder]
H11.1=Standard.nge
H11.1:MILL_NOTIP=MillNoTip.nge
H12.1=Saw.nge
H13.1=ChainSaw.nge
H21.1=Standard.nge
H21.1:MILL_NOTIP=MillNoTip.nge
H22.1=Saw.nge
[Machinings]
Drilling=1
Sawing=1
Milling=1
Pocketing=1
Mortising=1
Chiseling=0
SawRoughing=0
SawFinishing=0
[Machining]
InitScript=InitMach.lua
ExitScript=ExitMach.lua
[Disposition]
;InitScript=InitDisp.lua
[Heads]
; 5 axis head
H11=6608
; 5 axis saw
H12=6615
; Chainsaw
H13=6616
; 2nd 5 axis head
H21=6620
; 2nd 5 axis saw
H22=6623
[SetUp]
Default=Standard
[Estimations]
Enable=1
WinPlace=0,458,111,669,906
[VMill]
Enable=1
Save=0
+734
View File
@@ -0,0 +1,734 @@
-- Descrizione macchina Essetre-TURN by EgalTech s.r.l. 2023/02/16
-- 2022/04/04 DS ver 2.4d1 Solo con controllo NUM.
-- 2022/06/07 DS ver 2.4f1
-- 2022/06/10 DS ver 2.4f3 Modifica G115. Limitato massimo corsa X a -0.5.
-- 2022/06/16 DS ver 2.4f4 Modifica per approcci e retrazioni con movimenti Z e X opportunamente ordinati.
-- 2022/07/25 DS ver 2.4g1 Modifica per conservare Zzeromacch precedente in generazione.
-- 2022/07/29 DS ver 2.4g2 Aggiunta gestione punte lunghe con limiti su corsa asse A1.
-- 2022/08/25 DS ver 2.4h1 Modificati limiti per tagli a cubetti e attacchi/uscite lame.
-- 2022/08/29 DS ver 2.4h2 Aggiunta seconda testa (solo per verifica di collisione con la prima e con ParkA2=90).
-- 2022/09/21 DS ver 2.4i1 Migliorata corrispondenza simulatore-generazione CN.
-- 2022/09/26 DS ver 2.4i3 Modifica radicale della gestione delle teste tramite offset asse B.
-- 2022/09/28 DS ver 2.4i11 Aggiunta gestione seconda testa.
-- 2022/09/30 DS ver 2.4i14 Modifiche varie. Migliorata gestione collisioni.
-- 2022/10/04 DS ver 2.4j1 Sistemazione gestione collisioni testa 2.
-- 2022/10/20 DS ver 2.4j2 Modifiche per lavorazione tipo BH.
-- 2022/11/28 DS ver 2.4k1 Correzione simulazione per controllo collisioni.
-- 2023/01/20 DS ver 2.5a1 Migliorato avvio simulazione.
-- 2023/01/24 MS ver 2.5a2 Aggiunto coefficiente moltiplicativo speed fresone come lama.
-- 2023/02/16 DS ver 2.5b1 In tavola ora TiltingLike riceve valore 1 (asse tilting parallelo a X).
require( 'EmtGenerator')
EgtEnableDebug( false)
PP_VER = '2.5b1'
-- Parametri macchina
NumericalControl = 'NUM' -- solo NUM
MinB = -90
MaxB = 270
MinX1 = -1180
MaxX1 = 0
ParkX1 = -1.0
MinZ1 = 0
MaxZ1 = 1810
ParkZ1 = 0
MinA1 = -180
MaxA1 = 360
ParkA1 = 0
ParkH11_A1 = 0
MillOffs = 177.0
SawOffs = -242.55
SawBOffs = 0
SawAOffs = 0
ChSawLen = 91.0
MinX2 = -1180
MaxX2 = 0
ParkX2 = -1.0
MinZ2 = 0
MaxZ2 = 1810
ParkZ2 = 0
MinA2 = -180
MaxA2 = 360
ParkA2 = 0
ParkH21_A2 = 0
Mill2Offs = -177.0
Saw2Offs = 242.55
Saw2BOffs = 0
Saw2AOffs = 0
MinY = 80.0
MaxY = 5500.0
ParkY = 700.0
MinV = -5500.0
MaxV = -80.0
ParkV = -700.0
LoadT = 1867.0
TurnerOffs = 100
UnloadT = -1700
MaxOpen = 655
RallaOffsY = 900.0 - MillOffs
RallaOffsZ = -709.0
Ralla2OffsY = -903.50 - Mill2Offs
Ralla2OffsZ = 710.75
DeltaTabY = 1050.0
DeltaTabZ = -909.0
Delta2TabY = -386.0
Delta2TabZ = 509.0
DimTabX = 34000
DimTabY = 800
Head2X = 0
Head2Y = DeltaTabY - Delta2TabY
Head2Z = DeltaTabZ - Delta2TabZ
LenToPress = 900
DefTc1Pos = 'T2'
DefTc2Pos = 'T14'
MaxUnloadLen = 0
LONG_TOOL_MINLEN = 241
BIG_TOOL_DIAM = 300
CoeffVM = 0.5
-- Aggiornamento con dati da BeamData.lua
local sBeamData = EgtGetSourceDir().."\\Beam\\BeamData.lua"
if EgtExistsFile( sBeamData) then
local BD = dofile( sBeamData)
if BD then
BeamHeightForFixRot = BD.MAX_HEIGHT_ROT_B_ABOVE or BeamHeightForFixRot
end
end
-- Aggiornamento con dati da TechnoEssetre7
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-TURN.data"
local sData = EgtGetSourceDir().."\\Beam\\Ts3Data.lua"
if EgtExistsFile( sTs3Data) then
EgtCopyFile( sTs3Data, sData)
local sTs3DataOld = sTs3Data..'.old'
EgtEraseFile( sTs3DataOld)
EgtRenameFile( sTs3Data, sTs3DataOld)
end
if EgtExistsFile( sData) then
local Machine = dofile( sData)
if Machine then
if Machine.Offsets then
--NumericalControl = EgtIf( Machine.Offsets.TIPO_CN == 0, 'NUM', 'TPA')
if Machine.Offsets.B_NEG then MinB = Machine.Offsets.B_NEG end
if Machine.Offsets.B_POS then MaxB = Machine.Offsets.B_POS end
if Machine.Offsets.X1_POS then MinX1 = -Machine.Offsets.X1_POS end
if Machine.Offsets.X1_NEG then MaxX1 = min( MaxX1, -Machine.Offsets.X1_NEG) end
if Machine.Offsets.PARK_X1 then ParkX1 = min( ParkX1, -Machine.Offsets.PARK_X1) end
if Machine.Offsets.Z1_NEG then MinZ1 = -Machine.Offsets.Z1_POS end
if Machine.Offsets.Z1_POS then MaxZ1 = -Machine.Offsets.Z1_NEG end
if Machine.Offsets.PARK_Z1 then ParkZ1 = -Machine.Offsets.PARK_Z1 end
if Machine.Offsets.A1_NEG then MinA1 = Machine.Offsets.A1_NEG end
if Machine.Offsets.A1_POS then MaxA1 = Machine.Offsets.A1_POS end
if Machine.Offsets.PARK_A1 then ParkA1 = Machine.Offsets.PARK_A1 end
MinY = Machine.Offsets.MIN_Y or Machine.Offsets.MINY or MinY
MaxY = Machine.Offsets.MAX_Y or Machine.Offsets.MAXY or MaxY
ParkY = Machine.Offsets.PARK_Y or ParkY
MinV = Machine.Offsets.MIN_V or Machine.Offsets.MINV or MinV
MaxV = Machine.Offsets.MAX_V or Machine.Offsets.MAXV or MaxV
ParkV = Machine.Offsets.PARK_V or ParkV
if Machine.Offsets.DIST_FTZERO then LoadT = Machine.Offsets.DIST_FTZERO end
if Machine.Offsets.DELTA_CARICZERO then TurnerOffs = Machine.Offsets.DELTA_CARICZERO end
if Machine.Offsets.DIST_UNLOAD then UnloadT = Machine.Offsets.DIST_UNLOAD end
if Machine.Offsets.PIVOTFRESAT1 then MillOffs = Machine.Offsets.PIVOTFRESAT1 end
if Machine.Offsets.PIVOTLAMAT1 then SawOffs = Machine.Offsets.PIVOTLAMAT1 end
if Machine.Offsets.OFFSETBLAMA then SawBOffs = Machine.Offsets.OFFSETBLAMA end
if Machine.Offsets.OFFSETALAMA then SawAOffs = Machine.Offsets.OFFSETALAMA end
if Machine.Offsets.PIVOTFRESAT2 then Mill2Offs = -Machine.Offsets.PIVOTFRESAT2 end
if Machine.Offsets.PIVOTLAMAT2 then Saw2Offs = -Machine.Offsets.PIVOTLAMAT2 end
if Machine.Offsets.CNTRRLL_T1_Z1 then RallaOffsY = -Machine.Offsets.CNTRRLL_T1_Z1 - MillOffs end
if Machine.Offsets.CNTRRLL_T1_X1 then RallaOffsZ = -Machine.Offsets.CNTRRLL_T1_X1 end
if Machine.Offsets.OFFSETXT1 then DeltaTabY = RallaOffsY - RallaOffsZ - Machine.Offsets.OFFSETXT1 end
if Machine.Offsets.OFFSETZT1 then DeltaTabZ = RallaOffsY + RallaOffsZ + Machine.Offsets.OFFSETZT1 end
if Machine.Offsets.CNTRRLL_T2_Z2 then Ralla2OffsY = Machine.Offsets.CNTRRLL_T2_Z2 - Mill2Offs end
if Machine.Offsets.CNTRRLL_T2_X2 then Ralla2OffsZ = Machine.Offsets.CNTRRLL_T2_X2 end
if Machine.Offsets.OFFSETXT2 then Delta2TabY = -Ralla2OffsY - Ralla2OffsZ - Machine.Offsets.OFFSETXT2 end
if Machine.Offsets.OFFSETZT2 then Delta2TabZ = -Ralla2OffsY + Ralla2OffsZ + Machine.Offsets.OFFSETZT2 end
if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end
ParkX1 = EgtClamp( ParkX1, MinX1, MaxX1)
ParkZ1 = EgtClamp( ParkZ1, MinZ1, MaxZ1)
ParkA1 = EgtClamp( ParkA1, MinA1, MaxA1)
Head2Y = DeltaTabY - Delta2TabY
Head2Z = DeltaTabZ - Delta2TabZ
end
end
end
EmtGeneral {
File='Essetre-TURN.nge',
Offset = Vector3d( 0, 723.0, -709.0),
AxisMaxAdjust = 30,
AxisMaxRotAdj = 0.5,
ExitMaxAdjust = 30,
ExitMaxRotAdj = 0.5,
AngDeltaMinForHome = 165,
Special = 'Essetre-TURN.mlse',
Processor = 'Essetre-TURN.mlpe'}
local BaseId = EmtBase {
Name = 'Base',
Geo='BASE/GEO',
Aux={'BASE/SOLID', 'BASE/TC', 'BASE/SIDE', 'BASE/COLLISION'}}
-- Ralla
local BId = EmtAxis {
Name = 'B',
Parent = 'Base',
Type = MCH_AT.ROTARY,
Dir = X_AX(),
Pos = Point3d( -483.5, RallaOffsY, RallaOffsZ),
Stroke = {MinB-90, MaxB-90},
Home = -90,
Offset = 90,
Geo = 'B_AXIS/GEO',
Aux = {'B_AXIS/SOLID', 'B_AXIS/COLLISION'}}
-- Prima Testa
local X1Id = EmtAxis {
Name = 'X1',
Parent = 'B',
Token = 'X',
Invert = true,
Type = MCH_AT.LINEAR,
Dir = Z_AX(),
Pos = Point3d( -324.5, 681.0, 313.0),
Stroke = {MinX1, MaxX1},
Home = ParkX1,
Geo = 'X1_AXIS/GEO',
Aux = {'X1_AXIS/SOLID', 'X1_AXIS/COLLISION'}}
EmtAxis {
Name = 'Z1',
Parent = 'X1',
Token = 'Z',
Invert = true,
Type = MCH_AT.LINEAR,
Dir = Y_AX(),
Pos = Point3d( 156.0, 602.0, 177.0),
Stroke = {MinZ1, MaxZ1},
Home = ParkZ1,
Geo = 'Z1_AXIS/GEO',
Aux = {'Z1_AXIS/SOLID', 'Z1_AXIS/COLLISION'}}
EmtAxis {
Name = 'A1',
Parent = 'Z1',
Token = 'A',
Type = MCH_AT.ROTARY,
Dir = -Z_AX(),
Pos = Point3d( 0, -MillOffs, 125),
Stroke = {MinA1, MaxA1},
Home = ParkA1,
Geo = 'A1_AXIS/GEO',
Aux = {'A1_AXIS/SOLID', 'A1_AXIS/COLLISION'}}
-- Frese
local H11Id = EmtHead {
Name = 'H11',
Parent = 'A1',
HSet = 'H11',
Type = MCH_HT.STD,
Pos = Point3d( 0, 0, 0),
TDir = -Y_AX(),
ADir = Z_AX(),
Rot1W = 10,
MaxDeltaR2OnFirst = false,
OthColl = {'H12', 'A1/SOLID', 'Z1/SOLID'},
Geo = 'H11_HEAD/GEO'}
EgtSetInfo( H11Id, 'ZMAXONROT', '1,60')
-- Lama
local H12Id = EmtHead {
Name = 'H12',
Parent = 'A1',
HSet = 'H12',
Type = MCH_HT.STD,
Pos = Point3d( 0, (-MillOffs+SawOffs), 0),
TDir = Y_AX(),
ADir = Z_AX(),
Rot1W = 10,
MaxDeltaR2OnFirst = false,
OthColl = {'H11', 'A1/SOLID', 'Z1/SOLID'},
Geo = 'H12_HEAD/GEO'}
EgtSetInfo( H12Id, 'ZMAXONROT', '1,5')
-- Sega a catena
EmtAxis {
Name = 'Q',
Parent = 'A1',
Token = '**',
Type = MCH_AT.ROTARY,
Dir = -Y_AX(),
Pos = Point3d( 0, 0, 0),
Stroke = { -91, 0},
Home = 0,
Geo = 'Q_AXIS/GEO'}
local H13Id = EmtHead {
Name = 'H13',
Parent = 'Q',
HSet = 'H11',
Type = MCH_HT.STD,
Pos = Point3d( 0, ChSawLen, 0),
TDir = -X_AX(),
ADir = -Y_AX(),
Rot1W = 0.2,
MaxDeltaR2OnFirst = true,
SolCh = MCH_SCC.ADIR_NEAR,
OthColl = {'H12', 'A1/SOLID', 'Z1/SOLID'},
Geo = 'H13_HEAD/GEO'}
EgtSetInfo( H13Id, 'ZMAXONROT', '1,5')
-- Dummy
EmtHead {
Name = 'H14',
Parent = 'A1',
HSet = 'H14',
Type = MCH_HT.STD,
Pos = Point3d( 0, 0, 0),
TDir = -Y_AX(),
ADir = X_AX(),
Rot1W = 10,
Geo = 'H14_HEAD/GEO'}
-- Seconda Testa
local X2Id = EmtAxis {
Name = 'X2',
Parent = 'B',
Token = 'U',
Invert = true,
Type = MCH_AT.LINEAR,
Dir = -Z_AX(),
Pos = Point3d( -324.5, 681.0, 313.0),
Stroke = {MinX2, MaxX2},
Home = ParkX2,
Geo = 'X2_AXIS/GEO',
Aux = {'X2_AXIS/SOLID', 'X2_AXIS/COLLISION'}}
local Z2Id = EmtAxis {
Name = 'Z2',
Parent = 'X2',
Token = 'W',
Invert = true,
Type = MCH_AT.LINEAR,
Dir = -Y_AX(),
Pos = Point3d( 156.0, 602.0, 177.0),
Stroke = {MinZ2, MaxZ2},
Home = ParkZ2,
Geo = 'Z2_AXIS/GEO',
Aux = {'Z2_AXIS/SOLID', 'Z2_AXIS/COLLISION'}}
local A2Id = EmtAxis {
Name = 'A2',
Parent = 'Z2',
Token = 'C',
Type = MCH_AT.ROTARY,
Dir = Z_AX(),
Pos = Point3d( Head2X, Head2Y-Mill2Offs, Head2Z-125),
Stroke = {MinA2, MaxA2},
Home = ParkA2,
Geo = 'A2_AXIS/GEO',
Aux = {'A2_AXIS/SOLID', 'A2_AXIS/COLLISION'}}
local vtMoveX2 = Vector3d( Head2X - 0, 0, Head2Z + 1418)
EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), vtMoveX2, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( X2Id, 'COLLISION'), vtMoveX2, GDB_RT.GLOB)
local vtMoveA2 = Vector3d( Head2X - 0, Head2Y - 1436, Head2Z + 1418)
EgtMove( EgtGetFirstNameInGroup( Z2Id, 'SOLID'), vtMoveA2, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( Z2Id, 'COLLISION'), vtMoveA2, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( A2Id, 'SOLID'), vtMoveA2, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( A2Id, 'COLLISION'), vtMoveA2, GDB_RT.GLOB)
-- Frese 2
local H21Id = EmtHead {
Name = 'H21',
Parent = 'A2',
HSet = 'H21',
Type = MCH_HT.STD,
Pos = Point3d( Head2X, Head2Y, Head2Z),
TDir = Y_AX(),
ADir = -Z_AX(),
Rot1W = 10,
MaxDeltaR2OnFirst = false,
OthColl = {'H22', 'A2/SOLID', 'Z2/SOLID'},
Geo = 'H21_HEAD/GEO'}
EgtSetInfo( H21Id, 'ZMAXONROT', '1,60')
-- Lama 2
local H22Id = EmtHead {
Name = 'H22',
Parent = 'A2',
HSet = 'H22',
Type = MCH_HT.STD,
Pos = Point3d( Head2X, Head2Y + (-Mill2Offs+Saw2Offs), Head2Z),
TDir = -Y_AX(),
ADir = -Z_AX(),
Rot1W = 10,
MaxDeltaR2OnFirst = false,
OthColl = {'H21', 'A2/SOLID', 'Z2/SOLID'},
Geo = 'H22_HEAD/GEO'}
EgtSetInfo( H22Id, 'ZMAXONROT', '1,5')
-- Morse
local YId = EmtAxis {
Name = 'Y',
Parent = 'Base',
Type = MCH_AT.LINEAR,
Dir = -X_AX(),
Pos = Point3d( -953.0, 111.75, 1450.0),
Stroke = { MinY, MaxY},
Home = ParkY,
Geo = 'Y_AXIS/GEO',
Aux = {'Y_AXIS/SOLID', 'Y_AXIS/COLLISION'}}
local PYId = EmtAxis {
Name = 'PY',
Parent = 'Y',
Type = MCH_AT.LINEAR,
Dir = -Y_AX(),
Pos = Point3d( -904.0, -276.5, 1449.0),
Stroke = { 0, MaxOpen},
Home = MaxOpen,
Geo = 'PY_AXIS/GEO',
Aux = {'PY_AXIS/SOLID', 'PY_AXIS/COLLISION'}}
local VId = EmtAxis {
Name = 'V',
Parent = 'Base',
Type = MCH_AT.LINEAR,
Dir = -X_AX(),
Pos = Point3d( 953.0, 111.75, 1450.0),
Stroke = { MinV, MaxV},
Home = ParkV,
Geo = 'V_AXIS/GEO',
Aux = {'V_AXIS/SOLID', 'V_AXIS/COLLISION'}}
local PVId = EmtAxis {
Name = 'PV',
Parent = 'V',
Type = MCH_AT.LINEAR,
Dir = -Y_AX(),
Pos = Point3d( 904.0, -276.5, 1449.0),
Stroke = { 0, MaxOpen},
Home = MaxOpen,
Geo = 'PV_AXIS/GEO',
Aux = {'PV_AXIS/SOLID', 'PV_AXIS/COLLISION'}}
-- Tavola
EmtAxis {
Name = 'T',
Parent = 'Base',
--Token = '**',
Type = MCH_AT.LINEAR,
Dir = - X_AX(),
Pos = Point3d( 0, 613.16, -830.037),
Stroke = { -40000, 40000},
Home = LoadT,
Geo = 'T_AXIS/GEO'}
local TabId = EmtTable {
Name = 'Tab',
Parent = 'T',
Type = MCH_TT.FLAT,
Ref1 = Point3d( -DimTabX, DeltaTabY - DimTabY, DeltaTabZ),
Scale = { DimTabX / 34000, DimTabY / 800, 1},
Geo = 'TABLE/GEO',
Aux = 'TABLE/SOLID'}
EgtSetInfo( TabId, 'TiltingLike', 1)
---- ToolChanger
-- Per testa 1
local ptTc1 = Point3d( -1042, -9 + ( DeltaTabY + 382), 362 + ( DeltaTabZ + 923))
EmtTcPos {
Name = 'T1',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 0),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 0),
Geo = 'BASE/T1'}
EmtTcPos {
Name = 'T2',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 30),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 30),
Geo = 'BASE/T2'}
EmtTcPos {
Name = 'T3',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 60),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 60),
Geo = 'BASE/T3'}
EmtTcPos {
Name = 'T4',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 90),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 90),
Geo = 'BASE/T4'}
EmtTcPos {
Name = 'T5',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 120),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 120),
Geo = 'BASE/T5'}
EmtTcPos {
Name = 'T6',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 150),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 150),
Geo = 'BASE/T6'}
EmtTcPos {
Name = 'T7',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 180),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 180),
Geo = 'BASE/T7'}
EmtTcPos {
Name = 'T8',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 210),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 210),
Geo = 'BASE/T8'}
EmtTcPos {
Name = 'T9',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 240),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 240),
Geo = 'BASE/T9'}
EmtTcPos {
Name = 'T10',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 270),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 270),
Geo = 'BASE/T10'}
EmtTcPos {
Name = 'T11',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 300),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 300),
Geo = 'BASE/T11'}
EmtTcPos {
Name = 'T12',
Parent = 'Base',
Pos = ptTc1 + VectorFromPolar( 300, 330),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 330),
Geo = 'BASE/T12'}
-- Per testa 2
local ptTc2 = Vector3d( -1042, -1409 + ( DeltaTabY + 382), 362 + ( DeltaTabZ + 923))
EmtTcPos {
Name = 'T13',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 0),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 0),
Geo = 'BASE/T13'}
EmtTcPos {
Name = 'T14',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 30),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 30),
Geo = 'BASE/T14'}
EmtTcPos {
Name = 'T15',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 60),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 60),
Geo = 'BASE/T15'}
EmtTcPos {
Name = 'T16',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 90),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 90),
Geo = 'BASE/T16'}
EmtTcPos {
Name = 'T17',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 120),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 120),
Geo = 'BASE/T17'}
EmtTcPos {
Name = 'T18',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 150),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 150),
Geo = 'BASE/T18'}
EmtTcPos {
Name = 'T19',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 180),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 180),
Geo = 'BASE/T19'}
EmtTcPos {
Name = 'T20',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 210),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 210),
Geo = 'BASE/T20'}
EmtTcPos {
Name = 'T21',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 240),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 240),
Geo = 'BASE/T21'}
EmtTcPos {
Name = 'T22',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 270),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 270),
Geo = 'BASE/T22'}
EmtTcPos {
Name = 'T23',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 300),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 300),
Geo = 'BASE/T23'}
EmtTcPos {
Name = 'T24',
Parent = 'Base',
Pos = ptTc2 + VectorFromPolar( 300, 330),
TDir = -Z_AX(),
ADir = VectorFromPolar( 1, 330),
Geo = 'BASE/T24'}
-- Per sega a catena
local ptTcs = Point3d( 533.5 + ChSawLen, -654.824 + ( DeltaTabY + 382), -1403.0 + ( DeltaTabZ + 923))
EmtTcPos {
Name = 'T101',
Parent = 'Base',
Pos = ptTcs,
TDir = -Z_AX(),
ADir = -X_AX(),
Geo = 'BASE/T101'}
-- Aggiusto posizioni geometriche
local vtMove = Vector3d( 0, ( DeltaTabY - 1050), ( DeltaTabZ + 909))
EgtMove( EgtGetFirstNameInGroup( BaseId, 'SOLID'), vtMove, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC'), vtMove, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( BaseId, 'SIDE'), vtMove, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( BaseId, 'COLLISION'), vtMove, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( YId, 'SOLID'), vtMove, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( YId, 'COLLISION'), vtMove, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( PYId, 'SOLID'), vtMove, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( PYId, 'COLLISION'), vtMove, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( VId, 'SOLID'), vtMove, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( VId, 'COLLISION'), vtMove, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( PVId, 'SOLID'), vtMove, GDB_RT.GLOB)
EgtMove( EgtGetFirstNameInGroup( PVId, 'COLLISION'), vtMove, GDB_RT.GLOB)
-- Assegno identificativi alle spie delle morse
PYLightId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( YId, 'SOLID') or GDB_ID.NULL, 'Light')
PVLightId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( VId, 'SOLID') or GDB_ID.NULL, 'Light')
---------------------------------------------------------------------
-- Funzioni richiamate per modificare i dati macchina in casi particolari
--function OnSetTable()
--end
---------------------------------------------------------------------
function OnSetHead()
-- se testa 1 fresa
if EMC.HEAD == 'H11' then
-- se con utensile lungo limito la corsa
if EMC.TOTLEN > LONG_TOOL_MINLEN then
EmtModifyAxisStroke( 'A1', { max( MinA1, ParkH11_A1 - 30), min( MaxA1, ParkH11_A1 + 30)})
else
EmtModifyAxisStroke( 'A1', { MinA1, MaxA1})
end
-- in ogni caso posizione home vicina ad angolo di CU
EmtModifyAxisHome( 'A1', ParkH11_A1)
-- se testa 1 lama
elseif EMC.HEAD == 'H12' then
EmtModifyAxisStroke( 'A1', { MinA1, MaxA1})
EmtModifyAxisHome( 'A1', ParkA1)
-- se testa sega a catena
elseif EMC.HEAD == 'H13' then
if EMC.DIST and abs( EMC.DIST) > 1 then
EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, EMC.DIST, 0))
local vtMove = Point3d( 0, EMC.DIST, 0) - Point3d( EMC.EXITPOS)
local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT))
EgtMove( ExitId, vtMove)
end
EmtModifyAxisStroke( 'A1', { MinA1, MaxA1})
EmtModifyAxisHome( 'A1', ParkA1)
-- se testa 2 fresa
elseif EMC.HEAD == 'H21' then
-- se con utensile lungo limito la corsa
if EMC.TOTLEN > LONG_TOOL_MINLEN then
EmtModifyAxisStroke( 'A2', { max( MinA2, ParkH21_A2 - 30), min( MaxA2, ParkH21_A2 + 30)})
else
EmtModifyAxisStroke( 'A2', { MinA2, MaxA2})
end
-- in ogni caso posizione home vicina ad angolo di CU
EmtModifyAxisHome( 'A2', ParkH21_A2)
-- se testa 2 fresa-lama
elseif EMC.HEAD == 'H22' then
EmtModifyAxisStroke( 'A2', { MinA2, MaxA2})
EmtModifyAxisHome( 'A2', ParkA2)
end
end
---------------------------------------------------------------------
function GetHeadSet( sHead)
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' then
return 1
elseif sHead == 'H21' or sHead == 'H22' then
return 2
else
return 0
end
end
---------------------------------------------------------------------
-- Funzione per impostare spia stato morsa carrello Y
function SetPYLight( bClosed)
if not PYLightId then return end
EgtSetColor( PYLightId, EgtIf( bClosed, 'RED', 'LIME'))
if bClosed then
EgtSetInfo( PYLightId, 'On', '1')
else
EgtRemoveInfo( PYLightId, 'On')
end
end
---------------------------------------------------------------------
-- Funzione per leggere lo stato della morsa carrello Y
function GetPYLight()
if not PYLightId then return false end
return ( EgtGetInfo( PYLightId, 'On') == '1')
end
---------------------------------------------------------------------
-- Funzione per impostare spia stato morsa carrello V
function SetPVLight( bClosed)
if not PVLightId then return end
EgtSetColor( PVLightId, EgtIf( bClosed, 'RED', 'LIME'))
if bClosed then
EgtSetInfo( PVLightId, 'On', '1')
else
EgtRemoveInfo( PVLightId, 'On')
end
end
---------------------------------------------------------------------
-- Funzione per leggere lo stato della morsa carrello V
function GetPVLight()
if not PVLightId then return false end
return ( EgtGetInfo( PVLightId, 'On') == '1')
end
---------------------------------------------------------------------
-- Funzione per resettare tutte le attivazioni della macchina
function OnResetMachine()
EmtUnlinkAllRawPartsFromGroups()
EmtUnlinkAllFixturesFromGroups()
SetPYLight( false)
SetPVLight( false)
-- nascondo Vmill
local nRawId = EgtGetFirstRawPart()
while nRawId do
local nVmId = EgtGetFirstNameInGroup( nRawId, 'VMill')
local nId = EgtGetFirstInGroup( nRawId)
while nId do
EgtSetStatus( nId, EgtIf( nId ~= nVmId, GDB_ST.ON, GDB_ST.OFF))
nId = EgtGetNext( nId)
end
nRawId = EgtGetNextRawPart( nRawId)
end
EgtSetStatus( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') or GDB_ID.NULL, GDB_ST.OFF)
end
+1564
View File
File diff suppressed because it is too large Load Diff
+3775
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+255
View File
@@ -0,0 +1,255 @@
// English machine message file 2022/01/17
[MDI]
1=Take tool n° 1
2=Take tool n° 2
3=Take tool n° 3
4=Take tool n° 4
5=Take tool n° 5
6=Take tool n° 6
7=Take tool n° 7
8=Take tool n° 8
9=Take tool n° 9
10=Take tool n° 10
11=Take tool n° 11
12=Take tool n° 12
13=Take tool n° 13
14=Take tool n° 14
15=Take tool n° 15
16=Take tool n° 16
17=Take tool n° 17
18=Take tool n° 18
19=Head whitout tool
20=Take the Chainsaw
21=Activate tool magazine
22=Tool tool loader n°1 Forwards
23=Tool tool loader n°1 Backwards
24=Tool tool loader n°2 Forwards
25=Tool tool loader n°2 Backwards
26=Tool tool loader Chainsaw Forwards
27=Tool tool loader Chainsaw Backwards
28=Front zero reference ascent
29=Front zero reference descent
30=Lateral zero roller ascent
31=Lateral zero roller descent
32=Ability clockwise rotation right driller motor
33=Ability counterclockwise rotation right driller motor
34=Ability clockwise rotation left driller motor
35=Ability counterclockwise rotation left driller motor
36=Stop rotation of drilling spindles
37=Manual tool number assignment in the 5-axis head (E80001=1; E80001=2; E80001=3;ETC...)
[PLC]
1=Macchina spenta
2=Assi in extracorsa
3=Attesa carico trave
4=Attesa chiusura Pinza 1
5=Attesa apertura Pinza 1
6=Attesa chiusura Pinza 4
7=Attesa apertura Pinza 4
8=Verificare olio lubrificazione aggregati catena
9=Termici motori
10=Trasferimento programma in corso
11=Modulo Adam 1 non Ok verificare V7624.L
12=Minimo livello grasso
13=Difetto impianto lubrificazione assi verificare livello grasso
14=Manca aria compressa
15=Sovratemperatura armadio elettrico Cn
16=Modulo Adam 2 non Ok verificare V7634.L
17=Refrigratore mandrini
18=Sovratemperatura armadio elettrico Drive
19=Verificare collegamento Marcatore
20=Attesa marcatore libero
21=Barriere intervenute !!!
22=Attesa conferma per chiusura Pinza 1 o 4
23=Malfunzionamento azion. asse X Slave
24=Malfunzionamento asse X Testa 1
25=Malfunzionamento asse Y
26=Malfunzionamento asse Z Testa 1
27=Malfunzionamento asse A Testa 1
28=Malfunzionamento asse B
29=Malfunzionamento asse V
30=Malfunzionamento asse Cu Testa 1
31=Malfunzionamento asse Cu Testa 2
32=Asse A bloccato
33=Bypass segnali assi digitali attivo
34=Attesa chiusura Pinza 2
35=Attesa apertura Pinza 2
36=Attesa chiusura Pinza 3
37=Attesa apertura Pinza 3
38=
39=Sensore controllo giri Lama guasto
40=Fuori giri Lama
41=Attesa ribaltamento 90 gradi trave (Girare chiave in modo manuale)
42=Attesa ribaltamento 180 gradi trave (Girare chiave in modo manuale)
43=Attesa ribaltamento 270 gradi trave (Girare chiave in modo manuale)
44=Attesa scarico spezzone in entrata (Girare chiave in modo manuale)
45=Attesa conferma scarico trave
46=Rotazione T1 proibita senza utensili: verificare
47=Rotazione T2 proibita senza utensili: verificare
48=
49=
50=Malfunzionamento asse X Testa 2
51=Malfunzionamento asse Z Testa 2
52=Malfunzionamento asse A Testa 2
53=Malfunzionamento asse B2 Movimento Cu
54=Riferimento di zero entrata non basso
55=Riferimento di scarico non a riposo
56=
57=
58=
59=*** MANUTENZIONE CE ***
60=Attesa scarico utensile manuale
61=Attesa carico utensile manuale
62=
63=Attesa apertura totale pinza 3
64=Attesa conferma carico trave
65=Attesa conferma scarico spezzone corto non tenuto da pinza 1
66=Attesa conferma scarico spezzone su rulliera entrata
67=Attesa stampa etichetta pezzo precedente
68=Attesa carico trave M75 in corso
69=Traslatore scarico pieno
70=Testa nuovo trave non trovata
71=Corsa arretramento spezzone troppo grande
72=Ft lettura testa trave occupata
73=Attesa Start dopo carico trave con muletto
74=Pezzo scaricato su nastro !!!!!
75=Scaricare trave con muletto e resettare allarme
76=Pinza 1 chiusa senza trave aprirla con M111
77=Pinza 4 chiusa senza trave aprirla con M171
78=Micro controllo chiusura pinza 1 non Ok
79=Attesa conferma lavoro con pinza 4 dentro macchina VERIFICARE !!!
80=Pezzo incompleto alcune lavorazioni non eseguite !!!
81=Micro controllo chiusura pinza 4 non Ok
82=Attesa Ft pinza 1 lettura coda trave a zero
83=Cambi utensile non indietro !!!
84=Testa avanti programmare M90 e poi M199
85=Cambio T201-T202 non possibile con pinza 1 impegnata
86=Attesa protezione cambio utensile aperta
87=Asse A fuori posizione
88=Avanti magazzino utensili non Ok
89=Indietro magazzino utensili non Ok
90=
91=
92=
93=
94=
95=Messa a punto inserita permessi solo movimenti manuali
96=
97=
98=Avanti testa per cambio utensile non Ok
99=Indietro testa per cambio utensile non Ok
100=
101=Motore T1 non in rotazione (Fcinv0=1)
102=Motore T2 non in rotazione (Fcinv0=1)
103=
104=
105=Larghezza trave EX non Ok !!!
106=Altezza trave EZ non Ok !!!
107=
108=Attendere inserzioni di potenza
109=Premere reset su CNC
110=
111=Malfunzionamento inverter 1
112=Malfunzionamento inverter 2
113=
114=
115=
116=
117=
118=Flussostato Testa 1 non Ok
119=Flussostato Testa 2 non Ok
120=
121=Sovratemperatura resistenze di frenatura inverter 1
122=Sovratemperatura resistenze di frenatura inverter 2
123=
124=
125=
126=
127=
128=
129=
130=
131=Sovratemperatura motore testa 1
132=Sovratemperatura motore testa 2
133=
134=
135=
136=
137=
138=
139=
140=
141=Sovracorrente inverter 1
142=Sovracorrente inverter 2
143=
144=
145=
146=
147=
148=Cambi utensili non avanti
149=Posizione cambio utensile 1 impegnata per scarico
150=Posizione cambio utensile 2 impegnata per scarico
151=Difetto bloccaggio utensile testa 1
152=Difetto bloccaggio utensile testa 2
153=Utensile presente su testa 1 con E80001=0
154=Utensile presente su testa 2 con E80002=0
155=Difetto sbloccaggio utensile testa 1
156=Difetto sbloccaggio utensile testa 2
157=Cono utensile testa 1 sporco
158=Cono utensile testa 2 sporco
159=Pistone sbloccaggio cono testa 1 non a riposo
160=Pistone sbloccaggio cono testa 2 non a riposo
161=Asse X1 non a zero per cambio utensile
162=Asse X2 non a zero per cambio utensile
163=
164=
165=
166=
167=
168=
169=
[CNC]
900=INVALID TOOL NUMBER M6T
901=TOOL NUMBER LOADED NOT OK
902=INVALID MOTOR TOOL NUMBER E80001
903=SENSOR SETPOINT B MILLING NOT OK
904=SENSOR SETPOINT C MILLING NOT OK
905=SENSOR SETPOINT B SAW BLADE NOT OK
906=SENSOR SETPOINT C SAW BLADE NOT OK
907=UNLOAD CHAINSAW MANUALLY
908=WORK WITH 2 BLADES NOT POSSIBLE B<>90 OR C<>0 OR 180
909=DEFINE TOOL NUMBER ENGINE SAW BLADE EU
910=G124 X REQUIRED
911=G124 Y REQUIRED
912=G124 B REQUIRED
913=G124 C REQUIRED
914=libero
915=libero
916=DEFINE SPINDLE NUMBER ET.. (1=BLADE 2=MILL 3=RIGHT DRILLER 4=LEFT DRILLER)
917=UNLOADING MOTOR TOOL
918=G104X.. REQUIRED
919=G104Y.. REQUIRED
920=G104Z.. REQUIRED
921=G104ET.. NOT OK (MANDATORY SCREWDRIVER NUMBER ET0-ET1-ET2-ET3)
922=G104EF.. NOT OK (REQUIRED LAYER NUMBER)
923=SETPOINT V SENSOR NOT OK
924=OFFSET X SAW BLADE NOT ALIGNED WITH CADCAM
925=OFFSET Y SAW BLADE NOT ALIGNED WITH CADCAM
926=OFFSET Z SAW BLADE NOT ALIGNED WITH CADCAM
927=PIVOT Z SAW BLADE NOT ALIGNED WITH CADCAM
928=PIVOT C SAW BLADE NOT ALIGNED WITH CADCAM
929=OFFSET X MILL NOT ALIGNED WITH CADCAM
930=OFFSET Y MILL NOT ALIGNED WITH CADCAM
931=OFFSET Z MILL NOT ALIGNED WITH CADCAM
932=PIVOT Z MILL NOT ALIGNED WITH CADCAM
933=MANDATORY X-U-W-Z PROGRAMMING WITH G102EH.. NON-ZERO
934=OFFSET X RIGHT DRILLER NOT ALIGNED WITH CADCAM
935=OFFSET Y RIGHT DRILLER NOT ALIGNED WITH CADCAM
936=OFFSET Z RIGHT DRILLER NOT ALIGNED WITH CADCAM
937=OFFSET X LEFT DRILLER NOT ALIGNED WITH CADCAM
938=OFFSET Y LEFT DRILLER NOT ALIGNED WITH CADCAM
939=OFFSET Z LEFT DRILLER NOT ALIGNED WITH CADCAM
+170
View File
@@ -0,0 +1,170 @@
% 9999.9
N1 $01:Macchina spenta
N2 $02:Assi in extracorsa
N3 $03:Attesa carico trave
N4 $04:Attesa chiusura Pinza 1
N5 $05:Attesa apertura Pinza 1
N6 $06:Attesa chiusura Pinza 4
N7 $07:Attesa apertura Pinza 4
N8 $08:Verificare olio lubrificazione aggregati catena
N9 $09:Termici motori
N10 $10:Trasferimento programma in corso
N11 $11:Modulo Adam 1 non Ok verificare V7624.L
N12 $12:Minimo livello grasso
N13 $13:Difetto impianto lubrificazione assi verificare livello grasso
N14 $14:Manca aria compressa
N15 $15:Sovratemperatura armadio elettrico Cn
N16 $16:Modulo Adam 2 non Ok verificare V7634.L
N17 $17:Refrigratore mandrini
N18 $18:Sovratemperatura armadio elettrico Drive
N19 $19:Verificare collegamento Marcatore
N20 $20:Attesa marcatore libero
N21 $21:Barriere intervenute !!!
N22 $22:Attesa conferma per chiusura Pinza 1 o 4
N23 $23:Malfunzionamento azion. asse X Slave
N24 $24:Malfunzionamento asse X Testa 1
N25 $25:Malfunzionamento asse Y
N26 $26:Malfunzionamento asse Z Testa 1
N27 $27:Malfunzionamento asse A Testa 1
N28 $28:Malfunzionamento asse B
N29 $29:Malfunzionamento asse V
N30 $30:Malfunzionamento asse Cu Testa 1
N31 $31:Malfunzionamento asse Cu Testa 2
N32 $32:Asse A bloccato
N33 $33:Bypass segnali assi digitali attivo
N34 $34:Attesa chiusura Pinza 2
N35 $35:Attesa apertura Pinza 2
N36 $36:Attesa chiusura Pinza 3
N37 $37:Attesa apertura Pinza 3
N38 $38:
N39 $39:Sensore controllo giri Lama guasto
N40 $40:Fuori giri Lama
N41 $41:Attesa ribaltamento 90 gradi trave (Girare chiave in modo manuale)
N42 $42:Attesa ribaltamento 180 gradi trave (Girare chiave in modo manuale)
N43 $43:Attesa ribaltamento 270 gradi trave (Girare chiave in modo manuale)
N44 $44:Attesa scarico spezzone in entrata (Girare chiave in modo manuale)
N45 $45:Attesa conferma scarico trave
N46 $46:Rotazione T1 proibita senza utensili: verificare
N47 $47:Rotazione T2 proibita senza utensili: verificare
N48 $48:
N49 $49:
N50 $50:Malfunzionamento asse X Testa 2
N51 $51:Malfunzionamento asse Z Testa 2
N52 $52:Malfunzionamento asse A Testa 2
N53 $53:Malfunzionamento asse B2 Movimento Cu
N54 $54:Riferimento di zero entrata non basso
N55 $55:Riferimento di scarico non a riposo
N56 $56:
N57 $57:
N58 $58:
N59 $59:*** MANUTENZIONE CE ***
N60 $60:Attesa scarico utensile manuale
N61 $61:Attesa carico utensile manuale
N62 $62:
N63 $63:Attesa apertura totale pinza 3
N64 $64:Attesa conferma carico trave
N65 $65:Attesa conferma scarico spezzone corto non tenuto da pinza 1
N66 $66:Attesa conferma scarico spezzone su rulliera entrata
N67 $67:Attesa stampa etichetta pezzo precedente
N68 $68:Attesa carico trave M75 in corso
N69 $69:Traslatore scarico pieno
N70 $70:Testa nuovo trave non trovata
N71 $71:Corsa arretramento spezzone troppo grande
N72 $72:Ft lettura testa trave occupata
N73 $73:Attesa Start dopo carico trave con muletto
N74 $74:Pezzo scaricato su nastro !!!!!
N75 $75:Scaricare trave con muletto e resettare allarme
N76 $76:Pinza 1 chiusa senza trave aprirla con M111
N77 $77:Pinza 4 chiusa senza trave aprirla con M171
N78 $78:Micro controllo chiusura pinza 1 non Ok
N79 $79:Attesa conferma lavoro con pinza 4 dentro macchina VERIFICARE !!!
N80 $80:Pezzo incompleto alcune lavorazioni non eseguite !!!
N81 $81:Micro controllo chiusura pinza 4 non Ok
N82 $82:Attesa Ft pinza 1 lettura coda trave a zero
N83 $83:Cambi utensile non indietro !!!
N84 $84:Testa avanti programmare M90 e poi M199
N85 $85:Cambio T201-T202 non possibile con pinza 1 impegnata
N86 $86:Attesa protezione cambio utensile aperta
N87 $87:Asse A fuori posizione
N88 $88:Avanti magazzino utensili non Ok
N89 $89:Indietro magazzino utensili non Ok
N90 $90:
N91 $91:
N92 $92:
N93 $93:
N94 $94:
N95 $95:Messa a punto inserita permessi solo movimenti manuali
N96 $96:
N97 $97:
N98 $98:Avanti testa per cambio utensile non Ok
N99 $99:Indietro testa per cambio utensile non Ok
N100 $100:
N101 $101:Motore T1 non in rotazione (Fcinv0=1)
N102 $102:Motore T2 non in rotazione (Fcinv0=1)
N103 $103:
N104 $104:
N105 $105:Larghezza trave EX non Ok !!!
N106 $106:Altezza trave EZ non Ok !!!
N107 $107:
N108 $108:Attendere inserzioni di potenza
N109 $109:Premere reset su CNC
N110 $110:
N111 $111:Malfunzionamento inverter 1
N112 $112:Malfunzionamento inverter 2
N113 $113:
N114 $114:
N115 $115:
N116 $116:
N117 $117:
N118 $118:Flussostato Testa 1 non Ok
N119 $119:Flussostato Testa 2 non Ok
N120 $120:
N121 $121:Sovratemperatura resistenze di frenatura inverter 1
N122 $122:Sovratemperatura resistenze di frenatura inverter 2
N123 $123:
N124 $124:
N125 $125:
N126 $126:
N127 $127:
N128 $128:
N129 $129:
N130 $130:
N131 $131:Sovratemperatura motore testa 1
N132 $132:Sovratemperatura motore testa 2
N133 $133:
N134 $134:
N135 $135:
N136 $136:
N137 $137:
N138 $138:
N139 $139:
N140 $140:
N141 $141:Sovracorrente inverter 1
N142 $142:Sovracorrente inverter 2
N143 $143:
N144 $144:
N145 $145:
N146 $146:
N147 $147:
N148 $148:Cambi utensili non avanti
N149 $149:Posizione cambio utensile 1 impegnata per scarico
N150 $150:Posizione cambio utensile 2 impegnata per scarico
N151 $151:Difetto bloccaggio utensile testa 1
N152 $152:Difetto bloccaggio utensile testa 2
N153 $153:Utensile presente su testa 1 con E80001=0
N154 $154:Utensile presente su testa 2 con E80002=0
N155 $155:Difetto sbloccaggio utensile testa 1
N156 $156:Difetto sbloccaggio utensile testa 2
N157 $157:Cono utensile testa 1 sporco
N158 $158:Cono utensile testa 2 sporco
N159 $159:Pistone sbloccaggio cono testa 1 non a riposo
N160 $160:Pistone sbloccaggio cono testa 2 non a riposo
N161 $161:Asse X1 non a zero per cambio utensile
N162 $162:Asse X2 non a zero per cambio utensile
N163 $163:
N164 $164:
N165 $165:
N166 $166:
N167 $167:
N168 $168:
N169 $169:
+43
View File
@@ -0,0 +1,43 @@
// File dei messaggi macchina Italiano 2022/01/17
[MDI]
1=Prendi utensile n° 1
2=Prendi utensile n° 2
3=Prendi utensile n° 3
4=Prendi utensile n° 4
5=Prendi utensile n° 5
6=Prendi utensile n° 6
7=Prendi utensile n° 7
8=Prendi utensile n° 8
9=Prendi utensile n° 9
10=Prendi utensile n° 10
11=Prendi utensile n° 11
12=Prendi utensile n° 12
13=Prendi utensile n° 13
14=Prendi utensile n° 14
15=Prendi utensile n° 15
16=Prendi utensile n° 16
17=Prendi utensile n° 17
18=Prendi utensile n° 18
19=Scarica utensili
20=Prendi Elettrosega
21=Attiva magazzino utensili
22=Magazzino utensili n°1 avanti
23=Magazzino utensili n°1 indietro
24=Magazzino utensili n°2 avanti
25=Magazzino utensili n°2 indietro
26=Magazzino utensili Elettrosega avanti
27=Magazzino utensili Elettrosega indietro
28=Salita rulli zero frontale
29=Discesa rulli zero frontale
30=Salita rulli zero laterale
31=Discesa rulli zero laterale
32=Abilita rotazione oraria motore foratore destro
33=Abilita rotazione antioraria motore foratore destro
34=Abilita rotazione oraria motore foratore sinistro
35=Abilita rotazione antioraria motore foratore sinistro
36=Stop rotazione mandrini foratori
37=Assegnazione manuale numero utensile nella testa a 5 assi (E80001=1; E80001=2;E80001=3;ETC...)
[PLC]
[CNC]
+36
View File
@@ -0,0 +1,36 @@
-- 2018/11/21 17:30:00
-- Machining Exit for Essetre-TURN2T machine
-- Intestazioni
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
--------------------------------------------------------------------------------
-- *** Uscita da Lavorazioni ***
-- Nascondo il pezzo così marcato e le geometrie aggiunte, visualizzo il Box
local function ProcessPart( PartId)
-- visualizzo il Box
EgtSetStatus( EgtGetFirstNameInGroup( PartId, 'Box') or GDB_ID.NULL, GDB_ST.ON)
end
-- Disabilito segnalazione modifica progetto
local bEnMod = EgtGetEnableModified()
EgtDisableModified()
-- Processo i pezzi nella radice (già chiusi tutti i gruppi di lavoro)
local PartId = EgtGetFirstPart()
while PartId do
ProcessPart( PartId)
PartId = EgtGetNextPart( PartId)
end
EgtZoom( SCE_ZM.ALL, false)
-- Ripristino segnalazione modifica progetto
if bEnMod then
EgtEnableModified()
end
MACH.ERR = 0
+44
View File
@@ -0,0 +1,44 @@
-- 2018/11/21 16:30:00
-- Machining Init for Essetre-TURN2T machine
-- Intestazioni
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
--------------------------------------------------------------------------------
-- *** Ingresso in Lavorazioni ***
-- Rendo visibile il pezzo e le geometrie aggiunte, nascondo il Box
local function ProcessPart( PartId)
-- nascondo il Box
EgtSetStatus( EgtGetFirstNameInGroup( PartId, 'Box') or GDB_ID.NULL, GDB_ST.OFF)
end
-- Disabilito segnalazione modifica progetto
local bEnMod = EgtGetEnableModified()
EgtDisableModified()
-- Processo i pezzi nella radice
local PartId = EgtGetFirstPart()
while PartId do
ProcessPart( PartId)
PartId = EgtGetNextPart( PartId)
end
-- Processo i pezzi già nei gruppi di lavoro (quando appena lanciata Process)
local GhostId = EgtGetFirstGhostPart()
while GhostId do
local PartId = EgtGetInfo( GhostId, GDB_SI.SOURCE, 'i')
if PartId then
ProcessPart( PartId)
end
GhostId = EgtGetNextGhostPart( GhostId)
end
-- Ripristino segnalazione modifica progetto
if bEnMod then
EgtEnableModified()
end
MACH.ERR = 0
+214
View File
@@ -0,0 +1,214 @@
-- Gestione attrezzaggio per Essetre-TURN2T - 2022/09/20
-- Intestazioni
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
-- Tavola di passaggio valori
local STU = {}
STU.TUUID = ""
STU.TCPOS = ""
STU.HEAD = ""
STU.GROUP = ""
STU.POS = ""
STU.EXIT = 0
STU.INDEX = 0
STU.HEAD1 = ""
STU.HEAD2 = ""
STU.ISVALID = false
STU.ERR = 0
_G.STU = STU
local INVALIDPOS = ""
local POS = "Pos"
-- Geom Set
local GS = {}
-- Configurazione posizioni
local PositionTable={{Pos = "Pos1", TcPos = "T1", Head = "H11", Group = "G1"},
{Pos = "Pos2", TcPos = "T2", Head = "H11", Group = "G1"},
{Pos = "Pos3", TcPos = "T3", Head = "H11", Group = "G1"},
{Pos = "Pos4", TcPos = "T4", Head = "H11", Group = "G1"},
{Pos = "Pos5", TcPos = "T5", Head = "H11", Group = "G1"},
{Pos = "Pos6", TcPos = "T6", Head = "H11", Group = "G1"},
{Pos = "Pos7", TcPos = "T7", Head = "H11", Group = "G1"},
{Pos = "Pos8", TcPos = "T8", Head = "H11", Group = "G1"},
{Pos = "Pos9", TcPos = "T9", Head = "H11", Group = "G1"},
{Pos = "Pos10", TcPos = "T10", Head = "H11", Group = "G1"},
{Pos = "Pos11", TcPos = "T11", Head = "H11", Group = "G1"},
{Pos = "Pos12", TcPos = "T12", Head = "H11", Group = "G1"},
{Pos = "Pos13", TcPos = "T42", Head = "H12", Group = "G1"},
{Pos = "Pos14", TcPos = "T13", Head = "H21", Group = "G2"},
{Pos = "Pos15", TcPos = "T14", Head = "H21", Group = "G2"},
{Pos = "Pos16", TcPos = "T15", Head = "H21", Group = "G2"},
{Pos = "Pos17", TcPos = "T16", Head = "H21", Group = "G2"},
{Pos = "Pos18", TcPos = "T17", Head = "H21", Group = "G2"},
{Pos = "Pos19", TcPos = "T18", Head = "H21", Group = "G2"},
{Pos = "Pos20", TcPos = "T19", Head = "H21", Group = "G2"},
{Pos = "Pos21", TcPos = "T20", Head = "H21", Group = "G2"},
{Pos = "Pos22", TcPos = "T21", Head = "H21", Group = "G2"},
{Pos = "Pos23", TcPos = "T22", Head = "H21", Group = "G2"},
{Pos = "Pos24", TcPos = "T23", Head = "H21", Group = "G2"},
{Pos = "Pos25", TcPos = "T24", Head = "H21", Group = "G2"},
{Pos = "Pos26", TcPos = "T43", Head = "H22", Group = "G2"},
{Pos = "Pos27", TcPos = "T101", Head = "H13", Group = "G3"}}
local UsePositionHead = true
local function IsInGeomSet( ToolHead, PosHead)
for GsIndex = 1, #GS do
local bToolHead = false
local bPosHead = false
for HIndex = 1, #GS[GsIndex] do
if GS[GsIndex][HIndex] == ToolHead then
bToolHead = true
elseif GS[GsIndex][HIndex] == PosHead then
bPosHead = true
end
if bToolHead and bPosHead then
return true
end
end
if bToolHead and bPosHead then
return true
end
end
return false
end
function STU.IsCompatibleHeads()
STU.ISVALID = false
if IsInGeomSet(STU.HEAD1, STU.HEAD2) then
STU.ISVALID = true
else
STU.ISVALID = false
end
end
function STU.GetValidHeadExitForPos()
-- se TUUID non valido restituisco errore
local ToolName = EgtTdbGetToolFromUUID( STU.TUUID)
if ToolName == nill then
STU.ERR = 1
return
end
EgtTdbSetCurrTool( ToolName)
local CurrToolHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
STU.EXIT = EgtTdbGetCurrToolParam( MCH_TP.EXIT)
-- recupero testa predefinita per la posizione corrente
local CurrPosHead
for i = 1, #PositionTable do
if PositionTable[i].TcPos == STU.TCPOS then
CurrPosHead = PositionTable[i].Head
break
end
end
-- verifico se la testa è quella della posizione predefinita
if CurrPosHead == CurrToolHead then
STU.HEAD = CurrToolHead
STU.ERR = 0
return
-- verifico se la testa è compatibile con quella della posizione predefinita
elseif IsInGeomSet( CurrToolHead, CurrPosHead) then
if UsePositionHead then
STU.HEAD = CurrPosHead
STU.ERR = 0
return
else
STU.HEAD = CurrToolHead
STU.ERR = 0
return
end
-- la testa non è compatibile con quella della posizione predefinita
else
STU.HEAD = INVALIDPOS
STU.ERR = 0
return
end
end
function STU.IsValidTcPosFromHead()
STU.ISVALID = false
for i = 1, #PositionTable do
if PositionTable[i].TcPos == STU.TCPOS then
if PositionTable[i].Head == STU.HEAD then
STU.ISVALID = true
STU.ERR = 0
return
elseif IsInGeomSet(PositionTable[i].Head, STU.HEAD) then
STU.ISVALID = true
STU.ERR = 0
return
end
STU.ISVALID = false
STU.ERR = 0
return
end
end
end
function STU.GetTcPosHeadGroupFromPos()
for i = 1, #PositionTable do
if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then
STU.TCPOS = PositionTable[i].TcPos
STU.HEAD = PositionTable[i].Head
STU.GROUP = PositionTable[i].Group
STU.ERR = 0
return
end
end
STU.TCPOS = INVALIDPOS
STU.HEAD = INVALIDPOS
STU.GROUP = INVALIDPOS
STU.ERR = 1
end
function STU.GetPosFromTcPos()
for i = 1, #PositionTable do
if PositionTable[i].TcPos == STU.TCPOS then
STU.POS = PositionTable[i].Pos
STU.ERR = 0
return
end
end
STU.POS = INVALIDPOS
STU.ERR = 1
end
function STU.GetGroupFromTcPos()
for i = 1, #PositionTable do
if PositionTable[i].TcPos == STU.TCPOS then
STU.GROUP = PositionTable[i].Group
STU.ERR = 0
return
end
end
STU.GROUP = INVALIDPOS
STU.ERR = 1
end
function STU.GetHeadFromPos()
for i = 1, #PositionTable do
if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then
STU.HEAD = PositionTable[i].Head
STU.ERR = 0
return
end
end
STU.HEAD = INVALIDPOS
STU.ERR = 1
end
function STU.GetTcPosFromPos()
for i = 1, #PositionTable do
if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then
STU.TCPOS = PositionTable[i].TcPos
STU.ERR = 0
return
end
end
STU.TCPOS = INVALIDPOS
STU.ERR = 1
end
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.