165 lines
5.4 KiB
Lua
165 lines
5.4 KiB
Lua
-- WinData.lua by Egalware s.r.l. 2024/06/13
|
|
-- Raccolta dati generali per Serramenti
|
|
|
|
EgtOutLog( ' Just3500-WinData started', 1)
|
|
|
|
-- Tabella per definizione modulo
|
|
local WinData = {
|
|
-- COSTANTI
|
|
MACH_TYPE = 'LINE',
|
|
FIRST_PHASE_LOAD = 'PUSH',
|
|
DIM_CAR = 1430,
|
|
DIST_CARR_OPEN = 470,
|
|
DIST_CARR_CLOSE = 90,
|
|
DIMTABY = 250,
|
|
MAXDIMPIECE1CAR = 1500,
|
|
TABNAME_1PZ = 'Tab',
|
|
TABNAME_2PZ = 'Tab2',
|
|
PART_ALIGN = Vector3d( 1, 0, 0)
|
|
}
|
|
|
|
---------------------------------------------------------------------
|
|
-- Verifica che i pezzi da processare siano compatibili con la configurazione della macchina
|
|
---------------------------------------------------------------------
|
|
local function VerifyPieces( PARTS)
|
|
if not PARTS or #PARTS > 2 then
|
|
EgtOutBox( 'ATTENZIONE : massimo due pezzi per macchinata', 'Lavora Pezzi', 'ERROR')
|
|
return false
|
|
end
|
|
|
|
-- controllo che le dimensioni siano compatibili
|
|
for i = 1, #PARTS do
|
|
if #PARTS == 1 then
|
|
if PARTS[i].dPartLength > ( WinData.DIM_CAR + WinData.DIST_CARR_OPEN + WinData.DIM_CAR) then
|
|
EgtOutBox( 'ATTENZIONE : pezzo troppo lungo', 'Lavora Pezzi', 'ERROR')
|
|
return false
|
|
end
|
|
else
|
|
if PARTS[i].dPartLength > WinData.MAXDIMPIECE1CAR then
|
|
EgtOutBox( 'ATTENZIONE : pezzo ' .. PARTS[i].sName .. ' troppo lungo', 'Lavora Pezzi', 'ERROR')
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
WinData.VerifyPieces = VerifyPieces
|
|
|
|
---------------------------------------------------------------------
|
|
-- Dispone i pezzi in macchina
|
|
---------------------------------------------------------------------
|
|
local function ExecDisposition( PARTS)
|
|
|
|
-- si verifica che i pezzi selezionati siano compatibili con la macchina
|
|
VerifyPieces( PARTS)
|
|
|
|
-- se ho un pezzo
|
|
if #PARTS == 1 then
|
|
EgtSetTable( WinData.TABNAME_1PZ)
|
|
-- se ho due pezzi
|
|
else
|
|
EgtSetTable( WinData.TABNAME_2PZ)
|
|
end
|
|
|
|
|
|
-- fase 1 (non serve creare fase 1 perchè già presente alla creazione del machgroup)
|
|
EgtSetCurrPhase( 1)
|
|
for i = 1, #PARTS do
|
|
local dPosX = 0
|
|
local dPosY = 0
|
|
local dPosZ = 0
|
|
-- posizionamento pezzi prima fase
|
|
-- setto gli offset iniziali
|
|
if i == 2 then dPosX = WinData.DIM_CAR + WinData.DIST_CARR_OPEN end
|
|
dPosX = dPosX - PARTS[i].OffsetPartToRaw.X
|
|
dPosY = - PARTS[i].OffsetPartToRaw.Y - PARTS[i].DispOffsets.Phase1.dOffsetY
|
|
dPosZ = 0
|
|
|
|
local vtOffs = Vector3d( dPosX, dPosY, dPosZ)
|
|
|
|
-- ammetto di uscire dalla tavola dello sbordo calcolato
|
|
EgtSetTableAreaOffset( 100, 100, 100, 100)
|
|
EgtSetStatus( PARTS[i].idRaw, GDB_ST.ON)
|
|
|
|
if not EgtMoveToCornerRawPart( PARTS[i].idRaw, vtOffs, MCH_CR.BL) then
|
|
EgtOutLog( 'InitDisp for Saomad-Just3500 : error positioning raw part on table')
|
|
return false
|
|
end
|
|
end
|
|
|
|
-- fase 2
|
|
EgtAddPhase()
|
|
EgtSetCurrPhase( 2)
|
|
for i = 1, #PARTS do
|
|
-- ammetto di uscire dalla tavola dello sbordo calcolato
|
|
EgtSetTableAreaOffset( 100, 100, 100, 100)
|
|
-- posizionamento pezzi seconda fase
|
|
-- reset offset
|
|
local dPosX = 0
|
|
local dPosY = WinData.DIMTABY
|
|
local dPosZ = 0
|
|
-- se sono al secondo pezzo da inserire, lo metto sul secondo carrello
|
|
if i == 2 then
|
|
dPosX = WinData.DIM_CAR + WinData.DIST_CARR_OPEN + WinData.DIM_CAR
|
|
-- se primo pezzo
|
|
else
|
|
if PARTS[i].dPartLength > WinData.MAXDIMPIECE1CAR then
|
|
dPosX = WinData.DIM_CAR + WinData.DIST_CARR_CLOSE + WinData.DIM_CAR
|
|
else
|
|
dPosX = WinData.DIM_CAR
|
|
end
|
|
end
|
|
|
|
EgtKeepRawPart( PARTS[i].idRaw)
|
|
dPosX = dPosX - PARTS[i].dPartLength - PARTS[i].OffsetPartToRaw.X
|
|
dPosY = dPosY - PARTS[i].dPartWidth - PARTS[i].OffsetPartToRaw.Y + PARTS[i].DispOffsets.Phase2.dOffsetY
|
|
dPosZ = PARTS[i].DispOffsets.Phase2.dOffsetZ
|
|
|
|
local vtOffs = Vector3d( dPosX, dPosY, dPosZ)
|
|
|
|
EgtMoveToCornerRawPart( PARTS[i].idRaw, vtOffs, MCH_CR.BL)
|
|
end
|
|
|
|
return true
|
|
end
|
|
WinData.ExecDisposition = ExecDisposition
|
|
|
|
---------------------------------------------------------------------
|
|
-- Info che dipendono dal setup dell'utensile e configurazione macchina
|
|
---------------------------------------------------------------------
|
|
local function GetSetupInfo( ToolData)
|
|
local SetupInfo = {}
|
|
|
|
-- dati comuni
|
|
SetupInfo.bToolOnAggregate = false
|
|
|
|
-- testa 1 ( testa verticale con asse rotante per rinvii con CU)
|
|
if ToolData.sHead == 'H11' then
|
|
SetupInfo.nNumberOfAxis = 4
|
|
SetupInfo.bIsVerticalHead = true
|
|
SetupInfo.bIsHorizontalHead = not SetupInfo.bIsVerticalHead
|
|
-- testa 2 ( 4 uscite orizzontali rotanti)
|
|
elseif ToolData.sHead == 'H21' then
|
|
SetupInfo.nNumberOfAxis = 4
|
|
SetupInfo.nAxisNumber = 4
|
|
SetupInfo.bIsHorizontalHead = true
|
|
SetupInfo.bIsVerticalHead = not SetupInfo.bIsHorizontalHead
|
|
-- testa 3 ( 2 uscite orizzontali fisse)
|
|
elseif ToolData.sHead == 'H31' then
|
|
SetupInfo.nNumberOfAxis = 3
|
|
SetupInfo.bIsHorizontalHead = true
|
|
SetupInfo.bIsVerticalHead = not SetupInfo.bIsHorizontalHead
|
|
-- testa 4 ( testa verticale fissa)
|
|
elseif ToolData.sHead == 'H41' then
|
|
SetupInfo.nNumberOfAxis = 3
|
|
SetupInfo.bIsVerticalHead = true
|
|
SetupInfo.bIsHorizontalHead = not SetupInfo.bIsVerticalHead
|
|
end
|
|
|
|
return SetupInfo
|
|
end
|
|
WinData.GetSetupInfo = GetSetupInfo
|
|
|
|
---------------------------------------------------------------------
|
|
return WinData
|