Compare commits

...

137 Commits

Author SHA1 Message Date
andrea.villa b2c2f4819b Tolti i 100mm aggiuntivi al calcolo ZMAX 2024-10-08 10:30:20 +02:00
andrea.villa e06f67b22a Modifica gestione primo movimento di approccio al pezzo 2024-10-08 09:35:13 +02:00
andrea.villa 24cbfe0737 - Aggiunta collisione magazzino motosega ONE
- Piccole migliorie ai movimenti
2024-09-13 15:17:52 +02:00
andrea.villa 6df44b4a74 Merge remote-tracking branch 'origin/develop' 2024-09-13 11:25:32 +02:00
andrea.villa 2d43a594d1 - Migliorato calcolo chiusura paratia rulli con aggiornamento lunghezza della barra in caso di ultimo taglio e grezzo residuo in coda
- Corretto movimento a Y di sicurezza con lama
2024-09-13 11:25:19 +02:00
andrea.villa 5cb0055dc9 Migliorato calcolo chiusura paratia rulli con aggiornamento lunghezza della barra in caso di ultimo taglio e grezzo residuo in coda 2024-09-12 12:41:25 +02:00
andrea.villa e33a6c163e Merge branch 'main' into develop 2024-09-02 10:06:30 +02:00
andrea.villa 171ff119b0 Merge remote-tracking branch 'origin/develop' 2024-09-02 10:06:17 +02:00
andrea.villa 8733ed4007 Commit per versione 2024-09-02 10:05:35 +02:00
andrea.villa c650b259ff In preselezione. Se lavorazione motosega, non mando a parcheggio altra testa con utensile precedente, perchè subito dopo viene chiamata preselezione 2024-08-09 16:34:51 +02:00
andrea.villa c74ff69f55 Quando si aprono i rulli, se la trave non può seguire i rulli perchè la pinza andrebbe in extra-corsa, si sposta comunque la pinza fino al massimo della sua corsa. 2024-08-07 14:24:08 +02:00
andrea.villa 64bbe6947f Merge branch 'main' into develop 2024-08-07 10:06:18 +02:00
andrea.villa a3ad415f3e Merge remote-tracking branch 'origin/develop' 2024-08-07 10:05:47 +02:00
andrea.villa 382736ae14 Commit per versione 2024-08-07 10:05:38 +02:00
andrea.villa b7be5c1b2a Allineata simulazione a generazione in primo movimento rapido approccio al pezzo 2024-08-01 14:57:05 +02:00
andrea.villa 67c6573974 Merge branch 'main' into develop 2024-08-01 12:54:44 +02:00
andrea.villa 85fbb5830d Merge remote-tracking branch 'origin/develop' 2024-08-01 12:54:39 +02:00
andrea.villa 5b3d0e897f Commit per versione 2024-08-01 12:54:25 +02:00
andrea.villa 8a4bbff20b Corretto segno posizione X di sicurezza per rotazione assi rotanti 2024-08-01 09:22:17 +02:00
andrea.villa 6e799468ae Merge remote-tracking branch 'origin/main' into develop 2024-07-31 17:17:30 +02:00
andrea.villa 524bbb1edc Tolto stato finale paratia carico 2024-07-31 17:16:47 +02:00
andrea.villa 7fa71a1002 Merge remote-tracking branch 'origin/main' into develop 2024-07-31 15:22:58 +02:00
andrea.villa 03218233f7 Piccola correzione segni quote parcheggio 2024-07-31 15:22:19 +02:00
andrea.villa 8a3d1e05f6 Merge remote-tracking branch 'origin/main' into develop 2024-07-31 10:56:27 +02:00
andrea.villa 009216d59c Merge branch 'develop' 2024-07-31 10:56:01 +02:00
andrea.villa 20b54428f8 Commit per versione 2024-07-31 10:55:49 +02:00
andrea.villa 492af68caf Merge branch 'SpecialMoveHighPieces' into develop 2024-07-31 10:53:50 +02:00
andrea.villa e6e37c6c51 Merge branch 'AdjustClampAfterRotation' into develop 2024-07-31 10:53:28 +02:00
andrea.villa 9cffde0047 Parcheggio pinza e paratia lato scarico in linea precedente al movimento con EA86. Non è ottimizzato, ma non siamo sicuri che con EA86 si riesca a comandare anche il lato scarico. 2024-07-31 10:29:57 +02:00
andrea.villa 5af712e8a9 In ultimo movimento pre-rotazione, quando si manda a parcheggio pinza 1, vengono sempre parcheggiate anche morsa 2 e paratia scarico. Ripristinato il carico che comanda solo pinza 1 2024-07-31 10:06:44 +02:00
andrea.villa 91d5656a3d Merge remote-tracking branch 'origin/develop' into SpecialMoveHighPieces 2024-07-30 14:43:00 +02:00
andrea.villa c05b8a4117 Modifica limite inferirore intervallo di pinzaggio per garantire, se possibile, il passaggio pezzo a pinza 2 2024-07-30 14:41:54 +02:00
andrea.villa 824cf6eda2 Tolto offset aggiuntivo fatto per pezzi a caduta, ma creava tanti riposizionamenti extra. 2024-07-29 14:59:14 +02:00
andrea.villa f1262e191f Merge branch 'GenPlaneOnFirstArc' into develop 2024-07-29 14:57:20 +02:00
andrea.villa 343298e87f Viene ripristinato il tipo di arco corretto 2024-07-29 09:53:59 +02:00
andrea.villa 49951262c9 Al carico si deve sempre scrivere ET1, anche se si comandano due pinze 2024-07-29 09:32:32 +02:00
andrea.villa be109120f1 Gestione creazione piano generico in caso il primo movimento della lavorazione sia un arco. 2024-07-29 09:31:14 +02:00
andrea.villa f677ef6213 Gestione movimenti speciali per pezzi molto alti. Se HomeZ < primo punto lavorazione, allora vado al punto Z lavorazione prima di approcciare il pezzo in X. 2024-07-25 11:43:21 +02:00
andrea.villa dfb5952a85 Corretta scrittura ISO per parcheggiare morsa 3 dopo ribaltamento 2024-07-25 08:55:57 +02:00
andrea.villa cdbb04441b Se motosega allineata ad asse B per tagli di fianco, corretto movimento che manda testa a parcheggio. Pezzi più alti di 650 va solo in Zmax. 2024-07-23 10:33:46 +02:00
andrea.villa 5620e2b9e5 Merge remote-tracking branch 'origin/main' into develop 2024-07-19 16:43:32 +02:00
andrea.villa 9b99aa2a40 Merge remote-tracking branch 'origin/develop' 2024-07-19 16:43:15 +02:00
andrea.villa 97ae764439 Commit per versione 2.6g4 2024-07-19 16:43:00 +02:00
andrea.villa 566bb9e592 Aumentato numero iterazioni per scambio carrelli (da 5 a 10), per pezzi lunghi 30m. 2024-07-19 10:23:24 +02:00
andrea.villa 9948a9cfeb Merge remote-tracking branch 'origin/main' into develop 2024-07-17 15:57:34 +02:00
andrea.villa 8901acb95a Correzione modifica precedente (2.6g2). Con lama precedente e motosega successiva, andava a parcheggio con lama alla quota della motosega. 2024-07-17 15:57:15 +02:00
andrea.villa 74d58029a5 Merge branch 'main' into develop 2024-07-16 07:58:48 +02:00
andrea.villa f25aecf62a Merge branch 'develop' 2024-07-16 07:58:32 +02:00
andrea.villa 3d4246e540 Commit per versione 2.6g2 2024-07-16 07:58:18 +02:00
andrea.villa dad97ad557 Per preselezione o movimenti in home, non si scrive più 'ET0' perchè non è più supportato 2024-07-12 15:12:42 +02:00
andrea.villa 6c84aacd5a Merge remote-tracking branch 'origin/main' into develop 2024-07-10 15:57:54 +02:00
andrea.villa 3cd9d39aa0 Se prima lavorazione con motosega, dopo G151 di attesa carrelli si ribadiscono tutti gli assi. Sistemati tutti i casi 2024-07-10 15:57:32 +02:00
andrea.villa 77bb66d8d6 Merge branch 'main' into develop 2024-07-10 15:54:22 +02:00
andrea.villa a3b714f790 Se prima lavorazione con motosega, dopo G151 di attesa carrelli si ribadiscono tutti gli assi. 2024-07-10 15:54:07 +02:00
andrea.villa 929e1308a9 Merge branch 'main' into develop 2024-06-03 12:21:24 +02:00
andrea.villa 37d98a4324 Merge branch 'develop' 2024-06-03 12:21:07 +02:00
andrea.villa f3890dc20f Versione 2.6f1 2024-06-03 12:20:53 +02:00
andrea.villa 8bd92a578b Versione 2.6f1 2024-06-03 12:20:35 +02:00
andrea.villa 37b9eb3a9b Aggiunta possibilità di scrivere nome utensile doppio anche in lavorazione con parametro "TOOLDOUBLE". Note sulla lavorazione hanno precedenza su note utensile 2024-05-24 11:53:45 +02:00
andrea.villa ac09d872eb Merge branch 'main' into develop 2024-04-30 17:06:27 +02:00
andrea.villa 047669d63f Merge branch 'develop' 2024-04-30 17:06:16 +02:00
andrea.villa fcaeb8530b Gestione facoltativa parametro WOOD_DENSITY settabile in Ts3. In MLDE, mettere il valore di WOOD_DENSITY nella nostra variabile 'WoodDensity' 2024-04-30 17:06:08 +02:00
andrea.villa d174f8b79f In log collisioni, si scrive anche ID del gruppo 2024-04-22 10:42:17 +02:00
andrea.villa 621a31e283 Chiamando la macchina con un nome che termini con '.TEST' si abilita come macchina per test interni 2024-04-15 12:46:43 +02:00
andrea.villa acdc1cfce6 Merge branch 'main' into develop 2024-04-12 08:44:41 +02:00
andrea.villa 8d162200b1 Aggiornato file versione 2024-04-12 08:44:11 +02:00
andrea.villa 59e132478d Merge branch 'develop' 2024-04-12 08:43:15 +02:00
andrea.villa 62aefca5c8 Aggiunta variabile 'ForceToCloseRollersGate' per agevolare scambio pinze con pezzi storti 2024-04-09 09:35:05 +02:00
andrea.villa 530f70de94 Merge branch 'main' into develop 2024-03-28 12:21:37 +01:00
andrea.villa 04a2d35872 Merge branch 'develop' 2024-03-28 12:21:25 +01:00
andrea.villa edf7a29dfb Corretto movimento in simulazione se motosega su testa 2 2024-03-28 12:21:17 +01:00
andrea.villa 2edcbf52ad Rimosso da generazione funzione GetNextTool duplicata
- Se fase successiva start di un altro pezzo,  forza movimento home per utensili speciali
- Aggiunto parametro 'IS_TEST_MACHINE'
2024-03-28 10:35:33 +01:00
andrea.villa 0fa2ea3c67 Merge branch 'main' into develop 2024-03-26 15:08:15 +01:00
andrea.villa 9789092791 Merge branch 'develop' 2024-03-26 15:08:08 +01:00
andrea.villa bdd4cc17a4 In 'PreparePostRotation' si resetta sempre anche la paratia in uscita 2024-03-26 15:08:01 +01:00
andrea.villa b14b3bfc26 Corretta gestione cambio utensile con motosega. In alcuni casi non era coerente con generazione. 2024-03-26 08:07:44 +01:00
andrea.villa c77d354a5c Merge branch 'main' into develop 2024-03-22 07:44:12 +01:00
andrea.villa a47cb7d9be Merge branch 'develop' 2024-03-22 07:44:07 +01:00
andrea.villa fca293d3db Aggiornamento file per versione 2024-03-22 07:43:59 +01:00
andrea.villa 1d4f262aef Miglioramento visualizzazione spigoli VMILL alla fine della simulazione 2024-03-12 14:48:18 +01:00
andrea.villa cc299918f6 Merge branch 'main' into develop 2024-03-11 09:37:32 +01:00
andrea.villa 4e390c3eea Merge branch 'develop' 2024-03-11 09:37:20 +01:00
andrea.villa 63452aa0d5 Aggiunto parametro "WriteM05Command" (NON OBBLIGATORIO) per decidere se scrivere il comando M05 2024-03-11 09:37:00 +01:00
andrea.villa 0f78c5186f Aggiunta gestione parametro "SECDIST" 2024-03-11 09:01:40 +01:00
andrea.villa 55c72bf40c Merge branch 'main' into develop 2024-03-08 13:10:45 +01:00
andrea.villa c2d4c7166c Gestione rotazioni 90° come su FAST, caso MID2 2024-03-08 13:10:35 +01:00
andrea.villa 5470f2dbbb Merge branch 'main' into develop 2024-03-07 13:04:20 +01:00
andrea.villa fe1e3b1550 - Se cambiato utensile, si aprono sempre paratie
- Spostato salvataggio dati utensile precedente in MachiningEnd
2024-03-07 13:04:10 +01:00
andrea.villa 3ab4e8326a Merge branch 'main' into develop 2024-03-07 10:44:02 +01:00
andrea.villa f743ebdcf5 Merge branch 'develop' 2024-03-07 10:43:52 +01:00
andrea.villa 0ec16e7f4c Aggiornati messaggi e versione 2024-03-07 10:43:22 +01:00
andrea.villa 80a9bc337e Per ribaltamento, i comandi si differenziano per macchina 2024-03-07 10:39:11 +01:00
andrea.villa 399e239d93 Merge branch 'main' into develop 2024-03-06 17:28:50 +01:00
andrea.villa 4383459661 Piccola correzione movimento Z-MAX lama (no aggiornamento versione) 2024-03-06 17:28:32 +01:00
andrea.villa ba8f960e4f Merge branch 'main' into develop 2024-03-06 16:17:29 +01:00
andrea.villa 1f5b334bfb Merge branch 'develop' 2024-03-06 16:17:20 +01:00
andrea.villa 600dc8ff8b Modifica movimento a Z-MAX con lama. Home solo se cambia utensile 2024-03-06 10:15:00 +01:00
luca.mazzoleni 332cff04dc Merge branch 'main' into develop 2024-03-05 12:18:38 +01:00
luca.mazzoleni eb0a32eab4 Merge branch 'develop' 2024-03-05 12:18:14 +01:00
luca.mazzoleni bda944cf0a Aggiunta variabile FACOLTATIVA 'EstimationRapidMultiplier' in mlde per regolare il tempo stimato di rapido su macchine vecchie. Se non presente default 1. 2024-03-05 11:41:01 +01:00
andrea.villa edeb12fd51 Merge branch 'main' into develop 2024-03-04 10:56:43 +01:00
andrea.villa 7064857ff2 Merge branch 'develop' 2024-03-04 10:56:35 +01:00
andrea.villa 1c25c71da0 Aggiunta variabile 'MACH_NAME' in MLDE con nome macchina 2024-03-04 10:56:27 +01:00
andrea.villa 2089e50c5e Merge branch 'main' into develop 2024-02-29 09:38:54 +01:00
andrea.villa 0dee81a170 Aggiornamento versione 2024-02-29 09:38:42 +01:00
andrea.villa fd2ae40d50 Merge branch 'main' into develop 2024-02-29 09:36:53 +01:00
andrea.villa b9914e0d2f Merge branch 'develop' 2024-02-29 09:36:46 +01:00
andrea.villa a348800d87 Gestione rimozione VMILL per tagli a cubetti Zig-Zag 2024-02-29 09:36:35 +01:00
luca.mazzoleni 2478117e49 Merge branch 'main' into develop 2024-02-26 17:58:44 +01:00
luca.mazzoleni c8e2a76964 Merge branch 'develop' 2024-02-26 17:58:19 +01:00
luca.mazzoleni 3e8874907f - EgtAddToPackagePath spostato in mlde
- sistemato updatelog
- rimosse chiamate a EgtGetSourceDir e sostituite con EgtGetCurrMachineDir
2024-02-26 16:57:59 +01:00
andrea.villa 8a2954c6fe Merge branch 'main' into develop 2024-02-20 11:47:33 +01:00
andrea.villa 701a803eeb Merge branch 'develop' 2024-02-20 11:47:18 +01:00
andrea.villa c7ba99b94a - Aggiunta funzioni "OnSimulInit" e "OnSimulExit"
- "BeamData" caricato come libreria con 'require'
- In "GetMovesInAuxCmd" si passa la posizione calcolata V1 indipendentemente dall'utilizzo
2024-02-20 11:46:25 +01:00
andrea.villa b44dfb952d Corretto emissione movimenti per macchine con motosega su testa 2 2024-02-19 12:51:21 +01:00
andrea.villa 5a65152212 Correto emissione movimenti per macchine con motosega su testa 2 2024-02-19 12:23:54 +01:00
andrea.villa 768cc2f099 Corretto controllo calcolo Z su primo movimento lama, allineato a generazione 2024-02-19 11:57:40 +01:00
andrea.villa 5c77772f3c Merge branch 'main' into develop 2024-02-12 11:49:20 +01:00
andrea.villa 8fb7138855 Merge branch 'develop' 2024-02-12 11:49:10 +01:00
andrea.villa f7fa43e849 Per movimento con motosega, si ribadiscono tutti gli assi nella prima G141 2024-02-12 11:48:59 +01:00
andrea.villa 728dfa48c6 Merge branch 'main' into develop 2024-02-07 08:15:49 +01:00
andrea.villa c60570be6e Merge branch 'develop' 2024-02-07 08:15:40 +01:00
andrea.villa ce73fe9d1b - Modificata gestione movimenti motosega, in aggiunta con caso particolare di pezzo alto più di 650mm
- Caricamento BeamData come local
2024-02-07 08:15:19 +01:00
andrea.villa 281f14667f - Aggiornato UpdateLog 2024-01-29 17:00:18 +01:00
andrea.villa dc91813d5a - se la lavorazione è un taglio di separazione, se necessario, ripristino posizione di Y1DELTA prima di aprire i rulli 2024-01-29 16:57:38 +01:00
andrea.villa 193c0911b4 - Corretta simulazione movimento in X-Home, coerente con generazione
- Aggiunta lettura parametro 'Split'
2024-01-29 15:49:48 +01:00
andrea.villa 4bbc00b181 Merge branch 'main' into develop 2024-01-26 15:29:58 +01:00
andrea.villa 94095e79a6 Merge branch 'develop' 2024-01-26 15:29:41 +01:00
andrea.villa c3a61b1433 Migliorato calcolo dimensioni grezzo per apertura rulli in caso di 'precut' 2024-01-26 15:29:28 +01:00
andrea.villa 1555d809df Merge branch 'main' into develop 2024-01-24 16:36:27 +01:00
andrea.villa 08cde3ae2c Merge branch 'develop' 2024-01-24 16:36:03 +01:00
andrea.villa 86665b87d8 Aggiunto solido collisione lama sotto traversa (per PF-progress) 2024-01-24 16:35:51 +01:00
andrea.villa 524bfc43e1 - Se pezzo tenuto solo con pinza destra non si esclude la rulliera di sinistra
- Correzione gestione apertura/chiusura rulli sul fine barra e in generale (da PF1250)
2024-01-23 15:22:25 +01:00
andrea.villa 69bc812e35 Merge branch 'main' into develop 2024-01-23 11:26:06 +01:00
andrea.villa 41e6ab02e3 Merge branch 'develop' 2024-01-23 11:25:43 +01:00
andrea.villa 50aa503f3a Corretto gestione del movimento precedente all'ultimo che manda il pezzo alla posizione di scarico 2024-01-23 11:25:21 +01:00
andrea.villa 78527ac703 Merge branch 'main' into develop 2024-01-09 12:39:08 +01:00
5 changed files with 1060 additions and 399 deletions
+489 -224
View File
File diff suppressed because it is too large Load Diff
+369 -135
View File
@@ -6,12 +6,15 @@
require( 'EmtGenerator') require( 'EmtGenerator')
EgtEnableDebug( false) EgtEnableDebug( false)
-- Carico libreria
local BD = require( 'BeamData')
--------------------------------------------------------------------- ---------------------------------------------------------------------
-- *** GENERATION *** -- *** GENERATION ***
--------------------------------------------------------------------- ---------------------------------------------------------------------
local sBaseDir = EgtGetSourceDir() local sBaseDir = EgtGetCurrMachineDir()
if NumericalControl == 'NUM' or NumericalControl == 'NUM_FLEX' then if NumericalControl == 'NUM' or NumericalControl == 'NUM_FLEX' then
dofile( sBaseDir .. 'Common_ONE-PF.NUM.mlpe') dofile( sBaseDir .. '\\Common_ONE-PF.NUM.mlpe')
elseif NumericalControl == 'TPA' then elseif NumericalControl == 'TPA' then
error( 'Numerical Control error : TPA not yet managed') error( 'Numerical Control error : TPA not yet managed')
else else
@@ -23,6 +26,45 @@ end
--------------------------------------------------------------------- ---------------------------------------------------------------------
local COLL_SAFE_DIST = 4 local COLL_SAFE_DIST = 4
---------------------------------------------------------------------
function OnSimulInit()
-- se macchina con carico destro, imposto offset direzioni di vista standard
if BD.RIGHT_LOAD then
local nOrigViewOffs = EgtGetViewOrizzOffsStep()
local dOrigViewAngV, dOrigViewAngH = EgtGetGenericView()
if nOrigViewOffs ~= 2 then
EgtSetViewOrizzOffsStep( 2)
if dOrigViewAngV < 0.1 then
EgtSetView( SCE_VD.TOP, false)
elseif dOrigViewAngV > 179.9 then
EgtSetView( SCE_VD.BOTTOM, false)
else
local dViewAngH = dOrigViewAngH + EgtIf( dOrigViewAngH > 180, 2 * 90, 0)
EgtSetGenericView( dOrigViewAngV, dViewAngH, false)
end
end
end
end
---------------------------------------------------------------------
function OnSimulExit()
-- se macchina con carico destro, annullo offset direzioni di vista standard
if BD.RIGHT_LOAD then
local nOrigViewOffs = EgtGetViewOrizzOffsStep()
local dOrigViewAngV, dOrigViewAngH = EgtGetGenericView()
if nOrigViewOffs == 2 then
EgtSetViewOrizzOffsStep( 0)
if dOrigViewAngV < 0.1 then
EgtSetView( SCE_VD.TOP, false)
elseif dOrigViewAngV > 179.9 then
EgtSetView( SCE_VD.BOTTOM, false)
else
EgtSetGenericView( dOrigViewAngV, dOrigViewAngH - 2 * 90, false)
end
end
end
end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function OnSimulStart() function OnSimulStart()
-- controllo versione programma -- controllo versione programma
@@ -77,8 +119,10 @@ function OnSimulStart()
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TRAV'}, { Grp = 'Base', Sub = 'COLLISION', Name = 'TRAV'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'COL1'}, { Grp = 'Base', Sub = 'COLLISION', Name = 'COL1'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'COL2'}, { Grp = 'Base', Sub = 'COLLISION', Name = 'COL2'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TC1'},
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TC2'},
{ Grp = 'Base', Sub = 'BELT', Name = 'COLLISION'}} { Grp = 'Base', Sub = 'BELT', Name = 'COLLISION'}}
-- gruppo CHSAW si attiva solo se progress, one con BIT ortiser o PF -- gruppo CHSAW si attiva solo se progress, one con BIT mortiser o PF
if Progress or Mortiser or EgtGetHeadId( 'H21') then if Progress or Mortiser or EgtGetHeadId( 'H21') then
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW'}) table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW'})
end end
@@ -86,6 +130,15 @@ function OnSimulStart()
if Mortiser and EgtGetHeadId( 'H21') then if Mortiser and EgtGetHeadId( 'H21') then
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'MORTISER'}) table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'MORTISER'})
end end
-- se Progress si attiva magazzino lama sotto traversa
if Progress and EgtGetHeadId( 'H21') then
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'SAW1'})
end
-- se non è Progress ed è una ONE, aggiungo collisioni magazzino speciale
if not Progress and not EgtGetHeadId( 'H21') then
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'MTC'})
end
if Clamp5 then if Clamp5 then
table.insert( McdData, { Grp = 'W', Sub = 'COLLISION', Name = 'STM1'}) table.insert( McdData, { Grp = 'W', Sub = 'COLLISION', Name = 'STM1'})
table.insert( McdData, { Grp = 'W', Sub = 'COLLISION', Name = 'STM2'}) table.insert( McdData, { Grp = 'W', Sub = 'COLLISION', Name = 'STM2'})
@@ -105,7 +158,7 @@ function OnSimulStart()
local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId, McdData[i].Sub), McdData[i].Name) local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId, McdData[i].Sub), McdData[i].Name)
if nId then if nId then
table.insert( EMT.MCODET, nId) table.insert( EMT.MCODET, nId)
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is ok', 4) EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' (' .. tostring( nId) .. ') is ok', 4)
else else
nMcdNullCnt = nMcdNullCnt + 1 nMcdNullCnt = nMcdNullCnt + 1
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4) EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4)
@@ -271,6 +324,9 @@ function OnSimulDispositionStart()
EMT.LB = b3Bar:getDimX() EMT.LB = b3Bar:getDimX()
EMT.LR = b3Raw:getDimX() EMT.LR = b3Raw:getDimX()
EMT.LT = b3Part:getDimX() EMT.LT = b3Part:getDimX()
if b3Part:getMin() then
EMT.XMINT = b3Part:getMin():getX() + ( EgtGetAxisPos( 'T') - EgtGetAxisHomePos( 'T'))
end
EMT.HOVM = EgtGetInfo( nPartRawId or GDB_ID.NULL, 'HOVM', 'd') or 0 EMT.HOVM = EgtGetInfo( nPartRawId or GDB_ID.NULL, 'HOVM', 'd') or 0
EMT.CUTID = EgtGetInfo( PartId or GDB_ID.NULL, 'CUTID', 'i') or 0 EMT.CUTID = EgtGetInfo( PartId or GDB_ID.NULL, 'CUTID', 'i') or 0
EMT.Y1SPEC = nil EMT.Y1SPEC = nil
@@ -309,7 +365,6 @@ function OnSimulDispositionStart()
if EMT.VMILL and #EMT.VMILL > 0 then if EMT.VMILL and #EMT.VMILL > 0 then
EgtSetStatus( EMT.SCRAP or GDB_ID.NULL, GDB_ST.OFF) EgtSetStatus( EMT.SCRAP or GDB_ID.NULL, GDB_ST.OFF)
end end
-- se altrimenti fasi intermedia o finale speciali, aggancio primo grezzo alla tavola e gli altri in posizione pre-carico -- se altrimenti fasi intermedia o finale speciali, aggancio primo grezzo alla tavola e gli altri in posizione pre-carico
elseif IsMid2Phase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then elseif IsMid2Phase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then
-- se cambiata giacitura, lo segnalo -- se cambiata giacitura, lo segnalo
@@ -404,6 +459,21 @@ function OnSimulDispositionEnd()
EMT.FALL = false EMT.FALL = false
EMT.TO_FALL = false EMT.TO_FALL = false
end end
-- se disposizione intermedia
if IsMidPhase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then
-- se le rotazioni delle fasi corrente e precedente sono diverse
if GetPhaseRot( EMT.PHASE) ~= GetPhaseRot( EMT.PHASE - 1) then
-- imposto stato post-rotazione
EMT.POSTROT = true
end
-- se altrimenti disposizione intermedia speciale con eventuale rotazione
elseif IsMid2Phase( EMT.PHASE) then
-- se le rotazioni delle fasi corrente e precedente sono diverse
if GetPhaseRot( EMT.PHASE) ~= GetPhaseRot( EMT.PHASE - 1) then
-- imposto stato post-rotazione
EMT.POSTROT = true
end
end
EMT.SPLIT = false EMT.SPLIT = false
EMT.SPECSPLIT = false EMT.SPECSPLIT = false
EMT.TO_SPECSPLIT = false EMT.TO_SPECSPLIT = false
@@ -416,6 +486,7 @@ function OnSimulToolSelect( dPosA)
EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE) EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN) EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN)
EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
EMT.TDIAM = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES) EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
local nSetHead = GetHeadSet( EMT.HEAD) local nSetHead = GetHeadSet( EMT.HEAD)
-- se ho due teste, verifico che l'altra sia dalla parte opposta -- se ho due teste, verifico che l'altra sia dalla parte opposta
@@ -443,6 +514,8 @@ function OnSimulToolSelect( dPosA)
EgtSetAxisPos( 'C1', MyParkCSawC1) EgtSetAxisPos( 'C1', MyParkCSawC1)
EgtSetAxisPos( 'B1', ParkCSawB1) EgtSetAxisPos( 'B1', ParkCSawB1)
EgtSetAxisPos( 'X1', ParkCSawX1) EgtSetAxisPos( 'X1', ParkCSawX1)
-- l'utensile viene caricato qui, quindi setto come già cambiato
EMT.PREVHEAD_H1 = EMT.HEAD
else else
-- imposto home dell'asse C2 (A=0 -> T111, A=-90 -> T112) -- imposto home dell'asse C2 (A=0 -> T111, A=-90 -> T112)
local MyParkCSawC2 = GetChainSawCHomeFromVirtualAxis( dPosA) local MyParkCSawC2 = GetChainSawCHomeFromVirtualAxis( dPosA)
@@ -450,6 +523,8 @@ function OnSimulToolSelect( dPosA)
EgtSetAxisPos( 'C2', MyParkCSawC2) EgtSetAxisPos( 'C2', MyParkCSawC2)
EgtSetAxisPos( 'B2', ParkCSawB2) EgtSetAxisPos( 'B2', ParkCSawB2)
EgtSetAxisPos( 'X2', ParkCSawX2) EgtSetAxisPos( 'X2', ParkCSawX2)
-- l'utensile viene caricato qui, quindi setto come già cambiato
EMT.PREVHEAD_H2 = EMT.HEAD
end end
-- Imposto visualizzazione -- Imposto visualizzazione
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD) EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
@@ -504,13 +579,6 @@ function OnSimulToolDeselect( dPrevA)
end end
elseif HeadIsChainSaw( EMT.PREVHEAD_H2) then elseif HeadIsChainSaw( EMT.PREVHEAD_H2) then
-- simulo movimento -- simulo movimento
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
local CurrX2 = EgtGetAxisPos( 'X2')
if CurrX2 < SafeCSaw0X2 then
SimulMoveAxis( 'X2', SafeCSaw0X2, MCH_SIM_STEP.RAPID)
end
SimulMoveAxis( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID)
end
SimulMoveAxis( 'X2', ParkCSawX2, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'X2', ParkCSawX2, MCH_SIM_STEP.RAPID)
local dMyParkC = EgtGetAxisHomePos( 'C2') local dMyParkC = EgtGetAxisHomePos( 'C2')
if dPrevA then dMyParkC = GetChainSawCHomeFromVirtualAxis( dPrevA) end if dPrevA then dMyParkC = GetChainSawCHomeFromVirtualAxis( dPrevA) end
@@ -594,10 +662,10 @@ function OnSimulToolDeselect( dPrevA)
-- se devo scaricare un utensile normale -- se devo scaricare un utensile normale
else else
local nSetHead = GetHeadSet( EMT.HEAD) local nSetHead = GetHeadSet( EMT.HEAD)
if nSetHead == 1 then if nSetHead == 1 and EMT.PREVHEAD_H1 then
local MyParkX1 = EgtIf( GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC1', ParkX1, ParkFrnX1) local MyParkX1 = EgtIf( GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC1', ParkX1, ParkFrnX1)
SimulMoveAxis( 'X1', MyParkX1, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'X1', MyParkX1, MCH_SIM_STEP.RAPID)
else elseif EMT.PREVHEAD_H2 then
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
end end
end end
@@ -683,23 +751,13 @@ function OnSimulMachiningStart()
end end
-- salvo dati utensile -- salvo dati utensile
local nSetHead = GetHeadSet( EMT.HEAD) local nSetHead = GetHeadSet( EMT.HEAD)
-- per gruppo testa 1
if nSetHead == 1 then
EMT.PREVTOOL_H1 = EMT.TOOL
EMT.PREVHEAD_H1 = EMT.HEAD
EMT.PREVTCPOS_H1 = EMT.TCPOS
-- per gruppo testa 2
elseif nSetHead == 2 then
EMT.PREVTOOL_H2 = EMT.TOOL
EMT.PREVHEAD_H2 = EMT.HEAD
EMT.PREVTCPOS_H2 = EMT.TCPOS
end
-- recupero alcuni dati della lavorazione -- recupero alcuni dati della lavorazione
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID) EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE) EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE)
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) or '' EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
EMT.VMRS = ( EMT.MCHTYPE ~= MCH_MY.DRILLING and not EMT.MCHUSERNOTES:find( 'VMRS=0;', 1, true)) EMT.VMRS = ( EMT.MCHTYPE ~= MCH_MY.DRILLING and not EMT.MCHUSERNOTES:find( 'VMRS=0;', 1, true))
EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil) EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil)
EMT.MCHPRECUT = ( EMT.MCHUSERNOTES:find( 'Precut;', 1, true) ~= nil)
-- recupero TASKID della feature lavorata -- recupero TASKID della feature lavorata
local vId = EgtGetMachiningGeometry() local vId = EgtGetMachiningGeometry()
if vId and #vId > 0 and #vId[1] > 0 then if vId and #vId > 0 and #vId[1] > 0 then
@@ -743,7 +801,7 @@ function OnSimulMachiningStart()
local bAgg = EgtExistsInfo( EMT.PATHID, 'CNT') local bAgg = EgtExistsInfo( EMT.PATHID, 'CNT')
ExecParkRoller( nil, nil, nil, nil, false, bAgg) ExecParkRoller( nil, nil, nil, nil, false, bAgg)
-- eseguo -- eseguo
SimulMoveAxes( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
@@ -768,6 +826,23 @@ function OnSimulMachiningEnd()
if EMT.DOU_TYPE and not EMT.ZMAX then EMT.DOU_TO_ZMAX = true end if EMT.DOU_TYPE and not EMT.ZMAX then EMT.DOU_TO_ZMAX = true end
EMT.DOU_TYPE = nil EMT.DOU_TYPE = nil
EMT.DOU_TOOL = nil EMT.DOU_TOOL = nil
-- salvo dati utensile
local nSetHead = GetHeadSet( EMT.HEAD)
-- se non ho già tolto la sega a catena, aggiorno valori
if not EMT.CHSAW_OUT then
-- per gruppo testa 1
if nSetHead == 1 then
EMT.PREVTOOL_H1 = EMT.TOOL
EMT.PREVHEAD_H1 = EMT.HEAD
EMT.PREVTCPOS_H1 = EMT.TCPOS
-- per gruppo testa 2
elseif nSetHead == 2 then
EMT.PREVTOOL_H2 = EMT.TOOL
EMT.PREVHEAD_H2 = EMT.HEAD
EMT.PREVTCPOS_H2 = EMT.TCPOS
end
end
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
@@ -781,20 +856,27 @@ function OnSimulPathStart()
EMT.TO_SPECSPLIT = true EMT.TO_SPECSPLIT = true
end end
end end
-- se taglio di precut verifico quanto è più lungo il grezzo rispetto al pezzo (non tiene conto dell'ultimo cubetto)
EMT.DELTA_LT = 0
if EMT.MCHPRECUT then
local dCosA = sqrt( max( 1 - EMT.EXTR[1] * EMT.EXTR[1], 0))
EMT.DELTA_LT = max( EMT.XMINT - Point3d( EMT.MMAX):getX() - dCosA * EMT.TDIAM / 2, 0)
EgtOutLog( 'PreCutDeltaLT='..EgtNumToString( EMT.DELTA_LT, 3), 5)
end
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function OnSimulPathEnd() function OnSimulPathEnd()
-- rimozione sfridi -- rimozione sfridi
RemoveScraps() ExecRemoveScraps()
-- se non ci sono comandi ausiliari associati e richiesta risalita a Zmax -- se non ci sono comandi ausiliari associati e richiesta risalita a Zmax
if EMT.AUXTOT == 0 and EMT.TO_ZMAX then if EMT.AUXTOT == 0 and EMT.TO_ZMAX then
if EMT.MCHSPLIT and not EMT.TO_FALL and not EMT.TO_SPECSPLIT then if EMT.MCHSPLIT and not EMT.TO_FALL and not EMT.TO_SPECSPLIT then
EMT.SPLIT_Y1DELTA = EMT.Y1DELTA EMT.SPLIT_Y1DELTA = EMT.Y1DELTA
EMT.Y1DELTA = nil EMT.Y1DELTA = nil
SetPY1Light( false) ExecMovePY1( false)
end end
ExecMoveZmax( EMT.MCHSPLIT) ExecMoveZmax( EMT.MCHSPLIT, false)
EMT.TO_ZMAX = nil EMT.TO_ZMAX = nil
end end
end end
@@ -802,22 +884,22 @@ end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function OnSimulPathStartAux() function OnSimulPathStartAux()
-- eseguo il comando -- eseguo il comando
ExecAuxCmd( EMT.AUX) ExecAuxCmd( EMT.AUX, true)
-- se ultimo comando e lavorazione di split, sgancio il carro Y1 -- se ultimo comando e lavorazione di split, sgancio il carro Y1
if EMT.AUXIND == EMT.AUXTOT and EMT.MCHSPLIT and not EMT.TO_SPECSPLIT and not EMT.TO_FALL then if EMT.AUXIND == EMT.AUXTOT and EMT.MCHSPLIT and not EMT.TO_SPECSPLIT and not EMT.TO_FALL then
EMT.SPLIT_Y1DELTA = EMT.Y1DELTA EMT.SPLIT_Y1DELTA = EMT.Y1DELTA
EMT.Y1DELTA = nil EMT.Y1DELTA = nil
SetPY1Light( false) ExecMovePY1( false)
end end
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function OnSimulPathEndAux() function OnSimulPathEndAux()
-- eseguo il comando -- eseguo il comando
ExecAuxCmd( EMT.AUX) ExecAuxCmd( EMT.AUX, false)
-- se ultimo comando e richiesta risalita a Zmax -- se ultimo comando e richiesta risalita a Zmax
if EMT.AUXIND == EMT.AUXTOT and EMT.TO_ZMAX then if EMT.AUXIND == EMT.AUXTOT and EMT.TO_ZMAX then
ExecMoveZmax( EMT.MCHSPLIT) ExecMoveZmax( EMT.MCHSPLIT, false)
EMT.TO_ZMAX = nil EMT.TO_ZMAX = nil
end end
end end
@@ -859,7 +941,8 @@ function OnSimulMoveStart()
local bParkV = false local bParkV = false
if EMT.MCHFIRST then if EMT.MCHFIRST then
-- se rulli più chiusi del richiesto o cambio direzione utensile (tranne solo asse B con C0 o equivalenti) devo mettere i rulli in parcheggio -- se rulli più chiusi del richiesto o cambio direzione utensile (tranne solo asse B con C0 o equivalenti) devo mettere i rulli in parcheggio
if V1Pos < EMT.V1NEXTPOS - 1 or V2Pos > EMT.V2NEXTPOS + 1 or RollerParkingNeeded( EMT.HEAD, EMT.R1p, EMT.R2p, EMT.R1, EMT.R2) then if V1Pos < EMT.V1NEXTPOS - 1 or V2Pos > EMT.V2NEXTPOS + 1 or RollerParkingNeeded( EMT.HEAD, EMT.R1p, EMT.R2p, EMT.R1, EMT.R2) or
( EMT.TOOL ~= EMT.PREVTOOL_H1 and EMT.TOOL ~= EMT.PREVTOOL_H2) then
bParkV = true bParkV = true
EMT.A3 = ParkV1 EMT.A3 = ParkV1
EMT.A4 = ParkV2 EMT.A4 = ParkV2
@@ -877,14 +960,24 @@ function OnSimulMoveStart()
VerifyY2Stroke( EMT.A2) VerifyY2Stroke( EMT.A2)
VerifyV1Stroke( EMT.A3) VerifyV1Stroke( EMT.A3)
VerifyV2Stroke( EMT.A4) VerifyV2Stroke( EMT.A4)
-- se devo subito parcheggiare i rulli -- se devo subito parcheggiare i rulli
local nRes = 0 local nRes = 0
if bParkV then if bParkV then
local bAgg = EgtExistsInfo( EMT.PATHID, 'CNT') local bAgg = EgtExistsInfo( EMT.PATHID, 'CNT')
-- se la lavorazione è un taglio di separazione, se necessario, ripristino posizione di Y1DELTA prima di aprire i rulli
if EMT.SPLIT_Y1DELTA and not EMT.MCHSPLIT then EMT.Y1DELTA = EMT.SPLIT_Y1DELTA end
nRes = ExecParkRoller( Y1Pos, Y2Pos, V1Pos, V2Pos, false, bAgg) nRes = ExecParkRoller( Y1Pos, Y2Pos, V1Pos, V2Pos, false, bAgg)
if EMT.SPLIT_Y1DELTA then EMT.Y1DELTA = nil end
end end
-- se movimento in rapido ad inizio lavorazione -- se movimento in rapido ad inizio lavorazione
if EMT.MOVE == 0 and EMT.MOVEIND <= 3 then if EMT.MOVE == 0 and EMT.MOVEIND <= 3 then
-- gestione speciale per pezzi molto alti. Se il movimento successivo è più alto del precedente, allora prendo il successivo
if EMT.L3s then
if EMT.L3s > EMT.L3 then
EMT.L3 = EMT.L3s
end
end
-- Dati -- Dati
local B1Pos = EgtGetAxisPos( 'B1') local B1Pos = EgtGetAxisPos( 'B1')
local B1Home = EgtGetAxisHomePos( 'B1') local B1Home = EgtGetAxisHomePos( 'B1')
@@ -899,20 +992,44 @@ function OnSimulMoveStart()
-- se movimento iniziale da Zmax con lama o fresa -- se movimento iniziale da Zmax con lama o fresa
if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
--EgtOutBox( 'Flag 2,1', 'Info Rapid') --EgtOutBox( 'Flag 2,1', 'Info Rapid')
local bMoveZbeforeX = false
local dZref = EMT.L3
if EMT.HEAD == 'H12' and ( EgtIf( BD.RIGHT_LOAD, -EMT.L2 < -LimX1RotSaw, -EMT.L2 > -LimX1RotSaw) or EMT.R2 < -91) then
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
end
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
if EMT.L3 > dZref then
bMoveZbeforeX = true
end
-- se vado in posizione speciale rotazione assi, poi devo ritornare alla X vera di lavoro
local dMoveXtoFinalPosition = false
local dXref = EMT.L2 local dXref = EMT.L2
if EMT.HEAD == 'H12' and -EMT.L2 < -LimX1PlRotSaw then if EMT.HEAD == 'H12' and -EMT.L2 < -LimX1PlRotSaw then
dXref = LimX1PlRotSaw dXref = LimX1PlRotSaw
SimulMoveAxis( 'X1', dXref, MCH_SIM_STEP.RAPID)
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2)
dMoveXtoFinalPosition = true
elseif not bMoveZbeforeX then
SimulMoveAxis( 'X1', dXref, MCH_SIM_STEP.RAPID)
else
SimulMoveAxis( 'X1', LimX1PlRotSaw, MCH_SIM_STEP.RAPID)
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2)
dMoveXtoFinalPosition = true
end end
SimulMoveAxis( 'X1', dXref, MCH_SIM_STEP.RAPID)
local dZref = EMT.L3
if EMT.HEAD == 'H12' and ( EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, EMT.L2 < -LimX1RotSaw, EMT.L2 > -LimX1RotSaw) or EMT.R2 < -91) then
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
end
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379") -- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then
SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
if bMoveZbeforeX then
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
end
if dMoveXtoFinalPosition then
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
end
-- caso standard -- caso standard
else else
SimulMoveAxis( 'Z1', dZref, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'Z1', dZref, MCH_SIM_STEP.RAPID)
@@ -935,18 +1052,18 @@ function OnSimulMoveStart()
EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( dPosA)) EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( dPosA))
EmtModifyAxisHome( 'B1', ParkCSawB1) EmtModifyAxisHome( 'B1', ParkCSawB1)
B1Home = EgtGetAxisHomePos( 'B1') B1Home = EgtGetAxisHomePos( 'B1')
C1Home = EgtGetAxisHomePos( 'C1')
Z1Home = EgtGetAxisHomePos( 'Z1') Z1Home = EgtGetAxisHomePos( 'Z1')
EMT.CHSAW_OUT = nil EMT.CHSAW_OUT = nil
end end
-- Porto la Z alla giusta quota -- se motosega configurata per lavorazioni di fianco o circa orizzontale
if Z1Pos > Z1Home + 1 and abs( B1Pos) > 89.9 then if dPosA == 0 or abs( EMT.R2) < 10 then
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID) SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'Z1', Z1Home, MCH_SIM_STEP.RAPID) SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
end -- se circa verticale
-- se movimento iniziale da Zmax else
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'Z1', Z1Home, MCH_SIM_STEP.RAPID, 'B1', B1Home, MCH_SIM_STEP.COLLROT, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
end end
end end
-- altrimenti testa 2 -- altrimenti testa 2
@@ -956,16 +1073,29 @@ function OnSimulMoveStart()
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' then if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' then
if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
--EgtOutBox( 'Flag 2,1', 'Info Rapid') --EgtOutBox( 'Flag 2,1', 'Info Rapid')
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID) local bMoveZbeforeX = false
local dZref = EMT.L3 local dZref = EMT.L3
if EMT.HEAD == 'H12' and ( -EMT.L2 < -LimX1RotSaw or EMT.R2 > 91) then if EMT.HEAD == 'H12' and ( -EMT.L2 < -LimX1RotSaw or EMT.R2 > 91) then
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2) - 100 dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
end end
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
if EMT.L3 > dZref then
bMoveZbeforeX = true
end
if not bMoveZbeforeX then
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
else
SimulMoveAxis( 'X1', LimX1RotSawTC2, MCH_SIM_STEP.RAPID)
end
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 400") -- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 400")
if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then
SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
if bMoveZbeforeX then
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
end
-- caso standard -- caso standard
else else
SimulMoveAxis( 'Z1', dZref, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'Z1', dZref, MCH_SIM_STEP.RAPID)
@@ -988,18 +1118,18 @@ function OnSimulMoveStart()
EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( dPosA)) EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( dPosA))
EmtModifyAxisHome( 'B1', ParkCSawB1) EmtModifyAxisHome( 'B1', ParkCSawB1)
B1Home = EgtGetAxisHomePos( 'B1') B1Home = EgtGetAxisHomePos( 'B1')
C1Home = EgtGetAxisHomePos( 'C1')
Z1Home = EgtGetAxisHomePos( 'Z1') Z1Home = EgtGetAxisHomePos( 'Z1')
EMT.CHSAW_OUT = nil EMT.CHSAW_OUT = nil
end end
-- Porto la Z alla giusta quota -- se motosega configurata per lavorazioni di fianco o circa orizzontale
if Z1Pos > Z1Home + 1 and abs( B1Pos) > 89.9 then if dPosA == 0 or abs( EMT.R2) < 10 then
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID) SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'Z1', Z1Home, MCH_SIM_STEP.RAPID) SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
end -- se circa verticale
-- se movimento iniziale da Zmax else
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'Z1', Z1Home, MCH_SIM_STEP.RAPID, 'B1', B1Home, MCH_SIM_STEP.COLLROT, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
end end
end end
else else
@@ -1015,16 +1145,28 @@ function OnSimulMoveStart()
-- se movimento iniziale da Zmax con lama o fresa -- se movimento iniziale da Zmax con lama o fresa
if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
--EgtOutBox( 'Flag 2,1', 'Info Rapid') --EgtOutBox( 'Flag 2,1', 'Info Rapid')
SimulMoveAxis( 'X2', EMT.L2, MCH_SIM_STEP.RAPID) local bMoveZbeforeX = false
local dZref = EMT.L3 local dZref = EMT.L3
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 < -LimX2RotSaw, EMT.L2 > -LimX2RotSaw) or EMT.R2 > 91) then if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 < -LimX2RotSaw, EMT.L2 > -LimX2RotSaw) or EMT.R2 > 91) then
dZref = Z2Home + GetZExtra( EMT.HEAD, EMT.R2) - 100 dZref = Z2Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
end
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
if EMT.L3 > dZref then
bMoveZbeforeX = true
end
if not bMoveZbeforeX then
SimulMoveAxis( 'X2', EMT.L2, MCH_SIM_STEP.RAPID)
else
SimulMoveAxis( 'X2', LimX2RotSaw, MCH_SIM_STEP.RAPID)
end end
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379") -- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
if EMT.HEAD == 'H22' and abs( C2Pos - EMT.R1) > 1 and ( abs( C2Home - EMT.R1) > 30.1 or abs(B2Home - EMT.R2) > 30.1) then if EMT.HEAD == 'H22' and abs( C2Pos - EMT.R1) > 1 and ( abs( C2Home - EMT.R1) > 30.1 or abs(B2Home - EMT.R2) > 30.1) then
SimulMoveAxis( 'B2', 0, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'B2', 0, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
SimulMoveAxes( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
if bMoveZbeforeX then
SimulMoveAxis( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID)
end
-- caso standard -- caso standard
else else
SimulMoveAxis( 'Z2', dZref, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'Z2', dZref, MCH_SIM_STEP.RAPID)
@@ -1034,20 +1176,31 @@ function OnSimulMoveStart()
end end
-- altrimenti sega a catena -- altrimenti sega a catena
else else
-- Porto la Z alla giusta quota -- se anche precedente con sega a catena ma depositata, devo riprenderla
if Z2Pos > Z2Home + 1 and abs( B2Pos) > 89.9 then if EMT.CHSAW_OUT then
SimulMoveAxis( 'X2', EMT.L2, MCH_SIM_STEP.RAPID) local dPosA = GetCurrChainSawingVirtualAxis()
SimulMoveAxis( 'Z2', Z2Home, MCH_SIM_STEP.RAPID) EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN)
OnSimulToolDeselect()
EgtLoadTool( EMT.HEAD, 1, EMT.TOOL)
ShowToolInTcPos( EMT.TCPOS, false)
OnSimulToolSelect( dPosA)
-- recupero i dati dato che ho scaricato motosega e preso quelli dell'utensile di default
EmtModifyAxisHome( 'Z2', GetChainSawZHomeFromVirtualAxis( dPosA))
EmtModifyAxisHome( 'C2', GetChainSawCHomeFromVirtualAxis( dPosA))
EmtModifyAxisHome( 'B2', ParkCSawB2)
B2Home = EgtGetAxisHomePos( 'B2')
C2Home = EgtGetAxisHomePos( 'C2')
Z2Home = EgtGetAxisHomePos( 'Z2')
EMT.CHSAW_OUT = nil
end end
-- se movimento iniziale da Zmax -- se motosega configurata per lavorazioni di fianco o circa orizzontale
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then if dPosA == 0 or abs( EMT.R2) < 10 then
-- se pezzo molto alto e R3=0, mi sposto in X (per ora solo davanti) SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID, 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then SimulMoveAxes( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
SimulMoveAxes( 'X2', SafeCSaw0X2, MCH_SIM_STEP.RAPID) -- se circa verticale
SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID, 'Z2', Z2Home, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT) else
else SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID, 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
SimulMoveAxes( 'Z2', Z2Home, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
end
end end
end end
end end
@@ -1118,16 +1271,22 @@ function OnSimulMoveStart()
EMT.A4 = EgtIf( GetV2ToClose(), EMT.V2NEXTPOS, ParkV2) EMT.A4 = EgtIf( GetV2ToClose(), EMT.V2NEXTPOS, ParkV2)
end end
EMT.ZMAX = nil EMT.ZMAX = nil
EMT.XHOME = nil
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function OnSimulMoveEnd() function OnSimulMoveEnd()
-- rimozione eventuali sfridi
if EMT.FLAG == 301 then
ExecRemoveScraps()
end
-- se primo rapido della lavorazione -- se primo rapido della lavorazione
if EMT.MCHFIRST and EMT.MOVE == 0 then if EMT.MCHFIRST and EMT.MOVE == 0 then
-- se lavorazione split, dichiaro carro Y1 riagganciato -- se lavorazione split, dichiaro carro Y1 riagganciato
if EMT.SPLIT_Y1DELTA then if EMT.SPLIT_Y1DELTA then
EMT.SPLIT_Y1DELTA = nil EMT.SPLIT_Y1DELTA = nil
SetPY1Light( true) ExecMovePY1( true)
end end
-- chiusura pinza speciale (e posizionamento iniziale) -- chiusura pinza speciale (e posizionamento iniziale)
if EMT.W2DELTA then if EMT.W2DELTA then
@@ -1163,9 +1322,14 @@ function OnSimulMoveEnd()
-- se Zmax dopo fine lavorazione -- se Zmax dopo fine lavorazione
if EMT.MOVE == 0 and EMT.FLAG == 3 then if EMT.MOVE == 0 and EMT.FLAG == 3 then
-- eventuale rimozione sfridi -- eventuale rimozione sfridi
RemoveScraps() ExecRemoveScraps()
-- se Split o Presplit lascio agganciata solo la pinza Y2 alla fine dei movimenti
local sNextTool = GetNextTool( EMT.MCHID)
-- vado in home se è ultimo movimento ed è ultima lavorazione, se sono con motosega e devo cambiare utensile, oppure se ho la lama
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool) or ( EMT.HEAD == 'H23' and EMT.TOOL ~= sNextTool) or ( EMT.HEAD == 'H13' and EMT.TOOL ~= sNextTool) or
( EMT.HEAD == 'H12' and EMT.TOOL ~= sNextTool ) or ( EMT.HEAD == 'H22' and EMT.TOOL ~= sNextTool) or EMT.MCHSPLIT
-- eseguo -- eseguo
ExecMoveZmax( EMT.MCHSPLIT) ExecMoveZmax( EMT.MCHSPLIT, bToXhome)
EMT.TO_ZMAX = nil EMT.TO_ZMAX = nil
end end
end end
@@ -1192,7 +1356,7 @@ function OnSimulCollision()
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function ExecAuxCmd( sCmd) function ExecAuxCmd( sCmd, bPathStart)
-- analizzo il comando -- analizzo il comando
local Cmd = EgtSplitString( sCmd) local Cmd = EgtSplitString( sCmd)
if Cmd[1] == '0' then if Cmd[1] == '0' then
@@ -1212,30 +1376,40 @@ function ExecAuxCmd( sCmd)
end end
EgtOutText( Cmd[2]) EgtOutText( Cmd[2])
elseif Cmd[1] == '1' then elseif Cmd[1] == '1' then
if EMT.SPLIT or EMT.SPECSPLIT then ExecOpenRoller( 1) end if Cmd[2] ~= 'Z' then
if EMT.UNLOADING or EMT.TO_FALL or EMT.TO_SPECSPLIT then ExecOpenRoller( 2) end ExecOpenRoller( 1)
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd) ExecOpenRoller( 2)
local bOk, bOk1, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID, local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
sV1, MoveV1, MCH_SIM_STEP.RAPID, -- se stringo i rulli e ho lama, verifico che sia in home
sV2, MoveV2, MCH_SIM_STEP.RAPID) if MoveV1 and MoveV1 < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
if not bOk then ExecMoveZmax( false, true)
if not bOk1 then end
if VerifyY1Y2Stroke( Cmd[2], tonumber( Cmd[3])) == nil then local bOk, bOk1, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd) sV1, MoveV1, MCH_SIM_STEP.RAPID,
sV2, MoveV2, MCH_SIM_STEP.RAPID)
if not bOk then
if not bOk1 then
if VerifyY1Y2Stroke( Cmd[2], tonumber( Cmd[3])) == nil then
EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd)
end
elseif not bOk2 then
VerifyV1V2Stroke( sV1, MoveV1)
elseif not bOk3 then
VerifyV1V2Stroke( sV2, MoveV2)
end end
elseif not bOk2 then
VerifyV1V2Stroke( sV1, MoveV1)
elseif not bOk3 then
VerifyV1V2Stroke( sV2, MoveV2)
end end
end end
elseif Cmd[1] == '2' then elseif Cmd[1] == '2' then
-- Verifico movimento carrello con trave agganciata -- Verifico movimento carrello con trave agganciata
VerifyOneChariotSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5]) VerifyOneChariotSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5])
-- Eseguo i movimenti necessari -- Eseguo i movimenti necessari
if EMT.SPLIT then ExecOpenRoller( 1) end ExecOpenRoller( 1)
if EMT.UNLOADING or EMT.TO_FALL or EMT.TO_SPECSPLIT then ExecOpenRoller( 2) end ExecOpenRoller( 2)
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd) local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
-- se stringo i rulli e ho lama, verifico che sia in home
if MoveV1 and MoveV1 < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
ExecMoveZmax( false, true)
end
local bOk, bOk1, bOk2, bOk3, bOk4 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID, local bOk, bOk1, bOk2, bOk3, bOk4 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID, Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID,
sV1, MoveV1, MCH_SIM_STEP.RAPID, sV1, MoveV1, MCH_SIM_STEP.RAPID,
@@ -1256,9 +1430,13 @@ function ExecAuxCmd( sCmd)
-- Verifico movimento carrelli con trave agganciata -- Verifico movimento carrelli con trave agganciata
VerifyTwoChariotsSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5], Cmd[6], Cmd[7]) VerifyTwoChariotsSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5], Cmd[6], Cmd[7])
-- Eseguo i movimenti necessari -- Eseguo i movimenti necessari
if EMT.SPLIT then ExecOpenRoller( 1) end ExecOpenRoller( 1)
if EMT.UNLOADING or EMT.TO_FALL or EMT.TO_SPECSPLIT then ExecOpenRoller( 2) end ExecOpenRoller( 2)
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd) local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
-- se stringo i rulli e ho lama, verifico che sia in home
if MoveV1 and MoveV1 < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
ExecMoveZmax( false, true)
end
local bOk, bOk1, bOk2, bOk3, bOk4, bOk5 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID, local bOk, bOk1, bOk2, bOk3, bOk4, bOk5 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID, Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID,
Cmd[6], tonumber( Cmd[7]), MCH_SIM_STEP.RAPID, Cmd[6], tonumber( Cmd[7]), MCH_SIM_STEP.RAPID,
@@ -1277,15 +1455,13 @@ function ExecAuxCmd( sCmd)
end end
end end
elseif Cmd[1] == '4' then elseif Cmd[1] == '4' then
ExecMoveHome( Cmd[2] == '1', EMT.MCHSPLIT) ExecMoveHome( Cmd[2] == '1', EgtIf( bPathStart, false, EMT.MCHSPLIT))
elseif Cmd[1] == '11' then elseif Cmd[1] == '11' then
local dPY = EgtIf( Cmd[2] == '0', MaxHoOpen, EgtIf( EMT.ROT == -1, EMT.SB, EMT.HB)) local bClose = Cmd[2] ~= '0'
SimulMoveAxis( 'PY1', dPY, MCH_SIM_STEP.RAPID) if bPathStart and EMT.MCHSPLIT and not EMT.FALL and GetPY2Light() then bClose = false end
SetPY1Light( Cmd[2] ~= '0') ExecMovePY1( bClose)
elseif Cmd[1] == '12' then elseif Cmd[1] == '12' then
local dPY = EgtIf( Cmd[2] == '0', MaxHoOpen, EgtIf( EMT.ROT == -1, EMT.SB, EMT.HB)) ExecMovePY2( Cmd[2] ~= '0')
SimulMoveAxis( 'PY2', dPY, MCH_SIM_STEP.RAPID)
SetPY2Light( Cmd[2] ~= '0')
elseif Cmd[1] == '21' then elseif Cmd[1] == '21' then
local nY1Delta = tonumber( Cmd[2]) local nY1Delta = tonumber( Cmd[2])
local nY2Delta = tonumber( Cmd[3]) local nY2Delta = tonumber( Cmd[3])
@@ -1366,7 +1542,8 @@ end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function ExecMoveHome( bNearV, bMchSplit) function ExecMoveHome( bNearV, bMchSplit)
-- risalita a Zmax -- risalita a Zmax
ExecMoveZmax( bMchSplit) ExecMoveZmax( bMchSplit, true)
EMT.TO_ZMAX = nil
-- se richiesto, avvicino i rulli -- se richiesto, avvicino i rulli
if bNearV then if bNearV then
-- se sega a catena su testa 1 devo prima depositarla -- se sega a catena su testa 1 devo prima depositarla
@@ -1411,7 +1588,7 @@ function ExecMoveHome( bNearV, bMchSplit)
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function ExecMoveZmax( bMchSplit) function ExecMoveZmax( bMchSplit, btoXHome)
-- set della testa -- set della testa
local nSetHead = GetHeadSet( EMT.HEAD) local nSetHead = GetHeadSet( EMT.HEAD)
if nSetHead == 0 then return end if nSetHead == 0 then return end
@@ -1441,7 +1618,7 @@ function ExecMoveZmax( bMchSplit)
if not HeadIsChainSaw( EMT.HEAD) then if not HeadIsChainSaw( EMT.HEAD) then
if abs( HomeC - CurrC) > 0.1 or abs( HomeB - CurrB) > 0.1 then if abs( HomeC - CurrC) > 0.1 or abs( HomeB - CurrB) > 0.1 then
local dZref = HomeZ + GetZExtra( EMT.HEAD, CurrB) local dZref = HomeZ + GetZExtra( EMT.HEAD, CurrB)
if EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, -CurrX < -LimX1RotSaw, -CurrX > -LimX1RotSaw) then if EgtIf( BD.RIGHT_LOAD, -CurrX < -LimX1RotSaw, -CurrX > -LimX1RotSaw) then
dZref = dZref - EgtIf( not Mortiser, 100, 370) dZref = dZref - EgtIf( not Mortiser, 100, 370)
end end
SimulMoveAxes( 'Z1', EgtIf( dZref > CurrZ, dZref, CurrZ), MCH_SIM_STEP.RAPID, 'B1', EgtClamp( CurrB, -90, 90), MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'Z1', EgtIf( dZref > CurrZ, dZref, CurrZ), MCH_SIM_STEP.RAPID, 'B1', EgtClamp( CurrB, -90, 90), MCH_SIM_STEP.COLLROT)
@@ -1452,20 +1629,30 @@ function ExecMoveZmax( bMchSplit)
SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT)
end end
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
if btoXHome then
EMT.XHOME = true
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
end
-- se lavorazione in doppio -- se lavorazione in doppio
if EMT.DOU_TYPE == 2 then if EMT.DOU_TYPE == 2 then
local CurrZ2 = EgtGetAxisPos( 'Z2') local CurrZ2 = EgtGetAxisPos( 'Z2')
if CurrZ2 < ParkZ2 then if CurrZ2 < ParkZ2 then
SimulMoveAxes( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
end end
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
SimulMoveAxes( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID) if bToXHome then
EMT.XHOME = true
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
end
EMT.DOU_TO_ZMAX = nil EMT.DOU_TO_ZMAX = nil
end end
-- altrimenti sega a catena -- altrimenti sega a catena
else else
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
SimulMoveAxis( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
end
SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT)
end end
else else
@@ -1481,10 +1668,26 @@ function ExecMoveZmax( bMchSplit)
SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT)
end end
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
if btoXHome then
EMT.XHOME = true
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
end
-- altrimenti sega a catena -- altrimenti sega a catena
else else
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'C1', HomeC, MCH_SIM_STEP.COLLROT) if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
SimulMoveAxis( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
end
if btoXHome then
EgtUnloadTool( EMT.HEAD, 1)
ShowToolInTcPos( EMT.TCPOS, true)
EMT.PREVTOOL_H1 = nil
EMT.PREVHEAD_H1 = nil
EMT.PREVTCPOS_H1 = nil
EMT.CHSAW_OUT = true
EMT.XHOME = true
end
SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT)
end end
end end
@@ -1502,10 +1705,17 @@ function ExecMoveZmax( bMchSplit)
SimulMoveAxis( 'B2', HomeB, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'B2', HomeB, MCH_SIM_STEP.COLLROT)
end end
SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
-- altrimenti sega a catena if btoXHome then
EMT.XHOME = true
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
end
-- altrimenti sega a catena
else else
SimulMoveAxes( 'Z2', HomeZ, MCH_SIM_STEP.RAPID, 'B2', HomeB, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'Z2', HomeZ, MCH_SIM_STEP.RAPID, 'B2', HomeB, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'X2', HomeX, MCH_SIM_STEP.RAPID, 'C2', HomeC, MCH_SIM_STEP.COLLROT) if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
SimulMoveAxis( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID)
end
SimulMoveAxes( 'X2', HomeX, MCH_SIM_STEP.RAPID, 'C2', HomeC, MCH_SIM_STEP.COLLROT)
end end
end end
EMT.ZMAX = true EMT.ZMAX = true
@@ -1540,10 +1750,14 @@ function ExecUnloading()
EgtMove( nLayId, vtMove, GDB_RT.GLOB) EgtMove( nLayId, vtMove, GDB_RT.GLOB)
EgtSetLevel( vMillId, GDB_LV.USER) EgtSetLevel( vMillId, GDB_LV.USER)
-- aggiungo gli spigoli -- aggiungo gli spigoli
local nFirstId, nCount = EgtVolZmapGetEdges( vMillId, nLayId) if EgtVolZmapSetShowEdges then
if nFirstId then EgtVolZmapSetShowEdges( vMillId, true)
for nId = nFirstId, nFirstId + nCount - 1 do else
EgtSetColor( nId, Color3d( 96, 96, 96)) local nFirstId, nCount = EgtVolZmapGetEdges( vMillId, nLayId)
if nFirstId then
for nId = nFirstId, nFirstId + nCount - 1 do
EgtSetColor( nId, Color3d( 96, 96, 96))
end
end end
end end
-- rilascio Vmill -- rilascio Vmill
@@ -1576,6 +1790,18 @@ function ExecUnloading()
end end
end end
---------------------------------------------------------------------
function ExecMovePY1( bClose)
SimulMoveAxis( 'PY1', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
SetPY1Light( bClose)
end
---------------------------------------------------------------------
function ExecMovePY2( bClose)
SimulMoveAxis( 'PY2', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
SetPY2Light( bClose)
end
--------------------------------------------------------------------- ---------------------------------------------------------------------
local function LinkRemainingPartsToY1() local function LinkRemainingPartsToY1()
local nCurrOrd = GetPhaseOrd( EMT.PHASE) local nCurrOrd = GetPhaseOrd( EMT.PHASE)
@@ -1607,6 +1833,9 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
-- Parcheggi pinze -- Parcheggi pinze
local MyParkY1 = ParkY1 + EgtIf( bAgg, AggLoad, 0) local MyParkY1 = ParkY1 + EgtIf( bAgg, AggLoad, 0)
local MyParkY2 = ParkY2 local MyParkY2 = ParkY2
-- Apro i rulli, se necessario
if abs( ParkV1 - PosV1) > 0.1 then ExecOpenRoller( 1) end
if abs( ParkV2 - PosV2) > 0.1 then ExecOpenRoller( 2) end
-- Eseguo spostamenti -- Eseguo spostamenti
if EMT.Y1DELTA and EMT.Y2DELTA then if EMT.Y1DELTA and EMT.Y2DELTA then
local DiffY1 = MyParkY1 - PosY1 local DiffY1 = MyParkY1 - PosY1
@@ -1662,7 +1891,7 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
local MoveV1 = ParkV1 - PosV1 local MoveV1 = ParkV1 - PosV1
local DiffY1 = MyParkY1 - PosY1 local DiffY1 = MyParkY1 - PosY1
local MoveY1 = EgtIf( DiffY1 > 0.1, MoveV1, 0) local MoveY1 = EgtIf( DiffY1 > 0.1, MoveV1, 0)
local TryMoveY1 = ParkV1 - PosT - EgtIf( bSpliCut or EMT.FALL, EMT.LT, 0) - EMT.HOVM local TryMoveY1 = min( ParkV1 - PosT - EgtIf( bSpliCut or EMT.FALL, EMT.LT, 0) - EMT.HOVM, MaxY1 - PosY1 - 10)
if ( PosT > ParkV2 - ExtraParkV and PosT < ParkV1 and PosY1 + TryMoveY1 < MaxY1 and not EMT.W2DELTA) then MoveY1 = max( MoveY1, TryMoveY1) end if ( PosT > ParkV2 - ExtraParkV and PosT < ParkV1 and PosY1 + TryMoveY1 < MaxY1 and not EMT.W2DELTA) then MoveY1 = max( MoveY1, TryMoveY1) end
-- se appena eseguito taglio di separazione -- se appena eseguito taglio di separazione
if bSpliCut then if bSpliCut then
@@ -1692,8 +1921,8 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
local MoveV2 = ParkV2 - PosV2 local MoveV2 = ParkV2 - PosV2
local DiffY2 = MyParkY2 - PosY2 local DiffY2 = MyParkY2 - PosY2
local MoveY2 = EgtIf( DiffY2 < -0.1, MoveV2, 0) local MoveY2 = EgtIf( DiffY2 < -0.1, MoveV2, 0)
local TryMoveY2 = ParkV2 - PosT - EMT.LT - EMT.HOVM local TryMoveY2 = max( ParkV2 - PosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM, MinY2 - PosY2 + 10)
if ( PosT + EMT.LT + EMT.HOVM < ParkV1 + ExtraParkV and PosT + EMT.LT + EMT.HOVM > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end if ( PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM < ParkV1 + ExtraParkV and PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end
if not SimulMoveAxes( 'T', PosT + MoveY2, MCH_SIM_STEP.RAPID, if not SimulMoveAxes( 'T', PosT + MoveY2, MCH_SIM_STEP.RAPID,
'V1', ParkV1, MCH_SIM_STEP.RAPID, 'V1', ParkV1, MCH_SIM_STEP.RAPID,
'V2', ParkV2, MCH_SIM_STEP.RAPID, 'V2', ParkV2, MCH_SIM_STEP.RAPID,
@@ -1730,7 +1959,7 @@ function ExecOpenRoller( nInd)
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function RemoveScraps() function ExecRemoveScraps()
-- se attivo VMILL, lavorazione ed è richiesto di eliminare gli sfridi -- se attivo VMILL, lavorazione ed è richiesto di eliminare gli sfridi
if EMT.VMILL and #EMT.VMILL > 0 and not EMT.OPEISDISP and EMT.VMRS then if EMT.VMILL and #EMT.VMILL > 0 and not EMT.OPEISDISP and EMT.VMRS then
local vMillId = EMT.VMILL[1] local vMillId = EMT.VMILL[1]
@@ -1761,7 +1990,6 @@ function RemoveScraps()
end end
EMT.VMRS = false EMT.VMRS = false
end end
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
@@ -2026,18 +2254,19 @@ end
--------------------------------------------------------------------- ---------------------------------------------------------------------
-- *** ESTIMATION T&L *** -- *** ESTIMATION T&L ***
--------------------------------------------------------------------- ---------------------------------------------------------------------
local RAPID_X_FEED = 70000 -- mm/min local ESTIMATION_RAPID_COEFF = EstimationRapidMultiplier or 1
local RAPID_Y_FEED = 100000 -- mm/min local RAPID_X_FEED = 70000 / ESTIMATION_RAPID_COEFF -- mm/min
local RAPID_Z_FEED = 32000 -- mm/min local RAPID_Y_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
local RAPID_C_FEED = 15000 -- deg/min local RAPID_Z_FEED = 32000 / ESTIMATION_RAPID_COEFF -- mm/min
local RAPID_B_FEED = 15000 -- deg/min local RAPID_C_FEED = 15000 / ESTIMATION_RAPID_COEFF -- deg/min
local RAPID_MIN_T = 0.1 -- s local RAPID_B_FEED = 15000 / ESTIMATION_RAPID_COEFF -- deg/min
local LOAD_T = 2 -- s local RAPID_MIN_T = 0.1 * ESTIMATION_RAPID_COEFF -- s
local CHAR_ONE_MOVE_T = 1 -- s local LOAD_T = 2 * ESTIMATION_RAPID_COEFF -- s
local ROTATION_T = 40 -- s local CHAR_ONE_MOVE_T = 1 * ESTIMATION_RAPID_COEFF -- s
local SPLIT_T = 6 -- s local ROTATION_T = 40 * ESTIMATION_RAPID_COEFF -- s
local UNLOAD_T = 4 -- s local SPLIT_T = 6 * ESTIMATION_RAPID_COEFF -- s
local FALL_T = 2 -- s local UNLOAD_T = 4 * ESTIMATION_RAPID_COEFF -- s
local FALL_T = 2 * ESTIMATION_RAPID_COEFF -- s
--------------------------------------------------------------------- ---------------------------------------------------------------------
function OnEstimStart() function OnEstimStart()
@@ -2103,9 +2332,9 @@ function OnEstimDispositionEnd()
-- Se disposizione inizio o rimanenza -- Se disposizione inizio o rimanenza
if IsStartOrRestPhase( EMT.PHASE) then if IsStartOrRestPhase( EMT.PHASE) then
; ;
-- se altrimenti disposizione intermedia, eventuale rotazione -- se altrimenti disposizione intermedia o finale dopo separazione e rotazione, eventuale rotazione
elseif IsMidPhase( EMT.PHASE) then elseif IsMidPhase( EMT.PHASE) or IsMid2Phase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then
-- recupero le rotazioni delle fasi corrente e precedente -- recupero le rotazioni delle fasi corrente e precedente
local nRot = GetPhaseRot( EMT.PHASE) local nRot = GetPhaseRot( EMT.PHASE)
local nPrevRot = GetPhaseRot( EMT.PHASE - 1) local nPrevRot = GetPhaseRot( EMT.PHASE - 1)
-- verifico se sono diverse -- verifico se sono diverse
@@ -2561,7 +2790,12 @@ function GetNextTool( nMchId)
-- recupero lavorazione successiva -- recupero lavorazione successiva
local nNextMchId = EgtGetNextActiveOperation( nMchId) local nNextMchId = EgtGetNextActiveOperation( nMchId)
while nNextMchId do while nNextMchId do
if EgtGetOperationType( nNextMchId) ~= MCH_OY.DISP then -- se la prossima lavorazione è lo start di un altro pezzo, faccio finta che cambia utensile in modo che vada in parcheggio con utensili speciali
if EgtGetOperationType( nNextMchId) == MCH_OY.DISP then
if IsStartOrRestPhase( EMT.PHASE+1) then
return nil
end
else
break break
end end
nNextMchId = EgtGetNextActiveOperation( nNextMchId) nNextMchId = EgtGetNextActiveOperation( nNextMchId)
+66 -35
View File
@@ -4,9 +4,8 @@
require( 'EmtGenerator') require( 'EmtGenerator')
EgtEnableDebug( false) EgtEnableDebug( false)
-- Carico i dati globali -- Carico libreria
local sBaseDir = EgtGetSourceDir() local BD = require( 'BeamData')
BD = dofile( sBaseDir .. 'Beam\\BeamData.lua')
---------------------- OnSpecialGetMaxZ ----------------------------- ---------------------- OnSpecialGetMaxZ -----------------------------
--------------------------------------------------------------------- ---------------------------------------------------------------------
@@ -291,6 +290,22 @@ local function GetNextStartOrRestPhase( nPhase)
return nNextPhase return nNextPhase
end end
---------------------------------------------------------------------
local function IsFirstMachiningOfStart( nMchId)
-- se non è fase inizio di pezzo, ritorno risultato negativo
if not IsStartOrRestPhase( EMC.PHASE) then
return false
end
-- recupero la precedente operazione attiva
local nPrevOperId = EgtGetPrevActiveOperation( nMchId)
-- se non esiste o non è una disposizione, ritorno risultato negativo
if not nPrevOperId or EgtGetOperationType( nPrevOperId) ~= MCH_OY.DISP then
return false
end
-- è la prima
return true
end
--------------------------------------------------------------------- ---------------------------------------------------------------------
local function GetPhaseRot( nPhase) local function GetPhaseRot( nPhase)
return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ROT', 'i') or 0) return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ROT', 'i') or 0)
@@ -809,6 +824,13 @@ end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreRotMch) function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreRotMch)
-- mi salvo info lavorazione su una lista
local AuxInfoMach = {}
AuxInfoMach.bPreSplit = bPreSplit
AuxInfoMach.bSplitting = bSplitting
AuxInfoMach.bPreCut = bPreCut
AuxInfoMach.bCutting = bCutting
AuxInfoMach.bUnload = bUnload
-- Assegno flag di pezzo separato dal resto del grezzo -- Assegno flag di pezzo separato dal resto del grezzo
SPLIT = IsEndPhase( EMC.PHASE) or IsMid2Phase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE) SPLIT = IsEndPhase( EMC.PHASE) or IsMid2Phase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE)
@@ -839,6 +861,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
EMC.SB = b3Tot:getDimY() EMC.SB = b3Tot:getDimY()
EMC.HB = b3Tot:getDimZ() EMC.HB = b3Tot:getDimZ()
EMC.LT = b3Raw:getDimX() EMC.LT = b3Raw:getDimX()
EgtOutLog( ' BarLen='..EgtNumToString( EMC.LB, 1), 3)
-- Aggiorno limiti di presa -- Aggiorno limiti di presa
UpdateMinJoin() UpdateMinJoin()
@@ -905,7 +928,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
local dPosT = LoadT local dPosT = LoadT
if IsFirstMachiningAfterRotation( EMC.MCHID) then dPosT = dPosT + TurnerOffs end if IsFirstMachiningAfterRotation( EMC.MCHID) then dPosT = dPosT + TurnerOffs end
local vCmd = SpecCalcLoad( dPosT, dDistFront, max( dDistBack, MinJoin + EgtIf( SPLIT, EMC.TCING, 0), EMC.LB - ( MaxY1 - MinY1) + 6)) local vCmd = SpecCalcLoad( dPosT, dDistFront, max( dDistBack, MinJoin + EgtIf( SPLIT, EMC.TCING, 0), EMC.LB - ( MaxY1 - MinY1) + 6))
local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar) local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
if bSplitting and EMC.ERR == 18 then if bSplitting and EMC.ERR == 18 then
table.insert( vCmd, { 22, dRollBack, -dRollFront}) table.insert( vCmd, { 22, dRollBack, -dRollFront})
end end
@@ -918,7 +941,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
-- Se altrimenti carri entrambi diponibili, eseguo calcoli per carrelli -- Se altrimenti carri entrambi diponibili, eseguo calcoli per carrelli
elseif not IsEndPhase( EMC.PHASE) then elseif not IsEndPhase( EMC.PHASE) then
local vCmd = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar) local vCmd = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
-- Se non ci sono spostamenti, confermo i parametri di aggancio e di posizione roller -- Se non ci sono spostamenti, confermo i parametri di aggancio e di posizione roller
if SpecTestOnlyRemarkInCmds( vCmd) then if SpecTestOnlyRemarkInCmds( vCmd) then
table.insert( vCmd, { 21, EgtIf( EMC.Y1DELTA, EMC.Y1DELTA, 0), EgtIf( EMC.Y2DELTA, EMC.Y2DELTA, 0)}) table.insert( vCmd, { 21, EgtIf( EMC.Y1DELTA, EMC.Y1DELTA, 0), EgtIf( EMC.Y2DELTA, EMC.Y2DELTA, 0)})
@@ -1100,8 +1123,12 @@ function SpecialCalcMachiningEncumbrance( nMchId, bPreCut)
end end
b3Enc = EgtGetBBoxGlob( EgtGetAxisId( 'C2'), GDB_BB.ONLY_VISIBLE) b3Enc = EgtGetBBoxGlob( EgtGetAxisId( 'C2'), GDB_BB.ONLY_VISIBLE)
end end
local dRollFront = max( b3Enc:getMax():getX(), MIN_FRONT_ENG_V) + SIC_V
local dRollBack = max( -b3Enc:getMin():getX(), MIN_BACK_ENG_V) + SIC_V -- Forzo la distanza di sicurezza da utensile
local nSecRollerDist = EgtGetValInNotes( EgtTdbGetCurrToolParam( MCH_TP.USERNOTES), 'SECDIST', 'i') or SIC_V
local dRollFront = max( b3Enc:getMax():getX(), MIN_FRONT_ENG_V) + nSecRollerDist
local dRollBack = max( -b3Enc:getMin():getX(), MIN_BACK_ENG_V) + nSecRollerDist
EgtOutLog( ' RollFront = ' .. EgtNumToString( dRollFront, 1) .. ' RollBack = ' .. EgtNumToString( dRollBack, 1), 3) EgtOutLog( ' RollFront = ' .. EgtNumToString( dRollFront, 1) .. ' RollBack = ' .. EgtNumToString( dRollBack, 1), 3)
-- Calcolo della posizione della Punta Utensile rispetto allo Zero Macchina -- Calcolo della posizione della Punta Utensile rispetto allo Zero Macchina
local ptTip local ptTip
@@ -1242,7 +1269,7 @@ function SpecCalcLoad( dPosT, dDistFront, dDistBack)
end -- SpecAdjustLoad [L] end -- SpecAdjustLoad [L]
--------------------------------------------------------------------- ---------------------------------------------------------------------
function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar) function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
local MinFrontJoin = MinJoin + EMC.HCING + EMC.HOVM local MinFrontJoin = MinJoin + EMC.HCING + EMC.HOVM
local MyMinOther = MinOther + EgtIf( EMC.CNT == 1, AggLoad, 0) local MyMinOther = MinOther + EgtIf( EMC.CNT == 1, AggLoad, 0)
@@ -1281,13 +1308,11 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
WorkTab.dV2PosF = -dRollFront WorkTab.dV2PosF = -dRollFront
WorkTab.bV2CloseF = false WorkTab.bV2CloseF = false
-- aggiuntivo per non avere problemi con pezzi a caduta -- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 5 * BD.CHAR_EXTRA_DIST then if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 4 * BD.CHAR_EXTRA_DIST if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 2.5 * BD.CHAR_EXTRA_DIST then WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF)
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 2 * BD.CHAR_EXTRA_DIST end
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST then
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + BD.CHAR_EXTRA_DIST
end end
-- verifico validità intervallo ammesso per Y1 -- verifico validità intervallo ammesso per Y1
@@ -1297,6 +1322,9 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
return {} return {}
end end
-- al carico o con prima lavorazione di un pezzo si deve ignorare l'ingombro delle lavorazioni di testa per il pinzaggio
if EMC.LOAD or IsFirstMachiningOfStart( EMC.MCHID) then EMC.HCING = 0 end
return SpecAdjustCarriages( WorkTab) return SpecAdjustCarriages( WorkTab)
-- [B] se richiesti entrambi e posso metterli -- [B] se richiesti entrambi e posso metterli
@@ -1323,13 +1351,11 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
WorkTab.dV2PosF = -dRollFront WorkTab.dV2PosF = -dRollFront
WorkTab.bV2CloseF = false WorkTab.bV2CloseF = false
-- aggiuntivo per minimizzare scambi carrelli -- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 5 * BD.CHAR_EXTRA_DIST then if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 4 * BD.CHAR_EXTRA_DIST if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 2.5 * BD.CHAR_EXTRA_DIST then WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF)
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 2 * BD.CHAR_EXTRA_DIST end
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST then
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + BD.CHAR_EXTRA_DIST
end end
-- verifico validità intervallo ammesso per Y1 -- verifico validità intervallo ammesso per Y1
@@ -1633,19 +1659,24 @@ function SpecAdjustCarriages( WorkTab)
local bCloseV = false local bCloseV = false
if WorkTab.dY1DeltaI then if WorkTab.dY1DeltaI then
if WorkTab.dY1DeltaI <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EMC.HCING + EMC.HOVM + EgtIf( EMC.CNT == 1, AggLoad, 0) then if WorkTab.dY1DeltaI <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EMC.HCING + EMC.HOVM + EgtIf( EMC.CNT == 1, AggLoad, 0) then
bCloseV = true bCloseV = true
end end
end end
if WorkTab.dY2DeltaI then if WorkTab.dY2DeltaI then
if EMC.LB - WorkTab.dY2DeltaI <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EgtIf( SPLIT, EMC.TCING, 0) + EgtIf( EMC.CNT == 1, AggLoad, 0) then if EMC.LB - WorkTab.dY2DeltaI <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EgtIf( SPLIT, EMC.TCING, 0) + EgtIf( EMC.CNT == 1, AggLoad, 0) then
bCloseV = true bCloseV = true
end end
end end
if WorkTab.dY2DeltaMinF then if WorkTab.dY2DeltaMinF then
if EMC.LB - WorkTab.dY2DeltaMinF <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EgtIf( SPLIT, EMC.TCING, 0) + EgtIf( EMC.CNT == 1, AggLoad, 0) then if EMC.LB - WorkTab.dY2DeltaMinF <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EgtIf( SPLIT, EMC.TCING, 0) + EgtIf( EMC.CNT == 1, AggLoad, 0) then
bCloseV = true bCloseV = true
end end
end end
-- se i pezzi del cliente sono molto storti, si forza la chiusura per evitare che vada a sbattere. Se parametro non presente, si chiude solo se necessario
if ForceToCloseRollersGate then
bCloseV = true
end
WorkTab.bCloseV = bCloseV WorkTab.bCloseV = bCloseV
EgtOutLog( ' Tool : '..( EgtIf( bChangedTool, 'CHANGED', 'same')).. ' CloseV : '..( EgtIf( bCloseV, 'TRUE', 'false')), 1) EgtOutLog( ' Tool : '..( EgtIf( bChangedTool, 'CHANGED', 'same')).. ' CloseV : '..( EgtIf( bCloseV, 'TRUE', 'false')), 1)
@@ -1801,7 +1832,7 @@ local function MaxDispl( TabI, vCmd, sType)
-- allontano (Y1+T) e (Y2) -- allontano (Y1+T) e (Y2)
dY1a = MaxY1 dY1a = MaxY1
dY2a = MinY2 dY2a = MinY2
dTa = ( MaxY1 - TabI.dY1PosI) + dTa dTa = ( dY1a - TabI.dY1PosI) + dTa
-- **[M2]** = allontanamento dei trascinatori con Y2 in presa -- **[M2]** = allontanamento dei trascinatori con Y2 in presa
elseif sType == 'M2' then elseif sType == 'M2' then
EmitComment( vCmd, '[M2]') EmitComment( vCmd, '[M2]')
@@ -1812,7 +1843,7 @@ local function MaxDispl( TabI, vCmd, sType)
-- allontano (Y2+T) e (Y1) -- allontano (Y2+T) e (Y1)
dY1a = MaxY1 dY1a = MaxY1
dY2a = MinY2 dY2a = MinY2
dTa = ( MinY2 - TabI.dY2PosI) + dTa dTa = ( dY2a - TabI.dY2PosI) + dTa
-- **[M3]** = accentramento dei trascinatori con Y1 in presa -- **[M3]** = accentramento dei trascinatori con Y1 in presa
elseif sType == 'M3' then elseif sType == 'M3' then
EmitComment( vCmd, '[M3]') EmitComment( vCmd, '[M3]')
@@ -1822,7 +1853,7 @@ local function MaxDispl( TabI, vCmd, sType)
-- accentro (Y1+T) e (Y2) -- accentro (Y1+T) e (Y2)
dY1a = TabI.MyMinY1V1 dY1a = TabI.MyMinY1V1
dY2a = TabI.MaxY2V2 dY2a = TabI.MaxY2V2
dTa = ( TabI.MyMinY1V1 - TabI.dY1PosI) + dTa dTa = ( dY1a - TabI.dY1PosI) + dTa
-- **[M4]** = accentramento dei trascinatori con Y2 in presa -- **[M4]** = accentramento dei trascinatori con Y2 in presa
elseif sType == 'M4' then elseif sType == 'M4' then
EmitComment( vCmd, '[M4]') EmitComment( vCmd, '[M4]')
@@ -1833,7 +1864,7 @@ local function MaxDispl( TabI, vCmd, sType)
-- accentro (Y2+T) e (Y1) -- accentro (Y2+T) e (Y1)
dY1a = TabI.MyMinY1V1 dY1a = TabI.MyMinY1V1
dY2a = TabI.MaxY2V2 dY2a = TabI.MaxY2V2
dTa = ( TabI.MaxY2V2 - TabI.dY2PosI) + dTa dTa = ( dY2a - TabI.dY2PosI) + dTa
end end
-- --
table.insert( vCmd, { 3, 'Y1', dY1a, 'Y2', dY2a, 'T', dTa, EMC.CNT}) table.insert( vCmd, { 3, 'Y1', dY1a, 'Y2', dY2a, 'T', dTa, EMC.CNT})
@@ -2159,7 +2190,7 @@ local function PosY1Y2B( TabI, vCmd)
end end
end end
nCnt = nCnt + 1 nCnt = nCnt + 1
if nCnt > 5 then return end if nCnt > 10 then return end
until ( not bXW) until ( not bXW)
-- chiusura/parcheggio dei trascinatori in funzioni chiamanti -- chiusura/parcheggio dei trascinatori in funzioni chiamanti
local dY1Delta = TabI.dY1PosI - TabI.dTPosI local dY1Delta = TabI.dY1PosI - TabI.dTPosI
@@ -2298,7 +2329,7 @@ local function PosY2Y1B( TabI, vCmd)
end end
end end
nCnt = nCnt + 1 nCnt = nCnt + 1
if nCnt > 5 then return end if nCnt > 10 then return end
until ( not bXW) until ( not bXW)
-- la chiusura delle morse è fatta sopra -- la chiusura delle morse è fatta sopra
local dY1Delta = TabI.dY1PosI - TabI.dTPosI local dY1Delta = TabI.dY1PosI - TabI.dTPosI
@@ -2370,7 +2401,7 @@ function SpecAdjustCarrA( WorkTab)
dY1DeltaF = PosY1Y2B( TabValI, vCmd) dY1DeltaF = PosY1Y2B( TabValI, vCmd)
else else
--[A(1)A] **ALLONTANAMENTO** (dall'origine) del trascinatore Y1 --[A(1)A] **ALLONTANAMENTO** (dall'origine) del trascinatore Y1
EmitComment( vCmd, '[AY1A]') EmitComment( vCmd, '[A-Y1A]')
dY1DeltaF = PosY1Y2A( TabValI, vCmd) dY1DeltaF = PosY1Y2A( TabValI, vCmd)
end end
-- chiudo Y1 -- chiudo Y1
@@ -2466,8 +2497,8 @@ function SpecAdjustCarrB1( WorkTab)
if not SpecTestSomeMoveInCmds( vCmd) then if not SpecTestSomeMoveInCmds( vCmd) then
table.insert( vCmd, { 3, 'Y1', dY1PosI, 'Y2', dY2PosI, 'T', WorkTab.dTPosI, EMC.CNT}) table.insert( vCmd, { 3, 'Y1', dY1PosI, 'Y2', dY2PosI, 'T', WorkTab.dTPosI, EMC.CNT})
end end
table.insert( vCmd, { 11, 1}) -- chiudo Y1
table.insert( vCmd, { 12, 1}) -- Chiudo Y2 table.insert( vCmd, { 12, 1}) -- Chiudo Y2
table.insert( vCmd, { 11, 1}) -- chiudo Y1
-- imposto i nuovi parametri di aggancio -- imposto i nuovi parametri di aggancio
table.insert( vCmd, { 21, dY1DeltaF, dY2DeltaF}) table.insert( vCmd, { 21, dY1DeltaF, dY2DeltaF})
EgtOutLog( ' Y1DeltaF=' .. EgtNumToString( dY1DeltaF) .. ' Y2DeltaF=' .. EgtNumToString( dY2DeltaF), 1) EgtOutLog( ' Y1DeltaF=' .. EgtNumToString( dY1DeltaF) .. ' Y2DeltaF=' .. EgtNumToString( dY2DeltaF), 1)
@@ -2538,8 +2569,8 @@ function SpecAdjustCarrB2( WorkTab)
if not SpecTestSomeMoveInCmds( vCmd) then if not SpecTestSomeMoveInCmds( vCmd) then
table.insert( vCmd, { 3, 'Y1', dY1PosI, 'Y2', dY2PosI, 'T', WorkTab.dTPosI, EMC.CNT}) table.insert( vCmd, { 3, 'Y1', dY1PosI, 'Y2', dY2PosI, 'T', WorkTab.dTPosI, EMC.CNT})
end end
table.insert( vCmd, { 11, 1}) -- chiudo Y1
table.insert( vCmd, { 12, 1}) -- Chiudo Y2 table.insert( vCmd, { 12, 1}) -- Chiudo Y2
table.insert( vCmd, { 11, 1}) -- chiudo Y1
-- imposto i nuovi parametri di aggancio -- imposto i nuovi parametri di aggancio
table.insert( vCmd, { 21, dY1DeltaF, dY2DeltaF}) table.insert( vCmd, { 21, dY1DeltaF, dY2DeltaF})
EgtOutLog( ' Y1DeltaF=' .. EgtNumToString( dY1DeltaF) .. ' Y2DeltaF=' .. EgtNumToString( dY2DeltaF), 1) EgtOutLog( ' Y1DeltaF=' .. EgtNumToString( dY1DeltaF) .. ' Y2DeltaF=' .. EgtNumToString( dY2DeltaF), 1)
@@ -2599,7 +2630,7 @@ function SpecAdjustCarrC( WorkTab)
WorkTab.dY1DeltaMaxF = EMC.LB - ( MinJoin + MyTCING) WorkTab.dY1DeltaMaxF = EMC.LB - ( MinJoin + MyTCING)
-- se Y1 deve accentrarsi -- se Y1 deve accentrarsi
if WorkTab.dY1DeltaI > WorkTab.dY1DeltaMaxF then if WorkTab.dY1DeltaI > WorkTab.dY1DeltaMaxF then
WorkTab.dY1DeltaMinF = EMC.LB - 2 *( MinJoin + MyTCING) WorkTab.dY1DeltaMinF = EMC.LB - 2 * MinJoin - MyTCING
end end
end end
-- posizioni obiettivo dei carrelli al centro dei rispettivi intervalli di validità -- posizioni obiettivo dei carrelli al centro dei rispettivi intervalli di validità
+135 -4
View File
@@ -1,4 +1,124 @@
==== Essetre_StdPF Update Log ==== ==== Common_ONE-PF Update Log ====
Versione 2.6j1 (08/10/2024)
-- (SIM-GEN) Corretto primo movimento di approccio al pezzo. Ticket#2093
Versione 2.6i2 (13/09/2024)
- (GEN) Migliorato calcolo chiusura paratia rulli con aggiornamento lunghezza della barra in caso di ultimo taglio e grezzo residuo in coda. Ticket#2017
- (NGE-MLDE-GEN-SIM) Aggiunto solidi collisione TC. Corretto movimento a Y di sicurezza con lama. Ticket#2042
- (NGE-SIM) Aggiunta collisione magazzino motosega ONE
Versione 2.6i1 (02/09/2024)
- (SIM-GEN) Quando si aprono i rulli, se la trave non può seguire i rulli perchè la pinza andrebbe in extra-corsa, si sposta comunque la pinza fino al massimo della sua corsa. Ticket#1949
- (GEN) In preselezione. Se lavorazione motosega, non mando a parcheggio altra testa con utensile precedente, perchè subito dopo viene chiamata preselezione. Ticket#1961
Versione 2.6h2 (07/08/2024)
- (SIM) Allineata simulazione a generazione in primo movimento rapido approccio al pezzo.
Versione 2.6h1 (01/08/2024)
- (GEN) Corretto segno posizione X di sicurezza per rotazione assi rotanti.
Versione 2.6g5 (31/07/2024)
- (SIM-GEN) Se motosega allineata ad asse B per tagli di fianco, corretto movimento che manda testa a parcheggio. Pezzi più alti di 650 va solo in Zmax. Ticket#1943
- (SIM-GEN) Gestione movimenti speciali per pezzi molto alti. Se HomeZ < primo punto lavorazione, allora vado al punto Z lavorazione prima di approcciare il pezzo in X. Ticket#1943
- (GEN) Gestione creazione piano generico in caso il primo movimento della lavorazione sia un arco. Ticket#1891
- (SIM-GEN) Modifica limite inferirore intervallo di pinzaggio per garantire, se possibile, il passaggio pezzo a pinza 2. Da Common-PF1250.
- (GEN) Corretta scrittura ISO per parcheggiare morsa 3 dopo ribaltamento. Ticket#1922,#1733
Versione 2.6g4 (19/07/2024)
- (SIM-GEN) Aumentato numero iterazioni per scambio carrelli (da 5 a 10), per pezzi lunghi 30m.
Versione 2.6g3 (17/07/2024)
- (GEN) Correzione modifica precedente (2.6g2). Con lama precedente e motosega successiva, andava a parcheggio con lama alla quota della motosega. Ticket#1880
Versione 2.6g2 (16/07/2024)
- (GEN) Per preselezione o movimenti in home, non si scrive più 'ET0' perchè non è più supportato. Ticket#1926
Versione 2.6g1 (10/07/2024)
- (GEN) Se prima lavorazione con motosega, dopo G151 di attesa carrelli si ribadiscono tutti gli assi. Ticket#1924
Versione 2.6f1 (03/06/2024)
- (GEN) Aggiunta possibilità di scrivere nome utensile doppio anche in lavorazione con parametro "TOOLDOUBLE". Note sulla lavorazione hanno precedenza su note utensile.
Versione 2.6e1 (30/04/2024)
- (GEN) Chiamando la macchina con un nome che termini con '.TEST' si abilita come macchina per test interni, equivalente a settare 'IS_TEST_MACHINE' (che comunque rimane)
- (SIM) In log collisioni, si scrive anche ID del gruppo per facilitare riconoscimento in caso di collisione
- (MLDE-GEN) Gestione facoltativa parametro WOOD_DENSITY settabile in Ts3. In MLDE, mettere il valore di WOOD_DENSITY nella nostra variabile 'WoodDensity'.
Versione 2.6d2 (12/04/2024)
- (MLDE-SIM-GEN) Aggiunta variabile FACOLTATIVA 'ForceToCloseRollersGate' ( che legge la variabile da TS3 'CHIUDI_PINZE_2_3_SCAMBIO') in mlde per forzare chiusura paratie rulli
durante scambio pinze per facilitare passaggio pezzi molto storti. Se non presente chiude solo se necessario.
Versione 2.6d1 (28/03/2024)
- (GEN) Rimosso da generazione funzione GetNextTool duplicata
- (SIM-GEN) Se fase successiva start di un altro pezzo, la GetNextTool restituisce nil, per forzare movimento home in caso di utensili speciali
- (MLDE-GEN) Aggiunto parametro 'IS_TEST_MACHINE' FACOLTATIVO. Se non esiste o 'false' è macchina standard, se 'true' è una macchina utilizzata per i test Egalware interni
- (SIM) Corretto movimento in simulazione se motosega su testa 2
Versione 2.6c9 (26/03/2024)
- (SIM) Corretta gestione cambio utensile con motosega. In alcuni casi non era coerente con generazione
- (GEN) In 'PreparePostRotation' si resetta sempre anche la paratia in uscita (Ticket#1733)
Versione 2.6c8 (22/03/2024)
- (SIM) Miglioramento visualizzazione spigoli VMILL alla fine della simulazione. Funzione: EgtVolZmapSetShowEdges. CAM5 ver. 2.6c2 FACOLTATIVA.
Versione 2.6c7 (11/03/2024)
- (SIM-GEN) Aggiunta gestione parametro "SECDIST". Distanza di sicurezza tra paratia con rulli e utensile/testa. Parametro da inserire nelle note utensile.
- (MLPE-GEN) Aggiunto parametro "WriteM05Command" (NON OBBLIGATORIO) per decidere se scrivere il comando M05 per arresto mandrino. Default a true.
Versione 2.6c6 (08/03/2024)
- (SIM-GEN) Gestione rotazioni 90° come su FAST, caso MID2 (split/cut prima delle rotazioni)
Versione 2.6c5 (07/03/2024)
- (GEN) Per ribaltamento, i comandi si differenziano per macchina. Sembra che ONE e PF abbiano comandi diversi. In attesa di conferma da parte di Essetre
- (SIM-GEN) Se cambiato utensile, si aprono sempre paratie
- (SIM) Spostato salvataggio dati utensile precedente in MachiningEnd, prima era in MachininsStart
Versione 2.6c4 (06/03/2024)
- (SIM-GEN) Alla fine del movimento a Z-MAX, in home con lama solo se si cambia utensile. Prima andava sempre in home se era lama, anche se non doveva cambiare utensile
Versione 2.6c3 (05/03/2024)
- (MLDE-SIM) Aggiunta variabile FACOLTATIVA 'EstimationRapidMultiplier' in mlde per regolare il tempo stimato di rapido su macchine vecchie. Se non presente default 1.
Versione 2.6c2 (04/03/2024)
- (MLDE-GEN) Aggiunta variabile 'MACH_NAME' in mlde con nome macchina
Versione 2.6c1 (29/02/2024)
- (SIM) Gestione rimozione VMILL per tagli a cubetti Zig-Zag
Versione 2.6b2 (26/02/2024)
- (MLDE-SIM-GEN) EgtAddToPackagePath spostato in mlde
Versione 2.6b1 (20/02/2024)
- (SIM) Corretto controllo calcolo Z su primo movimento lama, allineato a generazione
- (GEN) Corretto emissione movimenti per macchine con motosega su testa 2
- (SIM) Aggiunta funzioni "OnSimulInit" e "OnSimulExit" per orientare vista corretta in caso di macchina con carico destro. N.B.= serve CAM5 2.6b4
- (ALL) "BeamData" caricato come libreria con 'require' anziché come file con 'dofile'
- (GEN) In "GetMovesInAuxCmd" si passa la posizione calcolata V1 indipendentemente dall'utilizzo di Y1
Versione 2.6a7 (12/02/2024)
- (GEN) Per movimento con motosega, si ribadiscono tutti gli assi nella prima G141
Versione 2.6a6 (02/02/2024)
- (SIM) Corretta simulazione movimento in X-Home, coerente con generazione
- (GEN) Aggiunta lettura parametro 'Split'
- (SIM) Se lavorazione è un taglio di separazione, se necessario, ripristino posizione di Y1DELTA prima di aprire i rulli
- (SIM-GEN) Modificata gestione movimenti motosega, in aggiunta con caso particolare di pezzo alto più di 650mm
- (ALL) Caricamento BeamData come local
Versione 2.6a5 (26/01/2024)
- (SIM-GEN) Migliorato calcolo dimensioni grezzo per apertura rulli in caso di 'precut'
Versione 2.6a4 (24/01/2024)
- (GEN) Se pezzo tenuto solo con pinza destra non si esclude la rulliera di sinistra, se pezzogrande, può venire in supporto
- (SIM-GEN) Correzione gestione apertura/chiusura rulli sul fine barra e in generale (da PF1250)
- (SIM) Aggiunto solido collisione lama sotto traversa (per PF-progress)
Versione 2.6a3 (23/01/2024)
- (GEN) Corretto gestione del movimento precedente all'ultimo che manda il pezzo alla posizione di scarico
Versione 2.6a2 (09/01/2024)
- Nuova versione. Prima versione stabile rilasciabile.
Versione 2.6a1 (28/11/2023) Versione 2.6a1 (28/11/2023)
- Prima versione post-proc comune tra macchine ONE e PF - Prima versione post-proc comune tra macchine ONE e PF
@@ -9,6 +129,17 @@ Versione 2.6a1 (28/11/2023)
- (GEN+MLDE) Inserita gestione macro con carico ottimizzato. Macro macchina presente come standard solo su macchine PF. Parametro "OptimizedLoadBeam" - (GEN+MLDE) Inserita gestione macro con carico ottimizzato. Macro macchina presente come standard solo su macchine PF. Parametro "OptimizedLoadBeam"
- (GEN+SIM) Migliorata gestione riposizionamento pinze, in caso testa debba andare in home - (GEN+SIM) Migliorata gestione riposizionamento pinze, in caso testa debba andare in home
- (GEN) Se a zeta massima con lama e utensile successivo diverso, mi sposto sempre verso X-HOME - (GEN) Se a zeta massima con lama e utensile successivo diverso, mi sposto sempre verso X-HOME
- (GEN) Corretto movimento in caso di testa 1 su TC-2. Utilizzava le quote della testa 2 anziché della 1. - (GEN) Corretto movimento in caso di testa 1 su TC-2. Utilizzava le quote della testa 2 anziché della 1
Versione 2.6a2 (09/01/2024)
- Nuova versione. Prima versione stabile rilasciabile.
+1 -1
View File
@@ -3,7 +3,7 @@
local InfoCommon_STD_PP = { local InfoCommon_STD_PP = {
NAME = 'Common_ONE-PF', -- nome script PP standard NAME = 'Common_ONE-PF', -- nome script PP standard
VERSION = '2.6a2', -- versione script VERSION = '2.6j1', -- versione script
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
} }