Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c64d5666f0 | |||
| 11c3e0c3e5 | |||
| a7824bf0c8 | |||
| 0f036d5be5 | |||
| d14c84da8f | |||
| 95b10fdfe6 | |||
| 4f43b42149 | |||
| e6e0c3118e | |||
| b1103550fa | |||
| 9be7a2c081 | |||
| 084bf57416 | |||
| a1c8505868 | |||
| 6238241446 | |||
| ff036cd017 | |||
| 6e8b1ab97d | |||
| f69c4259c3 | |||
| 6be500cf38 | |||
| 85944dc2da | |||
| 8ac8d2d2c2 | |||
| a1a4f230ae | |||
| db6c8c0689 |
+4
-2
@@ -73,10 +73,11 @@ local BeamData = {
|
||||
PRECUT_HEAD = true, -- flag abilitazione pretaglio grezzo a zero in testa
|
||||
PRECUT_TAIL = true, -- flag abilitazione pretaglio grezzo a zero in coda
|
||||
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)
|
||||
ADVANCE_TAIL_OFFS = 5, -- accorciamento taglio di coda avanzato (minimo 1)
|
||||
DOUBLE_HEAD_DOVETAIL = true, -- flag abilitazione lavorazione mortase a coda di rondine in doppio
|
||||
DOUBLE_HEAD_MORTISE = true, -- flag abilitazione lavorazione mortase in doppio
|
||||
DOUBLE_HEAD_DRILLING = true -- flag abilitazione forature in doppio
|
||||
DOUBLE_HEAD_DRILLING = true, -- flag abilitazione forature in doppio
|
||||
USE_PART_OFFSET = false -- flag abilitazione lettura PART_OFFSET da btl
|
||||
}
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -116,6 +117,7 @@ if EgtExistsFile( sDataBeam) then
|
||||
if Machine.Offsets.SECONDSAW then SecondSaw = ( Machine.Offsets.SECONDSAW == 1) end
|
||||
BeamData.USE_LONGCUT = SecondSaw or BeamData.USE_LONGCUT
|
||||
if Machine.Offsets.CUT_SIC then BeamData.CUT_SIC = EgtClamp( Machine.Offsets.CUT_SIC, 15, 50) end
|
||||
if Machine.Offsets.USE_PART_OFFSET then BeamData.USE_PART_OFFSET = ( Machine.Offsets.USE_PART_OFFSET == 1) end
|
||||
end
|
||||
if Machine.Trave then
|
||||
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
|
||||
|
||||
+111
-15
@@ -32,6 +32,10 @@ function OnStart()
|
||||
EMT.MAXACC = MaxAcc or 6000 -- accelerazione massima pinze. In realtà è il tempo in millisecondi, quindi MAXACC corrisponde al tempo massimo per raggiungere la velocità desiderata
|
||||
EMT.MINACC = MinAcc or 600 -- accelerazione minima pinze. In realtà è il tempo in millisecondi, quindi MINACC corrisponde al tempo massimo per raggiungere la velocità desiderata
|
||||
SetToParkLine() -- si inizia con linee da parcheggiare su stack
|
||||
|
||||
-- se il pezzo dev'essere scaricato al carico
|
||||
local dUnloadType = EgtGetInfo( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or GDB_ID.NULL, 'UNLOAD', 'd')
|
||||
EMT.UNLOAD = dUnloadType == 1 or dUnloadType == -1
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -289,13 +293,22 @@ function OnDispositionEnd()
|
||||
-- altrimenti disposizione finale, eventuale scarico pezzo lavorato se non ci sono lavorazioni
|
||||
else
|
||||
if #EMT.MDCHAR > 0 then
|
||||
EmitRemark( 'PART UNLOAD')
|
||||
if EMT.AUXTYPE == 'R' and EMT.UNLOAD then
|
||||
EmitRemark( 'PART UNLOAD ON LOAD POSITION')
|
||||
else
|
||||
EmitRemark( 'PART UNLOAD')
|
||||
end
|
||||
end
|
||||
for i = 1, #EMT.MDCHAR do
|
||||
EmitMoveDataChars( EMT.MDCHAR[i])
|
||||
if EMT.MDCHAR[i].Y1 then EMT.CHY_ON = true end
|
||||
if EMT.MDCHAR[i].V1 then EMT.V1POS = EMT.MDCHAR[i].V1 end
|
||||
if EMT.MDCHAR[i].V2 then EMT.V2POS = EMT.MDCHAR[i].V2 end
|
||||
-- Se è un'istruzione del piano ferma pezzo
|
||||
if EMT.MDCHAR[i].StopBeamStat then
|
||||
EmitStopBeam( EMT.MDCHAR[i])
|
||||
else
|
||||
EmitMoveDataChars( EMT.MDCHAR[i])
|
||||
if EMT.MDCHAR[i].Y1 then EMT.CHY_ON = true end
|
||||
if EMT.MDCHAR[i].V1 then EMT.V1POS = EMT.MDCHAR[i].V1 end
|
||||
if EMT.MDCHAR[i].V2 then EMT.V2POS = EMT.MDCHAR[i].V2 end
|
||||
end
|
||||
end
|
||||
if #EMT.MDCHAR > 0 then
|
||||
local nMoveType = EgtIf( EMT.CHY_ON, 3, 2)
|
||||
@@ -311,6 +324,9 @@ function OnDispositionEnd()
|
||||
local sEnd= 'M113 P1='..tostring( EMT.PRODID)..' P2='..tostring( EMT.PATTID)..' P3='..tostring( EMT.CUTID)..' P4=2'
|
||||
MyOutput( sEnd)
|
||||
end
|
||||
if EMT.UNLOAD then
|
||||
MyOutput('M77')
|
||||
end
|
||||
end
|
||||
EMT.MDCHAR = {}
|
||||
EMT.AUXTYPE = nil
|
||||
@@ -489,6 +505,10 @@ function OnMachiningEnd()
|
||||
elseif EMT.AUXTYPE == 'U' then
|
||||
EmitRemark( 'PART UNLOAD')
|
||||
elseif EMT.AUXTYPE == 'P' then
|
||||
local nNextPathId
|
||||
local nNextMchId
|
||||
if EMT.PATHID then nNextPathId = EgtGetNextActiveOperation( EMT.PATHID) end
|
||||
if EMT.MCHID then nNextMchId = EgtGetNextActiveOperation( EMT.MCHID) end
|
||||
if EMT.PREROT then
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false)
|
||||
EMT.ZMAX = true
|
||||
@@ -500,6 +520,12 @@ function OnMachiningEnd()
|
||||
EMT.TO_ZMAX = nil
|
||||
end
|
||||
EmitRemark( 'PART FALL')
|
||||
elseif EMT.UNLOAD and not nNextPathId and not nNextMchId then
|
||||
if not EMT.ZMAX then
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false)
|
||||
EMT.ZMAX = true
|
||||
end
|
||||
EmitRemark( 'PART UNLOAD ON LOAD POSITION')
|
||||
else
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false)
|
||||
EMT.ZMAX = true
|
||||
@@ -508,7 +534,12 @@ function OnMachiningEnd()
|
||||
end
|
||||
end
|
||||
for i = 1, #EMT.MDCHAR do
|
||||
EmitMoveDataChars( EMT.MDCHAR[i])
|
||||
-- Se è un'istruzione del piano ferma pezzo
|
||||
if EMT.MDCHAR[i].StopBeamStat then
|
||||
EmitStopBeam( EMT.MDCHAR[i])
|
||||
else
|
||||
EmitMoveDataChars( EMT.MDCHAR[i])
|
||||
end
|
||||
end
|
||||
if #EMT.MDCHAR > 0 then
|
||||
if EMT.AUXTYPE == 'S' then
|
||||
@@ -538,6 +569,7 @@ function OnMachiningEnd()
|
||||
local sEnd= 'M113 P1='..tostring( EMT.PRODID)..' P2='..tostring( EMT.PATTID)..' P3='..tostring( EMT.CUTID)..' P4=2'
|
||||
MyOutput( sEnd)
|
||||
end
|
||||
EMT.FALL = nil
|
||||
elseif not EMT.PREROT then
|
||||
MyOutput( 'M77')
|
||||
end
|
||||
@@ -573,6 +605,9 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnPathStart()
|
||||
if EMT.OPEISDISP then
|
||||
return
|
||||
end
|
||||
-- non ancora iniziata la lavorazione
|
||||
EMT.MCHFIRST = true
|
||||
EMT.MCHFIRSTFEED = true
|
||||
@@ -602,6 +637,9 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnPathEnd()
|
||||
if EMT.OPEISDISP then
|
||||
return
|
||||
end
|
||||
if not EMT.ZMAX then
|
||||
EmitResetMachining()
|
||||
end
|
||||
@@ -1954,6 +1992,10 @@ function PrepareResidue( sCmd, nInd)
|
||||
else
|
||||
EMT.UNL = true
|
||||
end
|
||||
-- se è scarico al carico
|
||||
if Cmd[2] == 'Unload-On-Load' then
|
||||
EMT.UNL2 = true
|
||||
end
|
||||
elseif Cmd[1] == '1' then
|
||||
if Cmd[2] ~= 'Z' then
|
||||
local MDChar
|
||||
@@ -1967,6 +2009,11 @@ function PrepareResidue( sCmd, nInd)
|
||||
MDChar.V2 = MaxV2 ; EMT.V2POS = MDChar.V2
|
||||
EMT.ROLL_IN = nil
|
||||
end
|
||||
-- se scarico al carico parcheggio per sicurezza morsa e paratia lato scarico
|
||||
if EMT.UNL2 then
|
||||
MDChar.V1 = ParkV1 ; EMT.V1POS = MDChar.V1
|
||||
MDChar.V2 = ParkV2 ; EMT.V2POS = MDChar.V2
|
||||
end
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
end
|
||||
elseif Cmd[1] == '2' then
|
||||
@@ -2063,18 +2110,41 @@ function PrepareUnload( sCmd, nInd)
|
||||
-- non interessa
|
||||
elseif Cmd[1] == '1' then
|
||||
if Cmd[2] == 'Y2' then
|
||||
-- se non è ultima fase e non è fase successiva a scarico su carico c'è una barra sulla pinza Y1
|
||||
local bBarOnY = ( EMT.PHASE < EgtGetPhaseCount() and not IsEnd2Phase( EMT.PHASE))
|
||||
local nFinStatY2 = EgtIf( Cmd[4] == 'NoWaitUnload', -84, -1)
|
||||
local MDChar = { Y2=tonumber(Cmd[3]), V2=ParkV2, IniStatY2=1, FinStatY2=nFinStatY2, BeamVise=EgtIf( bBarOnY, 1, 0), MovType=EgtIf( EMT.CHY_ON, 3, 2)}
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
-- Se scarico in linea con abbassamento piano ferma pezzo allo scarico
|
||||
if Cmd[4] == 'UnBrakeBeam' then
|
||||
-- Muove carrello aperto e lo chiude
|
||||
local MDChar = { Y2=tonumber(Cmd[3]), V2=ParkV2, IniStatY2=1, FinStatY2=-1, BeamVise=EgtIf( bBarOnY, 1, 0), MovType=EgtIf( EMT.CHY_ON, 3, 2)}
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
-- Abbassa ferma pezzo
|
||||
local MDStopBeam = { StopBeamStat=2}
|
||||
table.insert( EMT.MDCHAR, MDStopBeam)
|
||||
-- Se non è ultima fase e non è fase successiva a scarico su carico c'è una barra sulla pinza Y1
|
||||
else
|
||||
local nFinStatY2 = EgtIf( Cmd[4] == 'NoWaitUnload', -84, -1)
|
||||
local MDChar = { Y2=tonumber(Cmd[3]), V2=ParkV2, IniStatY2=1, FinStatY2=nFinStatY2, BeamVise=EgtIf( bBarOnY, 1, 0), MovType=EgtIf( EMT.CHY_ON, 3, 2)}
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
end
|
||||
end
|
||||
elseif Cmd[1] == '2' then
|
||||
if Cmd[4] == 'Y2' then
|
||||
-- se non è ultima fase c'è una barra sulla pinza Y1
|
||||
local bBarOnY = ( EMT.PHASE < EgtGetPhaseCount() and not IsEnd2Phase( EMT.PHASE))
|
||||
local MDChar = { Y2=tonumber(Cmd[5]), IniStatY1=EgtIf( bBarOnY, -1, 1), FinStatY1=EgtIf( bBarOnY, -1, 1), IniStatY2=-1, FinStatY2=1, IniStatV2=1, BeamVise=2, MovType=EgtIf( EMT.CHY_ON, 3, 2)}
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
-- Se scarico in linea con alzata piano ferma pezzo allo scarico
|
||||
if Cmd[6] == 'BrakeBeam' then
|
||||
-- Muove carrello e lo mantiene in presa
|
||||
local MDChar = { Y2=tonumber(Cmd[5]), IniStatY1=EgtIf( bBarOnY, -1, 1), FinStatY1=EgtIf( bBarOnY, -1, 1), IniStatY2=-1, FinStatY2=-1, IniStatV2=1, BeamVise=2, MovType=EgtIf( EMT.CHY_ON, 3, 2)}
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
-- Alza ferma pezzo
|
||||
local MDStopBeam = { StopBeamStat=1}
|
||||
table.insert( EMT.MDCHAR, MDStopBeam)
|
||||
-- Ribadisce le quote del carrello appena mosso e Apre la pinza
|
||||
MDChar = { Y2=tonumber(Cmd[5]), IniStatY1=EgtIf( bBarOnY, -1, 1), FinStatY1=EgtIf( bBarOnY, -1, 1), IniStatY2=-1, FinStatY2=1, IniStatV2=1, BeamVise=2, MovType=EgtIf( EMT.CHY_ON, 3, 2)}
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
-- se non è ultima fase c'è una barra sulla pinza Y1
|
||||
else
|
||||
local MDChar = { Y2=tonumber(Cmd[5]), IniStatY1=EgtIf( bBarOnY, -1, 1), FinStatY1=EgtIf( bBarOnY, -1, 1), IniStatY2=-1, FinStatY2=1, IniStatV2=1, BeamVise=2, MovType=EgtIf( EMT.CHY_ON, 3, 2)}
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
end
|
||||
end
|
||||
elseif Cmd[1] == '3' then
|
||||
-- non interessa
|
||||
@@ -2108,27 +2178,44 @@ function PreparePreRotation( sCmd, nInd)
|
||||
EMT.PREROT = true
|
||||
elseif Cmd[2] == 'SplitRot' then
|
||||
EMT.SPLITROT = true
|
||||
-- se è scarico al carico
|
||||
elseif Cmd[2] == 'Unload-On-Load' then
|
||||
EMT.UNL2 = true
|
||||
end
|
||||
elseif Cmd[1] == '1' then
|
||||
if Cmd[2] ~= 'Z' then
|
||||
local MDChar
|
||||
if not EMT.PREROT then
|
||||
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, BeamVise=EMT.BV}
|
||||
if EMT.UNL2 then
|
||||
MDChar.V1 = ParkV1 ; EMT.V1POS = MDChar.V1
|
||||
MDChar.V2 = ParkV2 ; EMT.V2POS = MDChar.V2
|
||||
end
|
||||
else
|
||||
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=86, FinStatY1=87, IniStatY2=1, BeamVise=0}
|
||||
end
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
end
|
||||
elseif Cmd[1] == '2' then
|
||||
local MDChar = { IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, BeamVise=EMT.BV}
|
||||
local MDChar = { IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, IniStatV2=1, BeamVise=EMT.BV}
|
||||
if Cmd[2] ~= 'T' then MDChar[Cmd[2]] = tonumber( Cmd[3]) end
|
||||
if Cmd[4] ~= 'T' then MDChar[Cmd[4]] = tonumber( Cmd[5]) end
|
||||
if EMT.ROLL_IN then
|
||||
MDChar.V1 = MinV1 ; EMT.V1POS = MDChar.V1
|
||||
MDChar.V2 = MaxV2 ; EMT.V2POS = MDChar.V2
|
||||
EMT.ROLL_IN = nil
|
||||
end
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
elseif Cmd[1] == '3' then
|
||||
local MDChar = { IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, BeamVise=EMT.BV}
|
||||
local MDChar = { IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, IniStatV1=1, IniStatV2=1, BeamVise=EMT.BV}
|
||||
if Cmd[2] ~= 'T' then MDChar[Cmd[2]] = tonumber( Cmd[3]) end
|
||||
if Cmd[4] ~= 'T' then MDChar[Cmd[4]] = tonumber( Cmd[5]) end
|
||||
if Cmd[6] ~= 'T' then MDChar[Cmd[6]] = tonumber( Cmd[7]) end
|
||||
if EMT.ROLL_IN then
|
||||
MDChar.V1 = MinV1 ; EMT.V1POS = MDChar.V1
|
||||
MDChar.V2 = MaxV2 ; EMT.V2POS = MDChar.V2
|
||||
EMT.ROLL_IN = nil
|
||||
end
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
elseif Cmd[1] == '4' then
|
||||
EMT.TO_ZMAX = true
|
||||
@@ -3026,6 +3113,15 @@ function EmitMoveWaitHead( nHead)
|
||||
MyOutput( sOut)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Emette i movimenti di esecuzione movimenti trave e alzata o discesa del piano ferma pezzo
|
||||
function EmitStopBeam( MoData)
|
||||
EmitMoveStartChars(2)
|
||||
EmitMoveWaitChars(2)
|
||||
if MoData.StopBeamStat then sOut = 'M125 P2=' .. EgtNumToString( MoData.StopBeamStat, 0) end
|
||||
MyOutput( sOut)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function EmitMoveDataChars( MoData)
|
||||
local sOut = 'M111'
|
||||
|
||||
+146
-40
@@ -381,7 +381,7 @@ local function GetNextRawInOrd( nCurrRawId)
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
local function EnsureZmax( bCloseV, vCmd)
|
||||
local function EnsureZmax( bCloseV, vCmd, nInd)
|
||||
-- verifico non sia già inserito nella lista dei comandi
|
||||
for i = 1, #vCmd do
|
||||
if vCmd[i][1] == 4 then
|
||||
@@ -393,7 +393,11 @@ local function EnsureZmax( bCloseV, vCmd)
|
||||
end
|
||||
end
|
||||
-- posizionamento sicuro teste e rulli
|
||||
table.insert( vCmd, { 4, EgtIf( bCloseV, 1, 0)})
|
||||
if not nInd then
|
||||
table.insert( vCmd, { 4, EgtIf( bCloseV, 1, 0)})
|
||||
else
|
||||
table.insert( vCmd, nInd, { 4, EgtIf( bCloseV, 1, 0)})
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
@@ -567,6 +571,14 @@ function OnSpecialApplyDisposition()
|
||||
end
|
||||
-- eseguo scarico
|
||||
SpecSetCarrPosFromCmds( vCmd2)
|
||||
-- determino posizione testa trave
|
||||
local nLastEntId = EgtGetLastInGroup( EgtGetLastInGroup( EgtGetFirstNameInGroup( EgtGetPrev( EMC.DISPID), 'CL')))
|
||||
if nLastEntId then
|
||||
local vAxes = EmtGetAxesPos( nLastEntId)
|
||||
if #vAxes > 0 then EMC.TPOS = vAxes[1] end
|
||||
else
|
||||
EMC.TPOS = EgtGetInfo( EMC.DISPID, 'TPOS', 'd')
|
||||
end
|
||||
local vCmd3 = SpecCalcUnload()
|
||||
-- unisco ed emetto i comandi
|
||||
vCmd = EgtJoinTables( vCmd, vCmd2)
|
||||
@@ -675,7 +687,7 @@ function OnPostApplyMachining()
|
||||
local OriY2Delta = EMC.Y2DELTA
|
||||
local OriV1Pos = EMC.V1POS
|
||||
local OriV2Pos = EMC.V2POS
|
||||
local OriCnt = EMC.CNT
|
||||
local OriCnt = EMC.CNT
|
||||
-- eseguo le elaborazioni
|
||||
SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bLast and bUnload)
|
||||
-- se separazione, verifico il risultato
|
||||
@@ -732,7 +744,10 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
|
||||
-- Verifico se lavorazione pareti
|
||||
local bWall = ( EgtGetInfo( EgtGetCurrMachGroup() or GDB_ID.NULL, 'Wall', 'd') == 1)
|
||||
|
||||
-- se il pezzo dev'essere scaricato al carico
|
||||
local dUnloadType = EgtGetInfo( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or GDB_ID.NULL, 'UNLOAD', 'd')
|
||||
local bUnloadOnLoadPos = dUnloadType == 1 or dUnloadType == -1
|
||||
|
||||
-- mi salvo info lavorazione su una lista
|
||||
local AuxInfoMach = {}
|
||||
AuxInfoMach.bPreSplit = bPreSplit
|
||||
@@ -740,7 +755,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
AuxInfoMach.bPreCut = bPreCut
|
||||
AuxInfoMach.bCutting = bCutting
|
||||
AuxInfoMach.bUnload = bUnload
|
||||
|
||||
|
||||
-- Assegno flag di pezzo separato dal resto del grezzo
|
||||
SPLIT = IsEndPhase( EMC.PHASE)
|
||||
|
||||
@@ -748,6 +763,13 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
local b3Tot = BBox3d()
|
||||
local b3Raw = BBox3d()
|
||||
local nNextOddPhase = GetNextStartOrRestPhase( EMC.PHASE)
|
||||
-- se esistono più grezzi toglie l'impostazione di scarico al carico e ritorna errore
|
||||
if bUnloadOnLoadPos and ( nNextOddPhase and nNextOddPhase <= EgtGetPhaseCount()) then
|
||||
bUnloadOnLoadPos = false
|
||||
EMC.ERR = 22
|
||||
EMC.MSG = ' Error : Unload on Load Position not reachable if raw part on Load Position'
|
||||
return
|
||||
end
|
||||
local nRawId = EgtGetFirstRawPart()
|
||||
local nCurrRawId = GDB_ID.NULL
|
||||
while nRawId do
|
||||
@@ -798,6 +820,10 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
elseif bPreCut or bCutting then
|
||||
local dDistF, dDistB, dRollF, dRollB = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
|
||||
dDistFront = min( dDistFront, dDistF)
|
||||
-- Se è previsto lo scarico al carico aumenta l'ingombro dell'area di lavoro
|
||||
if bUnloadOnLoadPos then
|
||||
dDistFront = dDistFront -( MinDeltaYV*2 + AGG_V)
|
||||
end
|
||||
dDistBack = min( dDistBack, dDistB)
|
||||
end
|
||||
|
||||
@@ -896,11 +922,10 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
EgtSetInfo( NextDispId, 'V1POS', EMC.V1POS)
|
||||
EgtSetInfo( NextDispId, 'V2POS', EMC.V2POS)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Se previsto scarico, lo eseguo
|
||||
if bUnload then
|
||||
EMC.LB = b3Raw:getDimX()
|
||||
local vCmdTmp = SpecCalcUnload()
|
||||
vCmd = EgtJoinTables( vCmd, vCmdTmp)
|
||||
end
|
||||
@@ -1326,8 +1351,85 @@ function SpecCalcSplit( dLenRaw, dMaxLenLeft)
|
||||
return vCmd
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Scarica il pezzo in zona di carico
|
||||
function SpecCalcUnloadOnLoadPos()
|
||||
local vCmdPre = {}
|
||||
EgtOutLog( ' *[UL]', 1)
|
||||
if not EMC.Y1DELTA and not EMC.Y2DELTA then
|
||||
EMC.ERR = 21
|
||||
EMC.MSG = ' Error : Y1 and Y2 not clamped for unloading'
|
||||
return {}
|
||||
end
|
||||
-- Se pinza Y2 chiusa, devo effettuare uno scambio
|
||||
local dY1DeltaMaxSP = MaxY1 - LoadT - TurnerOffs - 10 * GEO.EPS_SMALL
|
||||
if EMC.Y2DELTA or EMC.Y1DELTA > dY1DeltaMaxSP then
|
||||
-- imposto quote aggancio per avere solo pinza Y
|
||||
local dDistFront = 0
|
||||
local dDistBack = EMC.LB - MinOther - EMC.HOVM + 10 * GEO.EPS_SMALL
|
||||
-- dico che le paratie sono chiuse perchè poi se ho dei movimenti, verranno chiuse, quindi parto considerandole già chiuse
|
||||
EMC.V1POS = 0
|
||||
EMC.V2POS = 0
|
||||
-- effettuo scambio
|
||||
vCmdPre = SpecCalcCarriages( dDistFront, dDistBack, 0, 0, dY1DeltaMaxSP)
|
||||
-- recupero nuova posizione carrelli
|
||||
SpecSetCarrPosFromCmds( vCmdPre)
|
||||
EgtOutLog( ' [UL1]', 1)
|
||||
end
|
||||
-- porto il pezzo alla zona di rotazione con il carro Y1
|
||||
local vCmd = {}
|
||||
-- Commento
|
||||
table.insert( vCmd, { 0, 'Unload-On-Load'})
|
||||
-- posizionamento sicuro teste e rulli
|
||||
if #vCmdPre > 0 then
|
||||
EnsureZmax( true, vCmdPre, 2)
|
||||
else
|
||||
EnsureZmax( true, vCmd)
|
||||
end
|
||||
-- Se pinza V chiusa, la apro
|
||||
if EMC.Y2DELTA then
|
||||
table.insert( vCmd, { 12, 0})
|
||||
end
|
||||
-- riporto la trave al carico
|
||||
local dRotT = LoadT + TurnerOffs
|
||||
table.insert( vCmd, { 2, 'Y1', dRotT + EMC.Y1DELTA, 'T', dRotT})
|
||||
-- apro la morsa
|
||||
table.insert( vCmd, { 11, 0})
|
||||
EMC.CNT = nil
|
||||
-- riporto il carrello in home
|
||||
table.insert( vCmd, { 1, 'Y1', ParkY1})
|
||||
|
||||
-- eventuale unione tabelle
|
||||
if #vCmdPre > 0 then
|
||||
vCmd = EgtJoinTables( vCmdPre, vCmd)
|
||||
end
|
||||
|
||||
return vCmd
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function SpecCalcUnload()
|
||||
-- In caso di condizioni rispettate richiama lo scarico al carico e ritorna
|
||||
local nNextPathId
|
||||
local nNextMchId
|
||||
local nNextDispId
|
||||
if EMC.PATHID then nNextPathId = EgtGetNextActiveOperation( EMC.PATHID) end
|
||||
if EMC.MCHID then nNextMchId = EgtGetNextActiveOperation( EMC.MCHID) end
|
||||
if EMC.DISPID then nNextDispId = EgtGetNextActiveOperation( EMC.DISPID) end
|
||||
-- se il pezzo dev'essere scaricato al carico
|
||||
local dUnloadType = EgtGetInfo( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or GDB_ID.NULL, 'UNLOAD', 'd')
|
||||
local bUnloadOnLoadPos = dUnloadType == 1 or dUnloadType == -1
|
||||
if bUnloadOnLoadPos then
|
||||
-- è l'ultimo path, è l'ultima lavorazione, non ci sono altre disposizioni e non c'è rimanenza
|
||||
if not nNextPathId and not nNextMchId and not nNextDispId and not IsStartOrRestPhase(EMC.PHASE) then
|
||||
local vCmd = SpecCalcUnloadOnLoadPos()
|
||||
return vCmd
|
||||
else
|
||||
EMC.ERR = 21
|
||||
EMC.MSG = ' Error : Unload on Load Position not reachable if raw part on Load Position'
|
||||
return {}
|
||||
end
|
||||
end
|
||||
local vCmdPre = {}
|
||||
EgtOutLog( ' *[U]', 1)
|
||||
if not EMC.Y1DELTA and not EMC.Y2DELTA then
|
||||
@@ -1372,30 +1474,34 @@ function SpecCalcUnload()
|
||||
table.insert( vCmd, { 11, 0})
|
||||
EMC.CNT = nil
|
||||
end
|
||||
-- Se scarico in "linea"
|
||||
if MinBeamLenUnloadInLine and EMC.LB >= MinBeamLenUnloadInLine then
|
||||
local dY2MoveMax = MinY2
|
||||
local dTMove = dY2MoveMax - EMC.Y2DELTA
|
||||
local dBeamTailY2 = dY2MoveMax + ( EMC.LB - EMC.Y2DELTA) - ( EMC.TCING or 0)
|
||||
table.insert( vCmd, { 2, 'T', dTMove, 'Y2', dY2MoveMax})
|
||||
-- apro la morsa
|
||||
table.insert( vCmd, { 12, 0})
|
||||
if dBeamTailY2 >= ( dY2MoveMax + ( EMC.TCING or 0)) then
|
||||
dTMove = dY2MoveMax - EMC.LB + ( EMC.TCING or 0)
|
||||
-- riporto il carrello in home
|
||||
table.insert( vCmd, { 1, 'Y2', dBeamTailY2})
|
||||
-- chiudo la morsa
|
||||
table.insert( vCmd, { 12, 1})
|
||||
-- finisco scarico trave
|
||||
table.insert( vCmd, { 2, 'T', dTMove, 'Y2', dY2MoveMax})
|
||||
EgtOutLog( ' Y2PosF=' .. EgtNumToString( dY2MoveMax), 1)
|
||||
end
|
||||
-- Se non supero la lunghezza massima di scarico, sposto il pezzo in posizione di scarico
|
||||
elseif bStdUl then
|
||||
if bStdUl then
|
||||
local dFinT = EgtIf( EMC.LB < MaxLenSmT, UnloadSmT, UnloadT) - EMC.LB
|
||||
local dFinY2 = dFinT + EMC.Y2DELTA
|
||||
table.insert( vCmd, { 2, 'T', dFinT, 'Y2', dFinY2})
|
||||
local dBeamTailY2 = dFinY2 + ( EMC.LB - EMC.Y2DELTA) - ( EMC.TCING or 0)
|
||||
-- Se scarico in linea scrivo una nota in più per l'attivazione del piano ferma pezzo (M125)
|
||||
if MinBeamLenUnloadInLine and EMC.LB >= MinBeamLenUnloadInLine then
|
||||
table.insert( vCmd, { 2, 'T', dFinT, 'Y2', dFinY2, 'BrakeBeam'})
|
||||
else
|
||||
table.insert( vCmd, { 2, 'T', dFinT, 'Y2', dFinY2})
|
||||
end
|
||||
EgtOutLog( ' Y2PosF=' .. EgtNumToString( dFinY2), 1)
|
||||
-- Se scarico in "linea"
|
||||
if MinBeamLenUnloadInLine and EMC.LB >= MinBeamLenUnloadInLine then
|
||||
-- apro la morsa
|
||||
table.insert( vCmd, { 12, 0})
|
||||
local dY2MoveMax = MinY2
|
||||
if dBeamTailY2 >= ( dY2MoveMax + ( EMC.TCING or 0)) then
|
||||
local dTMove = dY2MoveMax - EMC.LB + ( EMC.TCING or 0)
|
||||
-- riporto il carrello in fondo alla trave
|
||||
table.insert( vCmd, { 1, 'Y2', dBeamTailY2, 'UnBrakeBeam'})
|
||||
-- chiudo la morsa
|
||||
table.insert( vCmd, { 12, 1})
|
||||
-- finisco scarico trave
|
||||
table.insert( vCmd, { 2, 'T', dTMove, 'Y2', dY2MoveMax})
|
||||
EgtOutLog( ' Y2PosF=' .. EgtNumToString( dY2MoveMax), 1)
|
||||
end
|
||||
end
|
||||
else
|
||||
table.insert( vCmd, { 1, 'Y2', MaxY2})
|
||||
end
|
||||
@@ -1601,7 +1707,7 @@ local function PosForEnl1FY2( dY1a, dY2a, dTa, dExtra, dCorsaY1Te, dCorsaY2e)
|
||||
if dDispl/2 <= dCorsaY1Te then
|
||||
if dDispl/2 <= dCorsaY2e then
|
||||
dY1a = dY1a + dDispl / 2
|
||||
dTa = dTa + dDispl / 2
|
||||
dTa = dTa + dDispl / 2
|
||||
dY2a = dY2a - dDispl / 2
|
||||
else
|
||||
dY2a = dY2a - dCorsaY2e
|
||||
@@ -1629,7 +1735,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- allontano (Y1+T) e (Y2)
|
||||
dY1a = MaxY1
|
||||
dY2a = MinY2
|
||||
dTa = ( dY1a - TabI.dY1PosI) + dTa
|
||||
dTa = ( dY1a - TabI.dY1PosI) + dTa
|
||||
-- **[M2]** = allontanamento dei trascinatori con Y2 in presa
|
||||
elseif sType == 'M2' then
|
||||
EmitComment( vCmd, '[M2]')
|
||||
@@ -1640,7 +1746,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- allontano (Y2+T) e (Y1)
|
||||
dY1a = MaxY1
|
||||
dY2a = MinY2
|
||||
dTa = ( dY2a - TabI.dY2PosI) + dTa
|
||||
dTa = ( dY2a - TabI.dY2PosI) + dTa
|
||||
-- **[M3]** = accentramento dei trascinatori con Y1 in presa
|
||||
elseif sType == 'M3' then
|
||||
EmitComment( vCmd, '[M3]')
|
||||
@@ -1650,7 +1756,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- accentro (Y1+T) e (Y2)
|
||||
dY1a = TabI.MyMinY1V1
|
||||
dY2a = TabI.MaxY2V2
|
||||
dTa = ( dY1a - TabI.dY1PosI) + dTa
|
||||
dTa = ( dY1a - TabI.dY1PosI) + dTa
|
||||
-- **[M4]** = accentramento dei trascinatori con Y2 in presa
|
||||
elseif sType == 'M4' then
|
||||
EmitComment( vCmd, '[M4]')
|
||||
@@ -1661,7 +1767,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- accentro (Y2+T) e (Y1)
|
||||
dY1a = TabI.MyMinY1V1
|
||||
dY2a = TabI.MaxY2V2
|
||||
dTa = ( dY2a - TabI.dY2PosI) + dTa
|
||||
dTa = ( dY2a - TabI.dY2PosI) + dTa
|
||||
end
|
||||
--
|
||||
table.insert( vCmd, { 3, 'Y1', dY1a, 'Y2', dY2a, 'T', dTa, EMC.CNT})
|
||||
@@ -1949,7 +2055,7 @@ local function PosY1Y2B( TabI, vCmd)
|
||||
PosY2FromY1B( TabI, vCmd)
|
||||
end
|
||||
end
|
||||
bXW = false
|
||||
bXW = false
|
||||
-- se posso posizionare 'direttamente' Y2 all'interno dell'intervallo I2 (casi [rp] o [ri])
|
||||
else
|
||||
-- |POSIZIONO MORSA 2| e poi MORSA 1
|
||||
@@ -1960,7 +2066,7 @@ local function PosY1Y2B( TabI, vCmd)
|
||||
TabI.dY1PosI < TabI.dTPosI + EMC.LB - MinJoin - EgtIf( SPLIT, EMC.TCING, 0) + 10 * GEO.EPS_SMALL then
|
||||
PosY2FromY1A( TabI, vCmd)
|
||||
PosY1FromY2B( TabI, vCmd)
|
||||
bXW = false
|
||||
bXW = false
|
||||
end
|
||||
-- in **accentramento**
|
||||
else
|
||||
@@ -1969,9 +2075,9 @@ local function PosY1Y2B( TabI, vCmd)
|
||||
TabI.dY1PosI <= TabI.dTPosI + EMC.LB - MinJoin - EgtIf( SPLIT, EMC.TCING, 0) + 10 * GEO.EPS_SMALL then
|
||||
PosY2FromY1B( TabI, vCmd)
|
||||
PosY1FromY2B( TabI, vCmd)
|
||||
bXW = false
|
||||
end
|
||||
end
|
||||
bXW = false
|
||||
end
|
||||
end
|
||||
end
|
||||
if bXW then
|
||||
-- Massimo trascinamento della trave in direzione positiva (casi **[xw]** )
|
||||
@@ -1981,10 +2087,10 @@ local function PosY1Y2B( TabI, vCmd)
|
||||
TabI.dY1PosI < TabI.dTPosI + EMC.LB - MinJoin - EgtIf( SPLIT, EMC.TCING, 0) + 10 * GEO.EPS_SMALL then
|
||||
-- allontanamento morse, trascinamento trave con Y1
|
||||
MaxDispl( TabI, vCmd, 'M1')
|
||||
else
|
||||
else
|
||||
-- accentramento morse, trascinamento trave con Y2
|
||||
MaxDispl( TabI, vCmd, 'M4')
|
||||
end
|
||||
end
|
||||
end
|
||||
nCnt = nCnt + 1
|
||||
if nCnt > 10 then return end
|
||||
@@ -2531,7 +2637,7 @@ function SpecOutputCmds( vCmd, bEnd)
|
||||
EgtSetInfo( EMC.PATHID, sKey, sInfo)
|
||||
-- movimento di 2 assi
|
||||
elseif Cmd[1] == 2 then
|
||||
local sInfo = '2,'..Cmd[2]..','..EgtNumToString( Cmd[3],3)..','..Cmd[4]..','..EgtNumToString( Cmd[5],3)..EgtIf( Cmd[6], ',*', '')
|
||||
local sInfo = '2,'..Cmd[2]..','..EgtNumToString( Cmd[3],3)..','..Cmd[4]..','..EgtNumToString( Cmd[5],3)..EgtIf( Cmd[6], ','..tostring(Cmd[6]), '')
|
||||
EgtSetInfo( EMC.PATHID, sKey, sInfo)
|
||||
-- movimento di 3 assi
|
||||
elseif Cmd[1] == 3 then
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
PP_VER = '3.1a1_DEV2'
|
||||
PP_NVER = '3.1.1.1'
|
||||
PP_VER = '3.1a2_DEV12'
|
||||
PP_NVER = '3.1.1.2'
|
||||
MIN_MACH_VER = '2.7d2'
|
||||
MACH_NAME = EgtGetCurrMachineName()
|
||||
|
||||
@@ -86,7 +86,7 @@ ParkTc2X1 = 3100
|
||||
ParkZ1 = -545
|
||||
ParkC1 = -90
|
||||
ParkB1 = -90
|
||||
ParkCSawX1 = 1500
|
||||
ParkCSawX1 = 1700
|
||||
ParkCSawZ1 = -100
|
||||
ParkCSaw0Z1 = -400
|
||||
ParkCSawC1 = -90
|
||||
|
||||
Binary file not shown.
@@ -1,4 +1,12 @@
|
||||
==== Common_PF1250 Update Log ====
|
||||
|
||||
Versione 3.1b1 (17/02/2026)
|
||||
- (GEN) Generazione non allineata a simulazione. Ticket#2819
|
||||
|
||||
Versione 3.1a2 (30/01/2026)
|
||||
- (SIM) Allineato approccio simulazione a generazione in caso di lavorazione in doppio verticale. Ticket#2781
|
||||
- (GEN) Simulazione non allineata a generazione. Mancava reset flag di pezzo a caduta. Ticket#2798
|
||||
|
||||
Versione 3.1a1 (16/01/2026)
|
||||
- (SIM-GEN) Corretto movimento di approccio con sega a catena e allineati Simulazione e Generazione. Ticket#2771
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_PF1250', -- nome script PP standard
|
||||
VERSION = '3.1a1', -- versione script
|
||||
VERSION = '3.1b1', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.7k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user