Compare commits

...

3 Commits

Author SHA1 Message Date
andrea.villa 5e9912eb5f Merge provvisorio con common 2026-06-05 15:19:34 +02:00
daniele.nicoli 0c2333df8b In caso di ultimo movimento come scarico rimanenza, porta V2 in posizione di parcheggio 2026-05-28 14:44:39 +02:00
daniele.nicoli d1ddc26d8f Merge branch 'main' into develop 2026-05-28 14:40:43 +02:00
5 changed files with 394 additions and 71 deletions
+189 -37
View File
@@ -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.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 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 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 end
--------------------------------------------------------------------- ---------------------------------------------------------------------
@@ -289,28 +293,47 @@ function OnDispositionEnd()
-- altrimenti disposizione finale, eventuale scarico pezzo lavorato se non ci sono lavorazioni -- altrimenti disposizione finale, eventuale scarico pezzo lavorato se non ci sono lavorazioni
else else
if #EMT.MDCHAR > 0 then 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 end
for i = 1, #EMT.MDCHAR do for i = 1, #EMT.MDCHAR do
EmitMoveDataChars( EMT.MDCHAR[i]) -- Se è un'istruzione del piano ferma pezzo
if EMT.MDCHAR[i].Y1 then EMT.CHY_ON = true end if EMT.MDCHAR[i].StopBeamStat then
if EMT.MDCHAR[i].V1 then EMT.V1POS = EMT.MDCHAR[i].V1 end EmitStopBeam( EMT.MDCHAR[i])
if EMT.MDCHAR[i].V2 then EMT.V2POS = EMT.MDCHAR[i].V2 end EMT.LASTOISBRAKE = true
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
EMT.LASTOISBRAKE = false
end
end end
if #EMT.MDCHAR > 0 then if #EMT.MDCHAR > 0 then
local nMoveType = EgtIf( EMT.CHY_ON, 3, 2) if not EMT.LASTOISBRAKE then
EmitMoveStartChars( nMoveType) local nMoveType = EgtIf( EMT.CHY_ON, 3, 2)
-- se dopo c'è scarico spezzone devo mettere attesa termine esecuzione EmitMoveStartChars( nMoveType)
if IsRestPhase( EMT.PHASE + 1) then -- se dopo c'è scarico spezzone devo mettere attesa termine esecuzione
EmitMoveWaitChars( nMoveType) if IsRestPhase( EMT.PHASE + 1) then
EmitMoveWaitChars( nMoveType)
else
EmitMoveWaitChars( nMoveType, true)
end
else else
EmitMoveWaitChars( nMoveType, true) EMT.LASTOISBRAKE = nil
end end
-- emissione conclusione pezzo precedente (se non in modalità test) -- emissione conclusione pezzo precedente (se non in modalità test)
if not TEST_USE and EMT.PRODID then if not TEST_USE and EMT.PRODID then
local sEnd= 'M113 P1='..tostring( EMT.PRODID)..' P2='..tostring( EMT.PATTID)..' P3='..tostring( EMT.CUTID)..' P4=2' local sEnd= 'M113 P1='..tostring( EMT.PRODID)..' P2='..tostring( EMT.PATTID)..' P3='..tostring( EMT.CUTID)..' P4=2'
MyOutput( sEnd) MyOutput( sEnd)
end end
if EMT.UNLOAD then
MyOutput('M77')
end
end end
EMT.MDCHAR = {} EMT.MDCHAR = {}
EMT.AUXTYPE = nil EMT.AUXTYPE = nil
@@ -491,6 +514,10 @@ function OnMachiningEnd()
elseif EMT.AUXTYPE == 'U' then elseif EMT.AUXTYPE == 'U' then
EmitRemark( 'PART UNLOAD') EmitRemark( 'PART UNLOAD')
elseif EMT.AUXTYPE == 'P' then 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 if EMT.PREROT then
EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false) EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false)
EMT.ZMAX = true EMT.ZMAX = true
@@ -502,6 +529,12 @@ function OnMachiningEnd()
EMT.TO_ZMAX = nil EMT.TO_ZMAX = nil
end end
EmitRemark( 'PART FALL') 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 else
EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false) EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false)
EMT.ZMAX = true EMT.ZMAX = true
@@ -510,20 +543,31 @@ function OnMachiningEnd()
end end
end end
for i = 1, #EMT.MDCHAR do 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])
EMT.LASTOISBRAKE = true
else
EmitMoveDataChars( EMT.MDCHAR[i])
EMT.LASTOISBRAKE = false
end
end end
if #EMT.MDCHAR > 0 then if #EMT.MDCHAR > 0 then
if EMT.AUXTYPE == 'S' then if EMT.AUXTYPE == 'S' then
EmitMoveStartChars( 1) if not EMT.LASTOISBRAKE then
EmitMoveWaitChars( 1) EmitMoveStartChars( 1)
EmitMoveWaitChars( 1)
end
elseif EMT.AUXTYPE == 'U' then elseif EMT.AUXTYPE == 'U' then
local nMoveType = EgtIf( EMT.CHY_ON, 3, 2) if not EMT.LASTOISBRAKE then
EmitMoveStartChars( nMoveType) local nMoveType = EgtIf( EMT.CHY_ON, 3, 2)
-- se dopo cè scarico spezzone devo mettere attesa termine esecuzione EmitMoveStartChars( nMoveType)
if IsRestPhase( EMT.PHASE + 1) then -- se dopo cè scarico spezzone devo mettere attesa termine esecuzione
EmitMoveWaitChars( nMoveType) if IsRestPhase( EMT.PHASE + 1) then
else EmitMoveWaitChars( nMoveType)
EmitMoveWaitChars( nMoveType, true) else
EmitMoveWaitChars( nMoveType, true)
end
end end
-- emissione conclusione pezzo precedente (se non è modalità test) -- emissione conclusione pezzo precedente (se non è modalità test)
if not TEST_USE and EMT.PRODID then if not TEST_USE and EMT.PRODID then
@@ -531,8 +575,10 @@ function OnMachiningEnd()
MyOutput( sEnd) MyOutput( sEnd)
end end
elseif EMT.AUXTYPE == 'P' then elseif EMT.AUXTYPE == 'P' then
EmitMoveStartChars( 3) if not EMT.LASTOISBRAKE then
EmitMoveWaitChars( 3) EmitMoveStartChars( 3)
EmitMoveWaitChars( 3)
end
if EMT.FALL then if EMT.FALL then
MyOutput( 'M155') MyOutput( 'M155')
-- emissione conclusione pezzo (se non in modalità test) -- emissione conclusione pezzo (se non in modalità test)
@@ -542,6 +588,11 @@ function OnMachiningEnd()
end end
EMT.FALL = nil EMT.FALL = nil
elseif not EMT.PREROT then elseif not EMT.PREROT then
-- emissione conclusione pezzo (se non in modalità test)
if not TEST_USE and EMT.PRODID and ( EMT.UNLOAD and ( not nNextPathId) and ( not nNextMchId)) then
local sEnd= 'M113 P1='..tostring( EMT.PRODID)..' P2='..tostring( EMT.PATTID)..' P3='..tostring( EMT.CUTID)..' P4=2'
MyOutput( sEnd)
end
MyOutput( 'M77') MyOutput( 'M77')
end end
end end
@@ -583,11 +634,8 @@ function OnPathStart()
EMT.MCHFIRST = true EMT.MCHFIRST = true
EMT.MCHFIRSTFEED = true EMT.MCHFIRSTFEED = true
-- primo posizionamento sempre in globale -- primo posizionamento sempre in globale
-- primo posizionamento sempre in globale
EMT.REFLOC = nil EMT.REFLOC = nil
EMT.IPLGL = false EMT.IPLGL = false
-- se taglio di precut verifico quanto è più lungo il grezzo rispetto al pezzo (non tiene conto dell'ultimo cubetto) -- se taglio di precut verifico quanto è più lungo il grezzo rispetto al pezzo (non tiene conto dell'ultimo cubetto)
EMT.DELTA_LT = 0 EMT.DELTA_LT = 0
if EMT.MCHPRECUT then if EMT.MCHPRECUT then
@@ -1973,20 +2021,40 @@ function PrepareResidue( sCmd, nInd)
else else
EMT.UNL = true EMT.UNL = true
end end
-- se è scarico al carico
if Cmd[2] == 'Unload-On-Load' then
EMT.UNL2 = true
end
elseif Cmd[1] == '1' then elseif Cmd[1] == '1' then
if Cmd[2] ~= 'Z' then if Cmd[2] ~= 'Z' then
local MDChar local MDChar
if not EMT.UNL then if not EMT.UNL then
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, BeamVise=EMT.BV} MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, BeamVise=EMT.BV}
else else
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY2=1, FinStatY2=-84, BeamVise=0} if IsLastMachining( EMT.MCHID) then
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY2=1, FinStatY2=-84, V2=ParkV2, BeamVise=0}
else
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY2=1, FinStatY2=-84, BeamVise=0}
end
end end
if EMT.ROLL_IN then if EMT.ROLL_IN then
MDChar.V1 = MinV1 ; EMT.V1POS = MDChar.V1 MDChar.V1 = MinV1 ; EMT.V1POS = MDChar.V1
MDChar.V2 = MaxV2 ; EMT.V2POS = MDChar.V2 MDChar.V2 = MaxV2 ; EMT.V2POS = MDChar.V2
EMT.ROLL_IN = nil EMT.ROLL_IN = nil
end 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
MDChar.BeamVise = 0
end
table.insert( EMT.MDCHAR, MDChar) table.insert( EMT.MDCHAR, MDChar)
-- Se scarico in linea con abbassamento piano ferma pezzo allo scarico
if Cmd[4] == 'UnBrakeBeam' then
-- Abbassa ferma pezzo
local MDStopBeam = { StopBeamStat=2, Load=1}
table.insert( EMT.MDCHAR, MDStopBeam)
end
end end
elseif Cmd[1] == '2' then elseif Cmd[1] == '2' then
local MDChar = { IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, IniStatV2=1, BeamVise=EMT.BV} local MDChar = { IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, IniStatV2=1, BeamVise=EMT.BV}
@@ -1998,6 +2066,11 @@ function PrepareResidue( sCmd, nInd)
EMT.ROLL_IN = nil EMT.ROLL_IN = nil
end end
table.insert( EMT.MDCHAR, MDChar) table.insert( EMT.MDCHAR, MDChar)
-- Alza ferma pezzo
if Cmd[6] == 'BrakeBeam' then
local MDStopBeam = { StopBeamStat=1, Load=1}
table.insert( EMT.MDCHAR, MDStopBeam)
end
elseif Cmd[1] == '3' then elseif Cmd[1] == '3' then
local MDChar = { IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, IniStatV1=1, IniStatV2=1, 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[2] ~= 'T' then MDChar[Cmd[2]] = tonumber( Cmd[3]) end
@@ -2084,19 +2157,53 @@ function PrepareUnload( sCmd, nInd)
end end
elseif Cmd[1] == '1' then elseif Cmd[1] == '1' then
if Cmd[2] == 'Y2' 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 dUnloadMacroCode = EgtIf( EMT.MANUAL_UNL, 85, 84)
EMT.MANUAL_UNL = nil
local bBarOnY = ( EMT.PHASE < EgtGetPhaseCount() and not IsEnd2Phase( EMT.PHASE)) local bBarOnY = ( EMT.PHASE < EgtGetPhaseCount() and not IsEnd2Phase( EMT.PHASE))
local MDChar = { Y2=tonumber(Cmd[3]), V2=ParkV2, IniStatY2=1, FinStatY2=-dUnloadMacroCode, BeamVise=EgtIf( bBarOnY, 1, 0), MovType=EgtIf( EMT.CHY_ON, 3, 2)} -- Se scarico in linea con abbassamento piano ferma pezzo allo scarico
table.insert( EMT.MDCHAR, MDChar) if Cmd[4] == 'UnBrakeBeam' then
-- Muove carrello aperto e lo mantiene aperto
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, Unload=1}
table.insert( EMT.MDCHAR, MDStopBeam)
-- Dopo che si è abbassato il ferma pezzo chiude il pezzo in morsa per evitare che esso possa essere pinzato inclinato dal pistone
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)
-- Se non è ultima fase e non è fase successiva a scarico su carico c'è una barra sulla pinza Y1
else
if EMT.MANUAL_UNL then
-- se non è ultima fase e non è fase successiva a scarico su carico c'è una barra sulla pinza Y1
local dUnloadMacroCode = EgtIf( EMT.MANUAL_UNL, 85, 84)
EMT.MANUAL_UNL = nil
local bBarOnY = ( EMT.PHASE < EgtGetPhaseCount() and not IsEnd2Phase( EMT.PHASE))
local MDChar = { Y2=tonumber(Cmd[3]), V2=ParkV2, IniStatY2=1, FinStatY2=-dUnloadMacroCode, BeamVise=EgtIf( bBarOnY, 1, 0), MovType=EgtIf( EMT.CHY_ON, 3, 2)}
table.insert( EMT.MDCHAR, MDChar)
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
end end
elseif Cmd[1] == '2' then elseif Cmd[1] == '2' then
if Cmd[4] == 'Y2' 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 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)} -- Se scarico in linea con alzata piano ferma pezzo allo scarico
table.insert( EMT.MDCHAR, MDChar) 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, Unload=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 end
elseif Cmd[1] == '3' then elseif Cmd[1] == '3' then
-- non interessa -- non interessa
@@ -2130,27 +2237,55 @@ function PreparePreRotation( sCmd, nInd)
EMT.PREROT = true EMT.PREROT = true
elseif Cmd[2] == 'SplitRot' then elseif Cmd[2] == 'SplitRot' then
EMT.SPLITROT = true EMT.SPLITROT = true
-- se è scarico al carico
elseif Cmd[2] == 'Unload-On-Load' then
EMT.UNL2 = true
end end
elseif Cmd[1] == '1' then elseif Cmd[1] == '1' then
if Cmd[2] ~= 'Z' then if Cmd[2] ~= 'Z' then
local MDChar local MDChar
if not EMT.PREROT then 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} 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 else
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=86, FinStatY1=87, IniStatY2=1, BeamVise=0} MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=86, FinStatY1=87, IniStatY2=1, BeamVise=0}
end end
table.insert( EMT.MDCHAR, MDChar) table.insert( EMT.MDCHAR, MDChar)
-- Se scarico in linea con abbassamento piano ferma pezzo allo scarico
if Cmd[4] == 'UnBrakeBeam' then
-- Abbassa ferma pezzo
local MDStopBeam = { StopBeamStat=2, Load=1}
table.insert( EMT.MDCHAR, MDStopBeam)
end
end end
elseif Cmd[1] == '2' then 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[2] ~= 'T' then MDChar[Cmd[2]] = tonumber( Cmd[3]) end
if Cmd[4] ~= 'T' then MDChar[Cmd[4]] = tonumber( Cmd[5]) 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) table.insert( EMT.MDCHAR, MDChar)
-- Alza ferma pezzo
if Cmd[6] == 'BrakeBeam' then
local MDStopBeam = { StopBeamStat=1, Load=1}
table.insert( EMT.MDCHAR, MDStopBeam)
end
elseif Cmd[1] == '3' then 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[2] ~= 'T' then MDChar[Cmd[2]] = tonumber( Cmd[3]) end
if Cmd[4] ~= 'T' then MDChar[Cmd[4]] = tonumber( Cmd[5]) 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 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) table.insert( EMT.MDCHAR, MDChar)
elseif Cmd[1] == '4' then elseif Cmd[1] == '4' then
EMT.TO_ZMAX = true EMT.TO_ZMAX = true
@@ -3051,6 +3186,23 @@ function EmitMoveWaitHead( nHead)
MyOutput( sOut) MyOutput( sOut)
end end
---------------------------------------------------------------------
-- Emette i movimenti di esecuzione movimenti trave e alzata o discesa del piano ferma pezzo
function EmitStopBeam( MoData)
if MoData.StopBeamStat then
if MoData.Load then
EmitMoveStartChars( 3)
EmitMoveWaitChars( 3)
sOut = 'M125 P1=' .. EgtNumToString( MoData.StopBeamStat, 0)
else
EmitMoveStartChars( 2)
EmitMoveWaitChars( 2)
sOut = 'M125 P2=' .. EgtNumToString( MoData.StopBeamStat, 0)
end
end
MyOutput( sOut)
end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function EmitMoveDataChars( MoData) function EmitMoveDataChars( MoData)
local sOut = 'M111' local sOut = 'M111'
+38 -3
View File
@@ -1768,17 +1768,36 @@ function ExecUnloading()
local vMillId = EMT.VMILL[1] local vMillId = EMT.VMILL[1]
-- gruppo dei Vmill -- gruppo dei Vmill
local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill')
local sUnloadType = ''
local sUnloadTypeOld = ''
local vtMove = Vector3d( 0, 0, 0)
local vtMoveOldElements = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, ( EMT.HB + 50.0), -( EMT.HB + 50.0)), 0)
-- Se scarico in linea
if MinBeamLenUnloadInLine and EMT.LT >= MinBeamLenUnloadInLine then
sUnloadType = 'LINE'
vtMove = Vector3d( EgtIf( BD.RIGHT_LOAD, -MinBeamLenUnloadInLine, MinBeamLenUnloadInLine), EgtIf( BD.RIGHT_LOAD, ( EMT.HB + 50.0), -( EMT.HB + 50.0)), 0)
else
if EMT.FALL then
sUnloadType = 'FALL'
vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 3200, -2600), -1150)
else
sUnloadType = 'STD'
vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 1600, -1600), 0)
end
end
-- li sposto per lasciare spazio al nuovo pezzo -- li sposto per lasciare spazio al nuovo pezzo
local nId = EgtGetFirstInGroup( nVmGrpId) local nId = EgtGetFirstInGroup( nVmGrpId)
while nId do while nId do
EgtMove( nId, Vector3d( 0, EgtIf( BD.RIGHT_LOAD, ( EMT.HB + 50.0), -( EMT.HB + 50.0)), 0), GDB_RT.GLOB) sUnloadTypeOld = EgtGetInfo( nId, 'UNLOAD_TYPE')
if sUnloadTypeOld == sUnloadType then
EgtMove( nId, vtMoveOldElements, GDB_RT.GLOB)
end
nId = EgtGetNext( nId) nId = EgtGetNext( nId)
end end
-- creo un nuovo layer e vi inserisco il nuovo pezzo -- creo un nuovo layer e vi inserisco il nuovo pezzo
local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( vMillId)) local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( vMillId))
EgtRelocate( vMillId, nLayId) EgtRelocate( vMillId, nLayId)
local vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 1600, -1600), 0) EgtSetInfo( nLayId, 'UNLOAD_TYPE', sUnloadType)
if EMT.FALL then vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 3200, -2600), -1150) end
EgtMove( nLayId, vtMove, GDB_RT.GLOB) EgtMove( nLayId, vtMove, GDB_RT.GLOB)
EgtSetLevel( vMillId, GDB_LV.USER) EgtSetLevel( vMillId, GDB_LV.USER)
-- aggiungo gli spigoli -- aggiungo gli spigoli
@@ -2991,6 +3010,22 @@ function IsLastPath( nPathId)
return not EgtGetNext( nPathId) return not EgtGetNext( nPathId)
end end
---------------------------------------------------------------------
function IsLastMachining( nMchId)
local nOpeId = EgtGetNextActiveOperation( nMchId)
while nOpeId do
local nType = EgtGetOperationType( nOpeId)
-- se c'è una lavorazione
if nType ~= MCH_OY.NONE and nType ~= MCH_OY.DISP then
return false
elseif nType == MCH_OY.DISP and IsRestPhase( EMT.PHASE + 1) then
return false
end
nOpeId = EgtGetNextActiveOperation( nOpeId)
end
return true
end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2) function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2)
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then
+163 -30
View File
@@ -47,7 +47,6 @@ function OnSpecialGetPrevMachiningOffset()
-- default -- default
EMC.ERR = 0 EMC.ERR = 0
EMC.PREVOFFSX = 0 EMC.PREVOFFSX = 0
-- se c'è cambio di fase tra le lavorazioni (quindi la precedente è l'ultima della sua fase e la corrente la prima) -- se c'è cambio di fase tra le lavorazioni (quindi la precedente è l'ultima della sua fase e la corrente la prima)
if EMC.PREVPHASE ~= EMC.CURRPHASE then if EMC.PREVPHASE ~= EMC.CURRPHASE then
-- se la fase corrente è di inizio lavorazione di nuova trave -- se la fase corrente è di inizio lavorazione di nuova trave
@@ -382,7 +381,7 @@ local function GetNextRawInOrd( nCurrRawId)
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
local function EnsureZmax( bCloseV, vCmd) local function EnsureZmax( bCloseV, vCmd, nInd)
-- verifico non sia già inserito nella lista dei comandi -- verifico non sia già inserito nella lista dei comandi
for i = 1, #vCmd do for i = 1, #vCmd do
if vCmd[i][1] == 4 then if vCmd[i][1] == 4 then
@@ -394,7 +393,11 @@ local function EnsureZmax( bCloseV, vCmd)
end end
end end
-- posizionamento sicuro teste e rulli -- 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 return true
end end
@@ -568,6 +571,14 @@ function OnSpecialApplyDisposition()
end end
-- eseguo scarico -- eseguo scarico
SpecSetCarrPosFromCmds( vCmd2) 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() local vCmd3 = SpecCalcUnload()
-- unisco ed emetto i comandi -- unisco ed emetto i comandi
vCmd = EgtJoinTables( vCmd, vCmd2) vCmd = EgtJoinTables( vCmd, vCmd2)
@@ -694,7 +705,7 @@ function OnSpecialApplyMachining()
local OriY2Delta = EMC.Y2DELTA local OriY2Delta = EMC.Y2DELTA
local OriV1Pos = EMC.V1POS local OriV1Pos = EMC.V1POS
local OriV2Pos = EMC.V2POS local OriV2Pos = EMC.V2POS
local OriCnt = EMC.CNT local OriCnt = EMC.CNT
-- eseguo le elaborazioni -- eseguo le elaborazioni
SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bLast and bUnload) SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bLast and bUnload)
-- se separazione, verifico il risultato -- se separazione, verifico il risultato
@@ -751,7 +762,10 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
-- Verifico se lavorazione pareti -- Verifico se lavorazione pareti
local bWall = ( EgtGetInfo( EgtGetCurrMachGroup() or GDB_ID.NULL, 'Wall', 'd') == 1) 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 -- mi salvo info lavorazione su una lista
local AuxInfoMach = {} local AuxInfoMach = {}
AuxInfoMach.bPreSplit = bPreSplit AuxInfoMach.bPreSplit = bPreSplit
@@ -759,7 +773,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
AuxInfoMach.bPreCut = bPreCut AuxInfoMach.bPreCut = bPreCut
AuxInfoMach.bCutting = bCutting AuxInfoMach.bCutting = bCutting
AuxInfoMach.bUnload = bUnload AuxInfoMach.bUnload = bUnload
-- Assegno flag di pezzo separato dal resto del grezzo -- Assegno flag di pezzo separato dal resto del grezzo
SPLIT = IsEndPhase( EMC.PHASE) SPLIT = IsEndPhase( EMC.PHASE)
@@ -767,6 +781,13 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
local b3Tot = BBox3d() local b3Tot = BBox3d()
local b3Raw = BBox3d() local b3Raw = BBox3d()
local nNextOddPhase = GetNextStartOrRestPhase( EMC.PHASE) 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 nRawId = EgtGetFirstRawPart()
local nCurrRawId = GDB_ID.NULL local nCurrRawId = GDB_ID.NULL
while nRawId do while nRawId do
@@ -817,6 +838,10 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
elseif bPreCut or bCutting then elseif bPreCut or bCutting then
local dDistF, dDistB, dRollF, dRollB = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1) local dDistF, dDistB, dRollF, dRollB = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
dDistFront = min( dDistFront, dDistF) 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) dDistBack = min( dDistBack, dDistB)
end end
@@ -886,12 +911,6 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
if not EMC.Y2DELTA then if not EMC.Y2DELTA then
EgtOutLog( ' Warning SPLITTING -> separazione con caduta pezzo') EgtOutLog( ' Warning SPLITTING -> separazione con caduta pezzo')
SpecOutputCNT() SpecOutputCNT()
-- non funziona ma servirebbe un controllo simile, di modo che non possa avvenire la presenza di un pezzo "FALL" più grande di LEN_VERY_SHORT_PART
--if EMC.LT > LEN_VERY_SHORT_PART then
-- EMC.ERR = 19
-- EMC.MSG = ' Error SPLIT : Y1 or Y2 not clamped'
-- return false
--end
if IsEndPhase( EMC.PHASE + 1) then if IsEndPhase( EMC.PHASE + 1) then
EgtSetInfo( NextDispId, 'SKIP', '1') EgtSetInfo( NextDispId, 'SKIP', '1')
local NextOpeId = EgtGetNextOperation( NextDispId) local NextOpeId = EgtGetNextOperation( NextDispId)
@@ -921,7 +940,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
EgtSetInfo( NextDispId, 'V1POS', EMC.V1POS) EgtSetInfo( NextDispId, 'V1POS', EMC.V1POS)
EgtSetInfo( NextDispId, 'V2POS', EMC.V2POS) EgtSetInfo( NextDispId, 'V2POS', EMC.V2POS)
end end
end end
-- Se previsto scarico, lo eseguo -- Se previsto scarico, lo eseguo
if bUnload then if bUnload then
@@ -1353,8 +1372,100 @@ function SpecCalcSplit( dLenRaw, dMaxLenLeft)
return vCmd return vCmd
end 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 - UnloadOnLoadTPos - 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 = UnloadOnLoadTPos + TurnerOffs
local dY1Move = dRotT + EMC.Y1DELTA
if dY1Move > MaxY1 then
local dRotTStep, dY1MoveStep = dRotT - dY1Move + MaxY1, MaxY1
if MinBeamLenUnloadInLine and EMC.LB >= MinBeamLenUnloadInLine then
table.insert( vCmd, { 2, 'Y1', dY1MoveStep, 'T', dRotTStep, 'BrakeBeam'})
-- apro la morsa
table.insert( vCmd, { 11, 0})
-- riporto il carrello in fondo alla trave
dY1MoveStep = dRotTStep + ( EMC.HCING or 0)
dY1Move = dY1MoveStep + dY1Move - MaxY1
table.insert( vCmd, { 1, 'Y1', dY1MoveStep, 'UnBrakeBeam'})
-- chiudo la morsa
table.insert( vCmd, { 11, 1})
end
end
table.insert( vCmd, { 2, 'Y1', dY1Move, 'T', dRotT, 'BrakeBeam'})
-- apro la morsa
table.insert( vCmd, { 11, 0})
EMC.CNT = nil
-- riporto il carrello in home
table.insert( vCmd, { 1, 'Y1', ParkY1, 'UnBrakeBeam'})
-- eventuale unione tabelle
if #vCmdPre > 0 then
vCmd = EgtJoinTables( vCmdPre, vCmd)
end
return vCmd
end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function SpecCalcUnload() 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 = {} local vCmdPre = {}
EgtOutLog( ' *[U]', 1) EgtOutLog( ' *[U]', 1)
if not EMC.Y1DELTA and not EMC.Y2DELTA then if not EMC.Y1DELTA and not EMC.Y2DELTA then
@@ -1403,8 +1514,30 @@ function SpecCalcUnload()
if bStdUl then if bStdUl then
local dFinT = EgtIf( EMC.LB < MaxLenSmT, UnloadSmT, UnloadT) - EMC.LB local dFinT = EgtIf( EMC.LB < MaxLenSmT, UnloadSmT, UnloadT) - EMC.LB
local dFinY2 = dFinT + EMC.Y2DELTA 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) 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 else
local dFinT = min( MaxY2 - EMC.Y2DELTA, max( UnloadT - MaxUnloadLen, MinY2 - EMC.Y2DELTA)) local dFinT = min( MaxY2 - EMC.Y2DELTA, max( UnloadT - MaxUnloadLen, MinY2 - EMC.Y2DELTA))
local dFinY2 = dFinT + EMC.Y2DELTA local dFinY2 = dFinT + EMC.Y2DELTA
@@ -1413,7 +1546,7 @@ function SpecCalcUnload()
-- apro la morsa -- apro la morsa
table.insert( vCmd, { 12, 0}) table.insert( vCmd, { 12, 0})
-- riporto il carrello in home -- riporto il carrello in home
table.insert( vCmd, { 1, 'Y2', ParkY2}) table.insert( vCmd, { 1, 'Y2', ParkY2, 'NoWaitUnload'})
-- eventuale unione tabelle -- eventuale unione tabelle
if #vCmdPre > 0 then if #vCmdPre > 0 then
@@ -1590,7 +1723,7 @@ local function PosForEnl1FY1( dY1a, dY2a, dTa, dExtra, dCorsaY1e, dCorsaY2Te)
if dDispl/2 <= dCorsaY1e then if dDispl/2 <= dCorsaY1e then
dY1a = dY1a + dDispl / 2 dY1a = dY1a + dDispl / 2
dY2a = dY2a - dDispl / 2 dY2a = dY2a - dDispl / 2
dTa = dTa - dDispl / 2 dTa = dTa - dDispl / 2
else else
dY1a = dY1a + dCorsaY1e dY1a = dY1a + dCorsaY1e
dY2a = dY2a - (dDispl - dCorsaY1e) dY2a = dY2a - (dDispl - dCorsaY1e)
@@ -1612,7 +1745,7 @@ local function PosForEnl1FY2( dY1a, dY2a, dTa, dExtra, dCorsaY1Te, dCorsaY2e)
if dDispl/2 <= dCorsaY1Te then if dDispl/2 <= dCorsaY1Te then
if dDispl/2 <= dCorsaY2e then if dDispl/2 <= dCorsaY2e then
dY1a = dY1a + dDispl / 2 dY1a = dY1a + dDispl / 2
dTa = dTa + dDispl / 2 dTa = dTa + dDispl / 2
dY2a = dY2a - dDispl / 2 dY2a = dY2a - dDispl / 2
else else
dY2a = dY2a - dCorsaY2e dY2a = dY2a - dCorsaY2e
@@ -1640,7 +1773,7 @@ local function MaxDispl( TabI, vCmd, sType)
-- allontano (Y1+T) e (Y2) -- allontano (Y1+T) e (Y2)
dY1a = MaxY1 dY1a = MaxY1
dY2a = MinY2 dY2a = MinY2
dTa = ( dY1a - TabI.dY1PosI) + dTa dTa = ( dY1a - TabI.dY1PosI) + dTa
-- **[M2]** = allontanamento dei trascinatori con Y2 in presa -- **[M2]** = allontanamento dei trascinatori con Y2 in presa
elseif sType == 'M2' then elseif sType == 'M2' then
EmitComment( vCmd, '[M2]') EmitComment( vCmd, '[M2]')
@@ -1651,7 +1784,7 @@ local function MaxDispl( TabI, vCmd, sType)
-- allontano (Y2+T) e (Y1) -- allontano (Y2+T) e (Y1)
dY1a = MaxY1 dY1a = MaxY1
dY2a = MinY2 dY2a = MinY2
dTa = ( dY2a - TabI.dY2PosI) + dTa dTa = ( dY2a - TabI.dY2PosI) + dTa
-- **[M3]** = accentramento dei trascinatori con Y1 in presa -- **[M3]** = accentramento dei trascinatori con Y1 in presa
elseif sType == 'M3' then elseif sType == 'M3' then
EmitComment( vCmd, '[M3]') EmitComment( vCmd, '[M3]')
@@ -1661,7 +1794,7 @@ local function MaxDispl( TabI, vCmd, sType)
-- accentro (Y1+T) e (Y2) -- accentro (Y1+T) e (Y2)
dY1a = TabI.MyMinY1V1 dY1a = TabI.MyMinY1V1
dY2a = TabI.MaxY2V2 dY2a = TabI.MaxY2V2
dTa = ( dY1a - TabI.dY1PosI) + dTa dTa = ( dY1a - TabI.dY1PosI) + dTa
-- **[M4]** = accentramento dei trascinatori con Y2 in presa -- **[M4]** = accentramento dei trascinatori con Y2 in presa
elseif sType == 'M4' then elseif sType == 'M4' then
EmitComment( vCmd, '[M4]') EmitComment( vCmd, '[M4]')
@@ -1672,7 +1805,7 @@ local function MaxDispl( TabI, vCmd, sType)
-- accentro (Y2+T) e (Y1) -- accentro (Y2+T) e (Y1)
dY1a = TabI.MyMinY1V1 dY1a = TabI.MyMinY1V1
dY2a = TabI.MaxY2V2 dY2a = TabI.MaxY2V2
dTa = ( dY2a - TabI.dY2PosI) + dTa dTa = ( dY2a - TabI.dY2PosI) + dTa
end end
-- --
table.insert( vCmd, { 3, 'Y1', dY1a, 'Y2', dY2a, 'T', dTa, EMC.CNT}) table.insert( vCmd, { 3, 'Y1', dY1a, 'Y2', dY2a, 'T', dTa, EMC.CNT})
@@ -1960,7 +2093,7 @@ local function PosY1Y2B( TabI, vCmd)
PosY2FromY1B( TabI, vCmd) PosY2FromY1B( TabI, vCmd)
end end
end end
bXW = false bXW = false
-- se posso posizionare 'direttamente' Y2 all'interno dell'intervallo I2 (casi [rp] o [ri]) -- se posso posizionare 'direttamente' Y2 all'interno dell'intervallo I2 (casi [rp] o [ri])
else else
-- |POSIZIONO MORSA 2| e poi MORSA 1 -- |POSIZIONO MORSA 2| e poi MORSA 1
@@ -1971,7 +2104,7 @@ local function PosY1Y2B( TabI, vCmd)
TabI.dY1PosI < TabI.dTPosI + EMC.LB - MinJoin - EgtIf( SPLIT, EMC.TCING, 0) + 10 * GEO.EPS_SMALL then TabI.dY1PosI < TabI.dTPosI + EMC.LB - MinJoin - EgtIf( SPLIT, EMC.TCING, 0) + 10 * GEO.EPS_SMALL then
PosY2FromY1A( TabI, vCmd) PosY2FromY1A( TabI, vCmd)
PosY1FromY2B( TabI, vCmd) PosY1FromY2B( TabI, vCmd)
bXW = false bXW = false
end end
-- in **accentramento** -- in **accentramento**
else else
@@ -1980,9 +2113,9 @@ local function PosY1Y2B( TabI, vCmd)
TabI.dY1PosI <= TabI.dTPosI + EMC.LB - MinJoin - EgtIf( SPLIT, EMC.TCING, 0) + 10 * GEO.EPS_SMALL then TabI.dY1PosI <= TabI.dTPosI + EMC.LB - MinJoin - EgtIf( SPLIT, EMC.TCING, 0) + 10 * GEO.EPS_SMALL then
PosY2FromY1B( TabI, vCmd) PosY2FromY1B( TabI, vCmd)
PosY1FromY2B( TabI, vCmd) PosY1FromY2B( TabI, vCmd)
bXW = false bXW = false
end end
end end
end end
if bXW then if bXW then
-- Massimo trascinamento della trave in direzione positiva (casi **[xw]** ) -- Massimo trascinamento della trave in direzione positiva (casi **[xw]** )
@@ -1992,10 +2125,10 @@ local function PosY1Y2B( TabI, vCmd)
TabI.dY1PosI < TabI.dTPosI + EMC.LB - MinJoin - EgtIf( SPLIT, EMC.TCING, 0) + 10 * GEO.EPS_SMALL then TabI.dY1PosI < TabI.dTPosI + EMC.LB - MinJoin - EgtIf( SPLIT, EMC.TCING, 0) + 10 * GEO.EPS_SMALL then
-- allontanamento morse, trascinamento trave con Y1 -- allontanamento morse, trascinamento trave con Y1
MaxDispl( TabI, vCmd, 'M1') MaxDispl( TabI, vCmd, 'M1')
else else
-- accentramento morse, trascinamento trave con Y2 -- accentramento morse, trascinamento trave con Y2
MaxDispl( TabI, vCmd, 'M4') MaxDispl( TabI, vCmd, 'M4')
end end
end end
nCnt = nCnt + 1 nCnt = nCnt + 1
if nCnt > 10 then return end if nCnt > 10 then return end
@@ -2541,11 +2674,11 @@ function SpecOutputCmds( vCmd, bEnd)
EgtSetInfo( EMC.PATHID, sKey, sInfo) EgtSetInfo( EMC.PATHID, sKey, sInfo)
-- movimento di 1 asse -- movimento di 1 asse
elseif Cmd[1] == 1 then elseif Cmd[1] == 1 then
local sInfo = '1,'..Cmd[2]..','..EgtNumToString( Cmd[3],3)..EgtIf( Cmd[4], ',*', '') local sInfo = '1,'..Cmd[2]..','..EgtNumToString( Cmd[3],3)..EgtIf( Cmd[4], ','..tostring(Cmd[4]), '')
EgtSetInfo( EMC.PATHID, sKey, sInfo) EgtSetInfo( EMC.PATHID, sKey, sInfo)
-- movimento di 2 assi -- movimento di 2 assi
elseif Cmd[1] == 2 then 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) EgtSetInfo( EMC.PATHID, sKey, sInfo)
-- movimento di 3 assi -- movimento di 3 assi
elseif Cmd[1] == 3 then elseif Cmd[1] == 3 then
+3
View File
@@ -1,5 +1,8 @@
==== Common_PF1250 Update Log ==== ==== Common_PF1250 Update Log ====
Versione 3.1-- (--/--/2026)
- (GEN) In caso di ultimo movimento come scarico rimanenza, porta V2 in posizione di parcheggio. Ticket#3006
Versione 3.1e2 (15/05/2026) Versione 3.1e2 (15/05/2026)
- (SIM-GEN) Corretta gestione scarico manuale ( errore in versione 3.1e1) - (SIM-GEN) Corretta gestione scarico manuale ( errore in versione 3.1e1)
+1 -1
View File
@@ -3,7 +3,7 @@
local InfoCommon_STD_PP = { local InfoCommon_STD_PP = {
NAME = 'Common_PF1250', -- nome script PP standard NAME = 'Common_PF1250', -- nome script PP standard
VERSION = '3.1e2', -- versione script VERSION = '3.1--', -- versione script
MIN_MACH_VER_PP_COMMON = '3.1b2' -- versione minima kernel MIN_MACH_VER_PP_COMMON = '3.1b2' -- versione minima kernel
} }