Compare commits
68 Commits
NewTopColl
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
| d8cd917aaf | |||
| ba63901305 | |||
| 507e75121f | |||
| 6d937b7e88 | |||
| 656982ca9c | |||
| d3c62ee5a9 | |||
| 89e2c495d1 | |||
| a58ed6015f | |||
| f4f94827d5 | |||
| 948df5b056 | |||
| 16510ed17f | |||
| 27bb16b3b7 | |||
| 43166831e8 | |||
| c509cefe08 | |||
| c520f90a5b | |||
| 35d573cc20 | |||
| 69054d2c90 | |||
| cddc5abcc1 | |||
| 0324b24222 | |||
| a845258a81 | |||
| 5486fab487 | |||
| d2f093772d | |||
| a362c59c6f | |||
| 69de0b9cc5 | |||
| dc14d46bbc | |||
| c4270df480 | |||
| 096d04f640 | |||
| 2d8d5a38a6 | |||
| 4fcf50951b | |||
| 4b2827f2cd | |||
| 29dddf0d52 | |||
| 45148ee0c5 | |||
| bc7fa48823 | |||
| 05ebbc9221 | |||
| ae772c6f74 | |||
| 164ad6fca4 | |||
| a97c8673f4 | |||
| a909f2460c | |||
| ff8044959a | |||
| 4454b1f069 | |||
| 00b67bd918 | |||
| b00d600839 | |||
| aad4c3cfd7 | |||
| c26ba36f6d | |||
| ba2f6b46f3 | |||
| bc541ddd24 | |||
| a64e4bd840 | |||
| 30b8fc08bd | |||
| bbfff9f9c2 | |||
| 12ffc06055 | |||
| 34f5f655d1 | |||
| e08d54b436 | |||
| e2bf7b4cd1 | |||
| 7d5eb3ab3e | |||
| 74a79b9767 | |||
| d82e8876d0 | |||
| bea64cd05f | |||
| 0ebd4ca860 | |||
| 36d6ad355f | |||
| eac1d9b636 | |||
| e38c1d5c02 | |||
| ca08fa89b3 | |||
| 61b81d07e0 | |||
| 7c32cf62c7 | |||
| 9af3f82691 | |||
| 87b6fad2d9 | |||
| ea0abe4368 | |||
| eca719326b |
@@ -1,6 +1,7 @@
|
|||||||
/Tools
|
/Tools
|
||||||
/Machinings
|
/Machinings
|
||||||
/SetUp
|
/SetUp
|
||||||
|
/Beam/AISetup
|
||||||
/Beam/Ts3Data.bak
|
/Beam/Ts3Data.bak
|
||||||
/Beam/CutData.lua
|
/Beam/CutData.lua
|
||||||
/Beam/DrillData.lua
|
/Beam/DrillData.lua
|
||||||
|
|||||||
+109
-63
@@ -9,8 +9,8 @@ local BeamData = {
|
|||||||
RIGHT_LOAD = false, -- flag carico da destra
|
RIGHT_LOAD = false, -- flag carico da destra
|
||||||
ROT90 = false, -- flag abilitazione rotazione 90 gradi
|
ROT90 = false, -- flag abilitazione rotazione 90 gradi
|
||||||
ROT180 = true, -- flag abilitazione rotazione 180 gradi
|
ROT180 = true, -- flag abilitazione rotazione 180 gradi
|
||||||
NEWCLAMPING = false, -- flag abilitazione nuovo metodo riposizionamento carrelli
|
NEWCLAMPING = true, -- flag abilitazione nuovo metodo riposizionamento carrelli
|
||||||
FASTCLAMPING= true, -- flag abilitazione riduzione numero riposizionamenti al carico e durante grande trascinamento
|
FASTCLAMPING= false, -- flag abilitazione riduzione numero riposizionamenti al carico e durante grande trascinamento
|
||||||
MIN_WIDTH = 40, -- larghezza minima del grezzo
|
MIN_WIDTH = 40, -- larghezza minima del grezzo
|
||||||
MIN_HEIGHT = 40, -- altezza minima del grezzo
|
MIN_HEIGHT = 40, -- altezza minima del grezzo
|
||||||
MAX_WIDTH = 240, -- larghezza massima del grezzo
|
MAX_WIDTH = 240, -- larghezza massima del grezzo
|
||||||
@@ -42,6 +42,7 @@ local BeamData = {
|
|||||||
DRILL_VZ_MIN = -0.51, -- componente limite in Z del versore di un foro
|
DRILL_VZ_MIN = -0.51, -- componente limite in Z del versore di un foro
|
||||||
DRILL_VX_MAX = 0.867, -- componente limite in X del versore di un foro sulle facce laterali
|
DRILL_VX_MAX = 0.867, -- componente limite in X del versore di un foro sulle facce laterali
|
||||||
DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature
|
DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature
|
||||||
|
MAX_ANGLE_DRILL_CUT = 10, -- angolo massimo tra la foratura e il taglio che la attraversa
|
||||||
MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature
|
MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature
|
||||||
MAX_DIST_HTFEA = 50.0, -- massima distanza di feature da testa o coda per essere considerata tale
|
MAX_DIST_HTFEA = 50.0, -- massima distanza di feature da testa o coda per essere considerata tale
|
||||||
MAX_LEN_HTFEA = 2000.0, -- massima lunghezza di feature di testa o coda
|
MAX_LEN_HTFEA = 2000.0, -- massima lunghezza di feature di testa o coda
|
||||||
@@ -76,6 +77,7 @@ local BeamData = {
|
|||||||
PRECUT_TAIL = true, -- flag abilitazione pretaglio grezzo a zero in coda
|
PRECUT_TAIL = true, -- flag abilitazione pretaglio grezzo a zero in coda
|
||||||
MIN_HEIGHT_ADDED_CUTS = 400, -- altezza minima pezzo per effettuare tagli orizzontali aggiuntivi in testa e coda
|
MIN_HEIGHT_ADDED_CUTS = 400, -- altezza minima pezzo per effettuare tagli orizzontali aggiuntivi in testa e coda
|
||||||
GAIN_RECLAMPING = 1000, -- in caso di scarso pinzaggio, mm da recuperare con pinzaggio ulteriore prima di spostare
|
GAIN_RECLAMPING = 1000, -- in caso di scarso pinzaggio, mm da recuperare con pinzaggio ulteriore prima di spostare
|
||||||
|
NEWTOPC = true,
|
||||||
STRATEGIES_SCRIPT = 'Essetre',
|
STRATEGIES_SCRIPT = 'Essetre',
|
||||||
STRATEGIES_CONFIG_FILE = 'Std1.json'
|
STRATEGIES_CONFIG_FILE = 'Std1.json'
|
||||||
}
|
}
|
||||||
@@ -104,6 +106,7 @@ if EgtExistsFile( sData) then
|
|||||||
BeamData.MAXDIAM_POCK_CORNER = Machine.Offsets.MAXDIAM_POCK_CORNER or BeamData.MAXDIAM_POCK_CORNER
|
BeamData.MAXDIAM_POCK_CORNER = Machine.Offsets.MAXDIAM_POCK_CORNER or BeamData.MAXDIAM_POCK_CORNER
|
||||||
BeamData.LONGCUT_ENDLEN = Machine.Offsets.LONGCUT_ENDLEN or BeamData.LONGCUT_ENDLEN
|
BeamData.LONGCUT_ENDLEN = Machine.Offsets.LONGCUT_ENDLEN or BeamData.LONGCUT_ENDLEN
|
||||||
BeamData.LONGCUT_MAXLEN = Machine.Offsets.LONGCUT_MAXLEN or BeamData.LONGCUT_MAXLEN
|
BeamData.LONGCUT_MAXLEN = Machine.Offsets.LONGCUT_MAXLEN or BeamData.LONGCUT_MAXLEN
|
||||||
|
if Machine.Offsets.MAX_ANGLE_DRILL_CUT then BeamData.MAX_ANGLE_DRILL_CUT = EgtClamp( Machine.Offsets.MAX_ANGLE_DRILL_CUT, 1, 89) end
|
||||||
BeamData.ADVANCE_TAIL_OFFS = Machine.Offsets.ADVANCE_TAIL_OFFS or BeamData.ADVANCE_TAIL_OFFS
|
BeamData.ADVANCE_TAIL_OFFS = Machine.Offsets.ADVANCE_TAIL_OFFS or BeamData.ADVANCE_TAIL_OFFS
|
||||||
BeamData.LEN_VERY_SHORT_PART = Machine.Offsets.LEN_VERY_SHORT_PART or BeamData.LEN_VERY_SHORT_PART
|
BeamData.LEN_VERY_SHORT_PART = Machine.Offsets.LEN_VERY_SHORT_PART or BeamData.LEN_VERY_SHORT_PART
|
||||||
BeamData.LEN_SHORT_PART = Machine.Offsets.LEN_SHORT_PART or BeamData.LEN_SHORT_PART
|
BeamData.LEN_SHORT_PART = Machine.Offsets.LEN_SHORT_PART or BeamData.LEN_SHORT_PART
|
||||||
@@ -117,6 +120,8 @@ if EgtExistsFile( sData) then
|
|||||||
if Machine.Offsets.FASTCLAMPING ~= nil then BeamData.FASTCLAMPING = ( Machine.Offsets.FASTCLAMPING == 1) end
|
if Machine.Offsets.FASTCLAMPING ~= nil then BeamData.FASTCLAMPING = ( Machine.Offsets.FASTCLAMPING == 1) end
|
||||||
if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end
|
if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end
|
||||||
if Machine.Offsets.ROT180 ~= nil then BeamData.ROT180 = ( Machine.Offsets.ROT180 == 1) end
|
if Machine.Offsets.ROT180 ~= nil then BeamData.ROT180 = ( Machine.Offsets.ROT180 == 1) end
|
||||||
|
if Machine.Offsets.CUT_SIC then BeamData.CUT_SIC = EgtClamp( Machine.Offsets.CUT_SIC, 15, 50) end
|
||||||
|
if Machine.Offsets.NEWTOPC then BeamData.NEWTOPC = ( Machine.Offsets.NEWTOPC == 1) end
|
||||||
end
|
end
|
||||||
if Machine.Trave then
|
if Machine.Trave then
|
||||||
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
|
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
|
||||||
@@ -190,69 +195,107 @@ end
|
|||||||
BeamData.GetChainSawInitAngs = GetChainSawInitAngs
|
BeamData.GetChainSawInitAngs = GetChainSawInitAngs
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function GetMinNzTopHead( vtNFace)
|
local function GetSCC( vtToolDirection, vtEdgeDirection, vtNFace)
|
||||||
if vtNFace and abs( vtNFace:getY()) > 0.8659 then
|
local nSCC = MCH_SCC.NONE
|
||||||
return -0.2499
|
|
||||||
|
if abs( vtToolDirection:getX()) > abs( vtToolDirection:getY()) - GEO.EPS_SMALL then
|
||||||
|
-- se il taglio è orizzontale, si gira aggregato lama per facilitare caduta del legno
|
||||||
|
if abs( vtEdgeDirection:getZ()) < 10 * GEO.EPS_SMALL and not AreSameOrOppositeVectorApprox( vtNFace, Z_AX()) then
|
||||||
|
nSCC = EgtIf( ( vtToolDirection:getX() > -GEO.EPS_SMALL), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP)
|
||||||
|
else
|
||||||
|
nSCC = EgtIf( ( vtToolDirection:getX() > -GEO.EPS_SMALL), MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
return sin( -45)
|
-- se il taglio è orizzontale, si gira aggregato lama per facilitare caduta del legno
|
||||||
|
if abs( vtEdgeDirection:getZ()) < 10 * GEO.EPS_SMALL and not AreSameOrOppositeVectorApprox( vtNFace, Z_AX()) then
|
||||||
|
nSCC = EgtIf( ( vtToolDirection:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP)
|
||||||
|
else
|
||||||
|
nSCC = EgtIf( ( vtToolDirection:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return nSCC
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function GetMinNzDownUp( b3Raw, vtNFace, vtToolDirection)
|
-- sAxis può essere AB, C, Z; restituisce direzioni, profondità di estrusione e punti per il controllo precollisione
|
||||||
if vtToolDirection and vtToolDirection:getZ() > 0.35 then
|
local function GetPreCollisionData( sAxis, vtC, vtHead)
|
||||||
-- N_HorAng < 15° or N_HorAng > 55°
|
|
||||||
if vtNFace and ( abs( vtNFace:getY()) < 0.259 or abs( vtNFace:getY()) > 0.819) then
|
local PreCollisionData = {}
|
||||||
return -0.708
|
|
||||||
-- N_HorAng > 50°
|
-- Pivot uguale per tutti; non c'è aggregato quindi non dipende da SCC
|
||||||
elseif vtNFace and abs( vtNFace:getY()) > 0.766 then
|
-- riferimento vtPivot
|
||||||
return -0.383
|
-- - vtHead (Z): asse rotazione utensile, guarda il mandrino
|
||||||
else
|
-- - vtToolSCC (X): direzione asse C o aggregato
|
||||||
return EgtIf( b3Raw:getDimZ() < BeamData.MIN_DIM_HBEAM, -0.609, -0.383)
|
-- - vtEdge (Y): direzione lato, verso in base a X e Z
|
||||||
end
|
-- - punto di applicazione: naso mandrino o aggregato
|
||||||
elseif vtToolDirection and vtToolDirection:getZ() < - 0.01
|
PreCollisionData.vtMovePivot = Vector3d( 0, 0, 242.55)
|
||||||
and ( vtNFace and ( abs( vtNFace:getY()) > 0.983))
|
|
||||||
and ( b3Raw:getDimY() < 210) then
|
-- carro Z
|
||||||
|
if sAxis == 'Z' then
|
||||||
return -0.173
|
|
||||||
else
|
PreCollisionData.Directions = { vtDirectionX = X_AX(), vtDirectionY = Z_AX(), vtDirectionZ = -Y_AX()}
|
||||||
-- N_HorAng > 60°
|
PreCollisionData.bSurfTmByRevolve = true
|
||||||
if vtNFace and ( abs( vtNFace:getY()) > 0.866) then
|
PreCollisionData.Points = {
|
||||||
return -0.708
|
Point3d( 0, 523, 0),
|
||||||
else
|
Point3d( 109.556, 523, 0),
|
||||||
if b3Raw:getDimZ() < 120 then
|
Point3d( 109.556, 583, 0),
|
||||||
return -0.708
|
Point3d( 143.113, 583, 0),
|
||||||
elseif b3Raw:getDimZ() < 200 then
|
Point3d( 143.113, 2533, 0),
|
||||||
-- N_HorAng < 15° or N_HorAng > 55°
|
Point3d( 0, 2533, 0)
|
||||||
if vtNFace and ( abs( vtNFace:getY()) < 0.259 or abs( vtNFace:getY()) > 0.819) then
|
}
|
||||||
return -0.5
|
|
||||||
else
|
-- motore (asse A o B)
|
||||||
return -0.383
|
elseif sAxis == 'AB' then
|
||||||
end
|
|
||||||
elseif b3Raw:getDimZ() < 300 then
|
PreCollisionData.Directions = { vtDirectionX = vtC, vtDirectionY = -vtHead, vtDirectionZ = vtC ^ -vtHead}
|
||||||
-- N_HorAng < 10°
|
PreCollisionData.dExtrusionDepth = 180
|
||||||
if vtNFace and ( abs( vtNFace:getY()) < 0.174) then
|
PreCollisionData.Points = {
|
||||||
return -0.5
|
Point3d( 100,-122,0),
|
||||||
else
|
Point3d( 100, -232.5, 0),
|
||||||
return -0.259
|
Point3d( -90, -232.5, 0),
|
||||||
end
|
Point3d( -90, 204.505, 0),
|
||||||
elseif b3Raw:getDimZ() < BeamData.MIN_DIM_HBEAM then
|
Point3d( -77.5, 216.55, 0),
|
||||||
-- N_HorAng < 10°
|
Point3d( -89, 234.05, 0),
|
||||||
if vtNFace and ( abs( vtNFace:getY()) < 0.174) then
|
Point3d( -89, 242.55, 0),
|
||||||
return -0.342
|
Point3d( 89, 242.55, 0),
|
||||||
else
|
Point3d( 89, 234.05, 0),
|
||||||
return -0.259
|
Point3d( 77.5, 216.55, 0),
|
||||||
end
|
Point3d( 90, 204.505, 0),
|
||||||
else
|
Point3d( 90, 93, 0),
|
||||||
-- N_HorAng < 10°
|
Point3d( 125, 93, 0),
|
||||||
if vtNFace and ( abs( vtNFace:getY()) < 0.174) then
|
Point3d( 125, -122, 0),
|
||||||
return -0.383
|
Point3d( 100, -122, 0)
|
||||||
else
|
}
|
||||||
return -0.188
|
|
||||||
end
|
-- asse C
|
||||||
end
|
elseif sAxis == 'C' then
|
||||||
end
|
|
||||||
|
PreCollisionData.Directions = { vtDirectionX = vtC, vtDirectionY = Z_AX(), vtDirectionZ = vtC ^ Z_AX()}
|
||||||
|
PreCollisionData.dExtrusionDepth = 200
|
||||||
|
PreCollisionData.Points = {
|
||||||
|
Point3d( 125, -92.752, 0),
|
||||||
|
Point3d( 203.5, -92.752, 0),
|
||||||
|
Point3d( 203.5, -100, 0),
|
||||||
|
Point3d( 400, -100, 0),
|
||||||
|
Point3d( 450, -50, 0),
|
||||||
|
Point3d( 450, 400, 0),
|
||||||
|
Point3d( 360, 490, 0),
|
||||||
|
Point3d( 170, 490, 0),
|
||||||
|
Point3d( 170, 523, 0),
|
||||||
|
Point3d( EgtIf( BeamData.NEWTOPC, -110, -175), 523, 0),
|
||||||
|
Point3d( EgtIf( BeamData.NEWTOPC, -110, -175), 400, 0),
|
||||||
|
Point3d( 230.858, 400, 0),
|
||||||
|
Point3d( 325, 305.858, 0),
|
||||||
|
Point3d( 325, 146, 0),
|
||||||
|
Point3d( 203.5, 146, 0),
|
||||||
|
Point3d( 203.5, 93, 0),
|
||||||
|
Point3d( 125, 93, 0),
|
||||||
|
Point3d( 125, -92.752, 0)
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return PreCollisionData
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -263,20 +306,23 @@ local function GetSetupInfo( sHead)
|
|||||||
SetupInfo.bIsCSymmetrical = false
|
SetupInfo.bIsCSymmetrical = false
|
||||||
SetupInfo.dCAxisEncumbrance = 180
|
SetupInfo.dCAxisEncumbrance = 180
|
||||||
SetupInfo.dCAxisSideEncumbrance = 200
|
SetupInfo.dCAxisSideEncumbrance = 200
|
||||||
SetupInfo.dPivot = 175
|
SetupInfo.dPivot = 175 -- per uscita fresa, diverso da uscita lama
|
||||||
SetupInfo.bToolOnAggregate = false
|
SetupInfo.bToolOnAggregate = false
|
||||||
|
SetupInfo.vtRotationAxisC = Z_AX()
|
||||||
|
SetupInfo.vtRotationAxisAB = X_AX()
|
||||||
|
|
||||||
-- testa 5 assi da sopra
|
-- testa 5 assi da sopra
|
||||||
if sHead == 'H1' then
|
if sHead == 'H1' then
|
||||||
SetupInfo.HeadType = { bTop = true, bBottom = false}
|
SetupInfo.HeadType = { bTop = true, bBottom = false}
|
||||||
SetupInfo.PreferredSide = {}
|
SetupInfo.PreferredSide = {}
|
||||||
SetupInfo.GetMinNz = GetMinNzTopHead
|
SetupInfo.GetMinNz = function() return sin( -45) end
|
||||||
-- lama su testa 5 assi da sopra
|
-- lama su testa 5 assi da sopra
|
||||||
elseif sHead == 'H2' then
|
elseif sHead == 'H2' then
|
||||||
SetupInfo.HeadType = { bTop = true, bBottom = false}
|
SetupInfo.HeadType = { bTop = true, bBottom = false}
|
||||||
SetupInfo.PreferredSide = {}
|
SetupInfo.PreferredSide = {}
|
||||||
SetupInfo.GetMinNz = GetMinNzTopHead
|
SetupInfo.GetMinNz = function() return sin( -45) end
|
||||||
SetupInfo.GetMinNzDownUp = GetMinNzDownUp
|
SetupInfo.GetPreCollisionData = GetPreCollisionData
|
||||||
|
SetupInfo.GetSCC = GetSCC
|
||||||
-- motosega
|
-- motosega
|
||||||
elseif sHead == 'H3' then
|
elseif sHead == 'H3' then
|
||||||
SetupInfo.HeadType = { bTop = true, bBottom = false}
|
SetupInfo.HeadType = { bTop = true, bBottom = false}
|
||||||
|
|||||||
@@ -0,0 +1,302 @@
|
|||||||
|
-- BeamData.lua by Egalware s.r.l. 2025/12/03
|
||||||
|
-- Raccolta dati generali per Travi
|
||||||
|
|
||||||
|
EgtOutLog( ' FAST-BeamData started', 1)
|
||||||
|
|
||||||
|
-- Tabella per definizione modulo
|
||||||
|
local BeamData = {
|
||||||
|
RIGHT_LOAD = false, -- flag carico da destra
|
||||||
|
ROT90 = false, -- flag abilitazione rotazione 90 gradi
|
||||||
|
ROT180 = true, -- flag abilitazione rotazione 180 gradi
|
||||||
|
MIN_WIDTH = 40, -- larghezza minima del grezzo
|
||||||
|
MIN_HEIGHT = 40, -- altezza minima del grezzo
|
||||||
|
MAX_WIDTH = 240, -- larghezza massima del grezzo
|
||||||
|
MAX_HEIGHT = 625, -- altezza massima del grezzo
|
||||||
|
MAX_WIDTH2 = 305, -- seconda larghezza massima del grezzo
|
||||||
|
MAX_HEIGHT2 = 625, -- altezza massima per seconda larghezza massima del grezzo
|
||||||
|
LEN_SHORT_PART = 1200, -- RENAME lunghezza massima pezzo corto
|
||||||
|
LEN_VERY_SHORT_PART = 400, -- RENAME lunghezza massima pezzo molto corto (molto probabile lo scarico a caduta)
|
||||||
|
MAX_RAW = 30000, -- massima lunghezza grezzo (deve essere minore di LenTable - RAW_OFFSET)
|
||||||
|
STD_RAW = 14000, -- lunghezza standard della barra di grezzo
|
||||||
|
OVM_HEAD = 10, -- sovramateriale testa
|
||||||
|
OVM_MID = 5.4, -- sovramateriale intermedio (spessore lama)
|
||||||
|
MINRAW_S = 750, -- minimo grezzo in coda scaricabile per sezioni piccole
|
||||||
|
MINRAW_L = 1070, -- minimo grezzo in coda scaricabile per sezioni grandi
|
||||||
|
MAX_DIM_HTCUT = 200, -- SOLO DICE larghezza massima taglio di testa o coda
|
||||||
|
MIN_DIM_HBEAM = 380, -- SOLO DICE altezza minima di trave alta
|
||||||
|
MAX_DIM_DICE = 155, -- dimensione trasversale massima cubetto
|
||||||
|
MAX_LEN_DICE = 400, -- SOLO DICE lunghezza massima cubetto
|
||||||
|
COLL_SIC = 5, -- distanza di sicurezza per collisioni
|
||||||
|
CUT_SIC = 20, -- distanza di sicurezza per tagli
|
||||||
|
CUT_EXTRA = 5, -- affondamento extra standard per tagli di lama e fresature
|
||||||
|
CUT_EXTRA_MIN = 1, -- affondamento extra ridotto per tagli di lama e fresature
|
||||||
|
MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature
|
||||||
|
LONGCUT_ENDLEN = 600, -- RENAME??lunghezza lavoro estremi iniziale e finale (std=600)
|
||||||
|
LONGCUT_MAXLEN = 1200, -- RENAME??lunghezza massima sezione di taglio longitudinale
|
||||||
|
DIM_STRIP = -1, -- dimensione codolo sostegno parti lasciate su contorno libero o archi (-1 = da Q...)
|
||||||
|
DIM_STRIP_SMALL = 1, -- dimensione codolo piccolo (quando le parti sostenute sono sicuramente sulla parte sopra del pezzo)
|
||||||
|
RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo
|
||||||
|
RAW_OFFSET = 2000, -- spostamento grezzo rimanente dopo split
|
||||||
|
VICE_MINH = 110, -- altezza minima della morsa
|
||||||
|
VICE_MAXH = 370, -- altezza massima zona pinzaggio orizzontale
|
||||||
|
USER_HOLE_DIAM = 0, -- diametro foro per L20
|
||||||
|
STRATEGIES_SCRIPT = 'Essetre',
|
||||||
|
STRATEGIES_CONFIG_FILE = 'Std1.json'
|
||||||
|
}
|
||||||
|
|
||||||
|
-- costanti riportate da mlde non necessarie per automatismo (sostituire con GetParameters o simile)
|
||||||
|
local MldeParameters = {}
|
||||||
|
MldeParameters.NumericalControl = 'TPA' -- NUM o TPA o NUM_PLUS
|
||||||
|
MldeParameters.MinX = 0
|
||||||
|
MldeParameters.MaxX = 1350
|
||||||
|
MldeParameters.MinZ = -1350
|
||||||
|
MldeParameters.MaxZ = 0
|
||||||
|
MldeParameters.MillOffs = 177.35
|
||||||
|
MldeParameters.SawOffs = -242.68
|
||||||
|
MldeParameters.DeltaTabY = 898.0
|
||||||
|
MldeParameters.DeltaTabZ = -1017.8 + MldeParameters.MillOffs -- per TPA : -1013.3 + MillOffs -- per NUM : -838.4
|
||||||
|
MldeParameters.NewTopC = true
|
||||||
|
|
||||||
|
-- Aggiornamento con dati macchina personalizzati
|
||||||
|
-- TODO sostituire con GetParameters o simile
|
||||||
|
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-Fast.data"
|
||||||
|
local sData = EgtGetCurrMachineDir().."\\Beam\\Ts3Data.lua"
|
||||||
|
if EgtExistsFile( sTs3Data) then
|
||||||
|
EgtCopyFile( sTs3Data, sData)
|
||||||
|
local sTs3DataOld = sTs3Data..'.old'
|
||||||
|
EgtEraseFile( sTs3DataOld)
|
||||||
|
EgtRenameFile( sTs3Data, sTs3DataOld)
|
||||||
|
end
|
||||||
|
if EgtExistsFile( sData) then
|
||||||
|
local Machine = dofile( sData)
|
||||||
|
if Machine then
|
||||||
|
if Machine.Offsets then
|
||||||
|
if Machine.Offsets.TIPO_CN == 0 then
|
||||||
|
MldeParameters.NumericalControl = 'NUM'
|
||||||
|
elseif Machine.Offsets.TIPO_CN == 2 then
|
||||||
|
MldeParameters.NumericalControl = 'NUM_PLUS'
|
||||||
|
else
|
||||||
|
MldeParameters.NumericalControl = 'TPA'
|
||||||
|
end
|
||||||
|
if Machine.Offsets.MAX_X then MldeParameters.MinX = - Machine.Offsets.MAX_X end
|
||||||
|
if Machine.Offsets.MIN_X then MldeParameters.MaxX = - Machine.Offsets.MIN_X end
|
||||||
|
if Machine.Offsets.MIN_Z then MldeParameters.MinZ = Machine.Offsets.MIN_Z end
|
||||||
|
if Machine.Offsets.MAX_Z then MldeParameters.MaxZ = Machine.Offsets.MAX_Z end
|
||||||
|
if Machine.Offsets.PIVOTFRESA then MldeParameters.MillOffs = - Machine.Offsets.PIVOTFRESA end
|
||||||
|
if Machine.Offsets.PIVOTLAMA then MldeParameters.SawOffs = - Machine.Offsets.PIVOTLAMA end
|
||||||
|
if Machine.Offsets.OFFSETX then MldeParameters.DeltaTabY = - Machine.Offsets.OFFSETX end
|
||||||
|
if Machine.Offsets.OFFSETZ then MldeParameters.DeltaTabZ = Machine.Offsets.OFFSETZ + EgtIf( MldeParameters.NumericalControl == 'TPA', MldeParameters.MillOffs, 0) end
|
||||||
|
if Machine.Offsets.NEWTOPC then MldeParameters.NewTopC = ( Machine.Offsets.NEWTOPC == 1) end
|
||||||
|
BeamData.MINRAW_S = max( BeamData.MINRAW_S, Machine.Offsets.MINRAW_S or BeamData.MINRAW_S)
|
||||||
|
BeamData.MINRAW_L = max( BeamData.MINRAW_L, Machine.Offsets.MINRAW_L or BeamData.MINRAW_L)
|
||||||
|
BeamData.CUT_EXTRA = Machine.Offsets.CUT_EXTRA or BeamData.CUT_EXTRA
|
||||||
|
BeamData.CUT_EXTRA_MIN = Machine.Offsets.CUT_EXTRA_MIN or BeamData.CUT_EXTRA_MIN
|
||||||
|
BeamData.DIM_STRIP_SMALL = Machine.Offsets.DIM_STRIP_SMALL or BeamData.DIM_STRIP_SMALL
|
||||||
|
BeamData.LONGCUT_ENDLEN = Machine.Offsets.LONGCUT_ENDLEN or BeamData.LONGCUT_ENDLEN
|
||||||
|
BeamData.LONGCUT_MAXLEN = Machine.Offsets.LONGCUT_MAXLEN or BeamData.LONGCUT_MAXLEN
|
||||||
|
BeamData.LEN_VERY_SHORT_PART = Machine.Offsets.LEN_VERY_SHORT_PART or BeamData.LEN_VERY_SHORT_PART
|
||||||
|
BeamData.LEN_SHORT_PART = Machine.Offsets.LEN_SHORT_PART or BeamData.LEN_SHORT_PART
|
||||||
|
BeamData.MAX_HEIGHT2 = Machine.Offsets.MAX_HEIGHT2 or BeamData.MAX_HEIGHT2
|
||||||
|
BeamData.OVM_MID = Machine.Offsets.OVM_MID or BeamData.OVM_MID
|
||||||
|
if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end
|
||||||
|
if Machine.Offsets.ROT180 ~= nil then BeamData.ROT180 = ( Machine.Offsets.ROT180 == 1) end
|
||||||
|
if Machine.Offsets.CUT_SIC then BeamData.CUT_SIC = EgtClamp( Machine.Offsets.CUT_SIC, 15, 50) end
|
||||||
|
end
|
||||||
|
if Machine.Trave then
|
||||||
|
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
|
||||||
|
BeamData.MIN_HEIGHT = Machine.Trave.ZMIN or BeamData.MIN_HEIGHT
|
||||||
|
BeamData.MAX_WIDTH = Machine.Trave.XMAX or BeamData.MAX_WIDTH
|
||||||
|
BeamData.MAX_HEIGHT = Machine.Trave.ZMAX or BeamData.MAX_HEIGHT
|
||||||
|
end
|
||||||
|
if Machine.User then
|
||||||
|
BeamData.USER_HOLE_DIAM = Machine.User.L020_DIAM_HOLE or BeamData.USER_HOLE_DIAM
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
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 == 'H3' 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 ''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
BeamData.GetBlockedAxis = GetBlockedAxis
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function GetChainSawInitAngs( vtN, vtO, nInd)
|
||||||
|
if nInd == 1 then
|
||||||
|
return ''
|
||||||
|
else
|
||||||
|
return EgtIf( vtN:getY() > 0, 'C=180', 'C=-180')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
BeamData.GetChainSawInitAngs = GetChainSawInitAngs
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function GetSCC( vtToolDirection, vtEdgeDirection, vtNFace)
|
||||||
|
local nSCC = MCH_SCC.NONE
|
||||||
|
|
||||||
|
if abs( vtToolDirection:getX()) > abs( vtToolDirection:getY()) - GEO.EPS_SMALL then
|
||||||
|
-- se il taglio è orizzontale, si gira aggregato lama per facilitare caduta del legno
|
||||||
|
if abs( vtEdgeDirection:getZ()) < 10 * GEO.EPS_SMALL and not AreSameOrOppositeVectorApprox( vtNFace, Z_AX()) then
|
||||||
|
nSCC = EgtIf( ( vtToolDirection:getX() > -GEO.EPS_SMALL), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP)
|
||||||
|
else
|
||||||
|
nSCC = EgtIf( ( vtToolDirection:getX() > -GEO.EPS_SMALL), MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- se il taglio è orizzontale, si gira aggregato lama per facilitare caduta del legno
|
||||||
|
if abs( vtEdgeDirection:getZ()) < 10 * GEO.EPS_SMALL and not AreSameOrOppositeVectorApprox( vtNFace, Z_AX()) then
|
||||||
|
nSCC = EgtIf( ( vtToolDirection:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP)
|
||||||
|
else
|
||||||
|
nSCC = EgtIf( ( vtToolDirection:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return nSCC
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-- sAxis può essere AB, C, Z; restituisce direzioni, profondità di estrusione e punti per il controllo precollisione
|
||||||
|
local function GetPreCollisionData( sAxis, vtC, vtHead)
|
||||||
|
|
||||||
|
local PreCollisionData = {}
|
||||||
|
|
||||||
|
-- Pivot uguale per tutti; non c'è aggregato quindi non dipende da SCC
|
||||||
|
-- riferimento vtPivot
|
||||||
|
-- - vtHead (Z): asse rotazione utensile, guarda il mandrino
|
||||||
|
-- - vtToolSCC (X): direzione asse C o aggregato
|
||||||
|
-- - vtEdge (Y): direzione lato, verso in base a X e Z
|
||||||
|
-- - punto di applicazione: naso mandrino o aggregato
|
||||||
|
PreCollisionData.vtMovePivot = Vector3d( 0, 0, -MldeParameters.SawOffs)
|
||||||
|
|
||||||
|
-- carro Z
|
||||||
|
if sAxis == 'Z' then
|
||||||
|
|
||||||
|
PreCollisionData.Directions = { vtDirectionX = X_AX(), vtDirectionY = Z_AX(), vtDirectionZ = -Y_AX()}
|
||||||
|
PreCollisionData.bSurfTmByRevolve = true
|
||||||
|
PreCollisionData.Points = {
|
||||||
|
Point3d( 0, 523, 0),
|
||||||
|
Point3d( 109.556, 523, 0),
|
||||||
|
Point3d( 109.556, 583, 0),
|
||||||
|
Point3d( 143.113, 583, 0),
|
||||||
|
Point3d( 143.113, 2533, 0),
|
||||||
|
Point3d( 0, 2533, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
-- motore (asse A o B)
|
||||||
|
elseif sAxis == 'AB' then
|
||||||
|
|
||||||
|
PreCollisionData.Directions = { vtDirectionX = vtC, vtDirectionY = -vtHead, vtDirectionZ = vtC ^ -vtHead}
|
||||||
|
PreCollisionData.dExtrusionDepth = 180
|
||||||
|
PreCollisionData.Points = {
|
||||||
|
Point3d( 100,-122,0),
|
||||||
|
Point3d( 100, -232.5, 0),
|
||||||
|
Point3d( -90, -232.5, 0),
|
||||||
|
Point3d( -90, 204.505, 0),
|
||||||
|
Point3d( -77.5, 216.55, 0),
|
||||||
|
Point3d( -89, 234.05, 0),
|
||||||
|
Point3d( -89, 242.55, 0),
|
||||||
|
Point3d( 89, 242.55, 0),
|
||||||
|
Point3d( 89, 234.05, 0),
|
||||||
|
Point3d( 77.5, 216.55, 0),
|
||||||
|
Point3d( 90, 204.505, 0),
|
||||||
|
Point3d( 90, 93, 0),
|
||||||
|
Point3d( 125, 93, 0),
|
||||||
|
Point3d( 125, -122, 0),
|
||||||
|
Point3d( 100, -122, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
-- asse C
|
||||||
|
elseif sAxis == 'C' then
|
||||||
|
|
||||||
|
PreCollisionData.Directions = { vtDirectionX = vtC, vtDirectionY = Z_AX(), vtDirectionZ = vtC ^ Z_AX()}
|
||||||
|
PreCollisionData.dExtrusionDepth = 200
|
||||||
|
PreCollisionData.Points = {
|
||||||
|
Point3d( 125, -92.752, 0),
|
||||||
|
Point3d( 203.5, -92.752, 0),
|
||||||
|
Point3d( 203.5, -100, 0),
|
||||||
|
Point3d( 400, -100, 0),
|
||||||
|
Point3d( 450, -50, 0),
|
||||||
|
Point3d( 450, 400, 0),
|
||||||
|
Point3d( 360, 490, 0),
|
||||||
|
Point3d( 170, 490, 0),
|
||||||
|
Point3d( 170, 523, 0),
|
||||||
|
Point3d( EgtIf( MldeParameters.NewTopC, -110, -175), 523, 0),
|
||||||
|
Point3d( EgtIf( MldeParameters.NewTopC, -110, -175), 400, 0),
|
||||||
|
Point3d( 230.858, 400, 0),
|
||||||
|
Point3d( 325, 305.858, 0),
|
||||||
|
Point3d( 325, 146, 0),
|
||||||
|
Point3d( 203.5, 146, 0),
|
||||||
|
Point3d( 203.5, 93, 0),
|
||||||
|
Point3d( 125, 93, 0),
|
||||||
|
Point3d( 125, -92.752, 0)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
return PreCollisionData
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function GetSetupInfo( sHead)
|
||||||
|
local SetupInfo = {}
|
||||||
|
|
||||||
|
-- dati comuni
|
||||||
|
SetupInfo.bIsCSymmetrical = false
|
||||||
|
SetupInfo.dCAxisEncumbrance = 180
|
||||||
|
SetupInfo.dCAxisSideEncumbrance = 200
|
||||||
|
SetupInfo.bToolOnAggregate = false
|
||||||
|
SetupInfo.vtRotationAxisC = EgtGetAxisDir( 'C')
|
||||||
|
SetupInfo.vtRotationAxisAB = EgtGetAxisDir( 'B')
|
||||||
|
|
||||||
|
-- testa 5 assi da sopra
|
||||||
|
if sHead == 'H1' then
|
||||||
|
SetupInfo.HeadType = { bTop = true, bBottom = false}
|
||||||
|
SetupInfo.PreferredSide = {}
|
||||||
|
SetupInfo.dPivot = MldeParameters.MillOffs -- per uscita fresa, diverso da uscita lama
|
||||||
|
SetupInfo.GetMinNz = function() return sin( -45) end
|
||||||
|
-- lama su testa 5 assi da sopra
|
||||||
|
elseif sHead == 'H2' then
|
||||||
|
SetupInfo.HeadType = { bTop = true, bBottom = false}
|
||||||
|
SetupInfo.PreferredSide = {}
|
||||||
|
SetupInfo.GetMinNz = function() return sin( -45) end
|
||||||
|
SetupInfo.GetPreCollisionData = GetPreCollisionData
|
||||||
|
SetupInfo.GetSCC = GetSCC
|
||||||
|
-- motosega
|
||||||
|
elseif sHead == 'H3' then
|
||||||
|
SetupInfo.HeadType = { bTop = true, bBottom = false}
|
||||||
|
SetupInfo.PreferredSide = {}
|
||||||
|
SetupInfo.GetMinNz = function() return 0 end
|
||||||
|
-- rinvio angolare 90° (considerato come fosse una testa da sotto)
|
||||||
|
elseif sHead == 'H5' then
|
||||||
|
SetupInfo.bToolOnAggregate = true
|
||||||
|
SetupInfo.HeadType = { bTop = false, bBottom = true}
|
||||||
|
SetupInfo.PreferredSide = {}
|
||||||
|
SetupInfo.GetMaxNz = function() return 0 end
|
||||||
|
end
|
||||||
|
|
||||||
|
return SetupInfo
|
||||||
|
end
|
||||||
|
BeamData.GetSetupInfo = GetSetupInfo
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
return BeamData
|
||||||
@@ -33,6 +33,8 @@
|
|||||||
20=SmallToolContour
|
20=SmallToolContour
|
||||||
21=AntiSplintMillCut
|
21=AntiSplintMillCut
|
||||||
22=Prof_end
|
22=Prof_end
|
||||||
|
23=SideMillAsBlade
|
||||||
|
24=FloatingAggregate
|
||||||
|
|
||||||
[Pocketing]
|
[Pocketing]
|
||||||
1=Pocket
|
1=Pocket
|
||||||
|
|||||||
+43
-28
@@ -510,6 +510,7 @@ function OnPathStart()
|
|||||||
-- salvo precedenti rotanti
|
-- salvo precedenti rotanti
|
||||||
EMT.R1pp = EMT.R1p
|
EMT.R1pp = EMT.R1p
|
||||||
EMT.R2pp = EMT.R2p
|
EMT.R2pp = EMT.R2p
|
||||||
|
EMT.R3pp = EMT.R3p
|
||||||
|
|
||||||
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
||||||
EmtResetPrev()
|
EmtResetPrev()
|
||||||
@@ -609,6 +610,9 @@ function OnRapid()
|
|||||||
MyBackupAxes()
|
MyBackupAxes()
|
||||||
-- se primo movimento della lavorazione, gestione speciale
|
-- se primo movimento della lavorazione, gestione speciale
|
||||||
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
||||||
|
-- primo posizionamento
|
||||||
|
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||||
|
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
-- decido se muovere prima testa o carrelli (standard prima testa)
|
-- decido se muovere prima testa o carrelli (standard prima testa)
|
||||||
local bHeadFirst = true
|
local bHeadFirst = true
|
||||||
local sLateG101
|
local sLateG101
|
||||||
@@ -631,19 +635,27 @@ function OnRapid()
|
|||||||
|
|
||||||
local bGoToHome = false
|
local bGoToHome = false
|
||||||
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
||||||
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and sET == EMT.PREVET and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and ( sET ~= EMT.PREVET or abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
||||||
bGoToHome = true
|
bGoToHome = true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- primo posizionamento
|
-- ricavo i dati per la lavorazione
|
||||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
||||||
|
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
||||||
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
|
|
||||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and (EMT.ST > BeamHeightForFixRot or bGoToHome) and EMT.FLAG2 == 1 then
|
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
|
||||||
|
-- se ho ancora motosega, si setta già asse C, altrimenti asse C per andare in home
|
||||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
||||||
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
||||||
EmtOutput( sOutPreMove)
|
EmtOutput( sOutPreMove)
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EmtLenToString( 0, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
||||||
|
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
end
|
end
|
||||||
@@ -653,27 +665,27 @@ function OnRapid()
|
|||||||
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
||||||
end
|
end
|
||||||
|
|
||||||
-- ricavo i dati per la lavorazione
|
|
||||||
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
|
|
||||||
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
|
||||||
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
|
||||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
|
||||||
|
|
||||||
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
|
||||||
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
|
elseif not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
||||||
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||||
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
|
||||||
local sOutPreMove
|
local sOutPreMove
|
||||||
if EMT.HEAD == 'H3' and bGoToHome then
|
if EMT.HEAD == 'H3' and bGoToHome then
|
||||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1pp, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOutPreMove)
|
|
||||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
|
||||||
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
|
||||||
EmtOutput( sOutPreMove)
|
EmtOutput( sOutPreMove)
|
||||||
end
|
end
|
||||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOutPreMove)
|
EmtOutput( sOutPreMove)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
@@ -863,13 +875,13 @@ function OnRapid()
|
|||||||
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
||||||
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
@@ -1336,7 +1348,7 @@ function PrepareUnload( sCmd)
|
|||||||
table.insert( EMT.AUXCMD, sMsg)
|
table.insert( EMT.AUXCMD, sMsg)
|
||||||
if Cmd[2] == 'V' then
|
if Cmd[2] == 'V' then
|
||||||
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
||||||
local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '0', '1')
|
local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '0', '1')
|
||||||
local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp()
|
local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp()
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
end
|
end
|
||||||
@@ -1345,7 +1357,7 @@ function PrepareUnload( sCmd)
|
|||||||
table.insert( EMT.AUXCMD, sMsg)
|
table.insert( EMT.AUXCMD, sMsg)
|
||||||
if Cmd[4] == 'V' then
|
if Cmd[4] == 'V' then
|
||||||
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
||||||
local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '111', '112')
|
local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '111', '112')
|
||||||
local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp()
|
local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp()
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
EMT.U_STD = true
|
EMT.U_STD = true
|
||||||
@@ -1505,10 +1517,13 @@ function PreparePostRotation( sCmd)
|
|||||||
elseif nVDelta > 0 then
|
elseif nVDelta > 0 then
|
||||||
EMT.YDELTA = nil
|
EMT.YDELTA = nil
|
||||||
EMT.VDELTA = nVDelta
|
EMT.VDELTA = nVDelta
|
||||||
end
|
end
|
||||||
local sYLoad = ' Y'..EmtLenToString( LoadT)
|
local sYLoad = ' Y'..EmtLenToString( LoadT)
|
||||||
local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1'
|
local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1'
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
|
-- setto parametri di pinzaggio reali
|
||||||
|
EMT.SA = ' EA110'
|
||||||
|
EMT.SE = ' EE1'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+51
-36
@@ -558,6 +558,7 @@ function OnPathStart()
|
|||||||
-- salvo precedenti rotanti
|
-- salvo precedenti rotanti
|
||||||
EMT.R1pp = EMT.R1p
|
EMT.R1pp = EMT.R1p
|
||||||
EMT.R2pp = EMT.R2p
|
EMT.R2pp = EMT.R2p
|
||||||
|
EMT.R3pp = EMT.R3p
|
||||||
|
|
||||||
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
||||||
EmtResetPrev()
|
EmtResetPrev()
|
||||||
@@ -657,6 +658,9 @@ function OnRapid()
|
|||||||
MyBackupAxes()
|
MyBackupAxes()
|
||||||
-- se primo movimento della lavorazione, gestione speciale
|
-- se primo movimento della lavorazione, gestione speciale
|
||||||
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
||||||
|
-- primo posizionamento
|
||||||
|
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||||
|
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
-- decido se muovere prima testa o carrelli (standard prima testa)
|
-- decido se muovere prima testa o carrelli (standard prima testa)
|
||||||
local bHeadFirst = true
|
local bHeadFirst = true
|
||||||
local sLateG101
|
local sLateG101
|
||||||
@@ -680,28 +684,10 @@ function OnRapid()
|
|||||||
|
|
||||||
local bGoToHome = false
|
local bGoToHome = false
|
||||||
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
||||||
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and sET == EMT.PREVET and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and ( sET ~= EMT.PREVET or abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
||||||
bGoToHome = true
|
bGoToHome = true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- primo posizionamento
|
|
||||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
|
||||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
|
||||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
|
||||||
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and ( EMT.ST > BeamHeightForFixRot or bGoToHome) and EMT.FLAG2 == 1 then
|
|
||||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
|
||||||
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
|
||||||
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
|
||||||
EmtOutput( sOutPreMove)
|
|
||||||
EmtOutput( 'G101 ET1001')
|
|
||||||
EmtOutput( 'G101 ET2001')
|
|
||||||
end
|
|
||||||
|
|
||||||
if not EMT.LOAD then
|
|
||||||
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
|
|
||||||
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
|
||||||
end
|
|
||||||
|
|
||||||
-- ricavo i dati per la lavorazione
|
-- ricavo i dati per la lavorazione
|
||||||
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
|
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||||
|
|
||||||
@@ -731,21 +717,47 @@ function OnRapid()
|
|||||||
|
|
||||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
|
|
||||||
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
|
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
|
||||||
|
-- se ho ancora motosega, si setta già asse C, altrimenti asse C per andare in home
|
||||||
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
||||||
|
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EmtLenToString( 0, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
||||||
|
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
end
|
||||||
|
|
||||||
|
if not EMT.LOAD then
|
||||||
|
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
|
||||||
|
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
||||||
|
end
|
||||||
|
|
||||||
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
|
||||||
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
-- ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
|
elseif not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
||||||
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||||
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
|
||||||
local sOutPreMove
|
local sOutPreMove
|
||||||
if EMT.HEAD == 'H3' and bGoToHome then
|
if EMT.HEAD == 'H3' and bGoToHome then
|
||||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1pp, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOutPreMove)
|
|
||||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
|
||||||
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
|
||||||
EmtOutput( sOutPreMove)
|
EmtOutput( sOutPreMove)
|
||||||
end
|
end
|
||||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOutPreMove)
|
EmtOutput( sOutPreMove)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
@@ -945,13 +957,13 @@ function OnRapid()
|
|||||||
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
||||||
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
@@ -1423,7 +1435,7 @@ function PrepareUnload( sCmd)
|
|||||||
table.insert( EMT.AUXCMD, sMsg)
|
table.insert( EMT.AUXCMD, sMsg)
|
||||||
if Cmd[2] == 'V' then
|
if Cmd[2] == 'V' then
|
||||||
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
||||||
local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '0', '1')
|
local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '0', '1')
|
||||||
local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp()
|
local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp()
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
end
|
end
|
||||||
@@ -1432,7 +1444,7 @@ function PrepareUnload( sCmd)
|
|||||||
table.insert( EMT.AUXCMD, sMsg)
|
table.insert( EMT.AUXCMD, sMsg)
|
||||||
if Cmd[4] == 'V' then
|
if Cmd[4] == 'V' then
|
||||||
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
||||||
local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '111', '112')
|
local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '111', '112')
|
||||||
local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp()
|
local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp()
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
EMT.U_STD = true
|
EMT.U_STD = true
|
||||||
@@ -1592,10 +1604,13 @@ function PreparePostRotation( sCmd)
|
|||||||
elseif nVDelta > 0 then
|
elseif nVDelta > 0 then
|
||||||
EMT.YDELTA = nil
|
EMT.YDELTA = nil
|
||||||
EMT.VDELTA = nVDelta
|
EMT.VDELTA = nVDelta
|
||||||
end
|
end
|
||||||
local sYLoad = ' Y'..EmtLenToString( LoadT)
|
local sYLoad = ' Y'..EmtLenToString( LoadT)
|
||||||
local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1'
|
local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1'
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
|
-- setto parametri di pinzaggio reali
|
||||||
|
EMT.SA = ' EA110'
|
||||||
|
EMT.SE = ' EE1'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+44
-14
@@ -525,6 +525,9 @@ function OnMachiningEnd()
|
|||||||
EMT.PREVTOOL = EMT.TOOL
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
EMT.PREVHEAD = EMT.HEAD
|
EMT.PREVHEAD = EMT.HEAD
|
||||||
EMT.PREVS = EMT.S
|
EMT.PREVS = EMT.S
|
||||||
|
-- salvo posizione
|
||||||
|
EMT.PREVTCPOS = AdjustTcPos( false)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -539,6 +542,7 @@ function OnPathStart()
|
|||||||
-- salvo precedenti rotanti
|
-- salvo precedenti rotanti
|
||||||
EMT.R1pp = EMT.R1p
|
EMT.R1pp = EMT.R1p
|
||||||
EMT.R2pp = EMT.R2p
|
EMT.R2pp = EMT.R2p
|
||||||
|
EMT.R3pp = EMT.R3p
|
||||||
|
|
||||||
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
||||||
EmtResetPrev()
|
EmtResetPrev()
|
||||||
@@ -659,9 +663,11 @@ function OnRapid()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local sTcPosReal = AdjustTcPos( false)
|
||||||
|
|
||||||
local bGoToHome = false
|
local bGoToHome = false
|
||||||
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
||||||
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and EMT.TCPOS == EMT.PREVTCPOS and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and ( sTcPosReal ~= EMT.PREVTCPOS or abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
||||||
bGoToHome = true
|
bGoToHome = true
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -669,12 +675,17 @@ function OnRapid()
|
|||||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and ( EMT.ST > BeamHeightForFixRot or bGoToHome) and EMT.FLAG2 == 1 then
|
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
|
||||||
local sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
local sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||||
' P4=' .. EgtNumToString( EMT.R2pp, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) ..
|
' P4=' .. EgtNumToString( EMT.R2pp, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) ..
|
||||||
' P6=' .. EgtNumToString( EMT.PREVTCPOS, EMT.DECMACRO) .. ' P7=' .. EgtNumToString( EMT.PREVS, 0) ..
|
' P6=' .. EgtNumToString( EMT.PREVTCPOS, EMT.DECMACRO) .. ' P7=' .. EgtNumToString( EMT.PREVS, 0) ..
|
||||||
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
EmtOutput( sOutPreMove)
|
EmtOutput( sOutPreMove)
|
||||||
|
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||||
|
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) ..
|
||||||
|
' P6=' .. EgtNumToString( EMT.PREVTCPOS, EMT.DECMACRO) .. ' P7=' .. EgtNumToString( EMT.PREVS, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
EmtOutput( 'M101 P1=2')
|
EmtOutput( 'M101 P1=2')
|
||||||
EmtOutput( 'M101 P1=3')
|
EmtOutput( 'M101 P1=3')
|
||||||
end
|
end
|
||||||
@@ -685,15 +696,33 @@ function OnRapid()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
|
||||||
|
local sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||||
|
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
|
||||||
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
|
if EMT.LOAD then
|
||||||
|
ParkLine( sOutPreMove)
|
||||||
|
else
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
end
|
||||||
|
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||||
|
' P4=' .. EgtNumToString( EMT.R2, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
|
||||||
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
|
if EMT.LOAD then
|
||||||
|
ParkLine( sOutPreMove)
|
||||||
|
ParkLine( 'M101 P1=2')
|
||||||
|
ParkLine( 'M101 P1=3')
|
||||||
|
else
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'M101 P1=2')
|
||||||
|
EmtOutput( 'M101 P1=3')
|
||||||
|
end
|
||||||
|
elseif not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
||||||
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||||
local sOutPreMove
|
local sOutPreMove
|
||||||
if EMT.HEAD == 'H3' and bGoToHome then
|
if EMT.HEAD == 'H3' and bGoToHome then
|
||||||
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
|
||||||
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) ..
|
|
||||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
|
||||||
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
|
||||||
EmtOutput( sOutPreMove)
|
|
||||||
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||||
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
|
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
|
||||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
@@ -1597,10 +1626,13 @@ function PreparePostRotation( sCmd)
|
|||||||
elseif nVDelta > 0 then
|
elseif nVDelta > 0 then
|
||||||
EMT.YDELTA = nil
|
EMT.YDELTA = nil
|
||||||
EMT.VDELTA = nVDelta
|
EMT.VDELTA = nVDelta
|
||||||
end
|
end
|
||||||
local sYLoad = ' P2='..EmtLenToString( LoadT)
|
local sYLoad = ' P2='..EmtLenToString( LoadT)
|
||||||
local sOut = 'M111 P1=11'..sYLoad..' P4=76'..EMT.SB..' P8=0 P9='..GetFmaxClamp()
|
local sOut = 'M111 P1=11'..sYLoad..' P4=76'..EMT.SB..' P8=0 P9='..GetFmaxClamp()
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
|
-- setto parametri di pinzaggio reali
|
||||||
|
EMT.SA = ' P4=110'
|
||||||
|
EMT.SE = ' P8=1'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1749,8 +1781,6 @@ function AdjustTcPos( bLen3)
|
|||||||
sPos = '0' .. sPos
|
sPos = '0' .. sPos
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- salvo posizione
|
|
||||||
EMT.PREVTCPOS = sPos
|
|
||||||
return sPos
|
return sPos
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+266
-53
@@ -79,6 +79,14 @@ function OnSimulStart()
|
|||||||
for j = 1, #( vTools or {}) do
|
for j = 1, #( vTools or {}) do
|
||||||
if vTools[j] ~= '' then
|
if vTools[j] ~= '' then
|
||||||
EgtLoadTool( vTcPos[i], j, vTools[j])
|
EgtLoadTool( vTcPos[i], j, vTools[j])
|
||||||
|
-- Aggiunto controllo lunghezza lama minima * 0.9 per ricavare la tolleranza del VMILL
|
||||||
|
if EgtTdbSetCurrTool(vTools[j]) then -- set utensile corrente
|
||||||
|
if EgtTdbGetCurrToolParam( MCH_TP.TYPE) == MCH_TY.SAW_STD or EgtTdbGetCurrToolParam( MCH_TP.TYPE) == MCH_TY.SAW_FLAT then -- controllo tipo utensile sega
|
||||||
|
local dCurrSawLen = EgtTdbGetCurrToolParam( MCH_TP.LEN) * 0.9
|
||||||
|
-- se non definito o minore del valore precedente aggiorna la tolleranza
|
||||||
|
EMT.VMILLTOL = EgtIf( not EMT.VMILLTOL or dCurrSawLen < EMT.VMILLTOL, dCurrSawLen, EMT.VMILLTOL)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
ShowToolInTcPos( vTcPos[i], true)
|
ShowToolInTcPos( vTcPos[i], true)
|
||||||
@@ -140,6 +148,30 @@ function OnSimulStart()
|
|||||||
end
|
end
|
||||||
-- Preparo lista collisioni vuota
|
-- Preparo lista collisioni vuota
|
||||||
EMT.COLLIDE = {}
|
EMT.COLLIDE = {}
|
||||||
|
|
||||||
|
-- si crea gruppo temporaneo appoggio controllo clamping
|
||||||
|
CLAMP_CHECK_GROUP = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'CLAMP_CHECK')
|
||||||
|
CLAMP_CHECK_INTERS = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'CLAMP_INTERS')
|
||||||
|
|
||||||
|
if CLAMP_CHECK_GROUP then
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||||
|
else
|
||||||
|
local frClampCheckGroup = Frame3d( ORIG(), GDB_FR.FRONT)
|
||||||
|
CLAMP_CHECK_GROUP = EgtGroup( GDB_ID.ROOT, frClampCheckGroup)
|
||||||
|
EgtSetName( CLAMP_CHECK_GROUP, 'CLAMP_CHECK')
|
||||||
|
EgtSetLevel( CLAMP_CHECK_GROUP, GDB_LV.TEMP)
|
||||||
|
EgtSetStatus( CLAMP_CHECK_GROUP, GDB_ST.OFF)
|
||||||
|
end
|
||||||
|
|
||||||
|
if CLAMP_CHECK_INTERS then
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||||
|
else
|
||||||
|
CLAMP_CHECK_INTERS = EgtGroup( GDB_ID.ROOT)
|
||||||
|
EgtSetName( CLAMP_CHECK_INTERS, 'CLAMP_INTERS')
|
||||||
|
EgtSetLevel( CLAMP_CHECK_INTERS, GDB_LV.TEMP)
|
||||||
|
EgtSetStatus( CLAMP_CHECK_INTERS, GDB_ST.OFF)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -213,7 +245,7 @@ function OnSimulDispositionStart()
|
|||||||
-- determino la risoluzione dello Zmap
|
-- determino la risoluzione dello Zmap
|
||||||
local dTol = 4.71
|
local dTol = 4.71
|
||||||
if EmtGetVMillStep then
|
if EmtGetVMillStep then
|
||||||
dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), 4.71)
|
dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol)
|
||||||
else
|
else
|
||||||
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
||||||
if dArea < 0.075e6 then
|
if dArea < 0.075e6 then
|
||||||
@@ -230,6 +262,7 @@ function OnSimulDispositionStart()
|
|||||||
dTol = 3.77
|
dTol = 3.77
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
dTol = min( dTol, EMT.VMILLTOL or dTol) -- imposto dTol al valore minore tra quello per volume e quello per spessore lama
|
||||||
-- creo lo Zmap
|
-- creo lo Zmap
|
||||||
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
||||||
if VMillId then
|
if VMillId then
|
||||||
@@ -287,18 +320,24 @@ function OnSimulDispositionStart()
|
|||||||
local nOrd = GetPhaseOrd( EMT.PHASE)
|
local nOrd = GetPhaseOrd( EMT.PHASE)
|
||||||
local nScrapOrd = GetPhaseOrd( EgtGetPhaseCount()) + 1
|
local nScrapOrd = GetPhaseOrd( EgtGetPhaseCount()) + 1
|
||||||
local b3Raw = BBox3d()
|
local b3Raw = BBox3d()
|
||||||
|
local b3Bar = BBox3d()
|
||||||
|
local b3Part = BBox3d()
|
||||||
local nPartRawId, nScrapRawId
|
local nPartRawId, nScrapRawId
|
||||||
local nRawId = EgtGetFirstRawPart()
|
local nRawId = EgtGetFirstRawPart()
|
||||||
while nRawId do
|
while nRawId do
|
||||||
local nNextRawId = EgtGetNextRawPart( nRawId)
|
local nNextRawId = EgtGetNextRawPart( nRawId)
|
||||||
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
||||||
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
||||||
|
local b3Tmp = EgtGetRawPartBBox( nRawId)
|
||||||
|
b3Bar:Add( b3Tmp)
|
||||||
local nRawOrd = EgtGetInfo( nRawId, 'ORD', 'i')
|
local nRawOrd = EgtGetInfo( nRawId, 'ORD', 'i')
|
||||||
if nRawOrd == nOrd then
|
if nRawOrd == nOrd then
|
||||||
b3Raw = EgtGetRawPartBBox( nRawId)
|
--b3Raw = EgtGetRawPartBBox( nRawId)
|
||||||
|
b3Raw:Add( b3Tmp)
|
||||||
|
b3Part:Add( b3Tmp)
|
||||||
nPartRawId = nRawId
|
nPartRawId = nRawId
|
||||||
elseif nRawOrd == nOrd + 1 and nRawOrd == nScrapOrd then
|
elseif nRawOrd == nOrd + 1 and nRawOrd == nScrapOrd then
|
||||||
local b3Tmp = EgtGetRawPartBBox( nRawId) or BBox3d()
|
--local b3Tmp = EgtGetRawPartBBox( nRawId) or BBox3d()
|
||||||
b3Raw:Add( b3Tmp)
|
b3Raw:Add( b3Tmp)
|
||||||
nScrapRawId = nRawId
|
nScrapRawId = nRawId
|
||||||
end
|
end
|
||||||
@@ -312,6 +351,9 @@ function OnSimulDispositionStart()
|
|||||||
else
|
else
|
||||||
EMT.SCRAP = nil
|
EMT.SCRAP = nil
|
||||||
end
|
end
|
||||||
|
EMT.LB = b3Bar:getDimX()
|
||||||
|
EMT.LR = b3Raw:getDimX()
|
||||||
|
EMT.LT = b3Part:getDimX()
|
||||||
-- recupero CutId del pezzo in lavorazione
|
-- recupero CutId del pezzo in lavorazione
|
||||||
EMT.CUTID = EgtGetInfo( EgtGetFirstPartInRawPart( nPartRawId or GDB_ID.NULL) or GDB_ID.NULL, 'CUTID', 'i') or 0
|
EMT.CUTID = EgtGetInfo( EgtGetFirstPartInRawPart( nPartRawId or GDB_ID.NULL) or GDB_ID.NULL, 'CUTID', 'i') or 0
|
||||||
EMT.YSPEC = nil
|
EMT.YSPEC = nil
|
||||||
@@ -383,6 +425,7 @@ function OnSimulDispositionStart()
|
|||||||
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
||||||
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
||||||
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
||||||
|
b3Bar = EgtGetRawPartBBox( nRawId)
|
||||||
else
|
else
|
||||||
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
||||||
EgtSetStatus( nRawId, GDB_ST.OFF)
|
EgtSetStatus( nRawId, GDB_ST.OFF)
|
||||||
@@ -390,6 +433,8 @@ function OnSimulDispositionStart()
|
|||||||
end
|
end
|
||||||
nRawId = nNextRawId
|
nRawId = nNextRawId
|
||||||
end
|
end
|
||||||
|
EMT.LB = b3Bar:getDimX()
|
||||||
|
|
||||||
-- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y
|
-- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y
|
||||||
else
|
else
|
||||||
-- verifico posizione di carico
|
-- verifico posizione di carico
|
||||||
@@ -407,12 +452,14 @@ function OnSimulDispositionStart()
|
|||||||
nRawId = EgtGetNextRawPart( nRawId)
|
nRawId = EgtGetNextRawPart( nRawId)
|
||||||
end
|
end
|
||||||
-- eseguo
|
-- eseguo
|
||||||
|
local b3Bar = BBox3d()
|
||||||
nRawId = EgtGetFirstRawPart()
|
nRawId = EgtGetFirstRawPart()
|
||||||
while nRawId do
|
while nRawId do
|
||||||
local nNextRawId = EgtGetNextRawPart( nRawId)
|
local nNextRawId = EgtGetNextRawPart( nRawId)
|
||||||
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
||||||
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
||||||
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
||||||
|
b3Bar = EgtGetRawPartBBox( nRawId)
|
||||||
else
|
else
|
||||||
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
||||||
EmtLinkRawPartToGroup( nRawId, 'Y')
|
EmtLinkRawPartToGroup( nRawId, 'Y')
|
||||||
@@ -420,6 +467,7 @@ function OnSimulDispositionStart()
|
|||||||
end
|
end
|
||||||
nRawId = nNextRawId
|
nRawId = nNextRawId
|
||||||
end
|
end
|
||||||
|
EMT.LB = b3Bar:getDimX()
|
||||||
end
|
end
|
||||||
-- Indicazione angolo rotazione pezzo
|
-- Indicazione angolo rotazione pezzo
|
||||||
EMT.ROT = EgtGetInfo( EMT.DISPID, 'ROT', 'i') or 0
|
EMT.ROT = EgtGetInfo( EMT.DISPID, 'ROT', 'i') or 0
|
||||||
@@ -451,6 +499,7 @@ function OnSimulDispositionEnd()
|
|||||||
EMT.POSTROT = true
|
EMT.POSTROT = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
EMT.SPLIT = false
|
||||||
EMT.OPEISDISP = false
|
EMT.OPEISDISP = false
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -504,17 +553,15 @@ function OnSimulToolSelect( dPosA)
|
|||||||
end
|
end
|
||||||
EgtSetCurrMachining( NextMchId)
|
EgtSetCurrMachining( NextMchId)
|
||||||
-- recupero il valore dell'asse virtuale bloccato A
|
-- recupero il valore dell'asse virtuale bloccato A
|
||||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
dPosA = GetCurrChainSawingVirtualAxis()
|
||||||
dPosA = tonumber( sVal:sub( 3))
|
|
||||||
else
|
else
|
||||||
-- imposto visualizzazione
|
-- imposto visualizzazione
|
||||||
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
||||||
end
|
end
|
||||||
-- imposto il valore di A
|
-- imposto il valore di A
|
||||||
EgtSetAxisPos( 'A', dPosA)
|
EgtSetAxisPos( 'A', dPosA)
|
||||||
if abs( dPosA) < 0.1 then
|
local dHomeC = GetChainSawCHomeFromVirtualAxis( dPosA)
|
||||||
EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0))
|
EgtSetAxisPos( 'C', dHomeC)
|
||||||
end
|
|
||||||
EgtSetAxisPos( 'B', 0)
|
EgtSetAxisPos( 'B', 0)
|
||||||
-- se aggregato per fresa tipo blockhaus
|
-- se aggregato per fresa tipo blockhaus
|
||||||
elseif EMT.HEAD == 'H7' then
|
elseif EMT.HEAD == 'H7' then
|
||||||
@@ -556,24 +603,19 @@ function OnSimulToolDeselect()
|
|||||||
-- movimento scarico sega a catena
|
-- movimento scarico sega a catena
|
||||||
if EMT.HEAD == 'H3' then
|
if EMT.HEAD == 'H3' then
|
||||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
if EMT.HT > BeamHeightForFixRot then
|
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
-- raddrizzo asse B prima di ruotare il C
|
||||||
end
|
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
|
||||||
local dPosA = EgtGetAxisPos( 'A')
|
SimulMoveAxis( 'C', 0, MCH_SIM_STEP.COLLROT)
|
||||||
if abs( dPosA) < 0.1 then
|
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, -180, 0), MCH_SIM_STEP.COLLROT)
|
|
||||||
else
|
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, 270), MCH_SIM_STEP.COLLROT)
|
|
||||||
end
|
|
||||||
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
-- movimento scarico rinvio
|
-- movimento scarico rinvio
|
||||||
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
|
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
-- movimento scarico aggregato BlockHaus
|
-- movimento scarico aggregato BlockHaus
|
||||||
elseif EMT.HEAD == 'H7' then
|
elseif EMT.HEAD == 'H7' then
|
||||||
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||||
-- movimento scarico punta lunga su T111
|
-- movimento scarico punta lunga su T111
|
||||||
elseif EMT.TOTLEN > LONG_TOOL_MINLEN then
|
elseif EMT.TOTLEN > LONG_TOOL_MINLEN then
|
||||||
-- se su cambio utensile T111
|
-- se su cambio utensile T111
|
||||||
@@ -584,9 +626,9 @@ function OnSimulToolDeselect()
|
|||||||
else
|
else
|
||||||
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
if GetTCSet( EMT.TCPOS) == 1 then
|
if GetTCSet( EMT.TCPOS) == 1 then
|
||||||
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||||
else
|
else
|
||||||
SimulMoveAxes( 'B', -90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B', -90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- movimento scarico utensile di grosso diametro (su T111)
|
-- movimento scarico utensile di grosso diametro (su T111)
|
||||||
@@ -607,12 +649,7 @@ function OnSimulToolDeselect()
|
|||||||
SimulMoveAxes( 'B', EgtIf( GetTCSet( EMT.TCPOS) == 1, 90, -90), MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
SimulMoveAxes( 'B', EgtIf( GetTCSet( EMT.TCPOS) == 1, 90, -90), MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
||||||
else
|
else
|
||||||
if EMT.NEXTHEAD == 'H3' then
|
if EMT.NEXTHEAD == 'H3' then
|
||||||
local dPosA = EgtGetAxisPos( 'A')
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', 0, MCH_SIM_STEP.RAPROT)
|
||||||
if abs( dPosA) < 0.1 then
|
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, 270), MCH_SIM_STEP.RAPROT)
|
|
||||||
else
|
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, -180, 0), MCH_SIM_STEP.COLLROT)
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
||||||
end
|
end
|
||||||
@@ -672,8 +709,7 @@ function OnSimulMachiningStart()
|
|||||||
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare
|
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare
|
||||||
if EMT.HEAD == 'H3' and EMT.HEAD == EMT.PREVHEAD then
|
if EMT.HEAD == 'H3' and EMT.HEAD == EMT.PREVHEAD then
|
||||||
local dPrevA = EgtGetAxisPos( 'A')
|
local dPrevA = EgtGetAxisPos( 'A')
|
||||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||||
local dPosA = tonumber( sVal:sub( 3))
|
|
||||||
if abs( dPosA - dPrevA) > 1 then
|
if abs( dPosA - dPrevA) > 1 then
|
||||||
OnSimulToolDeselect()
|
OnSimulToolDeselect()
|
||||||
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON)
|
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON)
|
||||||
@@ -705,6 +741,7 @@ function OnSimulMachiningEnd()
|
|||||||
EMT.UNLOADING = false
|
EMT.UNLOADING = false
|
||||||
EMT.FALL = false
|
EMT.FALL = false
|
||||||
end
|
end
|
||||||
|
EMT.SPLIT = nil
|
||||||
EMT.PREVHEAD = EMT.HEAD
|
EMT.PREVHEAD = EMT.HEAD
|
||||||
EMT.PREVTOOL = EMT.TOOL
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
EMT.PREVEXIT = EMT.EXIT
|
EMT.PREVEXIT = EMT.EXIT
|
||||||
@@ -803,14 +840,20 @@ function OnSimulMoveStart()
|
|||||||
EMT.MCHFIRST = false
|
EMT.MCHFIRST = false
|
||||||
local bZmax = ( EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
local bZmax = ( EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
-- con pezzi alti aggiorno gli assi rotanti prima di muovermi sopra il pezzo
|
-- con pezzi alti aggiorno gli assi rotanti prima di muovermi sopra il pezzo
|
||||||
if not EMT.LOAD and EMT.MOVE == 0 and ( EMT.HT > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
|
||||||
|
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
||||||
|
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxis( 'C', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxis( 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
elseif not EMT.LOAD and EMT.MOVE == 0 and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TOTLEN > 200)) and
|
||||||
|
( EMT.HT > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||||
-- se motosega mi muovo a X di sicurezza per ruotare, prima si raddrizza B e poi C in posizione
|
-- se motosega mi muovo a X di sicurezza per ruotare, prima si raddrizza B e poi C in posizione
|
||||||
if EMT.HEAD == 'H3' and bGoToHome then
|
if EMT.HEAD == 'H3' and bGoToHome then
|
||||||
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'C', EMT.R1, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxis( 'C', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxis( 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
elseif ( EMT.HEAD == 'H3' or ( bZmax and EMT.TOTLEN > 200)) then
|
elseif ( bZmax and EMT.TOTLEN > 200) then
|
||||||
SimulMoveAxes( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID, 'C', EMT.R1, MCH_SIM_STEP.COLLROT, 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID, 'C', EMT.R1, MCH_SIM_STEP.COLLROT, 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -892,6 +935,8 @@ function ExecAuxCmd( sCmd)
|
|||||||
if Cmd[1] == '0' then
|
if Cmd[1] == '0' then
|
||||||
if Cmd[2] == 'Unloading' then
|
if Cmd[2] == 'Unloading' then
|
||||||
EMT.UNLOADING = true
|
EMT.UNLOADING = true
|
||||||
|
elseif Cmd[2] == 'Split' then
|
||||||
|
EMT.SPLIT = true
|
||||||
elseif Cmd[2] == 'Fall' then
|
elseif Cmd[2] == 'Fall' then
|
||||||
EMT.FALL = true
|
EMT.FALL = true
|
||||||
end
|
end
|
||||||
@@ -933,19 +978,9 @@ function ExecAuxCmd( sCmd)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif Cmd[1] == '11' then
|
elseif Cmd[1] == '11' then
|
||||||
local dPY = MaxOpen
|
ExecMovePY( Cmd[2] ~= '0')
|
||||||
if Cmd[2] ~= '0' then
|
|
||||||
dPY = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
|
||||||
end
|
|
||||||
SimulMoveAxis( 'PY', dPY, MCH_SIM_STEP.RAPID)
|
|
||||||
SetPYLight( Cmd[2] ~= '0')
|
|
||||||
elseif Cmd[1] == '12' then
|
elseif Cmd[1] == '12' then
|
||||||
local dPV = MaxOpen
|
ExecMovePV( Cmd[2] ~= '0')
|
||||||
if Cmd[2] ~= '0' then
|
|
||||||
dPV = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
|
||||||
end
|
|
||||||
SimulMoveAxis( 'PV', dPV, MCH_SIM_STEP.RAPID)
|
|
||||||
SetPVLight( Cmd[2] ~= '0')
|
|
||||||
elseif Cmd[1] == '21' then
|
elseif Cmd[1] == '21' then
|
||||||
local nYDelta = tonumber( Cmd[2])
|
local nYDelta = tonumber( Cmd[2])
|
||||||
local nVDelta = tonumber( Cmd[3])
|
local nVDelta = tonumber( Cmd[3])
|
||||||
@@ -1054,6 +1089,176 @@ function ExecUnloading()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function CheckClamping( sClampName)
|
||||||
|
|
||||||
|
local nClampId = EgtGetAxisId( sClampName) or GDB_ID.NULL
|
||||||
|
local nClampPathId = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nClampId, 'CLAMP_CHECK') or GDB_ID.NULL)
|
||||||
|
local b3ClampingArea = EgtGetBBoxGlob( nClampPathId or GDB_ID.NULL, GDB_BB.STANDARD)
|
||||||
|
-- se non trovo percorso area di clamping, esco subito
|
||||||
|
if not nClampPathId or not EMT.VMILL or not ClampingCoeffMin then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local function GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
|
||||||
|
local vCurveListId = {}
|
||||||
|
local vtIntersPlane
|
||||||
|
-- piano di interpolazione
|
||||||
|
if sIntersPlane == 'X' then
|
||||||
|
vtIntersPlane = X_AX()
|
||||||
|
elseif sIntersPlane == 'Y' then
|
||||||
|
vtIntersPlane = Y_AX()
|
||||||
|
elseif sIntersPlane == 'Z' then
|
||||||
|
vtIntersPlane = Z_AX()
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 1, #EMT.VMILL do
|
||||||
|
local b3VMill = EgtGetBBoxGlob( EMT.VMILL[i], GDB_BB.EXACT)
|
||||||
|
local ptPosIntersPlane
|
||||||
|
if sPosIntersPlane == 'MIN' then
|
||||||
|
ptPosIntersPlane = b3VMill:getMin() + dDepth * vtIntersPlane
|
||||||
|
elseif sPosIntersPlane == 'MAX' then
|
||||||
|
ptPosIntersPlane = b3VMill:getMax() - dDepth * vtIntersPlane
|
||||||
|
end
|
||||||
|
local nLoopId, nLoopCnt = EgtPlaneVolZmapInters( ptPosIntersPlane, vtIntersPlane, EMT.VMILL[i], CLAMP_CHECK_INTERS, GDB_RT.GLOB)
|
||||||
|
vCurveListId = EgtTableAdd( vCurveListId, nLoopId, nLoopCnt)
|
||||||
|
end
|
||||||
|
|
||||||
|
return vCurveListId
|
||||||
|
end
|
||||||
|
|
||||||
|
local function CalculateIntersectionArea( sPosIntersPlane, sIntersPlane, dDepth)
|
||||||
|
-- test piano frontale
|
||||||
|
local vCurveListId = GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
|
||||||
|
-- si copia curva intersezione e curva pinza in gruppo di confronto
|
||||||
|
local nFlatSurfId, nFlatSurfCnt = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, vCurveListId)
|
||||||
|
local vFlatSurfId = EgtTableFill( nFlatSurfId, nFlatSurfCnt) or {}
|
||||||
|
local nClampSurfId = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, nClampPathId)
|
||||||
|
|
||||||
|
local dTotalArea = 0
|
||||||
|
local dTotalXLenght = 0
|
||||||
|
for i = 1, #vFlatSurfId do
|
||||||
|
local nTempSurfId = vFlatSurfId[i]
|
||||||
|
EgtSurfFrIntersect( nTempSurfId, nClampSurfId)
|
||||||
|
if nTempSurfId then
|
||||||
|
dTotalArea = dTotalArea + ceil( EgtSurfArea( nTempSurfId) or 0)
|
||||||
|
local b3BoxIntersectionBox = EgtGetBBoxGlob( nTempSurfId, GDB_BB.STANDARD)
|
||||||
|
if b3BoxIntersectionBox then
|
||||||
|
dTotalXLenght = dTotalXLenght + ceil( b3BoxIntersectionBox:getDimX()) -- somma lunghezze (x) delle aree pinzate
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return dTotalArea, dTotalXLenght
|
||||||
|
end
|
||||||
|
|
||||||
|
-- minima area considerata per un corretto pinzaggio
|
||||||
|
DistZClampToTable = DistZClampToTable or 0
|
||||||
|
--local MinJoin = BD.GetMinJoin( EMT.ST, EMT.HT, EgtIf( EMT.SPLIT, EMT.LT, EMT.LB))
|
||||||
|
UpdateMinJoinDeltaTol( EMT.ST, EMT.HT, EgtIf( EMT.SPLIT, EMT.LT, EMT.LB))
|
||||||
|
local MinZClamping = min( b3ClampingArea:getDimZ() + DistZClampToTable, EMT.HT) - DistZClampToTable
|
||||||
|
local dMinClamping = ( MinJoin * MinZClamping)
|
||||||
|
-- si moltiplica per un coefficiente minimo sotto al quale si da l'errore di pinzaggio
|
||||||
|
ClampingCoeffMin = EgtClamp( ClampingCoeffMin, 0.01, 1)
|
||||||
|
if MinZClamping > 116 then
|
||||||
|
dMinClamping = MinJoin * 116 + ( pow( MinJoin, 2) / 2)
|
||||||
|
if MinJoin > 280 then
|
||||||
|
dMinClamping = MinJoin * 116 + ( pow( 280, 2) / 2) + ( pow( MinJoin - 280, 2))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local dMinClampingAreaWarn = dMinClamping * ClampingCoeffMin
|
||||||
|
local dMinClampingAreaErr = dMinClamping * ( ClampingCoeffMin / 3)
|
||||||
|
|
||||||
|
local bError = true
|
||||||
|
local sWrn, sErr
|
||||||
|
local bWriteWarnMessage = false
|
||||||
|
local bWriteErrMessage = false
|
||||||
|
-- controllo faccia frontale
|
||||||
|
local dArea, dXClampedLenght = CalculateIntersectionArea( 'MIN', 'Y', 3)
|
||||||
|
-- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto)
|
||||||
|
if dArea and dArea < dMinClampingAreaErr then
|
||||||
|
-- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore
|
||||||
|
if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then
|
||||||
|
bError = false
|
||||||
|
end
|
||||||
|
-- pinzaggio non fattibile, errore
|
||||||
|
if bError then
|
||||||
|
sErr = 'ERROR CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteErrMessage = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- WARNING: pinza meno del minimo richiesto
|
||||||
|
if dArea and dArea < dMinClampingAreaWarn and not bWriteErrMessage then
|
||||||
|
sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteWarnMessage = true
|
||||||
|
end
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||||
|
|
||||||
|
-- controllo altro lato solo se non sono già in errore
|
||||||
|
if not bWriteErrMessage then
|
||||||
|
-- controllo faccia posteriore
|
||||||
|
dArea, dXClampedLenght = CalculateIntersectionArea( 'MAX', 'Y', 3)
|
||||||
|
-- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto)
|
||||||
|
if dArea and dArea < dMinClampingAreaErr then
|
||||||
|
-- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore
|
||||||
|
if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then
|
||||||
|
bError = false
|
||||||
|
end
|
||||||
|
-- pinzaggio non fattibile, errore
|
||||||
|
if bError then
|
||||||
|
sErr = 'ERROR CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteErrMessage = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- WARNING: pinza meno del minimo richiesto
|
||||||
|
if dArea and dArea < dMinClampingAreaWarn and not bWriteWarnMessage and not bWriteErrMessage then
|
||||||
|
sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteWarnMessage = true
|
||||||
|
end
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||||
|
end
|
||||||
|
|
||||||
|
if bWriteErrMessage then
|
||||||
|
EmtSetLastError( 1213, sErr, EgtGetEnableUI())
|
||||||
|
EgtOutBox( sErr, 'CLAMPING', 'ERROR', 'OK')
|
||||||
|
EmtSetSimulPause()
|
||||||
|
elseif bWriteWarnMessage then
|
||||||
|
EgtOutLog( sWrn)
|
||||||
|
EgtOutBox( sWrn, 'CLAMPING', 'WARNING', 'OK')
|
||||||
|
EmtSetSimulPause()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function ExecMovePY( bClose)
|
||||||
|
--SimulMoveAxes( 'PY', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||||
|
local dPY = MaxOpen
|
||||||
|
if bClose then
|
||||||
|
dPY = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
||||||
|
end
|
||||||
|
SimulMoveAxis( 'PY', dPY, MCH_SIM_STEP.RAPID)
|
||||||
|
SetPYLight( bClose)
|
||||||
|
if bClose then
|
||||||
|
CheckClamping( 'PY')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function ExecMovePV( bClose)
|
||||||
|
--EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||||
|
local dPV = MaxOpen
|
||||||
|
if bClose then
|
||||||
|
dPV = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
||||||
|
end
|
||||||
|
SimulMoveAxis( 'PV', dPV, MCH_SIM_STEP.RAPID)
|
||||||
|
SetPVLight( bClose)
|
||||||
|
if bClose then
|
||||||
|
CheckClamping( 'PV')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function VerifyYSlide( sName1, dVal1, sName2, dVal2)
|
function VerifyYSlide( sName1, dVal1, sName2, dVal2)
|
||||||
-- Se movimento trave agganciata con carrello Y
|
-- Se movimento trave agganciata con carrello Y
|
||||||
@@ -1211,11 +1416,11 @@ end
|
|||||||
-- *** ESTIMATION T&L ***
|
-- *** ESTIMATION T&L ***
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local ESTIMATION_RAPID_COEFF = EstimationRapidMultiplier or 1
|
local ESTIMATION_RAPID_COEFF = EstimationRapidMultiplier or 1
|
||||||
local RAPID_X_FEED = 75000 / ESTIMATION_RAPID_COEFF -- mm/min
|
local RAPID_X_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||||
local RAPID_Y_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
local RAPID_Y_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||||
local RAPID_Z_FEED = 50000 / ESTIMATION_RAPID_COEFF -- mm/min
|
local RAPID_Z_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||||
local RAPID_C_FEED = 15000 / ESTIMATION_RAPID_COEFF -- deg/min
|
local RAPID_C_FEED = 12000 / ESTIMATION_RAPID_COEFF -- deg/min
|
||||||
local RAPID_B_FEED = 15000 / ESTIMATION_RAPID_COEFF -- deg/min
|
local RAPID_B_FEED = 12000 / ESTIMATION_RAPID_COEFF -- deg/min
|
||||||
local RAPID_MIN_T = 0.1 * ESTIMATION_RAPID_COEFF -- s
|
local RAPID_MIN_T = 0.1 * ESTIMATION_RAPID_COEFF -- s
|
||||||
local LOAD_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
local LOAD_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
||||||
local CHAR_ONE_MOVE_T = 1 * ESTIMATION_RAPID_COEFF -- s
|
local CHAR_ONE_MOVE_T = 1 * ESTIMATION_RAPID_COEFF -- s
|
||||||
@@ -1525,15 +1730,15 @@ function OnEstimRapid()
|
|||||||
EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen
|
EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen
|
||||||
-- calcolo tempo
|
-- calcolo tempo
|
||||||
local dTime = RAPID_MIN_T
|
local dTime = RAPID_MIN_T
|
||||||
local dT1 = CalcMoveTime( abs( dL1), RAPID_X_FEED, EMT.SPLIT)
|
local dT1 = CalcMoveTime( abs( dL1), EMT.FMAXPINZE, EMT.SPLIT)
|
||||||
if dT1 > dTime then dTime = dT1 end
|
if dT1 > dTime then dTime = dT1 end
|
||||||
local dT2 = CalcMoveTime( abs( dL2), EMT.FMAXPINZE, EMT.SPLIT)
|
local dT2 = abs( dL2) / ( RAPID_X_FEED / 60) -- CalcMoveTime( abs( dL2), RAPID_X_FEED, EMT.SPLIT)
|
||||||
if dT2 > dTime then dTime = dT2 end
|
if dT2 > dTime then dTime = dT2 end
|
||||||
local dT3 = CalcMoveTime( abs( dL3), RAPID_Z_FEED, EMT.SPLIT)
|
local dT3 = abs( dL3) / ( RAPID_Z_FEED * 60) -- CalcMoveTime( abs( dL3), RAPID_Z_FEED, EMT.SPLIT)
|
||||||
if dT3 > dTime then dTime = dT3 end
|
if dT3 > dTime then dTime = dT3 end
|
||||||
local dT4 = abs( dR1) / RAPID_C_FEED * 60
|
local dT4 = abs( dR1) / ( RAPID_C_FEED / 60)
|
||||||
if dT4 > dTime then dTime = dT4 end
|
if dT4 > dTime then dTime = dT4 end
|
||||||
local dT5 = abs( dR2) / RAPID_B_FEED * 60
|
local dT5 = abs( dR2) / ( RAPID_B_FEED / 60)
|
||||||
if dT5 > dTime then dTime = dT5 end
|
if dT5 > dTime then dTime = dT5 end
|
||||||
EMT.MCHEXTTIME = EMT.MCHEXTTIME + dTime
|
EMT.MCHEXTTIME = EMT.MCHEXTTIME + dTime
|
||||||
EgtOutLog( string.format( ' G0 Len=%.0f Rot=%.0f° Time=%.2f', dLen, abs( dR1) + abs( dR2), dTime), 5)
|
EgtOutLog( string.format( ' G0 Len=%.0f Rot=%.0f° Time=%.2f', dLen, abs( dR1) + abs( dR2), dTime), 5)
|
||||||
@@ -1551,7 +1756,7 @@ function OnEstimLinear()
|
|||||||
local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3)
|
local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3)
|
||||||
EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen
|
EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen
|
||||||
-- calcolo tempo
|
-- calcolo tempo
|
||||||
local dTime = CalcMoveTime( dLen, EMT.F, EMT.SPLIT)
|
local dTime = dLen / ( EMT.F / 60) -- CalcMoveTime( dLen, EMT.F, EMT.SPLIT)
|
||||||
EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime
|
EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime
|
||||||
EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5)
|
EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5)
|
||||||
-- aggiorno valori come precedenti
|
-- aggiorno valori come precedenti
|
||||||
@@ -1698,6 +1903,14 @@ function GetParkT()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function GetCurrChainSawingVirtualAxis()
|
||||||
|
-- recupero il valore dell'asse virtuale bloccato A
|
||||||
|
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) or 'A=0'
|
||||||
|
local dPosA = tonumber( sVal:sub( 3)) or 0
|
||||||
|
return dPosA
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function CalcDinamicaPinze_TPA( dH, dS, dL)
|
function CalcDinamicaPinze_TPA( dH, dS, dL)
|
||||||
local MinTempoAcc = EMT.MINACC -- [ms] ~300
|
local MinTempoAcc = EMT.MINACC -- [ms] ~300
|
||||||
|
|||||||
+59
-83
@@ -31,20 +31,9 @@ end
|
|||||||
|
|
||||||
---------- OnSpecialApplyDisposition & OnPostApplyMachining ---------
|
---------- OnSpecialApplyDisposition & OnPostApplyMachining ---------
|
||||||
----------------------- Costanti ------------------------------------
|
----------------------- Costanti ------------------------------------
|
||||||
local DELTA_TOL_V = 110
|
|
||||||
local DELTA_TOL_S = 210
|
|
||||||
local DELTA_TOL_L = 410
|
|
||||||
local DELTA_TOL_FIXED = 50
|
local DELTA_TOL_FIXED = 50
|
||||||
local DeltaTol = DELTA_TOL_S
|
|
||||||
local DELTA_SIC = 1
|
local DELTA_SIC = 1
|
||||||
local AGG_LOAD = 50
|
local AGG_LOAD = 50
|
||||||
local MIN_JOIN_VV = EgtClamp( MinJoinVV or 75, 60, 150)
|
|
||||||
local MIN_JOIN_SS = EgtClamp( MinJoinSS or 100, 80, 275)
|
|
||||||
local MIN_JOIN_LS = EgtClamp( MinJoinLS or 290, 250, 400)
|
|
||||||
local MIN_JOIN_SL = EgtClamp( MinJoinSL or 100, 80, 400)
|
|
||||||
local MIN_JOIN_LL = EgtClamp( MinJoinLL or 400, 300, 600)
|
|
||||||
local MinJoin = MIN_JOIN_SS
|
|
||||||
local MinOther = abs( MinY) + abs( MaxV) + MinJoin
|
|
||||||
|
|
||||||
----------------------- Variabili -----------------------------------
|
----------------------- Variabili -----------------------------------
|
||||||
local Test = false
|
local Test = false
|
||||||
@@ -153,53 +142,6 @@ local function IsFirstMachiningAfterRotation( nMchId)
|
|||||||
return ( nRot ~= nPrevRot)
|
return ( nRot ~= nPrevRot)
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
local function UpdateMinJoinDeltaTol()
|
|
||||||
local L_SMALL = 800
|
|
||||||
local H_V = 90
|
|
||||||
local H_S = 200
|
|
||||||
local H_L = 400
|
|
||||||
local W_V = 90
|
|
||||||
local W_S = 150
|
|
||||||
local W_L = 250
|
|
||||||
if EMC.SB <= W_V and EMC.HB <= H_V then
|
|
||||||
MinJoin = MIN_JOIN_VV
|
|
||||||
DeltaTol = DELTA_TOL_V
|
|
||||||
elseif EMC.LB <= L_SMALL then
|
|
||||||
MinJoin = MIN_JOIN_SS
|
|
||||||
DeltaTol = DELTA_TOL_S
|
|
||||||
else
|
|
||||||
local dMinJoinS
|
|
||||||
local dMinJoinL
|
|
||||||
if EMC.SB <= W_S then
|
|
||||||
dMinJoinS = MIN_JOIN_SS
|
|
||||||
dMinJoinL = MIN_JOIN_LS
|
|
||||||
elseif EMC.SB <= W_L then
|
|
||||||
local Coeff = ( EMC.SB - W_S) / ( W_L - W_S)
|
|
||||||
dMinJoinS = ( 1 - Coeff) * MIN_JOIN_SS + Coeff * MIN_JOIN_SL
|
|
||||||
dMinJoinL = ( 1 - Coeff) * MIN_JOIN_LS + Coeff * MIN_JOIN_LL
|
|
||||||
else
|
|
||||||
dMinJoinS = MIN_JOIN_SL
|
|
||||||
dMinJoinL = MIN_JOIN_LL
|
|
||||||
end
|
|
||||||
if EMC.HB <= H_S then
|
|
||||||
MinJoin = dMinJoinS
|
|
||||||
DeltaTol = DELTA_TOL_S
|
|
||||||
elseif EMC.HB <= H_L then
|
|
||||||
local Coeff = ( EMC.HB - H_S) / ( H_L - H_S)
|
|
||||||
MinJoin = ( 1 - Coeff) * dMinJoinS + Coeff * dMinJoinL
|
|
||||||
DeltaTol = ( 1 - Coeff) * DELTA_TOL_S + Coeff * DELTA_TOL_L
|
|
||||||
else
|
|
||||||
MinJoin = dMinJoinL
|
|
||||||
DeltaTol = DELTA_TOL_L
|
|
||||||
end
|
|
||||||
if EMC.SB < W_V then
|
|
||||||
DeltaTol = DELTA_TOL_V
|
|
||||||
end
|
|
||||||
end
|
|
||||||
MinOther = abs( MinY) + abs( MaxV) + MinJoin
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function GetCUTID()
|
local function GetCUTID()
|
||||||
-- recupero CUTID del pezzo in lavoro
|
-- recupero CUTID del pezzo in lavoro
|
||||||
@@ -367,7 +309,7 @@ function OnSpecialApplyDisposition()
|
|||||||
EMC.ZMIN = b3Raw:getMin():getZ()
|
EMC.ZMIN = b3Raw:getMin():getZ()
|
||||||
|
|
||||||
-- Aggiorno limiti di presa e tolleranza
|
-- Aggiorno limiti di presa e tolleranza
|
||||||
UpdateMinJoinDeltaTol()
|
UpdateMinJoinDeltaTol( EMC.SB, EMC.HB, EMC.LB)
|
||||||
|
|
||||||
-- Assegno sovramateriale di testa e ingombro tagli di testa e di coda
|
-- Assegno sovramateriale di testa e ingombro tagli di testa e di coda
|
||||||
EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0
|
EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0
|
||||||
@@ -656,7 +598,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
|||||||
EMC.ZMIN = b3Raw:getMin():getZ()
|
EMC.ZMIN = b3Raw:getMin():getZ()
|
||||||
|
|
||||||
-- Aggiorno limiti di presa e tolleranza
|
-- Aggiorno limiti di presa e tolleranza
|
||||||
UpdateMinJoinDeltaTol()
|
UpdateMinJoinDeltaTol( EMC.SB, EMC.HB, EMC.LB)
|
||||||
|
|
||||||
-- Recupero sovramateriale di testa e ingombro tagli di testa e di coda
|
-- Recupero sovramateriale di testa e ingombro tagli di testa e di coda
|
||||||
EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0
|
EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0
|
||||||
@@ -1594,9 +1536,12 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
dTPosF = MaxV - dVDeltaF
|
dTPosF = MaxV - dVDeltaF
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- se il pinzaggio deve essere invertito forzo entrata nei riposizionamenti
|
||||||
|
-- altrimenti posizioni iniziali e finali sono coincidenti dato che la pinza non in presa viene posizionata alla distanza minima a quella in presa
|
||||||
|
local bInvertClamping = not EMC.PILGRIMSTEP and EMC.YDELTA ~= EMC.YDELTANEXT and EMC.VDELTA ~= EMC.VDELTANEXT
|
||||||
-- verifico che le morse non sono in posizione
|
-- verifico che le morse non sono in posizione
|
||||||
if abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL or abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL or
|
if ( abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL or abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL or bInvertClamping) and
|
||||||
EMC.YDELTA ~= EMC.YDELTANEXT or EMC.VDELTA ~= EMC.VDELTANEXT then
|
( EMC.YDELTA ~= EMC.YDELTANEXT or EMC.VDELTA ~= EMC.VDELTANEXT) then
|
||||||
if #vCmd == 0 then
|
if #vCmd == 0 then
|
||||||
table.insert( vCmd, { 0, 'Clamp repositioning'})
|
table.insert( vCmd, { 0, 'Clamp repositioning'})
|
||||||
-- risalita testa a Zmax
|
-- risalita testa a Zmax
|
||||||
@@ -1627,8 +1572,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
dMaxMovePilgrimStepSingleClampY = MaxY - dYPosI
|
dMaxMovePilgrimStepSingleClampY = MaxY - dYPosI
|
||||||
dMaxMovePilgrimStepSingleClampV = - MinV + dVPosI
|
dMaxMovePilgrimStepSingleClampV = - MinV + dVPosI
|
||||||
else
|
else
|
||||||
dMaxMovePilgrimStepDoubleClamp = MaxY - MinY - MinV + MaxV
|
dMaxMovePilgrimStepDoubleClamp = MaxY - MyMinY - MinV + MaxV
|
||||||
dMaxMovePilgrimStepSingleClampY = MaxY - MinY
|
dMaxMovePilgrimStepSingleClampY = MaxY - MyMinY
|
||||||
dMaxMovePilgrimStepSingleClampV = - MinV + MaxV
|
dMaxMovePilgrimStepSingleClampV = - MinV + MaxV
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1668,6 +1613,18 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
-- se spostamento verso il carico
|
-- se spostamento verso il carico
|
||||||
elseif ( dVPosI + ( dVDeltaF - dVDeltaI)) > MaxV then
|
elseif ( dVPosI + ( dVDeltaF - dVDeltaI)) > MaxV then
|
||||||
dBeamMove = dVPosI + ( dVDeltaF - dVDeltaI) - MaxV
|
dBeamMove = dVPosI + ( dVDeltaF - dVDeltaI) - MaxV
|
||||||
|
-- se è FASTCLAMPING attivo, si suddivide il movimento
|
||||||
|
elseif BD.FASTCLAMPING then
|
||||||
|
-- se la trave si sposta dal carico verso lo scarico
|
||||||
|
if dTPosI - dTPosF > 0 then
|
||||||
|
dBeamMove = min( -( dTPosF - dTPosI), -( MyMinY - dYPosI), -( dVDeltaI - dVDeltaF))
|
||||||
|
else
|
||||||
|
dBeamMove = max( -( dTPosF - dTPosI), -( MyMinY - dYPosI))
|
||||||
|
end
|
||||||
|
dBeamMove = dBeamMove / 2
|
||||||
|
-- altrimenti la trave resta ferma e la pinza 1 va in presa (si limita lo scivolamento del pezzo)
|
||||||
|
else
|
||||||
|
;
|
||||||
end
|
end
|
||||||
|
|
||||||
-- se serve un grande spostamento e si sta pinzando poco. Y trascinatore pinza poco e V si sposta per prima per recuperare
|
-- se serve un grande spostamento e si sta pinzando poco. Y trascinatore pinza poco e V si sposta per prima per recuperare
|
||||||
@@ -1742,6 +1699,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
|
|
||||||
-- movimento terminato
|
-- movimento terminato
|
||||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||||
|
EMC.YDELTA = EMC.YDELTANEXT
|
||||||
|
EMC.VDELTA = EMC.VDELTANEXT
|
||||||
|
|
||||||
-- SECONDO CASO -> SCAMBIO DIRETTO : Y IN POSIZIONE FINALE
|
-- SECONDO CASO -> SCAMBIO DIRETTO : Y IN POSIZIONE FINALE
|
||||||
-- Y può andare in posizione direttamente se :
|
-- Y può andare in posizione direttamente se :
|
||||||
@@ -1778,6 +1737,18 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
-- se spostamento verso il carico
|
-- se spostamento verso il carico
|
||||||
elseif ( dYPosI + ( dYDeltaF - dYDeltaI)) > MaxY then
|
elseif ( dYPosI + ( dYDeltaF - dYDeltaI)) > MaxY then
|
||||||
dBeamMove = -( dYPosI + ( dYDeltaF - dYDeltaI) - MaxY)
|
dBeamMove = -( dYPosI + ( dYDeltaF - dYDeltaI) - MaxY)
|
||||||
|
-- se è FASTCLAMPING attivo, si suddivide il movimento
|
||||||
|
elseif BD.FASTCLAMPING then
|
||||||
|
-- se la trave si sposta dal carico verso lo scarico
|
||||||
|
if dTPosI - dTPosF > 0 then
|
||||||
|
dBeamMove = max( ( dTPosF - dTPosI), ( MinV - dVPosI), ( dYDeltaI - dYDeltaF))
|
||||||
|
else
|
||||||
|
dBeamMove = min( ( dTPosF - dTPosI), ( MaxV - dVPosI))
|
||||||
|
end
|
||||||
|
dBeamMove = dBeamMove / 2
|
||||||
|
-- altrimenti la trave resta ferma e la pinza 1 va in presa (si limita lo scivolamento del pezzo)
|
||||||
|
else
|
||||||
|
;
|
||||||
end
|
end
|
||||||
|
|
||||||
-- se serve un grande spostamento e si sta pinzando poco. V trascinatore pinza poco e Y si sposta per prima per recuperare
|
-- se serve un grande spostamento e si sta pinzando poco. V trascinatore pinza poco e Y si sposta per prima per recuperare
|
||||||
@@ -1851,6 +1822,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
end
|
end
|
||||||
-- movimento terminato
|
-- movimento terminato
|
||||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||||
|
EMC.YDELTA = EMC.YDELTANEXT
|
||||||
|
EMC.VDELTA = EMC.VDELTANEXT
|
||||||
|
|
||||||
-- TERZO CASO -> PASSO DEL PELLEGRINO
|
-- TERZO CASO -> PASSO DEL PELLEGRINO
|
||||||
-- non è possibile fare scambio diretto.
|
-- non è possibile fare scambio diretto.
|
||||||
@@ -1890,8 +1863,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
dTPosI = dTPosA
|
dTPosI = dTPosA
|
||||||
dYPosI = dYPosA
|
dYPosI = dYPosA
|
||||||
dVPosI = dVPosA
|
dVPosI = dVPosA
|
||||||
dMaxMovePilgrimStepDoubleClamp = MaxY - MinY - MinV + MaxV
|
dMaxMovePilgrimStepDoubleClamp = MaxY - MyMinY - MinV + MaxV
|
||||||
dMaxMovePilgrimStepSingleClampY = MaxY - MinY
|
dMaxMovePilgrimStepSingleClampY = MaxY - MyMinY
|
||||||
dMaxMovePilgrimStepSingleClampV = - MinV + MaxV
|
dMaxMovePilgrimStepSingleClampV = - MinV + MaxV
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1899,6 +1872,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
dDeltaBeam = dTPosI - dTPosF
|
dDeltaBeam = dTPosI - dTPosF
|
||||||
|
|
||||||
-- a questo punto entrambe le pinze sono in presa sul pezzo.
|
-- a questo punto entrambe le pinze sono in presa sul pezzo.
|
||||||
|
-- trave si muove dal carico allo scarico
|
||||||
-- Il trascinatore si decide in base alla direzione di movimento trave
|
-- Il trascinatore si decide in base alla direzione di movimento trave
|
||||||
-- trascino con morsa allo scarico. Obiettivo mandare Y in posizione per prima
|
-- trascino con morsa allo scarico. Obiettivo mandare Y in posizione per prima
|
||||||
if dDeltaBeam > 0 then
|
if dDeltaBeam > 0 then
|
||||||
@@ -1941,18 +1915,20 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||||
-- recupero una corsa massima e l'altra solo di quello che serve
|
-- recupero una corsa massima e l'altra solo di quello che serve
|
||||||
elseif abs( dYDeltaI - dYDeltaF) > dMaxMovePilgrimStepSingleClampY then
|
elseif abs( dYDeltaI - dYDeltaF) > dMaxMovePilgrimStepSingleClampV then
|
||||||
|
-- suddivido il movimento su entrambe le morse
|
||||||
|
local dTotMove = ( ( dYDeltaF + dVDeltaF) / 2 + ( dYDeltaI + dVDeltaI) / 2) / 2
|
||||||
-- morsa Y arriva in posizione finale
|
-- morsa Y arriva in posizione finale
|
||||||
dYDeltaI = dYDeltaF
|
dVPosA = EgtClamp( MaxV - dTotMove, MaxV, MinV)
|
||||||
dVPosA = MinV
|
dTPosA = dTPosI - dVPosI + dVPosA
|
||||||
dTPosA = dTPosI - dVPosI + MinV
|
|
||||||
dYPosA = dYDeltaF + dTPosA
|
dYPosA = dYDeltaF + dTPosA
|
||||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||||
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
||||||
table.insert( vCmd, { 12, 0})
|
table.insert( vCmd, { 12, 0})
|
||||||
|
dYDeltaI = dYDeltaF
|
||||||
dTPosI = dTPosA
|
dTPosI = dTPosA
|
||||||
EMC.YDELTA = dYDeltaF
|
EMC.YDELTA = dYDeltaF
|
||||||
EMC.VDELTA = dVDeltaI
|
EMC.VDELTA = nil
|
||||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||||
-- non serve recuperare al massimo della corsa, suddivido movimento in due
|
-- non serve recuperare al massimo della corsa, suddivido movimento in due
|
||||||
@@ -1986,9 +1962,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
end
|
end
|
||||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||||
|
EMC.YDELTA = EMC.YDELTANEXT
|
||||||
-- aggiorno nuova posizione della morsa allo scarico dopo riposizionamento
|
EMC.VDELTA = EMC.VDELTANEXT
|
||||||
dVDeltaI = dVDeltaF
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- imposto i nuovi parametri di aggancio
|
-- imposto i nuovi parametri di aggancio
|
||||||
@@ -2047,17 +2022,19 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||||
-- recupero una corsa massima e l'altra solo di quello che serve
|
-- recupero una corsa massima e l'altra solo di quello che serve
|
||||||
elseif abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepSingleClampV then
|
elseif abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepSingleClampY then
|
||||||
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
-- suddivido il movimento su entrambe le morse
|
||||||
dVDeltaI = dVDeltaF
|
local dTotMove = ( ( dYDeltaF + dVDeltaF) / 2 + ( dYDeltaI + dVDeltaI) / 2) / 2
|
||||||
dYPosA = MaxY
|
-- morsa V arriva in posizione finale
|
||||||
dTPosA = dTPosI + ( MaxY - dYPosI)
|
dYPosA = EgtClamp( MinY + dTotMove, MinY, MaxY)
|
||||||
|
dTPosA = dTPosI - dYPosI + dYPosA
|
||||||
dVPosA = dVDeltaF + dTPosA
|
dVPosA = dVDeltaF + dTPosA
|
||||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||||
table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
||||||
table.insert( vCmd, { 11, 0})
|
table.insert( vCmd, { 11, 0})
|
||||||
|
dVDeltaI = dVDeltaF
|
||||||
dTPosI = dTPosA
|
dTPosI = dTPosA
|
||||||
EMC.YDELTA = dYDeltaI
|
EMC.YDELTA = nil
|
||||||
EMC.VDELTA = dVDeltaF
|
EMC.VDELTA = dVDeltaF
|
||||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||||
@@ -2092,9 +2069,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
end
|
end
|
||||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||||
|
EMC.YDELTA = EMC.YDELTANEXT
|
||||||
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
EMC.VDELTA = EMC.VDELTANEXT
|
||||||
dYDeltaI = dYDeltaF
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- imposto i nuovi parametri di aggancio
|
-- imposto i nuovi parametri di aggancio
|
||||||
|
|||||||
+163
-65
@@ -24,10 +24,10 @@
|
|||||||
require( 'EmtGenerator')
|
require( 'EmtGenerator')
|
||||||
EgtEnableDebug( false)
|
EgtEnableDebug( false)
|
||||||
|
|
||||||
PP_VER = '2.7j1_DEV1'
|
PP_VER = '3.1d2'
|
||||||
PP_NVER = '2.7.9.4'
|
PP_NVER = '3.1.4.2'
|
||||||
MIN_MACH_VER = '2.7j1'
|
MIN_MACH_VER = '2.7j1'
|
||||||
MACH_NAME = string.match( EgtGetCurrMachineDir(), "[^\\]+$") -- si ricava il nome della macchina dal direttorio
|
MACH_NAME = EgtGetCurrMachineName()
|
||||||
|
|
||||||
-- Carico i dati globali
|
-- Carico i dati globali
|
||||||
local sMachDir = EgtGetCurrMachineDir()
|
local sMachDir = EgtGetCurrMachineDir()
|
||||||
@@ -46,7 +46,7 @@ end
|
|||||||
EgtOutLog ( '** ' .. MACH_NAME..' '..PP_VER..' ** ( '..INFO_STD_PP.NAME..': '..INFO_STD_PP.VERSION..' - MinMach: '.. MIN_MACH_VER ..') **', 1)
|
EgtOutLog ( '** ' .. MACH_NAME..' '..PP_VER..' ** ( '..INFO_STD_PP.NAME..': '..INFO_STD_PP.VERSION..' - MinMach: '.. MIN_MACH_VER ..') **', 1)
|
||||||
|
|
||||||
-- Parametri macchina
|
-- Parametri macchina
|
||||||
NumericalControl = 'TPA' -- NUM o TPA o NUM_PLUS
|
NumericalControl = 'TPA' -- NUM o TPA o NUM_PLUS
|
||||||
MinX = 0
|
MinX = 0
|
||||||
MaxX = 1350
|
MaxX = 1350
|
||||||
MinZ = -1350
|
MinZ = -1350
|
||||||
@@ -65,6 +65,7 @@ LoadT = 1454.2
|
|||||||
UnloadT = -1700
|
UnloadT = -1700
|
||||||
MaxOpen = 305
|
MaxOpen = 305
|
||||||
MillOffs = 177.35
|
MillOffs = 177.35
|
||||||
|
DistRotCenterBToTopC = 403 -- distanza tra il centro di rotazione del mandrino B e la mensola C
|
||||||
SawOffs = -242.68
|
SawOffs = -242.68
|
||||||
SawBOffs = 0
|
SawBOffs = 0
|
||||||
SawCOffs = 0
|
SawCOffs = 0
|
||||||
@@ -75,7 +76,7 @@ AngTrBHOffs = 154.5
|
|||||||
AngTrBHLen = 90
|
AngTrBHLen = 90
|
||||||
TurnerOffs = 200.0
|
TurnerOffs = 200.0
|
||||||
DeltaTabY = 898.0
|
DeltaTabY = 898.0
|
||||||
DeltaTabZ = -1017.8 + MillOffs -- per TPA : -1013.3 + MillOffs -- per NUM : -838.4
|
DeltaTabZ = -1017.8 + MillOffs -- per TPA : -1013.3 + MillOffs -- per NUM : -838.4
|
||||||
DimTabY = 400
|
DimTabY = 400
|
||||||
DimTabX = 34000
|
DimTabX = 34000
|
||||||
LenToPress = 900
|
LenToPress = 900
|
||||||
@@ -86,15 +87,24 @@ DefTcPos = 'T2'
|
|||||||
SecondSupport = 0
|
SecondSupport = 0
|
||||||
SpecialBH = false
|
SpecialBH = false
|
||||||
MaxUnloadLen = 0
|
MaxUnloadLen = 0
|
||||||
BeamHeightForFixRot = 9999 -- per abilitare assegnare 500
|
BeamHeightForFixRot = 9999 -- per abilitare assegnare 500
|
||||||
NewTopC = true
|
NewTopC = true
|
||||||
SafeXRotAxes = 150
|
SafeXRotAxes = 150
|
||||||
AggreBlockHaus = false
|
AggreBlockHaus = false
|
||||||
SecondToolChanger = false
|
SecondToolChanger = false
|
||||||
EstimationRapidMultiplier = 1
|
EstimationRapidMultiplier = 1
|
||||||
|
DistZClampToTable = 5 -- distanza tra la tavola e il punto più basso della morsa
|
||||||
|
ClampingCoeffMin = nil -- coefficiente di fissaggio, se 0 o nil non fa controllo, per il momento da inizializzare da Ts3Data
|
||||||
|
MinJoinVV = 75
|
||||||
|
MinJoinSS = 100
|
||||||
|
MinJoinLS = 290
|
||||||
|
MinJoinSL = 100
|
||||||
|
MinJoinLL = 400
|
||||||
|
DistHeadToCabinUnload = nil -- distanza tra la paratia al carico e la testa macchina (Y) in valore assoluto
|
||||||
|
DistHeadToCabinLoad = nil -- distanza tra la paratia allo scarico e la testa macchina (Y) in valore assoluto
|
||||||
|
|
||||||
-- costanti dimensioni utensili
|
-- costanti dimensioni utensili
|
||||||
LONG_TOOL_MINLEN = 221
|
LONG_TOOL_MINLEN = 218.5
|
||||||
BIG_TOOL_DIAM = 300
|
BIG_TOOL_DIAM = 300
|
||||||
|
|
||||||
-- leggo e aggiorno con parametri da BeamData
|
-- leggo e aggiorno con parametri da BeamData
|
||||||
@@ -157,11 +167,11 @@ if EgtExistsFile( sData) then
|
|||||||
if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end
|
if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end
|
||||||
if Machine.Offsets.DEFTCPOS then DefTcPos = ( 'T' .. Machine.Offsets.DEFTCPOS) end
|
if Machine.Offsets.DEFTCPOS then DefTcPos = ( 'T' .. Machine.Offsets.DEFTCPOS) end
|
||||||
if Machine.Offsets.WOOD_DENSITY then WoodDensity = Machine.Offsets.WOOD_DENSITY end
|
if Machine.Offsets.WOOD_DENSITY then WoodDensity = Machine.Offsets.WOOD_DENSITY end
|
||||||
if Machine.Offsets.MIN_JOIN_VV then MinJoinVV = Machine.Offsets.MIN_JOIN_VV end
|
if Machine.Offsets.MIN_JOIN_VV then MinJoinVV = EgtClamp( Machine.Offsets.MIN_JOIN_VV, 60, 150) end
|
||||||
if Machine.Offsets.MIN_JOIN_SS then MinJoinSS = Machine.Offsets.MIN_JOIN_SS end
|
if Machine.Offsets.MIN_JOIN_SS then MinJoinSS = EgtClamp( Machine.Offsets.MIN_JOIN_SS, 80, 275) end
|
||||||
if Machine.Offsets.MIN_JOIN_LS then MinJoinLS = Machine.Offsets.MIN_JOIN_LS end
|
if Machine.Offsets.MIN_JOIN_LS then MinJoinLS = EgtClamp( Machine.Offsets.MIN_JOIN_LS, 250, 400) end
|
||||||
if Machine.Offsets.MIN_JOIN_SL then MinJoinSL = Machine.Offsets.MIN_JOIN_SL end
|
if Machine.Offsets.MIN_JOIN_SL then MinJoinSL = EgtClamp( Machine.Offsets.MIN_JOIN_SL, 80, 400) end
|
||||||
if Machine.Offsets.MIN_JOIN_LL then MinJoinLL = Machine.Offsets.MIN_JOIN_LL end
|
if Machine.Offsets.MIN_JOIN_LL then MinJoinLL = EgtClamp( Machine.Offsets.MIN_JOIN_LL, 300, 600) end
|
||||||
if Machine.Offsets.MAXFEEDPINZE then MaxFeedPinze = Machine.Offsets.MAXFEEDPINZE end
|
if Machine.Offsets.MAXFEEDPINZE then MaxFeedPinze = Machine.Offsets.MAXFEEDPINZE end
|
||||||
if Machine.Offsets.MAXACC then MaxAcc = Machine.Offsets.MAXACC end
|
if Machine.Offsets.MAXACC then MaxAcc = Machine.Offsets.MAXACC end
|
||||||
if Machine.Offsets.MINACC then MinAcc = Machine.Offsets.MINACC end
|
if Machine.Offsets.MINACC then MinAcc = Machine.Offsets.MINACC end
|
||||||
@@ -170,10 +180,19 @@ if EgtExistsFile( sData) then
|
|||||||
if Machine.Offsets.SEC_TC then SecondToolChanger = ( Machine.Offsets.SEC_TC == 1) end
|
if Machine.Offsets.SEC_TC then SecondToolChanger = ( Machine.Offsets.SEC_TC == 1) end
|
||||||
if Machine.Offsets.COEFF_STIMATEMPI and Machine.Offsets.COEFF_STIMATEMPI > 0 then EstimationRapidMultiplier = Machine.Offsets.COEFF_STIMATEMPI end
|
if Machine.Offsets.COEFF_STIMATEMPI and Machine.Offsets.COEFF_STIMATEMPI > 0 then EstimationRapidMultiplier = Machine.Offsets.COEFF_STIMATEMPI end
|
||||||
if Machine.Offsets.MAX_HEIGHT_ROT_B_ABOVE then BeamHeightForFixRot = Machine.Offsets.MAX_HEIGHT_ROT_B_ABOVE end
|
if Machine.Offsets.MAX_HEIGHT_ROT_B_ABOVE then BeamHeightForFixRot = Machine.Offsets.MAX_HEIGHT_ROT_B_ABOVE end
|
||||||
|
if Machine.Offsets.COEFF_CLAMP_CHECK then ClampingCoeffMin = Machine.Offsets.COEFF_CLAMP_CHECK end
|
||||||
|
if Machine.Offsets.DIST_ROT_CENTER_B_TO_TOP_C then DistRotCenterBToTopC = EgtClamp( Machine.Offsets.DIST_ROT_CENTER_B_TO_TOP_C, 395, 410) end
|
||||||
|
if Machine.Offsets.LONG_TOOL_MINLEN then LONG_TOOL_MINLEN = EgtClamp( Machine.Offsets.LONG_TOOL_MINLEN, 216, 226.1) end
|
||||||
|
if Machine.Offsets.DIST_HEAD_TO_CABIN_UNLOAD then DistHeadToCabinUnload = Machine.Offsets.DIST_HEAD_TO_CABIN_UNLOAD end
|
||||||
|
if Machine.Offsets.DIST_HEAD_TO_CABIN_LOAD then DistHeadToCabinLoad = Machine.Offsets.DIST_HEAD_TO_CABIN_LOAD end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if SpecialBH then SecondSupport = 0 end
|
if SpecialBH then SecondSupport = 0 end
|
||||||
|
-- Aggiorno valori MinJoin
|
||||||
|
MinJoin = MinJoinSS
|
||||||
|
MinOther = abs( MinY) + abs( MaxV) + MinJoin
|
||||||
|
DeltaTol = 210
|
||||||
|
|
||||||
-- compongo i gruppi appartenenti alla base
|
-- compongo i gruppi appartenenti alla base
|
||||||
local sBaseAux = {'BASE/SOLID', 'BASE/TC', 'BASE/SIGN', 'BASE/COLLISION'}
|
local sBaseAux = {'BASE/SOLID', 'BASE/TC', 'BASE/SIGN', 'BASE/COLLISION'}
|
||||||
@@ -193,7 +212,19 @@ local BaseId = EmtBase {
|
|||||||
Name = 'Base',
|
Name = 'Base',
|
||||||
Geo='BASE/GEO',
|
Geo='BASE/GEO',
|
||||||
Aux = sBaseAux}
|
Aux = sBaseAux}
|
||||||
|
-- Sposta la faccia interna alla cabina dei solidi di collisione se sono impostati nel TS3Data, valori positivi
|
||||||
|
if DistHeadToCabinLoad then
|
||||||
|
local nSide1Id = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( BaseId, 'COLLISION'), 'SIDE1')
|
||||||
|
local b3Collision = EgtGetBBox( nSide1Id, GDB_BB.STANDARD)
|
||||||
|
local vtMove = Vector3d( -abs( DistHeadToCabinLoad) - b3Collision:getMax()[1], 0, 0)
|
||||||
|
EgtSurfTmMoveFacet( nSide1Id, 3, vtMove, GDB_RT.GLOB)
|
||||||
|
end
|
||||||
|
if DistHeadToCabinUnload then
|
||||||
|
local nSide2Id = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( BaseId, 'COLLISION'), 'SIDE2')
|
||||||
|
local b3Collision = EgtGetBBox( nSide2Id, GDB_BB.STANDARD)
|
||||||
|
local vtMove = Vector3d( abs( DistHeadToCabinUnload) - b3Collision:getMin()[1], 0, 0)
|
||||||
|
EgtSurfTmMoveFacet( nSide2Id, 3, vtMove, GDB_RT.GLOB)
|
||||||
|
end
|
||||||
local XId = EmtAxis {
|
local XId = EmtAxis {
|
||||||
Name = 'X',
|
Name = 'X',
|
||||||
Parent = 'Base',
|
Parent = 'Base',
|
||||||
@@ -225,28 +256,28 @@ local CId = EmtAxis {
|
|||||||
Home = 0,
|
Home = 0,
|
||||||
Geo = 'C_AXIS/GEO',
|
Geo = 'C_AXIS/GEO',
|
||||||
Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION', 'C_AXIS/COLLISION2'}}
|
Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION', 'C_AXIS/COLLISION2'}}
|
||||||
if NewTopC then
|
|
||||||
local vtMove = Vector3d( 65,0,0)
|
-- Imposto i vettori di movimento separatamente se sono presenti le variabili di riferimento
|
||||||
local SolidArmId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'SOLID'), 'ARM')
|
local vtXMove = Vector3d( EgtIf( NewTopC, 65, 0), 0, 0)
|
||||||
if EgtSurfTmMoveFacet then
|
-- si prende la minima distanza tra DistRotCenterBToTopC e LONG_TOOL_MINLEN + pivot (comunque distanza minima 403)
|
||||||
EgtSurfTmMoveFacet( SolidArmId, 11, vtMove, GDB_RT.GLOB)
|
local dZMove = max( 403, min( ( MillOffs + LONG_TOOL_MINLEN + 5), DistRotCenterBToTopC)) - 400
|
||||||
else
|
local vtZMove = Vector3d( 0, 0, dZMove)
|
||||||
EgtSurfTmMoveVertex( SolidArmId, 23, EgtSurfTmGetVertex( SolidArmId, 23, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB)
|
-- Muove le facce in X e Z del solido principale
|
||||||
EgtSurfTmMoveVertex( SolidArmId, 25, EgtSurfTmGetVertex( SolidArmId, 25, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB)
|
local SolidArmId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'SOLID'), 'ARM')
|
||||||
EgtSurfTmMoveVertex( SolidArmId, 35, EgtSurfTmGetVertex( SolidArmId, 35, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB)
|
EgtSurfTmMoveFacet( SolidArmId, 14, vtZMove, GDB_RT.GLOB)
|
||||||
EgtSurfTmMoveVertex( SolidArmId, 36, EgtSurfTmGetVertex( SolidArmId, 36, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB)
|
EgtSurfTmMoveFacet( SolidArmId, 11, vtXMove, GDB_RT.GLOB)
|
||||||
end
|
-- Muove il solido di collisione denominato "TOP" in X e muove la sua faccia inferiore per portarla al pari del solido principale
|
||||||
local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP')
|
local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP')
|
||||||
EgtMove( CollTopId, vtMove, GDB_RT.GLOB)
|
EgtMove( CollTopId, vtXMove, GDB_RT.GLOB)
|
||||||
EgtSetName( CollTopId, 'BOX')
|
EgtSurfTmMoveFacet( CollTopId, 4, vtZMove, GDB_RT.GLOB)
|
||||||
local RefId = CollTopId + EgtGetInfo( CollTopId, 'Frame', 'i')
|
EgtSetName( CollTopId, 'BOX')
|
||||||
EgtSetInfo( RefId, 'CollSkip', 'C_TOP')
|
-- Imposta nel Frame di riferimento l'info "CollSkip"
|
||||||
else
|
local RefId = CollTopId + EgtGetInfo( CollTopId, 'Frame', 'i')
|
||||||
local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP')
|
EgtSetInfo( RefId, 'CollSkip', 'C_TOP')
|
||||||
EgtSetName( CollTopId, 'BOX')
|
-- Muove il solido di collisione C_TOP
|
||||||
local RefId = CollTopId + EgtGetInfo( CollTopId, 'Frame', 'i')
|
local CollUtTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION2'), 'C_TOP')
|
||||||
EgtSetInfo( RefId, 'CollSkip', 'C_TOP')
|
EgtMove( CollUtTopId, vtZMove, GDB_RT.GLOB)
|
||||||
end
|
|
||||||
EmtAxis {
|
EmtAxis {
|
||||||
Name = 'B',
|
Name = 'B',
|
||||||
Parent = 'C',
|
Parent = 'C',
|
||||||
@@ -378,7 +409,7 @@ local PYId = EmtAxis {
|
|||||||
Stroke = { 0, MaxOpen},
|
Stroke = { 0, MaxOpen},
|
||||||
Home = MaxOpen,
|
Home = MaxOpen,
|
||||||
Geo = 'PY_AXIS/GEO',
|
Geo = 'PY_AXIS/GEO',
|
||||||
Aux = {'PY_AXIS/SOLID', 'PY_AXIS/COLLISION'}}
|
Aux = {'PY_AXIS/SOLID', 'PY_AXIS/COLLISION', 'PY_AXIS/CLAMP_CHECK'}}
|
||||||
local VId = EmtAxis {
|
local VId = EmtAxis {
|
||||||
Name = 'V',
|
Name = 'V',
|
||||||
Parent = 'Base',
|
Parent = 'Base',
|
||||||
@@ -398,7 +429,7 @@ local PVId = EmtAxis {
|
|||||||
Stroke = { 0, MaxOpen},
|
Stroke = { 0, MaxOpen},
|
||||||
Home = MaxOpen,
|
Home = MaxOpen,
|
||||||
Geo = 'PV_AXIS/GEO',
|
Geo = 'PV_AXIS/GEO',
|
||||||
Aux = {'PV_AXIS/SOLID', 'PV_AXIS/COLLISION'}}
|
Aux = {'PV_AXIS/SOLID', 'PV_AXIS/COLLISION', 'PV_AXIS/CLAMP_CHECK'}}
|
||||||
EmtAxis {
|
EmtAxis {
|
||||||
Name = 'T',
|
Name = 'T',
|
||||||
Parent = 'Base',
|
Parent = 'Base',
|
||||||
@@ -565,13 +596,6 @@ if SecondToolChanger then
|
|||||||
TDir = X_AX(),
|
TDir = X_AX(),
|
||||||
ADir = -Y_AX(),
|
ADir = -Y_AX(),
|
||||||
Geo = 'BASE/T28'}
|
Geo = 'BASE/T28'}
|
||||||
EmtTcPos {
|
|
||||||
Name = 'T101',
|
|
||||||
Parent = 'Base',
|
|
||||||
Pos = Point3d( -510.4, 113.2, -1160.8),
|
|
||||||
TDir = X_AX(),
|
|
||||||
ADir = Z_AX(),
|
|
||||||
Geo = 'BASE/T101S'}
|
|
||||||
else
|
else
|
||||||
if not SpecialBH then
|
if not SpecialBH then
|
||||||
EmtTcPos {
|
EmtTcPos {
|
||||||
@@ -581,14 +605,6 @@ else
|
|||||||
TDir = X_AX(),
|
TDir = X_AX(),
|
||||||
ADir = Z_AX(),
|
ADir = Z_AX(),
|
||||||
Geo = 'BASE/T101'}
|
Geo = 'BASE/T101'}
|
||||||
else
|
|
||||||
EmtTcPos {
|
|
||||||
Name = 'T101',
|
|
||||||
Parent = 'Base',
|
|
||||||
Pos = Point3d( -510.4, 113.2, -1160.8),
|
|
||||||
TDir = X_AX(),
|
|
||||||
ADir = Z_AX(),
|
|
||||||
Geo = 'BASE/T101S'}
|
|
||||||
end
|
end
|
||||||
if SecondSupport == 1 then
|
if SecondSupport == 1 then
|
||||||
-- supporto per punta
|
-- supporto per punta
|
||||||
@@ -609,19 +625,6 @@ else
|
|||||||
ADir = Z_AX(),
|
ADir = Z_AX(),
|
||||||
Geo = 'BASE/T111M'}
|
Geo = 'BASE/T111M'}
|
||||||
EgtSetInfo( TcpSsId, 'Mortiser', true)
|
EgtSetInfo( TcpSsId, 'Mortiser', true)
|
||||||
elseif SecondSupport == 3 then
|
|
||||||
-- supporto per rinvio angolare
|
|
||||||
local TcpSsId = EmtTcPos {
|
|
||||||
Name = 'T91',
|
|
||||||
Parent = 'Base',
|
|
||||||
ExitNbr = 2,
|
|
||||||
Pos1 = Point3d( -710.4-150, 113.2, -329.8-170),
|
|
||||||
TDir1 = X_AX(),
|
|
||||||
Pos2 = Point3d( -710.4+150, 113.2, -329.8-170),
|
|
||||||
TDir2 = -X_AX(),
|
|
||||||
ADir = Z_AX(),
|
|
||||||
Geo = 'BASE/T91',
|
|
||||||
Aux = 'BASE/T91_HS'}
|
|
||||||
end
|
end
|
||||||
if SpecialBH then
|
if SpecialBH then
|
||||||
EmtTcPos {
|
EmtTcPos {
|
||||||
@@ -633,6 +636,37 @@ else
|
|||||||
Geo = 'BASE/T111S'}
|
Geo = 'BASE/T111S'}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- motosega in caso di magazzino 2 o SpecialBH
|
||||||
|
if SpecialBH or SecondToolChanger then
|
||||||
|
local TcpSsId = EmtTcPos {
|
||||||
|
Name = 'T101',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = Point3d( -510.4, 113.2, -1160.8),
|
||||||
|
TDir = X_AX(),
|
||||||
|
ADir = Z_AX(),
|
||||||
|
Geo = 'BASE/T101S'}
|
||||||
|
-- spostamento in caso di magazzino 2
|
||||||
|
if SecondToolChanger then
|
||||||
|
EgtMove( TcpSsId, Vector3d( 0, 0, 140), GDB_RT.GLOB)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if SecondSupport == 3 then
|
||||||
|
-- supporto per rinvio angolare
|
||||||
|
local TcpSsId = EmtTcPos {
|
||||||
|
Name = 'T91',
|
||||||
|
Parent = 'Base',
|
||||||
|
ExitNbr = 2,
|
||||||
|
Pos1 = Point3d( -710.4-150, 113.2, -329.8-170),
|
||||||
|
TDir1 = X_AX(),
|
||||||
|
Pos2 = Point3d( -710.4+150, 113.2, -329.8-170),
|
||||||
|
TDir2 = -X_AX(),
|
||||||
|
ADir = Z_AX(),
|
||||||
|
Geo = 'BASE/T91',
|
||||||
|
Aux = 'BASE/T91_HS'}
|
||||||
|
if SecondToolChanger then
|
||||||
|
EgtMove( TcpSsId, Vector3d( 0, 0, -900), GDB_RT.GLOB)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Aggiusto posizioni geometriche
|
-- Aggiusto posizioni geometriche
|
||||||
local vtMove = Vector3d( 0, ( DeltaTabY - 913.16), ( DeltaTabZ + 830.037))
|
local vtMove = Vector3d( 0, ( DeltaTabY - 913.16), ( DeltaTabZ + 830.037))
|
||||||
@@ -645,10 +679,12 @@ EgtMove( EgtGetFirstNameInGroup( YId, 'SOLID'), vtMove, GDB_RT.GLOB)
|
|||||||
EgtMove( EgtGetFirstNameInGroup( YId, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( YId, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( PYId, 'SOLID'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( PYId, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( PYId, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( PYId, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
||||||
|
EgtMove( EgtGetFirstNameInGroup( PYId, 'CLAMP_CHECK'), vtMove + Vector3d(0,0,DistZClampToTable), GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( VId, 'SOLID'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( VId, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( VId, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( VId, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( PVId, 'SOLID'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( PVId, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( PVId, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( PVId, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
||||||
|
EgtMove( EgtGetFirstNameInGroup( PVId, 'CLAMP_CHECK'), vtMove + Vector3d(0,0,DistZClampToTable), GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( XId, 'SOLID'), vtMoveX, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( XId, 'SOLID'), vtMoveX, GDB_RT.GLOB)
|
||||||
|
|
||||||
-- Assegno identificativi alle spie delle morse
|
-- Assegno identificativi alle spie delle morse
|
||||||
@@ -689,6 +725,18 @@ function OnSetHead()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-- Funzione che calcola l'angolo Home di C per la sega a catena dal valore dell'asse virtuale
|
||||||
|
function GetChainSawCHomeFromVirtualAxis( dPosA)
|
||||||
|
-- se A=0 -> T111 -> HomeC = 0
|
||||||
|
if abs( dPosA) < 0.1 then
|
||||||
|
return EgtIf( BD.RIGHT_LOAD, -180, 0)
|
||||||
|
-- altrimenti A=90 -> T114 -> HomeC = -90
|
||||||
|
else
|
||||||
|
return EgtIf( BD.RIGHT_LOAD, 90, 270)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- Funzione per impostare spia stato morsa carrello Y
|
-- Funzione per impostare spia stato morsa carrello Y
|
||||||
function SetPYLight( bClosed)
|
function SetPYLight( bClosed)
|
||||||
@@ -794,3 +842,53 @@ function OnResetMachine()
|
|||||||
end
|
end
|
||||||
EgtSetStatus( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') or GDB_ID.NULL, GDB_ST.OFF)
|
EgtSetStatus( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') or GDB_ID.NULL, GDB_ST.OFF)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function UpdateMinJoinDeltaTol( SB, HB, LB)
|
||||||
|
local L_SMALL = 800
|
||||||
|
local H_V = 90
|
||||||
|
local H_S = 200
|
||||||
|
local H_L = 400
|
||||||
|
local W_V = 90
|
||||||
|
local W_S = 150
|
||||||
|
local W_L = 250
|
||||||
|
local DELTA_TOL_S = 210
|
||||||
|
local DELTA_TOL_V = 110
|
||||||
|
local DELTA_TOL_L = 410
|
||||||
|
if SB <= W_V and HB <= H_V then
|
||||||
|
MinJoin = MinJoinVV
|
||||||
|
DeltaTol = DELTA_TOL_V
|
||||||
|
elseif LB <= L_SMALL then
|
||||||
|
MinJoin = MinJoinSS
|
||||||
|
DeltaTol = DELTA_TOL_S
|
||||||
|
else
|
||||||
|
local dMinJoinS
|
||||||
|
local dMinJoinL
|
||||||
|
if SB <= W_S then
|
||||||
|
dMinJoinS = MinJoinSS
|
||||||
|
dMinJoinL = MinJoinLS
|
||||||
|
elseif SB <= W_L then
|
||||||
|
local Coeff = ( SB - W_S) / ( W_L - W_S)
|
||||||
|
dMinJoinS = ( 1 - Coeff) * MinJoinSS + Coeff * MinJoinSL
|
||||||
|
dMinJoinL = ( 1 - Coeff) * MinJoinLS + Coeff * MinJoinLL
|
||||||
|
else
|
||||||
|
dMinJoinS = MinJoinSL
|
||||||
|
dMinJoinL = MinJoinLL
|
||||||
|
end
|
||||||
|
if HB <= H_S then
|
||||||
|
MinJoin = dMinJoinS
|
||||||
|
DeltaTol = DELTA_TOL_S
|
||||||
|
elseif HB <= H_L then
|
||||||
|
local Coeff = ( HB - H_S) / ( H_L - H_S)
|
||||||
|
MinJoin = ( 1 - Coeff) * dMinJoinS + Coeff * dMinJoinL
|
||||||
|
DeltaTol = ( 1 - Coeff) * DELTA_TOL_S + Coeff * DELTA_TOL_L
|
||||||
|
else
|
||||||
|
MinJoin = dMinJoinL
|
||||||
|
DeltaTol = DELTA_TOL_L
|
||||||
|
end
|
||||||
|
if SB < W_V then
|
||||||
|
DeltaTol = DELTA_TOL_V
|
||||||
|
end
|
||||||
|
end
|
||||||
|
MinOther = abs( MinY) + abs( MaxV) + MinJoin
|
||||||
|
end
|
||||||
Binary file not shown.
+27
-18
@@ -20,9 +20,10 @@
|
|||||||
2=d,OpenMinSafe,0
|
2=d,OpenMinSafe,0
|
||||||
3=d,OpenOutRaw,0
|
3=d,OpenOutRaw,0
|
||||||
4=l,MaxOptSize,0
|
4=l,MaxOptSize,0
|
||||||
|
5=b,AdjustFeed,1
|
||||||
|
|
||||||
[Mortising]
|
[Mortising]
|
||||||
0=d,MaxElev,0
|
0=l,MaxElev,0
|
||||||
|
|
||||||
[Chiseling]
|
[Chiseling]
|
||||||
|
|
||||||
@@ -33,26 +34,34 @@
|
|||||||
[GenMachining]
|
[GenMachining]
|
||||||
|
|
||||||
[SurfRoughing]
|
[SurfRoughing]
|
||||||
0=l,MaxElev,1000
|
0=l,MaxElev,0
|
||||||
1=b,PlaneZ,0
|
1=b,PlaneZ,0
|
||||||
|
2=i,Order,[0=ByPlane;1=ByDepth]
|
||||||
|
|
||||||
[SurfFinishing]
|
[SurfFinishing]
|
||||||
0=b,SkipMaxDown,1
|
0=b,SkipMaxDown,1
|
||||||
|
1=i,OptimalType,[0=ZigZag;2=SpiralIn;3=SpiralOut]
|
||||||
|
2=d,SplitAngle,45
|
||||||
|
3=d,AngleTol,5
|
||||||
|
|
||||||
[5AxMilling]
|
[5AxMilling]
|
||||||
0=l,LinTol,0.01
|
0=s,VtAuxDir,0,1,0
|
||||||
1=l,MaxLen,10
|
1=l,LinTol,0.01
|
||||||
2=s,Type,ZigZag
|
2=l,MaxLen,10
|
||||||
3=d,SideAng,90
|
3=i,ProjType,[0=MinDist;1=FixedDir;2=Guide]
|
||||||
4=l,Step,10
|
4=i,PocketType,[0=ZigZag;2=SpiralIn;3=SpiralOut]
|
||||||
5=d,AngIni,-90
|
5=d,PocketAng,0
|
||||||
6=d,AngFin,90
|
6=d,SideAng,90
|
||||||
7=l,LiTang,0
|
7=d,LeadAng,0
|
||||||
8=l,LiOrth,0
|
8=l,Step,10
|
||||||
9=l,LiElev,0
|
9=d,AngIni,-90
|
||||||
10=l,LoTang,0
|
10=d,AngFin,90
|
||||||
11=l,LoOrth,0
|
11=l,LiTang,0
|
||||||
12=l,LoElev,0
|
12=l,LiOrth,0
|
||||||
13=b,DirFromGuide,0
|
13=l,LiElev,0
|
||||||
14=b,SurfAvoid,0
|
14=l,LoTang,0
|
||||||
|
15=l,LoOrth,0
|
||||||
|
16=l,LoElev,0
|
||||||
|
17=b,DirFromGuide,0
|
||||||
|
18=b,SurfAvoid,0
|
||||||
|
19=d,SingConeAng,0.1
|
||||||
|
|||||||
@@ -51,6 +51,9 @@ if IsTC2Active then
|
|||||||
{Pos = "Pos19", TcPos = "T26", Head = "H1", Group = "G3"},
|
{Pos = "Pos19", TcPos = "T26", Head = "H1", Group = "G3"},
|
||||||
{Pos = "Pos20", TcPos = "T27", Head = "H1", Group = "G3"},
|
{Pos = "Pos20", TcPos = "T27", Head = "H1", Group = "G3"},
|
||||||
{Pos = "Pos21", TcPos = "T28", Head = "H1", Group = "G3"}}
|
{Pos = "Pos21", TcPos = "T28", Head = "H1", Group = "G3"}}
|
||||||
|
if EgtGetHeadId( 'H5') then
|
||||||
|
table.insert( PositionTableTC2, {Pos = "Pos22", TcPos = "T91", Head = "H5", Group = "G2"})
|
||||||
|
end
|
||||||
EgtJoinTables( PositionTable, PositionTableTC2)
|
EgtJoinTables( PositionTable, PositionTableTC2)
|
||||||
else
|
else
|
||||||
local SecSuppId = EgtGetTcPosId( 'T111')
|
local SecSuppId = EgtGetTcPosId( 'T111')
|
||||||
|
|||||||
Binary file not shown.
+18
-18
@@ -6,38 +6,38 @@
|
|||||||
|
|
||||||
[DRILL_STD]
|
[DRILL_STD]
|
||||||
0=th,TH,
|
0=th,TH,
|
||||||
1=d,STEP
|
1=l,STEP
|
||||||
2=s,DOUBLE
|
2=tl,DOUBLE
|
||||||
|
|
||||||
[SAW_STD]
|
[SAW_STD]
|
||||||
0=th,TH,
|
0=th,TH,
|
||||||
1=d,STEP
|
1=l,STEP
|
||||||
2=d,SIDESTEP
|
2=l,SIDESTEP
|
||||||
3=b,LONGCUT
|
3=b,LONGCUT
|
||||||
|
|
||||||
[SAW_FLAT]
|
[SAW_FLAT]
|
||||||
0=th,TH,
|
0=th,TH,
|
||||||
1=d,STEP
|
1=l,STEP
|
||||||
2=d,SIDESTEP
|
2=l,SIDESTEP
|
||||||
3=b,LONGCUT
|
3=b,LONGCUT
|
||||||
|
|
||||||
[MILL_STD]
|
[MILL_STD]
|
||||||
0=th,TH,
|
0=th,TH,
|
||||||
1=d,STEP
|
1=l,STEP
|
||||||
2=d,SIDESTEP
|
2=l,SIDESTEP
|
||||||
3=d,SIDEDEPTH
|
3=l,SIDEDEPTH
|
||||||
4=s,DOUBLE
|
4=tl,DOUBLE
|
||||||
5=dr,TOOL_OVERHANG
|
5=lr,TOOL_OVERHANG
|
||||||
|
|
||||||
[MILL_NOTIP]
|
[MILL_NOTIP]
|
||||||
0=th,TH,
|
0=th,TH,
|
||||||
1=d,STEP
|
1=l,STEP
|
||||||
2=d,SIDESTEP
|
2=l,SIDESTEP
|
||||||
3=d,SIDEDEPTH
|
3=l,SIDEDEPTH
|
||||||
4=s,DOUBLE
|
4=tl,DOUBLE
|
||||||
5=dr,TOOL_OVERHANG
|
5=lr,TOOL_OVERHANG
|
||||||
|
|
||||||
[MORTISE_STD]
|
[MORTISE_STD]
|
||||||
0=b,MORTISE
|
0=b,MORTISE
|
||||||
1=d,STEP
|
1=l,STEP
|
||||||
2=d,SIDESTEP
|
2=l,SIDESTEP
|
||||||
|
|||||||
@@ -1,5 +1,53 @@
|
|||||||
==== Common_FAST Update Log ====
|
==== Common_FAST Update Log ====
|
||||||
|
|
||||||
|
Versione 3.1d2 (22/04/2026)
|
||||||
|
- (GEN) Corretta generazione del PreparePostRotation (in tutti i CN) ora salva lo stato della pinza per lo spostamento successivo. Ticket#2933
|
||||||
|
- (SIM-GEN) Corretto pinzaggio in caso di passo del pellegrino con recupero completo di una sola pinza
|
||||||
|
|
||||||
|
Versione 3.1d1 (14/04/2026)
|
||||||
|
- (SIM-GEN) Aggiorna lo step totale del PilgrimStep e lo step Y con il valore di MyMinY, di modo che tenga conto del AGG_LOAD quando c'è. Ticket#2919
|
||||||
|
- (GEN) Per NUM, si lascia aperta la pinza di carico in caso di END2. TPA era già corretto. Ticket#2869
|
||||||
|
|
||||||
|
Versione 3.1c2 (30/03/2026)
|
||||||
|
- (SIM-GEN) Corretti moviemnti con motosega. Ora si ruota la C con B sempre a zero, anche alla posizione X di sicurezza. Ticket#2866
|
||||||
|
|
||||||
|
Versione 3.1c1 (27/03/2026)
|
||||||
|
- (SIM-GEN) FASTCLAMPING = true : si suddivide il movimento metà tirando e metà spingendo con altra pinza. Così si aumenta la velocità.
|
||||||
|
- FASTCLAMPING = false : una pinza resta ferma e si fa il movimento tutto con una pinza. Così si limita lo scivolamento del pezzo.
|
||||||
|
- (GEN) In caso di motosega prelevata, si ruota in home. Ticket#2866
|
||||||
|
|
||||||
|
Versione 3.1a2 (26/01/2026)
|
||||||
|
- (GEN) Nella G101 il parametro EE era sempre a 4 perchè la variabile veniva settata dopo. Ticket#2796
|
||||||
|
|
||||||
|
Versione 3.1a1 (08/01/2026)
|
||||||
|
- (SIM) Ottimizzata scrittura funzione ClampCheck post aggiornamento dll
|
||||||
|
- (SIM) Corretto problema della funzione OnSimulDispositionStart in caso di fase finale.
|
||||||
|
- (MLDE-SIM-GEN) Variabile DeltaTol deve essere spostata in MLDE
|
||||||
|
|
||||||
|
Versione 2.7l3 (22/12/2025)
|
||||||
|
- (SIM) Eliminata MinJoin, utilizzata al suo posto funzione già esistente UpdateMinJoin nell'mlde
|
||||||
|
- (SIM) Modificata formula calcolo Area minima
|
||||||
|
|
||||||
|
Versione 2.7l2 (18/12/2025)
|
||||||
|
- (SIM) Aggiunta funzione CheckClamping
|
||||||
|
|
||||||
|
Versione 2.7l1 (10/12/2025)
|
||||||
|
- (SIM) Aggiornata risoluzione VMillTol in funzione dello spessore lama
|
||||||
|
- (EST) Modifiche a calcolo stima tempi, da verificare.
|
||||||
|
- (SIM) Corretto movimento in simulazione che non rispettava movimento generato.
|
||||||
|
- (GEN) Con controllo NUM/NUM_PLUS nella scrittura della coordinata tolto il simbolo '='
|
||||||
|
- (SIM) Aggiunto controllo C in base a carico Dx o Sx durante il cambio utensile
|
||||||
|
|
||||||
|
Versione 2.7k1 (10/11/2025)
|
||||||
|
- (GEN) Corretto set variabili info utensile prima del movimento in home in caso di pezzi alti per NUM/NUM_PLUS.
|
||||||
|
|
||||||
|
Versione 2.7j2 (08/10/2025)
|
||||||
|
- (SIM-GEN) Quando si scarica motosega, si raddrizza prima l'asse B e poi si muove il C. Ora sempre e non solo se pezzo alto.
|
||||||
|
|
||||||
|
Versione 2.7j1 (06/10/2025)
|
||||||
|
- (SIM-GEN) Quando si scarica motosega, si raddrizza prima l'asse B e poi si muove il C.
|
||||||
|
- (MLDE-SIM) Controllo collisione tra utensile e TOP testa C. Serve CAM5 2.7j1
|
||||||
|
|
||||||
Versione 2.7i3 (23/09/2025)
|
Versione 2.7i3 (23/09/2025)
|
||||||
- (MLDE-ALL) Spostate costanti dimensioni utensili in MLDE.
|
- (MLDE-ALL) Spostate costanti dimensioni utensili in MLDE.
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
local InfoCommon_STD_PP = {
|
local InfoCommon_STD_PP = {
|
||||||
NAME = 'Common_FAST', -- nome script PP standard
|
NAME = 'Common_FAST', -- nome script PP standard
|
||||||
VERSION = '2.7i3', -- versione script
|
VERSION = '3.1d2', -- versione script
|
||||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user