Files
Essetre-PF/Essetre-PF.mlde
T
2026-03-17 15:20:18 +01:00

1105 lines
39 KiB
Plaintext

-- Descrizione macchina Essetre-PF by Egalware s.r.l. 2024/01/23
-- 2021/04/16 ver 2.3d3 Prima versione.
-- 2022/05/05 ver 2.4e1 Allineata con PFrl.
-- 2022/07/22 ver 2.4g1 Modifiche per sega a catena.
-- 2022/07/25 ver 2.4g2 Aggiunti solidi per collisione assi Z, C e B.
-- 2022/07/26 ver 2.4g3 Aggiunta gestione separazione pezzi fino a 800x390 o 400x400. Aggiunta gestione distanza sega a catena da UI.
-- 2022/08/06 ver 2.4g4 Aggiunta gestione offset B e C su lama testa 1 e testa 2.
-- 2022/08/08 ver 2.4g5 Correzioni per rotazione barra e nuova gestione distanza di sega a catena.
-- 2022/08/08 ver 2.4g6 Correzioni per rotazioni lama in risalita a Zmax. Eliminato UnloadSmT (quota di scarico pezzi piccoli).
-- 2022/08/10 ver 2.4h1 Aggiunta pinza 5 (ma non gestita).
-- 2022/08/12 ver 2.4h2 Spostato M175 per anticipo carico dopo riposizionamento trave.
-- 2022/08/30 ver 2.4h3 Aggiunta gestione pinza 5.
-- 2022/09/01 ver 2.4h4 Migliorie a gestione pinza 5.
-- 2022/09/05 ver 2.4i1 Modifiche per collisione lama contro pilastro in alto.
-- 2022/09/06 ver 2.4i2 Correzione ripetizione assi testa in primo movimento.
-- 2022/09/13 ver 2.4i5 Ritardata a dopo movimenti testa e carrelli della segnalazione pezzo caduto.
-- 2022/10/10 ver 2.4j1 In mlse corretto calcolo dMaxLenLeft allo Splitting (da PF1250-3T).
-- 2022/10/27 ver 2.4j2 In mlse corretta gestione EMC.CNT con Pinza5. Primo movimento di prima lavorazione come per lavorazioni successive (come One).
-- 2022/11/07 ver 2.4k1 Modifiche ai movimenti preparatori lama con trave alta per evitare collisioni.
-- 2022/11/10 ver 2.4k2 In OnLinear di genera CN eliminato recupero sovramateriale di testa EMT.X_OFF dopo riutilizzo EMT.L1o.
-- 2022/11/10 ver 2.4k3 In OnRapid di genera CN correzione nei movimenti da Zmax con sostituzione di PosC1 e PosC2 con PrevR1. Aggiunto salto per ottimizzazione carico. Corretto M175.
-- 2022/12/13 ver 2.4l1 Aggiunta gestione rotazione speciale su split e correzioni varie su rotazioni.
-- 2023/01/24 ver 2.5a3 Allineamento con PFrl per Pinza 5.
-- 2023/02/02 ver 2.5b1 Aggiunte lavorazioni in doppio e 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.
-------------------------------------
-- 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 = 111.0
SawOffsY = 0
SawOffsZ = -150.25
SawC1Offs = 0
SawB1Offs = 0
ChSawLen = 94.0
Mill2Offs = 170.0
Saw2OffsX = 111.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 = 800
LimX1PlRotSaw = 1970
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
ParkCSawX2 = 1350
ParkCSawX2S = ParkX2
SafeCSaw0X2 = 750
ParkCSawZ2 = -100
ParkCSaw0Z2 = -400
ParkCSawC2 = 90
ParkCSaw0C2 = 0
ParkCSawB2 = 0
AngTrBHOffs = 154.5
AngTrBHLen = 90
TurnerOffs = 120.0
AggLoad = 50
DeltaTabY = 1550.0
DeltaTabZ = -1060.0 -- per TPA la quota è dal centro di rotazione (va aggiunto MillOffs)
DeltaRulliTraveZ = 980
DeltaRulliTappetoZ = -485
DimTabY = 500
DimTabX = 30000
Delta2TabY = 1550.0
Delta2TabZ = -1060.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-PF.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
ParkCSawX2S = ParkX2
ParkCSawZ2 = min( ParkCSawZ2, MaxZ2)
ParkCSaw0Z2 = min( ParkCSaw0Z2, MaxZ2)
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,210,610')
-- 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,210,610')
end
-- Sega a catena
EmtAxis {
Name = 'A',
Parent = 'B2',
Token = '**',
Type = MCH_AT.ROTARY,
Dir = Z_AX(),
Pos = Point3d( 0, 0, 0),
Stroke = { -90.1, 90.1},
Home = 0,
Geo = 'A2_AXIS/GEO'}
local H23Id = EmtHead {
Name = 'H23',
Parent = 'A',
HSet = 'H21',
Type = MCH_HT.STD,
Pos = Point3d( Head2X, Head2Y, Head2Z-ChSawLen),
TDir = -X_AX(),
ADir = Z_AX(),
Rot1W = 0.2,
Rot2Stroke = { -90.1, 90.1},
SolCh = MCH_SCC.ADIR_NEAR,
OthColl = {'B2/SOLID', 'C2/SOLID'},
Geo = 'H23_HEAD/GEO'}
EgtSetInfo( H23Id, 'ZSAFEDELTA', '60')
EgtSetInfo( H23Id, 'ZMAXONROT', '1,80')
-- *** 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 - DimTabY, DeltaTabZ),
Coll = 'Base/BELT',
Geo = 'TABLE/GEO',
Aux = 'TABLE/SOLID'}
-- *** ToolChanger ***
local ptTc1 = Point3d( 150, 2890, -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, -170.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, 506.1, -200.8 + ( DeltaTabZ + DeltaRulliTraveZ + 30))
EmtTcPos {
Name = 'T111',
Parent = 'Base',
Pos = ptTc3,
TDir = -X_AX(),
ADir = Z_AX(),
Geo = 'BASE/T111'}
if Mortiser then
local ptTc4 = ptTc3 + Vector3d( 0, 0, -270)
EmtTcPos {
Name = 'T211',
Parent = 'Base',
Pos = ptTc4,
TDir = -X_AX(),
ADir = Z_AX(),
Geo = 'BASE/T211'}
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 - 1550.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)
if EMC.HEAD == 'H12' then
EmtModifyAxisDirection( 'B1', Vector3d( cos( SawC1Offs), -sin( SawC1Offs), 0))
else
EmtModifyAxisDirection( 'B1', X_AX())
end
-- 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))
-- se testa H23 (sega a catena)
elseif EMC.HEAD == 'H23' 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, Head2Z - dDist))
local vtMove = Point3d( 0, 0, Head2Z - 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( 'X2', ParkCSawX2)
EmtModifyAxisHome( 'Z2', GetChainSawZHomeFromVirtualAxis( CSawPosA))
EmtModifyAxisHome( 'C2', GetChainSawCHomeFromVirtualAxis( CSawPosA))
EmtModifyAxisHome( 'B2', ParkCSawB2)
EmtModifyAxisDirection( 'B2', X_AX())
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 == 'H23')
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 -> T111 -> HomeZ = -400
if abs( dPosA) < 0.1 then
return ParkCSaw0Z2
-- altrimenti A=90 -> T114 -> HomeZ = -100
else
return ParkCSawZ2
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 -> T111 -> HomeC = 0
if abs( dPosA) < 0.1 then
return ParkCSaw0C2
-- altrimenti A=90 -> T114 -> HomeC = -90
else
return ParkCSawC2
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