- Aggiornato 3D con macchina reale

- Sistemata direzione assi
- Modificata posizione scarico per pezzi standard e pezzi corti
- Collisioni scritte sotto forma di tabella
- Aggiunta note utensili e lavorazioni
- Sistemati ToolHolders
This commit is contained in:
andrea.villa
2024-07-03 13:06:09 +02:00
parent 192bbde394
commit a721c72e1b
14 changed files with 150 additions and 51 deletions
+2 -1
View File
@@ -95,6 +95,7 @@
"EgtGetPartInRawPartCount",
"EgtGetOperationPhase",
"EgtSetOperationMode",
"EgtSetCalcTool"
"EgtSetCalcTool",
"EmtModifyAxisStroke"
]
}
+3 -3
View File
@@ -8,8 +8,8 @@ local BeamData = {
ROT90 = false, -- flag abilitazione rotazione 90 gradi
MIN_WIDTH = 40, -- larghezza minima del grezzo
MIN_HEIGHT = 40, -- altezza minima del grezzo
MAX_WIDTH = 450, -- larghezza massima del grezzo
MAX_HEIGHT = 250, -- altezza massima del grezzo
MAX_WIDTH = 250, -- larghezza massima del grezzo
MAX_HEIGHT = 620, -- altezza massima del grezzo
LEN_SHORT_PART = 1200, -- lunghezza massima pezzo corto
LEN_VERY_SHORT_PART = 400, -- lunghezza massima pezzo molto corto (molto probabile lo scarico a caduta)
MAX_RAW = 30000, -- massima lunghezza grezzo (deve essere minore di LenTable - RAW_OFFSET)
@@ -22,7 +22,7 @@ local BeamData = {
MAX_LEN_SCRAP_START = 270, -- massima lunghezza scarto di testa
MAX_DIM_HTCUT = 205, -- larghezza massima taglio di testa o coda
MAX_DIM_HTCUT_HBEAM = -195, -- larghezza massima taglio di testa o coda con trave alta
MIN_DIM_HBEAM = 190, -- altezza minima di trave alta
MIN_DIM_HBEAM = 621, -- altezza minima di trave alta
MAX_DIM_DICE = 155, -- dimensione trasversale massima cubetto
MAX_LEN_DICE = 400, -- lunghezza massima cubetto
DECR_VERT_CUT = 12.5, -- riduzione profondità per affondamento verticale in taglio orizzontale
+11 -11
View File
@@ -5,18 +5,18 @@ local Offsets = {
MAX_Y=540,
MIN_Z=-512,
MAX_Z=910,
MIN_A=-109.5,
MAX_A=109.5,
MIN_A=-120,
MAX_A=120,
MIN_C=-240,
MAX_C=240,
MIN_X1=290,
MAX_X1=3735,
PARK_X1=600,
MIN_X2=-3735,
MAX_X2=-290,
PARK_X2=-600,
MIN_X1=62,
MAX_X1=3650,
PARK_X1=570,
MIN_X2=-3650,
MAX_X2=-62,
PARK_X2=-500,
BEAM_LOAD=1800.0,
BEAM_UNLOAD=-1800,
BEAM_UNLOAD=-2060,
TURN_OFFS=0,
MILL_PIVOT=-211.00,
TAB_OFFSET_Y=0,
@@ -28,9 +28,9 @@ local Offsets = {
local Trave = {
YMIN=30,
YMAX=451,
YMAX=251,
ZMIN=30,
ZMAX=251
ZMAX=621
}
local User = {
+50
View File
@@ -0,0 +1,50 @@
; Commento per evitare BOM con UTF-8
;Index = Type, Description, Default Value
; Type : b=boolean, d=double, l=lenght, s=string
[Drilling]
[Sawing]
[Milling]
0=d,MaxElev,0
1=d,OutRaw,0
2=d,SideElev,0
3=d,TrimExt,0
4=sr,VtFaceUse,0,0,0
[Pocketing]
0=d,MaxElev,0
1=b,Open,0
2=d,OpenMinSave,0
3=d,OpenOutRaw,0
4=d,MaxOptSize,0
[Mortising]
0=d,MaxElev,0
[Chiseling]
[SawRoughing]
[SawFinishing]
[GenMachining]
0=l,LinTol,0.1
1=l,MaxLen,2
2=s,Type,ZigZag
3=d,SideAng,90
4=l,Step,10
5=l,OffsProj,0
6=l,LiTang,0
7=l,LiOrth,0
8=l,LiElev,0
9=l,LoTang,0
10=l,LoOrth,0
11=l,LoElev,0
12=b,DirFromGuide,1
[SurfRoughing]
[SurfFinishing]
0=b,SkipMaxDown,1
+2 -2
View File
@@ -68,7 +68,7 @@ Active=0
[ToolHolder]
H1.1=Standard.nge
H1.1:MILL_NOTIP=MillNoTip.nge
H1.1:SAW_FLAT=TcSaw2.nge
H1.1:SAW_FLAT=TcSaw.nge
H3.1=ChainSaw.nge
[Machinings]
@@ -81,7 +81,7 @@ Chiseling=0
SawRoughing=0
SawFinishing=0
GenMachining=0
SurfFinishing=1
SurfFinishing=0
[Machining]
InitScript=InitMach.lua
+23 -12
View File
@@ -1,11 +1,12 @@
-- Descrizione macchina Saomad-KAIROS by EgalWare s.r.l. 2024/06/27
-- 2024/06/27 ver 2.6f1 Prima versione (derivata da Kairos023)
-- 2024/07/01 ver 2.6g1 Aggiornato 3D con nuovo gruppo testa
-- 2024/07/03 ver 2.6g2 Aggiornato 3D con modello reale e altre piccole modifiche
require( 'EmtGenerator')
EgtEnableDebug( false)
PP_VER = '2.6g1'
PP_VER = '2.6g2'
MIN_MACH_VER = '2.5j1'
EgtOutLog ( '** Saomad-KAIROS '..PP_VER..' (MinMach '.. MIN_MACH_VER ..') **', 1)
@@ -21,13 +22,13 @@ MinZ = -298
MaxZ = 915
ParkZ = 900
FmaxZ = 45000
MinA = -109.5
MaxA = 109.5
MinA = -120
MaxA = 120
ParkA = 0
FmaxA = 10440
MinC = -240
MaxC = 240
ParkC = 90
ParkC = -90
FmaxC = 18000
MillOffs = 211.0
ChSawLen = 141.5
@@ -41,6 +42,7 @@ ParkX2 = -480.0
FmaxX2 = 45000
LoadT = 1800.0
UnloadT = -1800
UnloadSmT = UnloadT
TurnerOffs = 0
MaxHOpen = 301
MaxVOpen = 621
@@ -92,6 +94,7 @@ if EgtExistsFile( sData) then
ParkZ = EgtClamp( ParkZ, MinZ, MaxZ)
ParkA = EgtClamp( ParkA, MinA, MaxA)
ParkC = EgtClamp( ParkC, MinC, MaxC)
UnloadSmT = UnloadT
end
end
@@ -147,7 +150,7 @@ EmtAxis {
Parent = 'C',
Token = 'A1',
Type = MCH_AT.ROTARY,
Dir = Y_AX(),
Dir = X_AX(),
Pos = Point3d( 0, 0, MillOffs),
Stroke = {MinA, MaxA},
Home = ParkA,
@@ -183,7 +186,7 @@ local H3Id = EmtHead {
HSet = 'H1',
Type = MCH_HT.STD,
Pos = Point3d( 0, 0, -ChSawLen),
TDir = -X_AX(),
TDir = Y_AX(),
ADir = Z_AX(),
Rot1W = 0.2,
SolCh = MCH_SCC.ADIR_NEAR,
@@ -197,7 +200,7 @@ local X1Id = EmtAxis {
Parent = 'Base',
Type = MCH_AT.LINEAR,
Dir = -X_AX(),
Pos = Point3d( -1253.5, 245.0, 918.94),
Pos = Point3d( -1193.5, 245.0, 918.94),
Stroke = { MinX1, MaxX1},
Home = ParkX1,
Geo = 'X1_AXIS/GEO',
@@ -207,7 +210,7 @@ local PX1Id = EmtAxis {
Parent = 'X1',
Type = MCH_AT.LINEAR,
Dir = -Y_AX(),
Pos = Point3d( -1253.5, 95.0, 918.94),
Pos = Point3d( -1193.5, 95.0, 918.94),
Stroke = { 0, MaxHOpen},
Home = MaxHOpen,
Geo = 'PX1_AXIS/GEO',
@@ -217,7 +220,7 @@ local QX1Id = EmtAxis {
Parent = 'X1',
Type = MCH_AT.LINEAR,
Dir = Z_AX(),
Pos = Point3d( -874.2, -22.5, 668.9787),
Pos = Point3d( -814.2, -22.5, 668.9787),
Stroke = { 0, MaxVOpen},
Home = MaxVOpen,
Geo = 'QX1_AXIS/GEO',
@@ -228,7 +231,7 @@ local X2Id = EmtAxis {
Parent = 'Base',
Type = MCH_AT.LINEAR,
Dir = -X_AX(),
Pos = Point3d( 1253.5001, 245.0, 918.94),
Pos = Point3d( 1193.5001, 245.0, 918.94),
Stroke = { MinX2, MaxX2},
Home = ParkX2,
Geo = 'X2_AXIS/GEO',
@@ -238,7 +241,7 @@ local PX2Id = EmtAxis {
Parent = 'X2',
Type = MCH_AT.LINEAR,
Dir = -Y_AX(),
Pos = Point3d( 1253.5001, 95.0, 918.94),
Pos = Point3d( 1193.5001, 95.0, 918.94),
Stroke = { 0, MaxHOpen},
Home = MaxHOpen,
Geo = 'PX2_AXIS/GEO',
@@ -248,7 +251,7 @@ local QX2Id = EmtAxis {
Parent = 'X2',
Type = MCH_AT.LINEAR,
Dir = Z_AX(),
Pos = Point3d( 874.2001, 640.4727, -1591.561),
Pos = Point3d( 814.2001, 640.4727, -1591.561),
Stroke = { 0, MaxVOpen},
Home = MaxVOpen,
Geo = 'QX2_AXIS/GEO',
@@ -414,8 +417,16 @@ function OnSetHead()
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
local dPosCS = tonumber( sVal:sub( 4) or '')
EmtModifyAxisHome( 'C', GetChainSawCHomeFromVirtualAxis( dPosCS))
-- altrimenti
else
EmtModifyAxisHome( 'C', ParkC)
-- se lama
if EMC.TCPOS == 'T21' then
EmtModifyAxisStroke( 'A', { -100, 100})
-- altrimenti
else
EmtModifyAxisStroke( 'A', { MinA, MaxA})
end
end
end
+35 -20
View File
@@ -56,27 +56,42 @@ function OnSimulStart()
DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4)
-- Preparo lista solidi macchina con cui possono collidere gli oggetti sopra riportati (in aggiunta a VMill)
EMT.MCODET = {}
EMT.MCODET[1] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'X1'), 'COLLISION'), 'STM1') or GDB_ID.NULL
EMT.MCODET[2] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'PX1'), 'COLLISION'), 'STM1') or GDB_ID.NULL
EMT.MCODET[3] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'X2'), 'COLLISION'), 'STM1') or GDB_ID.NULL
EMT.MCODET[4] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'PX2'), 'COLLISION'), 'STM1') or GDB_ID.NULL
EMT.MCODET[5] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM1') or GDB_ID.NULL
EMT.MCODET[6] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM2') or GDB_ID.NULL
EMT.MCODET[7] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM3') or GDB_ID.NULL
EMT.MCODET[8] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM4') or GDB_ID.NULL
EMT.MCODET[9] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM5') or GDB_ID.NULL
EMT.MCODET[10] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM6') or GDB_ID.NULL
EMT.MCODET[11] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM7') or GDB_ID.NULL
EMT.MCODET[12] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM8') or GDB_ID.NULL
EMT.MCODET[13] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM9') or GDB_ID.NULL
EMT.MCODET[14] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM10') or GDB_ID.NULL
for i = #EMT.MCODET, 1, -1 do
if not EMT.MCODET[i] or EMT.MCODET[i] == GDB_ID.NULL then
table.remove( EMT.MCODET, i)
EgtOutLog( ' Warning : MCODET element (' .. tostring( i) .. ') is null')
elseif EgtGetDebugLevel() >= 4 then
EgtOutLog( ' MCODET element (' .. tostring( i) .. ') is ok')
local McdData = { { Grp = 'X1', Sub = 'COLLISION', Name = 'STM1'},
{ Grp = 'X1', Sub = 'COLLISION', Name = 'STM2'},
{ Grp = 'PX1', Sub = 'COLLISION', Name = 'STM1'},
{ Grp = 'X2', Sub = 'COLLISION', Name = 'STM1'},
{ Grp = 'X2', Sub = 'COLLISION', Name = 'STM2'},
{ Grp = 'PX2', Sub = 'COLLISION', Name = 'STM1'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'STM1'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'STM2'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'STM3'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'STM4'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'STM5'},
--{ Grp = 'Base', Sub = 'COLLISION', Name = 'STM6'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'STM7'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'STM8'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'STM9'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'STM10'}}
EgtOutLog( 'MCODET Objects :', 4)
local nMcdNullCnt = 0
for i = 1, #McdData do
local nGrpId
if McdData[i].Grp == 'Base' then
nGrpId = EgtGetBaseId( 'Base')
else
nGrpId = EgtGetAxisId( McdData[i].Grp)
end
local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId, McdData[i].Sub), McdData[i].Name)
if nId then
table.insert( EMT.MCODET, nId)
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' (' .. tostring( nId) .. ') is ok', 4)
else
nMcdNullCnt = nMcdNullCnt + 1
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4)
end
end
if nMcdNullCnt > 0 then
EgtOutLog( 'Warning : MCODET with one or more null Element(s) ')
end
-- Preparo lista collisioni vuota
EMT.COLLIDE = {}
+4 -2
View File
@@ -41,6 +41,7 @@ local MIN_JOIN_SL = 290
local MIN_JOIN_LL = 400
local MinJoin = MIN_JOIN_SS
local MinOther = abs( MinX1) + abs( MaxX2) + MinJoin
local MaxLenSmT = 1500 -- massima lunghezza pezzo scaricato con nastri verdi
----------------------- Variabili -----------------------------------
local Test = false
@@ -412,7 +413,8 @@ function OnSpecialApplyDisposition()
if IsStartOrRestPhase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE) then
EMC.TPOS = dPosT
SpecSetCarrPosFromCmds( vCmd)
local dDistFront = EgtIf( EMC.LB < abs( MinX2 - UnloadT), MinJoin, EMC.LB - abs( MinX2 - UnloadT) + MinJoin + DeltaTol)
local CurrUnloadT = EgtIf( EMC.LB < MaxLenSmT, UnloadSmT, UnloadT)
local dDistFront = EgtIf( EMC.LB < abs( MinX2 - CurrUnloadT), MinJoin, EMC.LB - abs( MinX2 - CurrUnloadT) + MinJoin + DeltaTol)
vCmd2 = SpecCalcCarriages( dDistFront, 0)
if vCmd and #vCmd > 1 and vCmd2 and #vCmd2 > 1 then
table.insert( vCmd, { 0, 'CARR_MOVE'})
@@ -1309,7 +1311,7 @@ function SpecCalcUnload()
end
-- Se non supero la lunghezza massima di scarico, sposto il pezzo in posizione di scarico
if bStdUl then
local dFinT = UnloadT - EMC.LB
local dFinT = EgtIf( EMC.LB < MaxLenSmT, UnloadSmT, UnloadT) - EMC.LB
local dFinV = dFinT + EMC.VDELTA
table.insert( vCmd, { 2, 'T', dFinT, 'X2', dFinV})
else
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+20
View File
@@ -0,0 +1,20 @@
; Commento per evitare BOM con UTF-8
; Index, Type, Description, Value
; Index = 0,1,..,n
; Type : d=double, l=lenght, s=string, b=boolean, dr=double recalc, sr= string recalc, lr=lenght recalc, br=boolean recalc
; Description : STEP, SIDESTEP, ...
[DRILL_STD]
0=sr,TH,
[SAW_STD]
[SAW_FLAT]
[MILL_STD]
0=sr,TH,
[MILL_NOTIP]
0=sr,TH,
[MORTISE_STD]