Compare commits
65 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 54f5c7e488 | |||
| 62d5cefb35 | |||
| 913be3f3e7 | |||
| 898380b4ba | |||
| ec79024eb3 | |||
| f9fb148fd8 | |||
| 6780390b28 | |||
| 482e6fb281 | |||
| ef60e7916c | |||
| d89163d208 | |||
| 8cd916754f | |||
| 3188a7c976 | |||
| 3da0b82f13 | |||
| ff8d632c04 | |||
| 7a565f0618 | |||
| fa0be99e58 | |||
| aa61e122df | |||
| 8195fe4d3e | |||
| 414434ae28 | |||
| aa49d110ef | |||
| 89aaa5941f | |||
| 42b9cac647 | |||
| 07f37a21e6 | |||
| 761653699d | |||
| facb55621a | |||
| 16eb684d4e | |||
| 26596555ee | |||
| e574a01ff5 | |||
| f559be5e4a | |||
| 4c62569373 | |||
| f3c41b1b80 | |||
| 043478e7b9 | |||
| 8a707155e7 | |||
| ca80f2950b | |||
| fd9439452d | |||
| 41df1c1e24 | |||
| 719864ee49 | |||
| 183c3e2e06 | |||
| e07e222ec3 | |||
| 163729319a | |||
| f49747ac94 | |||
| 949d44011f | |||
| 442d37e8e2 | |||
| 5e51c37da0 | |||
| 5f8e1d47f1 | |||
| 225aef964e | |||
| 8a82349ea7 | |||
| 2451607d90 | |||
| e93405a828 | |||
| 27ec467b40 | |||
| 6d4b1b0254 | |||
| d2b8530c30 | |||
| cce36780c2 | |||
| ff7a1ed430 | |||
| 2458fcba22 | |||
| 00b46b98d6 | |||
| 4f38f2805e | |||
| 653eb2dadb | |||
| 3044f43826 | |||
| 11e76bd5a7 | |||
| adee9b835c | |||
| ef9a446830 | |||
| fabcacaea0 | |||
| 2600eb720a | |||
| 4665f4cfa6 |
Vendored
+86
-1
@@ -96,6 +96,91 @@
|
||||
"EgtGetOperationPhase",
|
||||
"EgtSetOperationMode",
|
||||
"EgtSetCalcTool",
|
||||
"EmtModifyAxisStroke"
|
||||
"EmtModifyAxisStroke",
|
||||
"EgtGetValInNotes",
|
||||
"EgtGetInfo",
|
||||
"EgtIf",
|
||||
"EgtGetCalcAuxDirFromAngles",
|
||||
"abs",
|
||||
"sqrt",
|
||||
"EgtJoinTables",
|
||||
"min",
|
||||
"BBox3d",
|
||||
"max",
|
||||
"EgtGetRawPartBBox",
|
||||
"sin",
|
||||
"AreSameVectorApprox",
|
||||
"Point3d",
|
||||
"Vector3d",
|
||||
"AddToolToCollisionObj",
|
||||
"AddToolHolderToCollisionObj",
|
||||
"SetToolForVmill",
|
||||
"EmtGetVMillStep",
|
||||
"EgtGetBBoxGlob",
|
||||
"Frame3d",
|
||||
"AddToCollisionCheck",
|
||||
"DumpCollisionCheck",
|
||||
"EgtEnableDebug",
|
||||
"EmtOutput",
|
||||
"EmtLenToString",
|
||||
"EmtResetPrev",
|
||||
"EmtAdjustRotaryAxes",
|
||||
"EmtUpdatePrev",
|
||||
"EmtResetPrevLinear",
|
||||
"EmtGetAxis",
|
||||
"EmtAdjustCenterAxes",
|
||||
"EmtGetFeed",
|
||||
"EmtAdjustLinearAxes",
|
||||
"SphericalFromVector",
|
||||
"EmtGetAngO2",
|
||||
"EgtClamp",
|
||||
"AreSameOrOppositeVectorApprox",
|
||||
"EgtGetAxisDir",
|
||||
"EgtVolZmapGetPartBBoxGlob",
|
||||
"SimulMoveAxis",
|
||||
"EgtGetGlobFrame",
|
||||
"EgtSplitPath",
|
||||
"EgtPlaneVolZmapInters",
|
||||
"EgtTableAdd",
|
||||
"EgtTableFill",
|
||||
"EgtSurfFlatRegion",
|
||||
"EgtSurfFrIntersect",
|
||||
"EgtSurfArea",
|
||||
"ceil",
|
||||
"pow",
|
||||
"EgtGetEnableUI",
|
||||
"EmtSetSimulPause",
|
||||
"EgtResetAxisPos",
|
||||
"EmtTleStart",
|
||||
"EmtLenToMF",
|
||||
"EmtSecToHMS",
|
||||
"EmtTleAddTotal",
|
||||
"EmtTleAddTool",
|
||||
"EmtTleEnd",
|
||||
"EmtTleAddMachining",
|
||||
"GDB_ID",
|
||||
"GDB_ST",
|
||||
"MCH_TP",
|
||||
"GEO",
|
||||
"X_AX",
|
||||
"Y_AX",
|
||||
"Z_AX",
|
||||
"MCH_TY",
|
||||
"MCH_SCC",
|
||||
"MCH_AT",
|
||||
"MCH_TT",
|
||||
"GDB_RT",
|
||||
"MCH_MP",
|
||||
"GDB_FR",
|
||||
"GDB_LV",
|
||||
"GDB_BB",
|
||||
"EgtGetColor",
|
||||
"SimulMoveAxes",
|
||||
"MCH_SIM_STEP",
|
||||
"MCH_OY",
|
||||
"GDB_MD",
|
||||
"MCH_MY",
|
||||
"Color3d",
|
||||
"tan"
|
||||
]
|
||||
}
|
||||
+1350
-555
File diff suppressed because it is too large
Load Diff
+3
-2
@@ -59,11 +59,12 @@ local BeamData = {
|
||||
MAXDIAM_POCK_CORNER = 30, -- diametro massimo utensile ammesso per tasche con angoli interni
|
||||
ADVANCE_TAIL_CUT = true, -- per spostare prima del taglio di separazione il taglio di coda su pezzi corti con probabile caduta
|
||||
ADVANCE_TAIL_OFFS = 5, -- accorciamento taglio di coda avanzato (minimo 1)
|
||||
STRATEGIES_CONFIG_FILE = 'Std2.json'
|
||||
STRATEGIES_CONFIG_FILE = 'Std2.json',
|
||||
FASTCLAMPING = false
|
||||
}
|
||||
|
||||
-- Aggiornamento con dati da B&W
|
||||
local sData = EgtGetSourceDir().."EbwData.lua"
|
||||
local sData = EgtGetCurrMachineDir().."\\Beam\\EbwData.lua"
|
||||
if EgtExistsFile( sData) then
|
||||
local Machine = dofile( sData)
|
||||
if Machine then
|
||||
|
||||
+10
-7
@@ -22,9 +22,7 @@ local BeamData = {
|
||||
OVM_MID = 5.4, -- sovramateriale intermedio (spessore lama)
|
||||
MINRAW_S = 750, -- minimo grezzo in coda scaricabile per sezioni piccole
|
||||
MINRAW_L = 1070, -- minimo grezzo in coda scaricabile per sezioni grandi
|
||||
MAX_DIM_HTCUT = 130, -- SOLO DICE larghezza massima taglio di testa o coda
|
||||
MIN_DIM_HBEAM = 621, -- SOLO DICE altezza minima di trave alta
|
||||
MAX_DIM_DICE = 110, -- dimensione trasversale massima cubetto
|
||||
SAFE_DIM_DICE = 110, -- dimensione trasversale ridotta cubetto, valida in tutte le posizioni
|
||||
MAX_LEN_DICE = 400, -- SOLO DICE lunghezza massima cubetto
|
||||
COLL_SIC = 5, -- distanza di sicurezza per collisioni
|
||||
CUT_SIC = 20, -- distanza di sicurezza per tagli
|
||||
@@ -40,6 +38,7 @@ local BeamData = {
|
||||
VICE_MINH = 110, -- altezza minima della morsa
|
||||
VICE_MAXH = 370, -- altezza massima zona pinzaggio orizzontale
|
||||
USER_HOLE_DIAM = 0, -- diametro foro per L20
|
||||
FASTCLAMPING = false
|
||||
}
|
||||
|
||||
-- costanti riportate da mlde non necessarie per automatismo (sostituire con GetParameters o simile)
|
||||
@@ -55,7 +54,7 @@ MldeParameters.DeltaTabZ = 0
|
||||
|
||||
-- Aggiornamento con dati macchina personalizzati
|
||||
-- TODO sostituire con GetParameters o simile
|
||||
local sData = EgtGetSourceDir().."EbwData.lua"
|
||||
local sData = EgtGetCurrMachineDir().."\\Beam\\EbwData.lua"
|
||||
if EgtExistsFile( sData) then
|
||||
local Machine = dofile( sData)
|
||||
if Machine then
|
||||
@@ -94,9 +93,9 @@ local function GetBlockedAxis( sHead, nToolType, sBlockedAxis)
|
||||
elseif nToolType == MCH_TY.MORTISE_STD then
|
||||
if sHead == 'H3' then
|
||||
if sBlockedAxis == 'parallel' then
|
||||
return 'A=0'
|
||||
return 'CS=-90'
|
||||
elseif sBlockedAxis == 'perpendicular' then
|
||||
return 'A=90'
|
||||
return 'CS=0'
|
||||
end
|
||||
else
|
||||
return ''
|
||||
@@ -271,7 +270,7 @@ local function GetSetupInfo( sHead)
|
||||
SetupInfo.dCAxisSideEncumbrance = 200
|
||||
SetupInfo.bToolOnAggregate = false
|
||||
SetupInfo.vtRotationAxisC = EgtGetAxisDir( 'C')
|
||||
SetupInfo.vtRotationAxisAB = EgtGetAxisDir( 'B')
|
||||
SetupInfo.vtRotationAxisAB = EgtGetAxisDir( 'A')
|
||||
|
||||
-- TODO da rimuovere quando si fara PreSimulation di asse Z per frese
|
||||
SetupInfo.dPivot = MldeParameters.MillOffs
|
||||
@@ -283,6 +282,10 @@ local function GetSetupInfo( sHead)
|
||||
SetupInfo.GetMinNz = GetMinNzTopHead
|
||||
SetupInfo.GetPreCollisionData = GetPreCollisionData
|
||||
SetupInfo.GetSCC = GetSCC
|
||||
-- sega a catena
|
||||
elseif sHead == 'H3' then
|
||||
SetupInfo.HeadType = { bTop = true, bBottom = false}
|
||||
SetupInfo.PreferredSide = {}
|
||||
-- rinvio angolare 90° (considerato come fosse una testa da sotto)
|
||||
elseif sHead == 'H5' then
|
||||
SetupInfo.bToolOnAggregate = true
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ local Offsets = {
|
||||
|
||||
local Trave = {
|
||||
YMIN=30,
|
||||
YMAX=251,
|
||||
YMAX=291,
|
||||
ZMIN=30,
|
||||
ZMAX=621
|
||||
}
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
|
||||
REM Compilazione degli script macchina Egaltech 2024.02.22
|
||||
REM Per togliere info di debug aggiungere flag -s prima del nome del file di input
|
||||
|
||||
REM Compilazione 32 bit e copia file da non compilare
|
||||
|
||||
@echo off
|
||||
|
||||
REM chiedo all'utente la versione da assegnare alla macchina da compilare
|
||||
set /p "machineVersion=Inserisci versione: "
|
||||
|
||||
REM variabili per costruire i percorsi delle cartelle
|
||||
set "machineName=Saomad-KAIROS-MK2"
|
||||
set "deployFolder=C:\MachinesDeploy"
|
||||
set "machinePath=%deployFolder%\%machineName%\"
|
||||
set "fullPathSource=%deployFolder%\%machineName%\%machineVersion%\%machineName%"
|
||||
set "fullPathZip=%deployFolder%\%machineName%\%machineVersion%"
|
||||
|
||||
REM elimino eventuale cartella esistente
|
||||
rmdir /s /Q %fullPathZip%
|
||||
|
||||
REM copio i sorgenti nel percorso di destinazione
|
||||
ROBOCOPY . %fullPathSource%\ /E /XF "Compile.bat" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt"
|
||||
REM copio i sorgenti nel percorso temporaneo per i compilati
|
||||
ROBOCOPY . %fullPathSource%\bin\%machineName%\ /E /XF "Compile.bat" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt"
|
||||
|
||||
REM copio i file compilati nel percorso temporaneo per i compilati
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Saomad-KAIROS-MK2.mlpe -s Saomad-KAIROS-MK2.mlpe
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Saomad-KAIROS-MK2.mlse -s Saomad-KAIROS-MK2.mlse
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Saomad-KAIROS-MK2.SIEMENS.mlpe -s Saomad-KAIROS-MK2.SIEMENS.mlpe
|
||||
|
||||
REM comprimo i file compilati in uno zip pronto per essere distribuito
|
||||
tar.exe acvf %fullPathZip%\%machineName%.zip -C %fullPathSource%\bin\ %machineName%\*.*
|
||||
|
||||
REM elimino il percorso temporaneo
|
||||
rmdir /s /Q %fullPathSource%\bin\
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,8 +3,8 @@
|
||||
Material=Beam
|
||||
NCType=5 ; 1=Tpa, 2=Num Flexium, 3=Num Axium APServer, 4=Num Axium PCToolkit, 5=Siemens_Sharp7
|
||||
Flow=2
|
||||
IsoFileDir=\\192.168.214.253\iso
|
||||
Ip=192.168.214.1
|
||||
IsoFileDir=\\192.168.0.253\iso
|
||||
Ip=192.168.0.1
|
||||
Rack=0
|
||||
Slot=1
|
||||
Debug=2
|
||||
@@ -47,6 +47,15 @@ Debug=2
|
||||
29=PLC_Messages5,302:26.0:2,c,plc
|
||||
30=PLC_Messages6,302:28.0:2,c,plc
|
||||
31=W_Carico,301:8.0:2,c,plc
|
||||
32=NextPartL,301:10.0:2,c,plc
|
||||
33=NextPartW,301:12.0:2,c,plc
|
||||
34=NextPartH,301:14.0:2,c,plc
|
||||
35=NextPartPressX1,301:16.0:4,c,plc
|
||||
36=NextPartFeed,301:20.0:4,c,plc
|
||||
37=NextPartAcc,301:24.0:4,c,plc
|
||||
38=NextPartRef1,301:28.0:4,c,plc
|
||||
39=NextPartRef2,301:32.0:4,c,plc
|
||||
40=Stop_Working,301:1.7:1,c,plc
|
||||
|
||||
[Languages]
|
||||
Enable=0
|
||||
@@ -110,7 +119,7 @@ Default=Standard
|
||||
|
||||
[Estimations]
|
||||
Enable=1
|
||||
WinPlace=0,698,85,669,863
|
||||
WinPlace=0,-1270,21,669,863
|
||||
|
||||
[VMill]
|
||||
Enable=1
|
||||
@@ -9,8 +9,8 @@
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
PP_VER = '2.7l3'
|
||||
MIN_MACH_VER = '2.7l2'
|
||||
PP_VER = '3.1d1_DEV7'
|
||||
MIN_MACH_VER = '3.1c1'
|
||||
|
||||
EgtOutLog ( '** Saomad-KAIROS '..PP_VER..' (MinMach '.. MIN_MACH_VER ..') **', 1)
|
||||
|
||||
@@ -63,9 +63,24 @@ AutoRotMinLen = 2600
|
||||
MaxUnloadLen = 0
|
||||
DefTcPos = 'T101'
|
||||
CoeffVM = 0.5
|
||||
DistZClampToTable = 5 -- distanza tra la tavola e il punto più basso della morsa
|
||||
ClampingCoeffMin = nil -- coefficiente di fissaggio, se 0 o nil non fa controllo, per il momento da inizializzare da Ts3Data
|
||||
ClampSmallH = 98.5 -- dimensioni area di pinzaggio
|
||||
ClampH = 440.9
|
||||
ClampL = 1491
|
||||
ClampSmallL = 994.4 -- dimensioni area di pinzaggio
|
||||
ClampFrontAngle = 35 -- angolo pinza frontale
|
||||
MinJoinVV = 75
|
||||
MinJoinSS = 100
|
||||
MinJoinLS = 290
|
||||
MinJoinSL = 100
|
||||
MinJoinLL = 400
|
||||
-- variabili per pinzaggio
|
||||
CLAMP_MAXDIST_2CLAMP = 3000 -- massima distanza tra ingombro lavorazione e pinza quando il pezzo è staffato con entrtambe le pinze (lavorazioni centrali)
|
||||
CLAMP_MAXDIST_1CLAMP = 500 -- massima distanza tra ingombro lavorazione e pinza quando il pezzo è staffato con una sola pinza (lavorazioni testa-coda)
|
||||
|
||||
-- Aggiornamento con dati da B&W
|
||||
local sData = EgtGetSourceDir().."Beam\\EbwData.lua"
|
||||
local sData = EgtGetCurrMachineDir().."\\Beam\\EbwData.lua"
|
||||
if EgtExistsFile( sData) then
|
||||
local Machine = dofile( sData)
|
||||
if Machine then
|
||||
@@ -94,6 +109,12 @@ if EgtExistsFile( sData) then
|
||||
if Machine.Offsets.TAB_OFFSET_Y then DeltaTabY = Machine.Offsets.TAB_OFFSET_Y end
|
||||
if Machine.Offsets.TAB_OFFSET_Z then DeltaTabZ = Machine.Offsets.TAB_OFFSET_Z end
|
||||
if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end
|
||||
if Machine.Offsets.MIN_JOIN_VV then MinJoinVV = EgtClamp( Machine.Offsets.MIN_JOIN_VV, 60, 150) end
|
||||
if Machine.Offsets.MIN_JOIN_SS then MinJoinSS = EgtClamp( Machine.Offsets.MIN_JOIN_SS, 80, 275) end
|
||||
if Machine.Offsets.MIN_JOIN_LS then MinJoinLS = EgtClamp( Machine.Offsets.MIN_JOIN_LS, 250, 400) end
|
||||
if Machine.Offsets.MIN_JOIN_SL then MinJoinSL = EgtClamp( Machine.Offsets.MIN_JOIN_SL, 80, 400) end
|
||||
if Machine.Offsets.MIN_JOIN_LL then MinJoinLL = EgtClamp( Machine.Offsets.MIN_JOIN_LL, 300, 600) end
|
||||
if Machine.Offsets.COEFF_CLAMP_CHECK then ClampingCoeffMin = Machine.Offsets.COEFF_CLAMP_CHECK end
|
||||
end
|
||||
ParkY = EgtClamp( ParkY, MinY, MaxY)
|
||||
ParkZ = EgtClamp( ParkZ, MinZ, MaxZ)
|
||||
@@ -102,17 +123,22 @@ if EgtExistsFile( sData) then
|
||||
UnloadSmT = UnloadT
|
||||
end
|
||||
end
|
||||
-- Aggiorno valori MinJoin
|
||||
MinJoin = MinJoinSS
|
||||
MinOther = abs( MinX1) + abs( MaxX2) + MinJoin
|
||||
DeltaTol = 210
|
||||
|
||||
EmtGeneral {
|
||||
File='Saomad-KAIROS.nge',
|
||||
File='Saomad-KAIROS-MK2.nge',
|
||||
Offset = Vector3d( 0.0, -835, -779.06),
|
||||
AxisMaxAdjust = 30,
|
||||
AxisMaxRotAdj = 0.5,
|
||||
ExitMaxAdjust = 30,
|
||||
ExitMaxRotAdj = 0.5,
|
||||
AngDeltaMinForHome = 165,
|
||||
Special = 'Saomad-KAIROS.mlse',
|
||||
Processor = 'Saomad-KAIROS.mlpe'}
|
||||
--AngDeltaMinForHome = 165,
|
||||
NewLinkMgr = 1,
|
||||
Special = 'Saomad-KAIROS-MK2.mlse',
|
||||
Processor = 'Saomad-KAIROS-MK2.mlpe'}
|
||||
local BaseId = EmtBase {
|
||||
Name = 'Base',
|
||||
Geo='BASE/GEO',
|
||||
@@ -150,7 +176,7 @@ local CId = EmtAxis {
|
||||
Home = ParkC,
|
||||
Geo = 'C_AXIS/GEO',
|
||||
Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION'}}
|
||||
EmtAxis {
|
||||
local AId = EmtAxis {
|
||||
Name = 'A',
|
||||
Parent = 'C',
|
||||
Token = 'A1',
|
||||
@@ -173,7 +199,7 @@ local H1Id = EmtHead {
|
||||
Rot1W = 2,
|
||||
OthColl = {'A/SOLID', 'C/SOLID'},
|
||||
Geo = 'H1_HEAD/GEO'}
|
||||
EgtSetInfo( H1Id, 'ZMAXONROT', '1,60')
|
||||
--EgtSetInfo( H1Id, 'ZMAXONROT', '1,60')
|
||||
-- Sega a catena
|
||||
EmtAxis {
|
||||
Name = 'CS',
|
||||
@@ -197,7 +223,7 @@ local H3Id = EmtHead {
|
||||
SolCh = MCH_SCC.ADIR_NEAR,
|
||||
OthColl = {'A/SOLID', 'C/SOLID'},
|
||||
Geo = 'H3_HEAD/GEO'}
|
||||
EgtSetInfo( H3Id, 'ZMAXONROT', '1,5')
|
||||
--EgtSetInfo( H3Id, 'ZMAXONROT', '1,5')
|
||||
-- Morse
|
||||
local X1Id = EmtAxis {
|
||||
Name = 'X1',
|
||||
@@ -219,7 +245,7 @@ local PX1Id = EmtAxis {
|
||||
Stroke = { 0, MaxHOpen},
|
||||
Home = MaxHOpen,
|
||||
Geo = 'PX1_AXIS/GEO',
|
||||
Aux = {'PX1_AXIS/SOLID', 'PX1_AXIS/COLLISION'}}
|
||||
Aux = {'PX1_AXIS/SOLID', 'PX1_AXIS/COLLISION', 'PX1_AXIS/CLAMP_CHECK'}}
|
||||
local QX1Id = EmtAxis {
|
||||
Name = 'QX1',
|
||||
Parent = 'X1',
|
||||
@@ -250,7 +276,7 @@ local PX2Id = EmtAxis {
|
||||
Stroke = { 0, MaxHOpen},
|
||||
Home = MaxHOpen,
|
||||
Geo = 'PX2_AXIS/GEO',
|
||||
Aux = {'PX2_AXIS/SOLID', 'PX2_AXIS/COLLISION'}}
|
||||
Aux = {'PX2_AXIS/SOLID', 'PX2_AXIS/COLLISION', 'PX2_AXIS/CLAMP_CHECK'}}
|
||||
local QX2Id = EmtAxis {
|
||||
Name = 'QX2',
|
||||
Parent = 'X2',
|
||||
@@ -389,11 +415,13 @@ EgtMove( EgtGetFirstNameInGroup( X1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( X1Id, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( PX1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( PX1Id, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( PX1Id, 'CLAMP_CHECK'), vtMove + Vector3d(0,0,DistZClampToTable), GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( QX1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( X2Id, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( PX2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( PX2Id, 'COLLISION'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( PX2Id, 'CLAMP_CHECK'), vtMove + Vector3d(0,0,DistZClampToTable), GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( QX2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( YId, 'SOLID'), vtMoveY, GDB_RT.GLOB)
|
||||
|
||||
@@ -414,8 +442,8 @@ function OnSetHead()
|
||||
local dDist = EgtIf( EMC.DIST and abs( EMC.DIST) > 1, EMC.DIST, ChSawLen)
|
||||
EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -dDist))
|
||||
-- recupero valore asse CS bloccato
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
local dPosCS = tonumber( sVal:sub( 4) or '')
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) or ''
|
||||
local dPosCS = tonumber( sVal:sub( 4)) or 0
|
||||
EmtModifyAxisHome( 'C', GetChainSawCHomeFromVirtualAxis( dPosCS))
|
||||
-- limiti asse A
|
||||
EmtModifyAxisStroke( 'A', { -91, 91})
|
||||
@@ -502,3 +530,53 @@ function OnResetMachine()
|
||||
end
|
||||
EgtSetStatus( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') or GDB_ID.NULL, GDB_ST.OFF)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function UpdateMinJoinDeltaTol( SB, HB, LB)
|
||||
local L_SMALL = 800
|
||||
local H_V = 90
|
||||
local H_S = 200
|
||||
local H_L = 400
|
||||
local W_V = 90
|
||||
local W_S = 150
|
||||
local W_L = 250
|
||||
local DELTA_TOL_S = 210
|
||||
local DELTA_TOL_V = 110
|
||||
local DELTA_TOL_L = 410
|
||||
if SB <= W_V and HB <= H_V then
|
||||
MinJoin = MinJoinVV
|
||||
DeltaTol = DELTA_TOL_V
|
||||
elseif LB <= L_SMALL then
|
||||
MinJoin = MinJoinSS
|
||||
DeltaTol = DELTA_TOL_S
|
||||
else
|
||||
local dMinJoinS
|
||||
local dMinJoinL
|
||||
if SB <= W_S then
|
||||
dMinJoinS = MinJoinSS
|
||||
dMinJoinL = MinJoinLS
|
||||
elseif SB <= W_L then
|
||||
local Coeff = ( SB - W_S) / ( W_L - W_S)
|
||||
dMinJoinS = ( 1 - Coeff) * MinJoinSS + Coeff * MinJoinSL
|
||||
dMinJoinL = ( 1 - Coeff) * MinJoinLS + Coeff * MinJoinLL
|
||||
else
|
||||
dMinJoinS = MinJoinSL
|
||||
dMinJoinL = MinJoinLL
|
||||
end
|
||||
if HB <= H_S then
|
||||
MinJoin = dMinJoinS
|
||||
DeltaTol = DELTA_TOL_S
|
||||
elseif HB <= H_L then
|
||||
local Coeff = ( HB - H_S) / ( H_L - H_S)
|
||||
MinJoin = ( 1 - Coeff) * dMinJoinS + Coeff * dMinJoinL
|
||||
DeltaTol = ( 1 - Coeff) * DELTA_TOL_S + Coeff * DELTA_TOL_L
|
||||
else
|
||||
MinJoin = dMinJoinL
|
||||
DeltaTol = DELTA_TOL_L
|
||||
end
|
||||
if SB < W_V then
|
||||
DeltaTol = DELTA_TOL_V
|
||||
end
|
||||
end
|
||||
MinOther = abs( MinX1) + abs( MaxX2) + MinJoin
|
||||
end
|
||||
@@ -7,13 +7,15 @@ EgtEnableDebug( false)
|
||||
|
||||
LONG_TOOL_MINLEN = 221
|
||||
BIG_TOOL_DIAM = 300
|
||||
ALL_CLAMP_POS = {}
|
||||
CLAMP_POS = {}
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- *** GENERATION ***
|
||||
---------------------------------------------------------------------
|
||||
local sBaseDir = EgtGetSourceDir()
|
||||
local sBaseDir = EgtGetCurrMachineDir()
|
||||
if NumericalControl == 'SIEMENS' then
|
||||
dofile( sBaseDir .. 'Saomad-KAIROS.SIEMENS.mlpe')
|
||||
dofile( sBaseDir .. '\\Saomad-KAIROS-MK2.SIEMENS.mlpe')
|
||||
else
|
||||
EmtSetLastError( 1201, 'Numerical Control error : unkwnown type')
|
||||
end
|
||||
@@ -30,10 +32,20 @@ function OnSimulStart()
|
||||
if vTcPos then
|
||||
for i = 1, #vTcPos do
|
||||
local vTools = EgtGetToolsInCurrSetupPos( vTcPos[i])
|
||||
if vTools and vTools[1] then
|
||||
EgtLoadTool( vTcPos[i], 1, vTools[1])
|
||||
ShowToolInTcPos( vTcPos[i], true)
|
||||
for j = 1, #( vTools or {}) do
|
||||
if vTools[j] ~= '' then
|
||||
EgtLoadTool( vTcPos[i], j, vTools[j])
|
||||
-- Aggiunto controllo lunghezza lama minima * 0.9 per ricavare la tolleranza del VMILL
|
||||
if EgtTdbSetCurrTool(vTools[j]) then -- set utensile corrente
|
||||
if EgtTdbGetCurrToolParam( MCH_TP.TYPE) == MCH_TY.SAW_STD or EgtTdbGetCurrToolParam( MCH_TP.TYPE) == MCH_TY.SAW_FLAT then -- controllo tipo utensile sega
|
||||
local dCurrSawLen = EgtTdbGetCurrToolParam( MCH_TP.LEN) * 0.9
|
||||
-- se non definito o minore del valore precedente aggiorna la tolleranza
|
||||
EMT.VMILLTOL = EgtIf( not EMT.VMILLTOL or dCurrSawLen < EMT.VMILLTOL, dCurrSawLen, EMT.VMILLTOL)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
ShowToolInTcPos( vTcPos[i], true)
|
||||
end
|
||||
end
|
||||
-- Carico l'utensile iniziale o di default sulla testa
|
||||
@@ -97,6 +109,29 @@ function OnSimulStart()
|
||||
end
|
||||
-- Preparo lista collisioni vuota
|
||||
EMT.COLLIDE = {}
|
||||
|
||||
-- si crea gruppo temporaneo appoggio controllo clamping
|
||||
CLAMP_CHECK_GROUP = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'CLAMP_CHECK')
|
||||
CLAMP_CHECK_INTERS = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'CLAMP_INTERS')
|
||||
|
||||
if CLAMP_CHECK_GROUP then
|
||||
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||
else
|
||||
local frClampCheckGroup = Frame3d( ORIG(), GDB_FR.FRONT)
|
||||
CLAMP_CHECK_GROUP = EgtGroup( GDB_ID.ROOT, frClampCheckGroup)
|
||||
EgtSetName( CLAMP_CHECK_GROUP, 'CLAMP_CHECK')
|
||||
EgtSetLevel( CLAMP_CHECK_GROUP, GDB_LV.TEMP)
|
||||
EgtSetStatus( CLAMP_CHECK_GROUP, GDB_ST.OFF)
|
||||
end
|
||||
|
||||
if CLAMP_CHECK_INTERS then
|
||||
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||
else
|
||||
CLAMP_CHECK_INTERS = EgtGroup( GDB_ID.ROOT)
|
||||
EgtSetName( CLAMP_CHECK_INTERS, 'CLAMP_INTERS')
|
||||
EgtSetLevel( CLAMP_CHECK_INTERS, GDB_LV.TEMP)
|
||||
EgtSetStatus( CLAMP_CHECK_INTERS, GDB_ST.OFF)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -122,13 +157,13 @@ function OnSimulDispositionStart()
|
||||
-- Determino dimensioni del grezzo
|
||||
local nSolId = EgtGetFirstNameInGroup( EgtGetFirstRawPart() or GDB_ID.NULL, 'RawSolid') or GDB_ID.NULL
|
||||
local b3Sol = EgtGetBBoxGlob( nSolId, GDB_BB.STANDARD)
|
||||
EMT.LB = 0
|
||||
EMT.SB = 0
|
||||
EMT.HB = 0
|
||||
EMT.LENGTHBEAM = 0
|
||||
EMT.WIDTHBEAM = 0
|
||||
EMT.HEIGHTBEAM = 0
|
||||
if b3Sol then
|
||||
EMT.LB = b3Sol:getDimX()
|
||||
EMT.SB = b3Sol:getDimY()
|
||||
EMT.HB = b3Sol:getDimZ()
|
||||
EMT.LENGTHBEAM = b3Sol:getDimX()
|
||||
EMT.WIDTHBEAM = b3Sol:getDimY()
|
||||
EMT.HEIGHTBEAM = b3Sol:getDimZ()
|
||||
end
|
||||
-- Se vero inizio e abilitato creo gli Zmap
|
||||
EMT.VMILL = {}
|
||||
@@ -193,7 +228,7 @@ function OnSimulDispositionStart()
|
||||
end
|
||||
table.insert( EMT.VMILL, VMillId)
|
||||
end
|
||||
nPartRawId = EgtGetNextRawPart( nPartRawId)
|
||||
nPartRawId = EgtGetNextRawPart( nPartRawId)
|
||||
end
|
||||
end
|
||||
-- fasi successive
|
||||
@@ -234,18 +269,22 @@ function OnSimulDispositionStart()
|
||||
local nOrd = GetPhaseOrd( EMT.PHASE)
|
||||
local nScrapOrd = GetPhaseOrd( EgtGetPhaseCount()) + 1
|
||||
local b3Raw = BBox3d()
|
||||
local b3Bar = BBox3d()
|
||||
local b3Part = BBox3d()
|
||||
local nPartRawId, nScrapRawId
|
||||
local nRawId = EgtGetFirstRawPart()
|
||||
while nRawId do
|
||||
local nNextRawId = EgtGetNextRawPart( nRawId)
|
||||
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
||||
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
||||
local b3Tmp = EgtGetRawPartBBox( nRawId)
|
||||
b3Bar:Add( b3Tmp)
|
||||
local nRawOrd = EgtGetInfo( nRawId, 'ORD', 'i')
|
||||
if nRawOrd == nOrd then
|
||||
b3Raw = EgtGetRawPartBBox( nRawId)
|
||||
b3Raw:Add( b3Tmp)
|
||||
b3Part:Add( b3Tmp)
|
||||
nPartRawId = nRawId
|
||||
elseif nRawOrd == nOrd + 1 and nRawOrd == nScrapOrd then
|
||||
local b3Tmp = EgtGetRawPartBBox( nRawId) or BBox3d()
|
||||
b3Raw:Add( b3Tmp)
|
||||
nScrapRawId = nRawId
|
||||
end
|
||||
@@ -259,6 +298,9 @@ function OnSimulDispositionStart()
|
||||
else
|
||||
EMT.SCRAP = nil
|
||||
end
|
||||
EMT.LENGTHBEAM = b3Bar:getDimX()
|
||||
EMT.LENGTHRAW = b3Raw:getDimX()
|
||||
EMT.LENGTHPART = b3Part:getDimX()
|
||||
-- recupero CutId del pezzo in lavorazione
|
||||
EMT.CUTID = EgtGetInfo( EgtGetFirstPartInRawPart( nPartRawId or GDB_ID.NULL) or GDB_ID.NULL, 'CUTID', 'i') or 0
|
||||
EMT.X1SPEC = nil
|
||||
@@ -328,6 +370,7 @@ function OnSimulDispositionStart()
|
||||
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
||||
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
||||
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
||||
b3Bar = EgtGetRawPartBBox( nRawId)
|
||||
else
|
||||
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
||||
EgtSetStatus( nRawId, GDB_ST.OFF)
|
||||
@@ -335,6 +378,7 @@ function OnSimulDispositionStart()
|
||||
end
|
||||
nRawId = nNextRawId
|
||||
end
|
||||
EMT.LENGTHBEAM = b3Bar:getDimX()
|
||||
-- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y
|
||||
else
|
||||
-- indice primo grezzo della fase
|
||||
@@ -350,12 +394,14 @@ function OnSimulDispositionStart()
|
||||
nRawId = EgtGetNextRawPart( nRawId)
|
||||
end
|
||||
-- eseguo
|
||||
local b3Bar = BBox3d()
|
||||
nRawId = EgtGetFirstRawPart()
|
||||
while nRawId do
|
||||
local nNextRawId = EgtGetNextRawPart( nRawId)
|
||||
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
||||
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
||||
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
||||
b3Bar = EgtGetRawPartBBox( nRawId)
|
||||
else
|
||||
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
||||
EmtLinkRawPartToGroup( nRawId, 'X1')
|
||||
@@ -363,6 +409,7 @@ function OnSimulDispositionStart()
|
||||
end
|
||||
nRawId = nNextRawId
|
||||
end
|
||||
EMT.LENGTHBEAM = b3Bar:getDimX()
|
||||
end
|
||||
-- Indicazione angolo rotazione pezzo
|
||||
EMT.ROT = EgtGetInfo( EMT.DISPID, 'ROT', 'i') or 0
|
||||
@@ -394,6 +441,7 @@ function OnSimulDispositionEnd()
|
||||
EMT.POSTROT = true
|
||||
end
|
||||
end
|
||||
EMT.SPLIT = false
|
||||
EMT.OPEISDISP = false
|
||||
end
|
||||
|
||||
@@ -543,6 +591,7 @@ function OnSimulMachiningEnd()
|
||||
EMT.UNLOADING = false
|
||||
EMT.FALL = false
|
||||
end
|
||||
EMT.SPLIT = nil
|
||||
EMT.PREVHEAD = EMT.HEAD
|
||||
EMT.PREVEXIT = EMT.EXIT
|
||||
end
|
||||
@@ -697,6 +746,8 @@ function ExecAuxCmd( sCmd)
|
||||
if Cmd[1] == '0' then
|
||||
if Cmd[2] == 'Unloading' then
|
||||
EMT.UNLOADING = true
|
||||
elseif Cmd[2] == 'Split' then
|
||||
EMT.SPLIT = true
|
||||
elseif Cmd[2] == 'Fall' then
|
||||
EMT.FALL = true
|
||||
end
|
||||
@@ -738,29 +789,9 @@ function ExecAuxCmd( sCmd)
|
||||
end
|
||||
end
|
||||
elseif Cmd[1] == '11' then
|
||||
local dPX1 = MaxHOpen
|
||||
if Cmd[2] ~= '0' then
|
||||
dPX1 = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
||||
end
|
||||
SimulMoveAxis( 'PX1', dPX1, MCH_SIM_STEP.RAPID)
|
||||
local dQX1 = MaxVOpen
|
||||
if Cmd[2] == '2' then
|
||||
dQX1 = EgtIf( EMT.ROT == -1, EMT.SB, EMT.HB)
|
||||
end
|
||||
SimulMoveAxis( 'QX1', dQX1, MCH_SIM_STEP.RAPID)
|
||||
SetPX1Light( Cmd[2] ~= '0')
|
||||
ExecMovePX1( Cmd)
|
||||
elseif Cmd[1] == '12' then
|
||||
local dPX2 = MaxHOpen
|
||||
if Cmd[2] ~= '0' then
|
||||
dPX2 = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
||||
end
|
||||
SimulMoveAxis( 'PX2', dPX2, MCH_SIM_STEP.RAPID)
|
||||
local dQX2 = MaxVOpen
|
||||
if Cmd[2] == '2' then
|
||||
dQX2 = EgtIf( EMT.ROT == -1, EMT.SB, EMT.HB)
|
||||
end
|
||||
SimulMoveAxis( 'QX2', dQX2, MCH_SIM_STEP.RAPID)
|
||||
SetPX2Light( Cmd[2] ~= '0')
|
||||
ExecMovePX2( Cmd)
|
||||
elseif Cmd[1] == '21' then
|
||||
local nX1Delta = tonumber( Cmd[2])
|
||||
local nX2Delta = tonumber( Cmd[3])
|
||||
@@ -791,7 +822,7 @@ function ExecUnloading()
|
||||
-- li sposto per lasciare spazio al nuovo pezzo
|
||||
local nId = EgtGetFirstInGroup( nVmGrpId)
|
||||
while nId do
|
||||
EgtMove( nId, Vector3d( 0, -( EMT.SB + 50.0), 0), GDB_RT.GLOB)
|
||||
EgtMove( nId, Vector3d( 0, -( EMT.WIDTHBEAM + 50.0), 0), GDB_RT.GLOB)
|
||||
nId = EgtGetNext( nId)
|
||||
end
|
||||
-- creo un nuovo layer e vi inserisco il nuovo pezzo
|
||||
@@ -833,15 +864,199 @@ function ExecUnloading()
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function VerifyYSlide( sName1, dVal1, sName2, dVal2)
|
||||
-- Se movimento trave agganciata con carrello Y
|
||||
function CheckClamping( sClampName)
|
||||
|
||||
local nClampId = EgtGetAxisId( sClampName) or GDB_ID.NULL
|
||||
local nClampPathId = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nClampId, 'CLAMP_CHECK') or GDB_ID.NULL)
|
||||
local b3ClampingArea = EgtGetBBoxGlob( nClampPathId or GDB_ID.NULL, GDB_BB.STANDARD)
|
||||
-- se non trovo percorso area di clamping, esco subito
|
||||
if not nClampPathId or not EMT.VMILL or not ClampingCoeffMin then
|
||||
return
|
||||
end
|
||||
|
||||
local function GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
|
||||
local vCurveListId = {}
|
||||
local vtIntersPlane
|
||||
-- piano di interpolazione
|
||||
if sIntersPlane == 'X' then
|
||||
vtIntersPlane = X_AX()
|
||||
elseif sIntersPlane == 'Y' then
|
||||
vtIntersPlane = Y_AX()
|
||||
elseif sIntersPlane == 'Z' then
|
||||
vtIntersPlane = Z_AX()
|
||||
end
|
||||
|
||||
for i = 1, #EMT.VMILL do
|
||||
local b3VMill = EgtGetBBoxGlob( EMT.VMILL[i], GDB_BB.EXACT)
|
||||
local ptPosIntersPlane
|
||||
if sPosIntersPlane == 'MIN' then
|
||||
ptPosIntersPlane = b3VMill:getMin() + dDepth * vtIntersPlane
|
||||
elseif sPosIntersPlane == 'MAX' then
|
||||
ptPosIntersPlane = b3VMill:getMax() - dDepth * vtIntersPlane
|
||||
end
|
||||
local nLoopId, nLoopCnt = EgtPlaneVolZmapInters( ptPosIntersPlane, vtIntersPlane, EMT.VMILL[i], CLAMP_CHECK_INTERS, GDB_RT.GLOB)
|
||||
vCurveListId = EgtTableAdd( vCurveListId, nLoopId, nLoopCnt)
|
||||
end
|
||||
|
||||
return vCurveListId
|
||||
end
|
||||
|
||||
local function CalculateIntersectionArea( sPosIntersPlane, sIntersPlane, dDepth)
|
||||
-- test piano frontale
|
||||
local vCurveListId = GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
|
||||
-- si copia curva intersezione e curva pinza in gruppo di confronto
|
||||
local nFlatSurfId, nFlatSurfCnt = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, vCurveListId)
|
||||
local vFlatSurfId = EgtTableFill( nFlatSurfId, nFlatSurfCnt) or {}
|
||||
local nClampSurfId = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, nClampPathId)
|
||||
|
||||
local dTotalArea = 0
|
||||
local dTotalXLenght = 0
|
||||
for i = 1, #vFlatSurfId do
|
||||
local nTempSurfId = vFlatSurfId[i]
|
||||
EgtSurfFrIntersect( nTempSurfId, nClampSurfId)
|
||||
if nTempSurfId then
|
||||
dTotalArea = dTotalArea + ceil( EgtSurfArea( nTempSurfId) or 0)
|
||||
local b3BoxIntersectionBox = EgtGetBBoxGlob( nTempSurfId, GDB_BB.STANDARD)
|
||||
if b3BoxIntersectionBox then
|
||||
dTotalXLenght = dTotalXLenght + ceil( b3BoxIntersectionBox:getDimX()) -- somma lunghezze (x) delle aree pinzate
|
||||
end
|
||||
end
|
||||
end
|
||||
return dTotalArea, dTotalXLenght
|
||||
end
|
||||
|
||||
-- minima area considerata per un corretto pinzaggio
|
||||
DistZClampToTable = DistZClampToTable or 0
|
||||
--local MinJoin = BD.GetMinJoin( EMT.WIDTHPART, EMT.HEIGHTPART, EgtIf( EMT.SPLIT, EMT.LENGTHPART , EMT.LENGTHBEAM))
|
||||
UpdateMinJoinDeltaTol( EMT.WIDTHPART, EMT.HEIGHTPART, EgtIf( EMT.SPLIT, EMT.LENGTHPART , EMT.LENGTHBEAM))
|
||||
local MinZClamping = min( b3ClampingArea:getDimZ() + DistZClampToTable, EMT.HEIGHTPART) - DistZClampToTable
|
||||
local dMinClamping = ( MinJoin * MinZClamping)
|
||||
-- si moltiplica per un coefficiente minimo sotto al quale si da l'errore di pinzaggio
|
||||
ClampingCoeffMin = EgtClamp( ClampingCoeffMin, 0.01, 1)
|
||||
if MinZClamping > ClampSmallH then
|
||||
-- somma area parallelepipedo sotto + area triangolo superiore
|
||||
dMinClamping = MinJoin * ClampSmallH + ( ( MinJoin * ( MinJoin * tan( ClampFrontAngle))) / 2)
|
||||
local dTriangleBase = ClampL - ClampSmallL
|
||||
if MinJoin > dTriangleBase then
|
||||
local dTriangleHeight = ClampH - ClampSmallH
|
||||
-- somma area parallelepipedo sotto + area triangolo superiore + parallelepipedo grande
|
||||
dMinClamping = ( MinJoin * ClampSmallH) + ( dTriangleBase * dTriangleHeight / 2) + ( ( MinJoin - dTriangleBase) * dTriangleHeight)
|
||||
end
|
||||
end
|
||||
|
||||
local dMinClampingAreaWarn = dMinClamping * ClampingCoeffMin
|
||||
local dMinClampingAreaErr = dMinClamping * ( ClampingCoeffMin / 3)
|
||||
|
||||
local bError = true
|
||||
local sWrn, sErr
|
||||
local bWriteWarnMessage = false
|
||||
local bWriteErrMessage = false
|
||||
-- controllo faccia frontale
|
||||
local dArea, dXClampedLenght = CalculateIntersectionArea( 'MIN', 'Y', 3)
|
||||
-- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto)
|
||||
if dArea and dArea < dMinClampingAreaErr then
|
||||
-- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore
|
||||
if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then
|
||||
bError = false
|
||||
end
|
||||
-- pinzaggio non fattibile, errore
|
||||
if bError then
|
||||
sErr = 'ERROR CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||
bWriteErrMessage = true
|
||||
end
|
||||
end
|
||||
-- WARNING: pinza meno del minimo richiesto
|
||||
if dArea and dArea < dMinClampingAreaWarn and not bWriteErrMessage then
|
||||
sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||
bWriteWarnMessage = true
|
||||
end
|
||||
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||
|
||||
-- controllo altro lato solo se non sono già in errore
|
||||
if not bWriteErrMessage then
|
||||
-- controllo faccia posteriore
|
||||
dArea, dXClampedLenght = CalculateIntersectionArea( 'MAX', 'Y', 3)
|
||||
-- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto)
|
||||
if dArea and dArea < dMinClampingAreaErr then
|
||||
-- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore
|
||||
if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then
|
||||
bError = false
|
||||
end
|
||||
-- pinzaggio non fattibile, errore
|
||||
if bError then
|
||||
sErr = 'ERROR CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||
bWriteErrMessage = true
|
||||
end
|
||||
end
|
||||
-- WARNING: pinza meno del minimo richiesto
|
||||
if dArea and dArea < dMinClampingAreaWarn and not bWriteWarnMessage and not bWriteErrMessage then
|
||||
sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||
bWriteWarnMessage = true
|
||||
end
|
||||
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||
end
|
||||
|
||||
if bWriteErrMessage then
|
||||
EmtSetLastError( 1213, sErr, EgtGetEnableUI())
|
||||
EgtOutBox( sErr, 'CLAMPING', 'ERROR', 'OK')
|
||||
EmtSetSimulPause()
|
||||
elseif bWriteWarnMessage then
|
||||
EgtOutLog( sWrn)
|
||||
EgtOutBox( sWrn, 'CLAMPING', 'WARNING', 'OK')
|
||||
EmtSetSimulPause()
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecMovePX1( Cmd)
|
||||
--SimulMoveAxes( 'PX1', EgtIf( not bClose, MaxHoOpen, EMT.HEIGHTBEAM), MCH_SIM_STEP.RAPID)
|
||||
local dPX1 = MaxHOpen
|
||||
if Cmd[2] ~= '0' then
|
||||
dPX1 = EgtIf( EMT.ROT == -1, EMT.HEIGHTBEAM, EMT.WIDTHBEAM)
|
||||
end
|
||||
SimulMoveAxis( 'PX1', dPX1, MCH_SIM_STEP.RAPID)
|
||||
local dQX1 = MaxVOpen
|
||||
if Cmd[2] == '2' then
|
||||
dQX1 = EgtIf( EMT.ROT == -1, EMT.WIDTHBEAM, EMT.HEIGHTBEAM)
|
||||
end
|
||||
SimulMoveAxis( 'QX1', dQX1, MCH_SIM_STEP.RAPID)
|
||||
SetPX1Light( Cmd[2] ~= '0')
|
||||
if Cmd[2] ~= '0' then
|
||||
CheckClamping( 'PX1')
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecMovePX2( Cmd)
|
||||
--EgtIf( not bClose, MaxHoOpen, EMT.HEIGHTBEAM), MCH_SIM_STEP.RAPID)
|
||||
local dPX2 = MaxHOpen
|
||||
if Cmd[2] ~= '0' then
|
||||
dPX2 = EgtIf( EMT.ROT == -1, EMT.HEIGHTBEAM, EMT.WIDTHBEAM)
|
||||
end
|
||||
SimulMoveAxis( 'PX2', dPX2, MCH_SIM_STEP.RAPID)
|
||||
local dQX2 = MaxVOpen
|
||||
if Cmd[2] == '2' then
|
||||
dQX2 = EgtIf( EMT.ROT == -1, EMT.WIDTHBEAM, EMT.HEIGHTBEAM)
|
||||
end
|
||||
SimulMoveAxis( 'QX2', dQX2, MCH_SIM_STEP.RAPID)
|
||||
SetPX2Light( Cmd[2] ~= '0')
|
||||
if Cmd[2] ~= '0' then
|
||||
CheckClamping( 'PX2')
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function VerifyX1Slide( sName1, dVal1, sName2, dVal2)
|
||||
-- Se movimento trave agganciata con carrello X1
|
||||
if sName1 == 'T' and sName2 == 'X1' and GetPX1Light() then
|
||||
local dYDeltaP = EgtGetAxisPos( 'T') - EgtGetAxisPos( 'X1')
|
||||
local dYDeltaA = tonumber( dVal1) - tonumber( dVal2)
|
||||
EgtOutLog( string.format( 'YDeltaP=%.3f YDeltaA=%.3f', dYDeltaP, dYDeltaA), 5)
|
||||
EgtOutLog( string.format( 'X1DeltaP=%.3f X1DeltaA=%.3f', dYDeltaP, dYDeltaA), 5)
|
||||
if abs( dYDeltaA - dYDeltaP) > 0.5 then
|
||||
EMT.ERR = 2
|
||||
local sErr = 'Y slide : ' .. EmtLenToString( dYDeltaP, 3) .. ' -> ' .. EmtLenToString( dYDeltaA, 3)
|
||||
local sErr = 'X1 slide : ' .. EmtLenToString( dYDeltaP, 3) .. ' -> ' .. EmtLenToString( dYDeltaA, 3)
|
||||
EmtSetLastError( 1202, sErr)
|
||||
end
|
||||
end
|
||||
@@ -850,15 +1065,15 @@ function VerifyYSlide( sName1, dVal1, sName2, dVal2)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function VerifyVSlide( sName1, dVal1, sName2, dVal2)
|
||||
-- Se movimento trave agganciata con carrello V
|
||||
function VerifyX2Slide( sName1, dVal1, sName2, dVal2)
|
||||
-- Se movimento trave agganciata con carrello X1
|
||||
if sName1 == 'T' and sName2 == 'X2' and GetPX2Light() then
|
||||
local dVDeltaP = EgtGetAxisPos( 'T') - EgtGetAxisPos( 'X2')
|
||||
local dVDeltaA = tonumber( dVal1) - tonumber( dVal2)
|
||||
EgtOutLog( string.format( 'VDeltaP=%.3f VDeltaA=%.3f', dVDeltaP, dVDeltaA), 5)
|
||||
EgtOutLog( string.format( 'X2DeltaP=%.3f X2DeltaA=%.3f', dVDeltaP, dVDeltaA), 5)
|
||||
if abs( dVDeltaA - dVDeltaP) > 0.5 then
|
||||
EMT.ERR = 2
|
||||
local sErr = 'V slide : ' .. EmtLenToString( dVDeltaP, 3) .. ' -> ' .. EmtLenToString( dVDeltaA, 3)
|
||||
local sErr = 'X2 slide : ' .. EmtLenToString( dVDeltaP, 3) .. ' -> ' .. EmtLenToString( dVDeltaA, 3)
|
||||
EmtSetLastError( 1202, sErr)
|
||||
end
|
||||
end
|
||||
@@ -874,9 +1089,9 @@ function VerifyOneChariotSlide( sName1, dVal1, sName2, dVal2)
|
||||
end
|
||||
-- Eseguo verifica
|
||||
if sName2 == 'X1' then
|
||||
return VerifyYSlide( sName1, dVal1, sName2, dVal2)
|
||||
return VerifyX1Slide( sName1, dVal1, sName2, dVal2)
|
||||
elseif sName2 == 'X2' then
|
||||
return VerifyVSlide( sName1, dVal1, sName2, dVal2)
|
||||
return VerifyX2Slide( sName1, dVal1, sName2, dVal2)
|
||||
end
|
||||
return true
|
||||
end
|
||||
@@ -893,9 +1108,9 @@ function VerifyTwoChariotsSlide( sName1, dVal1, sName2, dVal2, sName3, dVal3)
|
||||
end
|
||||
-- Eseguo verifica
|
||||
if sName2 == 'X1' then
|
||||
return VerifyYSlide( sName1, dVal1, sName2, dVal2) and VerifyVSlide( sName1, dVal1, sName3, dVal3)
|
||||
return VerifyX1Slide( sName1, dVal1, sName2, dVal2) and VerifyX2Slide( sName1, dVal1, sName3, dVal3)
|
||||
elseif sName2 == 'X2' then
|
||||
return VerifyVSlide( sName1, dVal1, sName2, dVal2) and VerifyYSlide( sName1, dVal1, sName3, dVal3)
|
||||
return VerifyX2Slide( sName1, dVal1, sName2, dVal2) and VerifyX1Slide( sName1, dVal1, sName3, dVal3)
|
||||
end
|
||||
return true
|
||||
end
|
||||
@@ -999,14 +1214,14 @@ local RAPID_Y_FEED = FmaxY -- mm/min ex: 45000
|
||||
local RAPID_Z_FEED = FmaxZ -- mm/min ex: 45000
|
||||
local RAPID_C_FEED = FmaxC -- deg/min ex: 18000
|
||||
local RAPID_B_FEED = FmaxA -- deg/min ex: 10440
|
||||
local RAPID_MIN_T = 0.2 -- s ex: 0.2
|
||||
local RAPID_MIN_T = 1 -- s ex: 0.2
|
||||
local TOOL_CHANGE = 20 -- s ex: 14
|
||||
local LOAD_T = 20 -- s ex: 16
|
||||
local CHAR_ONE_MOVE_T = 3.5 -- s ex: 2
|
||||
local LOAD_T = 10 -- s ex: 16
|
||||
local CHAR_ONE_MOVE_T = 1.7 -- s ex: 2
|
||||
local ROTATION_T = 40 -- s ex: 40
|
||||
local SPLIT_T = 12 -- s ex: 9
|
||||
local UNLOAD_T = 15 -- s ex: 12
|
||||
local FALL_T = 4 -- s ex: 4
|
||||
local SPLIT_T = 3 -- s ex: 9
|
||||
local UNLOAD_T = 10 -- s ex: 12
|
||||
local FALL_T = 2 -- s ex: 4
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnEstimStart()
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
-3867
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user