DataGunstock :

- messe a punto per macchina Mazak.
This commit is contained in:
Dario Sassi
2020-10-01 08:02:25 +00:00
parent c092a21905
commit 16f1479468
2 changed files with 328 additions and 138 deletions
+10
View File
@@ -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
+318 -138
View File
@@ -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()