-- 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