Compare commits
27 Commits
PreRelease
...
2.6a1
| Author | SHA1 | Date | |
|---|---|---|---|
| d03c605285 | |||
| d751b4950f | |||
| 2c36caab30 | |||
| 82106271ab | |||
| 4e4d73bb6e | |||
| 85069971c1 | |||
| fca3f67082 | |||
| c51a208c4a | |||
| caf990c23b | |||
| 8d4ab5ce67 | |||
| fae1c3e50d | |||
| cb27d30d6e | |||
| 817880d925 | |||
| fe3f871c2a | |||
| 9c7a2a8681 | |||
| 85357f4ad1 | |||
| e0968d25dd | |||
| 74a0908b38 | |||
| 996e1dfc1a | |||
| 60fda9103e | |||
| a1ed887d5e | |||
| 88279f256a | |||
| 0f46595892 | |||
| 0528a7af60 | |||
| d3accc6901 | |||
| a3d0538444 | |||
| e40d2e5dad |
+14
-4
@@ -5,12 +5,12 @@ EgtOutLog( ' PF1250-BeamData started')
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local BeamData = {
|
||||
RIGHT_LOAD = false, -- flag carico da destra
|
||||
RIGHT_LOAD = false, -- flag carico da destra
|
||||
SIMUL_VIEW_DIR = 2, -- direzione di vista predefinita per la simulazione (1=NW, 2=SW, 3=NE, 4=SE)
|
||||
MIN_WIDTH = 40, -- larghezza minima del grezzo
|
||||
MIN_HEIGHT = 40, -- altezza minima del grezzo
|
||||
MAX_WIDTH = 1250, -- larghezza massima del grezzo
|
||||
MAX_HEIGHT = 400, -- altezza massima del grezzo
|
||||
MAX_WIDTH = 1300, -- larghezza massima del grezzo
|
||||
MAX_HEIGHT = 600, -- altezza massima del grezzo
|
||||
LEN_SHORT_PART = 1200, -- lunghezza massima pezzo piccolo
|
||||
MAX_RAW = 20000, -- massima lunghezza grezzo (deve essere minore di LenTable - RAW_OFFSET)
|
||||
STD_RAW = 14000, -- lunghezza standard della barra di grezzo
|
||||
@@ -77,7 +77,7 @@ local BeamData = {
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Aggiornamento con dati da TechnoEssetre7
|
||||
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PF1250.data"
|
||||
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PF1250MAX.data"
|
||||
local sDataBeam = EgtGetSourceDir().."\\Ts3Data.lua"
|
||||
local sDataWall = EgtGetCurrMachineDir()..'\\Wall\\Ts3Data.lua'
|
||||
if EgtExistsFile( sTs3Data) then
|
||||
@@ -187,6 +187,16 @@ local function GetChainSawBlockedAxis( nInd)
|
||||
end
|
||||
BeamData.GetChainSawBlockedAxis = GetChainSawBlockedAxis
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function GetSawBlockedAxis( nInd, bDownHead)
|
||||
if nInd == 1 then
|
||||
return EgtIf( bDownHead, 'A2=90', '')
|
||||
else
|
||||
return EgtIf( bDownHead, 'A2=0', '')
|
||||
end
|
||||
end
|
||||
BeamData.GetSawBlockedAxis = GetSawBlockedAxis
|
||||
|
||||
---------------------------------------------------------------------
|
||||
|
||||
return BeamData
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
-- Processore macchina Essetre-PF1250 by EgalTech s.r.l. 2023/11/21
|
||||
-- Con controllo numerico TPA
|
||||
|
||||
-- Carico i dati globali
|
||||
local sBaseDir = EgtGetSourceDir()
|
||||
local BD = dofile( sBaseDir .. 'Beam\\BeamData.lua')
|
||||
|
||||
-- Variabili di modulo
|
||||
local MLE_INFO = 'Essetre-PF1250.TPA.mlpe ver.'..PP_VER..' by EgalTech s.r.l.'
|
||||
|
||||
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
||||
local MACHINE_INFO = 'PP_VER ver.'..PP_VER
|
||||
|
||||
local TEST_USE = false
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -14,8 +14,8 @@ local TEST_USE = false
|
||||
---------------------------------------------------------------------
|
||||
function OnStart()
|
||||
-- controllo versione programma
|
||||
if not EMT.VER or EMT.VER < '2.5d1' then
|
||||
EmtSetLastError( 1200, 'A newer version of the program is required (minimum EgtMachKernel 2.5d1)')
|
||||
if not EMT.VER or EMT.VER < MIN_MACH_VER then
|
||||
EmtSetLastError( 1200, 'A newer version of the program is required (minimum EgtMachKernel '..MIN_MACH_VER..')')
|
||||
end
|
||||
EMT.USETO1 = false -- abilitazione uso origine tavola
|
||||
EMT.MODAL = true -- abilitazione emissione modale
|
||||
@@ -29,6 +29,7 @@ function OnStart()
|
||||
--EMT.St = 'S' -- token per speed
|
||||
EMT.FMAXPINZE = 116000 -- feed massima pinze
|
||||
SetToParkLine() -- si inizia con linee da parcheggiare su stack
|
||||
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -45,7 +46,8 @@ function OnProgramStart()
|
||||
else
|
||||
EmitRemark( 'Program Start')
|
||||
end
|
||||
EmitRemark( MLE_INFO)
|
||||
EmitRemark( CSP_INFO)
|
||||
EmitRemark( MACHINE_INFO)
|
||||
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
||||
if TEST_USE then
|
||||
MyOutput( 'M199')
|
||||
@@ -144,8 +146,15 @@ function OnDispositionStart()
|
||||
' P10='..EmtLenToString( -TurnerOffs, 2)..' P11='..EmtLenToString( MinV1, 2)..' P12='..EmtLenToString( MaxV1, 2)..
|
||||
' P13='..EmtLenToString( MinV2, 2)..' P14='..EmtLenToString( MaxV2, 2)..
|
||||
' P15='..EmtLenToString( -DeltaTabY, 2)..' P16='..EmtLenToString( DeltaTabZ - MillOffs, 2)..
|
||||
' P17='..EmtLenToString( Delta2TabY, 2)..' P18='..EmtLenToString( -Delta2TabZ - Mill2Offs, 2)..
|
||||
' P22='..EmtLenToString( -MinZ2, 2)
|
||||
' P17='..EmtLenToString( Delta2TabY, 2)..' P18='..EmtLenToString( -Delta2TabZ - Mill2Offs, 2)
|
||||
-- se è in configurazione a 3 teste
|
||||
if EgtGetHeadId( 'H31') then
|
||||
sOut = sOut .. ' P19='..EmtLenToString( -Delta3TabY, 2)..' P20='..EmtLenToString( Delta3TabZ - Mill3Offs, 2)..
|
||||
' P21='..EmtLenToString( Mill3Offs, 2).. ' P22='.. EmtLenToString( -ParkInLavZ2, 2)
|
||||
else
|
||||
sOut = sOut .. ' P22='..EmtLenToString( -MinZ2, 2)
|
||||
end
|
||||
|
||||
MyOutput( sOut)
|
||||
-- carico barra
|
||||
EMT.LOAD = true
|
||||
@@ -207,7 +216,10 @@ function OnDispositionEnd()
|
||||
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( nLoad90) .. ' P6=' .. EmtLenToString( LTrave, 2) ..
|
||||
' P7=' .. EgtNumToString( TempAccPinze, 2) .. ' P8=' .. EgtNumToString( TempAccPinz2, 2) .. ' P9=' .. EgtNumToString( TempAccPinz1, 2) ..
|
||||
' P10=' .. EgtNumToString( EMT.PARTTYPE or 0, 0)
|
||||
-- .. ' P11=' .. EgtNumToString( ForzaPinze, 2) .. ' P12=' .. EgtNumToString( ForzaPinze, 2)
|
||||
-- su macchine vecchie non si poteva settare forza pinzaggio. Parametro da attivare in MLDE
|
||||
if EmitAccClamps then
|
||||
sOut = sOut .. ' P11=' .. EgtNumToString( ForzaPinze, 2) .. ' P12=' .. EgtNumToString( ForzaPinze, 2)
|
||||
end
|
||||
MyOutput( sOut)
|
||||
if EMT.LOAD then
|
||||
SetStartValue( 1, LBarra)
|
||||
@@ -221,6 +233,10 @@ function OnDispositionEnd()
|
||||
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( 0) .. ' P6=' .. EmtLenToString( EgtIf( IdTrave >= 0, LTrave, LBarra), 2) ..
|
||||
' P7=' .. EgtNumToString( TempAccPinze, 2) .. ' P8=' .. EgtNumToString( TempAccPinz2, 2) .. ' P9=' .. EgtNumToString( TempAccPinz1, 2)..
|
||||
' P10=' .. EgtNumToString( EMT.PARTTYPE or 0, 0)
|
||||
-- su macchine vecchie non si poteva settare forza pinzaggio. Parametro da attivare in MLDE
|
||||
if EmitAccClamps then
|
||||
sOut = sOut .. ' P11=' .. EgtNumToString( ForzaPinze, 2) .. ' P12=' .. EgtNumToString( ForzaPinze, 2)
|
||||
end
|
||||
MyOutput( sOut)
|
||||
-- determino la quota di parcheggio della trave
|
||||
local ParkT = GetParkT()
|
||||
@@ -228,7 +244,7 @@ function OnDispositionEnd()
|
||||
EMT.Y1DELTA = EMT.Y1POS - ParkT
|
||||
EMT.Y2DELTA = nil
|
||||
EmitBeamHeadData( { T=ParkT, Y1=EMT.Y1POS, SetHead=1, F=0})
|
||||
end
|
||||
end
|
||||
-- se altrimenti disposizione intermedia, eventuale rotazione
|
||||
elseif IsMidPhase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then
|
||||
-- recupero le rotazioni delle fasi corrente e precedente
|
||||
@@ -351,6 +367,20 @@ function OnToolSelect()
|
||||
if MCH_TP.DIST then EMT.TDIST = EgtTdbGetCurrToolParam( MCH_TP.DIST) end
|
||||
if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end
|
||||
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
|
||||
-- salvo dati utensile
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- per gruppo testa 1
|
||||
if nSetHead == 1 then
|
||||
EMT.PREVTOOL_H1 = EMT.TOOL
|
||||
EMT.PREVHEAD_H1 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H1 = EMT.TCPOS
|
||||
-- per gruppo testa 2
|
||||
elseif nSetHead == 2 then
|
||||
EMT.PREVTOOL_H2 = EMT.TOOL
|
||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -370,7 +400,15 @@ function OnMachiningStart()
|
||||
-- imposto home dell'asse C1 (A=0 -> T101, A=90 -> T104)
|
||||
local MyParkCSawC1 = GetChainSawCHomeFromVirtualAxis( dPosA)
|
||||
EmtModifyAxisHome( 'C1', MyParkCSawC1)
|
||||
-- se lama su aggregato testa sotto, aggiusto subito angolo scelto per asse virtuale A
|
||||
elseif EMT.HEAD == 'H22' then
|
||||
-- valore dell'asse virtuale
|
||||
dPosA = GetCurrSawingVirtualAxis()
|
||||
-- imposto home dell'asse C2 (A=0 -> T201, A=90 -> T204)
|
||||
local MyParkCSawC2 = GetSawCHomeFromVirtualAxis( dPosA)
|
||||
EmtModifyAxisHome( 'C2', MyParkCSawC2)
|
||||
end
|
||||
|
||||
-- gestione eventuale lavorazione in doppio
|
||||
local nDouType = EgtGetValInNotes( EMT.MCHUSERNOTES, 'DOUBLE', 'i')
|
||||
if nDouType == 2 or nDouType == 3 then
|
||||
@@ -398,6 +436,17 @@ function OnMachiningStart()
|
||||
EmitParkRoller( dPosT, false)
|
||||
EmitDouZMax( EMT.DOU_TO_ZMAX)
|
||||
end
|
||||
-- controllo seguente trovato nella 3T. Da verificare
|
||||
-- determino subito se taglio di separazione di pezzo a caduta
|
||||
EMT.PREFALLCUT = nil
|
||||
if EMT.MCHUSERNOTES and EMT.MCHUSERNOTES:find( 'Split') then
|
||||
local ClId = EgtGetFirstNameInGroup( EMT.MCHID, 'CL')
|
||||
local P1Id = EgtGetFirstNameInGroup( ClId or GDB_ID.NULL, 'P1')
|
||||
local sAE1 = EgtGetInfo( P1Id or GDB_ID.NULL, 'AE1') or ''
|
||||
if sAE1 == '0,Fall' then
|
||||
EMT.PREFALLCUT = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -645,14 +694,29 @@ function OnRapid()
|
||||
end
|
||||
-- in caso di rotazione della lama lontano dalla posizione di home degli assi rotanti
|
||||
if ( EMT.HEAD == 'H12' or EMT.HEAD == 'H16') and ( abs( PrevR1 - EMT.R1) > 1 or abs( PrevR2 - EMT.R2) > 1) and ( abs( HomeR1 - EMT.R1) > 30.1 or abs( HomeR2 - EMT.R2) > 30.1) then
|
||||
local bXSpec = ( EMT.L2 < -DeltaTabY)
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MaxZ1, S=Speed})
|
||||
local bXSpec = EgtIf( BD.RIGHT_LOAD, ( EMT.L2 > -DeltaTabY), ( EMT.L2 < -DeltaTabY))
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MaxZ1, B=ParkB1, C=ParkC1, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MaxZ1, S=Speed})
|
||||
end
|
||||
EmitMoveDataHead( 1, { B=0, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- caso standard
|
||||
else
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
-- se sega a catena
|
||||
if EMT.HEAD == 'H15' then
|
||||
EmitMoveDataHead( 1, { X=ParkCSawX1, Z=ParkCSawZ1, B=HomeB1, C=EMT.R1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
-- utensili standard
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=EMT.L3, B=ParkB1, C=ParkC1, S=Speed})
|
||||
end
|
||||
end
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
@@ -661,12 +725,17 @@ function OnRapid()
|
||||
EmitMoveStartHead( 1)
|
||||
-- se lavorazione in doppio
|
||||
if EMT.DOU_TYPE == 2 then
|
||||
local dX2 = Delta2TabY + EMT.DOU_TLEN - ( -DeltaTabY - EMT.L2 + EMT.TLEN + EMT.HB)
|
||||
local dX2 = Delta2TabY + EMT.DOU_TLEN - ( -DeltaTabY - EMT.L2 + EMT.TLEN + EgtIf( BD.RIGHT_LOAD, -EMT.HB, EMT.HB))
|
||||
local dZ2 = -Head2Z + MillOffs + Mill2Offs + EMT.L3
|
||||
dZ2 = min( dZ2, MaxZ2)
|
||||
dZ2 = min( dZ2, MinZ2)
|
||||
local dC2 = EMT.R1
|
||||
local dB2 = EMT.R2
|
||||
EmitMoveDataHead( 2, { X=dX2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 2, { X=dX2, Z=MinZ2, B=ParkB2, C=ParkC2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=dX2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
end
|
||||
EmitMoveDataHead( 2, { Z=-dZ2, B=dB2, C=dC2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
EmitMoveStartHead( 2)
|
||||
-- aspetto esecuzione movimento testa 2
|
||||
@@ -677,7 +746,12 @@ function OnRapid()
|
||||
dZ2 = max( dZ2, MinZ2)
|
||||
local dC2 = EMT.R1
|
||||
local dB2 = EMT.R2
|
||||
EmitMoveDataHead( 2, { X=dX2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 2, { X=dX2, Z=MinZ2, B=ParkB2, C=ParkC2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=dX2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
end
|
||||
EmitMoveDataHead( 2, { Z=-dZ2, B=dB2, C=dC2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
EmitMoveStartHead( 2)
|
||||
-- aspetto esecuzione movimento testa 2
|
||||
@@ -688,10 +762,15 @@ function OnRapid()
|
||||
end
|
||||
-- aspetto esecuzione movimento testa 1
|
||||
EmitMoveWaitHead( 1)
|
||||
-- altrimenti testa 2
|
||||
else
|
||||
-- se altrimenti testa 2
|
||||
elseif nHSet == 2 then
|
||||
-- selezione testa (non posso muovere X)
|
||||
EmitMoveDataHead( 2, { X=ParkX2, S=Speed})
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 2, { X=ParkX2, Z=ParkZ2, B=ParkB2, C=ParkC2, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=ParkX2, S=Speed})
|
||||
end
|
||||
EmitMoveStartHead( 2)
|
||||
EmitMoveWaitHead( 2)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
@@ -708,6 +787,34 @@ function OnRapid()
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
-- aspetto esecuzione movimento testa 2
|
||||
EmitMoveWaitHead( 2)
|
||||
-- altrimenti testa 3
|
||||
else
|
||||
-- selezione testa (posso muovere X solo a Zmax)
|
||||
local MaxZ3 = EgtGetAxisMax( 'Z3')
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MaxZ3, B=ParkB3, C=0, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MaxZ3, S=Speed})
|
||||
end
|
||||
EmitMoveStartHead( 3)
|
||||
EmitMoveWaitHead( 3)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
-- se necessario allargo le cabine
|
||||
if RollerParkingNeeded( EMT.HEAD, PrevR1, PrevR2, EMT.R1, EMT.R2) or
|
||||
EMT.V1POS < EMT.V1NEXTPOS - 1 or EMT.V2POS > EMT.V2NEXTPOS + 1 then
|
||||
local dPosT = EMT.TPOS or EMT.L1op
|
||||
EmitParkRoller( dPosT, bSplitCut)
|
||||
end
|
||||
-- eseguo movimenti
|
||||
local Speed = EMT.S
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveStartHead( 3)
|
||||
-- eventuale preselezione successiva testa 2
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
-- aspetto esecuzione movimento testa 3
|
||||
EmitMoveWaitHead( 3)
|
||||
end
|
||||
-- se pezzo a destra, dichiaro cabina sinistra da parcheggiare
|
||||
if not EMT.Y1DELTA then
|
||||
@@ -755,7 +862,11 @@ function OnRapid()
|
||||
EmitParkedLines()
|
||||
-- se sfrido grande, emetto comando speciale
|
||||
if EMT.HOVM > 99 then
|
||||
MyOutput( ';M107')
|
||||
if EgtGetHeadId( 'H31') then
|
||||
MyOutput( 'M107')
|
||||
else
|
||||
MyOutput( ';M107')
|
||||
end
|
||||
end
|
||||
-- altrimenti lavorazione successiva
|
||||
else
|
||||
@@ -802,7 +913,11 @@ function OnRapid()
|
||||
if EMT.MCHUSERNOTES and EMT.MCHUSERNOTES:find( 'Cut', 1, true) then
|
||||
-- se sfrido grande, emetto comando speciale
|
||||
if EMT.LB - EMT.LT > 99 then
|
||||
MyOutput( ';M107')
|
||||
if EgtGetHeadId( 'H31') then
|
||||
MyOutput( 'M107')
|
||||
else
|
||||
MyOutput( ';M107')
|
||||
end
|
||||
end
|
||||
-- emetto M175 per accelerare il carico della barra successiva
|
||||
MyOutput( ';M175')
|
||||
@@ -819,11 +934,20 @@ function OnRapid()
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H13' then
|
||||
local CurrZ1 = EMT.L3pp or MyMaxZ1
|
||||
local CurrB1 = PrevR2
|
||||
local CurrC1 = PrevR1
|
||||
-- muovo asse X
|
||||
local bXSpec = EgtIf( BD.RIGHT_LOAD, ( EMT.L2 > -DeltaTabY), ( EMT.L2 < -DeltaTabY))
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=CurrZ1, B=CurrB1, C=CurrC1, S=Speed})
|
||||
end
|
||||
-- in caso di rotazione della lama lontano dalla posizione di home degli assi rotanti
|
||||
if ( EMT.HEAD == 'H12' or EMT.HEAD == 'H16') and ( abs( PrevR1 - EMT.R1) > 1 or abs( PrevR2 - EMT.R2) > 1) and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then
|
||||
-- muovo asse X
|
||||
local bXSpec = ( EMT.L2 < -DeltaTabY)
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), S=Speed})
|
||||
-- se non bisogna scrivere tutti gli assi, comunque ribadisco X in caso di lama. Altrimenti ho già scritto prima
|
||||
if not WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), S=Speed})
|
||||
end
|
||||
EmitMoveDataHead( 1, { B=0, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
||||
@@ -836,6 +960,10 @@ function OnRapid()
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 1, { X=ParkCSawX1, Z=ParkCSawZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
end
|
||||
-- Porto la Z alla giusta quota
|
||||
if EMT.L3 > HomeZ1 + 1 and abs( EMT.R2) > 89.9 then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
||||
@@ -852,11 +980,17 @@ function OnRapid()
|
||||
local dB2 = EMT.R2
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
local dSafeZ2 = EgtGetAxisHomePos( 'Z2')
|
||||
EmitMoveDataHead( 2, { X=SafeX2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 2, { X=SafeX2, Z=MinZ2, B=ParkB2, C=ParkC2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=SafeX2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
end
|
||||
|
||||
EmitMoveDataHead( 2, { Z=-dSafeZ2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
EmitMoveDataHead( 2, { B=dB2, C=dC2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
else
|
||||
local dX2 = Delta2TabY + EMT.DOU_TLEN - ( -DeltaTabY - EMT.L2 + EMT.TLEN + EMT.HB)
|
||||
local dX2 = Delta2TabY + EMT.DOU_TLEN - ( -DeltaTabY - EMT.L2 + EMT.TLEN + EgtIf( BD.RIGHT_LOAD, -EMT.HB, EMT.HB))
|
||||
local dZ2 = EgtClamp( -Head2Z + MillOffs + Mill2Offs + EMT.L3, MinZ2, MaxZ2)
|
||||
EmitMoveDataHead( 2, { X=dX2, Z=-dZ2, B=dB2, C=dC2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
end
|
||||
@@ -871,7 +1005,12 @@ function OnRapid()
|
||||
local dB2 = EMT.R2
|
||||
if EMT.ZMAX then
|
||||
local dSafeZ2 = EgtGetAxisHomePos( 'Z2')
|
||||
EmitMoveDataHead( 2, { Z=-dSafeZ2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 2, { X=SafeX2, Z=-dSafeZ2, B=ParkB2, C=ParkC2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
else
|
||||
EmitMoveDataHead( 2, { Z=-dSafeZ2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
end
|
||||
EmitMoveDataHead( 2, { X=dX2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
end
|
||||
EmitMoveDataHead( 2, { X=dX2, Z=-dZ2, B=dB2, C=dC2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
@@ -885,10 +1024,18 @@ function OnRapid()
|
||||
-- aspetto esecuzione movimento testa 1
|
||||
EmitMoveWaitHead( 1)
|
||||
-- altrimenti testa 2
|
||||
else
|
||||
elseif nHSet == 2 then
|
||||
local MyMinZ2 = EgtGetAxisMin( 'Z2')
|
||||
local CurrZ2 = EMT.L3pp or MyMinZ2
|
||||
local CurrB2 = PrevR2
|
||||
local CurrC2 = PrevR1
|
||||
local dSafeZ2 = EgtGetAxisHomePos( 'Z2')
|
||||
local Speed = EMT.S
|
||||
if EMT.ZMAX then
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 2, { X=SafeX2, Z=CurrZ2, B=CurrB2, C=CurrC2, S=Speed})
|
||||
end
|
||||
EmitMoveDataHead( 2, { Z=-dSafeZ2, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, S=Speed})
|
||||
end
|
||||
@@ -898,6 +1045,33 @@ function OnRapid()
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
-- aspetto esecuzione movimento testa 2
|
||||
EmitMoveWaitHead( 2)
|
||||
-- altrimenti testa 3
|
||||
else
|
||||
-- selezione testa (posso muovere X solo a Zmax)
|
||||
local MyMaxZ3 = EgtGetAxisMax( 'Z3')
|
||||
local dSafeZ3 = EgtGetAxisHomePos( 'Z3')
|
||||
local HomeC3 = EgtGetAxisHomePos( 'C3')
|
||||
local HomeB3 = EgtGetAxisHomePos( 'B3')
|
||||
local Speed = EMT.S
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
local CurrB3 = PrevR2
|
||||
local CurrC3 = PrevR1
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MyMaxZ3, B=CurrB3, C=CurrC3, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MyMaxZ3, S=Speed})
|
||||
end
|
||||
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
end
|
||||
EmitMoveStartHead( 3)
|
||||
-- eventuale preselezione successiva testa 2
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
-- aspetto esecuzione movimento testa 3
|
||||
EmitMoveWaitHead( 3)
|
||||
end
|
||||
-- dati aggancio a trave
|
||||
local BhData = { T=EMT.L1}
|
||||
@@ -953,7 +1127,7 @@ function OnRapid()
|
||||
if EMT.HEAD == 'H12' or EMT.HEAD == 'H16' then Speed = 1.65 * EMT.S end
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
local dX2 = Delta2TabY + EMT.DOU_TLEN - ( -DeltaTabY - EMT.L2 + EMT.TLEN + EMT.HB)
|
||||
local dX2 = Delta2TabY + EMT.DOU_TLEN - ( -DeltaTabY - EMT.L2 + EMT.TLEN + EgtIf( BD.RIGHT_LOAD, -EMT.HB, EMT.HB))
|
||||
local dZ2 = -Head2Z + MillOffs + Mill2Offs + EMT.L3
|
||||
local dC2 = EMT.R1
|
||||
local dB2 = EMT.R2
|
||||
@@ -994,10 +1168,9 @@ function OnRapid()
|
||||
EMT.L1p = nil
|
||||
EMT.L2p = nil
|
||||
EMT.L3p = nil
|
||||
MyOutput( 'M105 P1='..GetFaceCode()..' P2='..EgtIf( EMT.HEAD ~= 'H21', '1', '2')..' P3='..EgtIf( EMT.DOU_TYPE, 2, 0))
|
||||
MyOutput( 'M105 P1=' .. GetFaceCode() .. ' P2='..GetHeadSetCode()..' P3='..EgtIf( EMT.DOU_TYPE, 2, 0))
|
||||
MyOutput( 'M98')
|
||||
sOut = 'M6 ' .. EgtIf( EMT.HEAD ~= 'H21', 'T101', 'T202') .. AdjustTcPos( true)
|
||||
MyOutput( sOut)
|
||||
MyOutput( 'M6 ' .. GetHeadToolCode() .. AdjustTcPos( true))
|
||||
MyOutput( 'G24' .. EMT.IPLGLSTR)
|
||||
-- forzo successiva emissione assi rotanti
|
||||
EMT.R1p = nil
|
||||
@@ -1020,7 +1193,10 @@ function OnRapid()
|
||||
EmtAdjustRotaryAxes()
|
||||
-- se Split lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
||||
local bSplitCut = ( EMT.MCHUSERNOTES:find( 'Split', 1, true) ~= nil)
|
||||
EmitZmax( true, true, EMT.R1p, EMT.R2p, bSplitCut)
|
||||
-- se lavorazione successiva sopra con testa diversa, porto in home la testa corrente
|
||||
local nNextTopHSet = GetNextTopHSet( EMT.MCHID)
|
||||
local bTopGoHome = ( nHSet ~= 2 and nNextTopHSet ~= 0 and nHSet ~= nNextTopHSet)
|
||||
EmitZmax( true, true, EMT.R1p, EMT.R2p, bSplitCut, bTopGoHome)
|
||||
-- aggiorno quota finale trave dopo Zmax
|
||||
EMT.L1o = EMT.TPOS
|
||||
EMT.ZMAX = true
|
||||
@@ -1029,7 +1205,7 @@ function OnRapid()
|
||||
-- non previsto
|
||||
-- altrimenti errore
|
||||
else
|
||||
error( "Unknown Rapid flag")
|
||||
EmtSetLastError( 1212, "Unknown Rapid flag")
|
||||
end
|
||||
-- aggiorno valori come precedenti
|
||||
EMT.TPOS = EMT.L1o
|
||||
@@ -1058,18 +1234,9 @@ function OnLinear()
|
||||
EMT.L1p = nil
|
||||
EMT.L2p = nil
|
||||
EMT.L3p = nil
|
||||
MyOutput( 'M105 P1=' .. GetFaceCode() .. ' P2='..EgtIf( EMT.HEAD ~= 'H21', '1', '2')..' P3='..EgtIf( EMT.DOU_TYPE, 2, 0))
|
||||
MyOutput( 'M105 P1=' .. GetFaceCode() .. ' P2='..GetHeadSetCode()..' P3='..EgtIf( EMT.DOU_TYPE, 2, 0))
|
||||
MyOutput( 'M98')
|
||||
local sPos = EMT.TCPOS:gsub( 'T', '')
|
||||
if #sPos == 1 then
|
||||
sPos = '00' .. sPos
|
||||
elseif #sPos == 2 then
|
||||
sPos = '0' .. sPos
|
||||
elseif sPos == '101' and abs( EMT.R3 - 90) < 0.1 then
|
||||
sPos = '104'
|
||||
end
|
||||
local sOut = 'M6 ' .. EgtIf( EMT.HEAD ~= 'H21', 'T101', 'T202') .. sPos
|
||||
MyOutput( sOut)
|
||||
MyOutput( 'M6 ' .. GetHeadToolCode() .. AdjustTcPos( true))
|
||||
MyOutput( 'G24' .. EMT.IPLGLSTR)
|
||||
-- emissione movimento
|
||||
EMT.R1p = nil
|
||||
@@ -1192,17 +1359,15 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function CalcForzaPinze( dH, dS, dL, dT)
|
||||
local MinForza = 400 -- [Kgf]
|
||||
local MaxForza = 1000 -- [Kgf]
|
||||
local MassaRef = 1500 -- [Kg]
|
||||
local dMinJoin = BD.GetMinJoin( dS, dH, dT)
|
||||
if dMinJoin < 0.9 * BD.MIN_JOIN_L then
|
||||
return MinForza
|
||||
return MinForzaPinze
|
||||
else
|
||||
local KgMtCubo= 550 -- densità legno [Kg / metro cubo]
|
||||
local Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg]
|
||||
local Forza = Massa / MassaRef * MaxForza
|
||||
return EgtClamp( Forza, MinForza, MaxForza)
|
||||
local Forza = Massa / MassaRef * MaxForzaPinze
|
||||
return EgtClamp( Forza, MinForzaPinze, MaxForzaPinze)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1779,29 +1944,42 @@ function MyAdjustLinearAxes()
|
||||
local MyL1o = EMT.L1
|
||||
local MyL2o = EMT.L2
|
||||
local MyL3o = EMT.L3
|
||||
local nHSet = GetHeadSet( EMT.HEAD)
|
||||
if EMT.REFLOC then
|
||||
local vtE
|
||||
if EMT.HEAD ~= 'H13' then
|
||||
local dAddLen = 0
|
||||
if EMT.HEAD == 'H12' then
|
||||
dAddLen = -SawOffsZ
|
||||
elseif EMT.HEAD == 'H16' then
|
||||
dAddLen = -Saw2OffsZ
|
||||
end
|
||||
if EMT.HEAD ~= 'H21' then
|
||||
-- se testa 1
|
||||
if nHSet == 1 then
|
||||
if EMT.HEAD == 'H13' then
|
||||
local Len = ( EMT.TDIST or ChSawLen) + MillOffs
|
||||
local LenRef = MillOffs
|
||||
vtE = Vector3d( EMT.ADIR) * Len - Z_AX() * LenRef
|
||||
else
|
||||
local dAddLen = 0
|
||||
if EMT.HEAD == 'H12' then
|
||||
dAddLen = -SawOffsZ
|
||||
elseif EMT.HEAD == 'H16' then
|
||||
dAddLen = -Saw2OffsZ
|
||||
end
|
||||
local Len = EMT.TLEN + dAddLen + MillOffs
|
||||
local LenRef = MillOffs
|
||||
vtE = Vector3d( EMT.TDIR) * Len - Z_AX() * LenRef
|
||||
else
|
||||
local Len = EMT.TLEN + dAddLen + Mill2Offs
|
||||
local LenRef = Mill2Offs
|
||||
vtE = Vector3d( EMT.TDIR) * Len + Z_AX() * LenRef
|
||||
end
|
||||
-- se testa 2
|
||||
elseif nHSet == 2 then
|
||||
local dAddLen = 0
|
||||
if EMT.HEAD == 'H22' then
|
||||
dAddLen = -Saw2OffsZ
|
||||
end
|
||||
local Len = EMT.TLEN + dAddLen + Mill2Offs
|
||||
local LenRef = Mill2Offs
|
||||
vtE = Vector3d( EMT.TDIR) * Len + Z_AX() * LenRef
|
||||
-- se testa 3
|
||||
else
|
||||
local Len = ( EMT.TDIST or ChSawLen) + MillOffs
|
||||
local LenRef = MillOffs
|
||||
vtE = Vector3d( EMT.ADIR) * Len - Z_AX() * LenRef
|
||||
local Len = EMT.TLEN + Mill3Offs
|
||||
local LenRef = Mill3Offs
|
||||
vtE = Vector3d( EMT.TDIR) * Len - Z_AX() * LenRef
|
||||
end
|
||||
|
||||
EMT.L1 = EMT.L1 - vtE:getX()
|
||||
EMT.L2 = EMT.L2 - vtE:getY()
|
||||
EMT.L3 = EMT.L3 - vtE:getZ()
|
||||
@@ -1868,6 +2046,20 @@ function AdjustTcPos( bLen3, sTcPos, dAxR3)
|
||||
EmtSetLastError( 1210, 'Chain saw orientation not allowed')
|
||||
end
|
||||
end
|
||||
if sPos == '201' then
|
||||
if not dAxR3 then dAxR3 = EMT.R3 end
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '201'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '202'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '203'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '204'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Saw orientation not allowed')
|
||||
end
|
||||
end
|
||||
|
||||
return sPos
|
||||
end
|
||||
@@ -1877,7 +2069,16 @@ function CalcInterpPlane()
|
||||
-- origine del piano
|
||||
local xS = EMT.START[1] + LoadT
|
||||
if EMT.X_OFF then xS = xS + EMT.X_OFF end
|
||||
local ptS = Point3d( xS, 0, 0) + EgtIf( EMT.HEAD ~= 'H21', Vector3d( 0, DeltaTabY, DeltaTabZ), Vector3d( 0, Delta2TabY, Delta2TabZ))
|
||||
local ptS = Point3d( xS, 0, 0)
|
||||
local nHSet = GetHeadSet( EMT.HEAD)
|
||||
if nHSet == 1 then
|
||||
ptS = ptS + Vector3d( 0, DeltaTabY, DeltaTabZ)
|
||||
elseif nHSet == 2 then
|
||||
ptS = ptS + Vector3d( 0, Delta2TabY, Delta2TabZ)
|
||||
else
|
||||
ptS = ptS + Vector3d( 0, Delta3TabY, Delta3TabZ)
|
||||
end
|
||||
|
||||
-- calcolo per piano generico
|
||||
local vtE
|
||||
if EMT.HEAD ~= 'H13' then
|
||||
@@ -1920,42 +2121,74 @@ function GetFaceCode()
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut)
|
||||
function GetHeadSetCode()
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
if nSetHead == 1 then
|
||||
return '1'
|
||||
elseif nSetHead == 2 then
|
||||
return '2'
|
||||
elseif nSetHead == 3 then
|
||||
return '3'
|
||||
else
|
||||
EmtSetLastError( 1211, 'Error Unknown Head Set')
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetHeadToolCode()
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
if nSetHead == 1 then
|
||||
return 'T101'
|
||||
elseif nSetHead == 2 then
|
||||
return 'T202'
|
||||
elseif nSetHead == 3 then
|
||||
return 'T303'
|
||||
else
|
||||
EmtSetLastError( 1211, 'Error Unknown Head Set')
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome)
|
||||
if bReset then
|
||||
EmitResetMachining()
|
||||
end
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- se testa 1
|
||||
if EMT.HEAD ~= 'H21' and EMT.HEAD ~= 'H22' then
|
||||
if nSetHead == 1 then
|
||||
-- posizioni sicure
|
||||
local dMaxZ1 = EgtGetAxisMax( 'Z1')
|
||||
local dSafeX1 = EgtGetAxisHomePos( 'X1')
|
||||
local dSafeZ1 = EgtGetAxisHomePos( 'Z1')
|
||||
local dSafeB1 = EgtGetAxisHomePos( 'B1')
|
||||
local dSafeC1 = EgtGetAxisHomePos( 'C1')
|
||||
local dHomeX1 = EgtGetAxisHomePos( 'X1')
|
||||
local dHomeZ1 = EgtGetAxisHomePos( 'Z1')
|
||||
local dHomeB1 = EgtGetAxisHomePos( 'B1')
|
||||
local dHomeC1 = EgtGetAxisHomePos( 'C1')
|
||||
-- se necessario allargo le cabine
|
||||
if RollerParkingNeeded( EMT.HEAD, PrevR1, PrevR2, dSafeC1, dSafeB1) then
|
||||
if RollerParkingNeeded( EMT.HEAD, PrevR1, PrevR2, dHomeC1, dHomeB1) then
|
||||
local dPosT = EgtIf( bEnd, EMT.L1o, EMT.TPOS or EMT.L1op)
|
||||
EmitParkRoller( dPosT, bSplitCut)
|
||||
end
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H13' then
|
||||
-- eseguo la salita a Z1max (oriento solo se assi rotanti non già a posto)
|
||||
if abs( dSafeC1 - PrevR1) > 0.1 or abs( dSafeB1 - PrevR2) > 0.1 then
|
||||
local dZref = dSafeZ1 + GetZExtra( EMT.HEAD, PrevR2)
|
||||
if abs( dHomeC1 - PrevR1) > 0.1 or abs( dHomeB1 - PrevR2) > 0.1 then
|
||||
local dZref = dHomeZ1 + GetZExtra( EMT.HEAD, PrevR2)
|
||||
dZref = min( dZref, dMaxZ1)
|
||||
local MovH = { Z = EgtIf( dZref > EMT.L3o, dZref, EMT.L3o)}
|
||||
MovH.X = -EMT.L2o ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
if ( EMT.HEAD == 'H12' or EMT.HEAD == 'H16') and ( abs( dSafeC1 - PrevR1) > 30.1 or abs( dSafeB1 - PrevR2) > 30.1) then
|
||||
if ( EMT.HEAD == 'H12' or EMT.HEAD == 'H16') and ( abs( dHomeC1 - PrevR1) > 30.1 or abs( dHomeB1 - PrevR2) > 30.1) then
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1, B=0, Fmt=1})
|
||||
end
|
||||
if EMT.L2o > DeltaTabY then
|
||||
if EgtIf( BD.RIGHT_LOAD, ( EMT.L2 > -DeltaTabY), ( EMT.L2 < -DeltaTabY)) then
|
||||
EmitMoveDataHead( 1, { X=-DeltaTabY, Fmt=1})
|
||||
end
|
||||
EmitMoveDataHead( 1, { C=dSafeC1, Fmt=1})
|
||||
EmitMoveDataHead( 1, { B=dSafeB1, Fmt=1})
|
||||
EmitMoveDataHead( 1, { C=dHomeC1, Fmt=1})
|
||||
EmitMoveDataHead( 1, { B=dHomeB1, Fmt=1})
|
||||
end
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1, Fmt=1})
|
||||
if bTopGoHome then
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, Fmt=1})
|
||||
end
|
||||
EmitMoveStartHead( 1)
|
||||
-- se lavorazione in doppio
|
||||
if EMT.DOU_TYPE == 2 or EMT.DOU_TYPE == 3 then
|
||||
@@ -1965,30 +2198,48 @@ function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut)
|
||||
EmitMoveWaitHead( 1)
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dSafeB1, Fmt=1})
|
||||
EmitMoveDataHead( 1, { X=-dSafeX1, C=dSafeC1, Fmt=1})
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1, Fmt=1})
|
||||
-- salzo in Z sicurezza raddrizzando la B
|
||||
EmitMoveDataHead( 1, { Z=ParkCSawZ1, B=dHomeB1, Fmt=1})
|
||||
EmitMoveDataHead( 1, { X=-dHomeX1, C=dHomeC1, Fmt=1})
|
||||
if bTopGoHome then
|
||||
-- !!! da verificare bene (come PF) !!!
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, TPos=50, Fmt=1})
|
||||
end
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
end
|
||||
-- altrimenti testa 2
|
||||
else
|
||||
-- se altrimenti testa 2
|
||||
elseif nSetHead == 2 then
|
||||
|
||||
-- posizioni sicure
|
||||
local dSafeX2 = EgtGetAxisHomePos( 'X2')
|
||||
local dSafeZ2 = EgtGetAxisHomePos( 'Z2')
|
||||
local dSafeB2 = EgtGetAxisHomePos( 'B2')
|
||||
local dSafeC2 = EgtGetAxisHomePos( 'C2')
|
||||
local dHomeX2 = EgtGetAxisHomePos( 'X2')
|
||||
local dHomeZ2 = EgtGetAxisHomePos( 'Z2')
|
||||
local dHomeB2 = EgtGetAxisHomePos( 'B2')
|
||||
local dHomeC2 = EgtGetAxisHomePos( 'C2')
|
||||
-- se necessario allargo le cabine
|
||||
if RollerParkingNeeded( EMT.HEAD, PrevR1, PrevR2, dSafeC2, dSafeB2) then
|
||||
if RollerParkingNeeded( EMT.HEAD, PrevR1, PrevR2, dHomeC2, dHomeB2) then
|
||||
local dPosT = EgtIf( bEnd, EMT.L1o, EMT.TPOS or EMT.L1op)
|
||||
EmitParkRoller( dPosT, bSplitCut)
|
||||
end
|
||||
-- eseguo la discesa a Z2max
|
||||
EmitMoveDataHead( 2, { Z=-dSafeZ2, Fmt=1})
|
||||
EmitMoveDataHead( 2, { B=dSafeB2, C=dSafeC2, Fmt=1})
|
||||
EmitMoveDataHead( 2, { X=dSafeX2, Fmt=1})
|
||||
EmitMoveDataHead( 2, { Z=-dHomeZ2, Fmt=1})
|
||||
EmitMoveDataHead( 2, { B=dHomeB2, C=dHomeC2, Fmt=1})
|
||||
EmitMoveDataHead( 2, { X=dHomeX2, Fmt=1})
|
||||
EmitMoveStartHead( 2)
|
||||
EmitMoveWaitHead( 2)
|
||||
-- altrimenti testa 3
|
||||
else
|
||||
-- posizioni sicure
|
||||
local dMaxZ3 = EgtGetAxisMax( 'Z3')
|
||||
local dHomeX3 = EgtGetAxisHomePos( 'X3')
|
||||
local dHomeB3 = EgtGetAxisHomePos( 'B3')
|
||||
-- eseguo la salita a Z3max
|
||||
EmitMoveDataHead( 3, { Z=dMaxZ3, Fmt=1})
|
||||
if bTopGoHome then
|
||||
EmitMoveDataHead( 3, { X=-dHomeX3, B=dHomeB3, Fmt=1})
|
||||
end
|
||||
EmitMoveStartHead( 3)
|
||||
EmitMoveWaitHead( 3)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2016,6 +2267,10 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function EmitResetMachining()
|
||||
MyOutput( 'G27')
|
||||
if EMT.PREFALLCUT then
|
||||
MyOutput( 'M29')
|
||||
EMT.PREFALLCUT = nil
|
||||
end
|
||||
local sP12 = ''
|
||||
if EMT.TOOL ~= GetNextTool( EMT.MCHID) then sP12 = EgtIf( EMT.HEAD ~= 'H21', ' P1=0'..EgtIf( EMT.DOU_TYPE, ' P2=0', ''), ' P2=0') end
|
||||
local sP4 = EgtIf( EMT.MCHUSERNOTES:find( 'Split', 1, true), ' P4=1', '')
|
||||
@@ -2132,7 +2387,7 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function PreselectNextDiffHead( nMchId, sHead)
|
||||
-- se in uso testa 1, verifico di non scendere troppo in Z per evitare collisioni
|
||||
-- se in uso testa 1, verifico di non scendere troppo in Z per evitare collisioni (per testa 3 non serve il controllo)
|
||||
local nHSet = GetHeadSet( sHead)
|
||||
if nHSet == 1 then
|
||||
if EMT.MAXMIN[3] < MinZ1ToChangeH2 then return end
|
||||
@@ -2150,14 +2405,20 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
if EgtTdbSetCurrTool( sNextTool) then
|
||||
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||
local nNextHSet = GetHeadSet( sNextHead)
|
||||
if nNextHSet ~= nHSet then
|
||||
if nNextHSet ~= nHSet and nNextHSet ~= 3 and ( nHSet ~= 3 or nNextHSet ~= 1) then
|
||||
local sNextTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
|
||||
local dNextTotLen = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||
if nNextHSet == 1 then
|
||||
-- Recupero quota X1 (nostro L2)
|
||||
local dNextX = GetStartMachiningXaxis( nNextMchId)
|
||||
-- Emetto preselezione
|
||||
if sNextHead == 'H11' then
|
||||
EmitMoveDataHead( 1, { X=dNextX, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos), Fmt=2})
|
||||
if dNextTotLen < LongTool then
|
||||
EmitMoveDataHead( 1, { X=dNextX, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos), Fmt=2})
|
||||
else
|
||||
local nNextTc = GetTcForTopHeadTool( sNextTcPos)
|
||||
EmitMoveDataHead( 1, { X=dNextX, B=ParkLongB1, C=EgtIf( nTc ~= 2, ParkLongTc1C1, ParkLongTc2C1), TPos=AdjustTcPos( false, sNextTcPos), Fmt=2})
|
||||
end
|
||||
EmitMoveStartHead( 1)
|
||||
elseif sNextHead == 'H12' or sNextHead == 'H16' then
|
||||
EmitMoveDataHead( 1, { X=dNextX, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos), Fmt=2})
|
||||
@@ -2166,12 +2427,18 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
local MyParkCSawC1 = GetChainSawCHomeFromVirtualAxis( dPosA)
|
||||
local bXSpec = ( dNextX < -DeltaTabY)
|
||||
local bXSpec = EgtIf( BD.RIGHT_LOAD, ( dNextX > -DeltaTabY), ( dNextX < -DeltaTabY))
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, dNextX), B=ParkCSawB1, C=MyParkCSawC1, TPos=AdjustTcPos( false, sNextTcPos, dPosA), Fmt=2})
|
||||
EmitMoveStartHead( 1)
|
||||
end
|
||||
else
|
||||
EmitMoveDataHead( 2, { B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos), Fmt=2})
|
||||
-- non si può preselezionare lama su aggregato da sotto
|
||||
-- Se è già montata, non preseleziono altro utensile fino all'effettiva lavorazione altro utensile
|
||||
if sNextHead == 'H22' or EMT.PREVHEAD_H2 == 'H22' then
|
||||
return
|
||||
else
|
||||
EmitMoveDataHead( 2, { B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos), Fmt=2})
|
||||
end
|
||||
EmitMoveStartHead( 2)
|
||||
end
|
||||
end
|
||||
@@ -2182,6 +2449,33 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
EgtTdbSetCurrTool( EMT.TOOL)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetNextTopHSet( nMchId)
|
||||
local nNextTopHSet = 0
|
||||
-- recupero lavorazione successiva
|
||||
local nNextMchId = EgtGetNextActiveOperation( nMchId)
|
||||
while nNextMchId do
|
||||
if EgtGetOperationType( nNextMchId) ~= MCH_OY.DISP then
|
||||
if EgtSetCurrMachining( nNextMchId) then
|
||||
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||
if EgtTdbSetCurrTool( sNextTool) then
|
||||
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||
local nNextHSet = GetHeadSet( sNextHead)
|
||||
if nNextHSet ~= 2 then
|
||||
nNextTopHSet = nNextHSet
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
nNextMchId = EgtGetNextActiveOperation( nNextMchId)
|
||||
end
|
||||
-- ripristino stato corrente
|
||||
EgtSetCurrMachining( EMT.MCHID)
|
||||
EgtTdbSetCurrTool( EMT.TOOL)
|
||||
return nNextTopHSet
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetFmaxClamp()
|
||||
return EmtLenToString( EMT.FMAXPINZE / 1000, 0)
|
||||
@@ -2221,7 +2515,13 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function EmitMoveDataHead( nHead, MoData)
|
||||
local sOut = EgtIf( nHead == 1, 'M101', 'M102') .. ' P1=1'
|
||||
local sOut = 'M101'
|
||||
if nHead == 2 then
|
||||
sOut = 'M102'
|
||||
elseif nHead == 3 then
|
||||
sOut = 'M103'
|
||||
end
|
||||
sOut = sOut .. ' P1=1'
|
||||
if MoData.X then sOut = sOut .. ' P2=' .. EmtLenToString( MoData.X, 3) end
|
||||
if MoData.Z then sOut = sOut .. ' P3=' .. EmtLenToString( MoData.Z, 3) end
|
||||
if MoData.B then sOut = sOut .. ' P4=' .. EmtLenToString( MoData.B, 3) end
|
||||
@@ -2239,13 +2539,25 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function EmitMoveStartHead( nHead)
|
||||
local sOut = EgtIf( nHead == 1, 'M101', 'M102') .. ' P1=2'
|
||||
local sOut = 'M101'
|
||||
if nHead == 2 then
|
||||
sOut = 'M102'
|
||||
elseif nHead == 3 then
|
||||
sOut = 'M103'
|
||||
end
|
||||
sOut = sOut .. ' P1=2'
|
||||
MyOutput( sOut)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function EmitMoveWaitHead( nHead)
|
||||
local sOut = EgtIf( nHead == 1, 'M101', 'M102') .. ' P1=3'
|
||||
local sOut = 'M101'
|
||||
if nHead == 2 then
|
||||
sOut = 'M102'
|
||||
elseif nHead == 3 then
|
||||
sOut = 'M103'
|
||||
end
|
||||
sOut = sOut .. ' P1=3'
|
||||
MyOutput( sOut)
|
||||
end
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
-- Processore macchina Essetre-PF1250 by EgalTech s.r.l. 2023/11/21
|
||||
-- Processore standard macchine tipo PF1250 by EgalWare s.r.l. 2023/12/14
|
||||
|
||||
-- Funzioni generiche indipendenti dal controllo
|
||||
|
||||
-- Intestazioni
|
||||
@@ -12,7 +13,7 @@ local sBaseDir = EgtGetSourceDir()
|
||||
if NumericalControl == 'NUM' then
|
||||
error( 'Numerical Control error : NUM not yet managed')
|
||||
elseif NumericalControl == 'TPA' then
|
||||
dofile( sBaseDir .. 'Essetre-PF1250.TPA.mlpe')
|
||||
dofile( sBaseDir .. 'Common-PF1250.TPA.mlpe')
|
||||
else
|
||||
error( 'Numerical Control error : unkwnown type')
|
||||
end
|
||||
@@ -20,13 +21,13 @@ end
|
||||
---------------------------------------------------------------------
|
||||
-- *** SIMULATION ***
|
||||
---------------------------------------------------------------------
|
||||
local COLL_SAFE_DIST = 4
|
||||
local COLL_SAFE_DIST = 3
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulStart()
|
||||
-- controllo versione programma
|
||||
if not EMT.VER or EMT.VER < '2.5d1' then
|
||||
EmtSetLastError( 1200, 'A newer version of the program is required (minimum EgtMachKernel 2.5d1)')
|
||||
if not EMT.VER or EMT.VER < MIN_MACH_VER then
|
||||
EmtSetLastError( 1200, 'A newer version of the program is required (minimum EgtMachKernel '..MIN_MACH_VER..')')
|
||||
end
|
||||
-- Carico gli utensili sulle barre portautensili
|
||||
local vTcPos = EgtGetAllTcPosNames()
|
||||
@@ -63,6 +64,11 @@ function OnSimulStart()
|
||||
AddToCollisionCheck( 'X2', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'C2', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'B2', 'COLLISION', EMT.COLLOBJ)
|
||||
if EgtGetHeadId('H31') then
|
||||
AddToCollisionCheck( 'Z3', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'C3', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'B3', 'COLLISION', EMT.COLLOBJ)
|
||||
end
|
||||
DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4)
|
||||
-- Preparo lista solidi macchina con cui possono collidere gli oggetti sopra riportati (in aggiunta a VMill)
|
||||
EMT.MCODET = {}
|
||||
@@ -72,11 +78,15 @@ function OnSimulStart()
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'COL1'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'COL2'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW2'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'SPTOOLS'},
|
||||
{ Grp = 'Z2', Sub = 'COLLISION', Name = 'COL1'},
|
||||
{ Grp = 'Z2', Sub = 'COLLISION', Name = 'CHAIN'},
|
||||
{ Grp = 'Z2', Sub = 'COLLISION', Name = 'COL2'}}
|
||||
|
||||
-- inserisco gruppi opzionali
|
||||
if SecondChain then table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW2'}) end
|
||||
if TcSpecialTools then table.insert( McdData, {Grp = 'Base', Sub = 'COLLISION', Name = 'SPTOOLS'}) end
|
||||
if TcAggreBladeUnder then table.insert( McdData, {Grp = 'Base', Sub = 'COLLISION', Name = 'AGGREBLADEUNDER'}) end
|
||||
|
||||
EgtOutLog( 'MCODET Objects :', 4)
|
||||
local nMcdNullCnt = 0
|
||||
for i = 1, #McdData do
|
||||
@@ -390,10 +400,19 @@ function OnSimulToolSelect( dPosA)
|
||||
EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
||||
EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
|
||||
-- recupero il gruppo
|
||||
local nSetHead = GetHeadSet( EMT.NEXTHEAD)
|
||||
-- se fresa o lama su testa 1, reset assi rotanti
|
||||
if EMT.HEAD == 'H11' or EMT.HEAD == 'H14' or EMT.HEAD == 'H12' or EMT.HEAD == 'H13' or EMT.HEAD == 'H16' then
|
||||
if nSetHead == 1 then
|
||||
-- se ho la testa 3, la mando a parcheggio
|
||||
if EgtGetHeadId( 'H31') then
|
||||
EgtSetAxisPos( 'X3', ParkX3)
|
||||
end
|
||||
EgtResetAxisPos( 'C1')
|
||||
EgtResetAxisPos( 'B1')
|
||||
-- se testa 3 parcheggio la 1
|
||||
elseif nSetHead == 3 then
|
||||
EgtSetAxisPos( 'X1', ParkX1)
|
||||
end
|
||||
-- se sega a catena, imposto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H13' then
|
||||
@@ -401,7 +420,7 @@ function OnSimulToolSelect( dPosA)
|
||||
dPosA = dPosA or GetNextChainSawingVirtualAxis( EMT.MCHID)
|
||||
-- imposto il valore di A
|
||||
EgtSetAxisPos( 'A1', dPosA)
|
||||
-- imposto home dell'asse C1 (A=0 -> T101, A=90 -> T104)
|
||||
-- imposto home dell'asse C1 (A1=0 -> T101, A1=90 -> T104)
|
||||
local MyParkCSawC1 = GetChainSawCHomeFromVirtualAxis( dPosA)
|
||||
EmtModifyAxisHome( 'C1', MyParkCSawC1)
|
||||
EgtSetAxisPos( 'C1', MyParkCSawC1)
|
||||
@@ -414,7 +433,7 @@ function OnSimulToolSelect( dPosA)
|
||||
dPosA = dPosA or GetNextSawingVirtualAxis( EMT.MCHID)
|
||||
-- imposto il valore di A
|
||||
EgtSetAxisPos( 'A2', dPosA)
|
||||
-- imposto home dell'asse C1 (A=0 -> T101, A=90 -> T104)
|
||||
-- imposto home dell'asse C1 (A2=0 -> T101, A2=90 -> T104)
|
||||
local MyParkSawC2 = GetSawCHomeFromVirtualAxis( dPosA)
|
||||
EmtModifyAxisHome( 'C2', MyParkSawC2)
|
||||
EgtSetAxisPos( 'C2', MyParkSawC2)
|
||||
@@ -437,7 +456,7 @@ function OnSimulToolSelect( dPosA)
|
||||
-- se attivo Collision Check
|
||||
EMT.SAFEDIST = COLL_SAFE_DIST
|
||||
if EMT.COLLOBJ then
|
||||
local nInd = EgtIf( EMT.HEAD ~= 'H21', 1001, 1011)
|
||||
local nInd = EgtIf( nSetHead ~= 2, 1001, 1011)
|
||||
AddToolToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd, true)
|
||||
AddToolHolderToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd + 1)
|
||||
for i, Coll in ipairs( EMT.COLLOBJ or {}) do
|
||||
@@ -449,72 +468,98 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulToolDeselect( dPrevA)
|
||||
-- se prossimo utensile non cambia e non è sega a catena, esco
|
||||
if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and EMT.NEXTHEAD ~= 'H13' then return end
|
||||
if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and EMT.NEXTHEAD ~= 'H13' and EMT.NEXTHEAD ~= 'H22' then return end
|
||||
-- deposito utensile
|
||||
EgtOutText( 'Tool change in progress...')
|
||||
-- recupero il gruppo
|
||||
local nSetHead = GetHeadSet( EMT.NEXTHEAD)
|
||||
-- per testa gruppo 2
|
||||
if nSetHead == 2 then
|
||||
-- deposito lama su aggregato testa sotto
|
||||
if EMT.PREVHEAD_H2 == 'H22' then
|
||||
-- simulo movimento
|
||||
local ParkC2 = EgtGetAxisHomePos( 'C2')
|
||||
if dPrevA then
|
||||
ParkC2 = GetSawCHomeFromVirtualAxis( dPrevA)
|
||||
end
|
||||
SimulMoveAxis( 'X2', ParkSawX2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B2', ParkSawB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
-- breve pausa
|
||||
EgtPause( 100)
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H2, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetStatus( EgtGetHeadId( EMT.PREVHEAD_H2 or '') or GDB_ID.NULL, GDB_ST.OFF)
|
||||
return
|
||||
end
|
||||
-- Testa gruppo 1...
|
||||
-- deposito utensile fresa
|
||||
if EMT.PREVHEAD_H1 == 'H11' or EMT.PREVHEAD_H1 == 'H14' then
|
||||
-- simulo movimento
|
||||
local nPrevTc = GetTcForTopHeadTool( EMT.PREVTCPOS_H1)
|
||||
if EMT.PREVTTOTLEN_H1 < LongTool then
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = EgtIf( nPrevTc ~= 2, ParkX1, ParkTc2X1)
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
if nPrevTc ~= 2 then
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkLongTc1C1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = ParkX1
|
||||
-- se testa gruppo 1
|
||||
else
|
||||
-- deposito utensile fresa
|
||||
if EMT.PREVHEAD_H1 == 'H11' then
|
||||
-- simulo movimento
|
||||
local nPrevTc = GetTcForTopHeadTool( EMT.PREVTCPOS_H1)
|
||||
if EMT.PREVTTOTLEN_H1 < LongTool then
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = EgtIf( nPrevTc ~= 2, ParkX1, ParkTc2X1)
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkLongTc2C1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = ParkTc2X1
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
if nPrevTc ~= 2 then
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkLongTc1C1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = ParkX1
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkLongTc2C1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = ParkTc2X1
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
-- deposito utensile lama
|
||||
elseif EMT.PREVHEAD_H1 == 'H12' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile sega a catena
|
||||
elseif EMT.PREVHEAD_H1 == 'H13' then
|
||||
-- simulo movimento
|
||||
local ParkC1 = EgtGetAxisHomePos( 'C1')
|
||||
if dPrevA then
|
||||
ParkC1 = GetChainSawCHomeFromVirtualAxis( dPrevA)
|
||||
end
|
||||
SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile seconda lama
|
||||
elseif EMT.PREVHEAD_H1 == 'H16' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkTc2X1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- deposito utensile lama
|
||||
elseif EMT.PREVHEAD_H1 == 'H12' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile sega a catena
|
||||
elseif EMT.PREVHEAD_H1 == 'H13' then
|
||||
-- simulo movimento
|
||||
local ParkC1 = EgtGetAxisHomePos( 'C1')
|
||||
if dPrevA then
|
||||
ParkC1 = GetChainSawCHomeFromVirtualAxis( dPrevA)
|
||||
end
|
||||
SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile seconda lama
|
||||
elseif EMT.PREVHEAD_H1 == 'H16' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkTc2X1, MCH_SIM_STEP.RAPID)
|
||||
-- breve pausa
|
||||
EgtPause( 100)
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H1, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
end
|
||||
-- breve pausa
|
||||
EgtPause( 100)
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H1, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
-- se passo da testa 1 a 3 o viceversa
|
||||
if nNextSetHead == 3 then
|
||||
-- deposito eventuale sega a catena
|
||||
if EMT.PREVHEAD_H1 == 'H13' then
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H1, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
end
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
elseif nNextSetHead == 1 then
|
||||
SimulMoveAxis( 'X3', ParkX3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- movimento per prendere nuovo utensile
|
||||
-- prendo utensile fresa
|
||||
if EMT.NEXTHEAD == 'H11' or EMT.NEXTHEAD == 'H14' then
|
||||
if EMT.NEXTHEAD == 'H11' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = EgtIf( GetTcForTopHeadTool( EMT.NEXTTCPOS) ~= 2, ParkX1, ParkTc2X1)
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z1', 0, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile lama
|
||||
elseif EMT.NEXTHEAD == 'H12' then
|
||||
-- simulo movimento
|
||||
@@ -524,12 +569,25 @@ function OnSimulToolDeselect( dPrevA)
|
||||
elseif EMT.NEXTHEAD == 'H13' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', EgtGetAxisHomePos( 'C1'), MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID, 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile seconda lama
|
||||
elseif EMT.NEXTHEAD == 'H16' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkTc2X1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile su CU margherita testa sotto
|
||||
elseif EMT.NEXTHEAD == 'H21' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.RAPROT, 'C2', ParkC2, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile lama su aggregato
|
||||
elseif EMT.NEXTHEAD == 'H22' then
|
||||
-- aggiungo utensile per verifica collisione
|
||||
AddToolToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, 1011, false)
|
||||
AddToolHolderToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, 1011 + 1)
|
||||
-- simulo movimento
|
||||
SimulMoveAxis( 'X2', ParkSawX2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B2', ParkSawB2, MCH_SIM_STEP.COLLROT, 'C2', ParkSawC2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -546,6 +604,18 @@ function OnSimulMachiningStart()
|
||||
OnSimulToolSelect( dPosA)
|
||||
end
|
||||
end
|
||||
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare
|
||||
if EMT.HEAD == 'H22' and EMT.HEAD == EMT.PREVHEAD_H2 then
|
||||
local dPrevA = EgtGetAxisPos( 'A2')
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
local dPosA = tonumber( sVal:sub( 4)) or 0
|
||||
if abs( dPosA - dPrevA) > 1 then
|
||||
ExecParkRoller( nil, nil, nil, nil, false, bAgg)
|
||||
OnSimulToolDeselect( dPrevA)
|
||||
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON)
|
||||
OnSimulToolSelect( dPosA)
|
||||
end
|
||||
end
|
||||
-- salvo dati utensile
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- per gruppo testa 1
|
||||
@@ -560,6 +630,12 @@ function OnSimulMachiningStart()
|
||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
||||
EMT.PREVTTOTLEN_H2 = EMT.TTOTLEN
|
||||
-- per gruppo testa 3 (resetto dati testa 1)
|
||||
else
|
||||
EMT.PREVTOOL_H3 = nil
|
||||
EMT.PREVHEAD_H3 = nil
|
||||
EMT.PREVTCPOS_H3 = nil
|
||||
EMT.PREVTTOTLEN_H3 = nil
|
||||
end
|
||||
-- recupero alcuni dati della lavorazione
|
||||
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
|
||||
@@ -776,9 +852,9 @@ function OnSimulMoveStart()
|
||||
if EMT.HEAD ~= 'H13' then
|
||||
-- se movimento iniziale da Zmax con lama o fresa
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
local bXSpec = EgtIf( BD.RIGHT_LOAD, EMT.L2 < DeltaTabY, EMT.L2 > DeltaTabY)
|
||||
-- in caso di rotazione della lama lontano dalla posizione di home degli assi rotanti
|
||||
if ( EMT.HEAD == 'H12' or EMT.HEAD == 'H16') and ( abs( C1Pos - EMT.R1) > 1 or abs( B1Pos - EMT.R2) > 1) and ( abs( C1Home - EMT.R1) > 30.1 or abs( B1Home - EMT.R2) > 30.1) then
|
||||
local bXSpec = ( EMT.L2 > DeltaTabY)
|
||||
SimulMoveAxis( 'X1', EgtIf( bXSpec, DeltaTabY, EMT.L2), MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
@@ -786,6 +862,10 @@ function OnSimulMoveStart()
|
||||
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- caso standard
|
||||
else
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
SimulMoveAxis( 'X1', EgtIf( bXSpec, DeltaTabY, EMT.L2), MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
@@ -804,14 +884,20 @@ function OnSimulMoveStart()
|
||||
SimulMoveAxes( 'Z1', Z1Home, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
-- altrimenti testa 2
|
||||
else
|
||||
-- Porto la X alla giusta quota
|
||||
local X2Pos = EgtGetAxisPos( 'X2')
|
||||
local X2Home = EgtGetAxisHomePos( 'X2')
|
||||
if X2Pos > X2Home - 1 then
|
||||
-- se altrimenti testa 2
|
||||
elseif nSetHead == 2 then
|
||||
local Z2Home = EgtGetAxisHomePos( 'Z2')
|
||||
if EMT.ZMAX then
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
SimulMoveAxis( 'X2', SafeX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'Z2', Z2Home, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'X2', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti testa 3
|
||||
else
|
||||
; -- non devo fare alcunchè di speciale
|
||||
end
|
||||
end
|
||||
-- se lavorazione split, muovo per riaggancio del carro Y1
|
||||
@@ -836,7 +922,7 @@ function OnSimulMoveStart()
|
||||
else
|
||||
EMT.AuxAxes = 4 + 4
|
||||
EMT.A5n = 'X2'
|
||||
local X2 = Delta2TabY + EMT.DOU_TLEN - ( -DeltaTabY + EMT.L2 + EMT.TLEN + EMT.HB)
|
||||
local X2 = Delta2TabY + EMT.DOU_TLEN - ( -DeltaTabY + EMT.L2 + EMT.TLEN + EgtIf( BD.RIGHT_LOAD, -EMT.HB, EMT.HB))
|
||||
if EMT.MCHTYPE == MCH_MY.DRILLING and EMT.FLAG == 101 then
|
||||
EMT.DOU_DRILL_END = -( EMT.L2p - EMT.L2)
|
||||
X2 = X2 + 2 * EMT.DOU_DRILL_END
|
||||
@@ -892,17 +978,28 @@ function OnSimulMoveStart()
|
||||
end
|
||||
end
|
||||
-- se necessario ...
|
||||
if EMT.MCHFIRST then
|
||||
if EMT.MCHFIRST and EMT.EnabAxes ~= false then
|
||||
if nSetHead == 1 then
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID,
|
||||
'Z1', EMT.L3, MCH_SIM_STEP.RAPID,
|
||||
'C1', EMT.R1, MCH_SIM_STEP.RAPROT,
|
||||
'B1', EMT.R2, MCH_SIM_STEP.RAPROT)
|
||||
else
|
||||
'C1', EMT.R1, MCH_SIM_STEP.COLLROT,
|
||||
'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.DOU_TYPE and EMT.AuxAxes == 8 then
|
||||
SimulMoveAxes( 'X2', EMT.A5, MCH_SIM_STEP.RAPID,
|
||||
'Z2', EMT.A6, MCH_SIM_STEP.RAPID,
|
||||
'C2', EMT.A7, MCH_SIM_STEP.COLLROT,
|
||||
'B2', EMT.A8, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
elseif nSetHead == 2 then
|
||||
SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID,
|
||||
'Z2', EMT.L3, MCH_SIM_STEP.RAPID,
|
||||
'C2', EMT.R1, MCH_SIM_STEP.RAPROT,
|
||||
'B2', EMT.R2, MCH_SIM_STEP.RAPROT)
|
||||
'C2', EMT.R1, MCH_SIM_STEP.COLLROT,
|
||||
'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
else
|
||||
SimulMoveAxes( 'X3', EMT.L2, MCH_SIM_STEP.RAPID,
|
||||
'Z3', EMT.L3, MCH_SIM_STEP.RAPID,
|
||||
'C3', EMT.R1, MCH_SIM_STEP.COLLROT,
|
||||
'B3', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
if nRes ~= 0 then
|
||||
@@ -965,14 +1062,10 @@ function OnSimulCollision()
|
||||
-- se prima collisione della lavorazione, la segnalo
|
||||
if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then
|
||||
local Class = ''
|
||||
if EMT.SIMCOBIND == 1001 then
|
||||
if EMT.SIMCOBIND == 1001 or EMT.SIMCOBIND == 1011 then
|
||||
Class = 'T_'..EMT.HEAD
|
||||
elseif EMT.SIMCOBIND == 1011 then
|
||||
Class = 'T_H21'
|
||||
elseif EMT.SIMCOBIND == 1002 then
|
||||
elseif EMT.SIMCOBIND == 1002 or EMT.SIMCOBIND == 1012 then
|
||||
Class = 'TH_'..EMT.HEAD
|
||||
elseif EMT.SIMCOBIND == 1012 then
|
||||
Class = 'TH_H21'
|
||||
else
|
||||
Class = EMT.COLLOBJ[EMT.SIMCOBIND].Cl
|
||||
end
|
||||
@@ -1186,7 +1279,7 @@ function ExecMoveZmax( bMchSplit)
|
||||
if ( EMT.HEAD == 'H12' or EMT.HEAD == 'H16') and ( abs( HomeC - CurrC) > 30.1 or abs( HomeB - CurrB) > 30.1) then
|
||||
SimulMoveAxes( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID, 'B1', 0, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
if EMT.L2 > DeltaTabY then
|
||||
if ( not BD.RIGHT_LOAD and EMT.L2 > DeltaTabY) or ( BD.RIGHT_LOAD and EMT.L2 < DeltaTabY) then
|
||||
SimulMoveAxis( 'X1', DeltaTabY, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
@@ -1195,9 +1288,9 @@ function ExecMoveZmax( bMchSplit)
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
-- salzo in Z sicurezza raddrizzando la B
|
||||
SimulMoveAxes( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- se lavorazione in doppio
|
||||
if EMT.DOU_TYPE == 2 then
|
||||
@@ -1212,11 +1305,15 @@ function ExecMoveZmax( bMchSplit)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
EMT.DOU_TO_ZMAX = nil
|
||||
end
|
||||
-- altrimenti testa sotto
|
||||
else
|
||||
-- se altrimenti testa sotto
|
||||
elseif nSetHead == 2 then
|
||||
SimulMoveAxis( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
-- altrimenti testa 3
|
||||
else
|
||||
SimulMoveAxes( 'Z3', MaxZ3, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B3', ParkB3, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
EMT.ZMAX = true
|
||||
end
|
||||
@@ -1230,14 +1327,14 @@ function ExecUnloading()
|
||||
-- li sposto per lasciare spazio al nuovo pezzo
|
||||
local nId = EgtGetFirstInGroup( nVmGrpId)
|
||||
while nId do
|
||||
EgtMove( nId, Vector3d( 0, -( EMT.HB + 50.0), 0), GDB_RT.GLOB)
|
||||
EgtMove( nId, Vector3d( 0, EgtIf( BD.RIGHT_LOAD, ( EMT.HB + 50.0), -( EMT.HB + 50.0)), 0), GDB_RT.GLOB)
|
||||
nId = EgtGetNext( nId)
|
||||
end
|
||||
-- creo un nuovo layer e vi inserisco il nuovo pezzo
|
||||
local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( vMillId))
|
||||
EgtRelocate( vMillId, nLayId)
|
||||
local vtMove = Vector3d( 0, -1600, 0)
|
||||
if EMT.FALL then vtMove = Vector3d( 0, -2600, -1150) end
|
||||
local vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 1600, -1600), 0)
|
||||
if EMT.FALL then vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 3200, -2600), -1150) end
|
||||
EgtMove( nLayId, vtMove, GDB_RT.GLOB)
|
||||
EgtSetLevel( vMillId, GDB_LV.USER)
|
||||
-- aggiungo gli spigoli
|
||||
@@ -1457,7 +1554,7 @@ function VerifyY1Slide( sName1, dVal1, sName2, dVal2)
|
||||
if sName1 == 'T' and sName2 == 'Y1' and GetPY1Light() then
|
||||
local dY1DeltaP = EgtGetAxisPos( 'Y1') - EgtGetAxisPos( 'T')
|
||||
local dY1DeltaA = tonumber( dVal2) - tonumber( dVal1)
|
||||
EgtOutLog( string.format( 'Y1DeltaP=%.3f YDeltaA=%.3f', dY1DeltaP, dY1DeltaA), 5)
|
||||
EgtOutLog( string.format( 'Y1DeltaP=%.3f Y1DeltaA=%.3f', dY1DeltaP, dY1DeltaA), 5)
|
||||
if abs( dY1DeltaA - dY1DeltaP) > 0.5 then
|
||||
EMT.ERR = 2
|
||||
local sErr = 'Y1 slide : ' .. EmtLenToString( dY1DeltaP, 3) .. ' -> ' .. EmtLenToString( dY1DeltaA, 3)
|
||||
@@ -1640,6 +1737,7 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function LoadFirstTool( nHSet, sTcPosDef)
|
||||
if nHSet ~= 1 and nHSet ~= 2 then return end
|
||||
EgtUnloadTool( EgtIf( nHSet == 1, 'H11', 'H21'), 1)
|
||||
if GetHeadSetFromTcPos( sTcPosDef) ~= nHSet then return end
|
||||
local sTool, sHead, sTcPos = FindFirstToolOnHeadSet( nHSet)
|
||||
if not sTool then
|
||||
@@ -1647,29 +1745,7 @@ function LoadFirstTool( nHSet, sTcPosDef)
|
||||
if vTools and vTools[1] then
|
||||
sTool = vTools[1]
|
||||
sTcPos = sTcPosDef
|
||||
if nHSet == 1 then
|
||||
-- seconda lama
|
||||
if SecondSaw and sTcPos == 'T21' then
|
||||
sHead = 'H16'
|
||||
-- utensili speciali
|
||||
elseif TcSpecialTools and sTcPos == 'T121' then
|
||||
sHead = 'H14'
|
||||
-- motoseghe
|
||||
elseif sTcPos == 'T101' or sTcPos == 'T111' then
|
||||
sHead = 'H13'
|
||||
-- utensili standard o prima lama
|
||||
else
|
||||
sHead = EgtIf( sTcPos == 'T1', 'H12', 'H11')
|
||||
end
|
||||
else
|
||||
-- lama su aggregato da sotto
|
||||
if sTcPos == 'T201' then
|
||||
sHead = 'H22'
|
||||
-- utensili standard da sotto
|
||||
else
|
||||
sHead = 'H21'
|
||||
end
|
||||
end
|
||||
sHead = GetAdjHeadFromTcPos( nHSet, sTcPos)
|
||||
end
|
||||
end
|
||||
if sTool then
|
||||
@@ -2088,38 +2164,6 @@ function GetParkT()
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetHeadSet( sHead)
|
||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H14' or sHead == 'H16' then
|
||||
return 1
|
||||
elseif sHead == 'H21' or sHead == 'H22' then
|
||||
return 2
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetHeadSetFromTcPos( sTcPos)
|
||||
local TCPOS_1A = { 'T1', 'T3', 'T4', 'T5', 'T6', 'T7', 'T8', 'T9', 'T10', 'T11', 'T12', 'T13'}
|
||||
local TCPOS_1B = { 'T101', 'T121', 'T111'}
|
||||
local TCPOS_1C = { 'T21', 'T22', 'T23', 'T24', 'T25', 'T26', 'T27', 'T28', 'T29', 'T30'}
|
||||
local TCPOS_2 = { 'T220', 'T221', 'T222', 'T223', 'T224', 'T225', 'T226', 'T227', 'T228', 'T229', 'T230'}
|
||||
for _, sVal in ipairs( TCPOS_1A) do
|
||||
if sVal == sTcPos then return 1, 1 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_1B) do
|
||||
if sVal == sTcPos then return 1, 2 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_1C) do
|
||||
if sVal == sTcPos then return 1, 3 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_2) do
|
||||
if sVal == sTcPos then return 2, 1 end
|
||||
end
|
||||
return 0, 0
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function FindFirstToolOnHeadSet( nHSet)
|
||||
-- salvo stato iniziale
|
||||
@@ -2223,7 +2267,7 @@ function GetNextSawingVirtualAxis( MchId)
|
||||
NextMchId = EgtGetNextActiveOperation( NextMchId)
|
||||
end
|
||||
-- verifico sia un taglio o fresatura con lama su aggregato da sotto
|
||||
if EgtGetOperationType( NextMchId) ~= MCH_OY.MILLING and EgtGetOperationType( NextMchId) ~= MCH_OY.SAWING and EMT.HEAD ~= 'H22' then
|
||||
if ( EgtGetOperationType( NextMchId) ~= MCH_OY.MILLING and EgtGetOperationType( NextMchId) ~= MCH_OY.SAWING) or EMT.HEAD ~= 'H22' then
|
||||
return nil
|
||||
end
|
||||
-- la imposto come lavorazione corrente
|
||||
@@ -2250,7 +2294,7 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2)
|
||||
if sHead == 'H11' or sHead == 'H14' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then
|
||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then
|
||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1))
|
||||
elseif sHead == 'H21' or sHead == 'H22' then
|
||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1))
|
||||
@@ -6,7 +6,7 @@ EgtEnableDebug( false)
|
||||
|
||||
-- Carico i dati globali
|
||||
local sBaseDir = EgtGetSourceDir()
|
||||
local BD = dofile( sBaseDir .. 'Beam\\BeamData.lua')
|
||||
BD = dofile( sBaseDir .. 'Beam\\BeamData.lua')
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- *** Special Z moves ***
|
||||
@@ -44,13 +44,15 @@ function OnSpecialGetMaxZ()
|
||||
-- Sistemazione dati di input
|
||||
local vtTp = Vector3d( EMC.TDIRp)
|
||||
local bFromZmax = false
|
||||
-- recupero il gruppo
|
||||
local nSetHead = GetHeadSet( EMC.HEAD)
|
||||
if vtTp:isSmall() then
|
||||
vtTp = X_AX()
|
||||
bFromZmax = true
|
||||
if EMC.HEAD == 'H11' or EMC.HEAD == 'H14' or EMC.HEAD == 'H12' or EMC.HEAD == 'H16' then
|
||||
if nSetHead == 1 then
|
||||
EMC.R1p = ParkC1
|
||||
EMC.R2p = ParkB1
|
||||
elseif EMC.HEAD == 'H21' then
|
||||
elseif nSetHead == 2 then
|
||||
EMC.R1p = ParkC2
|
||||
EMC.R2p = ParkB2
|
||||
end
|
||||
@@ -60,7 +62,7 @@ function OnSpecialGetMaxZ()
|
||||
local bBSameSign = (( EMC.R2p < 10 and EMC.R2 < 10) or ( EMC.R2p > -10 and EMC.R2 > -10))
|
||||
|
||||
-- Calcolo in funzione della testa e dei parametri
|
||||
if EMC.HEAD == 'H11' or EMC.HEAD == 'H14' then
|
||||
if EMC.HEAD == 'H11' then
|
||||
if bBSameSign and vtTp:getX() > -0.1 and vtT:getX() > -0.1 then
|
||||
EMC.MAXZ = MaxZ1
|
||||
else
|
||||
@@ -115,9 +117,9 @@ end
|
||||
|
||||
---------------------- OnSpecialMoveZup -----------------------------
|
||||
function OnSpecialMoveZup()
|
||||
|
||||
|
||||
--EgtOutLog( 'OnSpecialMoveZup : ' .. EMC.HEAD .. '.' .. tostring( EMC.EXIT))
|
||||
|
||||
|
||||
-- Inizializzazioni
|
||||
EMC.ERR = 0
|
||||
EMC.MODIF = false
|
||||
@@ -130,11 +132,11 @@ function OnSpecialMoveZup()
|
||||
local dZmax = EgtGetAxisHomePos( EgtIf( nHeadSet ~= 2, 'Z1', 'Z2'))
|
||||
|
||||
|
||||
-- se fresa su testa1 o su testa 2
|
||||
if EMC.HEAD == 'H11' or EMC.HEAD == 'H14' or EMC.HEAD == 'H21' then
|
||||
-- se fresa su testa1 o testa 2
|
||||
if EMC.HEAD == 'H11' or EMC.HEAD == 'H21' or EMC.HEAD == 'H22' then
|
||||
;
|
||||
-- se lama su testa1
|
||||
elseif EMC.HEAD == 'H12' then
|
||||
-- se lama
|
||||
else
|
||||
-- riporto i valori tra -179 e + 180
|
||||
local dCheckAxR1 = EMC.R1
|
||||
if dCheckAxR1 < -180 then
|
||||
@@ -142,39 +144,41 @@ function OnSpecialMoveZup()
|
||||
elseif dCheckAxR1 > 180 then
|
||||
dCheckAxR1 = dCheckAxR1 - 360
|
||||
end
|
||||
|
||||
-- se inclinata oltre 90 gradi e interferisce con la trave
|
||||
if ( EMC.R2 > 87.9 and ( dCheckAxR1 < 15.0 or dCheckAxR1 > 180.0)) or ( EMC.R2 < -87.9 and ( dCheckAxR1 > -15.0 and dCheckAxR1 < 180.0)) then
|
||||
local dZref = dZmax + min( 330 * vtT:getZ(), 0) + 260 * ( 1 - sqrt( 1- vtT:getZ() * vtT:getZ()))
|
||||
-- se troppo in alto
|
||||
if EMC.L3 > dZref + 1 then
|
||||
---- sistemo asse rotante
|
||||
--EMC.R2 = EgtIf( ( EMC.R2 > 0), 90, -90)
|
||||
---- ricalcolo versore utensile
|
||||
--EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2)
|
||||
---- porto alla giusta quota
|
||||
--EMC.L3 = dZmax
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
-- se lama su testa1
|
||||
if EMC.HEAD == 'H12' then
|
||||
-- se inclinata oltre 90 gradi e interferisce con la trave
|
||||
if ( EMC.R2 > 87.9 and ( dCheckAxR1 < 15.0 or dCheckAxR1 > 180.0)) or ( EMC.R2 < -87.9 and ( dCheckAxR1 > -15.0 and dCheckAxR1 < 180.0)) then
|
||||
local dZref = dZmax + min( 330 * vtT:getZ(), 0) + 260 * ( 1 - sqrt( 1- vtT:getZ() * vtT:getZ()))
|
||||
-- se troppo in alto
|
||||
if EMC.L3 > dZref + 1 then
|
||||
---- sistemo asse rotante
|
||||
--EMC.R2 = EgtIf( ( EMC.R2 > 0), 90, -90)
|
||||
---- ricalcolo versore utensile
|
||||
--EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2)
|
||||
---- porto alla giusta quota
|
||||
--EMC.L3 = dZmax
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
end
|
||||
end
|
||||
end
|
||||
-- se seconda lama su testa1
|
||||
elseif EMC.HEAD == 'H16' then
|
||||
-- se inclinata oltre 90 gradi e interferisce con la trave
|
||||
if ( EMC.R2 > 87.9 and ( dCheckAxR1 < 15.0 or dCheckAxR1 > 180.0)) or ( EMC.R2 < -87.9 and ( dCheckAxR1 > -15.0 and dCheckAxR1< 180.0)) then
|
||||
local dZref = dZmax + min( 330 * vtT:getZ(), 0) + 260 * ( 1 - sqrt( 1- vtT:getZ() * vtT:getZ()))
|
||||
-- se troppo in alto
|
||||
if EMC.L3 > dZref + 1 then
|
||||
---- sistemo asse rotante
|
||||
--EMC.R2 = EgtIf( ( EMC.R2 > 0), 90, -90)
|
||||
---- ricalcolo versore utensile
|
||||
--EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2)
|
||||
---- porto alla giusta quota
|
||||
--EMC.L3 = dZmax
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
-- se seconda lama su testa1
|
||||
elseif EMC.HEAD == 'H16' then
|
||||
-- se inclinata oltre 90 gradi e interferisce con la trave
|
||||
if ( EMC.R2 > 87.9 and ( dCheckAxR1 < 15.0 or dCheckAxR1 > 180.0)) or ( EMC.R2 < -87.9 and ( dCheckAxR1 > -15.0 and dCheckAxR1< 180.0)) then
|
||||
local dZref = dZmax + min( 330 * vtT:getZ(), 0) + 260 * ( 1 - sqrt( 1- vtT:getZ() * vtT:getZ()))
|
||||
-- se troppo in alto
|
||||
if EMC.L3 > dZref + 1 then
|
||||
---- sistemo asse rotante
|
||||
--EMC.R2 = EgtIf( ( EMC.R2 > 0), 90, -90)
|
||||
---- ricalcolo versore utensile
|
||||
--EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2)
|
||||
---- porto alla giusta quota
|
||||
--EMC.L3 = dZmax
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -249,6 +253,49 @@ local function GetNextStartOrRestPhase( nPhase)
|
||||
return nNextPhase
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetPhaseRot( nPhase)
|
||||
return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ROT', 'i') or 0)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function IsLastMachiningBeforeRotation( nMchId)
|
||||
-- se ultima fase, ritorno risultato negativo
|
||||
if EMC.PHASE == EgtGetPhaseCount() then
|
||||
return false
|
||||
end
|
||||
-- recupero la successiva operazione attiva
|
||||
local nNextOperId = EgtGetNextActiveOperation( nMchId)
|
||||
-- se non esiste o non è una disposizione, ritorno risultato negativo
|
||||
if not nNextOperId or EgtGetOperationType( nNextOperId) ~= MCH_OY.DISP then
|
||||
return false
|
||||
end
|
||||
-- recupero le rotazioni della fase corrente e della prossima fase
|
||||
local nRot = GetPhaseRot( EMC.PHASE)
|
||||
local nNextRot = GetPhaseRot( EMC.PHASE + 1)
|
||||
-- ritorno se sono diverse
|
||||
return ( nRot ~= nNextRot)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function IsFirstMachiningAfterRotation( nMchId)
|
||||
-- se prima fase, ritorno risultato negativo
|
||||
if EMC.PHASE == 1 then
|
||||
return false
|
||||
end
|
||||
-- recupero la precedente operazione attiva
|
||||
local nPrevOperId = EgtGetPrevActiveOperation( nMchId)
|
||||
-- se non esiste o non è una disposizione, ritorno risultato negativo
|
||||
if not nPrevOperId or EgtGetOperationType( nPrevOperId) ~= MCH_OY.DISP then
|
||||
return false
|
||||
end
|
||||
-- recupero le rotazioni della fase corrente e della fase precedente
|
||||
local nRot = GetPhaseRot( EMC.PHASE)
|
||||
local nPrevRot = GetPhaseRot( EMC.PHASE - 1)
|
||||
-- ritorno se sono diverse
|
||||
return ( nRot ~= nPrevRot)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function UpdateMinJoin()
|
||||
MinJoin = BD.GetMinJoin( EMC.SB, EMC.HB, EMC.LB)
|
||||
@@ -484,7 +531,7 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function OnPostApplyMachining()
|
||||
|
||||
EgtOutLog( ' Lavorazione : ' .. EgtGetName( EMC.MCHID), 1)
|
||||
EgtOutLog( ' Lavorazione : ' .. EgtGetName( EMC.MCHID) .. ' (' .. tostring( EMC.MCHID) .. ')')
|
||||
|
||||
-- Inizializzo codice di errore
|
||||
EMC.ERR = 0
|
||||
@@ -498,7 +545,7 @@ function OnPostApplyMachining()
|
||||
return
|
||||
-- se precedente operazione è disposizione
|
||||
elseif EgtGetOperationType( nPrevOpeId) == MCH_OY.DISP then
|
||||
if EMC.PHASE == 1 then
|
||||
if EMC.PHASE == 1 or ( IsMidPhase( EMC.PHASE) and IsFirstMachiningAfterRotation( EMC.MCHID)) then
|
||||
-- posizioni home
|
||||
EMC.TPOS = nil
|
||||
EMC.Y1DELTA = nil
|
||||
@@ -719,6 +766,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
-- Se inizio o appena dopo rotazione, eseguo il carico
|
||||
if not EMC.TPOS then
|
||||
local dPosT = LoadT
|
||||
if IsFirstMachiningAfterRotation( EMC.MCHID) then dPosT = dPosT + TurnerOffs end
|
||||
local vCmd = SpecCalcLoad( dPosT, dDistFront, max( dDistBack, MinJoin, EMC.LB - ( MaxY1 - MinY1) + 6))
|
||||
EMC.LOAD = true
|
||||
local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
||||
@@ -744,6 +792,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
|
||||
-- Altrimenti, non muovo i carrelli rispetto alla trave ma impongo la posizione dei rulli
|
||||
else
|
||||
SpecOutputCNT()
|
||||
local vCmd = {}
|
||||
table.insert( vCmd, { 21, EgtIf( EMC.Y1DELTA, EMC.Y1DELTA, 0), EgtIf( EMC.Y2DELTA, EMC.Y2DELTA, 0)})
|
||||
table.insert( vCmd, { 22, dRollBack, -dRollFront})
|
||||
@@ -777,7 +826,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
return false
|
||||
end
|
||||
-- eseguo la separazione
|
||||
EgtOutLog( 'MaxLenLeft=' .. EgtNumToString( dMaxLenLeft, 1))
|
||||
EgtOutLog( 'MaxLenLeft=' .. EgtNumToString( dMaxLenLeft, 1), 1)
|
||||
vCmd = SpecCalcSplit( b3Raw:getDimX(), dMaxLenLeft)
|
||||
end
|
||||
-- Se taglio finale di grezzo a perdere
|
||||
@@ -844,23 +893,32 @@ function SpecialCalcMachiningEncumbrance( nMchId, bPreCut)
|
||||
for i = 1, #vAxMin do
|
||||
vAxMid[i] = ( vAxMin[i] + vAxMax[i]) / 2
|
||||
end
|
||||
-- recupero il gruppo
|
||||
local nSetHead = GetHeadSet( sHead)
|
||||
-- Calcolo dell'ingombro della testa rispetto allo Zero Macchina (assi rotanti fissi, C=4, B=5, A=6)
|
||||
local b3Enc
|
||||
if sHead ~= 'H21' then
|
||||
if nSetHead == 1 then
|
||||
EgtSetAxisPos( 'C1', vAxMid[4])
|
||||
EgtSetAxisPos( 'B1', vAxMid[5])
|
||||
if sHead == 'H13' then
|
||||
EgtSetAxisPos( 'A1', vAxMid[6])
|
||||
end
|
||||
b3Enc = EgtGetBBoxGlob( EgtGetAxisId( 'C1'), GDB_BB.ONLY_VISIBLE)
|
||||
else
|
||||
elseif nSetHead == 2 then
|
||||
EgtSetAxisPos( 'C2', vAxMid[4])
|
||||
EgtSetAxisPos( 'B2', vAxMid[5])
|
||||
if sHead == 'H22' then
|
||||
EgtSetAxisPos( 'A2', vAxMid[6])
|
||||
end
|
||||
b3Enc = EgtGetBBoxGlob( EgtGetAxisId( 'C2'), GDB_BB.ONLY_VISIBLE)
|
||||
else -- 'H31'
|
||||
EgtSetAxisPos( 'C3', vAxMid[4])
|
||||
EgtSetAxisPos( 'B3', vAxMid[5])
|
||||
b3Enc = EgtGetBBoxGlob( EgtGetAxisId( 'C3'), GDB_BB.ONLY_VISIBLE)
|
||||
end
|
||||
local dMinFrontEng = EgtIf( sHead ~= 'H21', MIN_ENG_RACK_V, EgtIf( vAxMax[3] < MIN_Z2_FOR_ENG_XZ2_V, MIN_ENG_V, MIN_ENG_XZ2_V))
|
||||
local dMinFrontEng = EgtIf( nSetHead ~= 2, MIN_ENG_RACK_V, EgtIf( vAxMax[3] < MIN_Z2_FOR_ENG_XZ2_V, MIN_ENG_V, MIN_ENG_XZ2_V))
|
||||
local dRollFront = max( b3Enc:getMax():getX(), dMinFrontEng) + SIC_V
|
||||
local dMinBackEng = EgtIf( sHead ~= 'H21', MIN_ENG_V, EgtIf( vAxMax[3] < MIN_Z2_FOR_ENG_XZ2_V, MIN_ENG_V, MIN_ENG_XZ2_V))
|
||||
local dMinBackEng = EgtIf( nSetHead ~= 2, MIN_ENG_V, EgtIf( vAxMax[3] < MIN_Z2_FOR_ENG_XZ2_V, MIN_ENG_V, MIN_ENG_XZ2_V))
|
||||
local dRollBack = max( -b3Enc:getMin():getX(), dMinBackEng) + SIC_V
|
||||
EgtOutLog( ' RollFront = ' .. EgtNumToString( dRollFront, 1) .. ' RollBack = ' .. EgtNumToString( dRollBack, 1), 3)
|
||||
-- Calcolo della posizione della Punta Utensile rispetto allo Zero Macchina
|
||||
@@ -1609,7 +1667,7 @@ local function PosY1FromY2B( TabI, vCmd)
|
||||
end
|
||||
-- questo movimento serve solo a gestire (in modo complesso) il caso [ri]
|
||||
MaxDispl( TabI, vCmd, 'M4')
|
||||
else
|
||||
else
|
||||
-- **[rp]** = raggiungo il punto medio Y1New dell'intervallo
|
||||
EmitComment( vCmd, '[Y1B-rp] ')
|
||||
if not SpecTestSomeMoveInCmds( vCmd) and not EMC.Y2DELTA then
|
||||
@@ -1710,7 +1768,7 @@ local function PosY1Y2A( TabI, vCmd)
|
||||
PosY1FromY2A( TabI, vCmd)
|
||||
bXW = false
|
||||
end
|
||||
else
|
||||
else
|
||||
-- in **accentramento**
|
||||
-- sempre se intervallo per Y2 raggiungibile in una sola fase
|
||||
if ( TabI.dTPosI + TabI.dY2DeltaMinF) - TabI.MaxY2V2 < TabI.dY1PosI - TabI.MyMinY1V1 then
|
||||
Binary file not shown.
@@ -20,8 +20,6 @@ H11.1=Standard.nge
|
||||
H11.1:MILL_NOTIP=MillNoTip.nge
|
||||
H12.1=Saw.nge
|
||||
H13.1=ChainSaw.nge
|
||||
H14.1=Standard.nge
|
||||
H14.1:MILL_NOTIP=MillNoTip.nge
|
||||
H16.1=Saw.nge
|
||||
H21.1=Standard.nge
|
||||
H21.1:MILL_NOTIP=MillNoTip.nge
|
||||
@@ -53,8 +51,6 @@ H11=6608
|
||||
H12=6615
|
||||
; Chainsaw
|
||||
H13=6616
|
||||
; 5 axis head
|
||||
H14=6608
|
||||
; 5 axis second saw
|
||||
H16=6623
|
||||
; Second 5 axis bottom head
|
||||
|
||||
+166
-83
@@ -1,15 +1,32 @@
|
||||
-- Descrizione macchina Essetre-PF1250MAX by EgalWare s.r.l. 2023/12/07
|
||||
-- 2023/12/07 ver 2.5l1 Prima versione. Derivata da PF1250 ver 2.5l4
|
||||
|
||||
-- 2023/12/15 ver 2.5l2 Corretti vari offset in simulazione
|
||||
-- 2023/12/18 ver 2.5l3 Ultimata gestione aggregato lama da sotto
|
||||
-- Spostato alcune funzioni proprie del C.U. nel MLDE (per post-proc common)
|
||||
-- Spostato magazzini sotto traversa ( di 200mm) come da modifica meccanica
|
||||
-- 2023/12/20 ver 2.6a1 Prima versione con post Common-PF1250
|
||||
-- Invertiti magazzini mortasatrice-truciolatore e adeguati solidi di collisione
|
||||
-- Abbassata testa 2 di 300mm
|
||||
-- Parcheggio motosega portato a -1700mm
|
||||
-- In BeamData aggiunta GetSawBlockedAxis per fissare asse bloccato per aggregato lama sotto.
|
||||
-- Costanti MinForzaPinze e MaxForzaPinze portati in mlde/Ts3data (erano hardcoded - Common)
|
||||
-- Aggiunato variabile 'WriteAllCoordsOnFirstM101' e allineamento con 2.6a1 common
|
||||
|
||||
-- Intestazioni
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
PP_VER = '2.5l1'
|
||||
PP_VER = '2.6a1'
|
||||
MIN_MACH_VER = '2.5k1'
|
||||
|
||||
EgtOutLog ( '** Essetre-PF1500rl '..PP_VER..' (MinMach '.. MIN_MACH_VER ..') **', 1)
|
||||
local sBaseDir = EgtGetSourceDir()
|
||||
INFO_STD_PP = dofile( sBaseDir .. 'Version.lua')
|
||||
-- prendo la versione kernel minima necessaria piu' 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 ( '** Essetre-PF1250MAX '..PP_VER..' (MinMach '.. MIN_MACH_VER ..') **', 1)
|
||||
|
||||
-- Parametri macchina
|
||||
NumericalControl = 'TPA' -- NUM o TPA
|
||||
@@ -62,7 +79,7 @@ SawC2Offs = 0
|
||||
SawB2Offs = 0
|
||||
MinX1 = 0
|
||||
MaxX1 = 3300
|
||||
MinZ1 = -1550
|
||||
MinZ1 = -1850
|
||||
MaxZ1 = -100
|
||||
MinC1 = -275
|
||||
MaxC1 = 275
|
||||
@@ -72,11 +89,11 @@ MinB1b = -119
|
||||
MaxB1b = 119
|
||||
ParkX1 = 250
|
||||
ParkTc2X1 = 3100
|
||||
ParkZ1 = -535
|
||||
ParkZ1 = -525
|
||||
ParkC1 = -90
|
||||
ParkB1 = -90
|
||||
ParkCSawX1 = 1500
|
||||
ParkCSawZ1 = -200
|
||||
ParkCSawX1 = 1700
|
||||
ParkCSawZ1 = -100
|
||||
ParkCSaw0Z1 = -400
|
||||
ParkCSawC1 = -90
|
||||
ParkCSaw0C1 = 0
|
||||
@@ -88,7 +105,7 @@ MinZ1ToChangeH2 = -1400
|
||||
MinX2 = -2760
|
||||
MaxX2 = 0
|
||||
MinZ2 = 0
|
||||
MaxZ2 = 795
|
||||
MaxZ2 = 1450
|
||||
MinC2 = -275
|
||||
MaxC2 = 275
|
||||
MinB2 = -127
|
||||
@@ -100,36 +117,40 @@ SafeX2 = -400
|
||||
ParkZ2 = 0
|
||||
ParkC2 = -90
|
||||
ParkB2 = -90
|
||||
ParkSawX2 = 1000
|
||||
ParkSawX2 = MinX2
|
||||
ParkSawZ2 = 0
|
||||
ParkSaw0Z2 = 0
|
||||
ParkSawC2 = -90
|
||||
ParkSaw0C2 = 0
|
||||
ParkSaw0C2 = -90
|
||||
ParkSawB2 = 0
|
||||
MinDistToolX1X2 = 40
|
||||
TurnerOffs = 120.0
|
||||
AggLoad = 50
|
||||
DeltaTabY = 2750
|
||||
DeltaTabY = 2550
|
||||
DeltaTabZ = -1428 + MillOffs -- per TPA : -1128.0 + MillOffs -- per NUM : -1258
|
||||
DeltaRulliTraveZ = -1203
|
||||
DimTabY = 1400
|
||||
DimTabX = 24000
|
||||
Delta2TabY = -985.9
|
||||
Delta2TabZ = 393 - Mill2Offs -- per TPA : 378.0 - Mill2Offs -- per NUM : 223
|
||||
Delta2TabY = -1185.9
|
||||
Delta2TabZ = 693 - Mill2Offs -- per TPA : 378.0 - Mill2Offs -- per NUM : 223
|
||||
Head2X = 0
|
||||
Head2Y = DeltaTabY - Delta2TabY
|
||||
Head2Z = DeltaTabZ - Delta2TabZ
|
||||
DefTcPos1 = 'T1'
|
||||
DefTcPos2 = 'T300'
|
||||
DefTcPos2 = 'T220'
|
||||
CoeffVM = 0.5
|
||||
MinForzaPinze = 400 -- [Kgf]
|
||||
MaxForzaPinze = 1000 -- [Kgf]
|
||||
Tc2Active = true -- magazzino prima sega a catena
|
||||
SecondSaw = true -- seconda lama su aggregato su TC3 presente
|
||||
SecondChain = true -- magazzino seconda sega a catena
|
||||
TcSpecialTools = true -- magarzzino per utensili speciali. In genere truciolatore
|
||||
TcAggreBladeUnder = true -- lama su aggregato per testa da sotto
|
||||
EmitAccClamps = true
|
||||
WriteAllCoordsOnFirstM101 = true
|
||||
|
||||
-- Aggiornamento con dati da TechnoEssetre7
|
||||
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PF1250.data"
|
||||
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PF1250MAX.data"
|
||||
local sDataBeam = EgtGetSourceDir().."\\Beam\\Ts3Data.lua"
|
||||
local sDataWall = EgtGetSourceDir().."\\Wall\\Ts3Data.lua"
|
||||
if EgtExistsFile( sTs3Data) then
|
||||
@@ -146,6 +167,7 @@ if EgtExistsFile( sDataBeam) then
|
||||
--NumericalControl = EgtIf( Machine.Offsets.TIPO_CN == 0, 'NUM', 'TPA')
|
||||
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
|
||||
@@ -157,9 +179,11 @@ if EgtExistsFile( sDataBeam) then
|
||||
if Machine.Offsets.B1_POS1 then MaxB1b = Machine.Offsets.B1_POS1 end
|
||||
if Machine.Offsets.X2_NEG then MinX2 = Machine.Offsets.X2_NEG end
|
||||
if Machine.Offsets.X2_POS then MaxX2 = Machine.Offsets.X2_POS end
|
||||
if Machine.Offsets.PARK_X2 then ParkX2 = Machine.Offsets.PARK_X2 end
|
||||
if Machine.Offsets.Z2_POS then MinZ2 = -Machine.Offsets.Z2_POS end
|
||||
if Machine.Offsets.Z2_NEG then MaxZ2 = -Machine.Offsets.Z2_NEG end
|
||||
if Machine.Offsets.PARK_Z2 then ParkZ2 = -Machine.Offsets.PARK_Z2 end
|
||||
if Machine.Offsets.PARK_Z2_INLAV then ParkInLavZ2 = -Machine.Offsets.PARK_Z2_INLAV 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
|
||||
@@ -180,10 +204,10 @@ if EgtExistsFile( sDataBeam) then
|
||||
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 Saw2C1Offs = Machine.Offsets.OFFSETCLAMAT2 end
|
||||
if Machine.Offsets.OFFSETBLAMAT2 then Saw2B1Offs = Machine.Offsets.OFFSETBLAMAT2 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 Saw2C1Offs= Machine.Offsets.OFFSETCLAMAT2 end
|
||||
if Machine.Offsets.OFFSETBLAMAT2 then Saw2B1Offs= Machine.Offsets.OFFSETBLAMAT2 end
|
||||
if Machine.Offsets.OFFSETXT1 then DeltaTabY = -Machine.Offsets.OFFSETXT1 end
|
||||
if Machine.Offsets.OFFSETZT1 then DeltaTabZ = Machine.Offsets.OFFSETZT1 + MillOffs end
|
||||
if Machine.Offsets.OFFSETXT2 then Delta2TabY = Machine.Offsets.OFFSETXT2 end
|
||||
@@ -196,6 +220,8 @@ if EgtExistsFile( sDataBeam) then
|
||||
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.MINPRESS then MinForzaPinze = Machine.Offsets.MINPRESS end
|
||||
if Machine.Offsets.MAXPRESS then MaxForzaPinze = Machine.Offsets.MAXPRESS end
|
||||
-- aggiustamenti
|
||||
MinY1 = MinV1 + MinDeltaYV
|
||||
MaxY1 = MaxMchY1
|
||||
@@ -222,8 +248,8 @@ EmtGeneral {
|
||||
ExitMaxAdjust = 300,
|
||||
ExitMaxRotAdj = 0.5,
|
||||
AngDeltaMinForHome = 80,
|
||||
Special = 'Essetre-PF1250.mlse',
|
||||
Processor = 'Essetre-PF1250.mlpe'}
|
||||
Special = 'Common-PF1250.mlse',
|
||||
Processor = 'Common-PF1250.mlpe'}
|
||||
local sBaseAux = {'BASE/SOLID', 'BASE/CONVOYER', 'BASE/COLLISION', 'BASE/TC1', 'BASE/TCR', 'BASE/TC3'}
|
||||
if Tc2Active then table.insert( sBaseAux, 5, 'BASE/TC2') end
|
||||
if TcSpecialTools then table.insert( sBaseAux, 'BASE/TC4') end
|
||||
@@ -308,23 +334,6 @@ local H12Id = EmtHead {
|
||||
Geo = 'H12_HEAD/GEO'}
|
||||
EgtSetInfo( H12Id, 'ZEXTRA', '160,60')
|
||||
EgtSetInfo( H12Id, 'ZMAXONROT', '1,190')
|
||||
-- Utensili speciali
|
||||
if TcSpecialTools then
|
||||
local H14Id = EmtHead {
|
||||
Name = 'H14',
|
||||
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 = 'H14_HEAD/GEO'}
|
||||
EgtSetInfo( H14Id, 'ZEXTRA', '160,60')
|
||||
EgtSetInfo( H14Id, 'ZMAXONROT', '1,190')
|
||||
end
|
||||
-- Lama 2
|
||||
if SecondSaw then
|
||||
local H16Id = EmtHead {
|
||||
@@ -426,10 +435,10 @@ EmtAxis {
|
||||
Home = 0,
|
||||
Geo = 'A2_AXIS/GEO'}
|
||||
|
||||
local vtMoveZ2 = Vector3d( 0, 0, Head2Z + 1481.0)
|
||||
local vtMoveZ2 = Vector3d( 0, 0, Head2Z + 1781.0)
|
||||
EgtMove( EgtGetFirstNameInGroup( Z2Id, 'SOLID'), vtMoveZ2, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( Z2Id, 'COLLISION'), vtMoveZ2, GDB_RT.GLOB)
|
||||
local vtMoveX2 = Vector3d( 0, Head2Y - 3735.9, Head2Z + 1481.0)
|
||||
local vtMoveX2 = Vector3d( 0, Head2Y - 3735.9, Head2Z + 1781.0)
|
||||
EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), vtMoveX2, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( X2Id, 'COLLISION'), vtMoveX2, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( C2Id, 'SOLID'), vtMoveX2, GDB_RT.GLOB)
|
||||
@@ -452,20 +461,20 @@ EgtSetInfo( H21Id, 'ABOVE', '0')
|
||||
EgtSetInfo( H21Id, 'ZHOMEDOWN', '1')
|
||||
-- Lama
|
||||
if TcAggreBladeUnder then
|
||||
local H22Id = EmtHead {
|
||||
Name = 'H22',
|
||||
Parent = 'A2',
|
||||
HSet = 'H21',
|
||||
Type = MCH_HT.STD,
|
||||
Pos = Point3d( SawUnderOffsX+Head2X, SawUnderOffsY+Head2Y, SawUnderOffsZ+Head2Z),
|
||||
TDir = Vector3d( 0, sin( SawUnderB2Offs), -cos( SawUnderB2Offs)),
|
||||
ADir = Y_AX(),
|
||||
Rot1W = 0.5,
|
||||
Rot2Stroke = { MinB2b, MaxB2b},
|
||||
OthColl = {'B2/SOLID', 'C2/SOLID'},
|
||||
Geo = 'H22_HEAD/GEO'}
|
||||
EgtSetInfo( H22Id, 'ZEXTRA', '160,60')
|
||||
EgtSetInfo( H22Id, 'ZMAXONROT', '1,190')
|
||||
local H22Id = EmtHead {
|
||||
Name = 'H22',
|
||||
Parent = 'A2',
|
||||
HSet = 'H21',
|
||||
Type = MCH_HT.STD,
|
||||
Pos = Point3d( SawUnderOffsX+Head2X, SawUnderOffsY+Head2Y, SawUnderOffsZ+Head2Z),
|
||||
TDir = Vector3d( 0, sin( SawUnderB2Offs), -cos( SawUnderB2Offs)),
|
||||
ADir = Y_AX(),
|
||||
Rot1W = 0.5,
|
||||
Rot2Stroke = { MinB2b, MaxB2b},
|
||||
OthColl = {'B2/SOLID', 'C2/SOLID'},
|
||||
Geo = 'H22_HEAD/GEO'}
|
||||
EgtSetInfo( H21Id, 'ABOVE', '0')
|
||||
EgtSetInfo( H21Id, 'ZHOMEDOWN', '1')
|
||||
end
|
||||
-- *** Carrelli ***
|
||||
-- Morse
|
||||
@@ -757,7 +766,7 @@ if Tc2Active then
|
||||
ADir = X_AX(),
|
||||
Geo = 'BASE/T30'}
|
||||
end
|
||||
local ptTc3 = Point3d( 480, 529, -200.8 + ( DeltaTabZ - DeltaRulliTraveZ + 55))
|
||||
local ptTc3 = Point3d( 600, 529, -200.8 + ( DeltaTabZ - DeltaRulliTraveZ + 55))
|
||||
EmtTcPos {
|
||||
Name = 'T101',
|
||||
Parent = 'Base',
|
||||
@@ -765,22 +774,22 @@ EmtTcPos {
|
||||
TDir = -X_AX(),
|
||||
ADir = Z_AX(),
|
||||
Geo = 'BASE/T101'}
|
||||
local ptTc4 = Point3d( 450, 909, -115 + ( DeltaTabZ - DeltaRulliTraveZ + 55))
|
||||
EmtTcPos {
|
||||
Name = 'T121',
|
||||
Parent = 'Base',
|
||||
Pos = ptTc4,
|
||||
TDir = Z_AX(),
|
||||
ADir = X_AX(),
|
||||
Geo = 'BASE/T121'}
|
||||
local ptTc5 = Point3d( 450, 1249, -200.8 + ( DeltaTabZ - DeltaRulliTraveZ + 55))
|
||||
local ptTc4 = Point3d( 750, 909, -200.8 + ( DeltaTabZ - DeltaRulliTraveZ + 55))
|
||||
EmtTcPos {
|
||||
Name = 'T111',
|
||||
Parent = 'Base',
|
||||
Pos = ptTc5,
|
||||
Pos = ptTc4,
|
||||
TDir = -X_AX(),
|
||||
ADir = Z_AX(),
|
||||
Geo = 'BASE/T111'}
|
||||
local ptTc5 = Point3d( 750, 1309, -115 + ( DeltaTabZ - DeltaRulliTraveZ + 55))
|
||||
EmtTcPos {
|
||||
Name = 'T121',
|
||||
Parent = 'Base',
|
||||
Pos = ptTc5,
|
||||
TDir = Z_AX(),
|
||||
ADir = X_AX(),
|
||||
Geo = 'BASE/T121'}
|
||||
local ptTcS = Point3d( -1, -22.3, -1723 + ( DeltaTabZ - DeltaRulliTraveZ + 55))
|
||||
EmtTcPos {
|
||||
Name = 'T201',
|
||||
@@ -876,12 +885,12 @@ EgtMove( EgtGetFirstNameInGroup( BaseId, 'SIGN') or GDB_ID.NULL, vtMovB, GDB_RT.
|
||||
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)
|
||||
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC4') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC5') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
||||
if TcSpecialTools then EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC4') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB) end
|
||||
if SecondChain then EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC5') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB) end
|
||||
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TCR') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TCS') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
||||
if TcSpecialTools then EgtMove( EgtGetFirstNameInGroup( BaseId, 'TCS') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB) end
|
||||
EgtMove( EgtGetFirstNameInGroup( X1Id, 'SOLID'), vtMovB, GDB_RT.GLOB)
|
||||
local vtMove = Vector3d( 0, ( DeltaTabY - 2750.0), ( DeltaTabZ + 1258.0))
|
||||
local vtMove = Vector3d( 0, ( DeltaTabY - 2550.0), ( DeltaTabZ + 1258.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)
|
||||
@@ -908,7 +917,7 @@ PY2LightId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( Y2Id, 'SOLID') or G
|
||||
---------------------------------------------------------------------
|
||||
function OnSetHead()
|
||||
-- se testa H11 (fresa)
|
||||
if EMC.HEAD == 'H11' or EMC.HEAD == 'H14' then
|
||||
if EMC.HEAD == 'H11' then
|
||||
local nTc = GetTcForTopHeadTool( EMC.TCPOS)
|
||||
if nTc ~= 2 then
|
||||
EmtModifyAxisHome( 'X1', ParkX1)
|
||||
@@ -944,13 +953,10 @@ function OnSetHead()
|
||||
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
|
||||
EmtModifyExitPosition( EMC.HEAD, EMC.EXIT or 1, Point3d( 0, 0, -dDist))
|
||||
-- recupero valore asse A1 bloccato
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
CSawPosA = tonumber( sVal:sub( 4) or '')
|
||||
local CSawPosA = tonumber( sVal:sub( 4) or '')
|
||||
EmtModifyAxisHome( 'X1', ParkCSawX1)
|
||||
EmtModifyAxisHome( 'Z1', GetChainSawZHomeFromVirtualAxis( CSawPosA))
|
||||
EmtModifyAxisStroke( 'C1', {MinC1, MaxC1})
|
||||
@@ -965,6 +971,17 @@ function OnSetHead()
|
||||
EmtModifyAxisHome( 'C1', ParkC1)
|
||||
EmtModifyAxisHome( 'B1', ParkB1)
|
||||
EmtModifyAxisDirection( 'B1', Vector3d( cos( Saw2C1Offs), sin( Saw2C1Offs), 0))
|
||||
-- se testa H21 (fresa sotto)
|
||||
elseif EMC.HEAD == 'H21' then
|
||||
EmtModifyAxisHome( 'C2', ParkC2)
|
||||
EmtModifyAxisDirection( 'B2', X_AX())
|
||||
-- se testa H22 (lama su aggregato sotto)
|
||||
elseif EMC.HEAD == 'H22' then
|
||||
-- recupero valore asse A2 bloccato
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
local SawUnderPosA2 = tonumber( sVal:sub( 4) or '') or 0
|
||||
EmtModifyAxisHome( 'C2', GetSawCHomeFromVirtualAxis( SawUnderPosA2))
|
||||
EmtModifyAxisDirection( 'B2', Vector3d( cos( SawUnderC2Offs), -sin( SawUnderC2Offs), 0))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -984,6 +1001,72 @@ function GetTcForTopHeadTool( sTcPos)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetHeadSet( sHead)
|
||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then
|
||||
return 1
|
||||
elseif sHead == 'H21' or sHead == 'H22' then
|
||||
return 2
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetHeadSetFromTcPos( sTcPos)
|
||||
local TCPOS_1A = { 'T1', 'T3', 'T4', 'T5', 'T6', 'T7', 'T8', 'T9', 'T10', 'T11', 'T12', 'T13'} -- CU montante DX
|
||||
local TCPOS_1B = { 'T101', 'T121', 'T111'} -- CU sotto traversa
|
||||
local TCPOS_1C = { 'T21', 'T22', 'T23', 'T24', 'T25', 'T26', 'T27', 'T28', 'T29', 'T30'} -- CU montante sinistro
|
||||
local TCPOS_2A = { 'T220', 'T221', 'T222', 'T223', 'T224', 'T225', 'T226', 'T227', 'T228', 'T229', 'T230'} -- CU margherita testa 2
|
||||
local TCPOS_2B = { 'T201'} -- CU lama su aggregato testa 2
|
||||
for _, sVal in ipairs( TCPOS_1A) do
|
||||
if sVal == sTcPos then return 1, 1 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_1B) do
|
||||
if sVal == sTcPos then return 1, 2 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_1C) do
|
||||
if sVal == sTcPos then return 1, 3 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_2A) do
|
||||
if sVal == sTcPos then return 2, 1 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_2B) do
|
||||
if sVal == sTcPos then return 2, 2 end
|
||||
end
|
||||
return 0, 0
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione che ritorna il nome della testa in base alla posizione utensile (ATT: deve rispecchiare il setup)
|
||||
function GetAdjHeadFromTcPos( nHeadSet, sTcPos)
|
||||
if nHeadSet == 1 then
|
||||
-- seconda lama
|
||||
if SecondSaw and sTcPos == 'T21' then
|
||||
return 'H16'
|
||||
-- utensili speciali
|
||||
elseif TcSpecialTools and sTcPos == 'T121' then
|
||||
return 'H11'
|
||||
-- motoseghe
|
||||
elseif sTcPos == 'T101' or sTcPos == 'T111' then
|
||||
return 'H13'
|
||||
-- utensili standard o prima lama
|
||||
else
|
||||
return EgtIf( sTcPos == 'T1', 'H12', 'H11')
|
||||
end
|
||||
elseif nHeadSet == 2 then
|
||||
-- lama su aggregato da sotto
|
||||
if TcAggreBladeUnder and sTcPos == 'T201' then
|
||||
return 'H22'
|
||||
-- utensili standard da sotto
|
||||
else
|
||||
return 'H21'
|
||||
end
|
||||
else
|
||||
return ''
|
||||
end
|
||||
end
|
||||
---------------------------------------------------------------------
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione che riconosce testa per sega a catena
|
||||
function HeadIsChainSaw( sHead)
|
||||
@@ -993,10 +1076,10 @@ 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
|
||||
-- se A1=0 -> T101 -> HomeZ = -400
|
||||
if abs( dPosA) < 0.1 then
|
||||
return ParkCSaw0Z1
|
||||
-- altrimenti A=-90 -> T102 o A=90 -> T104 -> HomeZ = -100
|
||||
-- altrimenti A1=-90 -> T102 o A=90 -> T104 -> HomeZ = -100
|
||||
else
|
||||
return ParkCSawZ1
|
||||
end
|
||||
@@ -1005,10 +1088,10 @@ 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
|
||||
-- se A1=0 -> T101 -> HomeC = 0
|
||||
if abs( dPosA) < 0.1 then
|
||||
return ParkCSaw0C1
|
||||
-- altrimenti A=90 -> T104 -> HomeC = -90
|
||||
-- altrimenti A1=90 -> T104 -> HomeC = -90
|
||||
else
|
||||
return ParkCSawC1
|
||||
end
|
||||
@@ -1017,10 +1100,10 @@ end
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione che calcola l'angolo Home di C per la lama su aggregato dal valore dell'asse virtuale
|
||||
function GetSawCHomeFromVirtualAxis( dPosA)
|
||||
-- se A1=0 -> 201 -> HomeC = 0
|
||||
-- se A2=0 -> 201 -> HomeC = -90
|
||||
if abs( dPosA) < 0.1 then
|
||||
return ParkSaw0C2
|
||||
-- altrimenti A1=90 -> T204 -> HomeC = -90
|
||||
-- altrimenti A2=90 -> T204 -> HomeC = -90
|
||||
else
|
||||
return ParkSawC2
|
||||
end
|
||||
@@ -1030,7 +1113,7 @@ function GetSawCHomeFromVirtualAxis( dPosA)
|
||||
-- Funzione che ritorna ZExtra partendo dalla testa e dall'angolo verticale
|
||||
function GetZExtra( sHead, dAngV)
|
||||
-- se testa standard
|
||||
if sHead == 'H11' or sHead == 'H14' then
|
||||
if sHead == 'H11' then
|
||||
if abs( dAngV) < 30.1 then
|
||||
return 400
|
||||
elseif abs( dAngV) < 45.1 then
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
# Essetre-PF1250MAX
|
||||
|
||||
|
||||
|
||||
## Getting started
|
||||
|
||||
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
|
||||
|
||||
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
|
||||
|
||||
## Add your files
|
||||
|
||||
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
|
||||
- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
|
||||
|
||||
```
|
||||
cd existing_repo
|
||||
git remote add origin https://gitlab.steamware.net/egalware-machines/essetre/Essetre-PF1250MAX.git
|
||||
git branch -M main
|
||||
git push -uf origin main
|
||||
```
|
||||
|
||||
## Integrate with your tools
|
||||
|
||||
- [ ] [Set up project integrations](https://gitlab.steamware.net/egalware-machines/essetre/Essetre-PF1250MAX/-/settings/integrations)
|
||||
|
||||
## Collaborate with your team
|
||||
|
||||
- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
|
||||
- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
|
||||
- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
|
||||
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
|
||||
- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
|
||||
|
||||
## Test and Deploy
|
||||
|
||||
Use the built-in continuous integration in GitLab.
|
||||
|
||||
- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
|
||||
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
|
||||
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
|
||||
- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
|
||||
- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
|
||||
|
||||
***
|
||||
|
||||
# Editing this README
|
||||
|
||||
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
|
||||
|
||||
## Suggestions for a good README
|
||||
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
|
||||
|
||||
## Name
|
||||
Choose a self-explaining name for your project.
|
||||
|
||||
## Description
|
||||
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
|
||||
|
||||
## Badges
|
||||
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
|
||||
|
||||
## Visuals
|
||||
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
|
||||
|
||||
## Installation
|
||||
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
|
||||
|
||||
## Usage
|
||||
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
|
||||
|
||||
## Support
|
||||
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
|
||||
|
||||
## Roadmap
|
||||
If you have ideas for releases in the future, it is a good idea to list them in the README.
|
||||
|
||||
## Contributing
|
||||
State if you are open to contributions and what your requirements are for accepting them.
|
||||
|
||||
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
|
||||
|
||||
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
|
||||
|
||||
## Authors and acknowledgment
|
||||
Show your appreciation to those who have contributed to the project.
|
||||
|
||||
## License
|
||||
For open source projects, say how it is licensed.
|
||||
|
||||
## Project status
|
||||
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
|
||||
+3
-3
@@ -31,8 +31,8 @@ local GS = {}
|
||||
local PositionTable = {}
|
||||
local bTc2Active = ( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'TC2') ~= nil)
|
||||
local SecondSaw = ( EgtGetHeadId( 'H16') ~= nil)
|
||||
local SecondChain = ( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'TC5') ~= nil)
|
||||
local TcSpecialTools = ( EgtGetHeadId( 'H14') ~= nil)
|
||||
local SecondChain = ( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'TC4') ~= nil)
|
||||
local TcSpecialTools = ( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'TC5') ~= nil)
|
||||
local TcAggreBladeUnder = ( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'TCS') ~= nil)
|
||||
|
||||
local bFullOpt = bTc2Active and SecondSaw and SecondChain and TcSpecialTools and TcAggreBladeUnder -- se ha tutti gli optional attivati
|
||||
@@ -52,7 +52,7 @@ if bFullOpt then
|
||||
{Pos = "Pos13", TcPos = "T13", Head = "H11", Group = "G1"},
|
||||
{Pos = "Pos14", TcPos = "T101", Head = "H13", Group = "G2"}, -- motosega
|
||||
{Pos = "Pos15", TcPos = "T111", Head = "H13", Group = "G2"}, -- motosega 2
|
||||
{Pos = "Pos16", TcPos = "T121", Head = "H14", Group = "G2"}, -- utensile speciale
|
||||
{Pos = "Pos16", TcPos = "T121", Head = "H11", Group = "G2"}, -- utensile speciale
|
||||
{Pos = "Pos17", TcPos = "T21", Head = "H16", Group = "G3"}, -- TC 2
|
||||
{Pos = "Pos18", TcPos = "T22", Head = "H11", Group = "G3"},
|
||||
{Pos = "Pos19", TcPos = "T23", Head = "H11", Group = "G3"},
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
==== Common_PF1250 Update Log ====
|
||||
|
||||
Versione 2.6a1 (14/12/2023)
|
||||
- Prima versione post-proc comune tra macchine PF1250 e PF1500
|
||||
- (SIM-GEN) Corretto movimento testa 2 in ToolDesel e movimento controllo collisione
|
||||
- (GEN) Tolta testa H14 per utensili speciali. Si utilizza H11 per frese standard
|
||||
- (MLDE-GEN) Costanti 'MinForzaPinze' e 'MaxForzaPinze' portati in mlde/Ts3data (erano hardcoded)
|
||||
- (MLDE-SIM-GEN) Aggiunto parametro 'WriteAllCoordsOnFirstM101' per decidere se stampare tutti glio assi sulla prima M101
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
-- Version.lua by EgalWare s.r.l. 2023/11/28
|
||||
-- Gestione della versione dei file comuni post-processori macchine PF1250 e PF1500 di Essetre
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_PF1250', -- nome script PP standard
|
||||
VERSION = '2.6a1', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
return InfoCommon_STD_PP
|
||||
Reference in New Issue
Block a user