commit 2c84f82a3683ad3b910461e78fcefad91c7cb2f3 Author: DarioS Date: Fri May 5 11:21:42 2023 +0200 Essetre-90480031 2.5e1 : - primo commit. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..196fc23 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +/Tools +/Machinings +/SetUp +/Beam/Ts3Data.bak +/Beam/CutData.lua +/Beam/DrillData.lua +/Beam/MillingData.lua +/Beam/PocketingData.lua +/Beam/SawingData.lua +/Beam/Ts3Data.lua +/Wall/Ts3Data.bak +/Wall/CutData.lua +/Wall/DrillData.lua +/Wall/MillingData.lua +/Wall/PocketingData.lua +/Wall/SawingData.lua +/Wall/Ts3Data.lua diff --git a/Essetre-90480031.ini b/Essetre-90480031.ini new file mode 100644 index 0000000..8f600fc --- /dev/null +++ b/Essetre-90480031.ini @@ -0,0 +1,369 @@ +; Commento per evitare BOM con UTF-8 +[General] +Material=Beam +NCType=2 ; 1=Tpa, 2=Num Flexium + +[Axes] +; 1 = Type, Id, Name +; Type => l=linear;r=rotational +1=l,0,X +2=l,1,Y +3=l,2,Z +4=l,3,U +5=r,4,V +6=l,5,W +7=r,6,A +8=r,7,B +9=r,8,C + +[Channels] +1=0,Channel 1 +2=1,Channel 2 + +[MainVariables] +; 1 = Name, Variable Path, ReadType, Type +; ReadType => o=one time;c=continuous +; Type => plc;cn +1=P_Prod,E81295,c,cn +2=P_Machgroup,E81296,c,cn +3=P_Part,E81297,c,cn +4=P_State,E81298,c,cn +5=Reset_State,E80048,c,cn +6=ISO_Num,E80045,c,cn +7=ISO_Sent,E80046,c,cn +8=Running,E80047,c,cn +9=Start_State,Application.IOCONFIG_GLOBALS.Flexium_NCK.RCNC.General.Start,c,plc +10=Stop_State,Application.IOCONFIG_GLOBALS.Flexium_NCK.RCNC.General.Stop,c,plc +11=MachIndex,E80000,c,cn +12=ToolIndex,E80001,c,cn + +[Variables] +; 1 = Name, Variable Path, ReadType, Type +; ReadType => o=one time;c=continuous +; Type => plc;cn +;1=Ingresso1,Application.IoConfig_Globals_Mapping.A0,c,plc +;2=Ingresso2,Application.IoConfig_Globals_Mapping.A1,c,plc +;3=Ingresso3,Application.IoConfig_Globals_Mapping.A2,c,plc +;4=Ingresso4,Application.IoConfig_Globals_Mapping.A3,c,plc +;5=P_Prod,E81295,c,cn +;6=P_Machgroup,E81296,c,cn +;7=P_Part,E81297,c,cn +;8=P_State,E81298,c,cn +;9=Reset_State,E80048,c,cn +;10=Uscita1,Application.IoConfig_Globals_Mapping.E0,c,plc +;11=Uscita2,Application.IoConfig_Globals_Mapping.E1,c,plc +;12=Start_State,Application.IoConfig_Globals.Flexium_NCK.RCNC.General.Start,c,plc +;13=Stop_State,Application.IoConfig_Globals.Flexium_NKC.RCNC.General.Stop,c,plc + +[InputVariables] +; 1 = Name, Variable Path, ReadType, Type +; ReadType => o=one time;c=continuous +; Type => plc;cn +1=INPUT E0, Application.IoConfig_Globals_Mapping.E0, c, plc, 1 +2=INPUT E1, Application.IoConfig_Globals_Mapping.E1, c, plc, 2 +3=INPUT E2, Application.IoConfig_Globals_Mapping.E2, c, plc, 3 +4=INPUT E3, Application.IoConfig_Globals_Mapping.E3, c, plc, 4 +5=INPUT E4, Application.IoConfig_Globals_Mapping.E4, c, plc, 5 +6=INPUT E5, Application.IoConfig_Globals_Mapping.E5, c, plc, 6 +7=INPUT E6, Application.IoConfig_Globals_Mapping.E6, c, plc, 7 +8=INPUT E7, Application.IoConfig_Globals_Mapping.E7, c, plc, 8 +9=INPUT E8, Application.IoConfig_Globals_Mapping.E8, c, plc, 9 +10=INPUT E9, Application.IoConfig_Globals_Mapping.E9, c, plc, 10 +11=INPUT E10, Application.IoConfig_Globals_Mapping.E10, c, plc, 11 +12=INPUT E11, Application.IoConfig_Globals_Mapping.E11, c, plc, 12 +13=INPUT E12, Application.IoConfig_Globals_Mapping.E12, c, plc, 13 +14=INPUT E13, Application.IoConfig_Globals_Mapping.E13, c, plc, 14 +15=INPUT E14, Application.IoConfig_Globals_Mapping.E14, c, plc, 15 +16=INPUT E15, Application.IoConfig_Globals_Mapping.E15, c, plc, 16 +17=INPUT E16, Application.IoConfig_Globals_Mapping.E16, c, plc, 17 +18=INPUT E17, Application.IoConfig_Globals_Mapping.E17, c, plc, 18 +19=INPUT E18, Application.IoConfig_Globals_Mapping.E18, c, plc, 19 +20=INPUT E19, Application.IoConfig_Globals_Mapping.E19, c, plc, 20 +21=INPUT E20, Application.IoConfig_Globals_Mapping.E20, c, plc, 21 +22=INPUT E21, Application.IoConfig_Globals_Mapping.E21, c, plc, 22 +23=INPUT E22, Application.IoConfig_Globals_Mapping.E22, c, plc, 23 +24=INPUT E23, Application.IoConfig_Globals_Mapping.E23, c, plc, 24 +25=INPUT E24, Application.IoConfig_Globals_Mapping.E24, c, plc, 25 +26=INPUT E25, Application.IoConfig_Globals_Mapping.E25, c, plc, 26 +27=INPUT E26, Application.IoConfig_Globals_Mapping.E26, c, plc, 27 +28=INPUT E27, Application.IoConfig_Globals_Mapping.E27, c, plc, 28 +29=INPUT E28, Application.IoConfig_Globals_Mapping.E28, c, plc, 29 +30=INPUT E29, Application.IoConfig_Globals_Mapping.E29, c, plc, 30 +31=INPUT E30, Application.IoConfig_Globals_Mapping.E30, c, plc, 31 +32=INPUT E31, Application.IoConfig_Globals_Mapping.E31, c, plc, 32 +33=INPUT E32, Application.IoConfig_Globals_Mapping.E32, c, plc, 33 +34=INPUT E33, Application.IoConfig_Globals_Mapping.E33, c, plc, 34 +35=INPUT E34, Application.IoConfig_Globals_Mapping.E34, c, plc, 35 +36=INPUT E35, Application.IoConfig_Globals_Mapping.E35, c, plc, 36 +37=INPUT E36, Application.IoConfig_Globals_Mapping.E36, c, plc, 37 +38=INPUT E37, Application.IoConfig_Globals_Mapping.E37, c, plc, 38 +39=INPUT E38, Application.IoConfig_Globals_Mapping.E38, c, plc, 39 +40=INPUT E39, Application.IoConfig_Globals_Mapping.E39, c, plc, 40 +41=INPUT E40, Application.IoConfig_Globals_Mapping.E40, c, plc, 41 +42=INPUT E41, Application.IoConfig_Globals_Mapping.E41, c, plc, 42 +43=INPUT E42, Application.IoConfig_Globals_Mapping.E42, c, plc, 43 +44=INPUT E43, Application.IoConfig_Globals_Mapping.E43, c, plc, 44 +45=INPUT E44, Application.IoConfig_Globals_Mapping.E44, c, plc, 45 +46=INPUT E45, Application.IoConfig_Globals_Mapping.E45, c, plc, 46 +47=INPUT E46, Application.IoConfig_Globals_Mapping.E46, c, plc, 47 +48=INPUT E47, Application.IoConfig_Globals_Mapping.E47, c, plc, 48 +49=INPUT E48, Application.IoConfig_Globals_Mapping.E48, c, plc, 49 +50=INPUT E49, Application.IoConfig_Globals_Mapping.E49, c, plc, 50 +51=INPUT E50, Application.IoConfig_Globals_Mapping.E50, c, plc, 51 +52=INPUT E51, Application.IoConfig_Globals_Mapping.E51, c, plc, 52 +53=INPUT E52, Application.IoConfig_Globals_Mapping.E52, c, plc, 53 +54=INPUT E53, Application.IoConfig_Globals_Mapping.E53, c, plc, 54 +55=INPUT E54, Application.IoConfig_Globals_Mapping.E54, c, plc, 55 +56=INPUT E55, Application.IoConfig_Globals_Mapping.E55, c, plc, 56 +57=INPUT E56, Application.IoConfig_Globals_Mapping.E56, c, plc, 57 +58=INPUT E57, Application.IoConfig_Globals_Mapping.E57, c, plc, 58 +59=INPUT E58, Application.IoConfig_Globals_Mapping.E58, c, plc, 59 +60=INPUT E59, Application.IoConfig_Globals_Mapping.E59, c, plc, 60 +61=INPUT E60, Application.IoConfig_Globals_Mapping.E60, c, plc, 61 +62=INPUT E61, Application.IoConfig_Globals_Mapping.E61, c, plc, 62 +63=INPUT E62, Application.IoConfig_Globals_Mapping.E62, c, plc, 63 +64=INPUT E63, Application.IoConfig_Globals_Mapping.E63, c, plc, 64 +65=INPUT E64, Application.IoConfig_Globals_Mapping.E64, c, plc, 65 +66=INPUT E65, Application.IoConfig_Globals_Mapping.E65, c, plc, 66 +67=INPUT E66, Application.IoConfig_Globals_Mapping.E66, c, plc, 67 +68=INPUT E67, Application.IoConfig_Globals_Mapping.E67, c, plc, 68 +69=INPUT E68, Application.IoConfig_Globals_Mapping.E68, c, plc, 69 +70=INPUT E69, Application.IoConfig_Globals_Mapping.E69, c, plc, 70 +71=INPUT E70, Application.IoConfig_Globals_Mapping.E70, c, plc, 71 +72=INPUT E71, Application.IoConfig_Globals_Mapping.E71, c, plc, 72 +73=INPUT E72, Application.IoConfig_Globals_Mapping.E72, c, plc, 73 +74=INPUT E73, Application.IoConfig_Globals_Mapping.E73, c, plc, 74 +75=INPUT E74, Application.IoConfig_Globals_Mapping.E74, c, plc, 75 +76=INPUT E75, Application.IoConfig_Globals_Mapping.E75, c, plc, 76 +77=INPUT E76, Application.IoConfig_Globals_Mapping.E76, c, plc, 77 +78=INPUT E77, Application.IoConfig_Globals_Mapping.E77, c, plc, 78 +79=INPUT E78, Application.IoConfig_Globals_Mapping.E78, c, plc, 79 +80=INPUT E79, Application.IoConfig_Globals_Mapping.E79, c, plc, 80 +81=INPUT E80, Application.IoConfig_Globals_Mapping.E80, c, plc, 81 +82=INPUT E81, Application.IoConfig_Globals_Mapping.E81, c, plc, 82 +83=INPUT E82, Application.IoConfig_Globals_Mapping.E82, c, plc, 83 +84=INPUT E83, Application.IoConfig_Globals_Mapping.E83, c, plc, 84 +85=INPUT E84, Application.IoConfig_Globals_Mapping.E84, c, plc, 85 +86=INPUT E85, Application.IoConfig_Globals_Mapping.E85, c, plc, 86 +87=INPUT E86, Application.IoConfig_Globals_Mapping.E86, c, plc, 87 +88=INPUT E87, Application.IoConfig_Globals_Mapping.E87, c, plc, 88 +89=INPUT E88, Application.IoConfig_Globals_Mapping.E88, c, plc, 89 +90=INPUT E89, Application.IoConfig_Globals_Mapping.E89, c, plc, 90 +91=INPUT E90, Application.IoConfig_Globals_Mapping.E90, c, plc, 91 +92=INPUT E91, Application.IoConfig_Globals_Mapping.E91, c, plc, 92 +93=INPUT E92, Application.IoConfig_Globals_Mapping.E92, c, plc, 93 +94=INPUT E93, Application.IoConfig_Globals_Mapping.E93, c, plc, 94 +95=INPUT E94, Application.IoConfig_Globals_Mapping.E94, c, plc, 95 +96=INPUT E95, Application.IoConfig_Globals_Mapping.E95, c, plc, 96 + +[OutputVariables] +; 1 = Name, Variable Path, ReadType, Type +; ReadType => o=one time;c=continuous +; Type => plc;cn +1=OUTPUT A0, Application.IoConfig_Globals_Mapping.A0, c, plc, 1 +2=OUTPUT A1, Application.IoConfig_Globals_Mapping.A1, c, plc, 2 +3=OUTPUT A2, Application.IoConfig_Globals_Mapping.A2, c, plc, 3 +4=OUTPUT A3, Application.IoConfig_Globals_Mapping.A3, c, plc, 4 +5=OUTPUT A4, Application.IoConfig_Globals_Mapping.A4, c, plc, 5 +6=OUTPUT A5, Application.IoConfig_Globals_Mapping.A5, c, plc, 6 +7=OUTPUT A6, Application.IoConfig_Globals_Mapping.A6, c, plc, 7 +8=OUTPUT A7, Application.IoConfig_Globals_Mapping.A7, c, plc, 8 +9=OUTPUT A8, Application.IoConfig_Globals_Mapping.A8, c, plc, 9 +10=OUTPUT A9, Application.IoConfig_Globals_Mapping.A9, c, plc, 10 +11=OUTPUT A10, Application.IoConfig_Globals_Mapping.A10, c, plc, 11 +12=OUTPUT A11, Application.IoConfig_Globals_Mapping.A11, c, plc, 12 +13=OUTPUT A12, Application.IoConfig_Globals_Mapping.A12, c, plc, 13 +14=OUTPUT A13, Application.IoConfig_Globals_Mapping.A13, c, plc, 14 +15=OUTPUT A14, Application.IoConfig_Globals_Mapping.A14, c, plc, 15 +16=OUTPUT A15, Application.IoConfig_Globals_Mapping.A15, c, plc, 16 +17=OUTPUT A16, Application.IoConfig_Globals_Mapping.A16, c, plc, 17 +18=OUTPUT A17, Application.IoConfig_Globals_Mapping.A17, c, plc, 18 +19=OUTPUT A18, Application.IoConfig_Globals_Mapping.A18, c, plc, 19 +20=OUTPUT A19, Application.IoConfig_Globals_Mapping.A19, c, plc, 20 +21=OUTPUT A20, Application.IoConfig_Globals_Mapping.A20, c, plc, 21 +22=OUTPUT A21, Application.IoConfig_Globals_Mapping.A21, c, plc, 22 +23=OUTPUT A22, Application.IoConfig_Globals_Mapping.A22, c, plc, 23 +24=OUTPUT A23, Application.IoConfig_Globals_Mapping.A23, c, plc, 24 +25=OUTPUT A24, Application.IoConfig_Globals_Mapping.A24, c, plc, 25 +26=OUTPUT A25, Application.IoConfig_Globals_Mapping.A25, c, plc, 26 +27=OUTPUT A26, Application.IoConfig_Globals_Mapping.A26, c, plc, 27 +28=OUTPUT A27, Application.IoConfig_Globals_Mapping.A27, c, plc, 28 +29=OUTPUT A28, Application.IoConfig_Globals_Mapping.A28, c, plc, 29 +30=OUTPUT A29, Application.IoConfig_Globals_Mapping.A29, c, plc, 30 +31=OUTPUT A30, Application.IoConfig_Globals_Mapping.A30, c, plc, 31 +32=OUTPUT A31, Application.IoConfig_Globals_Mapping.A31, c, plc, 32 +33=OUTPUT A32, Application.IoConfig_Globals_Mapping.A32, c, plc, 33 +34=OUTPUT A33, Application.IoConfig_Globals_Mapping.A33, c, plc, 34 +35=OUTPUT A34, Application.IoConfig_Globals_Mapping.A34, c, plc, 35 +36=OUTPUT A35, Application.IoConfig_Globals_Mapping.A35, c, plc, 36 +37=OUTPUT A36, Application.IoConfig_Globals_Mapping.A36, c, plc, 37 +38=OUTPUT A37, Application.IoConfig_Globals_Mapping.A37, c, plc, 38 +39=OUTPUT A38, Application.IoConfig_Globals_Mapping.A38, c, plc, 39 +40=OUTPUT A39, Application.IoConfig_Globals_Mapping.A39, c, plc, 40 +41=OUTPUT A40, Application.IoConfig_Globals_Mapping.A40, c, plc, 41 +42=OUTPUT A41, Application.IoConfig_Globals_Mapping.A41, c, plc, 42 +43=OUTPUT A42, Application.IoConfig_Globals_Mapping.A42, c, plc, 43 +44=OUTPUT A43, Application.IoConfig_Globals_Mapping.A43, c, plc, 44 +45=OUTPUT A44, Application.IoConfig_Globals_Mapping.A44, c, plc, 45 +46=OUTPUT A45, Application.IoConfig_Globals_Mapping.A45, c, plc, 46 +47=OUTPUT A46, Application.IoConfig_Globals_Mapping.A46, c, plc, 47 +48=OUTPUT A47, Application.IoConfig_Globals_Mapping.A47, c, plc, 48 +49=OUTPUT A48, Application.IoConfig_Globals_Mapping.A48, c, plc, 49 +50=OUTPUT A49, Application.IoConfig_Globals_Mapping.A49, c, plc, 50 +51=OUTPUT A50, Application.IoConfig_Globals_Mapping.A50, c, plc, 51 +52=OUTPUT A51, Application.IoConfig_Globals_Mapping.A51, c, plc, 52 +53=OUTPUT A52, Application.IoConfig_Globals_Mapping.A52, c, plc, 53 +54=OUTPUT A53, Application.IoConfig_Globals_Mapping.A53, c, plc, 54 +55=OUTPUT A54, Application.IoConfig_Globals_Mapping.A54, c, plc, 55 +56=OUTPUT A55, Application.IoConfig_Globals_Mapping.A55, c, plc, 56 +57=OUTPUT A56, Application.IoConfig_Globals_Mapping.A56, c, plc, 57 +58=OUTPUT A57, Application.IoConfig_Globals_Mapping.A57, c, plc, 58 +59=OUTPUT A58, Application.IoConfig_Globals_Mapping.A58, c, plc, 59 +60=OUTPUT A59, Application.IoConfig_Globals_Mapping.A59, c, plc, 60 +61=OUTPUT A60, Application.IoConfig_Globals_Mapping.A60, c, plc, 61 +62=OUTPUT A61, Application.IoConfig_Globals_Mapping.A61, c, plc, 62 +63=OUTPUT A62, Application.IoConfig_Globals_Mapping.A62, c, plc, 63 +64=OUTPUT A63, Application.IoConfig_Globals_Mapping.A63, c, plc, 64 +65=OUTPUT A64, Application.IoConfig_Globals_Mapping.A64, c, plc, 65 +66=OUTPUT A65, Application.IoConfig_Globals_Mapping.A65, c, plc, 66 +67=OUTPUT A66, Application.IoConfig_Globals_Mapping.A66, c, plc, 67 +68=OUTPUT A67, Application.IoConfig_Globals_Mapping.A67, c, plc, 68 +69=OUTPUT A68, Application.IoConfig_Globals_Mapping.A68, c, plc, 69 +70=OUTPUT A69, Application.IoConfig_Globals_Mapping.A69, c, plc, 70 +71=OUTPUT A70, Application.IoConfig_Globals_Mapping.A70, c, plc, 71 +72=OUTPUT A71, Application.IoConfig_Globals_Mapping.A71, c, plc, 72 +73=OUTPUT A72, Application.IoConfig_Globals_Mapping.A72, c, plc, 73 +74=OUTPUT A73, Application.IoConfig_Globals_Mapping.A73, c, plc, 74 +75=OUTPUT A74, Application.IoConfig_Globals_Mapping.A74, c, plc, 75 +76=OUTPUT A75, Application.IoConfig_Globals_Mapping.A75, c, plc, 76 +77=OUTPUT A76, Application.IoConfig_Globals_Mapping.A76, c, plc, 77 +78=OUTPUT A77, Application.IoConfig_Globals_Mapping.A77, c, plc, 78 +79=OUTPUT A78, Application.IoConfig_Globals_Mapping.A78, c, plc, 79 +80=OUTPUT A79, Application.IoConfig_Globals_Mapping.A79, c, plc, 80 +81=OUTPUT A80, Application.IoConfig_Globals_Mapping.A80, c, plc, 81 +82=OUTPUT A81, Application.IoConfig_Globals_Mapping.A81, c, plc, 82 +83=OUTPUT A82, Application.IoConfig_Globals_Mapping.A82, c, plc, 83 +84=OUTPUT A83, Application.IoConfig_Globals_Mapping.A83, c, plc, 84 +85=OUTPUT A84, Application.IoConfig_Globals_Mapping.A84, c, plc, 85 +86=OUTPUT A85, Application.IoConfig_Globals_Mapping.A85, c, plc, 86 +87=OUTPUT A86, Application.IoConfig_Globals_Mapping.A86, c, plc, 87 +88=OUTPUT A87, Application.IoConfig_Globals_Mapping.A87, c, plc, 88 +89=OUTPUT A88, Application.IoConfig_Globals_Mapping.A88, c, plc, 89 +90=OUTPUT A89, Application.IoConfig_Globals_Mapping.A89, c, plc, 90 +91=OUTPUT A90, Application.IoConfig_Globals_Mapping.A90, c, plc, 91 +92=OUTPUT A91, Application.IoConfig_Globals_Mapping.A91, c, plc, 92 +93=OUTPUT A92, Application.IoConfig_Globals_Mapping.A92, c, plc, 93 +94=OUTPUT A93, Application.IoConfig_Globals_Mapping.A93, c, plc, 94 +95=OUTPUT A94, Application.IoConfig_Globals_Mapping.A94, c, plc, 95 +96=OUTPUT A95, Application.IoConfig_Globals_Mapping.A95, c, plc, 96 + +[MDI] +; 1 = Command, Description +1=M6T1L0=1,1 +2=M6T2L0=1,2 +3=M6T3L0=1,3 +4=M6T4L0=1,4 +5=M6T5L0=1,5 +6=M6T6L0=1,6 +7=M6T7L0=1,7 +8=M6T8L0=1,8 +9=M6T9L0=1,9 +10=M6T10L0=1,10 +11=M6T11L0=1,11 +12=M6T12L0=1,12 +13=M6T13L0=1,13 +14=M6T14L0=1,14 +15=M6T15L0=1,15 +16=M6T16L0=1,16 +17=M6T17L0=1,17 +18=M6T18L0=1,18 +19=M6T101L0=1,19 +20=M6T201L0=1,20 +21=M6T202L0=1,21 +22=M6T203L0=1,22 +23=M6T50L0=1,23 +24=E80001=0,24 +25=M6T1L0=2,25 +26=M6T2L0=2,26 +27=M6T3L0=2,27 +28=M6T4L0=2,28 +29=M6T5L0=2,29 +30=M6T6L0=2,30 +31=M6T7L0=2,31 +32=M6T8L0=2,32 +33=M6T9L0=2,33 +34=M6T10L0=2,34 +35=M6T11L0=2,35 +36=M6T12L0=2,36 +37=M6T13L0=2,37 +38=M6T14L0=2,38 +39=M6T15L0=2,39 +40=M6T16L0=2,40 +41=M6T17L0=2,41 +42=M6T18L0=2,42 +43=M6T101L0=2,43 +44=M6T201L0=2,44 +45=M6T202L0=2,45 +46=M6T203L0=2,46 +47=M6T50L0=2,47 +48=E80002=0,48 + +[Languages] +Enable=1 +Language1=Italiano,Ita.txt +Language2=English,Eng.txt + +[Tools] +Drillbit=1 +Sawblade=1 +Mill=1 +Mortise=1 +Chisel=0 +DrillMaker=MakeWoodDrill.lua +SawbladeMaker=MakeSawblade.lua +MillMaker=MakeWoodCylMill.lua +MortiseMaker=MakeMortise.lua +ChiselMaker=MakeChisel.lua +Active=1 + +[ToolHolder] +H1.1=Standard.nge +H1.1:MILL_NOTIP=MillNoTip.nge +H2.1=SawOnH2.nge +H3.1=ChainSaw.nge + +[Machinings] +Drilling=1 +Sawing=1 +Milling=1 +Pocketing=1 +Mortising=1 +Chiseling=0 +SawRoughing=0 +SawFinishing=0 + +[Machining] +InitScript=InitMach.lua +ExitScript=ExitMach.lua + +[Disposition] +;InitScript=InitDisp.lua + +[Heads] +; 5 axis head +H1=6608 +; 5 axis saw +H2=6615 +; Chainsaw +H3=6616 + +[SetUp] +Default=Standard + +[Estimations] +Enable=1 +WinPlace=0,514,138,628,810 + +[VMill] +Enable=1 +Save=0 diff --git a/Essetre-90480031.mlde b/Essetre-90480031.mlde new file mode 100644 index 0000000..6ff9909 --- /dev/null +++ b/Essetre-90480031.mlde @@ -0,0 +1,442 @@ +-- Descrizione macchina Essetre-90480031 by Egalware s.r.l. 2023/05/05 +-- Macchina Wall. + +require( 'EmtGenerator') +EgtEnableDebug( false) + +PP_VER = '2.5e1' + +-- Parametri macchina +NumericalControl = 'NUM' -- NUM o TPA +MinY = 0.0 +MaxY = 21200.0 +MinX1 = -5285.0 +MaxX1 = 0.0 +ParkTSpecX1 = -4200 +MinZ1 = -1585.0 +MaxZ1 = 0.0 +MinB1 = -135.0 +MaxB1 = 135.0 +MinC1 = -275.0 +MaxC1 = 275.0 +MillOffs = 202.0 +ChSawLen = 96.0 +MinX2 = -6055.0 +MaxX2 = -840.0 +MinZ2 = -1180.0 +MaxZ2 = 0.0 +MinB2 = 0.0 +MaxB2 = 90.0 +MinC2 = -275.0 +MaxC2 = 275.0 +SawDeltaX = 347.5 +SawDeltaY = 0.0 +SawDeltaZ = -115.0 +SawOffs = 163.5 +Orig2DeltaX = 0 +Orig2DeltaY = -3500 +Orig2DeltaZ = 0 +Orig3DeltaX = 21120 +Orig3DeltaY = 0 +Orig3DeltaZ = 0 +Orig4DeltaX = 21120 +Orig4DeltaY = -3500 +Orig4DeltaZ = 0 +DimTabX = 21120.0 +DimTabY = 3500.0 +DeltaTabX = 1299.65 +DeltaTabY = -1290.0 - DimTabY +DeltaTabZ = -960.0 +CoeffVM = 0.5 + +-- Aggiornamento con dati da TechnoEssetre7 +local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-90480031.data" +local sData = EgtGetSourceDir().."\\Wall\\Ts3Data.lua" +if EgtExistsFile( sTs3Data) then + EgtCopyFile( sTs3Data, sData) + local sTs3DataOld = sTs3Data..'.old' + EgtEraseFile( sTs3DataOld) + EgtRenameFile( sTs3Data, sTs3DataOld) +end + +if EgtExistsFile( sData) then + local Machine = dofile( sData) + if Machine and Machine.Offsets then + local MchOffs = Machine.Offsets + NumericalControl = EgtIf( MchOffs.TIPO_CN ~= 1, 'NUM', 'TPA') + if MchOffs.MAX_Y then MinY = -MchOffs.MAX_Y end + if MchOffs.MIN_Y then MaxY = -MchOffs.MIN_Y end + MinX1 = MchOffs.MIN_X or MinX1 + MaxX1 = MchOffs.MAX_X or MaxX1 + MinZ1 = MchOffs.MIN_Z or MinZ1 + MaxZ1 = MchOffs.MAX_Z or MaxZ1 + MinB1 = MchOffs.MIN_B or MinB1 + MaxB1 = MchOffs.MAX_B or MaxB1 + MinC1 = MchOffs.MIN_C or MinC1 + MaxC1 = MchOffs.MAX_C or MaxC1 + MinX2 = MchOffs.MIN_U or MinX2 + MaxX2 = MchOffs.MAX_U or MaxX2 + MinZ2 = MchOffs.MIN_W or MinZ2 + MaxZ2 = MchOffs.MAX_W or MaxZ2 + MinB2 = MchOffs.MIN_V or MinB2 + MaxB2 = MchOffs.MAX_V or MaxB2 + MinC2 = MchOffs.MIN_A or MinC2 + MaxC2 = MchOffs.MAX_A or MaxC2 + MillOffs = MchOffs.PIVOT_MILL or MillOffs + SawOffs = MchOffs.PIVOT_SAW or SawOffs + if MchOffs.OFFSET_ZERO3_Y then DimTabX = - MchOffs.OFFSET_ZERO3_Y end + if MchOffs.OFFSET_ZERO2_X then DimTabY = - MchOffs.OFFSET_ZERO2_X end + if MchOffs.ZERO_Y_MILL then DeltaTabX = - MchOffs.ZERO_Y_MILL end + if MchOffs.ZERO_X_MILL then DeltaTabY = ( MchOffs.ZERO_X_MILL - DimTabY) end + DeltaTabZ = MchOffs.ZERO_Z_MILL or DeltaTabZ + if MchOffs.ZERO_Y_MILL and MchOffs.ZERO_Y_SAW then SawDeltaX = - ( MchOffs.ZERO_Y_MILL - MchOffs.ZERO_Y_SAW) end + if MchOffs.ZERO_X_MILL and MchOffs.ZERO_X_SAW then SawDeltaY = ( MchOffs.ZERO_X_MILL - MchOffs.ZERO_X_SAW) end + if MchOffs.ZERO_Z_MILL and MchOffs.ZERO_Z_SAW then SawDeltaZ = ( MchOffs.ZERO_Z_MILL - MchOffs.ZERO_Z_SAW) end + if MchOffs.OFFSET_ZERO2_Y then Orig2DeltaX = -MchOffs.OFFSET_ZERO2_Y end + if MchOffs.OFFSET_ZERO2_X then Orig2DeltaY = MchOffs.OFFSET_ZERO2_X end + if MchOffs.OFFSET_ZERO2_Z then Orig2DeltaZ = MchOffs.OFFSET_ZERO2_Z end + if MchOffs.OFFSET_ZERO3_Y then Orig3DeltaX = -MchOffs.OFFSET_ZERO3_Y end + if MchOffs.OFFSET_ZERO3_X then Orig3DeltaY = MchOffs.OFFSET_ZERO3_X end + if MchOffs.OFFSET_ZERO3_Z then Orig3DeltaZ = MchOffs.OFFSET_ZERO3_Z end + if MchOffs.OFFSET_ZERO4_Y then Orig4DeltaX = -MchOffs.OFFSET_ZERO4_Y end + if MchOffs.OFFSET_ZERO4_X then Orig4DeltaY = MchOffs.OFFSET_ZERO4_X end + if MchOffs.OFFSET_ZERO4_Z then Orig4DeltaZ = MchOffs.OFFSET_ZERO4_Z end + end +end + +-- Spostamenti della lama rispetto al disegno +local SawOffsX = SawDeltaX - 347.5 +local SawOffsY = SawDeltaY - 0 +local SawOffsZ = SawDeltaZ + 115.0 + +EmtGeneral { + File='Essetre-90480031.nge', + Offset = Vector3d( -640.35, -3040.00, -1660.0), + AxisMaxAdjust = 250, + ExitMaxAdjust = 250, + Special = 'Essetre-WALL.mlse', + Processor = 'Essetre-WALL.mlpe'} +local BaseId = EmtBase { + Name = 'Base', + Geo='BASE/GEO', + Aux={'BASE/LOAD', 'BASE/MOD01', 'BASE/MOD02', 'BASE/MOD03', 'BASE/MOD04', 'BASE/MOD05', 'BASE/MOD06', 'BASE/MOD07', 'BASE/COLLISION'}} + local vtMove = Vector3d( DeltaTabX - 1299.65, DeltaTabY + 4790.0, DeltaTabZ + 960) + EgtMove( BaseId, vtMove, GDB_RT.GLOB) +-- Tavola +EmtTable { + Name = 'Tab', + Parent = 'Base', + Type = MCH_TT.FLAT, + Ref1 = Point3d( DeltaTabX, DeltaTabY, DeltaTabZ), + Scale = {DimTabX/21120, DimTabY/3500, 1}, + Geo = 'TABLE/GEO'} +-- Traversa +EmtAxis { + Name = 'Y', + Parent = 'Base', + Invert = true, + Type = MCH_AT.LINEAR, + Dir = X_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = {MinY, MaxY}, + Home = 0, + Geo = 'Y_AXIS/GEO', + Aux = {'Y_AXIS/SOLID', 'Y_AXIS/TC', 'Y_AXIS/COLLISION'}} +-- Testa 1 per frese +EmtAxis { + Name = 'X1', + Parent = 'Y', + Token = 'X', + Type = MCH_AT.LINEAR, + Dir = Y_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = {MinX1, MaxX1}, + Home = MaxX1, + Geo = 'X1_AXIS/GEO', + Aux = {'X1_AXIS/SOLID', 'X1_AXIS/COLLISION'}} +EmtAxis { + Name = 'Z1', + Parent = 'X1', + Token = 'Z', + Type = MCH_AT.LINEAR, + Dir = Z_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = {MinZ1, MaxZ1}, + Home = 0, + Geo = 'Z1_AXIS/GEO', + Aux = {'Z1_AXIS/SOLID'}} +EmtAxis { + Name = 'C1', + Parent = 'Z1', + Token = 'C', + Type = MCH_AT.ROTARY, + Dir = Z_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = {MinC1, MaxC1}, + Home = 0, + Geo = 'C1_AXIS/GEO', + Aux = {'C1_AXIS/SOLID', 'C1_AXIS/COLLISION'}} +EmtAxis { + Name = 'B1', + Parent = 'C1', + Token = 'B', + Type = MCH_AT.ROTARY, + Dir = -X_AX(), + Pos = Point3d( 0, 0, MillOffs), + Stroke = {MinB1, MaxB1}, + Home = 0, + Geo = 'B1_AXIS/GEO', + Aux = {'B1_AXIS/SOLID', 'B1_AXIS/COLLISION'}} +EmtHead { + Name = 'H1', + Parent = 'B1', + HSet = 'H1', + Type = MCH_HT.STD, + Pos = Point3d( 0, 0, 0), + TDir = Z_AX(), + ADir = Y_AX(), + Rot1W = 0.1, + OthColl = {'B1/SOLID', 'C1/SOLID'}, + Geo = 'H1_HEAD/GEO'} +-- Sega a catena +EmtAxis { + Name = 'A1', + Parent = 'B1', + Token = '**', + Type = MCH_AT.ROTARY, + Dir = Z_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = { 0, 270}, + Home = 180, + Geo = 'A1_AXIS/GEO'} +local H3Id = EmtHead { + Name = 'H3', + Parent = 'A1', + HSet = 'H1', + Type = MCH_HT.STD, + Pos = Point3d( 0, 0, -ChSawLen), + TDir = Y_AX(), + ADir = Z_AX(), + Rot1W = 0.1, + SolCh = MCH_SCC.ADIR_NEAR, + OthColl = {'B1/SOLID', 'C1/SOLID'}, + Geo = 'H3_HEAD/GEO'} + EgtSetInfo( H3Id, 'ZSAFEDELTA', 120) +-- Testa per Lama +local X2Id = EmtAxis { + Name = 'X2', + Parent = 'Y', + Token = 'X', + Type = MCH_AT.LINEAR, + Dir = Y_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = {MinX2, MaxX2}, + Home = MinX2, + Geo = 'X2_AXIS/GEO', + Aux = {'X2_AXIS/SOLID'}} + EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, 0), GDB_RT.GLOB) +local Z2Id = EmtAxis { + Name = 'Z2', + Parent = 'X2', + Token = 'Z', + Type = MCH_AT.LINEAR, + Dir = Z_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = {MinZ2, MaxZ2}, + Home = 0, + Geo = 'Z2_AXIS/GEO', + Aux = {'Z2_AXIS/SOLID'}} + EgtMove( EgtGetFirstNameInGroup( Z2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB) +local C2Id = EmtAxis { + Name = 'C2', + Parent = 'Z2', + Token = 'C', + Type = MCH_AT.ROTARY, + Dir = Z_AX(), + Pos = Point3d( SawDeltaX, SawDeltaY, 0), + Stroke = {MinC2, MaxC2}, + Home = 0, + Geo = 'C2_AXIS/GEO', + Aux = {'C2_AXIS/SOLID', 'C2_AXIS/COLLISION'}} + EgtMove( EgtGetFirstNameInGroup( C2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB) + EgtMove( EgtGetFirstNameInGroup( C2Id, 'COLLISION'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB) +local B2Id = EmtAxis { + Name = 'B2', + Parent = 'C2', + Token = 'B', + Type = MCH_AT.ROTARY, + Dir = -X_AX(), + Pos = Point3d( SawDeltaX, SawDeltaY, SawDeltaZ + SawOffs), + Stroke = {MinB2, MaxB2}, + Home = 90, + Geo = 'B2_AXIS/GEO', + Aux = {'B2_AXIS/SOLID', 'B2_AXIS/COLLISION'}} + EgtMove( EgtGetFirstNameInGroup( B2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB) + EgtMove( EgtGetFirstNameInGroup( B2Id, 'COLLISION'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB) +local H2Id = EmtHead { + Name = 'H2', + Parent = 'B2', + HSet = 'H2', + Type = MCH_HT.STD, + Pos = Point3d( SawDeltaX, SawDeltaY, SawDeltaZ), + TDir = Z_AX(), + ADir = -Y_AX(), + Rot1W = 0.2, + OthColl = {'B2/SOLID', 'C2/SOLID'}, + Geo = 'H2_HEAD/GEO'} +-- ToolChanger +local ptTcA = Point3d( -340.6,-570.0,-29.8) +EmtTcPos { + Name = 'T10', + Parent = 'Y', + Pos = ptTcA, + TDir = -Y_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TA1'} +EmtTcPos { + Name = 'T11', + Parent = 'Y', + Pos = ptTcA - 120 * Z_AX(), + TDir = -Y_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TA2'} +EmtTcPos { + Name = 'T12', + Parent = 'Y', + Pos = ptTcA - 240 * Z_AX(), + TDir = -Y_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TA3'} +EmtTcPos { + Name = 'T13', + Parent = 'Y', + Pos = ptTcA - 360 * Z_AX(), + TDir = -Y_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TA4'} +EmtTcPos { + Name = 'T14', + Parent = 'Y', + Pos = ptTcA - 480 * Z_AX(), + TDir = -Y_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TA5'} +EmtTcPos { + Name = 'T15', + Parent = 'Y', + Pos = ptTcA - 600 * Z_AX(), + TDir = -Y_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TA6'} +EmtTcPos { + Name = 'T16', + Parent = 'Y', + Pos = ptTcA - 720 * Z_AX(), + TDir = -Y_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TA7'} +EmtTcPos { + Name = 'T17', + Parent = 'Y', + Pos = ptTcA - 840 * Z_AX(), + TDir = -Y_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TA8'} +EmtTcPos { + Name = 'T18', + Parent = 'Y', + Pos = ptTcA - 960 * Z_AX(), + TDir = -Y_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TA9'} +EmtTcPos { + Name = 'T101', + Parent = 'Y', + Pos = Point3d(-568.3,-1307.0,9-92.8), + TDir = X_AX(), + ADir = Z_AX(), + Geo = 'Y_AXIS/TC1'} +EmtTcPos { + Name = 'T201', + Parent = 'Y', + Pos = Point3d(-926.3,-1870.0,25), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TC2'} + +--------------------------------------------------------------------- +-- Funzioni richiamate per modificare i dati macchina in casi particolari +--function OnSetTable() +--end + +--------------------------------------------------------------------- +function OnSetHead() + -- se sega a catena + if EMC.HEAD == 'H3' then + -- gestione distanza da naso mandrino + EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -EMC.DIST)) + local vtMove = Point3d( 0, 0, -EMC.DIST) - Point3d( EMC.EXITPOS) + local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT)) + EgtMove( ExitId, vtMove) + -- gestione assi + local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) + local CSawPosA = EgtGetVal( sVal, 'A1', 'd') or 180 + EmtModifyAxisHome( 'X1', ParkTSpecX1) + EmtModifyAxisHome( 'Z1', GetChainSawZHomeFromVirtualAxis( CSawPosA)) + EmtModifyAxisStroke( 'C1', { MinC1, MaxC1}) + EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( CSawPosA)) + EmtModifyAxisStroke( 'B1', { MinB1, MaxB1}) + -- se utensile di grande diametro su testa fresa + elseif EMC.HEAD == 'H1' and EMC.TOTDIAM > 400 then + EmtModifyAxisHome( 'X1', MaxX1) + EmtModifyAxisHome( 'Z1', MaxZ1) + EmtModifyAxisStroke( 'C1', { -180.1, 0.1}) + EmtModifyAxisHome( 'C1', 0) + EmtModifyAxisStroke( 'B1', { -90.1, 0.1}) + -- altri casi su testa fresa + elseif EMC.HEAD == 'H1' then + EmtModifyAxisHome( 'X1', MaxX1) + EmtModifyAxisHome( 'Z1', MaxZ1) + EmtModifyAxisStroke( 'C1', { MinC1, MaxC1}) + EmtModifyAxisHome( 'C1', 0) + EmtModifyAxisStroke( 'B1', { MinB1, MaxB1}) + end +end + +--------------------------------------------------------------------- +-- Funzione che calcola la posizione Home di Z per la sega a catena dal valore dell'asse virtuale +function GetChainSawZHomeFromVirtualAxis( dPosA) + -- quota fissa + return -125 +end + +--------------------------------------------------------------------- +-- Funzione che calcola l'angolo Home di C per la sega a catena dal valore dell'asse virtuale +function GetChainSawCHomeFromVirtualAxis( dPosA) + -- se A=180 -> T104 -> HomeC = -90 + if abs( dPosA - 180) < 0.1 then + return -90 + -- altrimenti A=90 -> T101 -> HomeC = 0 + else + return 0 + end +end + +--------------------------------------------------------------------- +-- Funzione per resettare tutte le attivazioni della macchina +function OnResetMachine() + EmtUnlinkAllRawPartsFromGroups() + EmtUnlinkAllFixturesFromGroups() + -- nascondo Vmill + local nRawId = EgtGetFirstRawPart() + while nRawId do + local nVmId = EgtGetFirstNameInGroup( nRawId, 'VMill') + local nId = EgtGetFirstInGroup( nRawId) + while nId do + EgtSetStatus( nId, EgtIf( nId ~= nVmId, GDB_ST.ON, GDB_ST.OFF)) + nId = EgtGetNext( nId) + end + nRawId = EgtGetNextRawPart( nRawId) + end + EgtSetStatus( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') or GDB_ID.NULL, GDB_ST.OFF) +end diff --git a/Essetre-90480031.nge b/Essetre-90480031.nge new file mode 100644 index 0000000..51502b6 Binary files /dev/null and b/Essetre-90480031.nge differ diff --git a/Essetre-WALL.NUM.mlpe b/Essetre-WALL.NUM.mlpe new file mode 100644 index 0000000..71972aa --- /dev/null +++ b/Essetre-WALL.NUM.mlpe @@ -0,0 +1,639 @@ +-- Processore macchina Essetre-WALL by EgalTech s.r.l. 2023/04/24 +-- Con controllo numerico NUM + +-- Variabili di modulo +local MLE_INFO = 'Essetre-WALL.NUM.mlpe ver.'..PP_VER..' by EgalTech s.r.l.' +local TEST_USE = false + +--------------------------------------------------------------------- +-- *** GENERATION *** +--------------------------------------------------------------------- +function OnStart() + EMT.USETO1 = false -- abilitazione uso origine tavola + EMT.MODAL = true -- abilitazione emissione modale + EMT.INCHES = false -- unità di misura mm/inches + EMT.NUM = false -- abilitazione numerazione linee + --EMT.Nt = 'N' -- token per la numerazione di linea + --EMT.LINENBR = 0 -- numero di linea + --EMT.LINEINC = 1 -- incremento numerazione linee + --EMT.Ft = 'F' -- token per feed + --EMT.St = 'S' -- token per speed + EMT.FMAXPINZE = 154000 -- feed massima pinze +end + +--------------------------------------------------------------------- +function OnEnd() + -- Ripristino fase iniziale come corrente + EgtSetCurrPhase( 1) +end + +--------------------------------------------------------------------- +function OnProgramStart() + -- Info da gruppo BtlInfo (se mancano prova dal gruppo di lavoro corrente) + local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL + local nRefPos = EgtGetInfo( BtlInfoId, 'REFPOS', 'i') or 1 + if nRefPos == 1 or nRefPos == 2 or nRefPos == 3 then + EMT.ORIG = 1 + ( nRefPos - 1) * 10 + elseif nRefPos == 4 or nRefPos == 5 or nRefPos == 6 then + EMT.ORIG = 2 + ( nRefPos - 4) * 10 + elseif nRefPos == 7 or nRefPos == 8 or nRefPos == 9 then + EMT.ORIG = 3 + ( nRefPos - 7) * 10 + elseif nRefPos == 10 or nRefPos == 11 or nRefPos == 12 then + EMT.ORIG = 4 + ( nRefPos - 10) * 10 + else + EMT.ORIG = 1 + end + EMT.LOAD90 = EgtGetInfo( BtlInfoId, 'LOAD90', 'i') or 0 + -- Intestazioni + if not TEST_USE then + EMT.PRODID = EgtGetInfo( BtlInfoId, 'PRODID', 'i') or 0 + EMT.PATTID = EgtGetInfo( BtlInfoId, 'PATTID', 'i') or 0 + end + if EMT.PATTID and EMT.PATTID > 0 then + EmtOutput( '%' .. tostring( EMT.PATTID) .. '.0') + else + EmtOutput( '%40.0') + end + if EMT.INFO then + EmtOutput( '('..EMT.INFO..')') + else + EmtOutput( '(Program Start)') + end + EmtOutput( '('.. MLE_INFO..')') + -- Se modalità test vado in posizione sicura + if TEST_USE then + EmtOutput( 'G77 H9000 N1000 N2000') + end + -- Parametri macchina + local sOut = 'L163='..EgtNumToString( Orig2DeltaY, 2)..'\n'.. + 'L164='..EgtNumToString( -Orig2DeltaX, 2)..'\n'.. + 'L165='..EgtNumToString( Orig2DeltaZ, 2)..'\n'.. + 'L166='..EgtNumToString( Orig3DeltaY, 2)..'\n'.. + 'L167='..EgtNumToString( -Orig3DeltaX, 2)..'\n'.. + 'L168='..EgtNumToString( Orig3DeltaZ, 2)..'\n'.. + 'L169='..EgtNumToString( Orig4DeltaY, 2)..'\n'.. + 'L170='..EgtNumToString( -Orig4DeltaX, 2)..'\n'.. + 'L171='..EgtNumToString( Orig4DeltaZ, 2)..'\n'.. + 'G114'..' EA'..EgtNumToString( DeltaTabY + DimTabY - SawDeltaY, 2)..' EB'..EgtNumToString( -DeltaTabX + SawDeltaX, 2).. + ' EC'..EgtNumToString( DeltaTabZ - SawDeltaZ, 2)..' ED'..EgtNumToString( SawOffs, 2)..' EE'..EgtNumToString( 0, 2).. + ' EF'..EgtNumToString( DeltaTabY + DimTabY, 2)..' EG'..EgtNumToString( -DeltaTabX, 2).. + ' EH'..EgtNumToString( DeltaTabZ, 2)..' EI'..EgtNumToString( MillOffs, 2) + EmtOutput( sOut) + -- Indice lavorazione + EMT.CNT = 0 + -- Non effettuate lavorazioni con sega a catena sul fianco + EMT.CSAWFIRST = true + -- Non effettuata pausa per rimozione sfridi + EMT.SCRAPFIRST = true + -- Cerco primo utensile su testa 1 + EMT.TOOL_1, EMT.TLEN_1 = FindFirstToolOnHead( 'H1') +end + +--------------------------------------------------------------------- +function OnProgramEnd() + EmtOutput( '( *** Program End *** )') + EmitCount() + -- Dichiarazione conclusione pezzi + if EMT.PRODID then + local PartId = EgtGetFirstPartInRawPart( EMT.RAWID) + while PartId do + local CutId = EgtGetInfo( PartId, 'CUTID', 'i') or 0 + local sOut = 'G126 EA'..tostring( EMT.PRODID)..' EB'..tostring( EMT.PATTID)..' EC'..tostring( CutId)..' ED2' + EmtOutput( sOut) + PartId = EgtGetNextPartInRawPart( PartId) + end + end + -- Arresto mandrino + EmtOutput( 'M05 E80000=1') + -- Tipo di scarico + if not TEST_USE then + --EmtOutput( 'M12 $PRESS START FOR CLEANING') + EmtOutput( 'M27 E30057=1') + end + -- Se modalità test, termino il programma + if TEST_USE then + EmtOutput( 'M02') + end +end + +--------------------------------------------------------------------- +function OnToolData() + -- emissione dati utensile (esclusa lama e sega a catena) + if EMT.HEAD == 'H1' then + -- cerco posizione di attrezzaggio del primo utensile di lavorazione + if EMT.TOOL == EMT.TOOL_1 and EMT.TLEN_1 < 215.5 then + EMT.TCPOS_1 = EMT.TCPOS + end + -- emissione dati sega a catena + elseif EMT.HEAD == 'H3' then + ; + end +end + +--------------------------------------------------------------------- +function OnDispositionStart() + --EmtOutput( '(Disposition '..EMT.DISPIND..' = '..EMT.DISPID..')') + EMT.OPEISDISP = true +end + +--------------------------------------------------------------------- +function OnDispositionEnd() + -- Se prima disposizione + if EMT.PHASE == 1 then + -- Dimensioni grezzo + local b3Raw = EgtGetRawPartBBox( EMT.RAWID) + EMT.LP = b3Raw:getDimX() + EMT.HP = b3Raw:getDimY() + EMT.SP = b3Raw:getDimZ() + EmtOutput( 'E30050='..EgtNumToString( 1000 * EMT.HP, 0).. + ' E30051='..EgtNumToString( 1000 * EMT.LP, 0).. + ' E30052='..EgtNumToString( 1000 * EMT.SP, 0)) + -- Scelta origine + EmtOutput( 'M26 E30054='..EgtNumToString( EMT.ORIG, 0)) + -- Posizione cuffia + local dHCuff = b3Raw:getDimZ() + 32 + EmtOutput( 'E30039=' .. EgtNumToString( dHCuff * 1000, 0)) + -- Eventuale salto a lavorazione in corso + EmtOutput( 'G79 NE80000') + -- Dichiarazione inizio lavorazione pezzi + if EMT.PRODID then + EmitCount() + local PartId = EgtGetFirstPartInRawPart( EMT.RAWID) + while PartId do + local CutId = EgtGetInfo( PartId, 'CUTID', 'i') or 0 + local sOut = 'G126 EA'..tostring( EMT.PRODID)..' EB'..tostring( EMT.PATTID)..' EC'..tostring( CutId)..' ED1' + EmtOutput( sOut) + PartId = EgtGetNextPartInRawPart( PartId) + end + end + end + EMT.OPEISDISP = false +end + +--------------------------------------------------------------------- +function OnTableData() +end + +--------------------------------------------------------------------- +function OnFixtureData() +end + +--------------------------------------------------------------------- +function OnRawMoveData() +end + +--------------------------------------------------------------------- +function OnToolSelect() + -- se utensile definito (non definito per disposizioni con movimento) + if EMT.TOOL ~= '' then + -- verifiche su utensile + local sTool = EgtTdbGetToolFromUUID( EgtGetMachiningParam( MCH_MP.TUUID) or "") + if sTool ~= EMT.TOOL then error( "Tool name mismatch") end + -- predefinite EMT.TCPOS EMT.HEAD EMT.EXIT + EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE) + EMT.TOOLSEL = EMT.TCPOS..' M06' + EMT.TDIAM = EgtTdbGetCurrToolParam( MCH_TP.DIAM) + EMT.TTOTDIAM = EgtTdbGetCurrToolParam( MCH_TP.TOTDIAM) + EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN) + EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) + EMT.TDIST = EgtTdbGetCurrToolParam( MCH_TP.DIST) + if EMT.TDIST and abs( EMT.TDIST) < 1 then EMT.TDIST = nil end + EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES) + end +end + +--------------------------------------------------------------------- +function OnToolDeselect() +end + +--------------------------------------------------------------------- +function OnMachiningStart() + --EMT.MCHLIBNAME = EgtGetMachiningParam( MCH_MP.NAME) + EMT.MCHNAME = EgtGetOperationName( EMT.MCHID) + EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE) + EMT.MCHWS = EgtGetMachiningParam( MCH_MP.WORKSIDE) or 0 + EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) + -- non ancora iniziata la lavorazione + EMT.MCHFIRST = true + -- primo posizionamento sempre in globale + EMT.REFLOC = nil + EMT.IPLGL = false +end + +--------------------------------------------------------------------- +function OnMachiningEnd() + if not EMT.ZMAX then + EmtOutput( 'G103'..GetET()..' E80000='..tostring( EMT.CNT + 1)) + end + EMT.PREVTOOL = EMT.TOOL +end + +--------------------------------------------------------------------- +function OnPathStart() + -- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento) + EmtResetPrev() +end + +--------------------------------------------------------------------- +function OnPathEnd() +end + +--------------------------------------------------------------------- +function OnRapid() + -- se primo movimento della lavorazione, gestione speciale + if EMT.MCHFIRST and not EMT.OPEISDISP then + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + EmtOutput( '( *** '..EMT.MCHNAME..'/'..EMT.TOOL..' *** )') + EmitCount() + -- se lavorazione con sega a catena + if EMT.HEAD == 'H3' then + -- se prima lavorazione sui fianchi con sega a catena + if EMT.CSAWFIRST and string.sub( EMT.MCHNAME, 1, 5) == 'Csaw_' then + EMT.CSAWFIRST = false + -- eventuale pausa per rimozione sfridi + if EMT.SCRAPFIRST then + EMT.SCRAPFIRST = false + local b3Raw = EgtGetRawPartBBox( EMT.RAWID) + local ParkY = min( -( b3Raw:getMin():getX() - 2000), -MinY) + EmtOutput( 'G104 Y' .. EmtLenToString( ParkY, 3) .. ' ET1' .. GetEF()) + end + -- pre-posizionamento + EmitCount() + EmtResetPrev() + local sOut = 'G101' .. EmtGetAxis( 'R1') + local sET = GetET() + local sEU = GetEU() + local sEE = GetEE() + local sEF = GetEF() + local sEM = ' EM'..EgtIf( EMT.S > 0, '3', '4') + local sES = ' ES'..EgtNumToString( abs( EMT.S), 0) + local sEL = ' EL' .. EmtLenToString( ( EMT.TDIST or ChSawLen), 3) + local sER = ' ER' .. EmtLenToString( EMT.TLEN, 3) + sOut = sOut .. sET .. sEU .. sEE .. sEF .. sEM .. sES .. sEL .. sER + EmtOutput( sOut) + end + -- altrimenti verifico se necessaria pausa + else + local bSystemSR = ( EMT.SCRAPFIRST and EgtExistsInfo( EMT.MCHID, 'MOVE_AFTER')) + local bUserSR = ( EgtGetValInNotes( EMT.MCHUSERNOTES, 'ScrapRemove', 'i') == 1) + if bSystemSR or bUserSR then + if bSystemSR then EMT.SCRAPFIRST = false end + -- pausa per rimozione sfridi + local b3Raw = EgtGetRawPartBBox( EMT.RAWID) + local ParkY = min( -( b3Raw:getMin():getX() - 2000), -MinY) + EmtOutput( 'G104 Y' .. EmtLenToString( ParkY, 3) .. ' ET1' .. GetEF()) + end + end + -- primo posizionamento + EmtResetPrev() + local sOut = 'G101' .. EmtGetAxis( 'L1') .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') .. + EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') + if EMT.HEAD == 'H1' then + sOut = sOut .. ' U' .. EmtLenToString( MinX2, 3) .. ' W0 V90 A0' + elseif EMT.HEAD == 'H2' then + sOut = sOut .. ' U' .. EmtLenToString( MaxX1, 3) .. ' W0 V0 A0' + elseif EMT.HEAD == 'H3' then + sOut = sOut .. ' U' .. EmtLenToString( MinX2, 3) .. ' W0 V90 A0' + else + EmtSetLastError( 1211, "Unknown Head : " .. EMT.HEAD) + end + local sET = GetET() + local sEU = GetEU() + local sEE = GetEE() + local sEF = GetEF() + local sEM = ' EM'..EgtIf( EMT.S > 0, '3', '4') + local sES = ' ES'..EgtNumToString( abs( EMT.S), 0) + local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3) + local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3) + sOut = sOut .. sET .. sEU .. sEE .. sEF .. sEM .. sES .. sEL .. sER + EmtOutput( sOut) + EMT.REFLOC = 0 + EMT.MCHFIRST = false + EMT.ZMAX = false + -- se standard + elseif EMT.FLAG == 0 or EMT.FLAG == 1 or EMT.FLAG == 2 then + -- se necessario, impostazione riferimento locale + if EMT.REFLOC == 0 then + -- calcolo per piano generico + CalcInterpPlane() + EMT.REFLOC = 1 + -- trasformo i punti nel piano + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + EMT.L1p = nil + EMT.L2p = nil + EMT.L3p = nil + EMT.R1p = nil + EMT.R2p = nil + local sET = GetET() + local sEU = GetEU() + local sEE = GetEE() + local sEF = ' EF20000' + local sEM = ' EM'..EgtIf( EMT.S > 0, '3', '4') + local sES = ' ES'..EgtNumToString( abs( EMT.S), 0) + local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3) + local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3) + EmtOutput( 'G102'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EmtGetAxis('R2')..EmtGetAxis('R1')..EMT.IPLGLSTR..sET..sEU..sEE..sEF..sEM..sES..sEL..sER) + else + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + end + -- emissione movimento + local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + EmtOutput( sOut) + -- se altrimenti risalita a Z max a fine lavorazione + elseif EMT.FLAG == 3 then + if EMT.REFLOC then + EMT.REFLOC = nil + EMT.IPLGL = false + EmtResetPrev() + -- dichiarazione fine lavorazione + EmtOutput( 'G103'..GetET()..' E80000='..tostring( EMT.CNT + 1)) + end + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + if not IsSpecialTool( EMT.TCPOS) then + local sOut = 'G101' .. EmtGetAxis( 'L3') .. EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') + sOut = sOut .. GetET() .. GetEE() .. GetEF() + EmtOutput( sOut) + else + if EMT.TCPOS ~= 'T101' then + local sOut = 'G101' .. EmtGetAxis( 'L3') .. EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') + local sEU_EO = ' EU50' + sOut = sOut .. GetET() .. GetEN().. sEU_EO .. GetEF() + EmtOutput( sOut) + elseif EMT.ADIR[3] > 0.708 then + local sOut = 'G101' .. EmtGetAxis( 'L3') .. EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. GetET() .. GetEN() .. GetEF() + EmtOutput( sOut) + sOut = 'G101 X' .. EmtLenToString( ParkTSpecX1, 3) .. GetET() .. GetEE() .. GetEF() + EmtOutput( sOut) + else + local sOut = 'G101 X' .. EmtLenToString( ParkTSpecX1, 3) .. EmtGetAxis( 'L3') .. EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. GetET() .. GetEE() .. GetEF() + EmtOutput( sOut) + end + end + EMT.ZMAX = true + -- se altrimenti movimento in Home + elseif EMT.FLAG == 4 then + -- non previsto + -- altrimenti errore + else + error( "Unknown Rapid flag") + end + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnLinear() + -- se necessario, impostazione riferimento locale + if EMT.REFLOC == 0 then + -- calcolo per piano generico + CalcInterpPlane() + EMT.REFLOC = 1 + -- salvo posizione attuale + local OldL1 = EMT.L1 + local OldL2 = EMT.L2 + local OldL3 = EMT.L3 + local OldR1p = EMT.R1p + local OldR2p = EMT.R2p + -- imposto posizione precedente + EMT.L1 = EMT.L1o + EMT.L2 = EMT.L2o + EMT.L3 = EMT.L3o + EMT.R1p = nil + EMT.R2p = nil + -- trasformo i punti nel piano + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + local sET = GetET() + local sEU = GetEU() + local sEE = GetEE() + local sEF = ' EF20000' + local sEM = ' EM'..EgtIf( EMT.S > 0, '3', '4') + local sES = ' ES'..EgtNumToString( abs( EMT.S), 0) + local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3) + local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3) + EmtOutput( 'G102'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EmtGetAxis('R2')..EmtGetAxis('R1')..EMT.IPLGLSTR..sET..sEU..sEE..sEF..sEM..sES..sEL..sER) + -- emissione movimento + local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + EmtOutput( sOut) + -- ripristino posizione attuale + EMT.L1 = OldL1 + EMT.L2 = OldL2 + EMT.L3 = OldL3 + EMT.R1p = OldR1p + EMT.R2p = OldR2p + end + + -- aggiustamento valori + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + + -- valori degli assi + local sAxes = EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + -- se nulla da emettere, esco + if string.len( sAxes) == 0 then + return + end + -- aggiungo feed + local sFeed = EmtGetFeed() + -- emetto linea + EmtOutput( "G1"..sAxes..sFeed) + + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnArc() + -- non modale su archi + local dPrevZ = EMT.L3p + EmtResetPrevLinear() + -- aggiustamento valori + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + + -- valori degli assi + local sAxes = EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + -- se nulla da emettere, esco + if string.len( sAxes) == 0 then + return + end + -- valori delle coordinate del centro + EmtAdjustCenterAxes() + -- coordinate centro (per ora solo archi nel piano XY) + --local sCen = ' ' .. EMT.C1t .. EmtLenToString(EMT.C1,3) .. + -- ' ' .. EMT.C2t .. EmtLenToString(EMT.C2,3) + -- raggio + local sRad = ' ' .. EMT.RRt .. EmtLenToString(EMT.RR,3) + -- aggiungo feed + local sFeed = EmtGetFeed() + -- tipo arco + local sArc = 'G' .. EgtNumToString(EMT.MOVE,0) + -- se elica, aggiungo il pitch + local sPitch = '' + local dDeltaZ = EMT.L3 - dPrevZ + if abs( dDeltaZ) > GEO.EPS_SMALL then + local dPitch = dDeltaZ * 360.0 / abs( EMT.AC) + sPitch = ' K' .. EmtLenToString( dPitch, 3) + end + -- emetto arco + EmtOutput( sArc..sAxes..sRad..sPitch..sFeed) + + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function MyAdjustLinearAxes() + if EMT.REFLOC then + local vtDelta = V_NULL() + local vtE = V_NULL() + if EMT.HEAD == 'H1' then + local Len = EMT.TLEN + MillOffs + local LenRef = MillOffs + local vtTool = EgtGetCalcToolDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + vtE = vtTool * Len - Z_AX() * LenRef + elseif EMT.HEAD == 'H2' then + vtDelta = -Vector3d( SawDeltaX, SawDeltaY, SawDeltaZ) + local Len = EMT.TLEN + SawOffs + local LenRef = SawOffs + local vtTool = EgtGetCalcToolDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + vtE = vtTool * Len - Z_AX() * LenRef + elseif EMT.HEAD == 'H3' then + local Len = ( EMT.TDIST or ChSawLen) + MillOffs + local LenRef = MillOffs + local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + vtE = vtAux * Len - Z_AX() * LenRef + end + EMT.L1 = EMT.L1 - vtDelta:getX() - vtE:getX() + EMT.L2 = EMT.L2 - vtDelta:getY() - vtE:getY() + EMT.L3 = EMT.L3 - vtDelta:getZ() - DeltaTabZ - vtE:getZ() + end + + EmtAdjustLinearAxes() + + if not EMT.REFLOC then + EMT.L1 = - EMT.L1 + EMT.L1t = 'Y' + EMT.L2t = 'X' + else + EMT.L1t = 'X' + EMT.L2t = 'Y' + end +end + +--------------------------------------------------------------------- +function CalcInterpPlane() + -- origine del piano + local xS = EMT.START[1] + local yS = EMT.START[2] + local zS = 0 + local ptS = Point3d( xS, yS, zS) + -- calcolo per piano generico + local vtE + if EMT.HEAD ~= 'H3' then + vtE = EgtGetCalcToolDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + else + vtE = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + end + EMT.IPLGLFR = Frame3d( ptS, vtE) + --EmtOutput( 'IPLGLFR='..tostring(EMT.IPLGLFR)) + local _, dAngV, dAngO = SphericalFromVector( vtE) + local dAngO2 = EmtGetAngO2( EMT.IPLGLFR:getVersZ(), EMT.IPLGLFR:getVersX(), dAngV, dAngO) + dAngO = dAngO - 90 + while dAngO < 0 do + dAngO = dAngO + 360 + end + -- se rotazione solo attorno alla C allora si mette come rotazione finale + if abs( dAngV) < GEO.EPS_ANG_SMALL then + dAngO2 = dAngO2 + dAngO + while dAngO2 >= 360 do + dAngO2 = dAngO2 - 360 + end + dAngO = 0 + end + + local xOut = yS - DeltaTabY - DimTabY + local yOut = - ( xS - DeltaTabX) + local zOut = zS + if EMT.ORIG == 2 or EMT.ORIG == 12 or EMT.ORIG == 22 then + xOut = yS - DeltaTabY + yOut = - ( xS - DeltaTabX) + elseif EMT.ORIG == 3 or EMT.ORIG == 13 or EMT.ORIG == 23 then + xOut = yS - DeltaTabY - DimTabY + yOut = - ( xS - DeltaTabX - DimTabX) + elseif EMT.ORIG == 4 or EMT.ORIG == 14 or EMT.ORIG == 24 then + xOut = yS - DeltaTabY + yOut = - ( xS - DeltaTabX - DimTabX) + end + EMT.IPLGLSTR = ' EX'..EmtLenToString( xOut)..' EY'..EmtLenToString( yOut)..' EZ'..EmtLenToString( zOut).. + ' EA0'..' EB'..EgtNumToString( dAngV)..' EC'..EgtNumToString( dAngO)..' ED'..EgtNumToString( dAngO2) + EMT.IPLGL = true +end + +--------------------------------------------------------------------- +function GetET() + if EMT.HEAD == 'H1' or EMT.HEAD == 'H3' then + return ' ET2' + elseif EMT.HEAD == 'H2' then + return ' ET1' + end +end + +--------------------------------------------------------------------- +function GetEU() + local sEU + if EMT.HEAD == 'H1' then + if #EMT.TCPOS == 2 then + sEU = ' EU'..string.sub( EMT.TCPOS, 2) + elseif #EMT.TCPOS == 3 then + sEU = ' EU1'..string.sub( EMT.TCPOS, 3) + elseif #EMT.TCPOS == 4 then + sEU = ' EU2'..string.sub( EMT.TCPOS, 3) + end + elseif EMT.HEAD == 'H2' then + sEU = ' EU0' + elseif EMT.HEAD == 'H3' then + if abs( EMT.R3 - 0) < 0.1 then + sEU = ' EU104' + elseif abs( EMT.R3 - 270) < 0.1 then + sEU = ' EU101' + elseif abs( EMT.R3 - 180) < 0.1 then + sEU = ' EU102' + elseif abs( EMT.R3 - 90) < 0.1 then + sEU = ' EU103' + else + EmtSetLastError( 1210, 'Chain saw orientation not allowed') + end + else + sEU = '' + end + return sEU +end + +--------------------------------------------------------------------- +function GetEE() + return ' EE' .. EgtNumToString( EMT.ORIG, 0) +end + +--------------------------------------------------------------------- +function GetEF() + return ' EF60000' +end + +--------------------------------------------------------------------- +function EmitCount() + EMT.CNT = EMT.CNT + 1 + EmtOutput( 'N'..tostring( EMT.CNT)..' E80000='..tostring( EMT.CNT)) +end + +--------------------------------------------------------------------- +-- *** END GENERATION *** +--------------------------------------------------------------------- diff --git a/Essetre-WALL.mlpe b/Essetre-WALL.mlpe new file mode 100644 index 0000000..d17f18a --- /dev/null +++ b/Essetre-WALL.mlpe @@ -0,0 +1,1047 @@ +-- Processore macchina Essetre-WALL by EgalTech s.r.l. 2023/04/24 +-- Funzioni generiche indipendenti dal controllo + +-- Intestazioni +require( 'EmtGenerator') +EgtEnableDebug( false) + + +--------------------------------------------------------------------- +-- *** GENERATION *** +--------------------------------------------------------------------- +local sBaseDir = EgtGetSourceDir() +if NumericalControl == 'NUM' then + dofile( sBaseDir .. 'Essetre-WALL.NUM.mlpe') +elseif NumericalControl == 'TPA' then + error( 'Numerical Control error : TPA not yet managed') + --dofile( sBaseDir .. 'Essetre-WALL.TPA.mlpe') +else + error( 'Numerical Control error : unkwnown type') +end + +--------------------------------------------------------------------- +-- *** SIMULATION *** +--------------------------------------------------------------------- +local COLL_SAFE_DIST = 2 + +--------------------------------------------------------------------- +function OnSimulStart() + -- Carico gli utensili sulle barre portautensili + local vTcPos = EgtGetAllTcPosNames() + if vTcPos then + for i = 1, #vTcPos do + local vTools = EgtGetToolsInCurrSetupPos( vTcPos[i]) + if vTools and vTools[1] then + EgtLoadTool( vTcPos[i], 1, vTools[1]) + ShowToolInTcPos( vTcPos[i], true) + end + end + end + -- Se reset o home, esco + if EMT.SIM1ST then return end + -- Non effettuate lavorazioni con sega a catena sul fianco + EMT.CSAWFIRST = true + -- Non effettuata pausa per rimozione sfridi + EMT.SCRAPFIRST = true + -- Creo o svuoto gruppo per copia finale degli oggetti virtual milling + local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') + if nVmGrpId then + EgtSetStatus( nVmGrpId, GDB_ST.ON) + EgtEmptyGroup( nVmGrpId) + else + nVmGrpId = EgtGroup( GDB_ID.ROOT) + EgtSetName( nVmGrpId, 'VMill') + EgtSetLevel( nVmGrpId, GDB_LV.TEMP) + end + -- Preparo lista oggetti da verificare per collisioni + EMT.COLLOBJ = {} + AddToCollisionCheck( 'B1', 'COLLISION', EMT.COLLOBJ) + AddToCollisionCheck( 'C1', 'COLLISION', EMT.COLLOBJ) + AddToCollisionCheck( 'B2', 'COLLISION', EMT.COLLOBJ) + AddToCollisionCheck( 'C2', 'COLLISION', EMT.COLLOBJ) + DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4) + -- Preparo lista solidi macchina con cui possono collidere gli oggetti sopra riportati (in aggiunta a VMill) + EMT.MCODET = {} + local McdData = { { Grp = 'Y', Sub = 'COLLISION', Name = 'TRAV'}, + { Grp = 'Y', Sub = 'COLLISION', Name = 'COL1'}, + { Grp = 'Y', Sub = 'COLLISION', Name = 'COL2'}, + { Grp = 'Y', Sub = 'COLLISION', Name = 'TC1'}, + { Grp = 'Y', Sub = 'COLLISION', Name = 'CHSAW'}, + { Grp = 'X1', Sub = 'COLLISION', Name = 'TRAV'}, + { Grp = 'Base', Sub = 'COLLISION', Name = 'STM'}} + EgtOutLog( 'MCODET Objects :', 4) + local nMcdNullCnt = 0 + for i = 1, #McdData do + local nGrpId + if McdData[i].Grp == 'Base' then + nGrpId = EgtGetBaseId( 'Base') + else + nGrpId = EgtGetAxisId( McdData[i].Grp) + end + local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId, McdData[i].Sub), McdData[i].Name) + if nId then + table.insert( EMT.MCODET, nId) + EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' (' .. tostring( nId) .. ') is ok', 4) + else + nMcdNullCnt = nMcdNullCnt + 1 + EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4) + end + end + if nMcdNullCnt > 0 then + EgtOutLog( 'Warning : MCODET with one or more null Element(s) ') + end + -- Preparo lista collisioni vuota + EMT.COLLIDE = {} +end + +--------------------------------------------------------------------- +function OnSimulEnd() + if EMT.SCRAPFIRST then + EMT.SCRAPFIRST = false + ExecScrapRemove() + end + ExecUnloading() +end + +--------------------------------------------------------------------- +--function OnSimulDispositionStarting() +--end + +--------------------------------------------------------------------- +function OnSimulDispositionStart() + + EMT.OPEISDISP = true + + -- dati del grezzo + local nRawId = EgtGetFirstRawPart() + local b3Raw = EgtGetRawPartBBox( nRawId or GDB_ID.NULL) + + -- Se prima disposizione (dovrebbe essere l'unica) + if EMT.PHASE == 1 then + -- Assegno dimensioni del grezzo + EMT.LB = 0 + EMT.SB = 0 + EMT.HB = 0 + if b3Raw then + EMT.LB = b3Raw:getDimX() + EMT.SB = b3Raw:getDimY() + EMT.HB = b3Raw:getDimZ() + end + -- Carico primo utensile sulla testa 1 + local sTool_1 = FindFirstToolOnHead( 'H1') + if sTool_1 then + EMT.TOOL_1 = sTool_1 + EgtSetCalcTool( EMT.TOOL_1, 'H1', 1) + EgtResetAxisPos( 'C1') + EgtResetAxisPos( 'B1') + EMT.TCPOS_1 = GetToolTcPos( EMT.TOOL_1) + ShowToolInTcPos( EMT.TCPOS_1, false) + else + EgtUnloadTool( 'H1', 1) + end + EMT.FIRST_TOOL = true + -- Se vero inizio, abilitato e trovato grezzo, creazione Zmap + if not EMT.SIM1ST and EgtGetInfo( EgtGetCurrMachGroup(), 'Vm', 'b') and nRawId then + -- elimino eventuale vecchio Zmap + EgtErase( EgtGetFirstNameInGroup( nRawId, 'VMill') or GDB_ID.NULL) + -- determino la risoluzione dello Zmap + local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ() + local dTol = 6.87 + if dArea < CoeffVM * 5.0e6 then + dTol = 2.81 + elseif dArea < CoeffVM * 10.0e6 then + dTol = 3.77 + elseif dArea < CoeffVM * 20.0e6 then + dTol = 5.03 + end + -- verifico se grezzo ruotato + local refRaw = EgtGetGroupGlobFrame( nRawId) + local bRefXYZ = AreSameVectorApprox( refRaw:getVersX(), X_AX()) and AreSameVectorApprox( refRaw:getVersY(), Y_AX()) + -- creo lo Zmap + if bRefXYZ then + EMT.VMILL = EgtVolZmapBox( nRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB) + else + local nSolId = EgtGetFirstNameInGroup( nRawId, 'RawSolid') + EMT.VMILL = EgtVolZmapFromSurfTm( nRawId, nSolId, dTol, true) + end + if EMT.VMILL then + EgtSetName( EMT.VMILL, 'VMill') + EgtSetLevel( EMT.VMILL, GDB_LV.TEMP) + local nSolId = EgtGetFirstNameInGroup( nRawId, 'RawSolid') + EgtSetColor( EMT.VMILL, EgtGetColor( nSolId), false) + -- nascondo le altre geometrie + local nId = EgtGetFirstInGroup( nRawId) + while nId do + if nId ~= EMT.VMILL then + EgtSetStatus( nId, GDB_ST.OFF) + end + nId = EgtGetNext( nId) + end + EgtSetStatus( EMT.SCRAP or GDB_ID.NULL, GDB_ST.OFF) + -- imposto eventuale utensile corrente + SetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL) + end + end + end + -- se vero inizio, assegno solidi per verifica collisione + if not EMT.SIM1ST then + EMT.CODET = {} + for i = 1, #EMT.MCODET do + EMT.CODET[i] = EMT.MCODET[i] + end + if EMT.VMILL then + table.insert( EMT.CODET, EMT.VMILL) + end + end + -- Nascondo tutte le lavorazioni + local nMchId = EgtGetFirstOperation() + while nMchId do + if EgtGetOperationType( nMchId) ~= MCH_OY.DISP then + EgtSetOperationStatus( nMchId, false) + end + nMchId = EgtGetNextOperation( nMchId) + end +end + +--------------------------------------------------------------------- +function OnSimulDispositionEnd() + EMT.OPEISDISP = false +end + +--------------------------------------------------------------------- +function OnSimulToolSelect() + -- recupero dati utensile + EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE) + EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN) + EMT.TOOLTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) + EMT.TDIAM = EgtTdbGetCurrToolParam( MCH_TP.DIAM) + EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES) + -- se lama su sua testa (X2), sposto l'altra dalla parte opposta + if EMT.HEAD == 'H2' then + -- parcheggio le altre due teste + if EMT.FIRST_TOOL then + EgtSetAxisPos( 'X1', MaxX1) + else + SimulMoveAxis( 'X1', MaxX1, MCH_SIM_STEP.RAPID) + end + -- altrimenti testa fresa (X1), carico utensile + else + local PosX1 = EgtIf( IsSpecialTool( EMT.TCPOS), ParkTSpecX1, MaxX1) + if EMT.FIRST_TOOL then + EgtSetAxisPos( 'X2', MinX2) + EgtSetAxisPos( 'X1', PosX1) + else + SimulMoveAxis( 'X2', MinX2, MCH_SIM_STEP.RAPID) + SimulMoveAxis( 'X1', PosX1, MCH_SIM_STEP.RAPID) + end + -- se sega a catena, imposto subito angolo scelto per asse virtuale A + if EMT.HEAD == 'H3' then + -- recupero la lavorazione successiva + local NextMchId + if EMT.MCHID then + NextMchId = EgtGetNextActiveOperation( EMT.MCHID) + else + NextMchId = EgtGetFirstActiveOperation() + end + if EgtGetOperationType( NextMchId) == MCH_OY.DISP then + NextMchId = EgtGetNextActiveOperation( NextMchId) + end + EgtSetCurrMachining( NextMchId) + -- leggo e imposto il valore di A1 + local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) + local dPosA = EgtGetVal( sVal, 'A1', 'd') or 0 + EmtModifyAxisHome( 'A1', dPosA) + EgtResetAxisPos( 'A1') + EgtResetAxisPos( 'C1') + end + -- breve pausa + EgtPause( 100) + EgtOutText( '') + EMT.TOOL_1 = EMT.TOOL + EMT.TCPOS_1 = EMT.TCPOS + -- lo nascondo sul portautensili + ShowToolInTcPos( EMT.TCPOS, false) + end + EMT.FIRST_TOOL = nil + -- se attivo Vmill + SetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL) + -- se attivo Collision Check + EMT.SAFEDIST = COLL_SAFE_DIST + if EMT.COLLOBJ then + local nInd = 1001 -- H1 + if EMT.HEAD == 'H2' then + nInd = 1011 + elseif EMT.HEAD == 'H3' then + nInd = 1021 + end + AddToolToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd) + AddToolHolderToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd + 1) + for i, Coll in ipairs( EMT.COLLOBJ) do + EmtAddCollisionObjEx( i, Coll.Fr, Coll.Ty, Coll.Mv, Coll.P1, Coll.P2, Coll.P3) + end + end +end + +--------------------------------------------------------------------- +function OnSimulToolDeselect() + -- porto la testa in home + if EMT.HEAD == 'H2' then + SimulMoveAxes( 'X2', MinX2, MCH_SIM_STEP.RAPID, 'C2', EgtGetAxisHomePos( 'C2'), MCH_SIM_STEP.RAPROT, 'B2', EgtGetAxisHomePos( 'B2'), MCH_SIM_STEP.RAPROT) + else -- H1 o H3 + local PosX1 = EgtIf( IsSpecialTool( EMT.TCPOS), ParkTSpecX1, MaxX1) + SimulMoveAxes( 'X1', PosX1, MCH_SIM_STEP.RAPID, 'C1', EgtGetAxisHomePos( 'C1'), MCH_SIM_STEP.RAPROT, 'B1', EgtGetAxisHomePos( 'B1'), MCH_SIM_STEP.RAPROT) + end + -- deposito utensile se non lama su sua testa + if ( EMT.NEXTHEAD ~= 'H2' and EMT.HEAD ~= 'H2') or ( EMT.HEAD == 'H1' and IsSpecialTool( EMT.TCPOS_1)) then + if EMT.NEXTTOOL ~= EMT.TOOL_1 then + EgtOutText( 'Tool change in progress...') + -- breve pausa + EgtPause( 100) + ShowToolInTcPos( EMT.TCPOS_1, true) + -- nascondo l'utensile corrente + EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN) + -- se segue utensile speciale + if IsSpecialTool( EMT.NEXTTCPOS) then + -- eseguo movimento opportuno + SimulMoveAxes( 'B1', 0, MCH_SIM_STEP.COLLROT, 'C1', 0, MCH_SIM_STEP.COLLROT) + SimulMoveAxes( 'X1', ParkTSpecX1, MCH_SIM_STEP.RAPID) + else + -- eseguo movimento opportuno + SimulMoveAxes( 'B1', 0, MCH_SIM_STEP.COLLROT, 'C1', 0, MCH_SIM_STEP.COLLROT) + SimulMoveAxes( 'X1', MaxX1, MCH_SIM_STEP.RAPID) + end + else + EMT.TOOL_1 = nil + EMT.TCPOS_1 = nil + end + end +end + +--------------------------------------------------------------------- +function OnSimulMachiningStart() + -- recupero alcuni dati della lavorazione + EMT.MCHNAME = EgtGetOperationName( EMT.MCHID) + EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE) + EMT.MCHWS = EgtGetMachiningParam( MCH_MP.WORKSIDE) or 0 + EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) + EMT.VMRS = false + -- recupero CUTID e TASKID della feature lavorata + local vId = EgtGetMachiningGeometry() + if vId and #vId > 0 and #vId[1] > 0 then + local nPartId = EgtGetParent( EgtGetParent( vId[1][1]) or GDB_ID.NULL) + EMT.CUTID = EgtGetInfo( nPartId or GDB_ID.NULL, 'CUTID', 'i') or 0 + EMT.TASKID = EgtGetInfo( vId[1][1], 'TASKID', 'i') or 0 ; + else + EMT.CUTID = 0 + EMT.TASKID = 0 + end + -- eventuale pausa per rimozione sfridi + local bSystemSR = ( EMT.SCRAPFIRST and (( EMT.HEAD == 'H3' and string.sub( EMT.MCHNAME, 1, 5) == 'Csaw_') or EgtExistsInfo( EMT.MCHID, 'MOVE_AFTER'))) + local bUserSR = ( EgtGetValInNotes( EMT.MCHUSERNOTES, 'ScrapRemove', 'i') == 1) + if bSystemSR or bUserSR then + if bSystemSR then EMT.SCRAPFIRST = false end + EgtOutText( 'Pause for Scrap Remove') + ParkForScrapRemove() + ExecScrapRemove() + EgtPause( 500) + EgtOutText( '') + end + -- non ancora iniziata la lavorazione + EMT.MCHFIRST = true +end + +--------------------------------------------------------------------- +--function OnSimulMachiningEnd() +--end + +--------------------------------------------------------------------- +--function OnSimulPathStart() +--end + +--------------------------------------------------------------------- +function OnSimulPathEnd() + -- se attivo VMILL, lavorazione ed è richiesto di eliminare gli sfridi + if EMT.VMILL and not EMT.OPEISDISP and EMT.VMRS then + EgtOutLog( 'OnSimulPathEnd', 5) + local nPart = EgtVolZmapPartCount( EMT.VMILL) + if nPart > 1 then + -- ricerca del pezzo con massimo volume + local nPartMax = 0 + local dVolMax = 0 + for i = 1, nPart do + local dVol = EgtVolZmapPartVolume( EMT.VMILL, i - 1) + if dVol > dVolMax then + dVolMax = dVol + nPartMax = i + end + end + -- eliminazione di tutti i pezzi piccoli + for i = nPart, 1, -1 do + if i ~= nPartMax then + local b3Vmill = EgtVolZmapGetPartBBoxGlob( EMT.VMILL, i - 1, GDB_BB.STANDARD) + if b3Vmill:getDimX() < 1200 then + EgtRemoveVolZmapPart( EMT.VMILL, i - 1) + end + end + end + -- aggiorno visualizzazione + EgtDraw() + end + end +end + +--------------------------------------------------------------------- +function OnSimulPathStartAux() + --EgtOutLog( 'OnSimulPathStartAux - ' .. EgtNumToString( EMT.AUXIND, 0) .. ' - ' .. EMT.AUX) + EgtOutLog( 'OnSimulPathStartAux', 5) + -- eseguo il comando + --ExecAuxCmd( EMT.AUX) +end + +--------------------------------------------------------------------- +function OnSimulPathEndAux() + --EgtOutLog( 'OnSimulPathEndAux - ' .. EgtNumToString( EMT.AUXIND, 0) .. ' - ' .. EMT.AUX) + EgtOutLog( 'OnSimulPathEndAux', 5) +end + +--------------------------------------------------------------------- +function OnSimulMoveStart() + -- se posizionamento in home, verifico se utensile speciale da depositare prima + if EMT.MOVE == 0 and EMT.FLAG == 4 then + -- se utensile speciale su testa 1 + if EMT.HEAD == 'H1' and IsSpecialTool( EMT.TCPOS) then + -- eseguo movimento opportuno + SimulMoveAxes( 'B1', 0, MCH_SIM_STEP.COLLROT, 'C1', 0, MCH_SIM_STEP.COLLROT) + SimulMoveAxes( 'X1', ParkTSpecX1, MCH_SIM_STEP.RAPID) + -- nascondo l'utensile sulla testa e lo visualizzo sul TC + EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN) + ShowToolInTcPos( EMT.TCPOS_1, true) + EMT.TOOL_1 = nil + EMT.TCPOS_1 = nil + end + end +end + +--------------------------------------------------------------------- +--function OnSimulMoveEnd() +--end + +--------------------------------------------------------------------- +function OnSimulCollision() + -- se prima collisione della lavorazione, la segnalo + if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then + local Class = '' + if EMT.SIMCOBIND == 1001 or EMT.SIMCOBIND == 1011 or EMT.SIMCOBIND == 1021 then + Class = 'T_'..EMT.HEAD + elseif EMT.SIMCOBIND == 1002 or EMT.SIMCOBIND == 1012 or EMT.SIMCOBIND == 1022 then + Class = 'TH_'..EMT.HEAD + else + Class = EMT.COLLOBJ[EMT.SIMCOBIND].Cl + end + -- se foratura verticale ammetto discesa nel piano fino a 15 mm + if EMT.TOOLTYPE == MCH_TY.DRILL_STD and abs( EgtGetAxisPos( 'C1')) < 0.1 then + local PosZ = EgtGetAxisPos( 'Z1') + local DownZ = PosZ - EMT.TOOLTOTLEN - DeltaTabZ + if DownZ > -15 then + EgtOutLog( 'Vertical drilling down table '..EgtNumToString( DownZ, 1), 1) + return + end + end + table.insert( EMT.COLLIDE, { Mc = EMT.MCHNAME, Cl = Class, Vm = EMT.SIMVMID}) + EMT.LAST_MCHNAME_COLLIDE = EMT.MCHNAME + EMT.ERR = 1 + local sErr = 'CUTID='..tostring( EMT.CUTID)..'; TASKID='..tostring( EMT.TASKID)..'; Mach='..EMT.MCHNAME..'; Class='..Class..'; VMill='..EMT.SIMVMID + EmtSetLastError( 1221, sErr, true) + EgtOutLog( 'Collision : ' .. sErr, 1) + end +end + +--------------------------------------------------------------------- +function ParkForScrapRemove() + -- Quota di parcheggio + local b3Raw = EgtGetRawPartBBox( EgtGetFirstRawPart() or GDB_ID.NULL) + local ParkY = max( ( b3Raw:getMin():getX() - 2000), MinY) + --Eseguo + SimulMoveAxis( 'Z1', EgtGetAxisHomePos( 'Z1'), MCH_SIM_STEP.RAPID) + SimulMoveAxis( 'Y', ParkY, MCH_SIM_STEP.RAPID) +end + +--------------------------------------------------------------------- +function ExecScrapRemove() + -- Se non c'è virtual milling attivo, esco + if not EMT.VMILL then return end + -- Se non ci sono almeno due parti nel virtual milling, esco + local nVmPart = EgtVolZmapPartCount( EMT.VMILL) + if nVmPart < 2 then return end + -- Recupero box e area dei pezzi + local vPart = {} + local nPartId = EgtGetFirstPartInRawPart( EgtGetFirstRawPart() or GDB_ID.NULL) + while nPartId do + -- box e area + local b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD) + local dPartArea = b3Part:getDimX() * b3Part:getDimY() + -- box espanso + local b3PartExp = BBox3d( b3Part) + b3PartExp:Add( b3PartExp:getMin() - Vector3d( 10, 10, 0)) + b3PartExp:Add( b3PartExp:getMax() + Vector3d( 10, 10, 0)) + -- salvo i dati + table.insert( vPart, { Box = b3Part, BoxExp = b3PartExp, Area = dPartArea}) + -- passo al successivo + nPartId = EgtGetNextPartInRawPart( nPartId) + end + -- Recupero box e area delle parti di Vmill + local vVmPart = {} + for i = 1, nVmPart do + -- recupero il box e calcolo l'area della parte come Vmill + local b3VmPart = EgtVolZmapGetPartBBoxGlob( EMT.VMILL, i - 1, GDB_BB.STANDARD) + local dVmPartArea = EgtVolZmapPartVolume( EMT.VMILL, i - 1) / b3VmPart:getDimZ() + -- box espanso + local b3VmPartExp = BBox3d( b3VmPart) + b3VmPartExp:Add( b3VmPart:getMin() - Vector3d( 100, 100, 0)) + b3VmPartExp:Add( b3VmPart:getMax() + Vector3d( 100, 100, 0)) + -- salvo i dati + table.insert( vVmPart, { Box = b3VmPart, BoxExp = b3VmPartExp, Area = dVmPartArea}) + end + -- Tengo solo le parti del Vmill che contengono almeno un box di un pezzo o che interferiscono e sono abbastanza grandi + local nValidCnt = 0 + for i = #vVmPart, 1, -1 do + -- verifiche per parte da eliminare + local bToRemove = true + -- se area abbastanza grande, allora da verificare + if vVmPart[i].Area > 1e4 then + -- verifico se sono sicuramente valide (i due box si equivalgono entro la tolleranza) + for j = 1, #vPart do + if EnclosesXY( vVmPart[i].BoxExp, vPart[j].Box) and EnclosesXY( vPart[j].BoxExp, vVmPart[i].Box) then + bToRemove = false + vVmPart[i].Part = j + nValidCnt = nValidCnt + 1 + break + end + end + -- verifico se sono molto probabilmente valide + for j = 1, #vPart do + if bToRemove and ( OverlapsXY( vVmPart[i].Box, vPart[j].Box) and vVmPart[i].Area > 0.49 * vPart[j].Area) then + bToRemove = false + break + end + end + end + -- se richiesta eliminazione, la eseguo + if bToRemove then + EgtRemoveVolZmapPart( EMT.VMILL, i - 1) + table.remove( vVmPart, i) + end + end + -- Se il numero delle parti sicuramente valide uguaglia il numero dei pezzi, elimino le altre ed ho finito + if nValidCnt == #vPart then + for i = #vVmPart, 1, -1 do + if not vVmPart[i].Part then + EgtRemoveVolZmapPart( EMT.VMILL, i - 1) + table.remove( vVmPart, i) + end + end + return + end + -- Calcolo punti interni alle parti di Vmill non già dichiarate valide + for i = 1, #vVmPart do + if not vVmPart[i].Part then + local vtDir = VectorFromRotated( X_AX(), Z_AX(), 45) + local ptP = vVmPart[i].Box:getCenter() - vtDir * ( vVmPart[i].Box:getRadius() + 10) + local bOk, vIntType, vIntDist = EgtLineVolZmapInters( ptP, vtDir, EMT.VMILL, GDB_RT.GLOB) + if bOk then + for j = 1, #vIntType do + -- se la corrente entra ed esiste la successiva che esce + if vIntType[j] == GDB_SLT.IN and j + 1 <= #vIntType and vIntType[j + 1] == GDB_SLT.OUT then + local ptC = ptP + vtDir * (( vIntDist[j] + vIntDist[j + 1]) / 2) + local nPart = EgtVolZmapGetPartMinDist( EMT.VMILL, ptC, GDB_RT.GLOB) + if nPart == i - 1 then + if not vVmPart[i].Cen then + vVmPart[i].Cen = ptC + elseif not vVmPart[i].Cen2 then + vVmPart[i].Cen2 = ptC + else + vVmPart[i].Cen3 = ptC + break + end + end + end + end + end + end + end + -- Verifico le parti di Vmill non già dichiarate valide + for i = #vVmPart, 1, -1 do + if not vVmPart[i].Part then + local bToRemove = true + if vVmPart[i].Cen then + for j = 1, #vPart do + if EnclosesPointXY( vPart[j].Box, vVmPart[i].Cen) then + bToRemove = false + break + elseif vVmPart[i].Cen2 and EnclosesPointXY( vPart[j].Box, vVmPart[i].Cen2) then + bToRemove = false + break + elseif vVmPart[i].Cen3 and EnclosesPointXY( vPart[j].Box, vVmPart[i].Cen3) then + bToRemove = false + break + end + end + for k = 1, #vVmPart do + if k ~= i then + local vExpBox = BBox3d( vVmPart[k].Box) + -- lo espando in XY per sicurezza + vExpBox:Add( vExpBox:getMin() - Vector3d( 100, 100, 0)) + vExpBox:Add( vExpBox:getMax() + Vector3d( 100, 100, 0)) + -- verifico contenimento + if EnclosesXY( vExpBox, vVmPart[i].Box) then + bToRemove = true + break + end + end + end + end + -- se richiesta eliminazione, la eseguo + if bToRemove then + EgtRemoveVolZmapPart( EMT.VMILL, i - 1) + table.remove( vVmPart, i) + end + end + end +end + +--------------------------------------------------------------------- +function ExecUnloading() + if EMT.VMILL then + -- gruppo dei Vmill + local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') + -- creo un nuovo layer e vi inserisco il nuovo pezzo + local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( EMT.VMILL)) + EgtRelocate( EMT.VMILL, nLayId) + EgtSetLevel( EMT.VMILL, GDB_LV.USER) + -- aggiungo gli spigoli + local nFirstId, nCount = EgtVolZmapGetEdges( EMT.VMILL, nLayId) + if nFirstId then + for nId = nFirstId, nFirstId + nCount - 1 do + EgtSetColor( nId, Color3d( 96, 96, 96)) + end + end + -- rilascio Vmill + EMT.VMILL = nil + -- aggiorno la visualizzazione + EgtDraw() + -- se finito + if EMT.PHASE == EgtGetPhaseCount() then + -- se impostato di salvare i Vmill, lo faccio + local sMachIni = EgtGetCurrMachineDir() .. '\\' .. EgtGetCurrMachineName() .. '.ini' + if EgtGetStringFromIni( 'VMill', 'Save', '', sMachIni) == '1' then + local sFile = EgtGetCurrFilePath() + if sFile then + local sDir, sName, sExt = EgtSplitPath( sFile) + if sExt and sExt:lower() == ".nge" then + sName = sName .. '_VM_' .. EgtGetMachGroupName( EgtGetCurrMachGroup()) + EgtSetLevel( nVmGrpId, GDB_LV.USER) + EgtSaveObjToFile( nVmGrpId, sDir .. sName .. '.Nge') + EgtSetLevel( nVmGrpId, GDB_LV.TEMP) + end + end + end + end + end +end + +--------------------------------------------------------------------- +function ShowToolInTcPos( sTcPos, bShow) + -- recupero il gruppo dell'utensile + local TcExitId = EgtGetFirstNameInGroup( EgtGetTcPosId( sTcPos or '') or GDB_ID.NULL, 'T1') + if not TcExitId then return end + -- imposto lo stato di visualizzazione + EgtSetStatus( TcExitId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) +end + +--------------------------------------------------------------------- +function GetToolTcPos( sTool) + -- salvo stato iniziale + local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME) + -- recupero la posizione di cambio utensile dell'utensile indicato + local sTcPos + if EgtTdbSetCurrTool( sTool) then + sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS) + end + -- ripristino stato iniziale + if CurrTool then + EgtTdbSetCurrTool( CurrTool) + else + EgtTdbSetCurrTool( '') + end + -- restituisco risultato + return sTcPos +end + + +--------------------------------------------------------------------- +-- *** ESTIMATION T&L *** +--------------------------------------------------------------------- +local RAPID_X_FEED = 75000 -- mm/min +local RAPID_Y_FEED = 100000 -- mm/min +local RAPID_Z_FEED = 50000 -- mm/min +local RAPID_C_FEED = 15000 -- deg/min +local RAPID_B_FEED = 15000 -- deg/min +local RAPID_MIN_T = 0.1 -- s +local LOAD_T = 2 -- s +local CHAR_ONE_MOVE_T = 1 -- s +local ROTATION_T = 40 -- s +local SPLIT_T = 6 -- s +local UNLOAD_T = 4 -- s +local FALL_T = 2 -- s + +--------------------------------------------------------------------- +function OnEstimStart() + EMT.INCHES = not EgtUiUnitsAreMM() -- unità di misura mm/inches +end + +--------------------------------------------------------------------- +function OnEstimEnd() +end + +--------------------------------------------------------------------- +function OnEstimProgramStart() + -- imposto inizio movimenti da Home + EMT.L1 = EgtGetAxisHomePos( 'Y') + EMT.L2 = EgtGetAxisHomePos( 'X1') + EMT.L3 = EgtGetAxisHomePos( 'Z1') + EMT.R1 = EgtGetAxisHomePos( 'C1') + EMT.R2 = EgtGetAxisHomePos( 'B1') + -- aggiorno valori come precedenti + EmtUpdatePrev() + -- totalizzatori tempi e lunghezze + EMT.TOTCUTLEN = 0 + EMT.TOTCUTTIME = 0 + EMT.TOTEXTLEN = 0 + EMT.TOTEXTTIME = 0 + -- variabile per lunghezza taglio utensili + EMT.TOOLCUTLEN = {} + -- intestazioni + EmtTleStart( EMT.INFO) +end + +--------------------------------------------------------------------- +function OnEstimProgramEnd() + -- stampa dei totali delle lavorazioni + EmtTleAddTotal( EmtSecToHMS( EMT.TOTCUTTIME + EMT.TOTEXTTIME), EmtLenToMF( EMT.TOTCUTLEN)) + -- stampa dei totali degli utensili + for i = 1, #EMT.TOOLCUTLEN do + local TCL = EMT.TOOLCUTLEN[i] + EmtTleAddTool( TCL.Name, EmtLenToMF( TCL.Len)) + end + -- completo il file + local _, _, sExt = EgtSplitPath( EMT.FILE) + EmtTleEnd( sExt:sub( 2)) + -- salvo i dati principali nel progetto + EgtSetInfo( EgtGetCurrMachGroup(), 'Ttot', EgtNumToString( EMT.TOTCUTTIME + EMT.TOTEXTTIME, 0)) + EgtSetInfo( EgtGetCurrMachGroup(), 'Ltot', EgtNumToString( EMT.TOTCUTLEN, 0)) +end + +--------------------------------------------------------------------- +function OnEstimDispositionStart() + -- inizio disposizione + EMT.OPEISDISP = true + -- sulla prima fase dichiaro carico barra + if EMT.PHASE == 1 then + EMT.LOAD = true + else + EMT.LOAD = false + end +end + +--------------------------------------------------------------------- +function OnEstimDispositionEnd() + -- emetto dati in sospeso + if EMT.TLE_NAME then + EmtTleAddMachining( EMT.TLE_NAME, EmtSecToHMS( EMT.TLE_TIME), ' - ', ' - ') + EMT.TLE_NAME = nil + EMT.TLE_TIME = nil + end + -- termine disposizione + EMT.OPEISDISP = false +end + +--------------------------------------------------------------------- +function OnEstimToolSelect() + -- reset indice utensile in tabella lunghezze + EMT.TCLIND = 0 + -- verifico che l'utensile sia definito + if #EMT.TOOL == 0 then return end + -- cerco l'utensile nella tabella + for i = 1, #EMT.TOOLCUTLEN do + if EMT.TOOLCUTLEN[i].Name == EMT.TOOL then + EMT.TCLIND = i + break + end + end + -- se non trovato, lo aggiungo + if EMT.TCLIND == 0 then + table.insert( EMT.TOOLCUTLEN, { Name = EMT.TOOL, Len = 0}) + EMT.TCLIND = #EMT.TOOLCUTLEN + end +end + +--------------------------------------------------------------------- +function OnEstimToolDeselect() +end + +--------------------------------------------------------------------- +function OnEstimMachiningStart() + EMT.MCHNAME = EgtGetOperationName( EMT.MCHID) + EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE) + EgtOutLog( 'Mach : ' .. EMT.MCHNAME, 5) + -- reset contatori di lavorazione + EMT.MCHCUTLEN = 0 + EMT.MCHCUTTIME = 0 + EMT.MCHEXTLEN = 0 + EMT.MCHEXTTIME = 0 +end + +--------------------------------------------------------------------- +function OnEstimMachiningEnd() + -- nel caso di foratura devo dimezzare la lunghezza di taglio perchè comprende anche l'uscita + if EMT.MCHTYPE == MCH_MY.DRILLING then + EMT.MCHCUTLEN = EMT.MCHCUTLEN / 2 + end + local sName = EgtGetName( EMT.MCHID) + EmtTleAddMachining( sName, EmtSecToHMS( EMT.MCHCUTTIME + EMT.MCHEXTTIME), EmtLenToMF( EMT.MCHCUTLEN), EMT.TOOL) + -- aggiorno totali e utensili + EMT.TOTCUTLEN = EMT.TOTCUTLEN + EMT.MCHCUTLEN + EMT.TOTCUTTIME = EMT.TOTCUTTIME + EMT.MCHCUTTIME + EMT.TOTEXTLEN = EMT.TOTEXTLEN + EMT.MCHEXTLEN + EMT.TOTEXTTIME = EMT.TOTEXTTIME + EMT.MCHEXTTIME + EMT.TOOLCUTLEN[EMT.TCLIND].Len = EMT.TOOLCUTLEN[EMT.TCLIND].Len + EMT.MCHCUTLEN + -- emetto dati in sospeso + if EMT.TLE_NAME then + EmtTleAddMachining( EMT.TLE_NAME, EmtSecToHMS( EMT.TLE_TIME), ' - ', ' - ') + EMT.TLE_NAME = nil + EMT.TLE_TIME = nil + end +end + +--------------------------------------------------------------------- +function OnEstimPathStart() + EMT.AUXTYPE = nil + EMT.MCHMOVEFIRST = true +end + +--------------------------------------------------------------------- +function OnEstimPathEnd() + EMT.AUXTYPE = nil +end + +--------------------------------------------------------------------- +function OnEstimPathStartAux() + -- se richiesto, preparo il carico barra + if EMT.LOAD then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = LOAD_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EmtTleAddMachining( 'Loading', EmtSecToHMS( dTime), ' - ', ' - ') + EMT.LOAD = false + end + -- se altrimenti carico dopo rotazione + elseif EMT.POSTROT then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = ROTATION_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EmtTleAddMachining( 'Rotation', EmtSecToHMS( dTime), ' - ', ' - ') + EMT.POSTROT = false + end + -- altrimenti, spostamento carrelli + else + if EMT.AUXTOT > 2 and EMT.AUXIND == EMT.AUXTOT then + local dTime = ( EMT.AUXTOT - 2) * CHAR_ONE_MOVE_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EmtTleAddMachining( 'Charriots move', EmtSecToHMS( dTime), ' - ', ' - ') + end + end +end + +--------------------------------------------------------------------- +function OnEstimPathEndAux() + -- verifico tipo di emissione + if EMT.OPEISDISP then + if not EMT.AUXTYPE then + local Cmd = EgtSplitString( EMT.AUX) + if Cmd[1] == '0' and Cmd[2] == 'Unloading' then + EMT.AUXTYPE = 'U' + else + EMT.AUXTYPE = 'R' + end + end + else + if not EMT.AUXTYPE then + local Cmd = EgtSplitString( EMT.AUX) + if Cmd[1] == '0' and Cmd[2] == 'Split' then + EMT.AUXTYPE = 'S' + elseif Cmd[1] == '0' and Cmd[2] == 'Unloading' then + EMT.AUXTYPE = 'U' + elseif Cmd[1] == '0' and Cmd[2] == 'Fall' then + EMT.AUXTYPE = 'F' + else + EMT.AUXTYPE = 'P' + end + end + end + -- per lo scarico della rimanenza + if EMT.AUXTYPE == 'R' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = LOAD_T + UNLOAD_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Remnant unloading' + EMT.TLE_TIME = dTime + end + -- per lo split + elseif EMT.AUXTYPE == 'S' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = SPLIT_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Splitting' + EMT.TLE_TIME = dTime + end + -- per lo scarico + elseif EMT.AUXTYPE == 'U' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = UNLOAD_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Unloading' + EMT.TLE_TIME = dTime + end + -- per lo scarico a caduta + elseif EMT.AUXTYPE == 'F' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = FALL_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Fall' + EMT.TLE_TIME = dTime + end + -- per la pre-rotazione + elseif EMT.AUXTYPE == 'P' then + ; -- calcolato come parte della rotazione + end +end + +--------------------------------------------------------------------- +function OnEstimRapid() + -- dati movimento + local dL1 = EMT.L1 - ( EMT.L1p or 0) + local dL2 = EMT.L2 - ( EMT.L2p or 0) + local dL3 = EMT.L3 - ( EMT.L3p or 0) + local dR1 = 0 + if EMT.R1 and EMT.R1p then dR1 = EMT.R1 - EMT.R1p end + local dR2 = 0 + if EMT.R2 and EMT.R2p then dR2 = EMT.R2 - EMT.R2p end + -- se primo posizionamento della lavorazione il movimento di L1 è già conteggiato in quello dei carrelli + if EMT.MCHMOVEFIRST then + EMT.MCHMOVEFIRST = false + dL1 = 0 + end + -- calcolo lunghezza + local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3) + EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen + -- calcolo tempo + local dTime = RAPID_MIN_T + local dT1 = abs( dL1) / RAPID_X_FEED * 60 + if dT1 > dTime then dTime = dT1 end + local dT2 = abs( dL2) / RAPID_Y_FEED * 60 + if dT2 > dTime then dTime = dT2 end + local dT3 = abs( dL3) / RAPID_Z_FEED * 60 + if dT3 > dTime then dTime = dT3 end + local dT4 = abs( dR1) / RAPID_C_FEED * 60 + if dT4 > dTime then dTime = dT4 end + local dT5 = abs( dR2) / RAPID_B_FEED * 60 + if dT5 > dTime then dTime = dT5 end + EMT.MCHEXTTIME = EMT.MCHEXTTIME + dTime + EgtOutLog( string.format( ' G0 Len=%.0f Rot=%.0f° Time=%.2f', dLen, abs( dR1) + abs( dR2), dTime), 5) + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnEstimLinear() + -- dati movimento + local dL1 = EMT.L1 - EMT.L1p + local dL2 = EMT.L2 - EMT.L2p + local dL3 = EMT.L3 - EMT.L3p + -- calcolo lunghezza + local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3) + EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen + -- calcolo tempo + local dTime = dLen / EMT.F * 60 + EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime + EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5) + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnEstimArc() + -- dati movimento + local dLxy = EMT.RR * abs( EMT.AC) * pi / 180 + local dLz = abs( ( Point3d( EMT.L1, EMT.L2, EMT.L3) - Point3d( EMT.L1p, EMT.L2p, EMT.L3p)) * Vector3d( EMT.EXTR)) + -- calcolo lunghezza + local dLen = sqrt( dLxy * dLxy + dLz * dLz) + EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen + -- calcolo tempo + local dTime = dLen / EMT.F * 60 + EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime + EgtOutLog( string.format( ' G2 Len=%.0f Time=%.2f', dLen, dTime), 5) + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +-- *** GENERAL *** +--------------------------------------------------------------------- +function FindFirstToolOnHead( sH1) + -- salvo stato iniziale + local CurrMachId = EgtGetCurrMachining() + local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME) + -- cerco lavorazione con utensile su testa indicata + local sTool, nTlen + local OpId = EgtGetFirstActiveOperation() + while OpId do + local nType = EgtGetOperationType( OpId) + if nType ~= MCH_OY.NONE and nType ~= MCH_OY.DISP then + if EgtSetCurrMachining( OpId) then + local sTest = EgtGetMachiningParam( MCH_MP.TOOL) + if EgtTdbSetCurrTool( sTest) then + local sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD) + if sHead and ( sHead == sH1) then + sTool = sTest + nTlen = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) + break + end + end + end + end + OpId = EgtGetNextActiveOperation( OpId) + end + -- ripristino stato iniziale + if CurrMachId then + EgtSetCurrMachining( CurrMachId) + else + EgtResetCurrMachining() + end + if CurrTool then + EgtTdbSetCurrTool( CurrTool) + else + EgtTdbSetCurrTool( '') + end + -- restituisco risultato + return sTool, nTlen +end + +--------------------------------------------------------------------- +function IsSpecialTool( sTcPos) + return ( sTcPos == 'T101' or sTcPos == 'T201' or sTcPos == 'T202' or sTcPos == 'T203') +end + +--------------------------------------------------------------------- +-- *** END GENERAL *** +--------------------------------------------------------------------- diff --git a/Essetre-WALL.mlse b/Essetre-WALL.mlse new file mode 100644 index 0000000..b566497 --- /dev/null +++ b/Essetre-WALL.mlse @@ -0,0 +1,62 @@ +-- Special Operations macchina Essetre-WALL by EgalTech s.r.l. 2023/03/11 + +-- Intestazioni +require( 'EmtGenerator') +EgtEnableDebug( false) + +EgtOutLog ( '** Essetre-WALL.mlse '..PP_VER..' **', 1) + +--------------------------------------------------------------------- +function OnSpecialMoveZup() + + -- Inizializzazioni + EMC.MODIF = false + EMC.ERR = 1 + + -- Se fresa principale X1 + if EMC.HEAD == 'H1' then + if EMC.L3 > -250 then + EMC.R1 = EgtGetAxisHomePos( 'C1') + EMC.R2 = EgtGetAxisHomePos( 'B1') + EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2) + EMC.MODIF = true + end + -- se altrimenti seconda fresa X3 + elseif EMC.HEAD == 'H7' then + if EMC.L3 > -250 then + EMC.R1 = EgtGetAxisHomePos( 'C3') + EMC.R2 = EgtGetAxisHomePos( 'B3') + EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2) + EMC.MODIF = true + end + -- se altrimenti sega a catena X1 + elseif EMC.HEAD == 'H3' then + local L3New = EMC.L3 + local R1New = EMC.R1 + local R2New = EMC.R2 + if EMC.L3 > -300 then + L3New = min( EMC.L3, -250) + R1New = EgtGetAxisHomePos( 'C1') + R2New = EgtGetAxisHomePos( 'B1') + EMC.MODIF = true + end + if EMC.MODIF then + EMC.L3 = L3New + EMC.R1 = R1New + EMC.R2 = R2New + EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2, EMC.R3) + end + -- se altrimenti lama X2 + elseif EMC.HEAD == 'H2' then + if EMC.L3 > -200 then + EMC.R1 = EgtGetAxisHomePos( 'C2') + EMC.R2 = EgtGetAxisHomePos( 'B2') + EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2) + EMC.MODIF = true + end + -- altrimenti errore + else + error( "Unknown Head") + end + EMC.ERR = 0 +end diff --git a/Messages/Eng.txt b/Messages/Eng.txt new file mode 100644 index 0000000..4548b81 --- /dev/null +++ b/Messages/Eng.txt @@ -0,0 +1,712 @@ +// English machine message file 2022/08/27 + +[MDI] +1=Load tool n° 1 +2=Load tool n° 2 +3=Load tool n° 3 +4=Load tool n° 4 +5=Load tool n° 5 +6=Load tool n° 6 +7=Load tool n° 7 +8=Load tool n° 8 +9=Load tool n° 9 +10=Load tool n° 10 +11=Load tool n° 11 +12=Load tool n° 12 +13=Load tool n° 13 +14=Load tool n° 14 +15=Load tool n° 15 +16=Load tool n° 16 +17=Load tool n° 17 +18=Load tool n° 18 +19=Unload all tool +20=Activate tool magazine +21=Open rotary tool change protection +22=Closed rotary tool change protection +23=Pull up front stop +24=Pull down front stop +25=Pull up lateral stop +26=Pull down side stop +27=Manual tool number assignment in the 5-axis head +28 = Workplan cleaning cycle + +[PLC] +1=Machine switched off +2=FREE MESSAGE +3=UPS malfunction in machine electric cabinet +4=UPS battery discharged in machine electric cabinet +5=FREE MESSAGE +6=Home axes B and C not executed +7=FREE MESSAGE +8=Check oil lubrication of chain aggregates +9=Thermal magnetic circuit breaker intervened in machine electric cabinet +10=FREE MESSAGE +11=FREE MESSAGE +12=Minimum grease level in the punp +13=Axis lubrication plant fault +14=Compressed air is missing +15=Over temperature in machine electric cabinet left +16=Over temperature in machine electric cabinet right +17=Electrospindle and motor cooler malfunction +18=FREE MESSAGE +19=FREE MESSAGE +20=FREE MESSAGE +21=FREE MESSAGE +22=FREE MESSAGE +23=Possible collision electrospindle with rotary tool change +24=X axis drive in alarm +25=Y axis drive in alarm +26=Z axis drive in alarm +27=B axis drive in alarm +28=C axis drive in alarm +29=U axis drive in alarm +30=Y1 axis drive in alarm +31=W axis drive in alarm +32=X axis drive not enabled +33=Y axis drive not enabled +34=Z axis drive not enabled +35=B axis drive not enabled +36=C axis drive not enabled +37=U axis drive not enabled +38=Y1 axis drive not enabled +39=W axis drive not enabled +40=V axis drive in alarm +41=V axis drive not enabled +42=A axis drive in alarm +43=A axis drive not enabled +44=Rotary tool change warehouse protection open +45=Waiting for insertion of blade motor contactor +46=Waiting for insertion of electrospindle contactor +47=Electrospindle position not ok for side tool magazine exit +48=Electrospindle position not ok for under beam tool magazine exit +49=Electrospindle position not ok for chain saw tool magazine exit +50=Alarm of safety zones workplan +51=Pre-alarm workplan safety zones +52=FREE MESSAGE +53=Obstacle descent portal suction cap +54=Obstacle descent electrospindle suction cap +55=Obstacle descent saw blade suction cap +56=Inverter malfunction cportal suction cap +57=Inverter malfunction celectrospindle suction cap +58=Inverter malfunction csaw blade suction cap +59=*** CE MAINTENANCE *** +60=FREE MESSAGE +61=FREE MESSAGE +62=FREE MESSAGE +63=FREE MESSAGE +64=FREE MESSAGE +65=FREE MESSAGE +66=FREE MESSAGE +67=FREE MESSAGE +68=FREE MESSAGE +69=FREE MESSAGE +70=FREE MESSAGE +71=FREE MESSAGE +72=FREE MESSAGE +73=FREE MESSAGE +74=FREE MESSAGE +75=FREE MESSAGE +76=FREE MESSAGE +77=FREE MESSAGE +78=FREE MESSAGE +79=FREE MESSAGE +80=FREE MESSAGE +81=Side tool loader not backwards program M90 and then M195 +82=Side tool magazine forward sensor not Ok +83=Side tool magazine back sensor not Ok +84=Tool magazine under beam not back program M90 and then M197 +85=Under beam tool magazine forward sensor not Ok +86=Under beam tool magazine back sensor not Ok +87=Chain saw tool magazine not back program M90 and then M199 +88=Tool magazine chain saw forward Sensor not Ok +89=Tool magazine chain saw back Sensor not Ok +90=FREE MESSAGE +91=FREE MESSAGE +92=Contemporary sensors for side tool change magazine +93=Contemporary sensors for under beam tool change magazine sottotrave +94=Contemporary sensors for chain saw tool change magazine catena +95=Tuning inserted allowed only manual movements +96=FREE MESSAGE +97=FREE MESSAGE +98=FREE MESSAGE +99=FREE MESSAGE +100=FREE MESSAGE +101=Number of revolutions electrospindle or motor not Ok +102=FREE MESSAGE +103=FREE MESSAGE +104=FREE MESSAGE +105=Rotation electrospindle forbidden without tools +106=FREE MESSAGE +107=FREE MESSAGE +108=Wait for power +109=Press reset button +110=FREE MESSAGE +111=FREE MESSAGE +112=FREE MESSAGE +113=FREE MESSAGE +114=FREE MESSAGE +115=Overtemperature brake resistors mill inverter +116=Mill Electrospindle overtemperature +117=Saw Motor overtemperature +118=Flow switch Electrospindle not Ok +119=Saw blade Motor flow switch not Ok +120=Overcurrent inverter +121=Problem on electro-valve or vacuum workplan: zone 1 +122=Problem on electro-valve or vacuum workplan: zone 2 +123=Problem on electro-valve or vacuum workplan: zone 3 +124=Problem on electro-valve or vacuum workplan: zone 4 +125=Problem on electro-valve or vacuum workplan: zone 5 +126=Problem on electro-valve or vacuum workplan: zone 6 +127=Problem on electro-valve or vacuum workplan: zone 7 +128=Problem on electro-valve or vacuum workplan: zone 8 +129=Problem on electro-valve or vacuum workplan: zone 9 +130=Problem on electro-valve or vacuum workplan: zone 10 +131=Problem on electro-valve or vacuum workplan: zone 11 +132=Problem on electro-valve or vacuum workplan: zone 12 +133=Problem on electro-valve or vacuum workplan: zone 13 +134=Problem on electro-valve or vacuum workplan: zone 14 +135=FREE MESSAGE +136=FREE MESSAGE +137=FREE MESSAGE +138=Switch on the remote control +139=Remote Control Battery Almost Empty +140=FREE MESSAGE +141=FREE MESSAGE +142=Problem on electro-valve or sensor in lateral zero reference workplan 1 +143=Problem on electro-valve or sensor in lateral zero reference workplan 2 +144=Problem on electro-valve or sensor in lateral zero reference workplan 3 +145=Problem on electro-valve or sensor in lateral zero reference workplan 4 +146=Problem on electro-valve or sensor in lateral zero reference workplan 5 +147=Problem on electro-valve or sensor in lateral zero reference workplan 6 +148=Problem on electro-valve or sensor in lateral zero reference workplan 7 +149=Problem on electro-valve or sensor in the front zero reference +150=FREE MESSAGE +151=Electrospindle tool locking defect +152=FREE MESSAGE +153=Tool on Electrospindle with E80001=0 +154=FREE MESSAGE +155=Electrospindle tool unlock defect +156=FREE MESSAGE +157=FREE MESSAGE +158=FREE MESSAGE +159=Electrospindle Piston unlocking tool not at rest +160=FREE MESSAGE +161=FREE MESSAGE +162=FREE MESSAGE +163=FREE MESSAGE +164=FREE MESSAGE +165=FREE MESSAGE +166=FREE MESSAGE +167=FREE MESSAGE +168=FREE MESSAGE +200=Defect on one or more EtherCAT modules: restart the machine +201=Function Block Safety in error - input signal discrepancy +202=Safety module communication defect +203=Safety output defect +204=Service Mode ON + +[CNC] +1=Unknown character or Axis not recognized by the system +2=Unknown G Function or or a mandatory argument missing after the G +3=Attribute of a G code wrongly positioned +4=Option not enabled or option parameter conflict +5=Geometric Programming Option not enabled +6=Polynomial interpolation option missing +7=Movements parallel to the inclined axes +8=Tool corrector number too high +9=Too many consecutive non executable blocks +10=PLC I/O access: wrong bus exchange +11=PLC I/O access: wrong bus initialization or exchange inhibited +12=PLC I/O access: wrong rack parameter +13=PLC I/O access: card missing +14=Inclined plane option missing - PLC I/O access: channel missing +15=Invalid line configuration +16=Error in activating RTCP +17=Missing closing bracket +18=Servo error: P50 too small +19=RESET RAM at the next power-up +20=M02 missing or blocks left non-executable by a personalized G code +21=Incoherent definition of the blank in 3D +22=Current Part Program corrupted +24=Error in the definition of an inclined plane +25=Unknown sub-programme or block number +26=Sub-programme nesting too deep +27=Tool Radius Correction +28=Syntax error in CCSPD or working radius definition +29=No programmed range in CCSPD / No suitable range for S in G97 +30=Serial line error +31=Mode PPR or PPL impossible with the selected line's protocol +32=Axis referencing error +33=All channels waiting for synchronization +34=Minimum radius for interpolation reached - G21 +35=Searched for block number, not found +36=Part programme memory full +37=Maximum feed exceeded in thread cutting +38=Control of a spindle already affected to another channel +39=Axis synchronisation fault +40=Excessive following error on axis 0 +41=Excessive following error on axis 1 +42=Excessive following error on axis 2 +43=Excessive following error on axis 3 +44=Excessive following error on axis 4 +45=Excessive following error on axis 5 +46=Excessive following error on axis 6 +47=Excessive following error on axis 7 +48=Excessive following error on axis 8 +49=Excessive following error on axis 9 +50=Excessive following error on axis 10 +51=Excessive following error on axis 11 +52=Excessive following error on axis 12 +53=Excessive following error on axis 13 +54=Excessive following error on axis 14 +55=Excessive following error on axis 15 +56=Excessive following error on axis 16 +57=Excessive following error on axis 17 +58=Excessive following error on axis 18 +59=Excessive following error on axis 19 +60=Excessive following error on axis 20 +61=Excessive following error on axis 21 +62=Excessive following error on axis 22 +63=Excessive following error on axis 23 +64=Excessive following error on axis 24 +65=Excessive following error on axis 25 +66=Excessive following error on axis 26 +67=Excessive following error on axis 27 +68=Excessive following error on axis 28 +69=Excessive following error on axis 29 +70=Excessive following error on axis 30 +71=Excessive following error on axis 31 +72=Incremental programming after an incomplete block +75=G20 to G21 or G22 transition +76=In G21 : turning or milling fixed cycles are not allowed +77=Tool type not compatible with the operation +78=Syntax error in synchronizing channels +79=Invalid TANDEM Configuration +80=Drive not in HALT +91=Unknown parameter or variable +92=Error in assignment to a parameter or variable +93=Error in the definition of a parameter or in the expression of a test +94=Impossible operation +95=Trying to write to a read only parameter +96=Preceding block "look ahead" +97=Assignment of a parameter in G76 not possible +98=Writing by a channel of a dynamic operator already used by another channel +99=Error associated with the N/M AUTO function +101=PGP: insufficient data in the programming of a circle +102=PGP: when programming a line by angle and one coordinate +106=In G2 G3: 3rd axis programmed without helical option +107=PGP: circle programmed by its radius and end point +110=PGP: syntax error in the first of 2 blocks. +111=PGP: syntax error in the second block. +112=PGP: line-line intersection in which +113=PGP: the values programmed in the two blocks do not allow +114=PGP: intersection or tangent point not defined by ET+ ET- ES+ ES- +121=PGP: syntax error in last of 3 blocks +122=PGP: the first two blocks are non-secant lines +123=PGP: data in the 3 blocks doesn't allow the tangent points to be calculated +124=PGP: tangent point second-third block not defined by ET+ or ET- +130=no axis movement in 1 of the 2 blocks connected by a fillet or chamfer +131=M0,M1 or M2 is not allowed in a block with a fillet or chamfer +135=A chamfer can only be between 2 lines +136=More than 2 non movement blocks between 2 elements whose +137=Change of interpolation plane even though the block is not valid +138=Change of interpolation plane must be in G40 +139=Two parallel [carried] axes programmed in the same block +140=Programming error in radius correction +141=Parallel carried axes : programming a circle whose +143=G73/G74 is not allowed in radius correction mode +144=Quantified axis displacement is different from the Increment +145=G29: abs value > 1 mm +146=3D Tool offsets, with G29 or G43 +148=Number of interpolated axes higher than the maximum allowed +149=Tool radius to large in relation to the programmed trajectory +150=X axis out of limits +151=Y axis out of limits +152=Z axis out of limits +153=U axis out of limits +154=V axis out of limits +155=W axis out of limits +156=A axis out of limits +157=B axis out of limits +158=C axis out of limits +159=Move demanded on a not-homed axis +160=Slave axis homing error +161=Synchro axis homing error +190=Too many nested jumps or loops +191=Syntax error in structured programming +192=Unknown or forbidden key word +193=Structural error +195=Stack overflow +196=Error in the table index declaration +197=Use of an undeclared symbol +198=Syntax error in declaring the symbol for a variable +199=Syntax error in declaring a variable +200=Poor signal or complementarity error on handwheel 0 +201=Poor signal or complementarity error on handwheel 1 +202=Poor signal or complementarity error on handwheel 2 +203=Poor signal or complementarity error on handwheel 3 +210=Poor signal or channel loss or serial feedback fault on axis 0 +211=Poor signal or channel loss or serial feedback fault on axis 1 +212=Poor signal or channel loss or serial feedback fault on axis 2 +213=Poor signal or channel loss or serial feedback fault on axis 3 +214=Poor signal or channel loss or serial feedback fault on axis 4 +215=Poor signal or channel loss or serial feedback fault on axis 5 +216=Poor signal or channel loss or serial feedback fault on axis 6 +217=Poor signal or channel loss or serial feedback fault on axis 7 +218=Poor signal or channel loss or serial feedback fault on axis 8 +219=Poor signal or channel loss or serial feedback fault on axis 9 +220=Poor signal or channel loss or serial feedback fault on axis 10 +221=Poor signal or channel loss or serial feedback fault on axis 11 +222=Poor signal or channel loss or serial feedback fault on axis 12 +223=Poor signal or channel loss or serial feedback fault on axis 13 +224=Poor signal or channel loss or serial feedback fault on axis 14 +225=Poor signal or channel loss or serial feedback fault on axis 15 +226=Poor signal or channel loss or serial feedback fault on axis 16 +227=Poor signal or channel loss or serial feedback fault on axis 17 +228=Poor signal or channel loss or serial feedback fault on axis 18 +229=Poor signal or channel loss or serial feedback fault on axis 19 +230=Poor signal or channel loss or serial feedback fault on axis 20 +231=Poor signal or channel loss or serial feedback fault on axis 21 +232=Poor signal or channel loss or serial feedback fault on axis 22 +233=Poor signal or channel loss or serial feedback fault on axis 23 +234=Poor signal or channel loss or serial feedback fault on axis 24 +235=Poor signal or channel loss or serial feedback fault on axis 25 +236=Poor signal or channel loss or serial feedback fault on axis 26 +237=Poor signal or channel loss or serial feedback fault on axis 27 +238=Poor signal or channel loss or serial feedback fault on axis 28 +239=Poor signal or channel loss or serial feedback fault on axis 29 +240=Poor signal or channel loss or serial feedback fault on axis 30 +241=Poor signal or channel loss or serial feedback fault on axis 31 +245=Digital servo loop fault +246=Bad homing reference mark detected +247=Drive parameter fault DISC NT +248=Axis drive or digital spindle fault +249=Communication error between CNC and PLC +250=Invalid PERSOChip +251=Inconsistent PERSOChip Data +252=Invalid Licence File +253=Nesting of subroutines called by M function not allowed +260=Executive memory busy +261=Programme number too high +262=NU number not amongst those authorised +263=TEST or GRAPHIC mode obligatory after initial load or modification +264=No dimension in the profiling plane or dimension outside plane +265=First positioning block missing +266=Insufficient memory +267=Invalid character in pocket syntax +268=Incomplete pocket block or containing unauthorised data +269=Incomplete profiling block +270=Pocket definition, partially or totally missing +271=Tool orientation not perpendicular in relation to profiling plane +272=Real tool incompatible with pocket machining data +273=Change of profiling plane between pocket definition and execution +274=Two pocket definitions overlapped +275=NU0 programmed with 59 +276=Zero pocket depth +277=Incomplete start or end point coordinates in pocket definition +278=Spindle rotation inconsistent with that requested in pocket definition +279=G Function unauthorised in pocket programming block +280=First profiling block incomplete +281=Profile inconsistency +282=Incorrect pocket parameters +283=Outer profile must exist and be unique +284=Error in profile definition +285=Too many profiles +286=Tool pass too great relative to the tool diameter +287=Tool pass too shallow in relation to the dimensions +288=Finishing OP start point at a re-entrant angle or an area not yet +289=Tool diameter too large +290=Pocket: Internal error +291=Finishing start point outside the profile +292=Double positioning at start of profile +293=Rough end point found in face milling section +300=Axis 0 declared in P2 but not detected on the bus or feedback fault +301=Axis 1 declared in P2 but not detected on the bus or feedback fault +302=Axis 2 declared in P2 but not detected on the bus or feedback fault +303=Axis 3 declared in P2 but not detected on the bus or feedback fault +304=Axis 4 declared in P2 but not detected on the bus or feedback fault +305=Axis 5 declared in P2 but not detected on the bus or feedback fault +306=Axis 6 declared in P2 but not detected on the bus or feedback fault +307=Axis 7 declared in P2 but not detected on the bus or feedback fault +308=Axis 8 declared in P2 but not detected on the bus or feedback fault +309=Axis 9 declared in P2 but not detected on the bus or feedback fault +310=Axis 10 declared in P2 but not detected on the bus or feedback fault +311=Axis 11 declared in P2 but not detected on the bus or feedback fault +312=Axis 12 declared in P2 but not detected on the bus or feedback fault +313=Axis 13 declared in P2 but not detected on the bus or feedback fault +314=Axis 14 declared in P2 but not detected on the bus or feedback fault +315=Axis 15 declared in P2 but not detected on the bus or feedback fault +316=Axis 16 declared in P2 but not detected on the bus or feedback fault +317=Axis 17 declared in P2 but not detected on the bus or feedback fault +318=Axis 18 declared in P2 but not detected on the bus or feedback fault +319=Axis 19 declared in P2 but not detected on the bus or feedback fault +320=Axis 20 declared in P2 but not detected on the bus or feedback fault +321=Axis 21 declared in P2 but not detected on the bus or feedback fault +322=Axis 22 declared in P2 but not detected on the bus or feedback fault +323=Axis 23 declared in P2 but not detected on the bus or feedback fault +324=Axis 24 declared in P2 but not detected on the bus or feedback fault +325=Axis 25 declared in P2 but not detected on the bus or feedback fault +326=Axis 26 declared in P2 but not detected on the bus or feedback fault +327=Axis 27 declared in P2 but not detected on the bus or feedback fault +328=Axis 28 declared in P2 but not detected on the bus or feedback fault +329=Axis 29 declared in P2 but not detected on the bus or feedback fault +330=Axis 30 declared in P2 but not detected on the bus or feedback fault +331=Axis 31 declared in P2 but not detected on the bus or feedback fault +400=Loading dyn ops in C: The size of user code is too big +401=Loading dyn ops in C: Format error +402=Loading dyn ops in C: Checksum error +403=The system has insufficient memory for dyn ops in C +404=Loading dyn ops in C: Open error +405=Loading dyn ops in C: Read error +406=Loading dyn ops in C: Close error +407=Loading dyn ops in C: The directory is empty +410=Dyn ops in C: Number of parameters passed doesn't tally +411=Dyn ops in C: user error from init: negative return +413=Unrecognised dyn ops in C +414=Dyn ops in C without MAIN +420=Dynops in C: USER ERROR from the QUIT function +421=Dynops in C: USER ERROR from the QUIT function: negative return +423=Dynops in C: Range of function in C not from 0 at 100 +424=Floating point unit exception error +900=Invalid tool number M6T +901=Tool number loaded not OK +902=Invalid tool number E80001 on electrospindle +903=Sensor home B electrospindle not OK +904=Sensor home C electrospindle not OK +905=Sensor home B motor saw blade not OK +906=Sensor home C motor saw blade not OK +907=free message +908=free message +909=free message +910=free message +911=free message +912=free message +913=free message +914=free message +915=free message +916=Define spindle number et.. (1=blade 2=mill 3=right driller 4=left driller) +917=free message +918=free message +919=free message +920=free message +921=free message +922=free message +923=free message +924=OFFSET X SAW BLADE NOT ALIGNED BETWEEN MACHINE AND CADCAM +925=OFFSET Y SAW BLADE NOT ALIGNED BETWEEN MACHINE AND CADCAM +926=OFFSET Z SAW BLADE NOT ALIGNED BETWEEN MACHINE AND CADCAM +927=PIVOT Z SAW BLADE NOT ALIGNED BETWEEN MACHINE AND CADCAM +928=PIVOT C SAW BLADE NOT ALIGNED BETWEEN MACHINE AND CADCAM +929=OFFSET X MILL NOT ALIGNED BETWEEN MACHINE AND CADCAM +930=OFFSET Y MILL NOT ALIGNED BETWEEN MACHINE AND CADCAM +931=OFFSET Z MILL NOT ALIGNED BETWEEN MACHINE AND CADCAM +932=PIVOT Z MILL NOT ALIGNED BETWEEN MACHINE AND CADCAM +933=Mandatory X-U-W-Z programming with G102EH.. not zero +934=free message +935=free message +936=free message +937=free message +938=free message +939=free message +1206=Axes Moving +1207=Program in execution +1604=Program being executed +2001=Flexium system has not been shutdown correctly. Some programs may not be up to date. The programs need to be checked in the programming page +2007=Flexium System was not shutdown correctly! Previous Zone 0 files are transfered to the NCK +5000=No communication with Flexium RTS + +[INPUT] +1=MACHINE ON +2=MOTOR THERMOELEMENTS +3=REMOTE SWITCH ELECTRICSPINDLE INSERTED +4=SUCTION CAP PORTAL MOTOR DRIVE OK +5=SUCTION CAP ELECTRICSPINDLE MOTOR DRIVE OK +6=THERMAL PROBE - INVERTER BRAKE RESISTANCE +7=SUCTION CAP SAW BLADE MOTOR DRIVE OK +8=SENSOR HIGH UP SUCTION CAP PORTAL +9=SENSOR LOW-DOWN UP SUCTION CAP PORTAL +10=MAINTENANCE SELECTION MACHINE CE +11=SENSOR HIGH UP SUCTION CAP ELECTRICSPINDLE +12=SENSOR LOW-DOWN UP SUCTION CAP ELECTRICSPINDLE +13=SENSOR HIGH UP SUCTION CAP SAW BLADE MOTOR +14=SENSOR LOW-DOWN UP SUCTION CAP SAW BLADE MOTOR +15=SENSOR CHANGING ROTATIVE UTENSILE PROTECTION OPENED +16=FREE INPUT +17=FREE INPUT +18=FREE INPUT +19=FREE INPUT +20=FREE INPUT +21=FREE INPUT +22=FREE INPUT +23=SENSOR FORWARD CHAIN SAW TOOL CHANGE +24=SENSOR BACKWARDS CHAIN SAW TOOL CHANGE +25=THERMAL PROBE SENSOR ELECTRICSPINDLE +26=THERMAL PROBE SENSOR SAW BLADE MOTOR +27=FREE INPUT +28=SENSOR FORWARD SIDE TOOL CHANGE +29=SENSOR BACKWARDS SIDE TOOL CHANGE +30=ELECTRICSPINDLE AND SAW BLADE MOTOR COOLER OK +31=ELECTRICSPINDLE FLOW SWITCH +32=ALARM RESET BUTTON +33=PRESSURE DEVICE AXES LUBRICATION +34=PRESSURE DEVICE COMPRESSED AIR +35=SENSOR MINIMUM GREASE LEVEL +36=SENSOR MINIMUM OIL LEVEL +37=FREE INPUT +38=OVER TEMPERATURE LEFT CABINET +39=SENSOR UNLOCKED PISTON CONE AT REST +40=PRE-ALARM WORKPLAN SAFETY ZONES +41=SAW BLADE MOTOR FLOW SWITCH +42=REMOTE SWITCH SAW BLADE MOTOR INSERTED +43=SENSOR FORWARD UNDER BEAM TOOL CHANGE +44=SENSOR BACKWARDS UNDER BEAM TOOL CHANGE +45=ALARM OF SAFETY ZONES WORKPLAN +46=FREE INPUT +47=UPS BATTERY OK +48=UPS-CURRENT OUTPUT +49=SENSOR LOW-DOWN FRONTAL STOP +50=SENSOR LOW-DOWN LATERAL STOP WORKPLAN 1 +51=SENSOR LOW-DOWN LATERAL STOP WORKPLAN 2 +52=SENSOR LOW-DOWN LATERAL STOP WORKPLAN 3 +53=SENSOR LOW-DOWN LATERAL STOP WORKPLAN 4 +54=SENSOR LOW-DOWN LATERAL STOP WORKPLAN 5 +55=SENSOR LOW-DOWN LATERAL STOP WORKPLAN 6 +56=FREE INPUT +57=FREE INPUT +58=SELECTOR CONVEYOR BELT ACTIVATION +59=FREE INPUT +60=FREE INPUT +61=FREE INPUT +62=FREE INPUT +63=OVER TEMPERATURE RIGHT CABINET +64=FREE INPUT +65=VACUUM RESERVATION ZONE 1 +66=VACUUM RESERVATION ZONE 2 +67=VACUUM RESERVATION ZONE 3 +68=VACUUM RESERVATION ZONE 4 +69=VACUUM RESERVATION ZONE 5 +70=VACUUM RESERVATION ZONE 6 +71=VACUUM RESERVATION ZONE 7 +72=VACUUM RESERVATION ZONE 8 +73=VACUUM RESERVATION ZONE 9 +74=VACUUM RESERVATION ZONE 10 +75=VACUUM RESERVATION ZONE 11 +76=VACUUM RESERVATION ZONE 12 +77=FREE INPUT +78=FREE INPUT +79=FREE INPUT +80=FREE INPUT +81=VACUUM SWITCH ZONE 1 +82=VACUUM SWITCH ZONE 2 +83=VACUUM SWITCH ZONE 3 +84=VACUUM SWITCH ZONE 4 +85=VACUUM SWITCH ZONE 5 +86=VACUUM SWITCH ZONE 6 +87=VACUUM SWITCH ZONE 7 +88=VACUUM SWITCH ZONE 8 +89=VACUUM SWITCH ZONE 9 +90=VACUUM SWITCH ZONE 10 +91=VACUUM SWITCH ZONE 11 +92=VACUUM SWITCH ZONE 12 +93=FREE INPUT +94=FREE INPUT +95=FREE INPUT +96=FREE INPUT + +[OUTPUT] +1=CONTROL, DRY AIR SOLENOID VALVE OPENING +2=CE REGULATION MODE CONSENT +3=SELECTION HOME AXIS C1 ELECTRICSPINDLE +4=SELECTION HOME AXIS C2 SAW BLADE MOTOR +5=OPENINGOF THE SOLENOID VALVE OF THE ROTARY TOOL CHANGE PROTECTION +6=CLOSINGOF THE SOLENOID VALVE OF THE ROTARY TOOL CHANGE PROTECTION +7=HOURCOUNTER +8=REMOTE SWITCH ARMING ELECTRICSPINDLE +9=SCRAPS CONVEYOR BELT +10=AXIS MOTOR PUMP LUBRICATION +11=SOLENOID VALVE LUBRICATION CHAIN +12=FREE OUTPUT +13=MESSAGES LAMP +14=FREE OUTPUT +15=FREE OUTPUT +16=REMOTE SWITCH ARMING SAW BLADE MOTOR +17=SOLENOID VALVE TOOL LOCK +18=SOLENOID VALVE TOOL UNLOCK +19=FREE OUTPUT +20=SOLENOID VALVE LATERAL TOOL CHANGE FORWARD +21=SOLENOID VALVE LATERAL TOOL CHANGE BACKWARD +22=SOLENOID VALVE CHAIN TOOL CHANGE FORWARD +23=SOLENOID VALVE CHAIN TOOL CHANGE BACKWARD +24=SOLENOID VALVE CHAIN CLEANING BLOW +25=SOLENOID VALVE CLIMB FRONTAL RIGHT STOP +26=SOLENOID VALVE CLIMB LATERAL WORKPLAN 1 +27=SOLENOID VALVE CLIMB LATERAL WORKPLAN 2 +28=SOLENOID VALVE CLIMB LATERAL WORKPLAN 3 +29=SOLENOID VALVE CLIMB LATERAL WORKPLAN 4 +30=SOLENOID VALVE CLIMB LATERAL WORKPLAN 5 +31=SOLENOID VALVE CLIMB LATERAL WORKPLAN 6 +32=SOLENOID VALVE CLIMB LATERAL WORKPLAN 7 +33=SOLENOID VALVE ELECTRICSPINDLE BLOW +34=SOLENOID VALVE TOOL CHANGE UNDER BEAM FORWARD +35=SOLENOID VALVE TOOL CHANGE UNDER BEAM BACWARD +36=SOLENOID VALVE AXIS ELECTRICSPINDLE CLEANING BLOW +37=SOLENOID VALVE FRONTAL BLOW +38=SOLENOID VALVE LATERAL BLOW +39=VACUUM REQUEST ENABLE +40=OPEN VACUUM +41=SOLENOID VALVE VACUUM OPEN ZONE 1 +42=SOLENOID VALVE VACUUM OPEN ZONE 2 +43=SOLENOID VALVE VACUUM OPEN ZONE 3 +44=SOLENOID VALVE VACUUM OPEN ZONE 4 +45=SOLENOID VALVE VACUUM OPEN ZONE 5 +46=SOLENOID VALVE VACUUM OPEN ZONE 6 +47=SOLENOID VALVE VACUUM OPEN ZONE 7 +48=SOLENOID VALVE VACUUM OPEN ZONE 8 +49=SOLENOID VALVE VACUUM OPEN ZONE 9 +50=SOLENOID VALVE VACUUM OPEN ZONE 10 +51=SOLENOID VALVE VACUUM OPEN ZONE 11 +52=SOLENOID VALVE VACUUM OPEN ZONE 12 +53=SOLENOID VALVE VACUUM OPEN ZONE 13 +54=SOLENOID VALVE VACUUM OPEN ZONE 14 +55=FREE OUTPUT +56=SOLENOID VALVE AXIS MOTOR SAW BLADE CLEANING BLOW +57=VACUUM PRESSURE +58=PORTAL ASPIRATION SUCTION CAP RISE +59=PORTAL ASPIRATION SUCTION CAP DESCEND +60=PORTAL SUCTION CAP FAST COMMAND +61=PORTAL SUCTION CAP BRAKE UNLOCK +62=ELECTRICSPINDLE SUCTION CAP RISE +63=ELECTRICSPINDLE SUCTION CAP DESCEND +64=ELECTRICSPINDLE SUCTION CAP FAST COMMAND +65=ELECTRICSPINDLE SUCTION CAP BRAKE UNLOCK +66=MOTOR SAW BLADE SUCTION CAP RISE +67=MOTOR SAW BLADE SUCTION CAP DESCEND +68=MOTOR SAW BLADE SUCTION CAP FAST COMMAND +69=MOTOR SAW BLADE SUCTION CAP BRAKE UNLOCK +70=SOLENOID VALVE CLEANING AIR TANK LOAD RIGHT +71=SOLENOID VALVE OPENING BLOW CLEANING CABIN RIGHT +72=SOLENOID VALVE CLEANING AIR TANK LOAD LEFT +73=SOLENOID VALVE BLOW CLEANING CABIN LEFT +74=SOLENOID VALVE BLOW CAMERA CLEANING +75=SOLENOID VALVE SUCTION CAP ELECTRICSPINDLE +76=SOLENOID VALVE SUCTION CAP SAW MOTOR +77=SOLENOID VALVE SUCTION CAP PORTAL +78=SOLENOID VALVE SUCTION CAP PORTAL CLEANING +79=OUTPUT MACHINE IN PARKING POSITION +80=OUTPUT ZERO REFERENCE WORKPLAN LOW-DOWN +81=OUTPUT SCRAPS CONVEYOR BELT ROTATING +82=OUTPUT MACHINE SWITCHED ON +83=OUTPUT ALARM OF SAFETY ZONES WORKPLAN +84=FREE OUTPUT +85=FREE OUTPUT +86=FREE OUTPUT +87=FREE OUTPUT +88=FREE OUTPUT +89=FREE OUTPUT +90=FREE OUTPUT +91=FREE OUTPUT +92=FREE OUTPUT +93=FREE OUTPUT +94=FREE OUTPUT +95=FREE OUTPUT +96=FREE OUTPUT diff --git a/Messages/Ita.txt b/Messages/Ita.txt new file mode 100644 index 0000000..360c457 --- /dev/null +++ b/Messages/Ita.txt @@ -0,0 +1,732 @@ +// File dei messaggi macchina Italiano 2023/03/03 +[MDI] +1=Carica utensile n° 1 con Testa1 +2=Carica utensile n° 2 con Testa1 +3=Carica utensile n° 3 con Testa1 +4=Carica utensile n° 4 con Testa1 +5=Carica utensile n° 5 con Testa1 +6=Carica utensile n° 6 con Testa1 +7=Carica utensile n° 7 con Testa1 +8=Carica utensile n° 8 con Testa1 +9=Carica utensile n° 9 con Testa1 +10=Carica utensile n° 20 con Testa1 +11=Carica utensile n° 21 con Testa1 +12=Carica utensile n° 22 con Testa1 +13=Carica utensile n° 23 con Testa1 +14=Carica utensile n° 24 con Testa1 +15=Carica utensile n° 25 con Testa1 +16=Carica utensile n° 26 con Testa1 +17=Carica utensile n° 27 con Testa1 +18=Carica utensile n° 28 con Testa1 +19=Carica utensile n° 101 con Testa1 +20=Carica utensile n° 201 con Testa1 +21=Carica utensile n° 202 con Testa1 +22=Carica utensile n° 203 con Testa1 +23=Scarica utensile da Testa1 +24=Ins/Canc numero utensile presente su Testa1 +25=Carica utensile n° 1 con Testa 2 +26=Carica utensile n° 2 con Testa 2 +27=Carica utensile n° 3 con Testa 2 +28=Carica utensile n° 4 con Testa 2 +29=Carica utensile n° 5 con Testa 2 +30=Carica utensile n° 6 con Testa 2 +31=Carica utensile n° 7 con Testa 2 +32=Carica utensile n° 8 con Testa 2 +33=Carica utensile n° 9 con Testa 2 +34=Carica utensile n° 10 con Testa 2 +35=Carica utensile n° 11 con Testa 2 +36=Carica utensile n° 12 con Testa 2 +37=Carica utensile n° 13 con Testa 2 +38=Carica utensile n° 14 con Testa 2 +39=Carica utensile n° 15 con Testa 2 +40=Carica utensile n° 16 con Testa 2 +41=Carica utensile n° 17 con Testa 2 +42=Carica utensile n° 18 con Testa 2 +43=Carica utensile n° 101 con Testa 2 +44=Carica utensile n° 201 con Testa 2 +45=Carica utensile n° 202 con Testa 2 +46=Carica utensile n° 203 con Testa 2 +47=Scarica utensile da Testa2 +48=Ins/Canc numero utensile presente su Testa2 + +[PLC] +1=Macchina spenta +2=MESSAGGIO LIBERO +3=Anomalia UPS +4=Batteria UPS scarica +5=MESSAGGIO LIBERO +6=POM assi B e C non eseguita +7=MESSAGGIO LIBERO +8=Verificare olio lubrificazione aggregati catena +9=Termici motori +10=MESSAGGIO LIBERO +11=MESSAGGIO LIBERO +12=Minimo livello grasso nella pompa +13=Difetto impianto lubrificazione assi +14=Manca aria compressa +15=Sovratemperatura armadio sinistro +16=Sovratemperatura armadio destro +17=Problema su refrigratore Elettromandrini +18=MESSAGGIO LIBERO +19=MESSAGGIO LIBERO +20=MESSAGGIO LIBERO +21=MESSAGGIO LIBERO +22=MESSAGGIO LIBERO +23=Possibile collisione Elettromandrino con cambio utensile rotativo +24=Azionamento asse X in allarme +25=Azionamento asse Y in allarme +26=Azionamento asse Z in allarme +27=Azionamento asse B in allarme +28=Azionamento asse C in allarme +29=Azionamento asse U in allarme +30=Azionamento asse Y1 in allarme +31=Azionamento asse W in allarme +32=Azionamento asse X non abilitato +33=Azionamento asse Y non abilitato +34=Azionamento asse Z non abilitato +35=Azionamento asse B non abilitato +36=Azionamento asse C non abilitato +37=Azionamento asse U non abilitato +38=Azionamento asse Y1 non abilitato +39=Azionamento asse W non abilitato +40=Azionamento asse V in allarme +41=Azionamento asse V non abilitato +42=Azionamento asse A in allarme +43=Azionamento asse A non abilitato +44=Protezione magazzino cambio utensile rotativo aperta +45=Attesa inserzione teleruttore motore Lama +46=Attesa inserzione teleruttore Elettromandrino +47=Posizione Elettromandrino non ok per uscita magazzino utensili laterale +48=Posizione Elettromandrino non ok per uscita magazzino utensili sottotrave +49=Posizione Elettromandrino non ok per uscita magazzino utensile catena +50=Barriere perimetrali intervenute +51=Pre-allarme barriere perimetrali +52=MESSAGGIO LIBERO +53=Ostacolo discesa cuffia aspirazione Portale +54=Ostacolo discesa cuffia aspirazione Elettromandrino +55=Ostacolo discesa cuffia aspirazione Lama +56=Malfunzionamento inverter cuffia aspirazione Portale +57=Malfunzionamento inverter cuffia aspirazione Elettromandrino +58=Malfunzionamento inverter cuffia aspirazione Lama +59=*** MANUTENZIONE CE *** +60=MESSAGGIO LIBERO +61=MESSAGGIO LIBERO +62=MESSAGGIO LIBERO +63=MESSAGGIO LIBERO +64=MESSAGGIO LIBERO +65=MESSAGGIO LIBERO +66=MESSAGGIO LIBERO +67=MESSAGGIO LIBERO +68=MESSAGGIO LIBERO +69=MESSAGGIO LIBERO +70=MESSAGGIO LIBERO +71=MESSAGGIO LIBERO +72=MESSAGGIO LIBERO +73=MESSAGGIO LIBERO +74=MESSAGGIO LIBERO +75=MESSAGGIO LIBERO +76=MESSAGGIO LIBERO +77=MESSAGGIO LIBERO +78=MESSAGGIO LIBERO +79=MESSAGGIO LIBERO +80=MESSAGGIO LIBERO +81=Magazzino utensili laterale non indietro programmare M90 e poi M195 +82=Sensore avanti magazzino utensili laterale non Ok +83=Sensore indietro magazzino utensili laterale non Ok +84=Magazzino utensili sottotrave non indietro programmare M90 e poi M197 +85=Sensore avanti magazzino utensili sottotrave non Ok +86=Sensore indietro magazzino utensili sottotrave non Ok +87=Magazzino utensile catena non indietro programmare M90 e poi M199 +88=Sensore avanti Magazzino utensile Catena non Ok +89=Sensore indietro Magazzino utensile Catena non Ok +90=MESSAGGIO LIBERO +91=MESSAGGIO LIBERO +92=Sensori contemporanei avanti-indietro magazzino utensili laterale +93=Sensori contemporanei avanti-indietro magazzino utensili sottotrave +94=Sensori contemporanei avanti-indietro magazzino utensile catena +95=Messa a punto inserita permessi solo movimenti manuali +96=MESSAGGIO LIBERO +97=MESSAGGIO LIBERO +98=MESSAGGIO LIBERO +99=MESSAGGIO LIBERO +100=MESSAGGIO LIBERO +101=Numero giri Elettromandrino o motore lama non Ok +102=MESSAGGIO LIBERO +103=MESSAGGIO LIBERO +104=MESSAGGIO LIBERO +105=Rotazione Elettromandrino proibita senza utensili +106=MESSAGGIO LIBERO +107=MESSAGGIO LIBERO +108=Attendere inserzioni di potenza +109=Premere pulsante di reset +110=MESSAGGIO LIBERO +111=MESSAGGIO LIBERO +112=MESSAGGIO LIBERO +113=MESSAGGIO LIBERO +114=MESSAGGIO LIBERO +115=Sovratemperatura resistenze di frenatura inverter +116=Sovratemperatura Elettromandrino +117=Sovratemperatura motore Lama +118=Flussostato Elettromandrino non Ok +119=Flussostato motore Lama non Ok +120=Sovracorrente inverter +121=Problema su elettro-valvola o vacuostato piano di lavoro zona 1 +122=Problema su elettro-valvola o vacuostato piano di lavoro zona 2 +123=Problema su elettro-valvola o vacuostato piano di lavoro zona 3 +124=Problema su elettro-valvola o vacuostato piano di lavoro zona 4 +125=Problema su elettro-valvola o vacuostato piano di lavoro zona 5 +126=Problema su elettro-valvola o vacuostato piano di lavoro zona 6 +127=Problema su elettro-valvola o vacuostato piano di lavoro zona 7 +128=Problema su elettro-valvola o vacuostato piano di lavoro zona 8 +129=Problema su elettro-valvola o vacuostato piano di lavoro zona 9 +130=Problema su elettro-valvola o vacuostato piano di lavoro zona 10 +131=Problema su elettro-valvola o vacuostato piano di lavoro zona 11 +132=Problema su elettro-valvola o vacuostato piano di lavoro zona 12 +133=Problema su elettro-valvola o vacuostato piano di lavoro zona 13 +134=Problema su elettro-valvola o vacuostato piano di lavoro zona 14 +135=MESSAGGIO LIBERO +136=MESSAGGIO LIBERO +137=MESSAGGIO LIBERO +138=Accendere tastiera +139=Batteria quasi scarica: sostituirla quanto prima +140=MESSAGGIO LIBERO +141=MESSAGGIO LIBERO +142=Problema su elettro-valvola o sensore riferimento di zero laterale banco 1 +143=Problema su elettro-valvola o sensore riferimento di zero laterale banco 2 +144=Problema su elettro-valvola o sensore riferimento di zero laterale banco 3 +145=Problema su elettro-valvola o sensore riferimento di zero laterale banco 4 +146=Problema su elettro-valvola o sensore riferimento di zero laterale banco 5 +147=Problema su elettro-valvola o sensore riferimento di zero laterale banco 6 +148=Problema su elettro-valvola o sensore riferimento di zero laterale banco 7 +149=Problema su elettro-valvola o sensore riferimento di zero frontale +150=MESSAGGIO LIBERO +151=Difetto bloccaggio utensile su Elettromandrino +152=MESSAGGIO LIBERO +153=Utensile presente su elettromandrino con E80001=0 +154=MESSAGGIO LIBERO +155=Difetto sbloccaggio utensile su Elettromandrino +156=MESSAGGIO LIBERO +157=MESSAGGIO LIBERO +158=MESSAGGIO LIBERO +159=Pistone sbloccaggio utensile elettromandrino non a riposo +160=MESSAGGIO LIBERO +161=MESSAGGIO LIBERO +162=MESSAGGIO LIBERO +163=MESSAGGIO LIBERO +164=MESSAGGIO LIBERO +165=MESSAGGIO LIBERO +166=MESSAGGIO LIBERO +167=MESSAGGIO LIBERO +168=MESSAGGIO LIBERO +200=Difetto su uno o più moduli EtherCAT: riavviare la macchina +201=Function Block Safety in errore - discrepanza segnali ingresso +202=Difetto di comunicazione moduli Safety +203=Difetto uscite Safety +204=Modo service ON + +[CNC] +N1 Carattere sconosciuto o Asse non riconosciuto dal sistema +N2 Funzione G sconosciuta dal sistema o assenza di un argomento obbligatorio dopo la G +N3 Argomento di una funzione G mal posizionato nel blocco +N4 Opzione non valida o parametro incoerente con l'opzione +N5 Opzione programmazione geometrica non abilitata +N6 Opzione interpolazione polinomiale assente +N7 Spostamenti paralleli agli assi inclinati +N8 No. correttore utensile troppo grande +N9 Troppi blocchi non eseguibili di seguito +N10 Accesso I/U PLC: scambio su bus scorretto +N11 Accesso I/U PLC: iniz bus scorretta o scambio inibito +N12 Accesso I/U PLC: parametro rack scorretto +N13 Accesso I/U PLC: scheda inesistente +N14 Assenza opzione piano inclinato +N15 Configurazione linea non valida +N16 Errore nella attivazione RTCP +N17 Fine blocco in un commento +N18 Errore d'asservimento: P50 troppo basso +N19 RAZ RAM al prossimo avviamento +N20 Manca M02 a fine programma +N21 Incoerenza della definizione del grezzo in 3D +N22 Programma di pezzi attuale corrotto. +N24 Errore nella dichiarazione di un piano inclinato +N25 Numero sottoprogramma o blocco inesistente +N26 Troppi annidamenti di sotto programmi +N27 Attivazione o disattivazione della correzione raggio +N28 Errore di sintassi in VTC o nella definizione del raggio +N29 Nessuna gamma programmata in VTC +N30 Rilevamento errore di linea +N31 Modo PPR o PPL impossibile con il protocollo di linea selezionato +N32 Difetto POM - Asse gia' sul fine corsa +N33 Canali in attesa di sincronizzazione +N34 Raggiunto il raggio minimo in interpolazione G21 +N35 Numero di blocco non trovato in RNS +N36 Memoria programma pezzo satura +N37 Velocita' max superata in filettatura +N38 Comando mandrino gia' programmato in un altro canale +N39 Errore sincronizzazione assi +N40 Inseguimento troppo grande asse 0 +N41 Inseguimento troppo grande asse 1 +N42 Inseguimento troppo grande asse 2 +N43 Inseguimento troppo grande asse 3 +N44 Inseguimento troppo grande asse 4 +N45 Inseguimento troppo grande asse 5 +N46 Inseguimento troppo grande asse 6 +N47 Inseguimento troppo grande asse 7 +N48 Inseguimento troppo grande asse 8 +N49 Inseguimento troppo grande asse 9 +N50 Inseguimento troppo grande asse 10 +N51 Inseguimento troppo grande asse 11 +N52 Inseguimento troppo grande asse 12 +N53 Inseguimento troppo grande asse 13 +N54 Inseguimento troppo grande asse 14 +N55 Inseguimento troppo grande asse 15 +N56 Inseguimento troppo grande asse 16 +N57 Inseguimento troppo grande asse 17 +N58 Inseguimento troppo grande asse 18 +N59 Inseguimento troppo grande asse 19 +N60 Inseguimento troppo grande asse 20 +N61 Inseguimento troppo grande asse 21 +N62 Inseguimento troppo grande asse 22 +N63 Inseguimento troppo grande asse 23 +N64 Inseguimento troppo grande asse 24 +N65 Inseguimento troppo grande asse 25 +N66 Inseguimento troppo grande asse 26 +N67 Inseguimento troppo grande asse 27 +N68 Inseguimento troppo grande asse 28 +N69 Inseguimento troppo grande asse 29 +N70 Inseguimento troppo grande asse 30 +N71 Inseguimento troppo grande asse 31 +N72 Programmazione relativa dopo un blocco incompleto +N75 Passaggio da G20 a G21 o G22 +N76 In G21: Programma di un ciclo di tornitura o di fresatura +N77 Tipo di utensile incompatibile con la fase di lavoro +N78 Errore di sintassi nella programmazione di una sincronizzazione canali +N79 Configurazione TANDEM non valida +N80 Azionamento non in Halt +N91 No parametro sconosciuto +N92 Funzione senza segno associata ad un parametro negativo +N93 Errore nella dichiarazione di un param. o nell' espressione di testo +N94 Operazione non ammessa di un'espressione parametrica +N95 Tentativo di scrittura di un param. esterno di ingresso +N96 Blocco precedente la dichiarazione di un paramametro esterno incompleto +N97 Modifica impossibile di un parametro in G76 +N98 Scrittura di un canale di una operazione dinamica gia' utilizzata da un altro canale +N99 Errore riscontrato con la funzione N/M AUTO +N101 PGP: Dati insufficienti nella programmazione di un cerchio +N102 PGP: programmazione di una retta con angolo {EA} e una coordinata X,Y O Z +N106 In G2 G3 programmazione 3" terzo asse senza opzione elicoidale +N107 PGP: programmazione di un cerchio con raggio e pt. d'arrivo +N110 PGP: errore di sintassi nel primo dei 2 blocchi +N111 PGP: errore di sintassi nel secondo blocco +N112 PGP: Intersezione retta-retta +N113 PGP: i valori programmati nei 2 blocchi non consentono di determinare una intersezione o una tangente +N114 PGP: punti d'intersezione o tangenza non determinati da ET+ ET- ES+ ES- +N121 PGP: errore di sintassi negli ultimi 3 blocchi +N122 PGP: i primi 2 blocchi sono delle rette non secanti +N123 PGP: i dati prog. nei 3 blocchi non consentono di calcolare i punti di tangenza +N124 PGP: punti di tangenza secondo o terzo blocco non precisati da ET+ o ET- +N130 Spostamento nullo nel primo dei 2 blocchi uniti da raccordo o smusso +N131 Prog. raccordo o smusso in un blocco con M0 M1 o M2 +N135 Uno smusso puo' unire solo due rette +N136 Piu' di 2 blocchi senza movimento tra 2 elementi geometrici il cui punti di intersezione o di tangenza e' da calcolare +N137 Cambio piano d'interpolazione quando il blocco non e' convalidato +N138 Cambio piano d'interpolazione non in G40 +N139 Prog. nello stesso blocco di due assi paralleli portati +N140 Errore di programmazione in correzione di raggio +N141 Assi paralleli portati : programmazione di un cerchio +N143 Annullamento o convalida del fattore di scala in correz. raggio +N144 Spostamento di un asse quantificato diverso dall'incremento +N145 G29 valore assoluto > 1 mm +N146 Lavorazione nello spazio G29 e G43 +N148 Numero di assi programmati superiore al max. consentito +N149 Raggio utensile troppo grande rispetto alla traiettoria programmata +N150 Fine corsa asse X +N151 Fine corsa asse Y +N152 Fine corsa asse Z +N153 Fine corsa asse U +N154 Fine corsa asse V +N155 Fine corsa asse W +N156 Fine corsa asse A +N157 Fine corsa asse B +N158 Fine corsa asse C +N159 Programmazione di un asse la cui POM non e' stata fatta +N160 Errore di POM asse slave +N161 Errore di POM asse sinchro +N190 Troppi livelli di annidamento +N191 Sintassi errata in Programmazione Strutturata +N192 Parola chiave non ammessa o riconosciuta nel contesto del programma +N193 Errore di strutturazione +N195 Stack programma saturo +N196 Errore nella dichiarazione degli indici delle tabelle +N197 Utilizzazione di un simbolo non dichiarato in VAR +N198 Errore di sintassi nella dichiarazione del simbolo di una variabile +N199 Sintassi errata nella dichiarazione delle variabili +N200 Difetto di sporcizia o di complementarità volantino 0 +N201 Difetto di sporcizia o di complementarità volantino 1 +N202 Difetto di sporcizia o di complementarità volantino 2 +N203 Difetto di sporcizia o di complementarità volantino 3 +N210 Difetto misura o anomalia seriale asse 0 +N211 Difetto misura o anomalia seriale asse 1 +N212 Difetto misura o anomalia seriale asse 2 +N213 Difetto misura o anomalia seriale asse 3 +N214 Difetto misura o anomalia seriale asse 4 +N215 Difetto misura o anomalia seriale asse 5 +N216 Difetto misura o anomalia seriale asse 6 +N217 Difetto misura o anomalia seriale asse 7 +N218 Difetto misura o anomalia seriale asse 8 +N219 Difetto misura o anomalia seriale asse 9 +N220 Difetto misura o anomalia seriale asse 10 +N221 Difetto misura o anomalia seriale asse 11 +N222 Difetto misura o anomalia seriale asse 12 +N223 Difetto misura o anomalia seriale asse 13 +N224 Difetto misura o anomalia seriale asse 14 +N225 Difetto misura o anomalia seriale asse 15 +N226 Difetto misura o anomalia seriale asse 16 +N227 Difetto misura o anomalia seriale asse 17 +N228 Difetto misura o anomalia seriale asse 18 +N229 Difetto misura o anomalia seriale asse 19 +N230 Difetto misura o anomalia seriale asse 20 +N231 Difetto misura o anomalia seriale asse 21 +N232 Difetto misura o anomalia seriale asse 22 +N233 Difetto misura o anomalia seriale asse 23 +N234 Difetto misura o anomalia seriale asse 24 +N235 Difetto misura o anomalia seriale asse 25 +N236 Difetto misura o anomalia seriale asse 26 +N237 Difetto misura o anomalia seriale asse 27 +N238 Difetto misura o anomalia seriale asse 28 +N239 Difetto misura o anomalia seriale asse 29 +N240 Difetto misura o anomalia seriale asse 30 +N241 Difetto misura o anomalia seriale asse 31 +N245 Difetto su un asservimento digitale +N246 Segnalazione non corretta del riferimento POM +N247 Parametro non corretto azionamento DISC NT +N248 Azionamento asse o mandrino digitale in allarme +N249 Errore di comunicazione tra CN e PLC +N250 PERSOchip non valido +N251 Dati PERSOChip non conformi +N252 File licenza non valido +N253 Annidamento di sottoprogramma chiamato da funzioni M vietato +N260 Memoria di lavoro occupata +N261 Numero di programma troppo grande +N262 Numero di NU non compreso in quelli autorizzati +N263 Esecuzione impossibile. Modo test o grafico obbligatori dopo il primo caricamento o dopo modifica +N264 Quota non programmata in un piano di contornatura +N265 Manca il primo blocco di posizionamento,la definizione del profilo deve iniziare in G0 o G1 +N266 Zona memoria insufficiente +N267 Carattere non ammesso nella sintassi della tasca +N268 Blocco di programmazione della tasca incompleto o con delle informazioni non ammesse +N269 Blocco di contornatura incompleto +N270 Definizione di tasca mancante o incompleta +N271 Direzione utensile non perpendicolare al piano di contornatura +N272 Utensile non compatibile con i dati tecnologici della tasca +N273 Cambio del piano di contornatura tra la definizione di tasca a la lavorazione +N274 Due definizioni di tasche annidate +N275 NU 0 programmata con G59 +N276 Profondita' di tasca nulla +N277 In definizione di tasca le coordinate del punto di inizio e di fine sono incomplete +N278 Il senso di rotazione del mandrino e' incompatibile con quello richiesto nella definizione della tasca +N279 Funzione G non ammessa in un blocco di programmazione di tasca +N280 Primo blocco del profilo incompleto +N281 Discontinuita' in uno dei profili descritti +N282 Parametri di definizione tasca errati +N283 Il profilo esterno deve essere unico e dichiarato +N284 Errata definizione di un profilo +N285 Troppi profili +N286 Valore di passata troppo grande rispetto al diametro dell' utensile +N287 Valore di passata troppo piccola rispetto alle dimensioni +N288 Avvicinamento per finitura con un angolo rientrante o in una zona non sgrossata +N289 Diametro utensile troppo grande +N290 Errore interno +N291 Avvicinamento per finitura fuori dal profilo +N292 Doppio posizionamento all'inizio d'un profilo +N293 Presenza di un punto di fine sgrossatura in spianatura +N300 Asse 0 dichiarato in P2 ed assente sul bus o difetto misura +N301 Asse 1 dichiarato in P2 ed assente sul bus o difetto misura +N302 Asse 2 dichiarato in P2 ed assente sul bus o difetto misura +N303 Asse 3 dichiarato in P2 ed assente sul bus o difetto misura +N304 Asse 4 dichiarato in P2 ed assente sul bus o difetto misura +N305 Asse 5 dichiarato in P2 ed assente sul bus o difetto misura +N306 Asse 6 dichiarato in P2 ed assente sul bus o difetto misura +N307 Asse 7 dichiarato in P2 ed assente sul bus o difetto misura +N308 Asse 8 dichiarato in P2 ed assente sul bus o difetto misura +N309 Asse 9 dichiarato in P2 ed assente sul bus o difetto misura +N310 Asse 10 dichiarato in P2 ed assente sul bus o difetto misura +N311 Asse 11 dichiarato in P2 ed assente sul bus o difetto misura +N312 Asse 12 dichiarato in P2 ed assente sul bus o difetto misura +N313 Asse 13 dichiarato in P2 ed assente sul bus o difetto misura +N314 Asse 14 dichiarato in P2 ed assente sul bus o difetto misura +N315 Asse 15 dichiarato in P2 ed assente sul bus o difetto misura +N316 Asse 16 dichiarato in P2 ed assente sul bus o difetto misura +N317 Asse 17 dichiarato in P2 ed assente sul bus o difetto misura +N318 Asse 18 dichiarato in P2 ed assente sul bus o difetto misura +N319 Asse 19 dichiarato in P2 ed assente sul bus o difetto misura +N320 Asse 20 dichiarato in P2 ed assente sul bus o difetto misura +N321 Asse 21 dichiarato in P2 ed assente sul bus o difetto misura +N322 Asse 22 dichiarato in P2 ed assente sul bus o difetto misura +N323 Asse 23 dichiarato in P2 ed assente sul bus o difetto misura +N324 Asse 24 dichiarato in P2 ed assente sul bus o difetto misura +N325 Asse 25 dichiarato in P2 ed assente sul bus o difetto misura +N326 Asse 26 dichiarato in P2 ed assente sul bus o difetto misura +N327 Asse 27 dichiarato in P2 ed assente sul bus o difetto misura +N328 Asse 28 dichiarato in P2 ed assente sul bus o difetto misura +N329 Asse 29 dichiarato in P2 ed assente sul bus o difetto misura +N330 Asse 30 dichiarato in P2 ed assente sul bus o difetto misura +N331 Asse 31 dichiarato in P2 ed assente sul bus o difetto misura +N400 Caricamento Opzione din in C: Taglia del codice USER troppo grande +N401 Caricamento Opzione din in C: Errore di formato +N402 Caricamento Opzione din in C: Errore di checksum +N403 Il sistema ha una memoria insufficiente per accettare degli Opzione din in C +N404 Caricamento Opzione din in C: Open error +N405 Caricamento Opzione din in C: Read error +N406 Caricamento Opzione din in C: Close error +N407 Caricamento Opzione din in C: L'indice e' vuoto +N410 Opzione din in C: Numero di parametri passati non conformi +N411 Opzione din in C: Errore USER durante la funzione INIT: ritorno negativo +N413 Opzione dinamico in C non conosciuto +N414 Opzione dinamico in C senza MAIN +N420 Opzione din in C: Errore USER durante la funzione QUIT +N421 Opzione din in C: Errore USER durante la funzione QUIT: ritorno negativo +N423 Opzione din in C: Posto della funzione in C non valido +N424 Errore exception unità virgola mobile +900=Numero utensile non valido M6T +901=Numero utensile caricato non ok +902=Numero utensile su elettromandrino non valido E80001 +903=Sensore POM B elettromandrino non ok +904=Sensore POM C elettromandrino non ok +905=Sensore POM B lama non ok +906=Sensore POM C lama non ok +907=MESSAGGIO LIBERO +908=MESSAGGIO LIBERO +909=MESSAGGIO LIBERO +910=MESSAGGIO LIBERO +911=MESSAGGIO LIBERO +912=MESSAGGIO LIBERO +913=MESSAGGIO LIBERO +914=MESSAGGIO LIBERO +915=MESSAGGIO LIBERO +916=Definire numero mandrino ET.. (1=Lama 2=Elettromandrino) +917=MESSAGGIO LIBERO +918=MESSAGGIO LIBERO +919=MESSAGGIO LIBERO +920=MESSAGGIO LIBERO +921=MESSAGGIO LIBERO +922=MESSAGGIO LIBERO +923=MESSAGGIO LIBERO +924=Offset X Lama non allineato tra MACCHINA e CADCAM +925=Offset Y Lama non allineato tra MACCHINA e CADCAM +926=Offset Z Lama non allineato tra MACCHINA e CADCAM +927=Pivot Z Lama non allineato tra MACCHINA e CADCAM +928=Pivot C Lama non allineato tra MACCHINA e CADCAM +929=Offset X Fresa non allineato tra MACCHINA e CADCAM +930=Offset Y Fresa non allineato tra MACCHINA e CADCAM +931=Offset Z Fresa non allineato tra MACCHINA e CADCAM +932=Pivot Z Fresa non allineato tra MACCHINA e CADCAM +933=Programmazione X-U-W-Z obbligatoria con G102EH.. diverso da zero +934=MESSAGGIO LIBERO +935=MESSAGGIO LIBERO +936=MESSAGGIO LIBERO +937=MESSAGGIO LIBERO +938=MESSAGGIO LIBERO +939=MESSAGGIO LIBERO +1050=Nessuna comunicazione con il CN +1206=Assi in movimento +1207=Programma in esecuzione +1604=Programma in esecuzione +2001=Il sistema Flexium non è stato arrestato normalmente. Alcuni programmi non sono attuali. Controllare i programmi nelle pagine di programmazione pagine. +2007=Il sistema Flexium non è stato arrestato correttamente. I vecchi file Zona 0 vengono trasferiti al NCK +5000=Nessuna comunicazione con Flexium RTS + +[INPUT] +1=MACCHINA IN POTENZA +2=TERMICI MOTORI +3=TELERUTTORE MOTORE FRESA INSERITO +4=DRIVE OK MOTORE CUFFIA ASPIRAZIONE PORTALE +5=DRIVE OK MOTORE CUFFIA ASPIRAZIONE FRESA +6=SONDA TERMICA - RESISTENZA FRENATURA INVERTER LAMA +7=DRIVE OK MOTORE CUFFIA ASPIRAZIONE LAMA +8=SENSORE CUFFIA ASPIRAZIONE ALTA PORTALE +9=SENSORE CUFFIA ASPIRAZIONE BASSA PORTALE +10=SELEZIONE MANUTENZIONE MACCHINA CE +11=SENSORE CUFFIA ASPIRAZIONE FRESA ALTA +12=SENSORE CUFFIA ASPIRAZIONE FRESA BASSA +13=SENSORE CUFFIA ASPIRAZIONE LAMA ALTA +14=SENSORE CUFFIA ASPIRAZIONE LAMA BASSA +15=SENSORE PROTEZIONE CAMBIO UTENSILE ROTATIVO APERTO +16=INGRESSO A DISPOSIZIONE +17=INGRESSO A DISPOSIZIONE +18=INGRESSO A DISPOSIZIONE +19=INGRESSO A DISPOSIZIONE +20=INGRESSO A DISPOSIZIONE +21=INGRESSO A DISPOSIZIONE +22=INGRESSO A DISPOSIZIONE +23=SENSORE CAMBIO UTENSILE CATENA AVANTI +24=SENSORE CAMBIO UTENSILE CATENA INDIETRO +25=SENSORE SONDA TERMICA MOTORE FRESA +26=SENSORE SONDA TERMICA MOTORE LAMA +27=INGRESSO A DISPOSIZIONE +28=SENSORE CAMBIO UTENSILE LATERALE AVANTI +29=SENSORE CAMBIO UTENSILE LATERALE INDIETRO +30=REFRIGERATORE FRESA E LAMA OK +31=FLUSSOSTATO TESTA FRESA +32=PULSANTE RESET ALLARMI +33=PRESSOSTATO LUBRIFICAZIONE ASSI +34=PRESSOSTATO ARIA COMPRESSA +35=SENSORE MINIMO LIVELLO GRASSO +36=SENSORE MINIMO LIVELLO OLIO SEGA +37=INGRESSO A DISPOSIZIONE +38=SOVRATEMPERATURA ARMADIO SINISTRO +39=SENSORE PISTONE SBLOCCATO CONO A RIPOSO +40=PRE ALLARME ZONA DI SICUREZZA +41=FLUSSOSTATO TESTA LAMA +42=TELERUTTORE MOTORE LAMA INSERITO +43=SENSORE CAMBIO UTENSILE SOTTO TRAVE AVANTI +44=SENSORE CAMBIO UTENSILE SOTTO TRAVE INDIETRO +45=ALLARME ZONA DI SICUREZZA +46=INGRESSO A DISPOSIZIONE +47=UPS BATTERIA OK +48=UPS USCITA IN SOVRACORRENTE +49=SENSORE ARRESTO FRONTALE BASSO +50=SENSORE ARRESTO LATERALE BANCO 1 BASSO +51=SENSORE ARRESTO LATERALE BANCO 2 BASSO +52=SENSORE ARRESTO LATERALE BANCO 3 BASSO +53=SENSORE ARRESTO LATERALE BANCO 4 BASSO +54=SENSORE ARRESTO LATERALE BANCO 5 BASSO +55=SENSORE ARRESTO LATERALE BANCO 6 BASSO +56=INGRESSO A DISPOSIZIONE +57=INGRESSO A DISPOSIZIONE +58=SELETTORE ATTIVAZIONE TAPPETO SCARICO SFRIDI +59=INGRESSO A DISPOSIZIONE +60=INGRESSO A DISPOSIZIONE +61=INGRESSO A DISPOSIZIONE +62=INGRESSO A DISPOSIZIONE +63=SOVRATEMPERATURA ARMADIO ELETTRICO DESTRO +64=INGRESSO A DISPOSIZIONE +65=PRENOTAZONE VUOTO ZONA 1 +66=PRENOTAZONE VUOTO ZONA 2 +67=PRENOTAZONE VUOTO ZONA 3 +68=PRENOTAZONE VUOTO ZONA 4 +69=PRENOTAZONE VUOTO ZONA 5 +70=PRENOTAZONE VUOTO ZONA 6 +71=PRENOTAZONE VUOTO ZONA 7 +72=PRENOTAZONE VUOTO ZONA 8 +73=PRENOTAZONE VUOTO ZONA 9 +74=PRENOTAZONE VUOTO ZONA 10 +75=PRENOTAZONE VUOTO ZONA 11 +76=PRENOTAZONE VUOTO ZONA 12 +77=INGRESSO A DISPOSIZIONE +78=INGRESSO A DISPOSIZIONE +79=INGRESSO A DISPOSIZIONE +80=INGRESSO A DISPOSIZIONE +81=VACUOSTATO ZONA 1 +82=VACUOSTATO ZONA 2 +83=VACUOSTATO ZONA 3 +84=VACUOSTATO ZONA 4 +85=VACUOSTATO ZONA 5 +86=VACUOSTATO ZONA 6 +87=VACUOSTATO ZONA 7 +88=VACUOSTATO ZONA 8 +89=VACUOSTATO ZONA 9 +90=VACUOSTATO ZONA 10 +91=VACUOSTATO ZONA 11 +92=VACUOSTATO ZONA 12 +93=INGRESSO A DISPOSIZIONE +94=INGRESSO A DISPOSIZIONE +95=INGRESSO A DISPOSIZIONE +96=INGRESSO A DISPOSIZIONE + +[OUTPUT] +1=COMANDO ELETTRO-VALVOLA APERTURA ARIA SECCA +2=MODALITA' REG. CE CONSENSO REGOLAZIONE CE +3=SELEZIONE POM ASSE C1 TESTA +4=SELEZIONE POM ASSE C2 LAMA +5=ELETTRO-VALVOLA APERTURA PROTEZIONE CAMBIO UTENSILE ROTATIVO +6=ELETTRO-VALVOLA CHIUSURA PROTEZIONE CAMBIO UTENSILE ROTATIVO +7=CONTAORE +8=INSERIMENTO TELERUTTORE FRESA +9=ROTAZIONE TAPPETO SFRIDI +10=MOTORE POMPA LUBRIFICAZIONE ASSI +11=ELETTRO-VALVOLA LUBRIFICAZIONE CATENA +12=USCITA A DISPOSIZIONE +13=LAMPADA MESSAGGI +14=USCITA A DISPOSIZIONE +15=USCITA A DISPOSIZIONE +16=INSERIMENTO TELERUTTORE LAMA +17=ELETTRO-VALVOLA BLOCCO UTENSILE +18=ELETTRO-VALVOLA SBLOCCO UTENSILE +19=USCITA A DISPOSIZIONE +20=ELETTRO-VALVOLA CAMBIO LATERALE AVANTI +21=ELETTRO-VALVOLA CAMBIO LATERALE INDIETRO +22=ELETTRO-VALVOLA CAMBIO CATENA AVANTI +23=ELETTRO-VALVOLA CAMBIO CATENA INDIETRO +24=ELETTRO-VALVOLA SOFFIO PULIZIA CATENA +25=ELETTRO-VALVOLA SALITA ARRESTO FRONTALE DX +26=ELETTRO-VALVOLA SALITA ARRESTO LATERALE BANCO 1 +27=ELETTRO-VALVOLA SALITA ARRESTO LATERALE BANCO 2 +28=ELETTRO-VALVOLA SALITA ARRESTO LATERALE BANCO 3 +29=ELETTRO-VALVOLA SALITA ARRESTO LATERALE BANCO 4 +30=ELETTRO-VALVOLA SALITA ARRESTO LATERALE BANCO 5 +31=ELETTRO-VALVOLA SALITA ARRESTO LATERALE BANCO 6 +32=ELETTRO-VALVOLA SALITA ARRESTO LATERALE BANCO 7 +33=ELETTRO-VALVOLA SOFFIO UTENSILE TESTA FRESA +34=ELETTRO-VALVOLA CAMBIO SOTTO TRAVE AVANTI +35=ELETTRO-VALVOLA CAMBIO SOTTO TRAVE INDIETRO +36=ELETTRO-VALVOLA SOFFIO PULIZIA ASSI T1 FRESA +37=ELETTRO-VALVOLA SOFFIO FRONTALE +38=ELETTRO-VALVOLA SOFFIO LATERALE +39=ABILITA POMPA DEL VUOTO +40=ABILITA PRESSIONE POMPA DEL VUOTO +41=ELETTRO-VALVOLA APERTURA VUOTO ZONA 1 +42=ELETTRO-VALVOLA APERTURA VUOTO ZONA 2 +43=ELETTRO-VALVOLA APERTURA VUOTO ZONA 3 +44=ELETTRO-VALVOLA APERTURA VUOTO ZONA 4 +45=ELETTRO-VALVOLA APERTURA VUOTO ZONA 5 +46=ELETTRO-VALVOLA APERTURA VUOTO ZONA 6 +47=ELETTRO-VALVOLA APERTURA VUOTO ZONA 7 +48=ELETTRO-VALVOLA APERTURA VUOTO ZONA 8 +49=ELETTRO-VALVOLA APERTURA VUOTO ZONA 9 +50=ELETTRO-VALVOLA APERTURA VUOTO ZONA 10 +51=ELETTRO-VALVOLA APERTURA VUOTO ZONA 11 +52=ELETTRO-VALVOLA APERTURA VUOTO ZONA 12 +53=ELETTRO-VALVOLA APERTURA VUOTO ZONA 13 +54=ELETTRO-VALVOLA APERTURA VUOTO ZONA 14 +55=USCITA A DISPOSIZIONE +56=ELETTRO-VALVOLA SOFFIO PULIZIA ASSE T2 LAMA +57=ACCENSIONE VENTILATORI +58=SALITA CUFFIA ASPIRAZIONE PORTALE +59=DISCESA CUFFIA ASPIRAZIONE PORTALE +60=VELOCE CUFFIA ASPIRAZIONE PORTALE +61=SBLOCCO FRENO CUFFIA ASPIRAZIONE PORTALE +62=SALITA CUFFIA ASPIRAZIONE FRESA +63=DISCESA CUFFIA ASPIRAZIONE FRESA +64=VELOCE CUFFIA ASPIRAZIONE FRESA +65=FRENO CUFFIA ASPIRAZIONE FRESA +66=SALITA CUFFIA ASPIRAZIONE LAMA +67=DISCESA CUFFIA ASPIRAZIONE LAMA +68=VELOCE CUFFIA ASPIRAZIONE LAMA +69=FRENO CUFFIA ASPIRAZIONE LAMA +70=ELETTRO-VALVOLA CARICO SERBATOIO ARIA PULIZIA CABINA DX +71=ELETTRO-VALVOLA SOFFIO PULIZIA CABINA DX +72=ELETTRO-VALVOLA CARICO SERBATOIO ARIA PULIZIA CABINA SX +73=ELETTRO-VALVOLA SOFFIO PULIZIA CABINA SX +74=ELETTRO-VALVOLA SOFFIO PULIZIA TELECAMERE +75=ELETTRO-VALVOLA APERTURA ASPIRAZIONE FRESA +76=ELETTRO-VALVOLA APERTURA ASPIRAZIONE LAMA +77=ELETTRO-VALVOLA APERTURA ASPIRAZIONE PORTALE +78=ELETTRO-VALVOLA APERTURA ASPIRAZIONE PULIZIA PORTALE +79=CONSENSO MACCHINA IN PARCHEGGIO +80=CONSENSO RIFERIMENTI BASSI +81=CONSENSO ROTAZIONE TAPPETO +82=CONSENSO MACCHINA IN POTENZA +83=CONSENSO BARRIERE DI SICUREZZA INTERVENUTE +84=USCITA A DISPOSIZIONE +85=USCITA A DISPOSIZIONE +86=USCITA A DISPOSIZIONE +87=USCITA A DISPOSIZIONE +88=USCITA A DISPOSIZIONE +89=USCITA A DISPOSIZIONE +90=USCITA A DISPOSIZIONE +91=USCITA A DISPOSIZIONE +92=USCITA A DISPOSIZIONE +93=USCITA A DISPOSIZIONE +94=USCITA A DISPOSIZIONE +95=USCITA A DISPOSIZIONE +96=USCITA A DISPOSIZIONE diff --git a/Scripts/ExitMach.lua b/Scripts/ExitMach.lua new file mode 100644 index 0000000..18f86ad --- /dev/null +++ b/Scripts/ExitMach.lua @@ -0,0 +1,36 @@ +-- 2018/11/21 17:30:00 +-- Machining Exit for Essetre-FAST machine + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-------------------------------------------------------------------------------- +-- *** Uscita da Lavorazioni *** + +-- Nascondo il pezzo così marcato e le geometrie aggiunte, visualizzo il Box +local function ProcessPart( PartId) + -- visualizzo il Box + EgtSetStatus( EgtGetFirstNameInGroup( PartId, 'Box') or GDB_ID.NULL, GDB_ST.ON) +end + +-- Disabilito segnalazione modifica progetto +local bEnMod = EgtGetEnableModified() +EgtDisableModified() + +-- Processo i pezzi nella radice (già chiusi tutti i gruppi di lavoro) +local PartId = EgtGetFirstPart() +while PartId do + ProcessPart( PartId) + PartId = EgtGetNextPart( PartId) +end + +EgtZoom( SCE_ZM.ALL, false) + +-- Ripristino segnalazione modifica progetto +if bEnMod then + EgtEnableModified() +end + +MACH.ERR = 0 diff --git a/Scripts/InitMach.lua b/Scripts/InitMach.lua new file mode 100644 index 0000000..6ac761b --- /dev/null +++ b/Scripts/InitMach.lua @@ -0,0 +1,44 @@ +-- 2018/11/21 16:30:00 +-- Machining Init for Essetre-FAST machine + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-------------------------------------------------------------------------------- +-- *** Ingresso in Lavorazioni *** + +-- Rendo visibile il pezzo e le geometrie aggiunte, nascondo il Box +local function ProcessPart( PartId) + -- nascondo il Box + EgtSetStatus( EgtGetFirstNameInGroup( PartId, 'Box') or GDB_ID.NULL, GDB_ST.OFF) +end + +-- Disabilito segnalazione modifica progetto +local bEnMod = EgtGetEnableModified() +EgtDisableModified() + +-- Processo i pezzi nella radice +local PartId = EgtGetFirstPart() +while PartId do + ProcessPart( PartId) + PartId = EgtGetNextPart( PartId) +end + +-- Processo i pezzi già nei gruppi di lavoro (quando appena lanciata Process) +local GhostId = EgtGetFirstGhostPart() +while GhostId do + local PartId = EgtGetInfo( GhostId, GDB_SI.SOURCE, 'i') + if PartId then + ProcessPart( PartId) + end + GhostId = EgtGetNextGhostPart( GhostId) +end + +-- Ripristino segnalazione modifica progetto +if bEnMod then + EgtEnableModified() +end + +MACH.ERR = 0 diff --git a/Scripts/SetUp.lua b/Scripts/SetUp.lua new file mode 100644 index 0000000..a2363a8 --- /dev/null +++ b/Scripts/SetUp.lua @@ -0,0 +1,200 @@ +-- 2023/04/24 +-- Gestione attrezzaggio per Essetre-90480031 + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Tavola di passaggio valori +local STU = {} +STU.TUUID = "" +STU.TCPOS = "" +STU.HEAD = "" +STU.GROUP = "" +STU.POS = "" +STU.EXIT = 0 +STU.INDEX = 0 +STU.HEAD1 = "" +STU.HEAD2 = "" +STU.ISVALID = false +STU.ERR = 0 +_G.STU = STU + +local INVALIDPOS = "" +local POS = "Pos" + +-- Geom Set +local GS = {} + +-- Configurazione posizioni +local PositionTable={{Pos = "Pos1", TcPos = "T10", Head = "H1", Group = "G1"}, + {Pos = "Pos2", TcPos = "T11", Head = "H1", Group = "G1"}, + {Pos = "Pos3", TcPos = "T12", Head = "H1", Group = "G1"}, + {Pos = "Pos4", TcPos = "T13", Head = "H1", Group = "G1"}, + {Pos = "Pos5", TcPos = "T14", Head = "H1", Group = "G1"}, + {Pos = "Pos6", TcPos = "T15", Head = "H1", Group = "G1"}, + {Pos = "Pos7", TcPos = "T16", Head = "H1", Group = "G1"}, + {Pos = "Pos8", TcPos = "T17", Head = "H1", Group = "G1"}, + {Pos = "Pos9", TcPos = "T18", Head = "H1", Group = "G1"}, + {Pos = "Pos10", TcPos = "T42", Head = "H2", Group = "G2"}, + {Pos = "Pos11", TcPos = "T101", Head = "H3", Group = "G2"}, + {Pos = "Pos12", TcPos = "T201", Head = "H1", Group = "G2"}} + +local UsePositionHead = true + +local function IsInGeomSet( ToolHead, PosHead) + for GsIndex = 1, #GS do + local bToolHead = false + local bPosHead = false + for HIndex = 1, #GS[GsIndex] do + if GS[GsIndex][HIndex] == ToolHead then + bToolHead = true + elseif GS[GsIndex][HIndex] == PosHead then + bPosHead = true + end + if bToolHead and bPosHead then + return true + end + end + if bToolHead and bPosHead then + return true + end + end + return false +end + +function STU.IsCompatibleHeads() + STU.ISVALID = false + if IsInGeomSet(STU.HEAD1, STU.HEAD2) then + STU.ISVALID = true + else + STU.ISVALID = false + end +end + +function STU.GetValidHeadExitForPos() + -- se TUUID non valido restituisco errore + local ToolName = EgtTdbGetToolFromUUID( STU.TUUID) + if ToolName == nill then + STU.ERR = 1 + return + end + EgtTdbSetCurrTool( ToolName) + local CurrToolHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD) + STU.EXIT = EgtTdbGetCurrToolParam( MCH_TP.EXIT) + -- recupero testa predefinita per la posizione corrente + local CurrPosHead + for i = 1, #PositionTable do + if PositionTable[i].TcPos == STU.TCPOS then + CurrPosHead = PositionTable[i].Head + break + end + end + -- verifico se la testa è quella della posizione predefinita + if CurrPosHead == CurrToolHead then + STU.HEAD = CurrToolHead + STU.ERR = 0 + return + -- verifico se la testa è compatibile con quella della posizione predefinita + elseif IsInGeomSet( CurrToolHead, CurrPosHead) then + if UsePositionHead then + STU.HEAD = CurrPosHead + STU.ERR = 0 + return + else + STU.HEAD = CurrToolHead + STU.ERR = 0 + return + end + -- la testa non è compatibile con quella della posizione predefinita + else + STU.HEAD = INVALIDPOS + STU.ERR = 0 + return + end +end + +function STU.IsValidTcPosFromHead() + STU.ISVALID = false + for i = 1, #PositionTable do + if PositionTable[i].TcPos == STU.TCPOS then + if PositionTable[i].Head == STU.HEAD then + STU.ISVALID = true + STU.ERR = 0 + return + elseif IsInGeomSet(PositionTable[i].Head, STU.HEAD) then + STU.ISVALID = true + STU.ERR = 0 + return + end + STU.ISVALID = false + STU.ERR = 0 + return + end + end +end + +function STU.GetTcPosHeadGroupFromPos() + for i = 1, #PositionTable do + if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then + STU.TCPOS = PositionTable[i].TcPos + STU.HEAD = PositionTable[i].Head + STU.GROUP = PositionTable[i].Group + STU.ERR = 0 + return + end + end + STU.TCPOS = INVALIDPOS + STU.HEAD = INVALIDPOS + STU.GROUP = INVALIDPOS + STU.ERR = 1 +end + +function STU.GetPosFromTcPos() + for i = 1, #PositionTable do + if PositionTable[i].TcPos == STU.TCPOS then + STU.POS = PositionTable[i].Pos + STU.ERR = 0 + return + end + end + STU.POS = INVALIDPOS + STU.ERR = 1 +end + +function STU.GetGroupFromTcPos() + for i = 1, #PositionTable do + if PositionTable[i].TcPos == STU.TCPOS then + STU.GROUP = PositionTable[i].Group + STU.ERR = 0 + return + end + end + STU.GROUP = INVALIDPOS + STU.ERR = 1 +end + +function STU.GetHeadFromPos() + for i = 1, #PositionTable do + if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then + STU.HEAD = PositionTable[i].Head + STU.ERR = 0 + return + end + end + STU.HEAD = INVALIDPOS + STU.ERR = 1 +end + +function STU.GetTcPosFromPos() + for i = 1, #PositionTable do + if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then + STU.TCPOS = PositionTable[i].TcPos + STU.ERR = 0 + return + end + end + STU.TCPOS = INVALIDPOS + STU.ERR = 1 +end diff --git a/THolders/ChainSaw.nge b/THolders/ChainSaw.nge new file mode 100644 index 0000000..7ad3b00 Binary files /dev/null and b/THolders/ChainSaw.nge differ diff --git a/THolders/MillNoTip.nge b/THolders/MillNoTip.nge new file mode 100644 index 0000000..801d306 Binary files /dev/null and b/THolders/MillNoTip.nge differ diff --git a/THolders/SawOnH2.nge b/THolders/SawOnH2.nge new file mode 100644 index 0000000..6b1bf63 Binary files /dev/null and b/THolders/SawOnH2.nge differ diff --git a/THolders/Standard.nge b/THolders/Standard.nge new file mode 100644 index 0000000..cf86275 Binary files /dev/null and b/THolders/Standard.nge differ diff --git a/Wall/GetTs3Data.lua b/Wall/GetTs3Data.lua new file mode 100644 index 0000000..b43225d --- /dev/null +++ b/Wall/GetTs3Data.lua @@ -0,0 +1,30 @@ +-- GetTs3Data.lua by Egaltech s.r.l. 2022/04/07 +-- Recupero dati da file Ts3Data.lua di macchina + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Per test +--GTSD = {} +--GTSD.TS3PATH = 'Essetre-FAST\\Ts3Data.lua' + +local sLog = 'GetTs3Data : ' .. GTSD.TS3PATH +EgtOutLog( sLog) + +if EgtExistsFile( GTSD.TS3PATH) then + local Machine = dofile( GTSD.TS3PATH) + -- Assegno valori di interesse + Offsets = Machine.Offsets + _G.Offsets = Offsets + Trave = Machine.Trave + _G.Trave = Trave + User = Machine.User + _G.User = User +end + +-- Tutto ok +GTSD.ERR = 0 + +EgtOutLog( ' +++ GetTs3Data completed') diff --git a/Wall/MachData.ini b/Wall/MachData.ini new file mode 100644 index 0000000..76eea5b --- /dev/null +++ b/Wall/MachData.ini @@ -0,0 +1,55 @@ +; PIndex = Type, PName, Default, Description +; Type : d=double, l=length, s=string + +[1] +Name=Offsets +1= l,MIN_Y,-20580,MIN_Y +2= l,MAX_Y,0,MAX_Y +3= l,MIN_X,-6685,MIN_X +4= l,MAX_X,0,MAX_X +5= l,MIN_Z,-1570,MIN_Z +6= l,MAX_Z,0,MAX_Z +7= d,MIN_B,-135,MIN_B +8= d,MAX_B,135,MAX_B +9= d,MIN_C,-275,MIN_C +10=d,MAX_C,275,MAX_C +11=l,MIN_X2,-6685,MIN_X2 +12=l,MAX_X2,0,MAX_X2 +13=l,MIN_Z2,-1570,MIN_Z2 +14=l,MAX_Z2,0,MAX_Z2 +15=d,MIN_B2,-135,MIN_B2 +16=d,MAX_B2,135,MAX_B2 +17=d,MIN_C2,-275,MIN_C2 +18=d,MAX_C2,275,MAX_C2 +19=l,MIN_U,-6075,MIN_U +20=l,MAX_U,-770,MAX_U +21=l,MIN_W,-1110,MIN_W +22=l,MAX_W,0,MAX_W +23=l,MIN_V,0,MIN_V +24=l,MAX_V,90,MAX_V +25=d,MIN_A,-275,MIN_A +26=d,MAX_A,275,MAX_A +27=l,ZERO_X_MILL,-1293.3,ZERO_X_MILL +28=l,ZERO_Y_MILL,-1152,ZERO_Y_MILL +29=l,ZERO_Z_MILL,-992.15,ZERO_Z_MILL +30=l,PIVOT_MILL,208.0,PIVOT_MILL +31=l,ZERO_X_MILL2,-1293.3,ZERO_X_MILL2 +32=l,ZERO_Y_MILL2,-1152,ZERO_Y_MILL2 +33=l,ZERO_Z_MILL2,-992.15,ZERO_Z_MILL2 +34=l,PIVOT_MILL2,208.0,PIVOT_MILL2 +35=l,ZERO_X_SAW,-1288.05,ZERO_X_SAW +36=l,ZERO_Y_SAW,-803.45,ZERO_Y_SAW +37=l,ZERO_Z_SAW,-909.55,ZERO_Z_SAW +38=l,PIVOT_SAW,163.15,PIVOT_SAW +39=l,INTRULLI,1500,INTRULLI +40=l,DELTA_X,0,RAW_LONG_OFFSET +41=l,DELTA_Y,0,RAW_CROSS_OFFSET + +[2] +Name=Trave +1=l,XMIN,20,XMIN +2=l,XMAX,3500,XMAX +3=l,YMIN,50,YMIN +4=l,YMAX,18000,YMAX +5=l,ZMIN,1,ZMIN +6=l,ZMAX,400,ZMAX diff --git a/Wall/MachiningTypes.ini b/Wall/MachiningTypes.ini new file mode 100644 index 0000000..0fe0f30 --- /dev/null +++ b/Wall/MachiningTypes.ini @@ -0,0 +1,26 @@ +[Cut] +1=Standard + +[Drill] +1=Drill +2=Pocket + +[Milling] +1=FreeContour +2=Side +3=SideGroove +4=DtMortise +5=Mark +6=Text +7=CleanCorner60 +8=CleanCorner30 +9=SideMill +10=Gorge + +[Pocketing] +1=Pocket +2=OpenPocket +3=Mortise + +[Sawing] +1=Sawing diff --git a/Wall/WallData.lua b/Wall/WallData.lua new file mode 100644 index 0000000..a7f152b --- /dev/null +++ b/Wall/WallData.lua @@ -0,0 +1,86 @@ +-- WallData.lua by Egaltech s.r.l. 2023/04/15 +-- Raccolta dati generali per Pareti + +EgtOutLog( ' 90480030-WallData started', 1) + +-- Tabella per definizione modulo +local WallData = { + MIN_LENGTH = 100, -- lunghezza minima del grezzo + MIN_WIDTH = 100, -- larghezza minima del grezzo + MIN_HEIGHT = 10, -- altezza minima del grezzo + MAX_LENGTH = 18000, -- lunghezza massima del grezzo + MAX_WIDTH = 4900, -- larghezza massima del grezzo + MAX_HEIGHT = 400, -- altezza massima del grezzo + STD_RAW_LENGTH = 10000, -- lunghezza standard del grezzo + STD_RAW_WIDTH = 4000, -- larghezza standard del grezzo + MID_GAP = 50, -- distanza tra i pezzi + MID_SIC = 5, -- distanza di sicurezza di una lavorazione da un altro pezzo + COLL_SIC = 5, -- distanza di sicurezza per collisioni + CUT_SIC = 20, -- distanza di sicurezza per tagli + CUT_EXTRA = 0, -- affondamento extra standard per tagli di lama e fresature + CUT_EXTRA_MIN = 0, -- affondamento extra ridotto per tagli di lama e fresature + NZ_MINA = 0.5, -- componente limite in Z normale di una faccia (-30deg) + NZ_MINB = -0.4, -- componente limite in Z normale di un insieme di facce (-23deg) + DRILL_TOL = 0.5, -- tolleranza tra diametro foro e diametro punta + DRILL_VZ_MIN = 0.5, -- componente limite in Z del versore di un foro + DRILL_VX_MAX = 0.866, -- componente limite in X del versore di un foro sulle facce laterali + DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature + MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature + MAX_CLEAN_CRN30 = 60, -- massimo spessore per pulitura angolo con fresa 30deg + MAX_CLEAN_CRN60 = 150, -- massimo spessore per pulitura angolo con fresa 60deg + MILL_MAX_DEPTH_AS_MAT = true, -- massimo affondamento frese uguale ad altezza tagliente (max materiale) + RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo + SIMUL_VIEW_DIR = 3, -- direzione di vista predefinita per la simulazione (1=NW, 2=SW, 3=NE, 4=SE) + ORIG_CORNER = 'TL', -- angolo tavola per origine di battuta (BR (defualt), TR, BL, TL) + NESTING_CORNER = 'TL', -- angolo di origine del grezzo per posizionamento pezzi (BR (defualt), TR, BL, TL) + DELTA_X = 0, -- allontanamento in X dai riferimenti + DELTA_Y = 0, -- allontanamento in Y dai riferimenti + RAWPART_ROT = 180, -- rotazione del pannello grezzo rispetto alla descrizione BTL + CUT_WITH_OUTLINE = true, -- taglio delle feature con l'outline del pezzo +} + +-- Aggiornamento con dati da TechnoEssetre7 +local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-90480031.data" +local sData = EgtGetSourceDir().."\\Ts3Data.lua" +if EgtExistsFile( sTs3Data) then + EgtCopyFile( sTs3Data, sData) + local sTs3DataOld = sTs3Data..'.old' + EgtEraseFile( sTs3DataOld) + EgtRenameFile( sTs3Data, sTs3DataOld) +end +if EgtExistsFile( sData) then + local Machine = dofile( sData) + if Machine then + if Machine.Offsets then + WallData.DELTA_X = Machine.Offsets.DELTA_X or WallData.DELTA_X + WallData.DELTA_Y = Machine.Offsets.DELTA_Y or WallData.DELTA_Y + end + if Machine.Trave then + WallData.MIN_LENGTH = Machine.Trave.YMIN or WallData.MIN_LENGTH + WallData.MIN_WIDTH = Machine.Trave.XMIN or WallData.MIN_WIDTH + WallData.MIN_HEIGHT = Machine.Trave.ZMIN or WallData.MIN_HEIGHT + WallData.MAX_LENGTH = Machine.Trave.YMAX or WallData.MAX_LENGTH + WallData.MAX_WIDTH = Machine.Trave.XMAX or WallData.MAX_WIDTH + WallData.MAX_HEIGHT = Machine.Trave.ZMAX or WallData.MAX_HEIGHT + end + end +end + +------------------------------------------------------------------------------------------------------------- +local function GetOrigCorner( RefPos) + if RefPos == 1 or RefPos == 2 or RefPos == 3 then + return 'TL' + elseif RefPos == 4 or RefPos == 5 or RefPos == 6 then + return 'BL' + elseif RefPos == 7 or RefPos == 8 or RefPos == 9 then + return 'TR' + elseif RefPos == 10 or RefPos == 11 or RefPos == 12 then + return 'BR' + else + return 'TL' + end +end +WallData.GetOrigCorner = GetOrigCorner + +--------------------------------------------------------------------- +return WallData diff --git a/Wall/WallTableTemplate.ini b/Wall/WallTableTemplate.ini new file mode 100644 index 0000000..ccb02c1 --- /dev/null +++ b/Wall/WallTableTemplate.ini @@ -0,0 +1,9 @@ +-- %TABLE_NAME%.lua by Egaltech s.r.l. %DATE_TIME% +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local %TABLE_NAME% = { +} + +--------------------------------------------------------------------- +return %TABLE_NAME%