diff --git a/LuaLibs/EgtGunstockBase.lua b/LuaLibs/EgtGunstockBase.lua
index f2d97fe..d0c1ae9 100644
--- a/LuaLibs/EgtGunstockBase.lua
+++ b/LuaLibs/EgtGunstockBase.lua
@@ -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
diff --git a/Main.lua b/Main.lua
index 43b009c..40a5e9d 100644
--- a/Main.lua
+++ b/Main.lua
@@ -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
"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
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
"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
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
G79X-500Y-600C0B0
M63
M70
(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
G79X-500Y-600C0B0
M63
M70
(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()