Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a4721d036d | |||
| 69ea8f892d | |||
| 866a53dbfc | |||
| a48c16cd3c | |||
| 32b1c63252 | |||
| fbec60add5 |
+24
-6
@@ -73,7 +73,7 @@ local BeamData = {
|
||||
|
||||
-- Aggiornamento con dati da TechnoEssetre7
|
||||
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-ONE.data"
|
||||
local sData = EgtGetSourceDir().."\\Ts3Data.lua"
|
||||
local sData = EgtGetCurrMachineDir().."\\Beam\\Ts3Data.lua"
|
||||
if EgtExistsFile( sTs3Data) then
|
||||
EgtCopyFile( sTs3Data, sData)
|
||||
local sTs3DataOld = sTs3Data..'.old'
|
||||
@@ -161,14 +161,32 @@ end
|
||||
BeamData.GetMinUnloadableRaw = GetMinUnloadableRaw
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function GetChainSawBlockedAxis( nInd)
|
||||
if nInd == 1 then
|
||||
return 'A=-90'
|
||||
local function GetBlockedAxis( sHead, nToolType, sBlockedAxis)
|
||||
-- lama
|
||||
if nToolType == MCH_TY.SAW_STD or nToolType == MCH_TY.SAW_FLAT then
|
||||
return ''
|
||||
-- sega a catena
|
||||
elseif nToolType == MCH_TY.MORTISE_STD then
|
||||
if sHead == 'H13' or sHead == 'H15' then
|
||||
if sBlockedAxis == 'parallel' then
|
||||
return 'A=0'
|
||||
elseif sBlockedAxis == 'perpendicular' then
|
||||
return 'A=-90'
|
||||
end
|
||||
else
|
||||
return ''
|
||||
end
|
||||
-- fresa
|
||||
elseif nToolType == MCH_TY.MILL_STD or nToolType == MCH_TY.MILL_NOTIP then
|
||||
return ''
|
||||
-- punta
|
||||
elseif nToolType == MCH_TY.DRILL_STD or nToolType == MCH_TY.DRILL_LONG then
|
||||
return ''
|
||||
else
|
||||
return 'A=0'
|
||||
return ''
|
||||
end
|
||||
end
|
||||
BeamData.GetChainSawBlockedAxis = GetChainSawBlockedAxis
|
||||
BeamData.GetBlockedAxis = GetBlockedAxis
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function GetChainSawInitAngs( vtN, vtO, nInd)
|
||||
|
||||
+123
-96
@@ -1,6 +1,9 @@
|
||||
-- Processore standard macchine ONE e PF by EgalWare s.r.l. 2023/11/24
|
||||
-- Con controllo numerico NUM
|
||||
|
||||
-- Carico libreria
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
-- Variabili di modulo
|
||||
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
|
||||
@@ -351,6 +354,7 @@ function OnRawMoveData()
|
||||
EMT.HT = b3Part:getDimY()
|
||||
EMT.ST = b3Part:getDimZ()
|
||||
EMT.HOVM = EgtGetInfo( EMT.RAWID, 'HOVM', 'd') or 0
|
||||
EMT.XMINT = b3Part:getMin():getX()
|
||||
else
|
||||
EMT.IDT = GDB_ID.NULL
|
||||
EMT.IT = -1
|
||||
@@ -395,6 +399,9 @@ function OnMachiningStart()
|
||||
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
|
||||
EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE)
|
||||
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES)
|
||||
EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil)
|
||||
EMT.MCHPRECUT = ( EMT.MCHUSERNOTES:find( 'Precut;', 1, true) ~= nil)
|
||||
|
||||
-- se sega a catena, aggiusto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H13' or EMT.HEAD == 'H15' then
|
||||
-- valore dell'asse virtuale
|
||||
@@ -594,7 +601,7 @@ function OnPathStart()
|
||||
--EMT.CNT = EgtGetInfo( EMT.PATHID, 'CNT', 'i')
|
||||
--EmtOutput( 'CNT='.. tostring( EMT.CNT or 0))
|
||||
-- se taglio di separazione, verifico se ci sarà caduta
|
||||
if ( EMT.MCHUSERNOTES:find( 'Split', 1, true) ~= nil) then
|
||||
if EMT.MCHSPLIT then
|
||||
local sCmd = EgtGetInfo( EMT.PATHID, 'AE1') or ''
|
||||
if sCmd:find( 'Fall', 1, true) then
|
||||
EMT.TO_FALL = true
|
||||
@@ -602,6 +609,14 @@ function OnPathStart()
|
||||
EMT.TO_SPECSPLIT = true
|
||||
end
|
||||
end
|
||||
|
||||
-- se taglio di precut verifico quanto è più lungo il grezzo rispetto al pezzo (non tiene conto dell'ultimo cubetto)
|
||||
EMT.DELTA_LT = 0
|
||||
if EMT.MCHPRECUT then
|
||||
local dCosA = sqrt( max( 1 - EMT.EXTR[1] * EMT.EXTR[1], 0))
|
||||
EMT.DELTA_LT = max( EMT.XMINT - Point3d( EMT.MMAX):getX() - dCosA * EMT.TDIAM / 2, 0)
|
||||
end
|
||||
|
||||
-- se utensile non cambiato, salvo eventuali precedenti lineari e rotanti
|
||||
if EMT.TOOL == EMT.PREVTOOL and not EMT.ZMAX then
|
||||
EMT.L1pp = EMT.L1op
|
||||
@@ -752,14 +767,13 @@ function OnRapid()
|
||||
-- primo posizionamento
|
||||
local Speed = EMT.S * EgtIf( EMT.HEAD ~= 'H12' and EMT.HEAD ~= 'H22', 1, 1.65)
|
||||
local bOnlyCharY = true
|
||||
-- se Split lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
||||
local bSplitCut = ( EMT.MCHUSERNOTES:find( 'Split', 1, true) ~= nil)
|
||||
-- eventuale Movimento Pinze
|
||||
for i = 1, #EMT.AUXCMD do
|
||||
ProcessPathStartAux( EMT.AUXCMD[i], i)
|
||||
end
|
||||
EMT.AUXCMD = {}
|
||||
if bSplitCut and #EMT.MDCHAR > 0 and not EMT.TO_FALL and not EMT.TO_SPECSPLIT then
|
||||
-- se Split lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
||||
if EMT.MCHSPLIT and #EMT.MDCHAR > 0 and not EMT.TO_FALL and not EMT.TO_SPECSPLIT then
|
||||
EMT.MDCHAR[#EMT.MDCHAR].FinStatY1 = 1
|
||||
end
|
||||
for i = 1, #EMT.MDCHAR do
|
||||
@@ -775,7 +789,7 @@ function OnRapid()
|
||||
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)
|
||||
EmitParkRoller( dPosT, EMT.MCHSPLIT)
|
||||
end
|
||||
-- se testa 1 e CU 1
|
||||
if GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC1' then
|
||||
@@ -794,7 +808,7 @@ function OnRapid()
|
||||
dXref = -LimX1PlRotSaw
|
||||
end
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H13' and EMT.HEAD ~= 'H15' then
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
EmitMoveDataHead( 1, { X=dXref, Z=MyMaxZ1, B=ParkB1, C=ParkC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
@@ -817,11 +831,20 @@ function OnRapid()
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=ParkCSawZ1, B=HomeB1, C=EMT.R1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=-ParkCSawX1, Z=ParkCSawZ1, B=ParkCSawB1, C=ParkCSawC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- se circa verticale
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
end
|
||||
end
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
@@ -853,7 +876,7 @@ function OnRapid()
|
||||
local HomeB1 = EgtGetAxisHomePos( 'B1')
|
||||
local dTRad, dTLen = GetToolRadLen()
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H13' and EMT.HEAD ~= 'H15' then
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=MyMaxZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
@@ -875,23 +898,21 @@ function OnRapid()
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- se pezzo molto alto e R3=0, mi sposto prima in X (per ora solo davanti)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 1, { X=-SafeCSaw0X2, Z=ParkCSawZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=dSafeZ1, B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=-ParkCSawX1, Z=ParkCSawZ1, B=ParkCSawB1, C=ParkCSawC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- se circa verticale
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=ParkCSawZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
end
|
||||
|
||||
end
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
@@ -909,7 +930,7 @@ function OnRapid()
|
||||
local HomeB2 = EgtGetAxisHomePos( 'B2')
|
||||
local dTRad, dTLen = GetToolRadLen()
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H23' then
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=MyMaxZ2, B=HomeB2, C=HomeC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 2)
|
||||
EmitMoveWaitHead( 2)
|
||||
@@ -931,21 +952,19 @@ function OnRapid()
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- se pezzo molto alto e R3=0, mi sposto prima in X (per ora solo davanti)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 2, { X=-SafeCSaw0X2, Z=ParkCSawZ2, B=HomeB2, C=HomeC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 2)
|
||||
EmitMoveWaitHead( 2)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=dSafeZ2, B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=-ParkCSawX2, Z=ParkCSawZ2, B=ParkCSawB2, C=ParkCSawC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 2)
|
||||
EmitMoveWaitHead( 2)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- se circa verticale
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=ParkCSawZ2, B=HomeB2, C=HomeC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 2)
|
||||
EmitMoveWaitHead( 2)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=dSafeZ2, B=EMT.R2, C=HomeC2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
end
|
||||
end
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
@@ -966,7 +985,7 @@ function OnRapid()
|
||||
BhData.Y1 = ParkY1
|
||||
BhData.ViseY1 = 2
|
||||
end
|
||||
if bSplitCut and EMT.Y2DELTA then
|
||||
if EMT.MCHSPLIT and EMT.Y2DELTA then
|
||||
BhData.ViseY1 = 3
|
||||
end
|
||||
if EMT.Y2DELTA then
|
||||
@@ -1076,8 +1095,7 @@ function OnRapid()
|
||||
if EMT.DOU_TYPE then sOut = sOut .. ' Double' end
|
||||
EmtOutput( '( *** '..sOut..' *** )')
|
||||
-- se Split lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
||||
local bSplitCut = ( EMT.MCHUSERNOTES:find( 'Split', 1, true) ~= nil)
|
||||
if bSplitCut and #EMT.MDCHAR > 0 and not EMT.TO_FALL and not EMT.TO_SPECSPLIT then
|
||||
if EMT.MCHSPLIT and #EMT.MDCHAR > 0 and not EMT.TO_FALL and not EMT.TO_SPECSPLIT then
|
||||
EMT.MDCHAR[#EMT.MDCHAR].FinStatY1 = 1
|
||||
end
|
||||
for i = 1, #EMT.MDCHAR do
|
||||
@@ -1089,13 +1107,11 @@ function OnRapid()
|
||||
EmitMoveWaitChars( nMoveType)
|
||||
end
|
||||
EMT.MDCHAR = {}
|
||||
-- se pezzo a destra, dichiaro cabina sinistra da parcheggiare
|
||||
if not EMT.Y1DELTA then EMT.V1NEXTPOS = ParkV1 end
|
||||
-- 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)
|
||||
EmitParkRoller( dPosT, EMT.MCHSPLIT)
|
||||
end
|
||||
-- se testa 1
|
||||
if GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC1' then
|
||||
@@ -1108,7 +1124,7 @@ function OnRapid()
|
||||
local Speed = EMT.S * EgtIf( EMT.HEAD ~= 'H12' and EMT.HEAD ~= 'H22', 1, 1.65)
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H13' and EMT.HEAD ~= 'H15' then
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
local CurrZ1 = EMT.L3pp or MyMaxZ1
|
||||
local CurrB1 = PrevR2
|
||||
local CurrC1 = PrevR1
|
||||
@@ -1134,9 +1150,16 @@ function OnRapid()
|
||||
end
|
||||
-- altrimenti sega a catena 'H13'
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=ParkCSawZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=-ParkCSawX1, Z=ParkCSawZ1, B=ParkCSawB1, C=ParkCSawC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- se circa verticale
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
end
|
||||
end
|
||||
end
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
@@ -1175,7 +1198,7 @@ function OnRapid()
|
||||
local Speed = EMT.S * EgtIf( EMT.HEAD ~= 'H12' and EMT.HEAD ~= 'H22', 1, 1.65)
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H13' and EMT.HEAD ~= 'H15' then
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
local CurrZ1 = EMT.L3pp or MyMaxZ1
|
||||
local CurrB1 = PrevR2
|
||||
local CurrC1 = PrevR1
|
||||
@@ -1197,16 +1220,15 @@ function OnRapid()
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- se pezzo molto alto e R3=0, mi sposto prima in X (per ora solo davanti)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 1, { X=-SafeCSaw0X1, Z=ParkCSawZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=dSafeZ1, B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=-ParkCSawX1, Z=ParkCSawZ1, B=ParkCSawB1, C=ParkCSawC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- se circa verticale
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=ParkCSawZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1224,7 +1246,7 @@ function OnRapid()
|
||||
local Speed = EMT.S * EgtIf( EMT.HEAD ~= 'H12' and EMT.HEAD ~= 'H22', 1, 1.65)
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H23' then
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
local CurrZ2 = EMT.L3pp or MyMaxZ2
|
||||
local CurrB2 = PrevR2
|
||||
local CurrC2 = PrevR1
|
||||
@@ -1246,15 +1268,15 @@ function OnRapid()
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- se pezzo molto alto e R3=0, mi sposto prima in X (per ora solo davanti)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 2, { X=-SafeCSaw0X2, Z=ParkCSawZ2, B=HomeB2, C=HomeC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=dSafeZ2, B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=-ParkCSawX2, Z=ParkCSawZ2, B=ParkCSawB2, C=ParkCSawC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- se circa verticale
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=ParkCSawZ2, B=HomeB2, C=HomeC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=dSafeZ2, B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1272,7 +1294,7 @@ function OnRapid()
|
||||
BhData.Y1 = EgtIf( EMT.Y1POS, EMT.Y1POS, ParkY1)
|
||||
BhData.ViseY1 = 2
|
||||
end
|
||||
if bSplitCut and EMT.Y2DELTA then
|
||||
if EMT.MCHSPLIT and EMT.Y2DELTA then
|
||||
BhData.ViseY1 = 3
|
||||
end
|
||||
if EMT.Y2DELTA then
|
||||
@@ -1403,13 +1425,12 @@ function OnRapid()
|
||||
MyAdjustLinearAxes()
|
||||
EmtAdjustRotaryAxes()
|
||||
-- se Split o Presplit lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
||||
local bSplitCut = ( EMT.MCHUSERNOTES:find( 'Split', 1, true) ~= nil)
|
||||
local sNextTool = GetNextTool( EMT.MCHID)
|
||||
-- vado in home se è ultimo movimento ed è ultima lavorazione, se sono con motosega e devo cambiare utensile, oppure se ho la lama
|
||||
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool) or ( EMT.HEAD == 'H23' and EMT.TOOL ~= sNextTool) or ( EMT.HEAD == 'H13' and EMT.TOOL ~= sNextTool) or EMT.HEAD == 'H12' or EMT.HEAD == 'H22'
|
||||
local CurrL3o = EMT.L3o
|
||||
EMT.L3o = EMT.L3op
|
||||
EmitZmax( true, true, bToXhome, EMT.R1p, EMT.R2p, bSplitCut)
|
||||
EmitZmax( true, true, bToXhome, EMT.R1p, EMT.R2p, EMT.MCHSPLIT)
|
||||
EMT.L3o = CurrL3o
|
||||
-- aggiorno quota finale trave dopo Zmax
|
||||
EMT.L1o = EMT.TPOS
|
||||
@@ -1802,7 +1823,10 @@ function PrepareMoveChar( sCmd, nInd)
|
||||
elseif Cmd[1] == '11' then
|
||||
EMT.ISY1 = CalcCharStatusN( Cmd[2])
|
||||
EMT.FSY1 = EMT.ISY1
|
||||
EMT.BV = EgtIf( Cmd[2] ~= '0', 1, 2)
|
||||
-- se pinza due in presa, non attivo la 1
|
||||
if EMT.BV ~= 2 then
|
||||
EMT.BV = EgtIf( Cmd[2] ~= '0', 1, 2)
|
||||
end
|
||||
if #EMT.MDCHAR > 0 then EMT.MDCHAR[#EMT.MDCHAR].FinStatY1 = EMT.FSY1 end
|
||||
elseif Cmd[1] == '12' then
|
||||
EMT.ISY2 = CalcCharStatusN( Cmd[2])
|
||||
@@ -2201,7 +2225,7 @@ function GetMovesInAuxCmd( vAuxCmd)
|
||||
if Cmd[1] == '1' or Cmd[1] == '2' or Cmd[1] == '3' then
|
||||
return true
|
||||
elseif Cmd[1] == '22' then
|
||||
local dV1NextPos = EgtIf( EMT.Y1DELTA, tonumber( Cmd[2]), ParkV1)
|
||||
local dV1NextPos = tonumber( Cmd[2]) -- EgtIf( EMT.Y1DELTA, tonumber( Cmd[2]), ParkV1)
|
||||
if not GetV1ToCloseNum( dV1NextPos) then
|
||||
dV1NextPos = ParkV1
|
||||
end
|
||||
@@ -2473,15 +2497,16 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
EmitMoveWaitHead( 1)
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
if BD.RIGHT_LOAD then
|
||||
EmitMoveDataHead( 1, { X=-EMT.L2o, Z=dSafeZ1, B=dSafeB1, C=PrevR1})
|
||||
EmitMoveDataHead( 1, { X=-dSafeX1, C=dSafeC1})
|
||||
if bXhome then
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=ParkCSawZ1, B=ParkB1, C=ParkC1, TPos=50})
|
||||
end
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=-EMT.L2o, Z=dSafeZ1, B=dSafeB1, C=PrevR1})
|
||||
EmitMoveDataHead( 1, { C=dSafeC1})
|
||||
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
||||
local MovH = { X = -EMT.L2o, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dSafeB1})
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 1, { Z=ParkCSawZ1, B=ParkB1})
|
||||
end
|
||||
EmitMoveDataHead( 1, { X=-dSafeX1, C=dSafeC1})
|
||||
if bXhome then
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=ParkCSawZ1, B=ParkB1, C=ParkC1, TPos=50})
|
||||
end
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
@@ -2489,7 +2514,7 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
-- se altrimenti fresa o lama su TC frontale
|
||||
else
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H13' and EMT.HEAD ~= 'H15' then
|
||||
if not HeadIsChainSaw( EMT.HEAD) 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)
|
||||
@@ -2513,13 +2538,14 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
EmitMoveWaitHead( 1)
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=-EMT.L2o, Z=dSafeZ1, B=dSafeB1, C=PrevR1})
|
||||
EmitMoveDataHead( 1, { C=dSafeC1})
|
||||
-- se pezzo molto alto e R3=0, mi sposto prima in X (per ora solo davanti)
|
||||
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
||||
local MovH = { X = -EMT.L2o, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dSafeB1})
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 1, { X=-SafeCSaw0X1})
|
||||
EmitMoveDataHead( 1, { Z=ParkCSawZ1})
|
||||
EmitMoveDataHead( 1, { Z=ParkCSawZ1, B=ParkB1})
|
||||
end
|
||||
EmitMoveDataHead( 1, { X=-dSafeX1, C=dSafeC1})
|
||||
if bXhome then
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=ParkCSawZ1, B=ParkB1, C=ParkC1, TPos=50})
|
||||
end
|
||||
@@ -2541,7 +2567,7 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
EmitParkRoller( dPosT, bSplitCut, bUsePrevDelta)
|
||||
end
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H23' then
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
-- eseguo la salita a Z2max (oriento solo se assi rotanti non già a posto)
|
||||
if abs( dSafeC2 - PrevR1) > 0.1 or abs( dSafeB2 - PrevR2) > 0.1 then
|
||||
local dZref = dSafeZ2 + GetZExtra( EMT.HEAD, PrevR2)
|
||||
@@ -2565,13 +2591,14 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
EmitMoveWaitHead( 2)
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=-EMT.L2o, Z=dSafeZ2, B=dSafeB2, C=PrevR1})
|
||||
EmitMoveDataHead( 2, { C=dSafeC2})
|
||||
-- se pezzo molto alto e R3=0, mi sposto prima in X (per ora solo davanti)
|
||||
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
||||
local MovH = { X = -EMT.L2o, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||
EmitMoveDataHead( 2, MovH)
|
||||
EmitMoveDataHead( 2, { Z=dSafeZ2, B=dSafeB2})
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 2, { X=-SafeCSaw0X2})
|
||||
EmitMoveDataHead( 2, { Z=ParkCSawZ2})
|
||||
EmitMoveDataHead( 2, { Z=ParkCSawZ2, B=ParkB2})
|
||||
end
|
||||
EmitMoveDataHead( 2, { X=-dSafeX2, C=dSafeC2})
|
||||
if bXhome then
|
||||
EmitMoveDataHead( 2, { X=-ParkX2, Z=ParkCSawZ2, B=ParkB2, C=ParkC2, TPos=50})
|
||||
end
|
||||
@@ -2710,8 +2737,8 @@ function EmitParkRoller( dPosT, bSplitCut, bUsePrevDelta)
|
||||
local dPosY2 = dPosT + dY2Delta
|
||||
local DiffY2 = MyParkY2 - dPosY2
|
||||
local dMoveY2 = EgtIf( DiffY2 < -0.1, dMoveV2, 0)
|
||||
local dTryMoveY2 = ParkV2 - dPosT - EMT.LT - EMT.HOVM
|
||||
if ( dPosT + EMT.LT + EMT.HOVM < ParkV1 + ExtraParkV and dPosT + EMT.LT + EMT.HOVM > ParkV2 and dPosY2 + dTryMoveY2 > MinY2) then dMoveY2 = min( dMoveY2, dTryMoveY2) end
|
||||
local dTryMoveY2 = ParkV2 - dPosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM
|
||||
if ( dPosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM < ParkV1 + ExtraParkV and dPosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM > ParkV2 and dPosY2 + dTryMoveY2 > MinY2) then dMoveY2 = min( dMoveY2, dTryMoveY2) end
|
||||
MDChar.Y2 = dPosY2 + dMoveY2
|
||||
MDChar.MovType = 2
|
||||
MDChar.BeamVise = 2
|
||||
|
||||
+177
-88
@@ -6,12 +6,15 @@
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
-- Carico libreria
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- *** GENERATION ***
|
||||
---------------------------------------------------------------------
|
||||
local sBaseDir = EgtGetSourceDir()
|
||||
local sBaseDir = EgtGetCurrMachineDir()
|
||||
if NumericalControl == 'NUM' or NumericalControl == 'NUM_FLEX' then
|
||||
dofile( sBaseDir .. 'Common_ONE-PF.NUM.mlpe')
|
||||
dofile( sBaseDir .. '\\Common_ONE-PF.NUM.mlpe')
|
||||
elseif NumericalControl == 'TPA' then
|
||||
error( 'Numerical Control error : TPA not yet managed')
|
||||
else
|
||||
@@ -23,6 +26,45 @@ end
|
||||
---------------------------------------------------------------------
|
||||
local COLL_SAFE_DIST = 4
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulInit()
|
||||
-- se macchina con carico destro, imposto offset direzioni di vista standard
|
||||
if BD.RIGHT_LOAD then
|
||||
local nOrigViewOffs = EgtGetViewOrizzOffsStep()
|
||||
local dOrigViewAngV, dOrigViewAngH = EgtGetGenericView()
|
||||
if nOrigViewOffs ~= 2 then
|
||||
EgtSetViewOrizzOffsStep( 2)
|
||||
if dOrigViewAngV < 0.1 then
|
||||
EgtSetView( SCE_VD.TOP, false)
|
||||
elseif dOrigViewAngV > 179.9 then
|
||||
EgtSetView( SCE_VD.BOTTOM, false)
|
||||
else
|
||||
local dViewAngH = dOrigViewAngH + EgtIf( dOrigViewAngH > 180, 2 * 90, 0)
|
||||
EgtSetGenericView( dOrigViewAngV, dViewAngH, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulExit()
|
||||
-- se macchina con carico destro, annullo offset direzioni di vista standard
|
||||
if BD.RIGHT_LOAD then
|
||||
local nOrigViewOffs = EgtGetViewOrizzOffsStep()
|
||||
local dOrigViewAngV, dOrigViewAngH = EgtGetGenericView()
|
||||
if nOrigViewOffs == 2 then
|
||||
EgtSetViewOrizzOffsStep( 0)
|
||||
if dOrigViewAngV < 0.1 then
|
||||
EgtSetView( SCE_VD.TOP, false)
|
||||
elseif dOrigViewAngV > 179.9 then
|
||||
EgtSetView( SCE_VD.BOTTOM, false)
|
||||
else
|
||||
EgtSetGenericView( dOrigViewAngV, dOrigViewAngH - 2 * 90, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulStart()
|
||||
-- controllo versione programma
|
||||
@@ -78,7 +120,7 @@ function OnSimulStart()
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'COL1'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'COL2'},
|
||||
{ Grp = 'Base', Sub = 'BELT', Name = 'COLLISION'}}
|
||||
-- gruppo CHSAW si attiva solo se progress, one con BIT ortiser o PF
|
||||
-- gruppo CHSAW si attiva solo se progress, one con BIT mortiser o PF
|
||||
if Progress or Mortiser or EgtGetHeadId( 'H21') then
|
||||
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW'})
|
||||
end
|
||||
@@ -86,6 +128,11 @@ function OnSimulStart()
|
||||
if Mortiser and EgtGetHeadId( 'H21') then
|
||||
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'MORTISER'})
|
||||
end
|
||||
-- se Progress si attiva magazzino lama sotto traversa
|
||||
if Progress and EgtGetHeadId( 'H21') then
|
||||
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'SAW1'})
|
||||
end
|
||||
|
||||
if Clamp5 then
|
||||
table.insert( McdData, { Grp = 'W', Sub = 'COLLISION', Name = 'STM1'})
|
||||
table.insert( McdData, { Grp = 'W', Sub = 'COLLISION', Name = 'STM2'})
|
||||
@@ -271,6 +318,9 @@ function OnSimulDispositionStart()
|
||||
EMT.LB = b3Bar:getDimX()
|
||||
EMT.LR = b3Raw:getDimX()
|
||||
EMT.LT = b3Part:getDimX()
|
||||
if b3Part:getMin() then
|
||||
EMT.XMINT = b3Part:getMin():getX() + ( EgtGetAxisPos( 'T') - EgtGetAxisHomePos( 'T'))
|
||||
end
|
||||
EMT.HOVM = EgtGetInfo( nPartRawId or GDB_ID.NULL, 'HOVM', 'd') or 0
|
||||
EMT.CUTID = EgtGetInfo( PartId or GDB_ID.NULL, 'CUTID', 'i') or 0
|
||||
EMT.Y1SPEC = nil
|
||||
@@ -416,6 +466,7 @@ function OnSimulToolSelect( dPosA)
|
||||
EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
|
||||
EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
||||
EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||
EMT.TDIAM = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
||||
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- se ho due teste, verifico che l'altra sia dalla parte opposta
|
||||
@@ -504,13 +555,6 @@ function OnSimulToolDeselect( dPrevA)
|
||||
end
|
||||
elseif HeadIsChainSaw( EMT.PREVHEAD_H2) then
|
||||
-- simulo movimento
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
local CurrX2 = EgtGetAxisPos( 'X2')
|
||||
if CurrX2 < SafeCSaw0X2 then
|
||||
SimulMoveAxis( 'X2', SafeCSaw0X2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'X2', ParkCSawX2, MCH_SIM_STEP.RAPID)
|
||||
local dMyParkC = EgtGetAxisHomePos( 'C2')
|
||||
if dPrevA then dMyParkC = GetChainSawCHomeFromVirtualAxis( dPrevA) end
|
||||
@@ -700,6 +744,7 @@ function OnSimulMachiningStart()
|
||||
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
|
||||
EMT.VMRS = ( EMT.MCHTYPE ~= MCH_MY.DRILLING and not EMT.MCHUSERNOTES:find( 'VMRS=0;', 1, true))
|
||||
EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil)
|
||||
EMT.MCHPRECUT = ( EMT.MCHUSERNOTES:find( 'Precut;', 1, true) ~= nil)
|
||||
-- recupero TASKID della feature lavorata
|
||||
local vId = EgtGetMachiningGeometry()
|
||||
if vId and #vId > 0 and #vId[1] > 0 then
|
||||
@@ -743,7 +788,7 @@ function OnSimulMachiningStart()
|
||||
local bAgg = EgtExistsInfo( EMT.PATHID, 'CNT')
|
||||
ExecParkRoller( nil, nil, nil, nil, false, bAgg)
|
||||
-- eseguo
|
||||
SimulMoveAxes( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
@@ -781,6 +826,13 @@ function OnSimulPathStart()
|
||||
EMT.TO_SPECSPLIT = true
|
||||
end
|
||||
end
|
||||
-- se taglio di precut verifico quanto è più lungo il grezzo rispetto al pezzo (non tiene conto dell'ultimo cubetto)
|
||||
EMT.DELTA_LT = 0
|
||||
if EMT.MCHPRECUT then
|
||||
local dCosA = sqrt( max( 1 - EMT.EXTR[1] * EMT.EXTR[1], 0))
|
||||
EMT.DELTA_LT = max( EMT.XMINT - Point3d( EMT.MMAX):getX() - dCosA * EMT.TDIAM / 2, 0)
|
||||
EgtOutLog( 'PreCutDeltaLT='..EgtNumToString( EMT.DELTA_LT, 3), 5)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -792,9 +844,9 @@ function OnSimulPathEnd()
|
||||
if EMT.MCHSPLIT and not EMT.TO_FALL and not EMT.TO_SPECSPLIT then
|
||||
EMT.SPLIT_Y1DELTA = EMT.Y1DELTA
|
||||
EMT.Y1DELTA = nil
|
||||
SetPY1Light( false)
|
||||
ExecMovePY1( false)
|
||||
end
|
||||
ExecMoveZmax( EMT.MCHSPLIT)
|
||||
ExecMoveZmax( EMT.MCHSPLIT, false)
|
||||
EMT.TO_ZMAX = nil
|
||||
end
|
||||
end
|
||||
@@ -802,22 +854,22 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulPathStartAux()
|
||||
-- eseguo il comando
|
||||
ExecAuxCmd( EMT.AUX)
|
||||
ExecAuxCmd( EMT.AUX, true)
|
||||
-- se ultimo comando e lavorazione di split, sgancio il carro Y1
|
||||
if EMT.AUXIND == EMT.AUXTOT and EMT.MCHSPLIT and not EMT.TO_SPECSPLIT and not EMT.TO_FALL then
|
||||
EMT.SPLIT_Y1DELTA = EMT.Y1DELTA
|
||||
EMT.Y1DELTA = nil
|
||||
SetPY1Light( false)
|
||||
ExecMovePY1( false)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulPathEndAux()
|
||||
-- eseguo il comando
|
||||
ExecAuxCmd( EMT.AUX)
|
||||
ExecAuxCmd( EMT.AUX, false)
|
||||
-- se ultimo comando e richiesta risalita a Zmax
|
||||
if EMT.AUXIND == EMT.AUXTOT and EMT.TO_ZMAX then
|
||||
ExecMoveZmax( EMT.MCHSPLIT)
|
||||
ExecMoveZmax( EMT.MCHSPLIT, false)
|
||||
EMT.TO_ZMAX = nil
|
||||
end
|
||||
end
|
||||
@@ -881,7 +933,10 @@ function OnSimulMoveStart()
|
||||
local nRes = 0
|
||||
if bParkV then
|
||||
local bAgg = EgtExistsInfo( EMT.PATHID, 'CNT')
|
||||
-- se la lavorazione è un taglio di separazione, se necessario, ripristino posizione di Y1DELTA prima di aprire i rulli
|
||||
if EMT.SPLIT_Y1DELTA and not EMT.MCHSPLIT then EMT.Y1DELTA = EMT.SPLIT_Y1DELTA end
|
||||
nRes = ExecParkRoller( Y1Pos, Y2Pos, V1Pos, V2Pos, false, bAgg)
|
||||
if EMT.SPLIT_Y1DELTA then EMT.Y1DELTA = nil end
|
||||
end
|
||||
-- se movimento in rapido ad inizio lavorazione
|
||||
if EMT.MOVE == 0 and EMT.MOVEIND <= 3 then
|
||||
@@ -905,7 +960,7 @@ function OnSimulMoveStart()
|
||||
end
|
||||
SimulMoveAxis( 'X1', dXref, MCH_SIM_STEP.RAPID)
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H12' and ( EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, EMT.L2 < -LimX1RotSaw, EMT.L2 > -LimX1RotSaw) or EMT.R2 < -91) then
|
||||
if EMT.HEAD == 'H12' and ( EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, -EMT.L2 < -LimX1RotSaw, -EMT.L2 > -LimX1RotSaw) or EMT.R2 < -91) then
|
||||
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
|
||||
end
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
@@ -935,18 +990,18 @@ function OnSimulMoveStart()
|
||||
EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( dPosA))
|
||||
EmtModifyAxisHome( 'B1', ParkCSawB1)
|
||||
B1Home = EgtGetAxisHomePos( 'B1')
|
||||
C1Home = EgtGetAxisHomePos( 'C1')
|
||||
Z1Home = EgtGetAxisHomePos( 'Z1')
|
||||
EMT.CHSAW_OUT = nil
|
||||
end
|
||||
-- Porto la Z alla giusta quota
|
||||
if Z1Pos > Z1Home + 1 and abs( B1Pos) > 89.9 then
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z1', Z1Home, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- se movimento iniziale da Zmax
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'Z1', Z1Home, MCH_SIM_STEP.RAPID, 'B1', B1Home, MCH_SIM_STEP.COLLROT, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- se circa verticale
|
||||
else
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
-- altrimenti testa 2
|
||||
@@ -988,18 +1043,18 @@ function OnSimulMoveStart()
|
||||
EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( dPosA))
|
||||
EmtModifyAxisHome( 'B1', ParkCSawB1)
|
||||
B1Home = EgtGetAxisHomePos( 'B1')
|
||||
C1Home = EgtGetAxisHomePos( 'C1')
|
||||
Z1Home = EgtGetAxisHomePos( 'Z1')
|
||||
EMT.CHSAW_OUT = nil
|
||||
end
|
||||
-- Porto la Z alla giusta quota
|
||||
if Z1Pos > Z1Home + 1 and abs( B1Pos) > 89.9 then
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z1', Z1Home, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- se movimento iniziale da Zmax
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'Z1', Z1Home, MCH_SIM_STEP.RAPID, 'B1', B1Home, MCH_SIM_STEP.COLLROT, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- se circa verticale
|
||||
else
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
else
|
||||
@@ -1034,20 +1089,14 @@ function OnSimulMoveStart()
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- Porto la Z alla giusta quota
|
||||
if Z2Pos > Z2Home + 1 and abs( B2Pos) > 89.9 then
|
||||
SimulMoveAxis( 'X2', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z2', Z2Home, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- se movimento iniziale da Zmax
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
-- se pezzo molto alto e R3=0, mi sposto in X (per ora solo davanti)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxes( 'X2', SafeCSaw0X2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID, 'Z2', Z2Home, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
else
|
||||
SimulMoveAxes( 'Z2', Z2Home, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID, 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- se circa verticale
|
||||
else
|
||||
SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID, 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1127,7 +1176,7 @@ function OnSimulMoveEnd()
|
||||
-- se lavorazione split, dichiaro carro Y1 riagganciato
|
||||
if EMT.SPLIT_Y1DELTA then
|
||||
EMT.SPLIT_Y1DELTA = nil
|
||||
SetPY1Light( true)
|
||||
ExecMovePY1( true)
|
||||
end
|
||||
-- chiusura pinza speciale (e posizionamento iniziale)
|
||||
if EMT.W2DELTA then
|
||||
@@ -1164,8 +1213,12 @@ function OnSimulMoveEnd()
|
||||
if EMT.MOVE == 0 and EMT.FLAG == 3 then
|
||||
-- eventuale rimozione sfridi
|
||||
RemoveScraps()
|
||||
-- se Split o Presplit lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
||||
local sNextTool = GetNextTool( EMT.MCHID)
|
||||
-- vado in home se è ultimo movimento ed è ultima lavorazione, se sono con motosega e devo cambiare utensile, oppure se ho la lama
|
||||
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool) or ( EMT.HEAD == 'H23' and EMT.TOOL ~= sNextTool) or ( EMT.HEAD == 'H13' and EMT.TOOL ~= sNextTool) or EMT.HEAD == 'H12' or EMT.HEAD == 'H22'
|
||||
-- eseguo
|
||||
ExecMoveZmax( EMT.MCHSPLIT)
|
||||
ExecMoveZmax( EMT.MCHSPLIT, bToXhome)
|
||||
EMT.TO_ZMAX = nil
|
||||
end
|
||||
end
|
||||
@@ -1192,7 +1245,7 @@ function OnSimulCollision()
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecAuxCmd( sCmd)
|
||||
function ExecAuxCmd( sCmd, bPathStart)
|
||||
-- analizzo il comando
|
||||
local Cmd = EgtSplitString( sCmd)
|
||||
if Cmd[1] == '0' then
|
||||
@@ -1212,29 +1265,31 @@ function ExecAuxCmd( sCmd)
|
||||
end
|
||||
EgtOutText( Cmd[2])
|
||||
elseif Cmd[1] == '1' then
|
||||
if EMT.SPLIT or EMT.SPECSPLIT then ExecOpenRoller( 1) end
|
||||
if EMT.UNLOADING or EMT.TO_FALL or EMT.TO_SPECSPLIT then ExecOpenRoller( 2) end
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
local bOk, bOk1, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||
sV1, MoveV1, MCH_SIM_STEP.RAPID,
|
||||
sV2, MoveV2, MCH_SIM_STEP.RAPID)
|
||||
if not bOk then
|
||||
if not bOk1 then
|
||||
if VerifyY1Y2Stroke( Cmd[2], tonumber( Cmd[3])) == nil then
|
||||
EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd)
|
||||
if Cmd[2] ~= 'Z' then
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
local bOk, bOk1, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||
sV1, MoveV1, MCH_SIM_STEP.RAPID,
|
||||
sV2, MoveV2, MCH_SIM_STEP.RAPID)
|
||||
if not bOk then
|
||||
if not bOk1 then
|
||||
if VerifyY1Y2Stroke( Cmd[2], tonumber( Cmd[3])) == nil then
|
||||
EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd)
|
||||
end
|
||||
elseif not bOk2 then
|
||||
VerifyV1V2Stroke( sV1, MoveV1)
|
||||
elseif not bOk3 then
|
||||
VerifyV1V2Stroke( sV2, MoveV2)
|
||||
end
|
||||
elseif not bOk2 then
|
||||
VerifyV1V2Stroke( sV1, MoveV1)
|
||||
elseif not bOk3 then
|
||||
VerifyV1V2Stroke( sV2, MoveV2)
|
||||
end
|
||||
end
|
||||
elseif Cmd[1] == '2' then
|
||||
-- Verifico movimento carrello con trave agganciata
|
||||
VerifyOneChariotSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5])
|
||||
-- Eseguo i movimenti necessari
|
||||
if EMT.SPLIT then ExecOpenRoller( 1) end
|
||||
if EMT.UNLOADING or EMT.TO_FALL or EMT.TO_SPECSPLIT then ExecOpenRoller( 2) end
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
local bOk, bOk1, bOk2, bOk3, bOk4 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID,
|
||||
@@ -1256,8 +1311,8 @@ function ExecAuxCmd( sCmd)
|
||||
-- Verifico movimento carrelli con trave agganciata
|
||||
VerifyTwoChariotsSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5], Cmd[6], Cmd[7])
|
||||
-- Eseguo i movimenti necessari
|
||||
if EMT.SPLIT then ExecOpenRoller( 1) end
|
||||
if EMT.UNLOADING or EMT.TO_FALL or EMT.TO_SPECSPLIT then ExecOpenRoller( 2) end
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
local bOk, bOk1, bOk2, bOk3, bOk4, bOk5 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID,
|
||||
@@ -1277,15 +1332,13 @@ function ExecAuxCmd( sCmd)
|
||||
end
|
||||
end
|
||||
elseif Cmd[1] == '4' then
|
||||
ExecMoveHome( Cmd[2] == '1', EMT.MCHSPLIT)
|
||||
ExecMoveHome( Cmd[2] == '1', EgtIf( bPathStart, false, EMT.MCHSPLIT))
|
||||
elseif Cmd[1] == '11' then
|
||||
local dPY = EgtIf( Cmd[2] == '0', MaxHoOpen, EgtIf( EMT.ROT == -1, EMT.SB, EMT.HB))
|
||||
SimulMoveAxis( 'PY1', dPY, MCH_SIM_STEP.RAPID)
|
||||
SetPY1Light( Cmd[2] ~= '0')
|
||||
local bClose = Cmd[2] ~= '0'
|
||||
if bPathStart and EMT.MCHSPLIT and not EMT.FALL and GetPY2Light() then bClose = false end
|
||||
ExecMovePY1( bClose)
|
||||
elseif Cmd[1] == '12' then
|
||||
local dPY = EgtIf( Cmd[2] == '0', MaxHoOpen, EgtIf( EMT.ROT == -1, EMT.SB, EMT.HB))
|
||||
SimulMoveAxis( 'PY2', dPY, MCH_SIM_STEP.RAPID)
|
||||
SetPY2Light( Cmd[2] ~= '0')
|
||||
ExecMovePY2( Cmd[2] ~= '0')
|
||||
elseif Cmd[1] == '21' then
|
||||
local nY1Delta = tonumber( Cmd[2])
|
||||
local nY2Delta = tonumber( Cmd[3])
|
||||
@@ -1366,7 +1419,8 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function ExecMoveHome( bNearV, bMchSplit)
|
||||
-- risalita a Zmax
|
||||
ExecMoveZmax( bMchSplit)
|
||||
ExecMoveZmax( bMchSplit, true)
|
||||
EMT.TO_ZMAX = nil
|
||||
-- se richiesto, avvicino i rulli
|
||||
if bNearV then
|
||||
-- se sega a catena su testa 1 devo prima depositarla
|
||||
@@ -1411,7 +1465,7 @@ function ExecMoveHome( bNearV, bMchSplit)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecMoveZmax( bMchSplit)
|
||||
function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
-- set della testa
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
if nSetHead == 0 then return end
|
||||
@@ -1452,20 +1506,28 @@ function ExecMoveZmax( bMchSplit)
|
||||
SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
if btoXHome then
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- se lavorazione in doppio
|
||||
if EMT.DOU_TYPE == 2 then
|
||||
local CurrZ2 = EgtGetAxisPos( 'Z2')
|
||||
if CurrZ2 < ParkZ2 then
|
||||
SimulMoveAxes( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
|
||||
if bToXHome then
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
EMT.DOU_TO_ZMAX = nil
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxes( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID, 'B1', ParkB1, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
else
|
||||
@@ -1481,10 +1543,16 @@ function ExecMoveZmax( bMchSplit)
|
||||
SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
if btoXHome then
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxes( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID, 'B1', ParkB1, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1502,10 +1570,16 @@ function ExecMoveZmax( bMchSplit)
|
||||
SimulMoveAxis( 'B2', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
|
||||
-- altrimenti sega a catena
|
||||
if btoXHome then
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z2', HomeZ, MCH_SIM_STEP.RAPID, 'B2', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'X2', HomeX, MCH_SIM_STEP.RAPID, 'C2', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxes( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID, 'B2', ParkB2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxes( 'X2', HomeX, MCH_SIM_STEP.RAPID, 'C2', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
EMT.ZMAX = true
|
||||
@@ -1576,6 +1650,18 @@ function ExecUnloading()
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecMovePY1( bClose)
|
||||
SimulMoveAxis( 'PY1', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||
SetPY1Light( bClose)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecMovePY2( bClose)
|
||||
SimulMoveAxis( 'PY2', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||
SetPY2Light( bClose)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function LinkRemainingPartsToY1()
|
||||
local nCurrOrd = GetPhaseOrd( EMT.PHASE)
|
||||
@@ -1607,6 +1693,9 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
|
||||
-- Parcheggi pinze
|
||||
local MyParkY1 = ParkY1 + EgtIf( bAgg, AggLoad, 0)
|
||||
local MyParkY2 = ParkY2
|
||||
-- Apro i rulli, se necessario
|
||||
if abs( ParkV1 - PosV1) > 0.1 then ExecOpenRoller( 1) end
|
||||
if abs( ParkV2 - PosV2) > 0.1 then ExecOpenRoller( 2) end
|
||||
-- Eseguo spostamenti
|
||||
if EMT.Y1DELTA and EMT.Y2DELTA then
|
||||
local DiffY1 = MyParkY1 - PosY1
|
||||
@@ -1692,8 +1781,8 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
|
||||
local MoveV2 = ParkV2 - PosV2
|
||||
local DiffY2 = MyParkY2 - PosY2
|
||||
local MoveY2 = EgtIf( DiffY2 < -0.1, MoveV2, 0)
|
||||
local TryMoveY2 = ParkV2 - PosT - EMT.LT - EMT.HOVM
|
||||
if ( PosT + EMT.LT + EMT.HOVM < ParkV1 + ExtraParkV and PosT + EMT.LT + EMT.HOVM > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end
|
||||
local TryMoveY2 = ParkV2 - PosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM
|
||||
if ( PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM < ParkV1 + ExtraParkV and PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end
|
||||
if not SimulMoveAxes( 'T', PosT + MoveY2, MCH_SIM_STEP.RAPID,
|
||||
'V1', ParkV1, MCH_SIM_STEP.RAPID,
|
||||
'V2', ParkV2, MCH_SIM_STEP.RAPID,
|
||||
|
||||
+25
-6
@@ -4,9 +4,8 @@
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
-- Carico i dati globali
|
||||
local sBaseDir = EgtGetSourceDir()
|
||||
BD = dofile( sBaseDir .. 'Beam\\BeamData.lua')
|
||||
-- Carico libreria
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
---------------------- OnSpecialGetMaxZ -----------------------------
|
||||
---------------------------------------------------------------------
|
||||
@@ -291,6 +290,22 @@ local function GetNextStartOrRestPhase( nPhase)
|
||||
return nNextPhase
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function IsFirstMachiningOfStart( nMchId)
|
||||
-- se non è fase inizio di pezzo, ritorno risultato negativo
|
||||
if not IsStartOrRestPhase( EMC.PHASE) 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
|
||||
-- è la prima
|
||||
return true
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function GetPhaseRot( nPhase)
|
||||
return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ROT', 'i') or 0)
|
||||
@@ -839,6 +854,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
||||
EMC.SB = b3Tot:getDimY()
|
||||
EMC.HB = b3Tot:getDimZ()
|
||||
EMC.LT = b3Raw:getDimX()
|
||||
EgtOutLog( ' BarLen='..EgtNumToString( EMC.LB, 1), 3)
|
||||
|
||||
-- Aggiorno limiti di presa
|
||||
UpdateMinJoin()
|
||||
@@ -1297,6 +1313,9 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
||||
return {}
|
||||
end
|
||||
|
||||
-- al carico o con prima lavorazione di un pezzo si deve ignorare l'ingombro delle lavorazioni di testa per il pinzaggio
|
||||
if EMC.LOAD or IsFirstMachiningOfStart( EMC.MCHID) then EMC.HCING = 0 end
|
||||
|
||||
return SpecAdjustCarriages( WorkTab)
|
||||
|
||||
-- [B] se richiesti entrambi e posso metterli
|
||||
@@ -2466,8 +2485,8 @@ function SpecAdjustCarrB1( WorkTab)
|
||||
if not SpecTestSomeMoveInCmds( vCmd) then
|
||||
table.insert( vCmd, { 3, 'Y1', dY1PosI, 'Y2', dY2PosI, 'T', WorkTab.dTPosI, EMC.CNT})
|
||||
end
|
||||
table.insert( vCmd, { 11, 1}) -- chiudo Y1
|
||||
table.insert( vCmd, { 12, 1}) -- Chiudo Y2
|
||||
table.insert( vCmd, { 11, 1}) -- chiudo Y1
|
||||
-- imposto i nuovi parametri di aggancio
|
||||
table.insert( vCmd, { 21, dY1DeltaF, dY2DeltaF})
|
||||
EgtOutLog( ' Y1DeltaF=' .. EgtNumToString( dY1DeltaF) .. ' Y2DeltaF=' .. EgtNumToString( dY2DeltaF), 1)
|
||||
@@ -2538,8 +2557,8 @@ function SpecAdjustCarrB2( WorkTab)
|
||||
if not SpecTestSomeMoveInCmds( vCmd) then
|
||||
table.insert( vCmd, { 3, 'Y1', dY1PosI, 'Y2', dY2PosI, 'T', WorkTab.dTPosI, EMC.CNT})
|
||||
end
|
||||
table.insert( vCmd, { 11, 1}) -- chiudo Y1
|
||||
table.insert( vCmd, { 12, 1}) -- Chiudo Y2
|
||||
table.insert( vCmd, { 11, 1}) -- chiudo Y1
|
||||
-- imposto i nuovi parametri di aggancio
|
||||
table.insert( vCmd, { 21, dY1DeltaF, dY2DeltaF})
|
||||
EgtOutLog( ' Y1DeltaF=' .. EgtNumToString( dY1DeltaF) .. ' Y2DeltaF=' .. EgtNumToString( dY2DeltaF), 1)
|
||||
@@ -2599,7 +2618,7 @@ function SpecAdjustCarrC( WorkTab)
|
||||
WorkTab.dY1DeltaMaxF = EMC.LB - ( MinJoin + MyTCING)
|
||||
-- se Y1 deve accentrarsi
|
||||
if WorkTab.dY1DeltaI > WorkTab.dY1DeltaMaxF then
|
||||
WorkTab.dY1DeltaMinF = EMC.LB - 2 *( MinJoin + MyTCING)
|
||||
WorkTab.dY1DeltaMinF = EMC.LB - 2 * MinJoin - MyTCING
|
||||
end
|
||||
end
|
||||
-- posizioni obiettivo dei carrelli al centro dei rispettivi intervalli di validità
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
|
||||
REM Compilazione degli script macchina Egaltech 2024.02.22
|
||||
REM Per togliere info di debug aggiungere flag -s prima del nome del file di input
|
||||
|
||||
REM Compilazione 32 bit e copia file da non compilare
|
||||
|
||||
@echo off
|
||||
|
||||
REM chiedo all'utente la versione da assegnare alla macchina da compilare
|
||||
set /p "machineVersion=Inserisci versione: "
|
||||
|
||||
REM variabili per costruire i percorsi delle cartelle
|
||||
set "machineName=Essetre-ONE"
|
||||
set "deployFolder=C:\MachinesDeploy"
|
||||
set "machinePath=%deployFolder%\%machineName%\"
|
||||
set "fullPathSource=%deployFolder%\%machineName%\%machineVersion%\%machineName%"
|
||||
set "fullPathZip=%deployFolder%\%machineName%\%machineVersion%"
|
||||
|
||||
REM elimino eventuale cartella esistente
|
||||
rmdir /s /Q %fullPathZip%
|
||||
|
||||
REM copio i sorgenti nel percorso di destinazione
|
||||
ROBOCOPY . %fullPathSource%\ /E /XF "Compile.bat" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt"
|
||||
REM copio i sorgenti nel percorso temporaneo per i compilati
|
||||
ROBOCOPY . %fullPathSource%\bin\%machineName%\ /E /XF "Compile.bat" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt"
|
||||
|
||||
REM copio i file compilati nel percorso temporaneo per i compilati
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common_ONE-PF.mlpe Common-PF1250.mlpe
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common_ONE-PF.mlse Common-PF1250.mlse
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common_ONE-PF.NUM.mlpe Common-PF1250.TPA.mlpe
|
||||
|
||||
REM comprimo i file compilati in uno zip pronto per essere distribuito
|
||||
tar.exe acvf %fullPathZip%\%machineName%.zip -C %fullPathSource%\bin\ %machineName%\*.*
|
||||
|
||||
REM elimino il percorso temporaneo
|
||||
rmdir /s /Q %fullPathSource%\bin\
|
||||
+1
-1
@@ -133,7 +133,7 @@ Default=Standard
|
||||
|
||||
[Estimations]
|
||||
Enable=1
|
||||
WinPlace=0,514,138,628,810
|
||||
WinPlace=0,514,138,893,834
|
||||
|
||||
[VMill]
|
||||
Enable=1
|
||||
|
||||
+15
-5
@@ -1,4 +1,4 @@
|
||||
-- Descrizione macchina Essetre-ONE by EgalTech s.r.l. 2023/08/07
|
||||
-- Descrizione macchina Essetre-ONE by EgalTech s.r.l. 2024/02/07
|
||||
-- 2021/05/18 ver 2.3e5 Prima versione (in comune con PF).
|
||||
-- 2021/09/02 ver 2.3h1 Diverse correzioni per gestione carrelli con rotazione pezzo.
|
||||
-- 2021/09/27 ver 2.3i2 Recupero modifiche PF1250.
|
||||
@@ -38,16 +38,25 @@
|
||||
-- 2023/11/28 ver 2.6a1 Prima versione con utilizzo post-processore standard per macchine ONE e PF
|
||||
-- 2024/01/17 ver 2.6a2 Allineamento con Common ver. 2.6a2
|
||||
-- 2024/01/23 ver 2.6a3 Allineamento con Common ver. 2.6a3
|
||||
-- 2024/01/23 ver 2.6a4 Allineamento con Common ver. 2.6a5
|
||||
-- 2024/02/07 ver 2.6a5 Allineamento con Common ver. 2.6a6
|
||||
-- 2024/02/19 ver 2.6b1 In BeamData aggiunta funzione GetBlockedAxis che sostituisce la GetChainSawBlockedAxis.
|
||||
-- 2024/02/23 ver 2.6b2 Allineamento con common ver. 2.6b2; in mlde aggiunte chiamate EgtAddToPackagePath
|
||||
|
||||
-- Intestazioni
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
PP_VER = '2.6a3'
|
||||
PP_VER = '2.6b2'
|
||||
MIN_MACH_VER = '2.5k1'
|
||||
|
||||
local sBaseDir = EgtGetSourceDir()
|
||||
INFO_STD_PP = dofile( sBaseDir .. 'Version.lua')
|
||||
-- Carico i dati globali
|
||||
local sMachDir = EgtGetCurrMachineDir()
|
||||
-- Elimino direttori altre macchine e imposto direttorio macchina corrente per ricerca librerie
|
||||
EgtRemoveBaseMachineDirFromPackagePath()
|
||||
EgtAddToPackagePath( sMachDir .. '\\Beam\\?.lua')
|
||||
EgtAddToPackagePath( sMachDir .. '\\?.lua')
|
||||
INFO_STD_PP = require( 'Version')
|
||||
-- prendo la versione kernel minima necessaria più nuova tra macchina e script comuni
|
||||
if INFO_STD_PP.MIN_MACH_VER_PP_COMMON > MIN_MACH_VER then
|
||||
MIN_MACH_VER = INFO_STD_PP.MIN_MACH_VER_PP_COMMON
|
||||
@@ -118,6 +127,7 @@ ParkB1 = 90
|
||||
ParkFrnB1 = -90
|
||||
LimX1RotSaw = 2900
|
||||
LimX1PlRotSaw = 1965
|
||||
SafeCSaw0X1 = 1350
|
||||
ParkCSawX1 = 1350
|
||||
ParkCSawX1S = MinX1
|
||||
ParkCSawZ1 = -50
|
||||
@@ -142,7 +152,7 @@ CoeffVM = 0.5
|
||||
|
||||
-- Aggiornamento con dati da TechnoEssetre7
|
||||
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-ONE.data"
|
||||
local sData = EgtGetSourceDir().."\\Beam\\Ts3Data.lua"
|
||||
local sData = sMachDir.."\\Beam\\Ts3Data.lua"
|
||||
if EgtExistsFile( sTs3Data) then
|
||||
EgtCopyFile( sTs3Data, sData)
|
||||
local sTs3DataOld = sTs3Data..'.old'
|
||||
|
||||
+46
-5
@@ -1,5 +1,39 @@
|
||||
==== Essetre_StdPF Update Log ====
|
||||
|
||||
versione 2.6b2 (26/02/2024)
|
||||
- (MLDE-SIM-GEN) EgtAddToPackagePath spostato in mlde
|
||||
|
||||
versione 2.6b1 (20/02/2024)
|
||||
- (SIM) Corretto controllo calcolo Z su primo movimento lama, allineato a generazione
|
||||
- (GEN) Corretto emissione movimenti per macchine con motosega su testa 2
|
||||
- (SIM) Aggiunta funzioni "OnSimulInit" e "OnSimulExit" per orientare vista corretta in caso di macchina con carico destro. N.B.= serve CAM5 2.6b4
|
||||
- (ALL) "BeamData" caricato come libreria con 'require' anziché come file con 'dofile'
|
||||
- (GEN) In "GetMovesInAuxCmd" si passa la posizione calcolata V1 indipendentemente dall'utilizzo di Y1
|
||||
|
||||
versione 2.6a7 (12/02/2024)
|
||||
- (GEN) Per movimento con motosega, si ribadiscono tutti gli assi nella prima G141
|
||||
|
||||
versione 2.6a6 (02/02/2024)
|
||||
- (SIM) Corretta simulazione movimento in X-Home, coerente con generazione
|
||||
- (GEN) Aggiunta lettura parametro 'Split'
|
||||
- (SIM) Se lavorazione è un taglio di separazione, se necessario, ripristino posizione di Y1DELTA prima di aprire i rulli
|
||||
- (SIM-GEN) Modificata gestione movimenti motosega, in aggiunta con caso particolare di pezzo alto più di 650mm
|
||||
- (ALL) Caricamento BeamData come local
|
||||
|
||||
versione 2.6a5 (26/01/2024)
|
||||
- (SIM-GEN) Migliorato calcolo dimensioni grezzo per apertura rulli in caso di 'precut'
|
||||
|
||||
versione 2.6a4 (24/01/2024)
|
||||
- (GEN) Se pezzo tenuto solo con pinza destra non si esclude la rulliera di sinistra, se pezzogrande, può venire in supporto
|
||||
- (SIM-GEN) Correzione gestione apertura/chiusura rulli sul fine barra e in generale (da PF1250)
|
||||
- (SIM) Aggiunto solido collisione lama sotto traversa (per PF-progress)
|
||||
|
||||
Versione 2.6a3 (23/01/2024)
|
||||
- (GEN) Corretto gestione del movimento precedente all'ultimo che manda il pezzo alla posizione di scarico
|
||||
|
||||
Versione 2.6a2 (09/01/2024)
|
||||
- Nuova versione. Prima versione stabile rilasciabile.
|
||||
|
||||
Versione 2.6a1 (28/11/2023)
|
||||
- Prima versione post-proc comune tra macchine ONE e PF
|
||||
- (SIM) Corretta visualizzazione motosega in caso sia stata scaricata ( per paratie rulli compattate per passaggio pezzo)
|
||||
@@ -9,10 +43,17 @@ Versione 2.6a1 (28/11/2023)
|
||||
- (GEN+MLDE) Inserita gestione macro con carico ottimizzato. Macro macchina presente come standard solo su macchine PF. Parametro "OptimizedLoadBeam"
|
||||
- (GEN+SIM) Migliorata gestione riposizionamento pinze, in caso testa debba andare in home
|
||||
- (GEN) Se a zeta massima con lama e utensile successivo diverso, mi sposto sempre verso X-HOME
|
||||
- (GEN) Corretto movimento in caso di testa 1 su TC-2. Utilizzava le quote della testa 2 anziché della 1.
|
||||
- (GEN) Corretto movimento in caso di testa 1 su TC-2. Utilizzava le quote della testa 2 anziché della 1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Versione 2.6a2 (09/01/2024)
|
||||
- Nuova versione. Prima versione stabile rilasciabile.
|
||||
|
||||
Versione 2.6a3 (23/01/2024)
|
||||
- (GEN) Corretto gestione del movimento precedente all'ultimo che manda il pezzo alla posizione di scarico
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_ONE-PF', -- nome script PP standard
|
||||
VERSION = '2.6a3', -- versione script
|
||||
VERSION = '2.6b2', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user