diff --git a/LuaLibs/PreSimulationLib.lua b/LuaLibs/PreSimulationLib.lua index 3fbf89b..db1f448 100644 --- a/LuaLibs/PreSimulationLib.lua +++ b/LuaLibs/PreSimulationLib.lua @@ -34,12 +34,12 @@ local function GetMachineAxes() end ------------------------------------------------------------------------------------------------------------- -local function LogOutstroke( ptOnToolTipCenter, vtHead, OptionalParameters) +local function LogOutstroke( sToolName, ptOnToolTipCenter, vtHead, OptionalParameters) -- parametri opzionali OptionalParameters = OptionalParameters or {} - local LinearAxes = OptionalParameters.LinearAxes - local RotativeAxes = OptionalParameters.RotativeAxes + local LinearAxesValues = OptionalParameters.LinearAxesValues + local RotativeAxesValues = OptionalParameters.RotativeAxesValues -- gruppo per geometrie temporanee local idTempGroup = BeamLib.GetTempGroup() @@ -50,15 +50,18 @@ local function LogOutstroke( ptOnToolTipCenter, vtHead, OptionalParameters) EgtSetColor( idPoint, RED()) EgtSetColor( idVector, RED()) + -- nome utensile + EgtOutLog( 'Tool ' .. sToolName) + -- si loggano valori di punto e vettore EgtOutLog( ' Presimulation : OutStroke, Tip Point = ' .. tostring( ptOnToolTipCenter) .. ', id = ' .. idPoint .. ', vtHead = ' .. tostring( vtHead) .. ', id = ' .. idVector) -- se disponibili, si loggano anche i valori calcolati degli assi - if LinearAxes then - EgtOutLog( ' ' .. LinearAxes[1].sName .. ' = ' .. tostring( LinearAxes[1].dValue) .. ', ' .. LinearAxes[2].sName .. ' = ' .. tostring( LinearAxes[2].dValue) .. ', ' .. LinearAxes[3].sName .. ' = ' .. tostring( LinearAxes[3].dValue)) + if LinearAxesValues then + EgtOutLog( ' ' .. 'Lin1' .. ' = ' .. tostring( LinearAxesValues[1]) .. ', ' .. 'Lin2' .. ' = ' .. tostring( LinearAxesValues[2]) .. ', ' .. 'Lin3' .. ' = ' .. tostring( LinearAxesValues[3])) end - if RotativeAxes then - EgtOutLog( ' ' .. RotativeAxes[1].sName .. ' = ' .. tostring( RotativeAxes[1].dValue) .. ', ' .. RotativeAxes[2].sName .. ' = ' .. tostring( RotativeAxes[2].dValue)) + if RotativeAxesValues then + EgtOutLog( ' ' .. 'Rot1' .. ' = ' .. tostring( RotativeAxesValues[1]) .. ', ' .. 'Rot2' .. ' = ' .. tostring( RotativeAxesValues[2]) .. ', ' .. 'Rot3' .. ' = ' .. tostring( RotativeAxesValues[3])) end return @@ -153,30 +156,25 @@ end local function CheckOutOfStrokePoint( ptOnToolTipCenter, vtHead, nSCC, Tool, vtAux, sBlockedAxis) -- impostazione utensile - EgtSetCalcTool( Tool.sName, Tool.sHead, Tool.nExit) + local bOkTool = EgtSetCalcTool( Tool.sName, Tool.sHead, Tool.nExit) + if not bOkTool then + error( 'CheckOutOfStrokePoint : cannot set calc tool') + end -- settaggio SCC per discriminare soluzioni multiple EgtSetCalcSolCh( nSCC) - -- assi macchina da calcolare - local LinearAxes, RotativeAxes = GetMachineAxes() - -- se presente, settaggio asse bloccato if sBlockedAxis and type( sBlockedAxis) == "string" then local BlockedAxis = EgtSplitString( sBlockedAxis, '=') - EgtSetRotAxisBlock( BlockedAxis[1], BlockedAxis[2]) - end - - -- se più di 3 assi lineari e 2 assi rotativi, macchina non supportata - if #LinearAxes > 3 or #RotativeAxes > 2 then - - error(' CheckOutOfStrokePoint : too many axes') + EgtSetRotAxisBlock( BlockedAxis[1], tonumber( BlockedAxis[2])) end -- calcolo assi rotativi - local bOkAngles, nSolutionsAngles, dRot1, dRot2 = EgtGetCalcAngles( vtHead, vtAux) - RotativeAxes[1].dValue = dRot1 - RotativeAxes[2].dValue = dRot2 + local bOkAngles, nSolutionsAngles, RotativeAxesValues = EgtGetCalcAnglesEx( vtHead, vtAux) + local dRotative1 = RotativeAxesValues[1] + local dRotative2 = RotativeAxesValues[2] + local dRotative3 = RotativeAxesValues[3] if not bOkAngles then error( ' CheckOutOfStrokePoint : error') @@ -186,40 +184,27 @@ local function CheckOutOfStrokePoint( ptOnToolTipCenter, vtHead, nSCC, Tool, vtA if nSolutionsAngles == 0 then if EgtGetDebugLevel() >= 3 then - LogOutstroke( ptOnToolTipCenter, vtHead) + LogOutstroke( Tool.sName, ptOnToolTipCenter, vtHead, { RotativeAxesValues = { dRotative1, dRotative2, dRotative3}}) end return true end -- calcolo assi lineari - local bOkPositions, _, dLinear1, dLinear2, dLinear3 = EgtGetCalcPositions( ptOnToolTipCenter, RotativeAxes[1].dValue, RotativeAxes[2].dValue) - LinearAxes[1].dValue = dLinear1 - LinearAxes[2].dValue = dLinear2 - LinearAxes[3].dValue = dLinear3 + local bOkPositions, _, dLinear1, dLinear2, dLinear3 = EgtGetCalcPositions( ptOnToolTipCenter, dRotative1, dRotative2, dRotative3) if not bOkPositions then error( ' CheckOutOfStrokePoint : error') end - -- verifica finecorsa per tutti gli assi - -- siccome non si sa a priori il numero di assi lineari e rotativi, si aggiungono tutti a Args in ordine - -- Args viene poi esplosa in modo da passare a EgtVerifyOutstroke i valori separati - local Args = {} - for i = 1, #LinearAxes do - Args[#Args+1] = LinearAxes[i].dValue - end - for i = 1, #RotativeAxes do - Args[#Args+1] = RotativeAxes[i].dValue - end - - local bAllAxesInStroke = EgtVerifyOutstroke( table.unpack( Args)) + -- verifica finecorsa per assi lineari (assi rotativi già verificati) + local bAllAxesInStroke = EgtVerifyOutstroke( dLinear1, dLinear2, dLinear3) -- extracorsa if not bAllAxesInStroke then if EgtGetDebugLevel() >= 3 then - LogOutstroke( ptOnToolTipCenter, vtHead, { LinearAxes = LinearAxes, RotativeAxes = RotativeAxes}) + LogOutstroke( Tool.sName, ptOnToolTipCenter, vtHead, { LinearAxesValues = { dLinear1, dLinear2, dLinear3}, RotativeAxesValues = { dRotative1, dRotative2, dRotative3}}) end return true end