Files
DataBeam/BatchProcess.lua
T
Dario Sassi 6eaba8a577 DataBeam :
- primo rilascio.
2019-04-01 15:18:51 +00:00

227 lines
7.0 KiB
Lua

-- BatchProcess.lua by Egaltech s.r.l. 2019/04/01
-- Gestione calcolo batch disposizione e lavorazioni per Travi
-- Intestazioni
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
-- Log dati di generazione
local sLog = 'BatchProcess : ' .. BEAM.FILE .. ', ' .. BEAM.MACHINE .. ', ' .. tostring( BEAM.FLAG)
EgtOutLog( sLog)
-- Cancello file di log specifico
local sLogFile = EgtChangePathExtension( BEAM.FILE, '.txt')
EgtEraseFile( sLogFile)
-- Funzione per scrittura su file di log specifico
local function WriteLogFile( nErr, sErr, nCutId, nTaskId)
if nErr ~= 0 then
EgtOutLog( sErr .. ' (' .. tostring( nErr) ..')')
end
local hFile = io.open( sLogFile, 'w')
hFile:write( 'ERR=' .. tostring( nErr) .. '\n')
if nErr ~= 0 then
hFile:write( 'CUTID=' .. tostring( nCutId or 0) .. '\n')
hFile:write( 'TASKID=' .. tostring( nTaskId or 0) .. '\n')
hFile:write( sErr .. '\n')
end
hFile:close()
if nErr ~= 0 and ( BEAM.FLAG == 1 or BEAM.FLAG == 2) then
EgtSetView( SCE_VD.ISO_SW, false)
EgtZoom( SCE_ZM.ALL)
EgtOutBox( sErr .. ' (error ' .. tostring( nErr) .. ')', 'BatchProcess', 'ERROR')
end
end
-- Imposto direttorio libreria specializzata per Travi
local sBaseDir = EgtGetSourceDir()
EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua')
-- Impostazione della macchina corrente
EgtResetCurrMachGroup()
local sMachine = 'Essetre-' .. BEAM.MACHINE
if not EgtSetCurrMachine( sMachine) then
BEAM.ERR = 11
BEAM.MSG = 'Error selecting machine : ' .. sMachine
WriteLogFile( BEAM.ERR, BEAM.MSG)
return
end
-- Verifico che la macchina corrente sia abilitata per la lavorazione delle Travi
local sMachDir = EgtGetCurrMachineDir()
if not EgtExistsFile( sMachDir .. '\\Beam\\BeamData.lua') then
BEAM.ERR = 12
BEAM.MSG = 'Error not configured for beams machine : ' .. sMachine
WriteLogFile( BEAM.ERR, BEAM.MSG)
return
end
-- Elimino direttori altre macchine e imposto direttorio macchina corrente per ricerca librerie
EgtRemoveBaseMachineDirFromPackagePath()
EgtAddToPackagePath( sMachDir .. '\\Beam\\?.lua')
-- Segnalazione avvio
EgtOutLog( '*** Beam BatchProcess Start ***', 1)
-- Carico le librerie
_G.package.loaded.BeamExec = nil
local BE = require( 'BeamExec')
local BL = require( 'BeamLib')
-- Carico i dati globali
local BD = require( 'BeamData')
-- Importo il file Btl
EgtNewFile()
if not EgtImportBtl( BEAM.FILE, EIB_FL.TS3_POS) then
BEAM.ERR = 13
BEAM.MSG = 'Error importing BTL file : ' .. BEAM.FILE
WriteLogFile( BEAM.ERR, BEAM.MSG)
return
end
-- Recupero l'elenco ordinato delle travi
local vBeam = {}
local nPartId = EgtGetFirstPart()
while nPartId do
table.insert( vBeam, { Id = nPartId, Name = ( EgtGetName( nPartId) or ( 'Id=' .. tonumber( nPartId)))})
nPartId = EgtGetNextPart( nPartId)
end
if #vBeam == 0 then
BEAM.ERR = 14
BEAM.MSG = 'Error no beams in the file : ' .. BEAM.FILE
WriteLogFile( BEAM.ERR, BEAM.MSG)
return
else
local sOut = ''
for i = 1, #vBeam do
sOut = sOut .. vBeam[i].Name .. ', '
end
sOut = sOut:sub( 1, -3)
EgtOutLog( 'Travi trovate : ' .. sOut, 1)
end
-- Ne recupero le dimensioni
for i = 1, #vBeam do
local Ls = EgtGetFirstNameInGroup( vBeam[i].Id, 'Box')
local b3Solid = EgtGetBBoxGlob( Ls or GDB_ID.NULL, GDB_BB.STANDARD)
if not b3Solid then
BEAM.ERR = 15
BEAM.MSG = 'Box undefined for beam ' .. vBeam[i].Name
WriteLogFile( BEAM.ERR, BEAM.MSG)
return
else
vBeam[i].Box = b3Solid
end
end
-- Eseguo eventuali rotazioni e inversioni testa-coda
for i = 1, #vBeam do
local b3Solid = vBeam[i].Box
-- rotazione
local dRotAng = EgtGetInfo( vBeam[i].Id, 'ROTATED', 'd')
if dRotAng and abs( dRotAng) > GEO.EPS_ANG_SMALL then
local ptRotCen = b3Solid:getCenter()
EgtRotate( vBeam[i].Id, ptRotCen, X_AX(), dRotAng, GDB_RT.GLOB)
b3Solid:rotate( ptRotCen, X_AX(), dRotAng)
end
-- inversione
local dInvAng = 180 - ( EgtGetInfo( vBeam[i].Id, 'INVERTED', 'd') or 0)
if abs( dInvAng) > GEO.EPS_ANG_SMALL then
local ptInvCen = b3Solid:getCenter()
EgtRotate( vBeam[i].Id, ptInvCen, Z_AX(), dInvAng, GDB_RT.GLOB)
end
end
-- Ne verifico le dimensioni
local dRawW = vBeam[1].Box:getDimY()
local dRawH = vBeam[1].Box:getDimZ()
local vBeamErr = {}
for i = 2, #vBeam do
local dDimW = vBeam[i].Box:getDimY()
local dDimH = vBeam[i].Box:getDimZ()
if ( abs( dDimW - dRawW) > 10 * GEO.EPS_SMALL or abs( dDimH - dRawH) > 10 * GEO.EPS_SMALL) and
( abs( dDimH - dRawW) > 10 * GEO.EPS_SMALL or abs( dDimW - dRawH) > 10 * GEO.EPS_SMALL) then
table.insert( vBeamErr, i)
end
end
if #vBeamErr > 0 then
local sOut = 'Rimosse travi con sezioni diverse dalla prima :\n'
for i = #vBeamErr, 1, -1 do
sOut = sOut .. vBeam[vBeamErr[i]].Name .. '\n'
table.remove( vBeam, vBeamErr[i])
end
BEAM.ERR = 16
BEAM.MSG = sOut
WriteLogFile( BEAM.ERR, BEAM.MSG)
return
end
-- Verifico sezione barra
if dRawW > BD.MAX_WIDTH + 10 * GEO.EPS_SMALL or dRawH > BD.MAX_HEIGHT + 10 * GEO.EPS_SMALL then
local sOut = 'Sezione (' .. EgtNumToString( dRawW, 2) .. ' x ' .. EgtNumToString( dRawH, 2) .. ') ' ..
'oltre i limiti della macchina (' .. EgtNumToString( BD.MAX_WIDTH, 2) .. ' x ' .. EgtNumToString( BD.MAX_HEIGHT, 2) .. ')'
BEAM.ERR = 17
BEAM.MSG = sOut
WriteLogFile( BEAM.ERR, BEAM.MSG)
return
end
-- Lunghezza della barra
local dRawL = EgtGetInfo( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo'), 'BARLEN', 'd') or 12000
-- Sovramateriale di testa
local dOvmHead = EgtGetInfo( EgtGetFirstPart(), 'POSX', 'd') or 10
-- Sistemo le travi nel grezzo
local bPbOk, sPbErr = BE.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, vBeam)
if not bPbOk then
BEAM.ERR = 18
BEAM.MSG = sPbErr
WriteLogFile( BEAM.ERR, BEAM.MSG)
return
end
-- Imposto Nome file CN
local _, sName, _ = EgtSplitPath( BEAM.FILE)
EgtSetInfo( EgtGetCurrMachGroup(), 'NcName', sName .. '.cnc')
-- Abilito Vmill
EgtSetInfo( EgtGetCurrMachGroup(), 'Vm', '1')
-- Lavoro le features
local bPfOk, sPfErr, nPfCutId, nPfTaskId = BE.ProcessFeatures()
if not bPfOk then
BEAM.ERR = 19
BEAM.MSG = sPfErr
BEAM.CUTID = nPfCutId
BEAM.TASKID = nPfTaskId
WriteLogFile( BEAM.ERR, BEAM.MSG, BEAM.CUTID, BEAM.TASKID)
return
end
-- Salvo il progetto
local sNgeFile = EgtChangePathExtension( BEAM.FILE, '.nge')
EgtSaveFile( sNgeFile)
-- Genero programma CN, se richiesto
if BEAM.FLAG == 0 then
if not EgtGenerate( '', 'EgtCAM5 - ' .. sNgeFile) then
BEAM.ERR = 20
BEAM.MSG = 'Error generating NC part program : ' .. sName
WriteLogFile( BEAM.ERR, BEAM.MSG)
return
end
end
-- Imposto la vista ISO 3d, se richiesto
if BEAM.FLAG == 1 or BEAM.FLAG == 2 then
EgtSetView( SCE_VD.ISO_SW, false)
end
-- Completamento senza errori
BEAM.ERR = 0
BEAM.MSG = ''
WriteLogFile( BEAM.ERR, BEAM.MSG)