1112 lines
39 KiB
Plaintext
1112 lines
39 KiB
Plaintext
-- Descrizione macchina Essetre-PF by EgalTech s.r.l. 2024/01/23
|
|
-- 2021/10/01 ver 2.3j1 Prima versione.
|
|
-- 2021/10/26 ver 2.3j2 Versione provvisoria per pezzo alto.
|
|
-- 2021/10/26 ver 2.3j3 Aggiunto arresto preciso negli angoli (G9) in fresature con utensili di piccolo diametro.
|
|
-- 2021/10/28 ver 2.3j4 Aggiornato come ONE.
|
|
-- 2021/10/29 ver 2.3j5 Aggiunta testa H22. Corretto spostamento per apertura rulli come PF1250.
|
|
-- 2021/11/02 ver 2.3k1 Corretta gestione offset testa H22 (seconda lama) in generazione.
|
|
-- 2021/11/23 ver 2.3k2 Rifacimento completo gestione discese/risalite in Z.
|
|
-- 2021/12/16 ver 2.3l1 In generazione NUM correzione movimento in home.
|
|
-- 2021/12/22 ver 2.3l5 Varie correzioni da Paterno.
|
|
-- 2021/12/30 ver 2.3l9 Ottimizzazioni da Paterno.
|
|
-- 2022/01/14 ver 2.4a1 Correzioni per lama in sottosquadra contro traversa.
|
|
-- 2022/01/14 ver 2.4a2 Reset piano interpolazione anche se cambiano assi rotanti.
|
|
-- 2022/02/08 ver 2.4b1 Corretto movimento a Xhome (vanno emessi tutti gli assi testa).
|
|
-- 2022/02/10 ver 2.4b2 Nelle risalite si controlla di non superare Zmax.
|
|
-- 2022/02/11 ver 2.4b3 Aggiunta a G157 gestione EC ed ED (stato pinze V1 e V2).
|
|
-- 2022/02/23 ver 2.4b4 Con G157 gestione aperture prima di primo rapido e chiusure dopo.
|
|
-- 2022/03/04 ver 2.4c2 Aggiornata chiusura rulli con G157 che non li fa muovere. Aggiunta gestione movimento pinze rulli alla pre-rotazione.
|
|
-- 2022/03/10 ver 2.4c3 Riportate ultime modifiche ONE per rotazione pezzi.
|
|
-- 2022/03/16 ver 2.4c4 In simulazione i rapidi in mezzo alla lavorazione non vanno gestiti come quelli iniziali.
|
|
-- 2022/04/26 ver 2.4d1 Corretto calcolo necessità compattazione rulli (non teneva mai conto di EMC.TCING).
|
|
-- 2022/09/06 ver 2.4i1 Allineamento con PF. Aggiunto flag per abilitazione lama su testa 2 (T21).
|
|
-- 2022/09/06 ver 2.4i2 Correzione ripetizione assi testa in primo movimento.
|
|
-- 2022/09/09 ver 2.4i3 Ritardata a dopo movimenti testa e carrelli della segnalazione pezzo caduto.
|
|
-- 2022/09/13 ver 2.4i5 Gestita distanza sega a catena da dati utensile anche in OnSetHead.
|
|
-- 2022/10/06 ver 2.4j1 Disabilitata anticipazione carico barra successiva (funzionava da almeno 6 mesi).
|
|
-- 2022/10/10 ver 2.4j2 Rimossa modifica precedente. In mlse corretto calcolo dMaxLenLeft allo Splitting (da PF1250-3T).
|
|
-- 2022/11/11 ver 2.4k1 Allineamento con PF.
|
|
-- 2022/12/13 ver 2.4l1 Aggiunta gestione rotazione speciale su split e correzioni varie su rotazioni.
|
|
-- 2023/01/18 ver 2.5a1 Correzione risalita sega a catena per non collidere con suo portautensile.
|
|
-- 2023/01/19 ver 2.5a2 Aggiunta gestione pinza 5.
|
|
-- 2023/01/20 ver 2.5a3 Se devo prendere sega a catena e altra da preselezionare allora la mando in HomeX. Migliorie gestione pinza 5.
|
|
-- 2023/01/28 ver 2.5a4 Aggiunte lavorazioni in doppio.
|
|
-- 2023/01/31 ver 2.5a5 Migliorie varie per lavorazioni in doppio.
|
|
-- 2023/02/01 ver 2.5b1 Aggiunta gestione eventuale mortasatrice.
|
|
-- 2023/02/03 ver 2.5b2 Gestione controllo NUM (TIPO_CN = 0->Axium vecchio, 2->Flexium). Migliorata gestione Pinza5 (MAX_BACK_CLAMP_5).
|
|
-- 2023/03/03 ver 2.5c1 Correzione per lav.ne in doppio dopo taglio con sega a catena. In PartProgram al nome lavorazione aggiunto Double.
|
|
-------------------------------------
|
|
-- NOTE VERSIONI SUCCESSIVE IN GIT --
|
|
-------------------------------------
|
|
|
|
|
|
-- Intestazioni
|
|
require( 'EmtGenerator')
|
|
EgtEnableDebug( false)
|
|
|
|
PP_VER = '3.1c1'
|
|
PP_NVER = '3.1.3.1'
|
|
MIN_MACH_VER = '2.5k1'
|
|
MACH_NAME = EgtGetCurrMachineName()
|
|
|
|
-- Carico i dati globali
|
|
local sMachDir = EgtGetCurrMachineDir()
|
|
-- Elimino direttori altre macchine e imposto direttorio macchina corrente per ricerca librerie
|
|
EgtRemoveBaseMachineDirFromPackagePath()
|
|
EgtAddToPackagePath( sMachDir .. '\\Beam\\?.lua')
|
|
EgtAddToPackagePath( sMachDir .. '\\?.lua')
|
|
INFO_STD_PP = require( 'Version')
|
|
-- prendo la versione kernel minima necessaria più nuova tra macchina e script comuni
|
|
if INFO_STD_PP.MIN_MACH_VER_PP_COMMON > MIN_MACH_VER then
|
|
MIN_MACH_VER = INFO_STD_PP.MIN_MACH_VER_PP_COMMON
|
|
end
|
|
|
|
EgtOutLog ( '** ' .. MACH_NAME..' '..PP_VER..' ** ( '..INFO_STD_PP.NAME..': '..INFO_STD_PP.VERSION..' - MinMach: '.. MIN_MACH_VER ..') **', 1)
|
|
|
|
|
|
-- Parametri macchina
|
|
NumericalControl = 'NUM_FLEX' -- NUM o (TPA) o NUM_FLEX
|
|
Progress = false
|
|
Mortiser = false -- solo per One (nella Progress la stessa posizione è per ChainSaw)
|
|
MinMchY1 = 335
|
|
MaxMchY1 = 5700.0
|
|
ParkMchY1 = 970.0
|
|
MinMchY2 = -5700.0
|
|
MaxMchY2 = -335
|
|
ParkMchY2 = -955.0
|
|
MinV1 = 20.0
|
|
MaxV1 = 697.0
|
|
ParkV1 = 697.0
|
|
MinV2 = -697.0
|
|
MaxV2 = -20.0
|
|
ParkV2 = -697.0
|
|
MinDeltaYV = 300
|
|
ExtraParkV = 100
|
|
MinY1 = MinV1 + MinDeltaYV
|
|
MaxY1 = MaxMchY1
|
|
MaxY2 = MaxV2 - MinDeltaYV
|
|
MinY2 = MinMchY2
|
|
ParkY1 = ParkV1 + MinDeltaYV
|
|
ParkY2 = ParkV2 - MinDeltaYV
|
|
MaxHoOpen = 420
|
|
MaxVeOpen = 820
|
|
RollCageMin = 120
|
|
RollCageMax = 250
|
|
Clamp5 = false
|
|
MinW = 0
|
|
MaxW = 670
|
|
ParkW = 0
|
|
MinWOpen = 79
|
|
MaxWOpen = 200
|
|
MaxWHeight = 300
|
|
LoadT = 2135.1
|
|
UnloadT = -2400
|
|
MillOffs = 170.0
|
|
SawOffsX = 110.0
|
|
SawOffsY = 0
|
|
SawOffsZ = -150.05
|
|
SawC1Offs = 0
|
|
SawB1Offs = 0
|
|
ChSawLen = 94.0
|
|
Mill2Offs = 170.0
|
|
Saw2OffsX = 110.0
|
|
Saw2OffsY = 0
|
|
Saw2OffsZ = -149.25
|
|
SawC2Offs = 0
|
|
SawB2Offs = 0
|
|
MinX1 = 700
|
|
MaxX1 = 2735
|
|
MinZ1 = -1550
|
|
MaxZ1 = 0
|
|
MinC1 = -275
|
|
MaxC1 = 275
|
|
MinB1 = -127
|
|
MaxB1 = 127
|
|
MinB1b = -119
|
|
MaxB1b = 119
|
|
ParkX1 = MaxX1
|
|
ParkFrnX1 = 200
|
|
ParkZ1 = -535
|
|
ParkC1 = 90
|
|
ParkB1 = 90
|
|
LimX1RotSaw = 1900
|
|
LimX1PlRotSaw = 1970
|
|
ParkCSawX1 = 1350
|
|
ParkCSawX1S = ParkX1
|
|
ParkCSawZ1 = -100
|
|
ParkCSaw0Z1 = -400
|
|
ParkCSawC1 = 90
|
|
ParkCSaw0C1 = 0
|
|
ParkCSawB1 = 0
|
|
MinX2 = 0
|
|
MaxX2 = 2035
|
|
MinZ2 = -1550
|
|
MaxZ2 = 0
|
|
MinC2 = -275
|
|
MaxC2 = 275
|
|
MinB2 = -127
|
|
MaxB2 = 127
|
|
MinB2b = -119
|
|
MaxB2b = 119
|
|
ParkX2 = MinX2
|
|
ParkZ2 = -535
|
|
ParkC2 = -90
|
|
ParkB2 = -90
|
|
MinDeltaX1X2 = 650
|
|
MinDistToolX1X2 = 40
|
|
LimX2RotSaw = 800
|
|
AngTrBHOffs = 154.5
|
|
AngTrBHLen = 90
|
|
TurnerOffs = 120.0
|
|
AggLoad = 50
|
|
DeltaTabY = 1170.0
|
|
DeltaTabZ = -1010.0 -- per TPA la quota è dal centro di rotazione (va aggiunto MillOffs)
|
|
DeltaRulliTraveZ = 980
|
|
DeltaRulliTappetoZ = -485
|
|
DimTabY = 500
|
|
DimTabX = 30000
|
|
Delta2TabY = 1170.0
|
|
Delta2TabZ = -1010.0 -- per TPA la quota è dal centro di rotazione (va aggiunto MillOffs)
|
|
Head2X = 0
|
|
Head2Y = DeltaTabY - Delta2TabY
|
|
Head2Z = DeltaTabZ - Delta2TabZ
|
|
DefTcPos1 = 'T3'
|
|
DefTcPos2 = 'T13'
|
|
SecondSaw = false
|
|
AutomaticRotation = true
|
|
OptimizedLoadBeam = true
|
|
AutoRotMinLen = 0
|
|
EstimationRapidMultiplier = 1
|
|
ForceToCloseRollersGate = false
|
|
AggreBlockHaus = false
|
|
DistZClampToTable = 5 -- distanza tra la tavola e il punto più basso della morsa
|
|
ClampingCoeffMin = nil -- coefficiente di fissaggio, se 0 o nil non fa controllo, per il momento da inizializzare da Ts3Data
|
|
|
|
-- Aggiornamento con dati da TechnoEssetre7
|
|
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PFrl.data"
|
|
local sData = sMachDir.."\\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
|
|
if Machine.Offsets.TIPO_CN == 0 then
|
|
NumericalControl = 'NUM'
|
|
elseif Machine.Offsets.TIPO_CN == 1 then
|
|
NumericalControl = 'TPA'
|
|
else
|
|
NumericalControl = 'NUM_FLEX'
|
|
end
|
|
if Machine.Offsets.X1_POS then MinX1 = -Machine.Offsets.X1_POS end
|
|
if Machine.Offsets.X1_NEG then MaxX1 = -Machine.Offsets.X1_NEG end
|
|
if Machine.Offsets.PARK_X1 then ParkX1 = -Machine.Offsets.PARK_X1 end
|
|
if Machine.Offsets.Z1_NEG then MinZ1 = Machine.Offsets.Z1_NEG end
|
|
if Machine.Offsets.Z1_POS then MaxZ1 = min( MaxZ1, Machine.Offsets.Z1_POS) end
|
|
if Machine.Offsets.PARK_Z1 then ParkZ1 = Machine.Offsets.PARK_Z1 end
|
|
if Machine.Offsets.C1_NEG then MinC1 = Machine.Offsets.C1_NEG end
|
|
if Machine.Offsets.C1_POS then MaxC1 = Machine.Offsets.C1_POS end
|
|
if Machine.Offsets.B1_NEG then MinB1 = Machine.Offsets.B1_NEG end
|
|
if Machine.Offsets.B1_POS then MaxB1 = Machine.Offsets.B1_POS end
|
|
if Machine.Offsets.B1_NEG1 then MinB1b = Machine.Offsets.B1_NEG1 end
|
|
if Machine.Offsets.B1_POS1 then MaxB1b = Machine.Offsets.B1_POS1 end
|
|
if Machine.Offsets.X2_POS then MinX2 = -Machine.Offsets.X2_POS end
|
|
if Machine.Offsets.X2_NEG then MaxX2 = -Machine.Offsets.X2_NEG end
|
|
if Machine.Offsets.PARK_X2 then ParkX2 = -Machine.Offsets.PARK_X2 end
|
|
if Machine.Offsets.Z2_NEG then MinZ2 = Machine.Offsets.Z2_NEG end
|
|
if Machine.Offsets.Z2_POS then MaxZ2 = Machine.Offsets.Z2_POS end
|
|
if Machine.Offsets.PARK_Z2 then ParkZ2 = Machine.Offsets.PARK_Z2 end
|
|
if Machine.Offsets.C2_NEG then MinC2 = Machine.Offsets.C2_NEG end
|
|
if Machine.Offsets.C2_POS then MaxC2 = Machine.Offsets.C2_POS end
|
|
if Machine.Offsets.B2_NEG then MinB2 = Machine.Offsets.B2_NEG end
|
|
if Machine.Offsets.B2_POS then MaxB2 = Machine.Offsets.B2_POS end
|
|
if Machine.Offsets.B2_NEG1 then MinB2b = Machine.Offsets.B2_NEG1 end
|
|
if Machine.Offsets.B2_POS1 then MaxB2b = Machine.Offsets.B2_POS1 end
|
|
if Machine.Offsets.MIN_Y1 then MinMchY1 = Machine.Offsets.MIN_Y1 end
|
|
if Machine.Offsets.MAX_Y1 then MaxMchY1 = Machine.Offsets.MAX_Y1 end
|
|
if Machine.Offsets.PARK_Y1 then ParkMchY1 = Machine.Offsets.PARK_Y1 end
|
|
if Machine.Offsets.MIN_V1 then MinV1 = Machine.Offsets.MIN_V1 end
|
|
if Machine.Offsets.MAX_V1 then MaxV1 = Machine.Offsets.MAX_V1 end
|
|
if Machine.Offsets.MIN_Y2 then MinMchY2 = Machine.Offsets.MIN_Y2 end
|
|
if Machine.Offsets.MAX_Y2 then MaxMchY2 = Machine.Offsets.MAX_Y2 end
|
|
if Machine.Offsets.PARK_Y2 then ParkMchY2 = Machine.Offsets.PARK_Y2 end
|
|
if Machine.Offsets.MIN_V2 then MinV2 = Machine.Offsets.MIN_V2 end
|
|
if Machine.Offsets.MAX_V2 then MaxV2 = Machine.Offsets.MAX_V2 end
|
|
if Machine.Offsets.CLAMP5 then Clamp5 = ( Machine.Offsets.CLAMP5 == 1) end
|
|
if Machine.Offsets.MIN_W then MinW = Machine.Offsets.MIN_W end
|
|
if Machine.Offsets.MAX_W then MaxW = Machine.Offsets.MAX_W end
|
|
if Machine.Offsets.MINWOPEN then MinWOpen = Machine.Offsets.MINWOPEN end
|
|
if Machine.Offsets.MAXWOPEN then MaxWOpen = Machine.Offsets.MAXWOPEN end
|
|
if Machine.Offsets.MAXWHEIGHT then MaxWHeight = Machine.Offsets.MAXWHEIGHT end
|
|
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.MIN_DELTAVY then MinDeltaYV = Machine.Offsets.MIN_DELTAVY + 0.1 end
|
|
if Machine.Offsets.DIST_UNLOAD then UnloadT = Machine.Offsets.DIST_UNLOAD end
|
|
if Machine.Offsets.PIVOT_T1 then MillOffs = Machine.Offsets.PIVOT_T1 end
|
|
if Machine.Offsets.PIVOT_T2 then Mill2Offs = Machine.Offsets.PIVOT_T2 end
|
|
if Machine.Offsets.OFFSETCLAMAT1 then SawC1Offs= Machine.Offsets.OFFSETCLAMAT1 end
|
|
if Machine.Offsets.OFFSETBLAMAT1 then SawB1Offs= Machine.Offsets.OFFSETBLAMAT1 end
|
|
if Machine.Offsets.OFFSETCLAMAT2 then SawC2Offs= Machine.Offsets.OFFSETCLAMAT2 end
|
|
if Machine.Offsets.OFFSETBLAMAT2 then SawB2Offs= Machine.Offsets.OFFSETBLAMAT2 end
|
|
if Machine.Offsets.OFFSETXT1 then DeltaTabY = -Machine.Offsets.OFFSETXT1 end
|
|
if Machine.Offsets.OFFSETZT1 then DeltaTabZ = Machine.Offsets.OFFSETZT1 + EgtIf( NumericalControl == 'TPA', MillOffs, 0) end
|
|
if Machine.Offsets.OFFSETXT2 then Delta2TabY = -Machine.Offsets.OFFSETXT2 end
|
|
if Machine.Offsets.OFFSETZT2 then Delta2TabZ = Machine.Offsets.OFFSETZT2 + EgtIf( NumericalControl == 'TPA', Mill2Offs, 0) end
|
|
if Machine.Offsets.OFFSETZSOTTOTRAVE then DeltaRulliTraveZ = abs( Machine.Offsets.OFFSETZSOTTOTRAVE) end
|
|
if Machine.Offsets.OFFSETZTAPPETO then DeltaRulliTappetoZ = -abs( Machine.Offsets.OFFSETZTAPPETO) end
|
|
if Machine.Offsets.SECONDSAW then SecondSaw = ( Machine.Offsets.SECONDSAW == 1) end
|
|
if Machine.Offsets.MORTISER then Mortiser = ( Machine.Offsets.MORTISER == 1) end
|
|
if Machine.Offsets.SAWOFFSX then SawOffsX = Machine.Offsets.SAWOFFSX end
|
|
if Machine.Offsets.SAWOFFSZ then SawOffsZ = Machine.Offsets.SAWOFFSZ end
|
|
if Machine.Offsets.SAW2OFFSX then Saw2OffsX = Machine.Offsets.SAW2OFFSX end
|
|
if Machine.Offsets.SAW2OFFSZ then Saw2OffsZ = Machine.Offsets.SAW2OFFSZ end
|
|
if Machine.Offsets.DEFTCPOS1 then DefTcPos1 = ( 'T' .. Machine.Offsets.DEFTCPOS1) end
|
|
if Machine.Offsets.DEFTCPOS2 then DefTcPos2 = ( 'T' .. Machine.Offsets.DEFTCPOS2) end
|
|
if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end
|
|
if Machine.Offsets.MAXFEEDPINZE then MaxFeedPinze = Machine.Offsets.MAXFEEDPINZE end
|
|
if Machine.Offsets.MAXACC then MaxAcc = Machine.Offsets.MAXACC end
|
|
if Machine.Offsets.MINACC then MinAcc = Machine.Offsets.MINACC end
|
|
if Machine.Offsets.COEFF_STIMATEMPI and Machine.Offsets.COEFF_STIMATEMPI > 0 then EstimationRapidMultiplier = Machine.Offsets.COEFF_STIMATEMPI end
|
|
if Machine.Offsets.CHIUDI_PINZE_2_3_SCAMBIO then ForceToCloseRollersGate = Machine.Offsets.CHIUDI_PINZE_2_3_SCAMBIO == 1 end
|
|
if Machine.Offsets.WOOD_DENSITY then WoodDensity = Machine.Offsets.WOOD_DENSITY end
|
|
if Machine.Offsets.AGGRE_BH then AggreBlockHaus = ( Machine.Offsets.AGGRE_BH == 1) end
|
|
AngTrBHOffs = Machine.Offsets.OFFSETZ_RINV_BH or AngTrBHOffs
|
|
AngTrBHLen = Machine.Offsets.OFFSETX_RINV_BH or AngTrBHLen
|
|
if Machine.Offsets.MAX_BACK_CLAMP_5 then MaxBackClamp5 = Machine.Offsets.MAX_BACK_CLAMP_5 end
|
|
if Machine.Offsets.COEFF_CLAMP_CHECK then ClampingCoeffMin = Machine.Offsets.COEFF_CLAMP_CHECK end
|
|
-- aggiustamenti
|
|
MinY1 = MinV1 + MinDeltaYV
|
|
MaxY1 = MaxMchY1
|
|
ParkV1 = MaxV1
|
|
ParkY1 = ParkV1 + MinDeltaYV
|
|
MinY2 = MinMchY2
|
|
MaxY2 = MaxV2 - MinDeltaYV
|
|
ParkV2 = MinV2
|
|
ParkY2 = ParkV2 - MinDeltaYV
|
|
ParkX1 = min( ParkX1, MaxX1)
|
|
ParkX2 = max( ParkX2, MinX2)
|
|
Head2Y = DeltaTabY - Delta2TabY
|
|
Head2Z = DeltaTabZ - Delta2TabZ
|
|
ParkCSawX1S = ParkX1
|
|
ParkCSawZ1 = min( ParkCSawZ1, MaxZ1)
|
|
ParkCSaw0Z1 = min( ParkCSaw0Z1, MaxZ1)
|
|
end
|
|
end
|
|
end
|
|
|
|
EmtGeneral {
|
|
File='Essetre-PF.nge',
|
|
Offset = Vector3d(0.0,1360.0,-1680.0),
|
|
AxisMaxAdjust = 300,
|
|
AxisMaxRotAdj = 0.5,
|
|
ExitMaxAdjust = 300,
|
|
ExitMaxRotAdj = 0.5,
|
|
AngDeltaMinForHome = 80,
|
|
Special = 'Common_ONE-PF.mlse',
|
|
Processor = 'Common_ONE-PF.mlpe'}
|
|
local sBaseAux = {'BASE/SOLID', 'BASE/SIGN', 'BASE/CONVOYER', 'BASE/BELT', 'BASE/COLLISION', 'BASE/TC1', 'BASE/TC2', 'BASE/TC3'}
|
|
if Mortiser then table.insert( sBaseAux, 'BASE/TC4') end
|
|
local BaseId = EmtBase {
|
|
Name = 'Base',
|
|
Geo = 'BASE/GEO',
|
|
Aux = sBaseAux}
|
|
local X1Id = EmtAxis {
|
|
Name = 'X1',
|
|
Parent = 'Base',
|
|
Token = 'X',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Y_AX(),
|
|
Pos = Point3d(207.0,-300.0,104.0),
|
|
Stroke = {MinX1, MaxX1},
|
|
Home = ParkX1,
|
|
Invert = true,
|
|
Geo = 'X1_AXIS/GEO',
|
|
Aux = {'X1_AXIS/SOLID', 'X1_AXIS/COLLISION'}}
|
|
-- *** Testa 1 ***
|
|
EmtAxis {
|
|
Name = 'Z1',
|
|
Parent = 'X1',
|
|
Token = 'Z',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d(0.0,-140.1,113.0),
|
|
Stroke = {MinZ1, MaxZ1},
|
|
Home = ParkZ1,
|
|
Geo = 'Z1_AXIS/GEO',
|
|
Aux = {'Z1_AXIS/SOLID', 'Z1_AXIS/COLLISION'}}
|
|
EmtAxis {
|
|
Name = 'C1',
|
|
Parent = 'Z1',
|
|
Token = 'C',
|
|
Type = MCH_AT.ROTARY,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d(0.0,0.0,503.0),
|
|
Stroke = {MinC1, MaxC1},
|
|
Home = ParkC1,
|
|
Geo = 'C1_AXIS/GEO',
|
|
Aux = {'C1_AXIS/SOLID', 'C1_AXIS/COLLISION'}}
|
|
EmtAxis {
|
|
Name = 'B1',
|
|
Parent = 'C1',
|
|
Token = 'B',
|
|
Type = MCH_AT.ROTARY,
|
|
Dir = X_AX(),
|
|
Pos = Point3d(-108.4,0.0,MillOffs),
|
|
Stroke = {MinB1, MaxB1},
|
|
Home = ParkB1,
|
|
Geo = 'B1_AXIS/GEO',
|
|
Aux = {'B1_AXIS/SOLID', 'B1_AXIS/COLLISION'}}
|
|
-- Frese
|
|
local H11Id = EmtHead {
|
|
Name = 'H11',
|
|
Parent = 'B1',
|
|
HSet = 'H11',
|
|
Type = MCH_HT.STD,
|
|
Pos = Point3d(0,0,0),
|
|
TDir = Z_AX(),
|
|
ADir = -Y_AX(),
|
|
Rot1W = 0.2,
|
|
Rot2Stroke = { MinB1, MaxB1},
|
|
OthColl = {'B1/SOLID', 'C1/SOLID'},
|
|
Geo = 'H11_HEAD/GEO'}
|
|
-- Lama
|
|
local H12Id = EmtHead {
|
|
Name = 'H12',
|
|
Parent = 'B1',
|
|
HSet = 'H11',
|
|
Type = MCH_HT.STD,
|
|
Pos = Point3d(SawOffsX,SawOffsY,SawOffsZ),
|
|
TDir = Vector3d( 0, sin( SawB1Offs), cos( SawB1Offs)),
|
|
ADir = -X_AX(),
|
|
Rot1W = 0.5,
|
|
Rot2Stroke = { MinB1b, MaxB1b},
|
|
OthColl = {'B1/SOLID', 'C1/SOLID'},
|
|
Geo = 'H12_HEAD/GEO'}
|
|
--EgtSetInfo( H12Id, 'ZMAXONROT', '1,190')
|
|
-- Sega a catena
|
|
EmtAxis {
|
|
Name = 'A',
|
|
Parent = 'B1',
|
|
Token = '**',
|
|
Type = MCH_AT.ROTARY,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d( 0, 0, 0),
|
|
Stroke = { -90.1, 90.1},
|
|
Home = 0,
|
|
Geo = 'A1_AXIS/GEO'}
|
|
local H13Id = EmtHead {
|
|
Name = 'H13',
|
|
Parent = 'A',
|
|
HSet = 'H11',
|
|
Type = MCH_HT.STD,
|
|
Pos = Point3d( 0, 0, -ChSawLen),
|
|
TDir = -X_AX(),
|
|
ADir = Z_AX(),
|
|
Rot1W = 0.2,
|
|
Rot2Stroke = { -90.1, 90.1},
|
|
SolCh = MCH_SCC.ADIR_NEAR,
|
|
OthColl = {'B1/SOLID', 'C1/SOLID'},
|
|
Geo = 'H13_HEAD/GEO'}
|
|
EgtSetInfo( H13Id, 'ZSAFEDELTA', '60')
|
|
EgtSetInfo( H13Id, 'ZMAXONROT', '1,80')
|
|
|
|
-- Eventuale aggregato per lavorazioni BlockHaus
|
|
if AggreBlockHaus then
|
|
local H17Id = EmtHead {
|
|
Name = 'H17',
|
|
Parent = 'B1',
|
|
HSet = 'H11',
|
|
Type = MCH_HT.STD,
|
|
Pos = Point3d( -AngTrBHLen, 0, -AngTrBHOffs),
|
|
TDir = X_AX(),
|
|
ADir = Z_AX(),
|
|
Rot1W = 0.2,
|
|
SolCh = MCH_SCC.ADIR_NEAR,
|
|
OthColl = {'H2', 'B/SOLID', 'C/SOLID'},
|
|
Geo = 'H17_HEAD/GEO',
|
|
Aux = {'H17_HEAD/SOLID', 'H17_HEAD/COLLISION'}}
|
|
end
|
|
|
|
-- *** Testa 2 ***
|
|
local X2Id = EmtAxis {
|
|
Name = 'X2',
|
|
Parent = 'Base',
|
|
Token = 'X',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Y_AX(),
|
|
Pos = Point3d(115.8,3065.9,-1738.0),
|
|
Stroke = {MinX2, MaxX2},
|
|
Home = ParkX2,
|
|
Invert = true,
|
|
Geo = 'X2_AXIS/GEO',
|
|
Aux = {'X2_AXIS/SOLID', 'X2_AXIS/COLLISION'}}
|
|
local Z2Id = EmtAxis {
|
|
Name = 'Z2',
|
|
Parent = 'X2',
|
|
Token = 'Z',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d(291.0,-140.1,-2056.3),
|
|
Stroke = {MinZ2, MaxZ2},
|
|
Home = ParkZ2,
|
|
Geo = 'Z2_AXIS/GEO',
|
|
Aux = {'Z2_AXIS/SOLID', 'Z2_AXIS/COLLISION'}}
|
|
local C2Id = EmtAxis {
|
|
Name = 'C2',
|
|
Parent = 'Z2',
|
|
Token = 'C',
|
|
Type = MCH_AT.ROTARY,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d( Head2X, Head2Y, Head2Z+503.0),
|
|
Stroke = {MinC2, MaxC2},
|
|
Home = ParkC2,
|
|
Geo = 'C2_AXIS/GEO',
|
|
Aux = {'C2_AXIS/SOLID', 'C2_AXIS/COLLISION'}}
|
|
local B2Id = EmtAxis {
|
|
Name = 'B2',
|
|
Parent = 'C2',
|
|
Token = 'B',
|
|
Type = MCH_AT.ROTARY,
|
|
Dir = X_AX(),
|
|
Pos = Point3d( Head2X-108.4, Head2Y, Head2Z+Mill2Offs),
|
|
Stroke = {MinB2, MaxB2},
|
|
Home = ParkB2,
|
|
Geo = 'B2_AXIS/GEO',
|
|
Aux = {'B2_AXIS/SOLID', 'B2_AXIS/COLLISION'}}
|
|
local vtMove2 = Vector3d( 0, Head2Y, Head2Z)
|
|
EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), vtMove2, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( X2Id, 'COLLISION'), vtMove2, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( Z2Id, 'SOLID'), vtMove2, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( Z2Id, 'COLLISION'), vtMove2, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( C2Id, 'SOLID'), vtMove2, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( C2Id, 'COLLISION'), vtMove2, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( B2Id, 'SOLID'), vtMove2, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( B2Id, 'COLLISION'), vtMove2, GDB_RT.GLOB)
|
|
-- Frese
|
|
local H21Id = EmtHead {
|
|
Name = 'H21',
|
|
Parent = 'B2',
|
|
HSet = 'H21',
|
|
Type = MCH_HT.STD,
|
|
Pos = Point3d( Head2X, Head2Y, Head2Z),
|
|
TDir = Z_AX(),
|
|
Rot1W = 0.2,
|
|
Rot2Stroke = { MinB2, MaxB2},
|
|
OthColl = {'B2/SOLID', 'C2/SOLID'},
|
|
Geo = 'H21_HEAD/GEO'}
|
|
-- Lama
|
|
if SecondSaw then
|
|
local H22Id = EmtHead {
|
|
Name = 'H22',
|
|
Parent = 'B2',
|
|
HSet = 'H21',
|
|
Type = MCH_HT.STD,
|
|
Pos = Point3d( Head2X + Saw2OffsX, Head2Y + Saw2OffsY, Head2Z + Saw2OffsZ),
|
|
TDir = Vector3d( 0, sin( SawB2Offs), cos( SawB2Offs)),
|
|
ADir = -X_AX(),
|
|
Rot1W = 0.5,
|
|
Rot2Stroke = { MinB2b, MaxB2b},
|
|
OthColl = {'B2/SOLID', 'C2/SOLID'},
|
|
Geo = 'H22_HEAD/GEO'}
|
|
--EgtSetInfo( H22Id, 'ZMAXONROT', '1,190')
|
|
end
|
|
-- *** Carrelli ***
|
|
-- Morse
|
|
local Y1Id = EmtAxis {
|
|
Name = 'Y1',
|
|
Parent = 'Base',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = -X_AX(),
|
|
Pos = Point3d(-865.7,2626.8,-866.0),
|
|
Stroke = { MinY1, MaxY1},
|
|
Home = ParkY1,
|
|
Geo = 'Y1_AXIS/GEO',
|
|
Aux = 'Y1_AXIS/SOLID'}
|
|
local PY1Id = EmtAxis {
|
|
Name = 'PY1',
|
|
Parent = 'Y1',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Y_AX(),
|
|
Pos = Point3d(-469.6,2367.5,-751.6),
|
|
Stroke = {0, MaxHoOpen},
|
|
Home = MaxHoOpen,
|
|
Geo = 'PY1_AXIS/GEO',
|
|
Aux = {'PY1_AXIS/SOLID', 'PY1_AXIS/CLAMP_CHECK'}}
|
|
local Y2Id = EmtAxis {
|
|
Name = 'Y2',
|
|
Parent = 'Base',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = -X_AX(),
|
|
Pos = Point3d(865.7,2626.8,-866.0),
|
|
Stroke = { MinY2, MaxY2},
|
|
Home = ParkY2,
|
|
Geo = 'Y2_AXIS/GEO',
|
|
Aux = 'Y2_AXIS/SOLID'}
|
|
local PY2Id = EmtAxis {
|
|
Name = 'PY2',
|
|
Parent = 'Y2',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Y_AX(),
|
|
Pos = Point3d(469.6,2367.5,-751.6),
|
|
Stroke = {0, MaxHoOpen},
|
|
Home = MaxHoOpen,
|
|
Geo = 'PY2_AXIS/GEO',
|
|
Aux = {'PY2_AXIS/SOLID', 'PY2_AXIS/CLAMP_CHECK'}}
|
|
-- Rulli
|
|
local V1Id = EmtAxis {
|
|
Name = 'V1',
|
|
Parent = 'Base',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = -X_AX(),
|
|
Pos = Point3d(-875.5,1072.0,-1509.1),
|
|
Stroke = { MinV1, MaxV1},
|
|
Home = ParkV1,
|
|
Geo = 'V1_AXIS/GEO',
|
|
Aux = {'V1_AXIS/SOLID', 'V1_AXIS/COLLISION'}}
|
|
local PV1Id = EmtAxis {
|
|
Name = 'PV1',
|
|
Parent = 'V1',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Y_AX(),
|
|
Pos = Point3d(-194.0,2364.7,-879.1),
|
|
Stroke = {0, MaxHoOpen},
|
|
Home = MaxHoOpen,
|
|
Geo = 'PV1_AXIS/GEO',
|
|
Aux = 'PV1_AXIS/SOLID'}
|
|
local QV1Id = EmtAxis {
|
|
Name = 'QV1',
|
|
Parent = 'V1',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d(-287.0,2481.0,-943.0),
|
|
Stroke = {0, MaxVeOpen},
|
|
Home = MaxVeOpen,
|
|
Geo = 'QV1_AXIS/GEO',
|
|
Aux = 'QV1_AXIS/SOLID'}
|
|
local V2Id = EmtAxis {
|
|
Name = 'V2',
|
|
Parent = 'Base',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = -X_AX(),
|
|
Pos = Point3d(875.5,1072.0,-1509.1),
|
|
Stroke = { MinV2, MaxV2},
|
|
Home = ParkV2,
|
|
Geo = 'V2_AXIS/GEO',
|
|
Aux = {'V2_AXIS/SOLID', EgtIf( Clamp5, 'V2_AXIS/AUX5', 'V2_AXIS/AUX'), 'V2_AXIS/COLLISION'}}
|
|
local PV2Id = EmtAxis {
|
|
Name = 'PV2',
|
|
Parent = 'V2',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Y_AX(),
|
|
Pos = Point3d(194.0,2364.7,-879.1),
|
|
Stroke = {0, MaxHoOpen},
|
|
Home = MaxHoOpen,
|
|
Geo = 'PV2_AXIS/GEO',
|
|
Aux = 'PV2_AXIS/SOLID'}
|
|
local QV2Id = EmtAxis {
|
|
Name = 'QV2',
|
|
Parent = 'V2',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d(287.0,2481.0,-943.0),
|
|
Stroke = {0, MaxVeOpen},
|
|
Home = MaxVeOpen,
|
|
Geo = 'QV2_AXIS/GEO',
|
|
Aux = 'QV2_AXIS/SOLID'}
|
|
local WId, PWId, QWId
|
|
if Clamp5 then
|
|
WId = EmtAxis {
|
|
Name = 'W',
|
|
Parent = 'V2',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = -X_AX(),
|
|
Pos = Point3d(875.5,1072.0,-1509.1),
|
|
Stroke = { MinW, MaxW},
|
|
Home = ParkW,
|
|
Geo = 'W_AXIS/GEO',
|
|
Aux = { 'W_AXIS/SOLID', 'W_AXIS/COLLISION'}}
|
|
PWId = EmtAxis {
|
|
Name = 'PW',
|
|
Parent = 'W',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Y_AX(),
|
|
Pos = Point3d(194.0,2364.7,-879.1),
|
|
Stroke = {MinWOpen, MaxWOpen},
|
|
Home = MaxWOpen,
|
|
Geo = 'PW_AXIS/GEO',
|
|
Aux = 'PW_AXIS/SOLID'}
|
|
QWId = EmtAxis {
|
|
Name = 'QW',
|
|
Parent = 'PW',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d(194.0,2364.7,-879.1),
|
|
Stroke = {0, 30},
|
|
Home = 0,
|
|
Geo = 'QW_AXIS/GEO',
|
|
Aux = { 'QW_AXIS/SOLID', 'QW_AXIS/COLLISION'}}
|
|
end
|
|
-- *** Tavola ***
|
|
EmtAxis {
|
|
Name = 'T',
|
|
Parent = 'Base',
|
|
--Token = '**',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = - X_AX(),
|
|
Pos = Point3d(0.0,2450.0,-958.0),
|
|
Stroke = {-30000, 30000},
|
|
Home = LoadT,
|
|
Geo = 'T_AXIS/GEO'}
|
|
EmtTable {
|
|
Name = 'Tab',
|
|
Parent = 'T',
|
|
Type = MCH_TT.FLAT,
|
|
Ref1 = Point3d( -DimTabX, DeltaTabY, DeltaTabZ),
|
|
Coll = 'Base/BELT',
|
|
Geo = 'TABLE/GEO',
|
|
Aux = 'TABLE/SOLID'}
|
|
-- *** ToolChanger ***
|
|
local ptTc1 = Point3d( 150, 2894, -217 + ( DeltaTabZ + DeltaRulliTraveZ + 30))
|
|
local vtDt1 = Vector3d( 0, 0, - 102.5)
|
|
EmtTcPos {
|
|
Name = 'T1',
|
|
Parent = 'Base',
|
|
Pos = ptTc1 + Vector3d( SawOffsX, -SawOffsZ, 0),
|
|
TDir = -Y_AX(),
|
|
ADir = -X_AX(),
|
|
Geo = 'BASE/T1'}
|
|
EmtTcPos {
|
|
Name = 'T3',
|
|
Parent = 'Base',
|
|
Pos = ptTc1 + 2 * vtDt1,
|
|
TDir = -Y_AX(),
|
|
ADir = -X_AX(),
|
|
Geo = 'BASE/T3'}
|
|
EmtTcPos {
|
|
Name = 'T4',
|
|
Parent = 'Base',
|
|
Pos = ptTc1 + 3 * vtDt1,
|
|
TDir = -Y_AX(),
|
|
ADir = -X_AX(),
|
|
Geo = 'BASE/T4'}
|
|
EmtTcPos {
|
|
Name = 'T5',
|
|
Parent = 'Base',
|
|
Pos = ptTc1 + 4 * vtDt1,
|
|
TDir = -Y_AX(),
|
|
ADir = -X_AX(),
|
|
Geo = 'BASE/T5'}
|
|
EmtTcPos {
|
|
Name = 'T6',
|
|
Parent = 'Base',
|
|
Pos = ptTc1 + 5 * vtDt1,
|
|
TDir = -Y_AX(),
|
|
ADir = -X_AX(),
|
|
Geo = 'BASE/T6'}
|
|
EmtTcPos {
|
|
Name = 'T7',
|
|
Parent = 'Base',
|
|
Pos = ptTc1 + 6 * vtDt1,
|
|
TDir = -Y_AX(),
|
|
ADir = -X_AX(),
|
|
Geo = 'BASE/T7'}
|
|
EmtTcPos {
|
|
Name = 'T8',
|
|
Parent = 'Base',
|
|
Pos = ptTc1 + 7 * vtDt1,
|
|
TDir = -Y_AX(),
|
|
ADir = -X_AX(),
|
|
Geo = 'BASE/T8'}
|
|
if AggreBlockHaus then
|
|
local TcpSsId = EmtTcPos {
|
|
Name = 'T9',
|
|
Parent = 'Base',
|
|
Pos = ptTc1 + 8 * vtDt1 + Vector3d( -AngTrBHLen, AngTrBHOffs, 0),
|
|
TDir = X_AX(),
|
|
ADir = -Y_AX(),
|
|
Geo = 'BASE/T9_BH',
|
|
Aux = 'BASE/T9_HS'}
|
|
else
|
|
EmtTcPos {
|
|
Name = 'T9',
|
|
Parent = 'Base',
|
|
Pos = ptTc1 + 8 * vtDt1,
|
|
TDir = -Y_AX(),
|
|
ADir = -X_AX(),
|
|
Geo = 'BASE/T9'}
|
|
end
|
|
EmtTcPos {
|
|
Name = 'T10',
|
|
Parent = 'Base',
|
|
Pos = ptTc1 + 9 * vtDt1,
|
|
TDir = -Y_AX(),
|
|
ADir = -X_AX(),
|
|
Geo = 'BASE/T10'}
|
|
local ptTc2 = Point3d( 150.5, -174.3, -216.5 + ( DeltaTabZ + DeltaRulliTraveZ + 30))
|
|
local vtDt2 = Vector3d( 0, 0, - 102.5)
|
|
EmtTcPos {
|
|
Name = 'T11',
|
|
Parent = 'Base',
|
|
Pos = ptTc2 + EgtIf( SecondSaw, Vector3d( Saw2OffsX, Saw2OffsZ, 0), V_NULL()),
|
|
TDir = Y_AX(),
|
|
ADir = -X_AX(),
|
|
Geo = 'BASE/T11'}
|
|
EmtTcPos {
|
|
Name = 'T12',
|
|
Parent = 'Base',
|
|
Pos = ptTc2 + 1 * vtDt2,
|
|
TDir = Y_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T12'}
|
|
EmtTcPos {
|
|
Name = 'T13',
|
|
Parent = 'Base',
|
|
Pos = ptTc2 + 2 * vtDt2,
|
|
TDir = Y_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T13'}
|
|
EmtTcPos {
|
|
Name = 'T14',
|
|
Parent = 'Base',
|
|
Pos = ptTc2 + 3 * vtDt2,
|
|
TDir = Y_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T14'}
|
|
EmtTcPos {
|
|
Name = 'T15',
|
|
Parent = 'Base',
|
|
Pos = ptTc2 + 4 * vtDt2,
|
|
TDir = Y_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T15'}
|
|
EmtTcPos {
|
|
Name = 'T16',
|
|
Parent = 'Base',
|
|
Pos = ptTc2 + 5 * vtDt2,
|
|
TDir = Y_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T16'}
|
|
EmtTcPos {
|
|
Name = 'T17',
|
|
Parent = 'Base',
|
|
Pos = ptTc2 + 6 * vtDt2,
|
|
TDir = Y_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T17'}
|
|
EmtTcPos {
|
|
Name = 'T18',
|
|
Parent = 'Base',
|
|
Pos = ptTc2 + 7 * vtDt2,
|
|
TDir = Y_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T18'}
|
|
EmtTcPos {
|
|
Name = 'T19',
|
|
Parent = 'Base',
|
|
Pos = ptTc2 + 8 * vtDt2,
|
|
TDir = Y_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T19'}
|
|
EmtTcPos {
|
|
Name = 'T20',
|
|
Parent = 'Base',
|
|
Pos = ptTc2 + 9 * vtDt2,
|
|
TDir = Y_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T20'}
|
|
local ptTc3 = Point3d( 480, 2214.0, -200.8 + ( DeltaTabZ + DeltaRulliTraveZ + 30))
|
|
EmtTcPos {
|
|
Name = 'T101',
|
|
Parent = 'Base',
|
|
Pos = ptTc3,
|
|
TDir = -X_AX(),
|
|
ADir = Z_AX(),
|
|
Geo = 'BASE/T101'}
|
|
if Mortiser then
|
|
local ptTc4 = ptTc3 + Vector3d( 0, 0, -270)
|
|
EmtTcPos {
|
|
Name = 'T201',
|
|
Parent = 'Base',
|
|
Pos = ptTc4,
|
|
TDir = -X_AX(),
|
|
ADir = Z_AX(),
|
|
Geo = 'BASE/T201'}
|
|
end
|
|
|
|
-- Aggiusto posizioni geometriche
|
|
local vtMovB = Vector3d( 0, 0, ( DeltaTabZ + DeltaRulliTraveZ + 30)) -- -( -1010 + 980))
|
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'SOLID'), vtMovB, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'COLLISION'), vtMovB, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'SIGN') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC1') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC2') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC3') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
|
if Mortiser then
|
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC4') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
|
end
|
|
-- sposto geometria aggiuntiva agrgegato BlockHaus
|
|
if AggreBlockHaus then
|
|
EgtMove( EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( BaseId, 'T9'), 'T9_HS') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
|
end
|
|
EgtMove( EgtGetFirstNameInGroup( X1Id, 'SOLID'), vtMovB, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( X1Id, 'COLLISION'), vtMovB, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), vtMovB, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( X2Id, 'COLLISION'), vtMovB, GDB_RT.GLOB)
|
|
local vtMovC = Vector3d( 0, 0, ( DeltaTabZ + DeltaRulliTappetoZ + 1495)) -- -( -1010 - 485)
|
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'BELT'), vtMovC, GDB_RT.GLOB)
|
|
local vtMove = Vector3d( 0, ( DeltaTabY - 1170.0), ( DeltaTabZ + 1010.0))
|
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'CONVOYER'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( Y1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( PY1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( PY1Id, 'CLAMP_CHECK'), vtMove + Vector3d(0,0,DistZClampToTable), GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( Y2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( PY2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( PY2Id, 'CLAMP_CHECK'), vtMove + Vector3d(0,0,DistZClampToTable), GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( V1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( PV1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( QV1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( V2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( V2Id, EgtIf( Clamp5, 'AUX5', 'AUX')), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( PV2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( QV2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
if Clamp5 then
|
|
EgtMove( EgtGetFirstNameInGroup( WId, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( WId, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( PWId, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( QWId, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( QWId, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
|
end
|
|
|
|
-- Assegno identificativi alle spie delle morse
|
|
PY1LightId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( PY1Id, 'SOLID') or GDB_ID.NULL, 'Light')
|
|
PY2LightId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( PY2Id, 'SOLID') or GDB_ID.NULL, 'Light')
|
|
|
|
---------------------------------------------------------------------
|
|
-- Funzioni richiamate per modificare i dati macchina in casi particolari
|
|
--function OnSetTable()
|
|
--end
|
|
|
|
---------------------------------------------------------------------
|
|
function OnSetHead()
|
|
-- se testa H11 (fresa)
|
|
if EMC.HEAD == 'H11' then
|
|
local dRawH = GetRawHeight()
|
|
EmtModifyAxisHome( 'X1', ParkX1)
|
|
EmtModifyAxisHome( 'Z1', ParkZ1 + EgtIf( dRawH > 650, EgtIf( EMC.TOTDIAM < 61, 235, 165), 0))
|
|
EmtModifyAxisHome( 'C1', ParkC1)
|
|
EmtModifyAxisHome( 'B1', ParkB1)
|
|
EmtModifyAxisDirection( 'B1', X_AX())
|
|
-- se testa H12 (lama)
|
|
elseif EMC.HEAD == 'H12' or EMC.HEAD == 'H17' then
|
|
EmtModifyAxisHome( 'X1', ParkX1)
|
|
EmtModifyAxisHome( 'Z1', ParkZ1)
|
|
EmtModifyAxisHome( 'C1', ParkC1)
|
|
EmtModifyAxisHome( 'B1', ParkB1)
|
|
EmtModifyAxisDirection( 'B1', Vector3d( cos( SawC1Offs), -sin( SawC1Offs), 0))
|
|
-- se testa H13 (sega a catena)
|
|
elseif EMC.HEAD == 'H13' then
|
|
-- aggiustamenti per distanza
|
|
local dDist = EgtIf( EMC.DIST and abs( EMC.DIST) > 1, EMC.DIST, ChSawLen)
|
|
EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -dDist))
|
|
local vtMove = Point3d( 0, 0, -dDist) - Point3d( EMC.EXITPOS)
|
|
local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT))
|
|
EgtMove( ExitId, vtMove)
|
|
-- recupero valore asse A bloccato
|
|
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
|
local CSawPosA = tonumber( sVal:sub( 3) or '')
|
|
EmtModifyAxisHome( 'X1', ParkCSawX1)
|
|
EmtModifyAxisHome( 'Z1', GetChainSawZHomeFromVirtualAxis( CSawPosA))
|
|
EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( CSawPosA))
|
|
EmtModifyAxisHome( 'B1', ParkCSawB1)
|
|
EmtModifyAxisDirection( 'B1', X_AX())
|
|
-- se testa H21 (fresa2)
|
|
elseif EMC.HEAD == 'H21' then
|
|
local dRawH = GetRawHeight()
|
|
EmtModifyAxisHome( 'X2', ParkX2)
|
|
EmtModifyAxisHome( 'Z2', ParkZ2 + EgtIf( dRawH > 650, EgtIf( EMC.TOTDIAM < 61, 235, 165), 0))
|
|
EmtModifyAxisHome( 'C2', ParkC2)
|
|
EmtModifyAxisHome( 'B2', ParkB2)
|
|
EmtModifyAxisDirection( 'B2', X_AX())
|
|
-- se testa H22 (lama)
|
|
elseif EMC.HEAD == 'H22' then
|
|
EmtModifyAxisHome( 'X2', ParkX2)
|
|
EmtModifyAxisHome( 'Z2', ParkZ2)
|
|
EmtModifyAxisHome( 'C2', ParkC2)
|
|
EmtModifyAxisHome( 'B2', ParkB2)
|
|
EmtModifyAxisDirection( 'B2', Vector3d( cos( SawC2Offs), -sin( SawC2Offs), 0))
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
function GetHeadSet( sHead)
|
|
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H15' or sHead == 'H17' then
|
|
return 1
|
|
elseif sHead == 'H21' or sHead == 'H22' or sHead == 'H23' then
|
|
return 2
|
|
else
|
|
return 0
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
---------------------------- Cambio Utensile ------------------------
|
|
function GetHeadTCSet( sHead, sTcPos)
|
|
local nPos = tonumber( string.sub( sTcPos, 2)) or 0
|
|
-- testa 1
|
|
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H15' or sHead == 'H17' then
|
|
-- testa 1 su CU prossimo a testa 2
|
|
if nPos > 10 then
|
|
return 'Head1_TC2'
|
|
-- testa 1 su CU prossimo a testa 1
|
|
else
|
|
return 'Head1_TC1'
|
|
end
|
|
-- testa 2 su CU prossimo a testa 2
|
|
elseif sHead == 'H21' or sHead == 'H22' or sHead == 'H23' then
|
|
return 'Head2_TC2'
|
|
-- testa 2 su CU prossimo a testa 1 (non esiste una condfigurazione fatta in questo modo)
|
|
elseif nPos < 10 then
|
|
return 'Head2_TC1'
|
|
else
|
|
return 0
|
|
end
|
|
end
|
|
---------------------------------------------------------------------
|
|
-- Funzione che restituisce l'altezza del pezzo in lavorazione
|
|
function GetRawHeight()
|
|
local nRawId = EgtGetFirstRawPart()
|
|
if not nRawId then
|
|
local vLnkRawId = EmtGetAllLinkedRawParts()
|
|
if vLnkRawId and #vLnkRawId >0 then nRawId = vLnkRawId[1] end
|
|
end
|
|
local b3Raw = EgtGetRawPartBBox( nRawId or GDB_ID.NULL)
|
|
if not b3Raw or b3Raw:isEmpty() then return 0 end
|
|
return b3Raw:getDimZ()
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
-- Funzione che riconosce testa per sega a catena
|
|
function HeadIsChainSaw( sHead)
|
|
return ( sHead == 'H13')
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
-- Funzione che calcola la posizione Home di Z per la sega a catena dal valore dell'asse virtuale
|
|
function GetChainSawZHomeFromVirtualAxis( dPosA)
|
|
-- se A=0 -> T101 -> HomeZ = -400
|
|
if abs( dPosA) < 0.1 then
|
|
return ParkCSaw0Z1
|
|
-- altrimenti A=-90 -> T102 o A=90 -> T104 -> HomeZ = -100
|
|
else
|
|
return ParkCSawZ1
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
-- Funzione che calcola l'angolo Home di C per la sega a catena dal valore dell'asse virtuale
|
|
function GetChainSawCHomeFromVirtualAxis( dPosA)
|
|
-- se A=0 -> T101 -> HomeC = 0
|
|
if abs( dPosA) < 0.1 then
|
|
return ParkCSaw0C1
|
|
-- altrimenti A=90 -> T104 -> HomeC = -90
|
|
else
|
|
return ParkCSawC1
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
-- Funzione che ritorna ZExtra partendo dalla testa e dall'angolo verticale
|
|
function GetZExtra( sHead, dAngV)
|
|
if sHead == 'H11' or sHead == 'H21' or sHead == 'H17' then
|
|
if abs( dAngV) < 30.1 then
|
|
return 400
|
|
elseif abs( dAngV) < 45.1 then
|
|
return 300
|
|
elseif abs( dAngV) < 60.1 then
|
|
return 200
|
|
elseif abs( dAngV) < 90.1 then
|
|
return 1
|
|
else
|
|
return 0
|
|
end
|
|
elseif sHead == 'H12' or sHead == 'H22' then
|
|
if abs( dAngV) < 30.1 then
|
|
return 400
|
|
elseif abs( dAngV) < 45.1 then
|
|
return 300
|
|
elseif abs( dAngV) < 60.1 then
|
|
return 200
|
|
elseif abs( dAngV) < 90.1 then
|
|
return 1
|
|
elseif abs( dAngV) < 120 then
|
|
return -100
|
|
else
|
|
return 0
|
|
end
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
-- Funzione per impostare spia stato morsa carrello Y1
|
|
function SetPY1Light( bClosed)
|
|
if not PY1LightId then return end
|
|
EgtSetColor( PY1LightId, EgtIf( bClosed, 'RED', 'LIME'))
|
|
if bClosed then
|
|
EgtSetInfo( PY1LightId, 'On', '1')
|
|
else
|
|
EgtRemoveInfo( PY1LightId, 'On')
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
-- Funzione per leggere lo stato della morsa carrello Y1
|
|
function GetPY1Light()
|
|
if not PY1LightId then return false end
|
|
return ( EgtGetInfo( PY1LightId, 'On') == '1')
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
-- Funzione per impostare spia stato morsa carrello Y2
|
|
function SetPY2Light( bClosed)
|
|
if not PY2LightId then return end
|
|
EgtSetColor( PY2LightId, EgtIf( bClosed, 'RED', 'LIME'))
|
|
if bClosed then
|
|
EgtSetInfo( PY2LightId, 'On', '1')
|
|
else
|
|
EgtRemoveInfo( PY2LightId, 'On')
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
-- Funzione per leggere lo stato della morsa carrello Y2
|
|
function GetPY2Light()
|
|
if not PY2LightId then return false end
|
|
return ( EgtGetInfo( PY2LightId, 'On') == '1')
|
|
end
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
-- Funzione per resettare tutte le attivazioni della macchina
|
|
function OnResetMachine()
|
|
EmtUnlinkAllRawPartsFromGroups()
|
|
EmtUnlinkAllFixturesFromGroups()
|
|
SetPY1Light( false)
|
|
SetPY2Light( 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
|