DataGunstock :
- messe a punto per macchina Mazak.
This commit is contained in:
@@ -426,6 +426,16 @@ local function InsertInLayer( sNgeFile, nLayId)
|
||||
if sTcPos then
|
||||
EgtSetInfo( nLayId, 'TCPOS', sTcPos)
|
||||
end
|
||||
-- Copia eventuale info con posizione utensile
|
||||
local sTPos = EgtGetInfo( nLay or GDB_ID.NULL, 'TPOS')
|
||||
if sTPos then
|
||||
EgtSetInfo( nLayId, 'TPOS', sTPos)
|
||||
end
|
||||
-- Copia eventuale info con speed
|
||||
local sSpeed = EgtGetInfo( nLay or GDB_ID.NULL, 'SPEED')
|
||||
if sSpeed then
|
||||
EgtSetInfo( nLayId, 'SPEED', sSpeed)
|
||||
end
|
||||
-- Copia eventuale info con nome di utensile
|
||||
local sToolName = EgtGetInfo( nLay or GDB_ID.NULL, 'TNAME')
|
||||
if sToolName then
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- Main.lua by Egaltech s.r.l. 2020/09/28
|
||||
-- Main.lua by Egaltech s.r.l. 2020/09/30
|
||||
-- Main gestione lavorazioni Gunstock
|
||||
|
||||
-- Intestazioni
|
||||
@@ -644,6 +644,7 @@ function GGD.CreateGunstock()
|
||||
local sTmpDir = sBaseDir .. 'TMP\\'
|
||||
local sErrFile = sPezDir .. sPezName .. '.txt'
|
||||
local sCncFile = sBaseDir .. 'CNC\\' .. sPezName
|
||||
local sCncMazFile = sCncFile..'.EIA'
|
||||
local sNgeFile = sPezDir .. sPezName .. '.nge'
|
||||
|
||||
-- Messaggi di inizio
|
||||
@@ -652,6 +653,7 @@ function GGD.CreateGunstock()
|
||||
-- Cancello tutti i file di output
|
||||
EgtEraseFile( sErrFile)
|
||||
EgtEraseFile( sCncFile)
|
||||
EgtEraseFile( sCncMazFile)
|
||||
EgtEraseFile( sNgeFile)
|
||||
|
||||
-- Pulisco il direttorio temporaneo
|
||||
@@ -1052,155 +1054,333 @@ function GGD.CreateGunstock()
|
||||
end
|
||||
|
||||
-- Generazione programma principale
|
||||
if not EGB.OpenOutFile( sCncFile) then
|
||||
EGB.WriteErrLine( 'ERR=203\nErrore nell\'apertura del file cnc ' .. sCncFile)
|
||||
if not EGB.OpenOutFile( EgtIf( bMazak, sCncMazFile, sCncFile)) then
|
||||
EGB.WriteErrLine( 'ERR=203\nErrore nell\'apertura del file cnc ' .. EgtIf( bMazak, sCncMazFile, sCncFile))
|
||||
GGD.ERR = 203
|
||||
return
|
||||
end
|
||||
-- emissione intestazione
|
||||
EGB.WriteOutLine( '(DIS,"CODICE=PRG1")')
|
||||
EGB.WriteOutLine( '; ' .. EgtGetCurrMachineName():upper())
|
||||
EGB.WriteOutLine( '; ' .. sPezName:upper() .. sPezExt:upper() .. '-' .. sModName:upper() .. sModExt:upper())
|
||||
EGB.WriteOutLine( '; ' .. GGD.DESCR:upper())
|
||||
EGB.WriteOutLine( '; ' .. m_sAttr:upper())
|
||||
local sStart1Def = 'M70<br/>"CICLI"'
|
||||
if m_vRaw.dLen < LEN_MIN_RIFLE then
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start1', sStart1Def, sMachIni)
|
||||
else
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start1_R', sStart1Def, sMachIni)
|
||||
end
|
||||
for i = 1, #m_vParams do
|
||||
EGB.WriteOutLine( m_vParams[i].sVar .. '=' .. EgtNumToString( m_vParams[i].dVal, 3))
|
||||
end
|
||||
if ( bTwoHeads and #m_vMachs > 0) then
|
||||
local sTcPos = EgtGetInfo( m_vMachs[1].nLay, 'TCPOS')
|
||||
if not sTcPos then
|
||||
EGB.WriteErrLine( 'ERR=208\nErrore non trovata posizione utensile in CU')
|
||||
GGD.ERR = 208
|
||||
|
||||
-- se macchina Mazak
|
||||
if bMazak then
|
||||
-- emissione intestazione
|
||||
EGB.WriteOutLine( '(' .. EgtGetCurrMachineName():upper() .. ')')
|
||||
EGB.WriteOutLine( '(' .. sPezName:upper() .. sPezExt:upper() .. '-' .. sModName:upper() .. sModExt:upper() .. ')')
|
||||
EGB.WriteOutLine( '(' .. GGD.DESCR:upper() .. ')')
|
||||
EGB.WriteOutLine( '(' .. m_sAttr:upper() .. ')')
|
||||
-- emissioni iniziali opzionali
|
||||
local sStart1Def = ''
|
||||
if m_vRaw.dLen < LEN_MIN_RIFLE then
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start1', sStart1Def, sMachIni)
|
||||
else
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start1_R', sStart1Def, sMachIni)
|
||||
end
|
||||
-- emissione inizializzazioni
|
||||
EGB.WriteOutLine( '')
|
||||
EGB.WriteOutLine( '(INIZIO)')
|
||||
EGB.WriteOutLine( '#5241=0')
|
||||
EGB.WriteOutLine( '#5242=0')
|
||||
EGB.WriteOutLine( '#5243=0')
|
||||
EGB.WriteOutLine( '#5244=0')
|
||||
EGB.WriteOutLine( '#5245=0')
|
||||
EGB.WriteOutLine( 'G0 G17 G40 G49 G80 G90 G94')
|
||||
EGB.WriteOutLine( 'G0 G53 Z0')
|
||||
EGB.WriteOutLine( 'G0 G53 X0')
|
||||
EGB.WriteOutLine( 'G0 G53 Y0')
|
||||
EGB.WriteOutLine( 'G0 G53 A0 C0')
|
||||
EGB.WriteOutLine( 'G61.1')
|
||||
-- seconde emissioni iniziali opzionali
|
||||
local sStart2Def = ''
|
||||
if m_vRaw.dLen < LEN_MIN_RIFLE then
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start2', sStart2Def, sMachIni)
|
||||
else
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start2_R', sStart2Def, sMachIni)
|
||||
end
|
||||
-- emissione dei posizionamenti e dei richiami delle lavorazioni
|
||||
if not EgtSetCalcTool( 'Calc', 'H1', 1) then
|
||||
EGB.WriteErrLine( 'ERR=204\nErrore nell\'impostazione dell\'utensile di calcolo')
|
||||
GGD.ERR = 204
|
||||
return
|
||||
end
|
||||
local nTcPos = tonumber( sTcPos:sub( 2))
|
||||
EGB.WriteOutLine( EgtIf( nTcPos <= 18, 'M41M52', 'M42M51'))
|
||||
EGB.WriteOutLine( sTcPos .. ' M6')
|
||||
end
|
||||
local sStart2Def = 'G79G0Z0<br/>G79X-1500Y-1600C0B0'
|
||||
if m_vRaw.dLen < LEN_MIN_RIFLE then
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start2', sStart2Def, sMachIni)
|
||||
else
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start2_R', sStart2Def, sMachIni)
|
||||
end
|
||||
EGB.WriteOutLine( '(UAO,0)')
|
||||
EGB.WriteOutLine( EgtIf( bTwoHeads, '(UOT,0,X0,U0,Y0,Z0,W0)', '(UOT,0,X0,Y0,Z0)'))
|
||||
-- emissione dei posizionamenti e dei richiami delle lavorazioni
|
||||
if not EgtSetCalcTool( 'Calc', 'H1', 1) then
|
||||
EGB.WriteErrLine( 'ERR=204\nErrore nell\'impostazione dell\'utensile di calcolo')
|
||||
GGD.ERR = 204
|
||||
return
|
||||
end
|
||||
local dCalcLen = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
||||
local nNum = 0
|
||||
local dPrevR1, dPrevR2 = 9999, 9999
|
||||
for i = 1, #m_vMachs do
|
||||
-- lavorazione i-esima
|
||||
local vMach = m_vMachs[i]
|
||||
local frMach = EgtFR( vMach.nLay, GDB_ID.ROOT)
|
||||
-- emissione info di lavorazione
|
||||
nNum = nNum + 10
|
||||
if vMach.sInfo then
|
||||
EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' ; ' .. vMach.sInfo:upper())
|
||||
local nNum = 0
|
||||
local sTcPosPrev
|
||||
local dPrevR1, dPrevR2 = 9999, 9999
|
||||
for i = 1, #m_vMachs do
|
||||
-- lavorazione i-esima
|
||||
local vMach = m_vMachs[i]
|
||||
local frMach = EgtFR( vMach.nLay, GDB_ID.ROOT)
|
||||
-- emissione info di lavorazione
|
||||
EGB.WriteOutLine( '')
|
||||
nNum = nNum + 10
|
||||
if vMach.sInfo then
|
||||
EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' (' .. vMach.sInfo:upper() .. ')')
|
||||
else
|
||||
EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' ( *** )')
|
||||
end
|
||||
-- recupero dati utensile
|
||||
local sTname = EgtGetInfo( vMach.nLay, 'TNAME')
|
||||
local sTcPos = EgtGetInfo( vMach.nLay, 'TPOS')
|
||||
if not sTcPos then
|
||||
EGB.WriteOutLine( '(ERRORE MANCA TPOS IN ' .. vMach.sName .. ')')
|
||||
EGB.WriteErrLine( 'ERR=211\nErrore manca TPOS in ' .. vMach.sName)
|
||||
GGD.ERR = 211
|
||||
return
|
||||
end
|
||||
-- se utensile cambiato
|
||||
local bTdiff = ( sTcPos ~= sTcPosPrev)
|
||||
if bTdiff then
|
||||
-- posizionamento prima di cambio utensile
|
||||
if i > 1 then
|
||||
EGB.WriteOutLine( 'G0 G53 Z0')
|
||||
EGB.WriteOutLine( 'G0 G53 Y-1000')
|
||||
EGB.WriteOutLine( 'G0 G53 X0')
|
||||
EGB.WriteOutLine( 'G0 G53 Y0')
|
||||
end
|
||||
-- emissione richiamo utensile
|
||||
EGB.WriteOutLine( sTcPos .. ' M6' .. EgtIf( sTname, ' ('..EgtTrim( sTname)..')', ''))
|
||||
end
|
||||
-- preselezione prossimo utensile
|
||||
if i < #m_vMachs then
|
||||
local sTcPosNext = EgtGetInfo( m_vMachs[i+1].nLay, 'TPOS')
|
||||
EGB.WriteOutLine( sTcPosNext or 'T0')
|
||||
else
|
||||
EGB.WriteOutLine( 'T0')
|
||||
end
|
||||
-- emissione speed
|
||||
local sSpeed = EgtGetInfo( vMach.nLay, 'SPEED')
|
||||
if not sSpeed then
|
||||
EGB.WriteOutLine( '(ERRORE MANCA SPEED IN ' .. vMach.sName .. ')')
|
||||
EGB.WriteErrLine( 'ERR=212\nErrore manca SPEED in ' .. vMach.sName)
|
||||
GGD.ERR = 212
|
||||
return
|
||||
end
|
||||
EGB.WriteOutLine( sSpeed)
|
||||
-- se utensile cambiato, posizionamento dopo cambio utensile
|
||||
if bTdiff then
|
||||
EGB.WriteOutLine( 'G0 G53 Z0')
|
||||
EGB.WriteOutLine( 'G0 G53 X0')
|
||||
EGB.WriteOutLine( 'G0 G53 Y-1000')
|
||||
end
|
||||
-- calcolo angoli
|
||||
local dNearR1, dNearR2 = 0, 0
|
||||
if vMach.Ang then
|
||||
dNearR1 = vMach.Ang.dR1
|
||||
dNearR2 = vMach.Ang.dR2
|
||||
end
|
||||
local bRaOk, dR1, dR2 = EGB.GetAngMach( frMach:getVersZ(), dNearR1, dNearR2)
|
||||
if not bRaOk then
|
||||
EGB.WriteOutLine( '( ERRORE CALC ROTAX DI ' .. vMach.sName .. ')')
|
||||
EGB.WriteErrLine( 'ERR=205\nErrore nel calcolo assi rotanti di ' .. vMach.sName)
|
||||
GGD.ERR = 205
|
||||
return
|
||||
else
|
||||
vMach.Ang.dR1N = dR1
|
||||
vMach.Ang.dR2N = dR2
|
||||
dPrevR1 = dR1
|
||||
dPrevR2 = dR2
|
||||
EGB.WriteOutLine( 'G55')
|
||||
-- la posizione rimane inalterata
|
||||
local dX = frMach:getOrigin():getX()
|
||||
local dY = frMach:getOrigin():getY()
|
||||
local dZ = frMach:getOrigin():getZ()
|
||||
-- calcolo degli angoli di rotazione attorno agli assi fissi
|
||||
local dA, dB, dC = GetFixedAxesRotABCFromFrame( frMach)
|
||||
if not dA then
|
||||
EGB.WriteOutLine( '; ERRORE CALC ANG DI ' .. vMach.sName)
|
||||
EGB.WriteErrLine( 'ERR=207\nErrore nel calcolo ANG di ' .. vMach.sName)
|
||||
GGD.Err = 207
|
||||
return
|
||||
end
|
||||
-- emissione
|
||||
EGB.WriteOutLine( '(ANGOLI ATTESI: A' .. EgtNumToString( dR2, 3) ..
|
||||
' C' .. EgtNumToString( dR1, 3) ..')')
|
||||
EGB.WriteOutLine( 'G68.2 P1 Q123 X' .. EgtNumToString( dX, 3) ..
|
||||
' Y' .. EgtNumToString( dY, 3) ..
|
||||
' Z' .. EgtNumToString( dZ, 3) ..
|
||||
' I' .. EgtNumToString( dA, 3) ..
|
||||
' J' .. EgtNumToString( dB, 3) ..
|
||||
' K' .. EgtNumToString( dC, 3))
|
||||
EGB.WriteOutLine( 'G53.1')
|
||||
EGB.WriteOutLine( 'M98P' .. vMach.sName)
|
||||
EGB.WriteOutLine( 'G69')
|
||||
EGB.WriteOutLine( 'G49')
|
||||
end
|
||||
-- salvo utensile corrente come prossimo precedente
|
||||
sTcPosPrev = sTcPos
|
||||
end
|
||||
-- emissione terminazione
|
||||
EGB.WriteOutLine( '')
|
||||
EGB.WriteOutLine( 'N9999 (FINE)')
|
||||
EGB.WriteOutLine( 'G0 G53 Z0')
|
||||
EGB.WriteOutLine( 'G0 G53 Y-1000')
|
||||
EGB.WriteOutLine( 'G0 G53 X0')
|
||||
EGB.WriteOutLine( 'G0 G53 Y0')
|
||||
EGB.WriteOutLine( 'G0 G53 A0 C0')
|
||||
EGB.WriteOutLine( 'M9')
|
||||
EGB.WriteOutLine( 'M5')
|
||||
EGB.WriteOutLine( 'T0 M6')
|
||||
if #m_vMachs > 0 then
|
||||
local sTcPosFirst = EgtGetInfo( m_vMachs[1].nLay, 'TPOS')
|
||||
EGB.WriteOutLine( sTcPosFirst)
|
||||
end
|
||||
EGB.WriteOutLine( 'G64')
|
||||
-- emissioni finali opzionali
|
||||
-- emissione terminazione
|
||||
local sEndDef = ''
|
||||
if m_vRaw.dLen < LEN_MIN_RIFLE then
|
||||
WriteOutLineFromIni( 'Gunstock', 'End', sEndDef, sMachIni)
|
||||
else
|
||||
EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' ; ***')
|
||||
WriteOutLineFromIni( 'Gunstock', 'End_R', sEndDef, sMachIni)
|
||||
end
|
||||
-- emissione info utensile
|
||||
local sToolInfo = ''
|
||||
local sTcPos = EgtGetInfo( vMach.nLay, 'TCPOS')
|
||||
if sTcPos == 'T00' then
|
||||
sToolInfo = sToolInfo .. 'T=PRECEDENTE'
|
||||
elseif sTcPos then
|
||||
sToolInfo = sToolInfo .. sTcPos:upper()
|
||||
-- terminazione file
|
||||
EGB.WriteOutLine( 'M30')
|
||||
|
||||
-- altrimenti macchine CMS
|
||||
else
|
||||
-- emissione intestazione
|
||||
EGB.WriteOutLine( '(DIS,"CODICE=PRG1")')
|
||||
EGB.WriteOutLine( '; ' .. EgtGetCurrMachineName():upper())
|
||||
EGB.WriteOutLine( '; ' .. sPezName:upper() .. sPezExt:upper() .. '-' .. sModName:upper() .. sModExt:upper())
|
||||
EGB.WriteOutLine( '; ' .. GGD.DESCR:upper())
|
||||
EGB.WriteOutLine( '; ' .. m_sAttr:upper())
|
||||
local sStart1Def = 'M70<br/>"CICLI"'
|
||||
if m_vRaw.dLen < LEN_MIN_RIFLE then
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start1', sStart1Def, sMachIni)
|
||||
else
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start1_R', sStart1Def, sMachIni)
|
||||
end
|
||||
local sTcomp = EgtGetInfo( vMach.nLay, 'TCOMP')
|
||||
if sTcomp then sToolInfo = sToolInfo .. ' H' .. sTcomp:upper() end
|
||||
local sTname = EgtGetInfo( vMach.nLay, 'TNAME')
|
||||
if sTname then sToolInfo = sToolInfo .. ' ' .. sTname:upper() end
|
||||
EGB.WriteOutLine( '; ' .. sToolInfo)
|
||||
-- calcolo angoli
|
||||
local dNearR1, dNearR2 = 0, 0
|
||||
if vMach.Ang then
|
||||
dNearR1 = vMach.Ang.dR1
|
||||
dNearR2 = vMach.Ang.dR2
|
||||
for i = 1, #m_vParams do
|
||||
EGB.WriteOutLine( m_vParams[i].sVar .. '=' .. EgtNumToString( m_vParams[i].dVal, 3))
|
||||
end
|
||||
local bRaOk, dR1, dR2 = EGB.GetAngMach( frMach:getVersZ(), dNearR1, dNearR2)
|
||||
if not bRaOk then
|
||||
EGB.WriteOutLine( '; ERRORE CALC ROTAX DI ' .. vMach.sName:upper())
|
||||
EGB.WriteErrLine( 'ERR=205\nErrore nel calcolo assi rotanti di ' .. vMach.sName)
|
||||
GGD.ERR = 205
|
||||
if ( bTwoHeads and #m_vMachs > 0) then
|
||||
local sTcPos = EgtGetInfo( m_vMachs[1].nLay, 'TCPOS')
|
||||
if not sTcPos then
|
||||
EGB.WriteErrLine( 'ERR=208\nErrore non trovata posizione utensile in CU')
|
||||
GGD.ERR = 208
|
||||
return
|
||||
end
|
||||
local nTcPos = tonumber( sTcPos:sub( 2))
|
||||
EGB.WriteOutLine( EgtIf( nTcPos <= 18, 'M41M52', 'M42M51'))
|
||||
EGB.WriteOutLine( sTcPos .. ' M6')
|
||||
end
|
||||
local sStart2Def = 'G79G0Z0<br/>G79X-1500Y-1600C0B0'
|
||||
if m_vRaw.dLen < LEN_MIN_RIFLE then
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start2', sStart2Def, sMachIni)
|
||||
else
|
||||
WriteOutLineFromIni( 'Gunstock', 'Start2_R', sStart2Def, sMachIni)
|
||||
end
|
||||
EGB.WriteOutLine( '(UAO,0)')
|
||||
EGB.WriteOutLine( EgtIf( bTwoHeads, '(UOT,0,X0,U0,Y0,Z0,W0)', '(UOT,0,X0,Y0,Z0)'))
|
||||
-- emissione dei posizionamenti e dei richiami delle lavorazioni
|
||||
if not EgtSetCalcTool( 'Calc', 'H1', 1) then
|
||||
EGB.WriteErrLine( 'ERR=204\nErrore nell\'impostazione dell\'utensile di calcolo')
|
||||
GGD.ERR = 204
|
||||
return
|
||||
else
|
||||
vMach.Ang.dR1N = dR1
|
||||
vMach.Ang.dR2N = dR2
|
||||
if vMach.PrepRot and
|
||||
( abs( dR1 - dPrevR1) > GEO.EPS_ANG_SMALL or abs( dR2 - dPrevR2) > GEO.EPS_ANG_SMALL) then
|
||||
local sOut = 'G90G0'..'B'..EgtNumToString( dR1 - vMach.PrepRot.dR1, 3)..
|
||||
'C'..EgtNumToString( dR2 - vMach.PrepRot.dR2, 3)
|
||||
EGB.WriteOutLine( sOut)
|
||||
sOut = 'G90G1'..'B'..EgtNumToString( dR1, 3)..'C'..EgtNumToString( dR2, 3)..
|
||||
'F'..EgtNumToString( vMach.PrepRot.dFeed, 0)
|
||||
EGB.WriteOutLine( sOut)
|
||||
else
|
||||
local sOut = 'G90G0'..'B'..EgtNumToString( dR1, 3)..'C'..EgtNumToString( dR2, 3)
|
||||
EGB.WriteOutLine( sOut)
|
||||
end
|
||||
dPrevR1 = dR1
|
||||
dPrevR2 = dR2
|
||||
if bTwoHeads then EGB.WriteOutLine( 'G400') end
|
||||
EGB.WriteOutLine( '(UAO,0)')
|
||||
-- calcolo posizione
|
||||
local bLa1Ok, _, dX1, dY1, dZ1 = EgtGetCalcPositions( frMach:getOrigin(), dR1, dR2)
|
||||
if not bLa1Ok then
|
||||
EGB.WriteOutLine( '; ERRORE CALC UOT DI ' .. vMach.sName:upper())
|
||||
EGB.WriteErrLine( 'ERR=206\nErrore nel calcolo UOT di ' .. vMach.sName)
|
||||
GGD.Err = 206
|
||||
return
|
||||
end
|
||||
local dX = dX1
|
||||
local dY = dY1
|
||||
local dZ = dZ1 - dCalcLen
|
||||
if bTwoHeads then
|
||||
EGB.WriteOutLine( '(UOT,0,X' .. EgtNumToString( dX, 3) .. ',U' .. EgtNumToString( dX, 3) ..
|
||||
',Y' .. EgtNumToString( dY, 3) ..
|
||||
',Z' .. EgtNumToString( dZ, 3) .. ',W' .. EgtNumToString( dZ, 3) .. ')')
|
||||
else
|
||||
EGB.WriteOutLine( '(UOT,0,X' .. EgtNumToString( dX, 3) ..
|
||||
',Y' .. EgtNumToString( dY, 3) ..
|
||||
',Z' .. EgtNumToString( dZ, 3) .. ')')
|
||||
end
|
||||
-- calcolo rotazione
|
||||
local bLa2Ok, _, dX2, dY2, dZ2 = EgtGetCalcPositions( frMach:getOrigin() + 100*frMach:getVersX(), dR1, dR2)
|
||||
if not bLa2Ok then
|
||||
EGB.WriteOutLine( '; ERRORE CALC URT DI ' .. vMach.sName:upper())
|
||||
EGB.WriteErrLine( 'ERR=207\nErrore nel calcolo URT di ' .. vMach.sName)
|
||||
GGD.Err = 207
|
||||
return
|
||||
end
|
||||
local dAng = atan2( dY2 - dY1, dX2 - dX1)
|
||||
if abs( dZ2 - dZ1) > GEO.EPS_SMALL then
|
||||
EgtOutLog( 'Differenza sensibile in Z per URT :'..EgtNumToString( dZ1, 6)..'/'..EgtNumToString( dZ2, 6))
|
||||
end
|
||||
EGB.WriteOutLine( '(URT,' .. EgtNumToString( dAng, 3) .. ')')
|
||||
EGB.WriteOutLine( '(CLS,SUB' .. vMach.sName .. ')')
|
||||
EGB.WriteOutLine( '(UAO,0)')
|
||||
EGB.WriteOutLine( '(URT,0)')
|
||||
end
|
||||
local dCalcLen = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
||||
local nNum = 0
|
||||
local dPrevR1, dPrevR2 = 9999, 9999
|
||||
for i = 1, #m_vMachs do
|
||||
-- lavorazione i-esima
|
||||
local vMach = m_vMachs[i]
|
||||
local frMach = EgtFR( vMach.nLay, GDB_ID.ROOT)
|
||||
-- emissione info di lavorazione
|
||||
nNum = nNum + 10
|
||||
if vMach.sInfo then
|
||||
EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' ; ' .. vMach.sInfo:upper())
|
||||
else
|
||||
EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' ; ***')
|
||||
end
|
||||
-- emissione info utensile
|
||||
local sToolInfo = ''
|
||||
local sTcPos = EgtGetInfo( vMach.nLay, 'TCPOS')
|
||||
if sTcPos == 'T00' then
|
||||
sToolInfo = sToolInfo .. 'T=PRECEDENTE'
|
||||
elseif sTcPos then
|
||||
sToolInfo = sToolInfo .. sTcPos:upper()
|
||||
end
|
||||
local sTcomp = EgtGetInfo( vMach.nLay, 'TCOMP')
|
||||
if sTcomp then sToolInfo = sToolInfo .. ' H' .. sTcomp:upper() end
|
||||
local sTname = EgtGetInfo( vMach.nLay, 'TNAME')
|
||||
if sTname then sToolInfo = sToolInfo .. ' ' .. sTname:upper() end
|
||||
EGB.WriteOutLine( '; ' .. sToolInfo)
|
||||
-- calcolo angoli
|
||||
local dNearR1, dNearR2 = 0, 0
|
||||
if vMach.Ang then
|
||||
dNearR1 = vMach.Ang.dR1
|
||||
dNearR2 = vMach.Ang.dR2
|
||||
end
|
||||
local bRaOk, dR1, dR2 = EGB.GetAngMach( frMach:getVersZ(), dNearR1, dNearR2)
|
||||
if not bRaOk then
|
||||
EGB.WriteOutLine( '; ERRORE CALC ROTAX DI ' .. vMach.sName:upper())
|
||||
EGB.WriteErrLine( 'ERR=205\nErrore nel calcolo assi rotanti di ' .. vMach.sName)
|
||||
GGD.ERR = 205
|
||||
return
|
||||
else
|
||||
vMach.Ang.dR1N = dR1
|
||||
vMach.Ang.dR2N = dR2
|
||||
if vMach.PrepRot and
|
||||
( abs( dR1 - dPrevR1) > GEO.EPS_ANG_SMALL or abs( dR2 - dPrevR2) > GEO.EPS_ANG_SMALL) then
|
||||
local sOut = 'G90G0'..'B'..EgtNumToString( dR1 - vMach.PrepRot.dR1, 3)..
|
||||
'C'..EgtNumToString( dR2 - vMach.PrepRot.dR2, 3)
|
||||
EGB.WriteOutLine( sOut)
|
||||
sOut = 'G90G1'..'B'..EgtNumToString( dR1, 3)..'C'..EgtNumToString( dR2, 3)..
|
||||
'F'..EgtNumToString( vMach.PrepRot.dFeed, 0)
|
||||
EGB.WriteOutLine( sOut)
|
||||
else
|
||||
local sOut = 'G90G0'..'B'..EgtNumToString( dR1, 3)..'C'..EgtNumToString( dR2, 3)
|
||||
EGB.WriteOutLine( sOut)
|
||||
end
|
||||
dPrevR1 = dR1
|
||||
dPrevR2 = dR2
|
||||
if bTwoHeads then EGB.WriteOutLine( 'G400') end
|
||||
EGB.WriteOutLine( '(UAO,0)')
|
||||
-- calcolo posizione
|
||||
local bLa1Ok, _, dX1, dY1, dZ1 = EgtGetCalcPositions( frMach:getOrigin(), dR1, dR2)
|
||||
if not bLa1Ok then
|
||||
EGB.WriteOutLine( '; ERRORE CALC UOT DI ' .. vMach.sName:upper())
|
||||
EGB.WriteErrLine( 'ERR=206\nErrore nel calcolo UOT di ' .. vMach.sName)
|
||||
GGD.Err = 206
|
||||
return
|
||||
end
|
||||
local dX = dX1
|
||||
local dY = dY1
|
||||
local dZ = dZ1 - dCalcLen
|
||||
if bTwoHeads then
|
||||
EGB.WriteOutLine( '(UOT,0,X' .. EgtNumToString( dX, 3) .. ',U' .. EgtNumToString( dX, 3) ..
|
||||
',Y' .. EgtNumToString( dY, 3) ..
|
||||
',Z' .. EgtNumToString( dZ, 3) .. ',W' .. EgtNumToString( dZ, 3) .. ')')
|
||||
else
|
||||
EGB.WriteOutLine( '(UOT,0,X' .. EgtNumToString( dX, 3) ..
|
||||
',Y' .. EgtNumToString( dY, 3) ..
|
||||
',Z' .. EgtNumToString( dZ, 3) .. ')')
|
||||
end
|
||||
-- calcolo rotazione
|
||||
local bLa2Ok, _, dX2, dY2, dZ2 = EgtGetCalcPositions( frMach:getOrigin() + 100*frMach:getVersX(), dR1, dR2)
|
||||
if not bLa2Ok then
|
||||
EGB.WriteOutLine( '; ERRORE CALC URT DI ' .. vMach.sName:upper())
|
||||
EGB.WriteErrLine( 'ERR=207\nErrore nel calcolo URT di ' .. vMach.sName)
|
||||
GGD.Err = 207
|
||||
return
|
||||
end
|
||||
local dAng = atan2( dY2 - dY1, dX2 - dX1)
|
||||
if abs( dZ2 - dZ1) > GEO.EPS_SMALL then
|
||||
EgtOutLog( 'Differenza sensibile in Z per URT :'..EgtNumToString( dZ1, 6)..'/'..EgtNumToString( dZ2, 6))
|
||||
end
|
||||
EGB.WriteOutLine( '(URT,' .. EgtNumToString( dAng, 3) .. ')')
|
||||
EGB.WriteOutLine( '(CLS,SUB' .. vMach.sName .. ')')
|
||||
EGB.WriteOutLine( '(UAO,0)')
|
||||
EGB.WriteOutLine( '(URT,0)')
|
||||
end
|
||||
end
|
||||
-- emissione terminazione
|
||||
local sEndDef = 'G79G0Z0<br/>G79X-500Y-600C0B0<br/>M63<br/>M70<br/>(GTO,CICLI,@SINGOLO=0)'
|
||||
if m_vRaw.dLen < LEN_MIN_RIFLE then
|
||||
WriteOutLineFromIni( 'Gunstock', 'End', sEndDef, sMachIni)
|
||||
else
|
||||
WriteOutLineFromIni( 'Gunstock', 'End_R', sEndDef, sMachIni)
|
||||
end
|
||||
EGB.WriteOutLine( 'M30')
|
||||
end
|
||||
-- emissione terminazione
|
||||
local sEndDef = 'G79G0Z0<br/>G79X-500Y-600C0B0<br/>M63<br/>M70<br/>(GTO,CICLI,@SINGOLO=0)'
|
||||
if m_vRaw.dLen < LEN_MIN_RIFLE then
|
||||
WriteOutLineFromIni( 'Gunstock', 'End', sEndDef, sMachIni)
|
||||
else
|
||||
WriteOutLineFromIni( 'Gunstock', 'End_R', sEndDef, sMachIni)
|
||||
end
|
||||
EGB.WriteOutLine( 'M30')
|
||||
-- chiusura file CNC
|
||||
EGB.CloseOutFile()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user