Essetre-FASTrl 2.6a1 :

- aggiunta gestione fresa BlockHaus com in FAST.
This commit is contained in:
Dario Sassi
2024-01-17 19:44:44 +01:00
parent 0ea0ac07ca
commit 63b1ac1fb8
13 changed files with 178 additions and 79 deletions
+25
View File
@@ -64,6 +64,10 @@ local BeamData = {
MAXDIAM_POCK_CORNER = 30, -- diametro massimo utensile ammesso per tasche con angoli interni
ADVANCE_TAIL_CUT = true, -- per spostare prima del taglio di separazione il taglio di coda su pezzi corti con robabile caduta
ADVANCE_TAIL_OFFS = 5, -- accorciamento taglio di coda avanzato (minimo 1)
HEAD_DIM_FOR_BH = 190, -- dimensione di ingombro della testa per block haus
MAX_LEN_BH_FROM_BOTTOM = 195, -- massima lunghezza lavorabile da un lato di block haus da sotto
MAX_DIST_BH_FROM_BOTTOM = 395, -- massima distanza tra naso mandrino e sopra della trave senza collisione
BH_MACHINE = false, -- flag che indica la tipologia di macchina configurata BlockHaus
}
-- Aggiornamento con dati da TechnoEssetre7
@@ -78,6 +82,17 @@ end
if EgtExistsFile( sData) then
local Machine = dofile( sData)
if Machine then
if Machine.Offsets then
BeamData.ANG_TRASM = ( Machine.Offsets.SECSUP and Machine.Offsets.SECSUP >= 3)
BeamData.BH_MACHINE = ( Machine.Offsets.BLOCKHAUS == 1)
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.DIM_TO_CENTER_STRIP = Machine.Offsets.DIM_TO_CENTER_STRIP or BeamData.DIM_TO_CENTER_STRIP
BeamData.MAXDIAM_POCK_CORNER = Machine.Offsets.MAXDIAM_POCK_CORNER or BeamData.MAXDIAM_POCK_CORNER
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
@@ -111,6 +126,16 @@ local function GetMaxLenRidgeLapFromBottom( dHRaw)
end
BeamData.GetMaxLenRidgeLapFromBottom = GetMaxLenRidgeLapFromBottom
---------------------------------------------------------------------
local function GetChainSawBlockedAxis( nInd)
if nInd == 1 then
return 'A=90'
else
return 'A=0'
end
end
BeamData.GetChainSawBlockedAxis = GetChainSawBlockedAxis
---------------------------------------------------------------------
local function GetChainSawInitAngs( vtN, vtO)
if vtN:getY() > 0 and vtO:getX() > 0 then
+2
View File
@@ -5,6 +5,7 @@
[Drill]
1=Drill
2=Pocket
3=AngleDrill
[Milling]
1=Prof
@@ -34,3 +35,4 @@
[Sawing]
1=Sawing
2=Mortising
+9 -3
View File
@@ -1,4 +1,4 @@
-- Processore macchina Essetre-FAST by EgalTech s.r.l. 2023/07/26
-- Processore macchina Essetre-FAST by EgalTech s.r.l. 2024/01/17
-- Con controllo numerico NUM
-- 2021/04/23 DS ver 2.3d3 Se non c'è BtlInfo cerco il gruppo di lavoro corrente.
-- 2021/07/21 DS ver 2.3g5 Modifiche varie da TPA.
@@ -22,6 +22,10 @@ local TEST_USE = false
-- *** GENERATION ***
---------------------------------------------------------------------
function OnStart()
-- controllo versione programma
if not EMT.VER or EMT.VER < MIN_MACH_VER then
EmtSetLastError( 1200, 'A newer version of the program is required (minimum EgtMachKernel '..MIN_MACH_VER..')')
end
EMT.USETO1 = false -- abilitazione uso origine tavola
EMT.MODAL = true -- abilitazione emissione modale
EMT.INCHES = false -- unità di misura mm/inches
@@ -629,7 +633,7 @@ function OnRapid()
local sES = ' ES'..EgtNumToString( EMT.S, 0)
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
if EMT.ST > BeamHeightForFixRot then
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
sOut = sOut .. ' EH1'
end
if EMT.LOAD or bHeadFirst then
@@ -1256,6 +1260,7 @@ function PreparePreRotation( sCmd)
EMT.PREROT = true
elseif Cmd[2] == 'SplitRot' then
EMT.SPLITROT = true
EMT.SE = ' EE2'
end
elseif Cmd[1] == '1' then
local sMsg = Cmd[2] .. Cmd[3]
@@ -1503,7 +1508,8 @@ function VerifyEmitRotation()
-- determino quanto ruotare
local nDeltaRot = nRot - nPrevRot
-- se rotazione automatica richiesta e possibile
if AutomaticRotation and EMT.LB >= AutoRotMinLen then
local dRefLen = EgtIf( IsMid2Phase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE), EMT.LT, EMT.LB)
if AutomaticRotation and dRefLen >= AutoRotMinLen then
local sOut = 'M180 L0=' .. tostring( nDeltaRot)
EmtOutput( sOut)
else
+10 -4
View File
@@ -1,4 +1,4 @@
-- Processore macchina Essetre-FASTrl by EgalTech s.r.l. 2023/04/19
-- Processore macchina Essetre-FASTrl by EgalTech s.r.l. 2024/01/17
-- Con controllo numerico TPA
-- 2023/04/19 DS ver 2.5d1 Al carico dopo rotazione su linea con P4=75 messo P5=110 invece di 112 (come FAST).
@@ -10,6 +10,10 @@ local TEST_USE = false
-- *** GENERATION ***
---------------------------------------------------------------------
function OnStart()
-- controllo versione programma
if not EMT.VER or EMT.VER < MIN_MACH_VER then
EmtSetLastError( 1200, 'A newer version of the program is required (minimum EgtMachKernel '..MIN_MACH_VER..')')
end
EMT.USETO1 = false -- abilitazione uso origine tavola
EMT.MODAL = true -- abilitazione emissione modale
EMT.INCHES = false -- unità di misura mm/inches
@@ -387,6 +391,7 @@ function OnToolSelect()
EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN)
EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
if MCH_TP.DIST then EMT.TDIST = EgtTdbGetCurrToolParam( MCH_TP.DIST) end
if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end
end
end
@@ -623,7 +628,7 @@ function OnRapid()
' P4=' .. EgtNumToString( EMT.R2, 3) .. ' P5=' .. EgtNumToString( EMT.R1, 3) ..
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
if EMT.ST > BeamHeightForFixRot then
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
sOut = sOut .. ' P12=1'
end
if EMT.LOAD then
@@ -1296,6 +1301,7 @@ function PreparePreRotation( sCmd)
EMT.PREROT = true
elseif Cmd[2] == 'SplitRot' then
EMT.SPLITROT = true
EMT.SE = ' P8=2'
end
elseif Cmd[1] == '1' then
local sMsg = Cmd[2] .. Cmd[3]
@@ -1538,7 +1544,7 @@ end
---------------------------------------------------------------------
function AdjustTcPos( bLen3)
local sPos = EMT.TCPOS:gsub( 'T', '')
if sPos == '101' then
if sPos == '101' and EMT.HEAD == 'H3' then
if abs( EMT.R3 - 0) < 0.1 then
sPos = '101'
elseif abs( EMT.R3 - 270) < 0.1 then
@@ -1550,7 +1556,7 @@ function AdjustTcPos( bLen3)
else
EmtSetLastError( 1210, 'Chain saw orientation not allowed')
end
elseif sPos == '111' then
elseif sPos == '111' and EMT.HEAD == 'H3' then
if abs( EMT.R3 - 0) < 0.1 then
sPos = '111'
elseif abs( EMT.R3 - 270) < 0.1 then
+1
View File
@@ -18,6 +18,7 @@ Active=1
[ToolHolder]
H1.1=Standard.nge
H1.1:MILL_NOTIP=MillNoTip.nge
H1.1:SAW_FLAT=TcSaw.nge
H2.1=Saw.nge
H3.1=ChainSaw.nge
+42 -28
View File
@@ -1,15 +1,18 @@
-- Descrizione macchina Essetre-FAST by EgalTech s.r.l. 2023/07/26
-- Descrizione macchina Essetre-FAST by EgalTech s.r.l. 2024/01/17
-- 2022/07/19 Ver.2.4g1 DS Riallineamento con FAST standard.
-- 2022/07/22 Ver.2.4g2 DS Modifiche per ribaltamento pezzo con molto scarto iniziale.
-- 2023/01/16 Ver.2.5a1 DS/LM Modificata posizione home della testa H3.
-- 2023/01/23 Ver.2.5a2 DS Allineamento con FAST (per problemi scorrimento carrelli rispetto a trave).In simulazione corretta visualizzazione Sega a catena.
-- 2023/07/26 Ver.2.5g1 DS Per NUM aggiunta gestione rotazione in alto su pezzi alti (G101 EH1) come per TPA in versione 2.3f2.
-- 2023/07/26 Ver.2.5g2 DS Per NUM tolta segnalazione errore rotazione a Zmax per pezzi alti non gestita (era su EMT.FLAG == 5).
-- 2023/09/29 ver 2.5i1 In BeamData e mlde aggiunta la lettura di alcuni parametri da Ts3Data.
-- 2024/01/17 Ver.2.6a1 DS Aggiunta gestione BlockHouse come in FAST.
require( 'EmtGenerator')
EgtEnableDebug( false)
PP_VER = '2.5g2'
PP_VER = '2.6a1'
MIN_MACH_VER = '2.5k1'
-- Parametri macchina
NumericalControl = 'TPA' -- NUM o TPA
@@ -46,6 +49,7 @@ AutomaticRotation = true
AutoRotMinLen = 2600
DefTcPos = 'T2'
SecondSupport = false
SpecialBH = false
MaxUnloadLen = 0
BeamHeightForFixRot = 9999 -- per abilitare assegnare 500
CoeffVM = 0.5
@@ -97,11 +101,12 @@ if EgtExistsFile( sData) then
if Machine.Offsets.OFFSETX then DeltaTabY = -Machine.Offsets.OFFSETX end
if Machine.Offsets.OFFSETZ then DeltaTabZ = Machine.Offsets.OFFSETZ + EgtIf( NumericalControl == 'TPA', MillOffs, 0) end
if Machine.Offsets.SECSUP then SecondSupport = ( Machine.Offsets.SECSUP == 1) end
if Machine.Offsets.BLOCKHAUS then SpecialBH = ( Machine.Offsets.BLOCKHAUS == 1) end
if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end
end
end
end
if SpecialBH then SecondSupport = false end
EmtGeneral {
File='Essetre-FASTrl.nge',
@@ -135,7 +140,7 @@ EmtAxis {
Dir = Z_AX(),
Pos = Point3d( -19.25, -113.54, 790.0),
Stroke = {MinZ, MaxZ},
Home = 0,
Home = MaxZ,
Geo = 'Z_AXIS/GEO',
Aux = {'Z_AXIS/SOLID', 'Z_AXIS/COLLISION'}}
EmtAxis {
@@ -180,8 +185,8 @@ local H2Id = EmtHead {
Parent = 'B',
HSet = 'H2',
Type = MCH_HT.STD,
Pos = Point3d( 0, 0, (MillOffs-SawOffs)),
TDir = Vector3d( 0, -sin( SawBOffs), -cos( SawBOffs)),
Pos = Point3d( 0, 0, ( MillOffs - SawOffs)),
TDir = VectorFromRotated( -Z_AX(), X_AX(), -SawBOffs),
ADir = X_AX(),
Rot1W = 0.2,
OthColl = {'H1', 'H3', 'B/SOLID', 'C/SOLID'},
@@ -217,17 +222,6 @@ EgtSetInfo( H3Id, 'ZMAXONROT', '1,5')
if BeamHeightForFixRot < 1000 then
EgtSetInfo( H3Id, 'ROTATZMAX', '1')
end
-- Dummy
EmtHead {
Name = 'H4',
Parent = 'B',
HSet = 'H4',
Type = MCH_HT.STD,
Pos = Point3d( 0, 0, 0),
TDir = Z_AX(),
ADir = X_AX(),
Rot1W = 0.2,
Geo = 'H4_HEAD/GEO'}
-- Morse
local YId = EmtAxis {
Name = 'Y',
@@ -364,13 +358,23 @@ EmtTcPos {
TDir = X_AX(),
ADir = Y_AX(),
Geo = 'BASE/T11'}
EmtTcPos {
Name = 'T101',
Parent = 'Base',
Pos = Point3d( 510.4, -113.2, -160.8),
TDir = -X_AX(),
ADir = Z_AX(),
Geo = 'BASE/T101'}
if not SpecialBH then
EmtTcPos {
Name = 'T101',
Parent = 'Base',
Pos = Point3d( 510.4, -113.2, -160.8),
TDir = -X_AX(),
ADir = Z_AX(),
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
if SecondSupport then
EmtTcPos {
Name = 'T111',
@@ -380,6 +384,15 @@ if SecondSupport then
ADir = -X_AX(),
Geo = 'BASE/T111'}
end
if SpecialBH then
EmtTcPos {
Name = 'T111',
Parent = 'Base',
Pos = Point3d( 810.4, -113.2, -329.8),
TDir = -Y_AX(),
ADir = -X_AX(),
Geo = 'BASE/T111S'}
end
-- Aggiusto posizioni geometriche
local vtMove = Vector3d( 0, ( DeltaTabY + 913.16), ( DeltaTabZ + 830.037))
@@ -411,15 +424,16 @@ PVLightId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( PVId, 'SOLID') or GD
function OnSetHead()
-- se testa lama
if EMC.HEAD == 'H2' then
EmtModifyAxisDirection( 'B', Vector3d( cos( SawCOffs), -sin( SawCOffs), 0))
EmtModifyAxisDirection( 'B', VectorFromRotated( X_AX(), Z_AX(), -SawCOffs))
EmtModifyAxisHome( 'C', 0)
-- se sega a catena
elseif EMC.HEAD == 'H3' then
EmtModifyAxisDirection( 'B', X_AX())
EmtModifyAxisHome( 'C', 180)
if EMC.DIST and abs( EMC.DIST) > 1 then
EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -EMC.DIST))
local vtMove = Point3d( 0, 0, -EMC.DIST) - Point3d( EMC.EXITPOS)
local dDist = EgtIf( EMC.DIST and abs( EMC.DIST) > 1, EMC.DIST, ChSawLen)
EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -dDist))
if not EMC.VER or EMC.VER < '2.5h2' then
local vtMove = Point3d( 0, 0, -dDist) - Point3d( EMC.EXITPOS)
local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT))
EgtMove( ExitId, vtMove)
end
+56 -23
View File
@@ -35,15 +35,21 @@ local COLL_SAFE_DIST = 3
---------------------------------------------------------------------
function OnSimulStart()
-- controllo versione programma
if not EMT.VER or EMT.VER < MIN_MACH_VER then
EmtSetLastError( 1200, 'A newer version of the program is required (minimum EgtMachKernel '..MIN_MACH_VER..')')
end
-- Carico gli utensili sulle barre portautensili
local vTcPos = EgtGetAllTcPosNames()
if vTcPos then
for i = 1, #vTcPos do
local vTools = EgtGetToolsInCurrSetupPos( vTcPos[i])
if vTools and vTools[1] then
EgtLoadTool( vTcPos[i], 1, vTools[1])
ShowToolInTcPos( vTcPos[i], true)
for j = 1, #( vTools or {}) do
if vTools[j] ~= '' then
EgtLoadTool( vTcPos[i], j, vTools[j])
end
end
ShowToolInTcPos( vTcPos[i], true)
end
end
-- Se reset o home, esco
@@ -68,21 +74,34 @@ function OnSimulStart()
DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4)
-- Preparo lista solidi macchina con cui possono collidere gli oggetti sopra riportati (in aggiunta a VMill)
EMT.MCODET = {}
EMT.MCODET[1] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'VOL1')
EMT.MCODET[2] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'VOL2')
EMT.MCODET[3] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'PY'), 'COLLISION'), 'VOL')
EMT.MCODET[4] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'V'), 'COLLISION'), 'VOL1')
EMT.MCODET[5] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'V'), 'COLLISION'), 'VOL2')
EMT.MCODET[6] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'PV'), 'COLLISION'), 'VOL')
EMT.MCODET[7] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'SIDE1')
EMT.MCODET[8] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'SIDE2')
for i = #EMT.MCODET, 1, -1 do
if not EMT.MCODET[i] then
table.remove( EMT.MCODET, i)
EgtOutLog( ' Warning : MCODET element (' .. tostring( i) .. ') is null')
elseif EgtGetDebugLevel() >= 4 then
EgtOutLog( ' MCODET element (' .. tostring( i) .. ') is ok')
local McdData = { { Grp = 'Y', Sub = 'COLLISION', Name = 'VOL1'},
{ Grp = 'Y', Sub = 'COLLISION', Name = 'VOL2'},
{ Grp = 'PY', Sub = 'COLLISION', Name = 'VOL'},
{ Grp = 'V', Sub = 'COLLISION', Name = 'VOL1'},
{ Grp = 'V', Sub = 'COLLISION', Name = 'VOL2'},
{ Grp = 'PV', Sub = 'COLLISION', Name = 'VOL'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'SIDE1'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'SIDE2'}}
EgtOutLog( 'MCODET Objects :', 4)
local nMcdNullCnt = 0
for i = 1, #McdData do
local nGrpId
if McdData[i].Grp == 'Base' then
nGrpId = EgtGetBaseId( 'Base')
else
nGrpId = EgtGetAxisId( McdData[i].Grp)
end
local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId or GDB_ID.NULL, McdData[i].Sub) or GDB_ID.NULL, McdData[i].Name)
if nId then
table.insert( EMT.MCODET, nId)
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is ok', 4)
else
nMcdNullCnt = nMcdNullCnt + 1
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4)
end
end
if nMcdNullCnt > 0 then
EgtOutLog( 'Warning : MCODET with one or more null Element(s) ')
end
-- Preparo lista collisioni vuota
EMT.COLLIDE = {}
@@ -1000,11 +1019,20 @@ end
---------------------------------------------------------------------
function ShowToolInTcPos( sTcPos, bShow)
-- recupero il gruppo dell'utensile
local TcExitId = EgtGetFirstNameInGroup( EgtGetTcPosId( sTcPos or '') or GDB_ID.NULL, 'T1')
if not TcExitId then return end
-- imposto lo stato di visualizzazione
EgtSetStatus( TcExitId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF))
-- recupero identificativo della posizione sul TC
local TcPosId = EgtGetTcPosId( sTcPos or '')
if not TcPosId then return end
-- ciclo sulle possibili uscite
for i = 1, 100 do
-- recupero il gruppo dell'utensile
local TcExitId = EgtGetFirstNameInGroup( TcPosId, 'T'..tostring( i))
if not TcExitId then break end
-- imposto lo stato di visualizzazione
EgtSetStatus( TcExitId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF))
end
-- recupero eventuale gruppo ausiliario da visualizzare/nascondere
local TcHSId = EgtGetFirstNameInGroup( TcPosId, sTcPos..'_HS')
if TcHSId then EgtSetStatus( TcHSId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) end
end
---------------------------------------------------------------------
@@ -1193,6 +1221,7 @@ end
function OnEstimPathStart()
EMT.AUXTYPE = nil
EMT.MCHMOVEFIRST = true
EMT.CHARMOVE = nil
end
---------------------------------------------------------------------
@@ -1220,7 +1249,11 @@ function OnEstimPathStartAux()
end
-- altrimenti, spostamento carrelli
else
if EMT.AUXTOT > 2 and EMT.AUXIND == EMT.AUXTOT then
local Cmd = EgtSplitString( EMT.AUX)
if ( Cmd[1] == '1' and Cmd[2] ~= 'Z') or Cmd[1] == '2' or Cmd[1] == '3' then
EMT.CHARMOVE = true
end
if EMT.AUXIND == EMT.AUXTOT and EMT.CHARMOVE then
local dTime = ( EMT.AUXTOT - 2) * CHAR_ONE_MOVE_T
EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime
EmtTleAddMachining( 'Charriots move', EmtSecToHMS( dTime), ' - ', ' - ')
+33 -21
View File
@@ -39,7 +39,6 @@ local DELTA_TOL_FIXED = 50
local DeltaTol = DELTA_TOL_S
local DELTA_SIC = 1
local AGG_LOAD = 50
local AGG_B_SPLIT = 0
local MIN_JOIN_VV = 75
local MIN_JOIN_SS = 100
local MIN_JOIN_LS = 290
@@ -243,7 +242,7 @@ function OnSpecialApplyDisposition()
EMC.ERR = 0
-- Campi obbligatori ma non usati
EMC.HEAD = "H4"
EMC.HEAD = ""
EMC.EXIT = 1
EMC.TCPOS = ""
EMC.SHIFTS = 0
@@ -347,13 +346,11 @@ function OnSpecialApplyDisposition()
return
end
-- Verifico ci sia un solo grezzo nella fase corrente
local nRawCount = 0
-- Recupero il grezzo in lavoro
local nCurrRawId = GDB_ID.NULL
local nRawId = EgtGetFirstRawPart()
while nRawId do
if EgtVerifyRawPartPhase( nRawId, EMC.PHASE) then
nRawCount = nRawCount + 1
if EgtVerifyRawPartPhase( nRawId, EMC.PHASE) and not EgtVerifyRawPartPhase( nRawId, EMC.PHASE + 1) then
nCurrRawId = nRawId
end
nRawId = EgtGetNextRawPart( nRawId)
@@ -374,11 +371,11 @@ function OnSpecialApplyDisposition()
UpdateMinJoinDeltaTol()
-- Assegno sovramateriale di testa e ingombro tagli di testa e di coda
EMC.HOVM = 0
EMC.HCING = 0
EMC.TCING = 0
EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0
EMC.HCING = EgtGetInfo( nCurrRawId, 'HCING', 'd') or 0
EMC.TCING = EgtGetInfo( nCurrRawId, 'TCING', 'd') or 0
-- Devo scaricare il grezzo rimasto (deve essere unico)
-- Devo scaricare il pezzo o il grezzo rimasto
-- Posizione trave
local dPosT
@@ -386,8 +383,8 @@ function OnSpecialApplyDisposition()
local vCmd = {}
if EMC.PHASE == 1 or IsEnd2Phase( EMC.PHASE) then
dPosT = LoadT
if IsEnd2Phase( EMC.PHASE) then dPosT = dPosT + TurnerOffs end
vCmd = SpecCalcLoad( dPosT, 0, min( EMC.LB - MinOther - AGG_LOAD, MaxY - dPosT))
if IsEnd2Phase( EMC.PHASE) then dPosT = dPosT + TurnerOffs - EMC.HOVM end
vCmd = SpecCalcLoad( dPosT, 0, min( EMC.LB - MinOther - AGG_LOAD - EMC.HOVM, MaxY - dPosT))
-- se altrimenti fase successiva alla prima di tipo inizio o rimanenza
elseif IsStartOrRestPhase( EMC.PHASE) then
-- recupero posizione trave e quota di aggancio carrello
@@ -418,7 +415,7 @@ function OnSpecialApplyDisposition()
if IsStartOrRestPhase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE) then
EMC.TPOS = dPosT
SpecSetCarrPosFromCmds( vCmd)
local dDistFront = EgtIf( EMC.LB < abs( MinV - UnloadT), MinJoin, EMC.LB - abs( MinV - UnloadT) + MinJoin + DeltaTol)
local dDistFront = EgtIf( EMC.LB < abs( MinV - UnloadT), MinJoin, EMC.LB - abs( MinV - UnloadT) + MinJoin + DeltaTol) + EMC.HOVM
vCmd2 = SpecCalcCarriages( dDistFront, 0)
if vCmd and #vCmd > 1 and vCmd2 and #vCmd2 > 1 then
table.insert( vCmd, { 0, 'CARR_MOVE'})
@@ -649,8 +646,10 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
if bPreSplit or bSplitting then
local dDistF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
dDistFront = min( dDistFront, dDistF)
local dNextHOVM = EgtGetInfo( EgtGetNextRawPart( nCurrRawId) or GDB_ID.NULL, 'HOVM', 'd') or 0
dDistBack = dDistBack - AGG_B_SPLIT - max( dNextHOVM - 300, 0)
local dNextHOVM = EgtGetInfo( EgtGetNextRawPart( nCurrRawId) or GDB_ID.NULL, 'HOVM', 'd') or 0
local dBackOther = b3Tot:getDimX() - b3Raw:getDimX() - MinOther - dNextHOVM
EgtOutLog( 'DistBack='..EgtNumToString( dDistBack)..' OtherBack='..EgtNumToString( dBackOther), 3)
dDistBack = min( dDistBack, dBackOther)
elseif bPreCut or bCutting then
local dDistF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
dDistFront = min( dDistFront, dDistF)
@@ -875,6 +874,9 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
-- Quota in Z dal punto di inclinazione dei carrelli
local dCompZ = sqrt( 1 - vtTool:getZ() * vtTool:getZ())
local dZup = ptMin:getZ() - 0.5 * dCompZ * dTDiam - ( EMC.ZMIN + 130)
-- Posizione min e max del naso mandrino (rispetto a riferimento pezzo in Y e Z)
local ptHeadMin = ptMin + vtTool * dTLen - Vector3d( 0, EMC.YMIN + EMC.SB, EMC.ZMIN)
local ptHeadMax = ptMax + vtTool * dTLen - Vector3d( 0, EMC.YMIN + EMC.SB, EMC.ZMIN)
-- Ingombro a sinistra
local dDistBack = EMC.LB + ptMin:getX() + LoadT
local dHeadBack = 350
@@ -947,7 +949,7 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
dHeadBack = EgtIf( vtTool:getZ() > 0.966, 160, 280)
end
end
-- pre fresature longitudinali con utensile di fianco
-- per fresature longitudinali con utensile di fianco
if abs( vtTool:getX()) < 0.1 and vtTool:getZ() < 0.707 and vtArm:getX() < -0.5 then
dHeadBack = 500
end
@@ -955,6 +957,11 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
if bChain and vtTool:getX() < 0.5 and vtTool:getZ() < 0.5 and vtArm:getX() < -0.5 then
dHeadBack = max( dHeadBack, 510)
end
-- per fresa diretta quasi esattamente come Y+/- e con la testa non troppo nel pezzo
if not bChain and abs( vtTool:getX()) < 0.017 and abs( vtTool:getZ()) < 0.017 and
(( vtTool:getY() > 0 and ptHeadMin:getY() > 80) or ( vtTool:getY() < 0 and ptHeadMax:getY() < -EMC.SB - 80)) then
dHeadBack = EgtIf( EMC.CNT == 1, 180, 130)
end
-- per interferenza con triangolo di rinforzo sulla pinza Y
if vtTool:getZ() < 0.25 and vtTool:getX() < 0.10 and vtTool:getY() > 0 and vtArm:getX() < -0.707 then
dHeadBack = dHeadBack + 90
@@ -1034,7 +1041,7 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
dHeadFront = EgtIf( vtTool:getZ() > 0.966, 160, 280)
end
end
-- pre fresature longitudinali con utensile di fianco
-- per fresature longitudinali con utensile di fianco
if abs( vtTool:getX()) < 0.1 and vtTool:getZ() < 0.707 and vtArm:getX() > 0.5 then
dHeadFront = 500
end
@@ -1042,6 +1049,11 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
if bChain and vtTool:getX() > -0.5 and vtTool:getZ() < 0.5 and vtArm:getX() > 0.5 then
dHeadFront = max( dHeadFront, 510)
end
-- per fresa diretta quasi esattamente come Y+/- e con la testa non troppo nel pezzo
if not bChain and abs( vtTool:getX()) < 0.017 and abs( vtTool:getZ()) < 0.017 and
(( vtTool:getY() > 0 and ptHeadMin:getY() > 80) or ( vtTool:getY() < 0 and ptHeadMax:getY() < -EMC.SB - 80)) then
dHeadFront = 130
end
-- per interferenza con triangolo di rinforzo sulla pinza V
if vtTool:getZ() < 0.25 and vtTool:getX() > -0.10 and vtTool:getY() > 0 and vtArm:getX() > 0.707 then
dHeadFront = dHeadFront + 90
@@ -2048,8 +2060,8 @@ function SpecAdjustCarrA3( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDelta
table.insert( vCmd, { 11, 0})
-- **1: accentro** Y e (V+T)
dYPosA = MyMinY -- (pos. finale)
dVPosA = dVPosA + dExtraY
dTPosA = dTPosA + dExtraY
dVPosA = dVPosA - dExtraY
dTPosA = dTPosA - dExtraY
dYDeltaA = dYPosA - dTPosA
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
@@ -2971,7 +2983,7 @@ function SpecAdjustCarrB3( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDelta
dYPosA = dYPosA + dCorsaYTd
dTPosA = dTPosA + dCorsaYTd
dVPosA = dVPosA - dCorsaVd
table.insert( vCmd, { 3, 'Y', dTPosA, 'T', dTPosA, 'V', dVPosA})
table.insert( vCmd, { 3, 'Y', dYPosA, 'T', dTPosA, 'V', dVPosA})
-- chiudo il carrello V e apro Y
table.insert( vCmd, { 12, 1})
@@ -2980,7 +2992,7 @@ function SpecAdjustCarrB3( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDelta
dVPosA = dVPosA + dCorsaVTr
dTPosA = dTPosA + dCorsaVTr
dYPosA = MyMinY
table.insert( vCmd, { 3, 'Y', dTPosA, 'T', dTPosA, 'V', dVPosA})
table.insert( vCmd, { 3, 'Y', dYPosA, 'T', dTPosA, 'V', dVPosA})
-- valuto i Delta ottenuti
dYDeltaA = dYPosA - dTPosA
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.