Files
Saomad-Just3500/Window/WinData.lua
T
2024-07-17 13:02:09 +02:00

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