Compare commits
53 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4a0165f20e | |||
| 2669bbb301 | |||
| fa61826c29 | |||
| 07a25dc39e | |||
| e103c99b46 | |||
| e26fe308ed | |||
| ff612e302f | |||
| 6c40a59b7e | |||
| 6423653215 | |||
| df69bdac67 | |||
| 87a3d5008a | |||
| d043fb4774 | |||
| 46ebc8bb63 | |||
| 9ecd233c3a | |||
| 95d50e01e8 | |||
| 2b8466ed98 | |||
| a77d3971bf | |||
| b379196ab1 | |||
| f618f7129e | |||
| bb78093ca0 | |||
| 1395e9bbc7 | |||
| f15aa9ad5c | |||
| 0aecf75f95 | |||
| f28feedee8 | |||
| cfa32ac845 | |||
| c1c824da20 | |||
| e17178e09c | |||
| e108973e7a | |||
| fe9af6ac84 | |||
| 8f71b6f682 | |||
| 16e72bd2bb | |||
| da3c63ce19 | |||
| e7f9dd7c32 | |||
| 7daeed2971 | |||
| 41f7abd320 | |||
| c3dd8854a3 | |||
| c0211d8b82 | |||
| 9eaba55975 | |||
| 98efd054c6 | |||
| b60ab7f970 | |||
| ee205880df | |||
| 41a9ad735f | |||
| 3893e40b40 | |||
| 24a84bd2c2 | |||
| bd09a6675c | |||
| c31ebc8281 | |||
| c7e6cecd89 | |||
| e7b692adb0 | |||
| 1b018c0359 | |||
| d3c8d63db1 | |||
| ffe7a2e6bb | |||
| 408c4d1de2 | |||
| 004bb7e74d |
@@ -15,4 +15,3 @@
|
||||
/Wall/PocketingData.lua
|
||||
/Wall/SawingData.lua
|
||||
/Wall/Ts3Data.lua
|
||||
.vscode/settings.json
|
||||
|
||||
+100
-18
@@ -2,19 +2,27 @@ variables:
|
||||
VERS_MAIN: '1.0'
|
||||
MACH_NAME: ''
|
||||
MACH_NAME_TEST: ''
|
||||
MANUFACTURER: ''
|
||||
NEW_REL: ''
|
||||
NET_SHARE_X: '\\10.74.82.201\EgwTech'
|
||||
NET_SHARE_Z: '\\10.74.82.201\Artifacts'
|
||||
NET_SHARE_S: '\\10.74.82.201\Scambio'
|
||||
NET_SHARE_R: '\\10.74.82.201\EgwTech'
|
||||
NET_SHARE_H: '\\10.74.82.252\team drives'
|
||||
NET_USERQ: 'steamw\egalware'
|
||||
NET_USER_SERVICES: 'steamw\services'
|
||||
MACH_VERS: '0.0.0.0'
|
||||
TEMP_PATH: 'C:\MachinesDeploy'
|
||||
MACHINES_PATH_R: 'R:\EgtData\Machines'
|
||||
DEST_MACHINES_PATH_R: 'R:\EgtData\Machines\zTestYAML'
|
||||
MACHINES_PATH_R: 'R:\EgtData\Machines_GIT'
|
||||
DEST_MACHINES_PATH_H: 'H:'
|
||||
SRC_PATH: ''
|
||||
BASE_PATH: ''
|
||||
TEST_PATH: ''
|
||||
URL_VERSIONS_LOG: "https://liman.egalware.com/ELM.API/api/release/save"
|
||||
MACH_VERS_NUM: '0.0.0.0'
|
||||
CRITICAL_STRING: "#critical#"
|
||||
TOOLS_MACHINE_PATH: ""
|
||||
|
||||
|
||||
#Note compilazione LUA:
|
||||
# lua54 -o bin\$FileName -s $FileName: -o = output, -s = NON include i debug symbols
|
||||
@@ -38,12 +46,29 @@ variables:
|
||||
echo "-----------------------"
|
||||
echo " Copia macchina su R"
|
||||
echo "-----------------------"
|
||||
ROBOCOPY /MIR "$env:SRC_PATH" "$env:DEST_MACHINES_PATH_R\$env:MACH_NAME\" /XD "bin"
|
||||
ROBOCOPY "$env:TEST_PATH" "$env:DEST_MACHINES_PATH_R\$env:MACH_NAME_TEST\" /E /XD "bin"
|
||||
ROBOCOPY /MIR "$env:BASE_PATH" "$env:DEST_MACHINES_PATH_R\Deploy\$env:MACH_NAME\$env:MACH_VERS\" /XD "bin" /XD "$env:MACH_NAME_TEST"
|
||||
$customerPathR = $env:MACHINES_PATH_R + "\" + $env:MANUFACTURER
|
||||
ROBOCOPY /MIR "$env:SRC_PATH" "$customerPathR\$env:MACH_NAME\" /XD "bin"
|
||||
ROBOCOPY "$env:TEST_PATH" "$customerPathR\_TestMachines\$env:MACH_NAME_TEST\" /E /XD "bin"
|
||||
ROBOCOPY /MIR "$env:BASE_PATH" "$customerPathR\_Deploy\$env:MACH_NAME\$env:MACH_VERS\" /XD "bin" /XD "$env:MACH_NAME_TEST"
|
||||
SLEEP 2
|
||||
net use R: /delete
|
||||
|
||||
# helper copia script verso drive condiviso
|
||||
.ReplicaStor01: &ReplicaStor01
|
||||
- |
|
||||
net use H: /delete
|
||||
SLEEP 2
|
||||
net use H: $env:NET_SHARE_H /u:$env:NET_USER_SERVICES $SRVCS_PASSWD
|
||||
echo "-----------------------"
|
||||
echo " Copia macchina su stor01"
|
||||
echo "-----------------------"
|
||||
SLEEP 2
|
||||
$customerPathH = $env:DEST_MACHINES_PATH_H + "\" + $env:MANUFACTURER + "\test"
|
||||
$destinationPath = "$customerPathH\$env:MACH_NAME" + "\"
|
||||
ROBOCOPY "$env:BASE_PATH" "$destinationPath\" *.zip
|
||||
SLEEP 2
|
||||
net use H: /delete
|
||||
|
||||
# helper copia script verso cartella di rete R:\ per develop
|
||||
.ReplicaR_DEV: &ReplicaR_DEV
|
||||
- |
|
||||
@@ -53,7 +78,8 @@ variables:
|
||||
echo "-----------------------"
|
||||
echo " Copia macchina su R - DEV"
|
||||
echo "-----------------------"
|
||||
ROBOCOPY /MIR "$env:BASE_PATH" "$env:DEST_MACHINES_PATH_R\Deploy\$env:MACH_NAME\_DEV\$env:MACH_VERS\" /XD "bin" /XD "$env:MACH_NAME_TEST"
|
||||
$customerPathR = $env:MACHINES_PATH_R + "\" + $env:MANUFACTURER
|
||||
ROBOCOPY /MIR "$env:BASE_PATH" "$customerPathR\_Deploy\$env:MACH_NAME\_DEV\$env:MACH_VERS\" /XD "bin" /XD "$env:MACH_NAME_TEST"
|
||||
SLEEP 2
|
||||
net use R: /delete
|
||||
|
||||
@@ -66,8 +92,15 @@ variables:
|
||||
echo "-----------------------"
|
||||
echo " Recupero file non git da R e copia su macchina virtuale"
|
||||
echo "-----------------------"
|
||||
ROBOCOPY "$env:LAST_MACHINE_PATH" "$env:SRC_PATH" /E /XF "*.bat" /XF "*.yml" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt" /XD ".vscode"
|
||||
ROBOCOPY "$env:LAST_MACHINE_PATH" "$env:SRC_PATH\bin\$env:MACH_NAME\" /E /XF "*.bat" /XF "*.yml" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt" /XD ".vscode"
|
||||
# test se la cartella con gli utensili esiste per questa macchina
|
||||
if (!(Test-Path -Path $env:TOOLS_MACHINE_PATH)) {
|
||||
echo "-----------------------"
|
||||
echo "CANNOT FIND TOOLS FOR THIS MACHINE!!"
|
||||
echo "-----------------------"
|
||||
Exit 1}
|
||||
ROBOCOPY "$env:TOOLS_MACHINE_PATH" "$env:SRC_PATH" /E /XF "*.bat" /XF "*.yml" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt" /XD ".vscode"
|
||||
ROBOCOPY "$env:TOOLS_MACHINE_PATH" "$env:TEST_PATH" /E /XF "*.bat" /XF "*.yml" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt" /XD ".vscode"
|
||||
ROBOCOPY "$env:TOOLS_MACHINE_PATH" "$env:SRC_PATH\bin\$env:MACH_NAME\" /E /XF "*.bat" /XF "*.yml" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt" /XD ".vscode"
|
||||
SLEEP 2
|
||||
net use R: /delete
|
||||
|
||||
@@ -86,22 +119,25 @@ variables:
|
||||
echo "-----------------------"
|
||||
echo " Compilazione file *.lua 32/64bit"
|
||||
echo "-----------------------"
|
||||
$FileList = Get-ChildItem("Common-*")
|
||||
$FileList = Get-ChildItem * -Include( "*.mlpe", "*.mlse")
|
||||
ForEach ($File in $FileList) {
|
||||
$FileName = Split-Path $File -leaf
|
||||
lua54 -o $env:SRC_PATH\bin\$env:MACH_NAME\$FileName -s $FileName
|
||||
echo "lua54 -o bin\$FileName -s $FileName"
|
||||
}
|
||||
|
||||
# helper recupero nome macchina
|
||||
# helper recupero nome macchina e costruttore
|
||||
.machName-fix: &machName-fix
|
||||
- |
|
||||
echo "-----------------------"
|
||||
echo " Recupero nome macchina"
|
||||
echo " Recupero nome macchina e costruttore"
|
||||
echo "-----------------------"
|
||||
$fileName = dir *.mlde
|
||||
$env:MACH_NAME = $fileName.BaseName
|
||||
$env:MACH_NAME_TEST = $env:MACH_NAME + ".TEST"
|
||||
$comp = $fileName.BaseName -split "-"
|
||||
$env:MANUFACTURER = $comp[0]
|
||||
Write-Output $env:MANUFACTURER
|
||||
|
||||
# helper calcolo versione
|
||||
.version-fix: &version-fix
|
||||
@@ -109,12 +145,22 @@ variables:
|
||||
echo "-----------------------"
|
||||
echo " Calcolo versione"
|
||||
echo "-----------------------"
|
||||
|
||||
# calcolo versione formato stringa
|
||||
$fPath = "$env:MACH_NAME.mlde";
|
||||
$vLine = Select-String -path $fPath -Pattern 'PP_VER';
|
||||
$vLine = Select-String -path $fPath -Pattern '^PP_VER';
|
||||
$comp = $vLine -split "=";
|
||||
$env:MACH_VERS = $comp[1].Replace("'","").Trim()
|
||||
# display versione
|
||||
Write-Output $env:MACH_VERS;
|
||||
# display versione formato stringa
|
||||
Write-Output $env:MACH_VERS
|
||||
|
||||
# calcolo versione formato numerico
|
||||
$fPath = "$env:MACH_NAME.mlde";
|
||||
$vLine = Select-String -path $fPath -Pattern '^PP_NVER';
|
||||
$comp = $vLine -split "=";
|
||||
$env:MACH_VERS_NUM = $comp[1].Replace("'","").Trim()
|
||||
# display versione formato numerico
|
||||
Write-Output $env:MACH_VERS_NUM
|
||||
|
||||
# helper calcolo versione se develop
|
||||
.version-fix_DEV: &version-fix_DEV
|
||||
@@ -126,7 +172,7 @@ variables:
|
||||
$commitAuthor = $commitAuthor[0].Trim()
|
||||
$env:MACH_VERS = $commitAuthor
|
||||
# display versione
|
||||
Write-Output $env:MACH_VERS;
|
||||
Write-Output $env:MACH_VERS
|
||||
|
||||
# helper creazione folders
|
||||
.folder-fix: &folder-fix
|
||||
@@ -134,8 +180,8 @@ variables:
|
||||
echo "-----------------------"
|
||||
echo " Creazione cartelle su macchina virtuale"
|
||||
echo "-----------------------"
|
||||
$env:LAST_MACHINE_PATH = "$env:MACHINES_PATH_R\$env:MACH_NAME";
|
||||
Write-Output $env:LAST_MACHINE_PATH;
|
||||
$env:TOOLS_MACHINE_PATH = "$env:MACHINES_PATH_R\$env:MANUFACTURER\_DefaultMachineSetup\$env:MACH_NAME"
|
||||
Write-Output $env:TOOLS_MACHINE_PATH
|
||||
$env:SRC_PATH = "$env:TEMP_PATH\$env:MACH_NAME\$env:MACH_VERS\$env:MACH_NAME";
|
||||
$env:BASE_PATH = "$env:TEMP_PATH\$env:MACH_NAME\$env:MACH_VERS";
|
||||
$env:TEST_PATH = "$env:TEMP_PATH\$env:MACH_NAME\$env:MACH_VERS\$env:MACH_NAME_TEST";
|
||||
@@ -158,6 +204,39 @@ variables:
|
||||
7zip a -tzip $Target $Source
|
||||
Write-Output "called ZIP $Source --> $Target"
|
||||
|
||||
# helper invio notifica a log versioni online (LiMan)
|
||||
.SendToVersionsLog: &SendToVersionsLog
|
||||
- |
|
||||
echo "-----------------------"
|
||||
echo " Invio versione a log online"
|
||||
echo "-----------------------"
|
||||
$tags = ""
|
||||
$date = ""
|
||||
# se critico scrive tag
|
||||
if ( $CI_COMMIT_MESSAGE | Select-String -Pattern $env:CRITICAL_STRING) {
|
||||
$tags = "CRITICAL"
|
||||
$date = (Get-Date).AddDays(1).toString("yyyy-MM-ddTHH:mm:ss.fffZ")
|
||||
}
|
||||
else
|
||||
{
|
||||
$date = (Get-Date).AddDays(3).toString("yyyy-MM-ddTHH:mm:ss.fffZ")
|
||||
}
|
||||
$body =
|
||||
@{
|
||||
codInst = "EgalWare"
|
||||
codApp = $env:MACH_NAME
|
||||
uplAppId = "UpdateManager"
|
||||
masterKey = $LiMan_Key
|
||||
tipo = "Machine"
|
||||
versNum = $env:MACH_VERS_NUM
|
||||
versText = $env:MACH_VERS
|
||||
releaseDate = $date
|
||||
relTags = $tags
|
||||
}
|
||||
$jsonBody = ConvertTo-Json -InputObject $body
|
||||
echo $jsonBody
|
||||
Invoke-WebRequest -Method Post -URI $env:URL_VERSIONS_LOG -ContentType "application/json" -Body $jsonBody -UseBasicParsing
|
||||
|
||||
|
||||
# helper esecuzione test
|
||||
.RunTest: &RunTest
|
||||
@@ -186,6 +265,8 @@ LuaCompile:build:
|
||||
- *LuaCompile
|
||||
- *ZipClean
|
||||
- *ReplicaR
|
||||
- *ReplicaStor01
|
||||
- *SendToVersionsLog
|
||||
|
||||
LuaCompileDev:build:
|
||||
stage: build
|
||||
@@ -233,4 +314,5 @@ LuaCompileDev:build:
|
||||
# script:
|
||||
# - *LuaCompile
|
||||
# - *ZipClean
|
||||
# - *ReplicaR
|
||||
# - *ReplicaR
|
||||
|
||||
|
||||
+47
-1
@@ -202,6 +202,52 @@ local function GetBlockedAxis( sHead, nToolType, sBlockedAxis)
|
||||
end
|
||||
end
|
||||
BeamData.GetBlockedAxis = GetBlockedAxis
|
||||
---------------------------------------------------------------------
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function GetSetupInfo( sHead)
|
||||
local SetupInfo = {}
|
||||
|
||||
-- dati comuni
|
||||
SetupInfo.bIsCSymmetric = true
|
||||
SetupInfo.dCAxisEncumbrance = 180
|
||||
SetupInfo.bToolOnAggregate = false
|
||||
|
||||
-- testa 5 assi da sopra
|
||||
if sHead == 'H11' then
|
||||
SetupInfo.bIsTopHead = true
|
||||
SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead
|
||||
SetupInfo.dMaxNegativeAngle = sin( -35)
|
||||
-- lama su aggregato testa 5 assi da sopra
|
||||
elseif sHead == 'H12' then
|
||||
SetupInfo.bIsTopHead = true
|
||||
SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead
|
||||
SetupInfo.dMaxNegativeAngle = sin( -35)
|
||||
-- seconda lama su aggregato testa 5 assi da sopra
|
||||
elseif sHead == 'H16' then
|
||||
SetupInfo.bIsTopHead = true
|
||||
SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead
|
||||
SetupInfo.dMaxNegativeAngle = sin( -35)
|
||||
-- motosega
|
||||
elseif sHead == 'H13' then
|
||||
SetupInfo.bIsTopHead = true
|
||||
SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead
|
||||
SetupInfo.dMaxNegativeAngle = 0
|
||||
SetupInfo.dZSafeDelta = 60
|
||||
-- testa 5 assi da sotto
|
||||
elseif sHead == 'H21' then
|
||||
SetupInfo.bIsBottomHead = true
|
||||
SetupInfo.bIsTopHead = not SetupInfo.bIsBottomHead
|
||||
SetupInfo.dMaxPositiveAngle = sin( 25)
|
||||
-- lama su aggregato testa 5 assi da sotto
|
||||
elseif sHead == 'H22' then
|
||||
SetupInfo.bIsBottomHead = true
|
||||
SetupInfo.bIsTopHead = not SetupInfo.bIsBottomHead
|
||||
SetupInfo.dMaxPositiveAngle = sin( 25)
|
||||
end
|
||||
|
||||
return SetupInfo
|
||||
end
|
||||
BeamData.GetSetupInfo = GetSetupInfo
|
||||
|
||||
---------------------------------------------------------------------
|
||||
return BeamData
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
[BEAM]
|
||||
StartOffset=0
|
||||
Offset=0
|
||||
@@ -128,6 +128,8 @@ function OnToolData()
|
||||
dAddLen = -SawOffsZ
|
||||
elseif EMT.HEAD == 'H16' then
|
||||
dAddLen = -Saw2OffsZ
|
||||
elseif EMT.HEAD == 'H14' then
|
||||
dAddLen = 206 -- dimensione aggregato
|
||||
end
|
||||
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( dAddLen + EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( dAddLen + EMT.TTOTLEN, 3)
|
||||
@@ -166,7 +168,7 @@ function OnDispositionStart()
|
||||
' P15='..EmtLenToString( -DeltaTabY, 2)..' P16='..EmtLenToString( DeltaTabZ - MillOffs, 2)..
|
||||
' P17='..EmtLenToString( Delta2TabY, 2)..' P18='..EmtLenToString( -Delta2TabZ - Mill2Offs, 2)
|
||||
-- se è in configurazione a 3 teste
|
||||
if EgtGetHeadId( 'H31') then
|
||||
if IsHeadExisting( 3) then
|
||||
sOut = sOut .. ' P19='..EmtLenToString( -Delta3TabY, 2)..' P20='..EmtLenToString( Delta3TabZ - Mill3Offs, 2)..
|
||||
' P21='..EmtLenToString( Mill3Offs, 2).. ' P22='.. EmtLenToString( -ParkInLavZ2, 2)
|
||||
else
|
||||
@@ -397,6 +399,8 @@ function OnMachiningStart()
|
||||
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
|
||||
EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE)
|
||||
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES)
|
||||
EMT.MCHCUT = ( EMT.MCHUSERNOTES:find( 'Cut;', 1, true) ~= nil)
|
||||
|
||||
-- se sega a catena, aggiusto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H13' then
|
||||
-- valore dell'asse virtuale
|
||||
@@ -404,19 +408,34 @@ function OnMachiningStart()
|
||||
-- imposto home dell'asse C1 (A=0 -> T101, A=90 -> T104)
|
||||
local MyParkCSawC1 = GetChainSawCHomeFromVirtualAxis( dPosA, EMT.TTOTLEN)
|
||||
EmtModifyAxisHome( 'C1', MyParkCSawC1)
|
||||
-- aggregato foratura multipla, aggiusto subito angolo scelto per asse virtuale A
|
||||
elseif EMT.HEAD == 'H14' then
|
||||
-- valore dell'asse virtuale
|
||||
dPosA = GetCurrMultiDrillVirtualAxis()
|
||||
-- imposto home dell'asse C1 (A=0 -> T121, A=90 -> T124)
|
||||
local MyParkMultiDrillC1 = GetMultiDrillCHomeFromVirtualAxis( dPosA, EMT.TTOTLEN)
|
||||
EmtModifyAxisHome( 'C1', MyParkMultiDrillC1)
|
||||
-- se lama su aggregato testa sotto, aggiusto subito angolo scelto per asse virtuale A
|
||||
elseif EMT.HEAD == 'H22' then
|
||||
-- valore dell'asse virtuale
|
||||
local dPrevA = dPosA
|
||||
dPosA = GetCurrSawingVirtualAxis()
|
||||
-- imposto home dell'asse C2 (A=0 -> T201, A=90 -> T204)
|
||||
local MyParkCSawC2 = GetSawCHomeFromVirtualAxis( dPosA)
|
||||
EmtModifyAxisHome( 'C2', MyParkCSawC2)
|
||||
-- se lavorazione attuale e precedente con lama su aggregato da sotto con angolo A diverso, devo scaricare e ricaricare
|
||||
if EMT.HEAD == EMT.PREVHEAD_H2 then
|
||||
if abs( dPosA - dPrevA) > 1 then
|
||||
EMT.TO_ZMAX = true
|
||||
EMT.R3_CHANGED = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- gestione eventuale lavorazione in doppio
|
||||
local nDouType = EgtGetValInNotes( EMT.MCHUSERNOTES, 'DOUBLE', 'i')
|
||||
if nDouType == 2 or nDouType == 3 then
|
||||
local sDouTool = EgtGetValInNotes( EMT.TUSERNOTES, 'DOUBLE', 's') or ''
|
||||
local sDouTool = EgtGetValInNotes( EMT.MCHUSERNOTES, 'TOOLDOUBLE', 's') or EgtGetValInNotes( EMT.TUSERNOTES, 'DOUBLE', 's') or ''
|
||||
local sOldTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
||||
if EgtTdbSetCurrTool( sDouTool) and EgtTdbGetCurrToolParam( MCH_TP.ACTIVE) then
|
||||
-- salvo dati
|
||||
@@ -465,18 +484,18 @@ function OnMachiningEnd()
|
||||
EmitRemark( 'PART UNLOAD')
|
||||
elseif EMT.AUXTYPE == 'P' then
|
||||
if EMT.PREROT then
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2)
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false)
|
||||
EMT.ZMAX = true
|
||||
EmitRemark( 'PART ROTATION')
|
||||
elseif EMT.FALL then
|
||||
if EMT.TO_ZMAX and not EMT.ZMAX then
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2)
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false)
|
||||
EMT.ZMAX = true
|
||||
EMT.TO_ZMAX = nil
|
||||
end
|
||||
EmitRemark( 'PART FALL')
|
||||
else
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2)
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false)
|
||||
EMT.ZMAX = true
|
||||
EmitRemark( 'PART SPLIT 2')
|
||||
end
|
||||
@@ -525,7 +544,10 @@ function OnMachiningEnd()
|
||||
EMT.PREVTOOL = EMT.TOOL
|
||||
if EMT.DOU_TYPE and not EMT.ZMAX then EMT.DOU_TO_ZMAX = EMT.DOU_TYPE end
|
||||
EMT.DOU_TYPE = nil
|
||||
|
||||
-- se taglio finale, aggiorno lunghezza barra
|
||||
if EMT.MCHCUT then
|
||||
EMT.LB = EMT.LT + ( EMT.X_OFF or 0)
|
||||
end
|
||||
-- salvo dati utensile
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- per gruppo testa 1
|
||||
@@ -556,10 +578,12 @@ function OnPathStart()
|
||||
--MyOutput( 'CNT='.. tostring( EMT.CNT or 0))
|
||||
-- se utensile non cambiato, salvo eventuali precedenti rotanti
|
||||
if EMT.TOOL == EMT.PREVTOOL and not EMT.ZMAX then
|
||||
EMT.L2pp = EMT.L2op
|
||||
EMT.L3pp = EMT.L3op
|
||||
EMT.R1pp = EMT.R1p
|
||||
EMT.R2pp = EMT.R2p
|
||||
else
|
||||
EMT.L2pp = nil
|
||||
EMT.L3pp = nil
|
||||
EMT.R1pp = nil
|
||||
EMT.R2pp = nil
|
||||
@@ -575,6 +599,10 @@ function OnPathEnd()
|
||||
if not EMT.ZMAX then
|
||||
EmitResetMachining()
|
||||
end
|
||||
|
||||
-- salvo dati precedenti
|
||||
EMT.L2pp = EMT.L2o
|
||||
|
||||
EMT.AUXTYPE = nil
|
||||
EMT.UNL = nil
|
||||
EMT.PREROT = nil
|
||||
@@ -710,9 +738,12 @@ function OnRapid()
|
||||
local MyMaxZ1 = EgtGetAxisMax( 'Z1')
|
||||
-- in caso di rotazione della lama lontano dalla posizione di home degli assi rotanti
|
||||
local bXSpec = EgtIf( BD.RIGHT_LOAD, ( EMT.L2 > -DeltaTabY), ( EMT.L2 < -DeltaTabY))
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MyMaxZ1, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
-- se non è aggregato, posso preselezionare testa e andare in posizione
|
||||
if EMT.HEAD ~= 'H13' and EMT.HEAD ~= 'H14' then
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MyMaxZ1, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
end
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
-- se necessario allargo le cabine
|
||||
if RollerParkingNeeded( EMT.HEAD, PrevR1, PrevR2, EMT.R1, EMT.R2) or
|
||||
@@ -738,6 +769,9 @@ function OnRapid()
|
||||
-- se sega a catena
|
||||
if EMT.HEAD == 'H13' then
|
||||
EmitMoveDataHead( 1, { X=-ParkCSawX1, Z=HomeZ1, B=HomeR2, C=HomeR1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
-- aggregato foratore multiplo
|
||||
elseif EMT.HEAD == 'H14' then
|
||||
EmitMoveDataHead( 1, { X=-ParkMultiDrillX1, Z=HomeZ1, B=HomeR2, C=HomeR1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
-- utensili standard
|
||||
else
|
||||
-- utensili lunghi
|
||||
@@ -805,12 +839,20 @@ function OnRapid()
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
if EMT.HEAD == 'H22' then
|
||||
EmitMoveDataHead( 2, { X=MinX2, Z=ParkZ2, B=ParkB2, C=ParkC2, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=ParkSawX2, Z=ParkZ2, B=0, C=ParkC2, S=Speed})
|
||||
EMT.L2pp = ParkSawX2
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=ParkX2, Z=ParkZ2, B=ParkB2, C=ParkC2, S=Speed})
|
||||
EMT.L2pp = ParkX2
|
||||
end
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=ParkX2, S=Speed})
|
||||
if EMT.HEAD == 'H22' then
|
||||
EmitMoveDataHead( 2, { X=ParkSawX2, S=Speed})
|
||||
EMT.L2pp = ParkSawX2
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=ParkX2, S=Speed})
|
||||
EMT.L2pp = ParkX2
|
||||
end
|
||||
end
|
||||
EmitMoveStartHead( 2)
|
||||
EmitMoveWaitHead( 2)
|
||||
@@ -821,8 +863,19 @@ function OnRapid()
|
||||
local dPosT = EMT.TPOS or EMT.L1op
|
||||
EmitParkRoller( dPosT, bSplitCut)
|
||||
end
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 2, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
-- vado a quota sicurezza in X per permettere rotazione assi rotanti
|
||||
if ( not EMT.L2pp or ( EMT.L2pp and EMT.L2pp > SafeX2RotAxis)) and ( ParkB2 ~= EMT.R2 or ParkC2 ~= EMT.R1) then
|
||||
EmitMoveDataHead( 2, { X=SafeX2RotAxis, Z=ParkZ2, B=ParkB2, C=ParkC2, S=Speed})
|
||||
end
|
||||
-- scrivo solo se gli assi rotanti sono cambiati
|
||||
if EMT.HEAD == 'H22' and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then
|
||||
EmitMoveDataHead( 2, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
end
|
||||
if EMT.ZMAX then
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
end
|
||||
EmitMoveStartHead( 2)
|
||||
-- eventuale preselezione successiva testa 1
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
@@ -832,11 +885,12 @@ function OnRapid()
|
||||
else
|
||||
-- selezione testa (posso muovere X solo a Zmax)
|
||||
local MaxZ3 = EgtGetAxisMax( 'Z3')
|
||||
local MyParkX3 = EgtGetAxisHomePos( 'X3')
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MaxZ3, B=ParkB3, C=0, S=Speed})
|
||||
EmitMoveDataHead( 3, { X=MyParkX3, Z=MaxZ3, B=ParkB3, C=ParkC3, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MaxZ3, S=Speed})
|
||||
EmitMoveDataHead( 3, { X=MyParkX3, Z=MaxZ3, S=Speed})
|
||||
end
|
||||
EmitMoveStartHead( 3)
|
||||
EmitMoveWaitHead( 3)
|
||||
@@ -849,13 +903,42 @@ function OnRapid()
|
||||
end
|
||||
-- eseguo movimenti
|
||||
local Speed = EMT.S
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveStartHead( 3)
|
||||
-- eventuale preselezione successiva testa 2
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
-- aspetto esecuzione movimento testa 3
|
||||
EmitMoveWaitHead( 3)
|
||||
-- se è macchina a 3 teste con gruppo truciolatore 4 assi
|
||||
if EgtGetHeadId( 'H39') then
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveStartHead( 3)
|
||||
-- eventuale preselezione successiva testa 2
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
-- aspetto esecuzione movimento testa 3
|
||||
EmitMoveWaitHead( 3)
|
||||
-- se gruppo lama dedicato, senza cambio utensile
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
local B3Home = EgtGetAxisHomePos( 'B3')
|
||||
local C3Home = EgtGetAxisHomePos( 'C3')
|
||||
EmitMoveDataHead( 3, { X=-SafeX3RotAxis, S=Speed})
|
||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
||||
if abs( C3Home - EMT.R1) > 1 or abs( B3Home - EMT.R2) > 1 then
|
||||
EMT.L3 = min( EMT.L3, SafeZ3RotAxis)
|
||||
EmitMoveDataHead( 3, { Z=SafeZ3RotAxis, S=Speed})
|
||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
if ( EMT.L3 - SafeZ3RotAxis) > 100 * GEO.EPS_SMALL then
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, S=Speed})
|
||||
end
|
||||
-- muovo in posizione finale
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
|
||||
EmitMoveStartHead( 3)
|
||||
-- eventuale preselezione successiva testa 2
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
-- aspetto esecuzione movimento testa 3
|
||||
EmitMoveWaitHead( 3)
|
||||
-- errore, testa non gestita
|
||||
else
|
||||
EmtSetLastError( 1212, "HEAD not managed")
|
||||
end
|
||||
end
|
||||
-- dati aggancio a trave
|
||||
local BhData = { T=EMT.L1, SetHead=0}
|
||||
@@ -899,7 +982,7 @@ function OnRapid()
|
||||
EmitParkedLines()
|
||||
-- se sfrido grande, emetto comando speciale
|
||||
if EMT.HOVM > 99 then
|
||||
if EgtGetHeadId( 'H31') then
|
||||
if IsHeadExisting( 3) then
|
||||
MyOutput( 'M107')
|
||||
else
|
||||
MyOutput( ';M107')
|
||||
@@ -909,7 +992,18 @@ function OnRapid()
|
||||
else
|
||||
--MyOutput( string.format( 'V1Pos=%.3f V2Pos=%.3f', EMT.V1POS, EMT.V2POS))
|
||||
if not EMT.RELOAD and not EMT.ZMAX and #EMT.AUXCMD > 0 and EMT.TO_ZMAX then
|
||||
EmitZmax( false, false, PrevR1, PrevR2)
|
||||
-- caso speciale in cui bisogna solo cambiare presa aggregato lama sotto
|
||||
if EMT.R3_CHANGED then
|
||||
-- EmitZmax è fatta per essere chiamata con utensile attuale. In questo caso l'attuale è già quello con nuova rotazione
|
||||
-- Allora salvo l'attuale e imposto il vecchio solo momentanemente, per poi ripristinarlo
|
||||
local sBckTcPos = EMT.TCPOS
|
||||
EMT.TCPOS = EMT.PREVTCPOSREAL_H2
|
||||
EmitZmax( false, false, PrevR1, PrevR2, false, false, true)
|
||||
EMT.TCPOS = sBckTcPos
|
||||
EMT.R3_CHANGED = nil
|
||||
else
|
||||
EmitZmax( false, false, PrevR1, PrevR2, false, false, true)
|
||||
end
|
||||
EMT.ZMAX = true
|
||||
EMT.TO_ZMAX = nil
|
||||
PrevR1 = EgtGetAxisHomePos( EgtIf( nHSet == 1, 'C1', 'C2'))
|
||||
@@ -946,7 +1040,7 @@ function OnRapid()
|
||||
if EMT.MCHUSERNOTES and EMT.MCHUSERNOTES:find( 'Cut', 1, true) then
|
||||
-- se sfrido grande, emetto comando speciale
|
||||
if EMT.LB - EMT.LT > 99 then
|
||||
if EgtGetHeadId( 'H31') then
|
||||
if IsHeadExisting( 3) then
|
||||
MyOutput( 'M107')
|
||||
else
|
||||
MyOutput( ';M107')
|
||||
@@ -987,9 +1081,20 @@ function OnRapid()
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- caso standard
|
||||
else
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
-- se ero in posizione speciale, prima ruoto poi scendo
|
||||
if bXSpec then
|
||||
local dZPos = max( HomeZ1, EMT.L3)
|
||||
EmitMoveDataHead( 1, { Z=dZPos, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
||||
if abs( dZPos - EMT.L3) > 1 then
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
else
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
end
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
@@ -1069,7 +1174,7 @@ function OnRapid()
|
||||
local CurrC2 = PrevR1
|
||||
local dSafeZ2 = EgtGetAxisHomePos( 'Z2')
|
||||
local Speed = EMT.S * EgtIf( EMT.HEAD ~= 'H22', 1, 1.65)
|
||||
if not EMT.L2p then EMT.L2p = EgtGetAxisHomePos( 'X2') end
|
||||
if not EMT.L2pp then EMT.L2pp = EgtGetAxisHomePos( 'X2') end
|
||||
-- calcolo posizione reale
|
||||
EMT.TCPOSREAL = 'T' .. AdjustTcPos( false, EMT.TCPOS, EMT.R3)
|
||||
-- se utensile cambiato (controllo il reale perchè per aggregato dipende come è stato caricato)
|
||||
@@ -1078,34 +1183,48 @@ function OnRapid()
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
if EMT.HEAD == 'H22' then
|
||||
EmitMoveDataHead( 2, { X=MinX2, Z=-CurrZ2, B=CurrB2, C=CurrC2, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=ParkSawX2, Z=-dSafeZ2, B=0, C=CurrC2, S=Speed})
|
||||
EMT.L2pp = ParkSawX2
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=SafeX2, Z=-CurrZ2, B=CurrB2, C=CurrC2, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=SafeX2, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed})
|
||||
EMT.L2pp = SafeX2
|
||||
end
|
||||
else
|
||||
if EMT.HEAD == 'H22' then
|
||||
EmitMoveDataHead( 2, { X=ParkSawX2, S=Speed})
|
||||
EMT.L2pp = ParkSawX2
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=SafeX2, S=Speed})
|
||||
EMT.L2pp = SafeX2
|
||||
end
|
||||
end
|
||||
-- scrivo solo se gli assi rotanti sono cambiati
|
||||
EmitMoveDataHead( 2, { Z=-dSafeZ2, S=Speed})
|
||||
if EMT.L2p > ParkMchY2 and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then
|
||||
EmitMoveDataHead( 2, { X=ParkMchY2, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed})
|
||||
if EMT.L2pp > SafeX2RotAxis and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then
|
||||
EmitMoveDataHead( 2, { X=SafeX2RotAxis, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed})
|
||||
end
|
||||
else
|
||||
-- scrivo solo se gli assi rotanti sono cambiati
|
||||
if EMT.L2p > ParkMchY2 and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then
|
||||
EmitMoveDataHead( 2, { X=ParkMchY2, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed})
|
||||
if EMT.L2pp > SafeX2RotAxis and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then
|
||||
EmitMoveDataHead( 2, { X=SafeX2RotAxis, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed})
|
||||
end
|
||||
end
|
||||
-- se stesso utensile vado già alla X di lavoro
|
||||
else
|
||||
-- scrivo solo se gli assi rotanti sono cambiati
|
||||
if EMT.L2p > ParkMchY2 and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then
|
||||
EmitMoveDataHead( 2, { X=ParkMchY2, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed})
|
||||
if EMT.ZMAX and EMT.L2pp > SafeX2RotAxis and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then
|
||||
EmitMoveDataHead( 2, { X=SafeX2RotAxis, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed})
|
||||
end
|
||||
end
|
||||
-- scrivo solo se gli assi rotanti sono cambiati
|
||||
if EMT.HEAD == 'H22' and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then
|
||||
EmitMoveDataHead( 2, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
end
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
if EMT.ZMAX then
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
end
|
||||
EmitMoveStartHead( 2)
|
||||
-- eventuale preselezione successiva testa 1
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
@@ -1119,20 +1238,45 @@ function OnRapid()
|
||||
local HomeC3 = EgtGetAxisHomePos( 'C3')
|
||||
local HomeB3 = EgtGetAxisHomePos( 'B3')
|
||||
local Speed = EMT.S
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
local CurrB3 = PrevR2
|
||||
local CurrC3 = PrevR1
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MyMaxZ3, B=CurrB3, C=CurrC3, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MyMaxZ3, S=Speed})
|
||||
end
|
||||
-- se è macchina a 3 teste con gruppo truciolatore 4 assi
|
||||
if EgtGetHeadId( 'H39') then
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
local CurrB3 = PrevR2
|
||||
local CurrC3 = PrevR1
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MyMaxZ3, B=CurrB3, C=CurrC3, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MyMaxZ3, S=Speed})
|
||||
end
|
||||
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
end
|
||||
-- se gruppo lama dedicato, senza cambio utensile
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
local B3Home = EgtGetAxisHomePos( 'B3')
|
||||
local C3Home = EgtGetAxisHomePos( 'C3')
|
||||
EmitMoveDataHead( 3, { X=-SafeX3RotAxis, S=Speed})
|
||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
||||
if abs( C3Home - EMT.R1) > 1 or abs( B3Home - EMT.R2) > 1 then
|
||||
EMT.L3 = min( EMT.L3, SafeZ3RotAxis)
|
||||
EmitMoveDataHead( 3, { Z=SafeZ3RotAxis, S=Speed})
|
||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
if ( EMT.L3 - SafeZ3RotAxis) > 100 * GEO.EPS_SMALL then
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, S=Speed})
|
||||
end
|
||||
end
|
||||
-- muovo in posizione finale
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
else
|
||||
EmtSetLastError( 1212, "HEAD not managed")
|
||||
end
|
||||
|
||||
EmitMoveStartHead( 3)
|
||||
-- eventuale preselezione successiva testa 2
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
@@ -1195,6 +1339,10 @@ function OnRapid()
|
||||
EmitMoveStartHead( 1)
|
||||
local dX2 = Delta2TabY + EMT.DOU_TLEN - ( -DeltaTabY - EMT.L2 + EMT.TLEN + EgtIf( BD.RIGHT_LOAD, -EMT.HB, EMT.HB))
|
||||
local dZ2 = -Head2Z + MillOffs + Mill2Offs + EMT.L3
|
||||
-- dato che la testa 2 è slave, bisogna controllare eventuale extra-corsa da post
|
||||
if dZ2 > MaxZ2 then
|
||||
EmtSetLastError( 1220, EMT.MCHNAME..' ==> Out of Stroke: Z2 : '.. EgtNumToString( dZ2-MaxZ2, 2))
|
||||
end
|
||||
local dC2 = EMT.R1
|
||||
local dB2 = EMT.R2
|
||||
EmitMoveDataHead( 2, { Z=-dZ2, B=dB2, C=dC2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
|
||||
@@ -1242,6 +1390,14 @@ function OnRapid()
|
||||
EMT.R1p = nil
|
||||
EMT.R2p = nil
|
||||
else
|
||||
-- se lavorazione in doppio controllo le corse
|
||||
if EMT.DOU_TYPE == 2 then
|
||||
local dZ2 = -Head2Z + MillOffs + Mill2Offs + EMT.L3
|
||||
-- dato che la testa 2 è slave, bisogna controllare eventuale extra-corsa da post
|
||||
if dZ2 > MaxZ2 then
|
||||
EmtSetLastError( 1220, EMT.MCHNAME..' ==> Out of Stroke: Z2 : '.. EgtNumToString( dZ2-MaxZ2, 2))
|
||||
end
|
||||
end
|
||||
MyAdjustLinearAxes()
|
||||
EmtAdjustRotaryAxes()
|
||||
end
|
||||
@@ -1266,8 +1422,10 @@ function OnRapid()
|
||||
local bSplitCut = ( EMT.MCHUSERNOTES:find( 'Split', 1, true) ~= nil)
|
||||
-- porto in home la testa corrente se lavorazione successiva sopra con testa diversa oppure se punta lunga
|
||||
local nNextTopHSet = GetNextTopHSet( EMT.MCHID)
|
||||
local bTopGoHome = ( nHSet ~= 2 and nNextTopHSet ~= 0 and nHSet ~= nNextTopHSet) or ( nHSet == 1 and EMT.TTOTLEN > LongTool)
|
||||
EmitZmax( true, true, EMT.R1p, EMT.R2p, bSplitCut, bTopGoHome)
|
||||
-- ricavo prossimo utensile
|
||||
local sNextTool = GetNextTool( EMT.MCHID)
|
||||
local bTopGoHome = ( IsLastPath( EMT.PATHID) and not sNextTool and nHSet == 3) or ( nHSet ~= 2 and nNextTopHSet ~= 0 and nHSet ~= nNextTopHSet) or ( nHSet == 1 and EMT.TTOTLEN > LongTool)
|
||||
EmitZmax( true, true, EMT.R1p, EMT.R2p, bSplitCut, bTopGoHome, false)
|
||||
-- aggiorno quota finale trave dopo Zmax
|
||||
EMT.L1o = EMT.TPOS
|
||||
EMT.ZMAX = true
|
||||
@@ -1375,6 +1533,54 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnArc()
|
||||
-- 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
|
||||
-- imposto posizione precedente (se presente devo annullare l'offset in X per sovramateriale di testa)
|
||||
EMT.L1 = EMT.L1o
|
||||
EMT.L2 = EMT.L2o
|
||||
EMT.L3 = EMT.L3o
|
||||
if EMT.X_OFF then EMT.L1 = EMT.L1 - EMT.X_OFF end
|
||||
-- trasformo i punti nel piano
|
||||
MyAdjustLinearAxes()
|
||||
EmtAdjustRotaryAxes()
|
||||
EMT.L1p = nil
|
||||
EMT.L2p = nil
|
||||
EMT.L3p = nil
|
||||
MyOutput( 'M105 P1=' .. GetFaceCode() .. ' P2='..GetHeadSetCode()..' P3='..EgtIf( EMT.DOU_TYPE, 2, 0))
|
||||
MyOutput( 'M98')
|
||||
MyOutput( 'M6 ' .. GetHeadToolCode() .. AdjustTcPos( true))
|
||||
MyOutput( 'G24' .. EMT.IPLGLSTR)
|
||||
-- emissione movimento
|
||||
EMT.R1p = nil
|
||||
EMT.R2p = nil
|
||||
if EmitRapidInG1 then
|
||||
local sFeed = ' F30000'
|
||||
sOut = 'G1'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
|
||||
EmtGetAxis('R2')..EmtGetAxis('R1')..sFeed
|
||||
else
|
||||
sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
|
||||
EmtGetAxis('R2')..EmtGetAxis('R1')
|
||||
end
|
||||
|
||||
MyOutput( sOut)
|
||||
-- aggiorno precedenti
|
||||
local nOriginalMove = EMT.MOVE
|
||||
EMT.MOVE = 0
|
||||
EmtUpdatePrev()
|
||||
EMT.MOVE = nOriginalMove
|
||||
-- ripristino posizione attuale
|
||||
EMT.L1 = OldL1
|
||||
EMT.L2 = OldL2
|
||||
EMT.L3 = OldL3
|
||||
end
|
||||
|
||||
-- se primo movimento in feed della lavorazione, dichiaro inizio lavorazione
|
||||
if EMT.MCHFIRSTFEED then
|
||||
EMT.MCHFIRSTFEED = nil
|
||||
@@ -1417,7 +1623,7 @@ end
|
||||
function CalcDinamicaPinze( dH, dS, dL)
|
||||
local MinTempoAcc = 0.6 -- [s]
|
||||
local MaxTempoAcc = 6.0 -- [s]
|
||||
local KgMtCubo= 550 -- densità legno [Kg / metro cubo]
|
||||
local KgMtCubo= WoodDensity or 550 -- densità legno [Kg / metro cubo]
|
||||
local Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg]
|
||||
local FMaxPinze = EMT.FMAXPINZE -- Feed massima pinze [mm/min]
|
||||
local ForzaAttrito = 350 * 9.8 * 0.2 -- Forza chiusura pinze [Kgf] * g * Coeff_Attrito -> [N]
|
||||
@@ -1442,7 +1648,7 @@ function CalcForzaPinze( dH, dS, dL, dT)
|
||||
if dMinJoin < 0.9 * BD.MIN_JOIN_L then
|
||||
return MinForzaPinze
|
||||
else
|
||||
local KgMtCubo= 550 -- densità legno [Kg / metro cubo]
|
||||
local KgMtCubo= WoodDensity or 550 -- densità legno [Kg / metro cubo]
|
||||
local Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg]
|
||||
local Forza = Massa / MassaRef * MaxForzaPinze
|
||||
return EgtClamp( Forza, MinForzaPinze, MaxForzaPinze)
|
||||
@@ -2101,42 +2307,66 @@ function AdjustTcPos( bLen3, sTcPos, dAxR3)
|
||||
end
|
||||
if sPos == '101' then
|
||||
if not dAxR3 then dAxR3 = EMT.R3 end
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '101'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '102'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '103'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '104'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Chain saw orientation not allowed')
|
||||
-- controllo che il valore esista. Altrimenti è una testa senza asse ausiliario
|
||||
if dAxR3 then
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '101'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '102'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '103'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '104'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Tool T101 orientation not allowed')
|
||||
end
|
||||
end
|
||||
end
|
||||
if sPos == '111' then
|
||||
if not dAxR3 then dAxR3 = EMT.R3 end
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '111'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '112'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '113'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '114'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Chain saw orientation not allowed')
|
||||
-- controllo che il valore esista. Altrimenti è una testa senza asse ausiliario
|
||||
if dAxR3 then
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '111'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '112'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '113'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '114'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Tool T111 orientation not allowed')
|
||||
end
|
||||
end
|
||||
end
|
||||
if sPos == '121' then
|
||||
if not dAxR3 then dAxR3 = EMT.R3 end
|
||||
-- controllo che il valore esista. Altrimenti è una testa senza asse ausiliario
|
||||
if dAxR3 then
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '121'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '122'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '123'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '124'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Tool T121 orientation not allowed')
|
||||
end
|
||||
end
|
||||
end
|
||||
if sPos == '201' then
|
||||
if not dAxR3 then dAxR3 = EMT.R3 end
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '201'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '202'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '203'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '204'
|
||||
-- Lama su aggregato da sotto non può essere presa in queste posizioni per problemi di collisione durante parcheggio
|
||||
--elseif abs( dAxR3 - 270) < 0.1 then
|
||||
-- sPos = '202'
|
||||
--elseif abs( dAxR3 - 180) < 0.1 then
|
||||
-- sPos = '203'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Saw orientation not allowed')
|
||||
end
|
||||
@@ -2230,11 +2460,12 @@ function GetHeadToolCode()
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome)
|
||||
function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome, bUsePrevDelta)
|
||||
if bReset then
|
||||
EmitResetMachining()
|
||||
end
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
local dXPos = EgtIf( bUsePrevDelta, EMT.L2pp or EMT.L2o, EMT.L2o)
|
||||
-- se testa 1
|
||||
if nSetHead == 1 then
|
||||
-- posizioni sicure
|
||||
@@ -2255,12 +2486,12 @@ function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome)
|
||||
local dZref = dHomeZ1 + GetZExtra( EMT.HEAD, PrevR2)
|
||||
dZref = min( dZref, dMaxZ1)
|
||||
local MovH = { Z = EgtIf( dZref > EMT.L3o, dZref, EMT.L3o)}
|
||||
MovH.X = -EMT.L2o ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
MovH.X = -dXPos ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
if ( EMT.HEAD == 'H12' or EMT.HEAD == 'H16') and ( abs( dHomeC1 - PrevR1) > 30.1 or abs( dHomeB1 - PrevR2) > 30.1) then
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1, B=0, Fmt=1})
|
||||
end
|
||||
if EgtIf( BD.RIGHT_LOAD, ( EMT.L2 > -DeltaTabY), ( EMT.L2 < -DeltaTabY)) then
|
||||
if EgtIf( BD.RIGHT_LOAD, ( -dXPos > -DeltaTabY), ( -dXPos < -DeltaTabY)) then
|
||||
EmitMoveDataHead( 1, { X=-DeltaTabY, Fmt=1})
|
||||
end
|
||||
EmitMoveDataHead( 1, { C=dHomeC1, Fmt=1})
|
||||
@@ -2282,7 +2513,17 @@ function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome)
|
||||
-- salgo in Z sicurezza raddrizzando la B
|
||||
local dSafeZ1 = EgtIf( EMT.TTOTLEN < MinLengthLongCSaw, ParkCSawZ1, ParkLongCSawZ1)
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dHomeB1, Fmt=1})
|
||||
EmitMoveDataHead( 1, { X=-dHomeX1, C=dHomeC1, Fmt=1})
|
||||
-- lascio la motosega a parcheggio. In caso di utilizzo della testa 3, la motosega viene scaricata automaticamente dalla macro.
|
||||
EmitMoveDataHead( 1, { X=-ParkCSawX1, C=dHomeC1, Fmt=1})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
end
|
||||
-- se ho degli aggregati e la prossima è la testa 3, scarico e prendo utensile di default
|
||||
local nNextTopHSet = GetNextTopHSet( EMT.MCHID)
|
||||
if IsHeadExisting( 3) and nNextTopHSet == 3 and ( EMT.TCPOS == 'T101' or EMT.TCPOS == 'T111' or EMT.TCPOS == 'T121') then
|
||||
-- lascio la motosega a parcheggio. In caso di utilizzo della testa 3, la motosega viene scaricata automaticamente dalla macro.
|
||||
local sDefToolToLoad = AdjustTcPos( false, DefTcPos1)
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, TPos=sDefToolToLoad, Fmt=1})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
end
|
||||
@@ -2306,6 +2547,10 @@ function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome)
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=dHomeX2, Fmt=1})
|
||||
end
|
||||
-- solo se è macchina a 3 teste con gruppo truciolatore 4 assi, devo stare più alto
|
||||
if EgtGetHeadId( 'H39') then
|
||||
EmitMoveDataHead( 2, { Z=-ParkInLavZ2, Fmt=1})
|
||||
end
|
||||
EmitMoveStartHead( 2)
|
||||
EmitMoveWaitHead( 2)
|
||||
-- altrimenti testa 3
|
||||
@@ -2314,14 +2559,44 @@ function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome)
|
||||
local dMaxZ3 = EgtGetAxisMax( 'Z3')
|
||||
local dHomeX3 = EgtGetAxisHomePos( 'X3')
|
||||
local dHomeB3 = EgtGetAxisHomePos( 'B3')
|
||||
-- eseguo la salita a Z3max
|
||||
EmitMoveDataHead( 3, { Z=dMaxZ3, Fmt=1})
|
||||
if bTopGoHome then
|
||||
EmitMoveDataHead( 3, { X=-dHomeX3, B=dHomeB3, Fmt=1})
|
||||
|
||||
-- se è macchina a 3 teste con gruppo truciolatore 4 assi
|
||||
if EgtGetHeadId( 'H39') then
|
||||
-- eseguo la salita a Z3max
|
||||
EmitMoveDataHead( 3, { Z=dMaxZ3, Fmt=1})
|
||||
if bTopGoHome then
|
||||
EmitMoveDataHead( 3, { X=-dHomeX3, B=dHomeB3, Fmt=1})
|
||||
end
|
||||
-- se gruppo lama dedicato, senza cambio utensile
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
local dHomeC3 = EgtGetAxisHomePos( 'C3')
|
||||
if RollerParkingNeeded( EMT.HEAD, PrevR1, PrevR2, dHomeC3, dHomeB3) then
|
||||
local dPosT = EgtIf( bEnd, EMT.L1o, EMT.TPOS or EMT.L1op)
|
||||
EmitParkRoller( dPosT, bSplitCut)
|
||||
end
|
||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
||||
if abs( dHomeC3 - PrevR1) > 1 or abs( dHomeB3 - PrevR2) > 1 then
|
||||
EmitMoveDataHead( 3, { X=-SafeX3RotAxis, Fmt=1})
|
||||
EmitMoveDataHead( 3, { Z=SafeZ3RotAxis, Fmt=1})
|
||||
EmitMoveDataHead( 3, { B=dHomeB3, C=dHomeC3, Fmt=1})
|
||||
end
|
||||
-- eseguo la salita a Z3max
|
||||
EmitMoveDataHead( 3, { Z=dMaxZ3, Fmt=1})
|
||||
if bTopGoHome then
|
||||
EmitMoveDataHead( 3, { X=-dHomeX3, Fmt=1})
|
||||
end
|
||||
else
|
||||
EmtSetLastError( 1212, "HEAD not managed")
|
||||
end
|
||||
|
||||
EmitMoveStartHead( 3)
|
||||
EmitMoveWaitHead( 3)
|
||||
end
|
||||
-- resetto posizione precedente assi
|
||||
EMT.L2pp = nil
|
||||
EMT.L3pp = nil
|
||||
EMT.R1pp = nil
|
||||
EMT.R2pp = nil
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -2408,7 +2683,7 @@ function EmitParkRoller( dPosT, bSplitCut)
|
||||
local dPosY1 = dPosT + EMT.Y1DELTA
|
||||
local DiffY1 = MyParkY1 - dPosY1
|
||||
local dMoveY1 = EgtIf( DiffY1 > 0.1, dMoveV1, 0)
|
||||
local dTryMoveY1 = ParkV1 - dPosT - EgtIf( bSplitCut or EMT.FALL, EMT.LT, 0)
|
||||
local dTryMoveY1 = min( ParkV1 - dPosT - EgtIf( bSplitCut or EMT.FALL, EMT.LT, 0), MaxY1 - dPosY1 - 10)
|
||||
if ( dPosT > ParkV2 - ExtraParkV and dPosT < ParkV1 and dPosY1 + dTryMoveY1 < MaxY1) then dMoveY1 = max( dMoveY1, dTryMoveY1) end
|
||||
--MyOutput( string.format( 'PosT=%.3f PosY1=%.3f V1POS=%.3f Split=%s', dPosT, dPosY1, EMT.V1POS, EgtIf( bSplitCut, '1', '0')))
|
||||
MDChar.Y1 = dPosY1 + dMoveY1
|
||||
@@ -2420,8 +2695,8 @@ function EmitParkRoller( dPosT, bSplitCut)
|
||||
local dPosY2 = dPosT + EMT.Y2DELTA
|
||||
local DiffY2 = MyParkY2 - dPosY2
|
||||
local dMoveY2 = EgtIf( DiffY2 < -0.1, dMoveV2, 0)
|
||||
local dTryMoveY2 = ParkV2 - dPosT - EMT.LT
|
||||
if ( dPosT + EMT.LT < ParkV1 + ExtraParkV and dPosT + EMT.LT > ParkV2 and dPosY2 + dTryMoveY2 > MinY2) then dMoveY2 = min( dMoveY2, dTryMoveY2) end
|
||||
local dTryMoveY2 = max( ParkV2 - dPosT - EMT.LT - EMT.HOVM, MinY2 - dPosY2 + 10)
|
||||
if ( dPosT + EMT.LT + EMT.HOVM < ParkV1 + ExtraParkV and dPosT + EMT.LT + EMT.HOVM > ParkV2 and dPosY2 + dTryMoveY2 > MinY2) then dMoveY2 = min( dMoveY2, dTryMoveY2) end
|
||||
--MyOutput( string.format( 'PosT=%.3f LT=%.3f PosY2=%.3f V2POS=%.3f', dPosT, EMT.LT, dPosY2, EMT.V2POS))
|
||||
MDChar.Y2 = dPosY2 + dMoveY2
|
||||
MDChar.MovType = 2
|
||||
@@ -2496,6 +2771,8 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
if sNextHead == 'H22' or EMT.PREVHEAD_H2 == 'H22' then return end
|
||||
-- se la Z di lavoro è più bassa del cambio della minima Z
|
||||
if EMT.MAXMIN[3] < MinZ1ToChangeH2 then
|
||||
-- se diametro utensile più del truciolatore standard grande, si rischia di collidere anche con il carro X testa sotto (quindi indipendentemente dalla Y della lavorazione)
|
||||
if EMT.TTOTDIAM > 201 then return end
|
||||
-- verifico quota del TC
|
||||
if BD.RIGHT_LOAD and EMT.MAXMAX[2] > ( DeltaTabY + MaxHoOpen + 200) then return end
|
||||
if not BD.RIGHT_LOAD and EMT.MAXMAX[2] > ( DeltaTabY + 200) then return end
|
||||
@@ -2534,38 +2811,56 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
end
|
||||
-- altrimenti (testa 3)
|
||||
else
|
||||
-- se preselezione testa 1
|
||||
if nNextHSet == 1 then
|
||||
-- TC su montante destro
|
||||
if nPrevTc == 1 then return
|
||||
-- TC su montante sinistro
|
||||
-- se è macchina a 3 teste con gruppo truciolatore 4 assi
|
||||
if EgtGetHeadId( 'H39') then
|
||||
-- se preselezione testa 1
|
||||
if nNextHSet == 1 then
|
||||
local nNextTc = GetTcForTopHeadTool( sNextTcPos) -- utensile da caricare
|
||||
local nPrevTc = GetTcForTopHeadTool( EMT.PREVTCPOS_H1) -- utensile da depositare
|
||||
-- se devo lasciare o prelevare da TC1 oppure non so cosa c'è montato, non posso preselezionare
|
||||
if nNextTc == 1 or nPrevTc == 1 or nPrevTc == 0 then return
|
||||
-- TC su montante sinistro
|
||||
else
|
||||
if BD.RIGHT_LOAD and EMT.MAXMAX[2] > ( DeltaTabY + MaxHoOpen + 200) then return end
|
||||
if not BD.RIGHT_LOAD and EMT.MAXMAX[2] > DeltaTabY then return end
|
||||
end
|
||||
-- se preselezione testa 2
|
||||
else
|
||||
if BD.RIGHT_LOAD and EMT.MAXMAX[2] > ( DeltaTabY + MaxHoOpen + 200) then return end
|
||||
if not BD.RIGHT_LOAD and EMT.MAXMAX[2] > DeltaTabY then return end
|
||||
end
|
||||
-- se preselezione testa 2
|
||||
else
|
||||
-- se agregato lama speciale non preseleziono mai
|
||||
if sNextHead == 'H22' or EMT.PREVHEAD_H2 == 'H22' then return end
|
||||
-- se la Z di lavoro è più bassa del cambio utensili, verifico quota X (la nostra Y)
|
||||
if EMT.MAXMIN[3] < MinZ1ToChangeH2 then
|
||||
if BD.RIGHT_LOAD and EMT.MAXMAX[2] > ( DeltaTabY + MaxHoOpen + 200) then return end
|
||||
if not BD.RIGHT_LOAD and EMT.MAXMAX[2] > DeltaTabY then return end
|
||||
-- se agregato lama speciale non preseleziono mai
|
||||
if sNextHead == 'H22' or EMT.PREVHEAD_H2 == 'H22' then return end
|
||||
-- se la Z di lavoro è più bassa del cambio utensili, verifico quota X (la nostra Y)
|
||||
if EMT.MAXMIN[3] < MinZ1ToChangeH2 then
|
||||
if BD.RIGHT_LOAD and EMT.MAXMAX[2] > ( DeltaTabY + MaxHoOpen + 200) then return end
|
||||
if not BD.RIGHT_LOAD and EMT.MAXMAX[2] > DeltaTabY then return end
|
||||
end
|
||||
end
|
||||
-- se gruppo lama dedicato, senza cambio utensile non si preseleziona mai
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- faccio preselezione ( se sono arrivato qui, vuol dire che posso preselezionare)
|
||||
if nNextHSet == 1 then
|
||||
-- Recupero quota X1 (nostro L2)
|
||||
local dNextX = GetStartMachiningXaxis( nNextMchId)
|
||||
local dNextX
|
||||
-- se sto lavorando con testa 3, la testa 1 preselezionata deve restare in home
|
||||
if nHSet == 3 then
|
||||
dNextX = - EgtGetAxisHomePos( 'X1')
|
||||
-- se il prossimo utensile su testa 1 è utensile lungo, resta in home
|
||||
elseif sNextHead == 'H11' and dNextTotLen > LongTool then
|
||||
dNextX = - EgtGetAxisHomePos( 'X1')
|
||||
-- altrimenti recupero quota X1 (nostro L2)
|
||||
else
|
||||
dNextX = GetStartMachiningXaxis( nNextMchId)
|
||||
end
|
||||
|
||||
-- Emetto preselezione
|
||||
if sNextHead == 'H11' then
|
||||
if dNextTotLen < LongTool then
|
||||
EmitMoveDataHead( 1, { X=dNextX, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos), Fmt=2})
|
||||
else
|
||||
local nNextTc = GetTcForTopHeadTool( sNextTcPos)
|
||||
EmitMoveDataHead( 1, { X=dNextX, B=ParkLongB1, C=EgtIf( nPrevTc ~= 2, ParkLongTc1C1, ParkLongTc2C1), TPos=AdjustTcPos( false, sNextTcPos), Fmt=2})
|
||||
EmitMoveDataHead( 1, { X=dNextX, B=ParkLongB1, C=EgtIf( nNextTc ~= 2, ParkLongTc1C1, ParkLongTc2C1), TPos=AdjustTcPos( false, sNextTcPos), Fmt=2})
|
||||
end
|
||||
EmitMoveStartHead( 1)
|
||||
elseif sNextHead == 'H12' or sNextHead == 'H16' then
|
||||
@@ -2579,9 +2874,11 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, dNextX), B=ParkCSawB1, C=MyParkCSawC1, TPos=AdjustTcPos( false, sNextTcPos, dPosA), Fmt=2})
|
||||
EmitMoveStartHead( 1)
|
||||
end
|
||||
else
|
||||
elseif nNextHSet == 2 then
|
||||
EmitMoveDataHead( 2, { B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos), Fmt=2})
|
||||
EmitMoveStartHead( 2)
|
||||
else
|
||||
; -- non si preseleziona testa 3
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -16,7 +16,7 @@ local sBaseDir = EgtGetCurrMachineDir()
|
||||
if NumericalControl == 'NUM' then
|
||||
error( 'Numerical Control error : NUM not yet managed')
|
||||
elseif NumericalControl == 'TPA' then
|
||||
dofile( sBaseDir .. '\\Common-PF1250.TPA.mlpe')
|
||||
dofile( sBaseDir .. '\\Common_PF1250.TPA.mlpe')
|
||||
else
|
||||
error( 'Numerical Control error : unkwnown type')
|
||||
end
|
||||
@@ -76,10 +76,12 @@ function OnSimulStart()
|
||||
if vTcPos then
|
||||
for i = 1, #vTcPos do
|
||||
local vTools = EgtGetToolsInCurrSetupPos( vTcPos[i])
|
||||
if vTools and vTools[1] and #(vTools[1]) > 0 then
|
||||
EgtLoadTool( vTcPos[i], 1, vTools[1])
|
||||
ShowToolInTcPos( vTcPos[i], true)
|
||||
for j = 1, #( vTools or {}) do
|
||||
if vTools[j] ~= '' then
|
||||
EgtLoadTool( vTcPos[i], j, vTools[j])
|
||||
end
|
||||
end
|
||||
ShowToolInTcPos( vTcPos[i], true)
|
||||
end
|
||||
end
|
||||
-- Carico gli utensili iniziali o di default sulle due teste
|
||||
@@ -106,7 +108,7 @@ function OnSimulStart()
|
||||
AddToCollisionCheck( 'X2', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'C2', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'B2', 'COLLISION', EMT.COLLOBJ)
|
||||
if EgtGetHeadId('H31') then
|
||||
if IsHeadExisting( 3) then
|
||||
AddToCollisionCheck( 'Z3', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'C3', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'B3', 'COLLISION', EMT.COLLOBJ)
|
||||
@@ -121,12 +123,15 @@ function OnSimulStart()
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'COL2'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'CEIL'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TC1'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TC2'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TCR'},
|
||||
{ Grp = 'Z2', Sub = 'COLLISION', Name = 'COL1'},
|
||||
{ Grp = 'Z2', Sub = 'COLLISION', Name = 'CHAIN'},
|
||||
{ Grp = 'Z2', Sub = 'COLLISION', Name = 'COL2'},
|
||||
{ Grp = 'X1', Sub = 'COLLISION', Name = 'STM'}}
|
||||
|
||||
if EgtGetHeadId('H31') then
|
||||
if IsHeadExisting( 3) then
|
||||
table.insert( McdData, { Grp = 'X3', Sub = 'COLLISION', Name = 'STM'})
|
||||
end
|
||||
|
||||
@@ -449,15 +454,19 @@ function OnSimulToolSelect( dPosA)
|
||||
EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
|
||||
-- recupero il gruppo
|
||||
local nSetHead = GetHeadSet( EMT.NEXTHEAD)
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- se fresa o lama su testa 1, reset assi rotanti
|
||||
if nSetHead == 1 then
|
||||
-- se ho la testa 3, la mando a parcheggio
|
||||
if EgtGetHeadId( 'H31') then
|
||||
if IsHeadExisting( 3) then
|
||||
EgtSetAxisPos( 'X3', ParkX3)
|
||||
end
|
||||
if EMT.HEAD == 'H12' then
|
||||
if EMT.HEAD == 'H12' or EMT.HEAD == 'H16' then
|
||||
EgtSetAxisPos( 'Z1', MaxZ1Blade)
|
||||
elseif EMT.HEAD == 'H13' then
|
||||
EgtSetAxisPos( 'Z1', ParkCSawZ1)
|
||||
else
|
||||
EgtSetAxisPos( 'Z1', MaxZ1)
|
||||
end
|
||||
EgtResetAxisPos( 'C1')
|
||||
EgtResetAxisPos( 'B1')
|
||||
@@ -467,6 +476,8 @@ function OnSimulToolSelect( dPosA)
|
||||
end
|
||||
-- se sega a catena, imposto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H13' then
|
||||
-- se prima lavorazione con motosega, parto dalla sua posizione di parcheggio
|
||||
EgtSetAxisPos( 'X1', ParkCSawX1)
|
||||
-- valore dell'asse virtuale
|
||||
dPosA = dPosA or GetNextChainSawingVirtualAxis( EMT.MCHID)
|
||||
-- imposto il valore di A
|
||||
@@ -478,14 +489,29 @@ function OnSimulToolSelect( dPosA)
|
||||
-- Imposto visualizzazione
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
||||
end
|
||||
-- se aggregato foratura multipla, imposto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H14' then
|
||||
-- valore dell'asse virtuale
|
||||
dPosA = dPosA or GetNextMultiDrillVirtualAxis( EMT.MCHID)
|
||||
-- imposto il valore di A
|
||||
EgtSetAxisPos( 'A1', dPosA)
|
||||
-- imposto home dell'asse C1 (A1=0 -> T121, A1=90 -> T124)
|
||||
local MyParkCSawC1 = GetMultiDrillCHomeFromVirtualAxis( dPosA, EMT.TTOTLEN)
|
||||
EmtModifyAxisHome( 'C1', MyParkCSawC1)
|
||||
EgtSetAxisPos( 'C1', MyParkCSawC1)
|
||||
-- Imposto visualizzazione
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
||||
end
|
||||
-- se lama su aggregato da sotto, imposto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H22' then
|
||||
-- se c'era un altro utensile, imposto subito asse virtuale
|
||||
if EMT.PREVHEAD_H2 ~= 'H22' then
|
||||
dPosA = dPosA or GetNextSawingVirtualAxis( EMT.MCHID)
|
||||
end
|
||||
if dPosA then
|
||||
-- valore dell'asse virtuale
|
||||
dPosA = dPosA or GetNextSawingVirtualAxis( EMT.MCHID)
|
||||
-- imposto il valore di A
|
||||
EgtSetAxisPos( 'A2', dPosA)
|
||||
-- imposto home dell'asse C1 (A2=0 -> T101, A2=90 -> T104)
|
||||
-- imposto home dell'asse C1 (A2=0 -> T201, A2=90 -> T204)
|
||||
local MyParkSawC2 = GetSawCHomeFromVirtualAxis( dPosA)
|
||||
EmtModifyAxisHome( 'C2', MyParkSawC2)
|
||||
EgtSetAxisPos( 'C2', MyParkSawC2)
|
||||
@@ -521,7 +547,7 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulToolDeselect( dPrevA)
|
||||
-- se prossimo utensile non cambia e non è sega a catena o lama su rinvio da sotto, esco
|
||||
if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and EMT.NEXTHEAD ~= 'H13' and ( EMT.NEXTHEAD ~= 'H22' or not dPrevA) then return end
|
||||
if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and ( EMT.NEXTHEAD ~= 'H13' or EMT.NEXTHEAD ~= 'H14') and ( EMT.NEXTHEAD ~= 'H22' or not dPrevA) then return end
|
||||
-- deposito utensile
|
||||
EgtOutText( 'Tool change in progress...')
|
||||
-- recupero il gruppo attuale e il successivo
|
||||
@@ -530,8 +556,9 @@ function OnSimulToolDeselect( dPrevA)
|
||||
-- se devo deselezionare testa 3, la mando a parcheggio
|
||||
if nSetHead == 3 then
|
||||
SimulMoveAxis( 'X3', ParkX3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- per testa gruppo 2
|
||||
elseif nNextSetHead == 2 and EMT.PREVTCPOS_H2 then
|
||||
if nNextSetHead == 2 then
|
||||
-- deposito lama su aggregato testa sotto
|
||||
if EMT.PREVHEAD_H2 == 'H22' then
|
||||
-- simulo movimento
|
||||
@@ -557,12 +584,12 @@ function OnSimulToolDeselect( dPrevA)
|
||||
local nPrevTc = GetTcForTopHeadTool( EMT.PREVTCPOS_H1)
|
||||
if EMT.PREVTTOTLEN_H1 < LongTool then
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = EgtIf( nPrevTc ~= 2, ParkX1, ParkTc2X1)
|
||||
local dPosX = EgtIf( nPrevTc ~= 2, ParkTc1X1, ParkTc2X1)
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
if nPrevTc ~= 2 then
|
||||
SimulMoveAxes( 'B1', ParkLongB1, MCH_SIM_STEP.RAPROT, 'C1', ParkLongTc1C1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = ParkX1
|
||||
local dPosX = ParkTc1X1
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxes( 'B1', ParkLongB1, MCH_SIM_STEP.RAPROT, 'C1', ParkLongTc2C1, MCH_SIM_STEP.RAPROT)
|
||||
@@ -574,7 +601,7 @@ function OnSimulToolDeselect( dPrevA)
|
||||
elseif EMT.PREVHEAD_H1 == 'H12' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'X1', ParkTc1X1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile sega a catena
|
||||
elseif EMT.PREVHEAD_H1 == 'H13' then
|
||||
-- simulo movimento
|
||||
@@ -584,12 +611,23 @@ function OnSimulToolDeselect( dPrevA)
|
||||
end
|
||||
SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile aggregato foratore multiplo
|
||||
elseif EMT.PREVHEAD_H1 == 'H14' then
|
||||
-- simulo movimento
|
||||
local ParkC1 = EgtGetAxisHomePos( 'C1')
|
||||
if dPrevA then
|
||||
ParkC1 = GetMultiDrillCHomeFromVirtualAxis( dPrevA)
|
||||
end
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkMultiDrillB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkMultiDrillX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile seconda lama
|
||||
elseif EMT.PREVHEAD_H1 == 'H16' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkTc2X1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
|
||||
-- breve pausa
|
||||
EgtPause( 100)
|
||||
-- visualizzo utensile su TcPos
|
||||
@@ -597,14 +635,28 @@ function OnSimulToolDeselect( dPrevA)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
end
|
||||
-- se passo da testa 1 a 3 o viceversa
|
||||
-- se passo da testa 1 a 3 scarico aggregato
|
||||
if nNextSetHead == 3 then
|
||||
-- deposito eventuale sega a catena
|
||||
if EMT.PREVHEAD_H1 == 'H13' then
|
||||
-- deposito utensile prelevato da posizioni speciali
|
||||
if EMT.TCPOS == 'T101' or EMT.TCPOS == 'T111' or EMT.TCPOS == 'T121' then
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H1, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
|
||||
local sTool, sTcPos, sHead
|
||||
local vTools = EgtGetToolsInCurrSetupPos( DefTcPos1)
|
||||
if vTools and vTools[1] then
|
||||
sTool = vTools[1]
|
||||
sTcPos = DefTcPos1
|
||||
sHead = GetAdjHeadFromTcPos( 1, sTcPos)
|
||||
-- carico l'utensile
|
||||
EgtLoadTool( sHead, 1, sTool)
|
||||
ShowToolInTcPos( DefTcPos1, false)
|
||||
end
|
||||
EMT.PREVTOOL_H1 = sTool
|
||||
EMT.PREVHEAD_H1 = sHead
|
||||
EMT.PREVTCPOS_H1 = DefTcPos1
|
||||
end
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
@@ -613,19 +665,24 @@ function OnSimulToolDeselect( dPrevA)
|
||||
if EMT.NEXTHEAD == 'H11' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = EgtIf( GetTcForTopHeadTool( EMT.NEXTTCPOS) ~= 2, ParkX1, ParkTc2X1)
|
||||
local dPosX = EgtIf( GetTcForTopHeadTool( EMT.NEXTTCPOS) ~= 2, ParkTc1X1, ParkTc2X1)
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile lama
|
||||
elseif EMT.NEXTHEAD == 'H12' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'X1', ParkTc1X1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile sega a catena
|
||||
elseif EMT.NEXTHEAD == 'H13' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', EgtGetAxisHomePos( 'C1'), MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxes( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID, 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo aggregato multi drill
|
||||
elseif EMT.NEXTHEAD == 'H14' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkMultiDrillB1, MCH_SIM_STEP.RAPROT, 'C1', EgtGetAxisHomePos( 'C1'), MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxes( 'X1', ParkMultiDrillX1, MCH_SIM_STEP.RAPID, 'Z1', ParkMultiDrillZ1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile seconda lama
|
||||
elseif EMT.NEXTHEAD == 'H16' then
|
||||
-- simulo movimento
|
||||
@@ -649,8 +706,22 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulMachiningStart()
|
||||
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare
|
||||
if EMT.HEAD == 'H13' and EMT.HEAD == EMT.PREVHEAD_H1 then
|
||||
-- se lavorazione è con gruppo a forare, abilito le altre punte alla lavorazione del VMILL
|
||||
if EMT.HEAD == 'H14' then
|
||||
local OtherTools = EgtGetToolsInCurrSetupPos( 'T121')
|
||||
if OtherTools and #OtherTools > 1 then
|
||||
for i = 1, #OtherTools do
|
||||
if OtherTools[i] ~= '' and OtherTools[i] ~= EMT.TOOL then
|
||||
EmtAddToolForVmill( OtherTools[i], 'H14', i, EMT.VMILL)
|
||||
-- dichiaro utensile per verifica collisioni
|
||||
local nInd = 1011
|
||||
AddToolToCollisionObj( OtherTools[i], 'H14', i, nInd, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
-- se lavorazione attuale e precedente con sega a catena o aggregato foratore multiplo e con angolo A diverso, devo scaricare e ricaricare
|
||||
if ( EMT.HEAD == 'H13' or EMT.HEAD == 'H14') and EMT.HEAD == EMT.PREVHEAD_H1 then
|
||||
local dPrevA = EgtGetAxisPos( 'A1')
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
local dPosA = tonumber( sVal:sub( 4))
|
||||
@@ -660,16 +731,23 @@ function OnSimulMachiningStart()
|
||||
OnSimulToolSelect( dPosA)
|
||||
end
|
||||
end
|
||||
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare
|
||||
-- se lavorazione attuale e precedente con aggregato lama da sotto con angolo A diverso, devo scaricare e ricaricare
|
||||
if EMT.HEAD == 'H22' and EMT.HEAD == EMT.PREVHEAD_H2 then
|
||||
local dPrevA = EgtGetAxisPos( 'A2')
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
local dPosA = tonumber( sVal:sub( 4)) or 0
|
||||
if abs( dPosA - dPrevA) > 1 then
|
||||
ExecParkRoller( nil, nil, nil, nil, false, bAgg)
|
||||
-- setto i valori per la funzione ToolDesel
|
||||
EMT.NEXTHEAD = EMT.HEAD
|
||||
EMT.NEXTTOOL = EMT.TOOL
|
||||
EMT.NEXTEXIT = EMT.EXIT
|
||||
OnSimulToolDeselect( dPrevA)
|
||||
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON)
|
||||
OnSimulToolSelect( dPosA)
|
||||
-- aggiorno dati utensile su testa
|
||||
EMT.TCPOSREAL = 'T' .. AdjustTcPos( false, EMT.TCPOS, dPosA)
|
||||
EMT.PREVTCPOSREAL_H2 = EMT.TCPOSREAL
|
||||
end
|
||||
end
|
||||
-- recupero alcuni dati della lavorazione
|
||||
@@ -717,6 +795,35 @@ function OnSimulMachiningStart()
|
||||
EmtSetLastError( 1211, 'Missing or not active double tool of '..sOldTool)
|
||||
end
|
||||
EgtTdbSetCurrTool( sOldTool)
|
||||
else
|
||||
-- recupero il gruppo
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
if nSetHead ~= 1 and ( EMT.PREVTOOL_H1 and EMT.PREVHEAD_H1) then
|
||||
local nPrevExit_H1 = 1
|
||||
local nInd_H1 = 1001
|
||||
AddToolToCollisionObj( EMT.PREVTOOL_H1, EMT.PREVHEAD_H1, nPrevExit_H1, nInd_H1, true)
|
||||
AddToolHolderToCollisionObj( EMT.PREVTOOL_H1, EMT.PREVHEAD_H1, nPrevExit_H1, nInd_H1 + 1)
|
||||
end
|
||||
if nSetHead ~= 2 and ( EMT.PREVTOOL_H2 and EMT.PREVHEAD_H2) then
|
||||
local nPrevExit_H2 = 1
|
||||
local nInd_H2 = 1011
|
||||
AddToolToCollisionObj( EMT.PREVTOOL_H2, EMT.PREVHEAD_H2, nPrevExit_H2, nInd_H2, true)
|
||||
AddToolHolderToCollisionObj( EMT.PREVTOOL_H2, EMT.PREVHEAD_H2, nPrevExit_H2, nInd_H2 + 1)
|
||||
end
|
||||
if nSetHead ~= 3 and IsHeadExisting( 3) then
|
||||
local nPrevExit_H3 = 1
|
||||
local nInd_H3 = 1001
|
||||
local sHeadName
|
||||
if EgtGetHeadId( 'H39') then
|
||||
sHeadName = 'H39'
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
sHeadName = 'H38'
|
||||
else
|
||||
EmtSetLastError( 1212, "HEAD not managed")
|
||||
end
|
||||
AddToolToCollisionObj( nil, sHeadName, nPrevExit_H3, 1001)
|
||||
AddToolHolderToCollisionObj( nil, sHeadName, nPrevExit_H3, 1002)
|
||||
end
|
||||
end
|
||||
-- se precedente in doppio ma ora solo testa 1 e non in sicurezza
|
||||
if EMT.DOU_TO_ZMAX then
|
||||
@@ -759,18 +866,20 @@ function OnSimulMachiningEnd()
|
||||
EMT.PREVHEAD_H1 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H1 = EMT.TCPOS
|
||||
EMT.PREVTTOTLEN_H1 = EMT.TTOTLEN
|
||||
EMT.PREVTCPOSREAL_H1 = EMT.TCPOSREAL
|
||||
-- per gruppo testa 2
|
||||
elseif nSetHead == 2 then
|
||||
EMT.PREVTOOL_H2 = EMT.TOOL
|
||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
||||
EMT.PREVTTOTLEN_H2 = EMT.TTOTLEN
|
||||
-- per gruppo testa 3 (resetto dati testa 1)
|
||||
EMT.PREVTCPOSREAL_H2 = EMT.TCPOSREAL
|
||||
-- per gruppo testa 3
|
||||
else
|
||||
EMT.PREVTOOL_H3 = nil
|
||||
EMT.PREVHEAD_H3 = nil
|
||||
EMT.PREVTCPOS_H3 = nil
|
||||
EMT.PREVTTOTLEN_H3 = nil
|
||||
EMT.PREVTOOL_H3 = EMT.TOOL
|
||||
EMT.PREVHEAD_H3 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H3 = EMT.TCPOS
|
||||
EMT.PREVTTOTLEN_H3 = EMT.TTOTLEN
|
||||
end
|
||||
|
||||
end
|
||||
@@ -926,10 +1035,21 @@ function OnSimulMoveStart()
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
SimulMoveAxis( 'X1', EgtIf( bXSpec, DeltaTabY, EMT.L2), MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
-- se ero in posizione speciale, prima ruoto poi scendo
|
||||
if bXSpec then
|
||||
local dZPos = max( Z1Home, EMT.L3)
|
||||
SimulMoveAxis( 'Z1', dZPos, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
if abs( dZPos - EMT.L3) > 1 then
|
||||
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
else
|
||||
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
@@ -957,39 +1077,84 @@ function OnSimulMoveStart()
|
||||
local X2Pos = EgtGetAxisPos( 'X2')
|
||||
local B2Pos = EgtGetAxisPos( 'B2')
|
||||
local C2Pos = EgtGetAxisPos( 'C2')
|
||||
if EMT.TOOL ~= EMT.PREVTOOL_H2 then
|
||||
-- calcolo posizione reale
|
||||
EMT.TCPOSREAL = 'T' .. AdjustTcPos( false, EMT.TCPOS, EMT.R3)
|
||||
-- se utensile cambiato (controllo il reale perchè per aggregato dipende come è stato caricato)
|
||||
if EMT.PREVTCPOSREAL_H2 ~= EMT.TCPOSREAL then
|
||||
if EMT.ZMAX then
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
if EMT.HEAD == 'H22' and EMT.PREVHEAD_H2 ~= EMT.HEAD then
|
||||
SimulMoveAxes( 'X2', MinX2, MCH_SIM_STEP.RAPID, 'B2', B2Home, MCH_SIM_STEP.COLLROT, 'C2', C2Home, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.HEAD == 'H22' then
|
||||
SimulMoveAxes( 'X2', ParkSawX2, MCH_SIM_STEP.RAPID, 'B2', 0, MCH_SIM_STEP.COLLROT, 'C2', C2Home, MCH_SIM_STEP.COLLROT)
|
||||
X2Pos = ParkSawX2
|
||||
else
|
||||
SimulMoveAxes( 'X2', SafeX2, MCH_SIM_STEP.RAPID, 'B2', B2Home, MCH_SIM_STEP.COLLROT, 'C2', C2Home, MCH_SIM_STEP.COLLROT)
|
||||
X2Pos = SafeX2
|
||||
end
|
||||
else
|
||||
if EMT.HEAD == 'H22' then
|
||||
SimulMoveAxis( 'X2', ParkSawX2, MCH_SIM_STEP.RAPID)
|
||||
X2Pos = ParkSawX2
|
||||
else
|
||||
SimulMoveAxis( 'X2', SafeX2, MCH_SIM_STEP.RAPID)
|
||||
X2Pos = SafeX2
|
||||
end
|
||||
end
|
||||
SimulMoveAxis( 'Z2', Z2Home, MCH_SIM_STEP.RAPID)
|
||||
-- Porto la X alla giusta quota
|
||||
if X2Pos > ParkMchY2 and ( B2Pos ~= EMT.R2 or C2Pos ~= EMT.R1) then
|
||||
SimulMoveAxis( 'X2', ParkMchY2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
else
|
||||
-- Porto la X alla giusta quota
|
||||
if X2Pos > ParkMchY2 and ( B2Pos ~= EMT.R2 or C2Pos ~= EMT.R1) then
|
||||
SimulMoveAxis( 'X2', ParkMchY2, MCH_SIM_STEP.RAPID)
|
||||
if X2Pos > SafeX2RotAxis and ( B2Pos ~= EMT.R2 or C2Pos ~= EMT.R1) then
|
||||
SimulMoveAxis( 'X2', SafeX2RotAxis, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
else
|
||||
-- solo se è macchina a 3 teste con gruppo truciolatore 4 assi, devo andare prima in Z0
|
||||
if EgtGetHeadId( 'H39') then
|
||||
SimulMoveAxis( 'Z2', Z2Home, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- Porto la X alla giusta quota
|
||||
if X2Pos > ParkMchY2 and ( B2Pos ~= EMT.R2 or C2Pos ~= EMT.R1) then
|
||||
SimulMoveAxis( 'X2', ParkMchY2, MCH_SIM_STEP.RAPID)
|
||||
if EMT.ZMAX and X2Pos > SafeX2RotAxis and ( B2Pos ~= EMT.R2 or C2Pos ~= EMT.R1) then
|
||||
SimulMoveAxis( 'X2', SafeX2RotAxis, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
if EMT.HEAD == 'H22' then
|
||||
SimulMoveAxes( 'B2', EMT.R2, MCH_SIM_STEP.COLLROT, 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
-- se ero a ZMAX, mi sposto in posizione a Z home. Ultimo movimento muove in Z
|
||||
if EMT.ZMAX then
|
||||
SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT, 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
-- altrimenti testa 3
|
||||
else
|
||||
; -- non devo fare alcunchè di speciale
|
||||
else
|
||||
-- testa 4 assi dedicata truciolatore
|
||||
if EgtGetHeadId( 'H39') then
|
||||
if EMT.ZMAX then
|
||||
local MaxZ3 = EgtGetAxisMax( 'Z3')
|
||||
SimulMoveAxes( 'X3', EMT.L2, MCH_SIM_STEP.RAPID, 'Z3', MaxZ3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'Z3', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B3', EMT.R2, MCH_SIM_STEP.COLLROT, 'C3', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
-- testa 5 assi dedicata lama
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
if EMT.ZMAX then
|
||||
local B3Home = EgtGetAxisHomePos( 'B3')
|
||||
local C3Home = EgtGetAxisHomePos( 'C3')
|
||||
SimulMoveAxis( 'X3', SafeX3RotAxis, MCH_SIM_STEP.RAPID)
|
||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
||||
if abs( C3Home - EMT.R1) > 1 or abs( B3Home - EMT.R2) > 1 then
|
||||
EMT.L3 = min( EMT.L3, SafeZ3RotAxis)
|
||||
SimulMoveAxis( 'Z3', SafeZ3RotAxis, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B3', EMT.R2, MCH_SIM_STEP.COLLROT, 'C3', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
if ( EMT.L3 - SafeZ3RotAxis) > 100 * GEO.EPS_SMALL then
|
||||
SimulMoveAxis( 'Z3', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'X3', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
-- si muovono tutti gli assi assieme
|
||||
-- altre configurazioni
|
||||
else
|
||||
EmtSetLastError( 1212, "HEAD not managed")
|
||||
end
|
||||
end
|
||||
end
|
||||
-- se lavorazione split, muovo per riaggancio del carro Y1
|
||||
@@ -1104,6 +1269,8 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulMoveEnd()
|
||||
-- gruppo della testa
|
||||
local nHSet = GetHeadSet( EMT.HEAD)
|
||||
-- rimozione eventuali sfridi
|
||||
if EMT.FLAG == 301 then
|
||||
ExecRemoveScraps()
|
||||
@@ -1148,8 +1315,12 @@ function OnSimulMoveEnd()
|
||||
if EMT.MOVE == 0 and EMT.FLAG == 3 then
|
||||
-- eventuale rimozione sfridi
|
||||
ExecRemoveScraps()
|
||||
-- ricavo prossimo utensile
|
||||
local sNextTool = GetNextTool( EMT.MCHID)
|
||||
-- vado in home se è ultimo movimento ed è ultima lavorazione
|
||||
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool and nHSet == 3) or ( nHSet == 1 and EMT.TTOTLEN > LongTool)
|
||||
-- eseguo
|
||||
ExecMoveZmax( EMT.MCHSPLIT)
|
||||
ExecMoveZmax( EMT.MCHSPLIT, bToXhome)
|
||||
EMT.TO_ZMAX = nil
|
||||
end
|
||||
end
|
||||
@@ -1259,7 +1430,7 @@ function ExecAuxCmd( sCmd, bPathStart)
|
||||
ExecMoveHome( Cmd[2] == '1', EgtIf( bPathStart, false, EMT.MCHSPLIT))
|
||||
elseif Cmd[1] == '11' then
|
||||
local bClose = Cmd[2] ~= '0'
|
||||
if bPathStart and EMT.MCHSPLIT and not EMT.FALL and GetPY2Light() then bClose = false end
|
||||
if bPathStart and EMT.MCHSPLIT and not ( EMT.FALL or EMT.TO_FALL) and GetPY2Light() then bClose = false end
|
||||
ExecMovePY1( bClose)
|
||||
elseif Cmd[1] == '12' then
|
||||
ExecMovePY2( Cmd[2] ~= '0')
|
||||
@@ -1318,7 +1489,9 @@ function ExecStartHome()
|
||||
EgtResetAxisPos( 'C1')
|
||||
EgtResetAxisPos( 'B1')
|
||||
-- Testa 2
|
||||
EgtSetAxisPos( 'X2', SafeX2)
|
||||
local _, sHead, _, _, _, _ = FindFirstToolOnHeadSet( 2)
|
||||
local PosXStart = EgtIf( sHead == 'H22', SafeX2, ParkX2)
|
||||
EgtSetAxisPos( 'X2', PosXStart)
|
||||
EgtSetAxisPos( 'Z2', MinZ2)
|
||||
EgtResetAxisPos( 'C2')
|
||||
EgtResetAxisPos( 'B2')
|
||||
@@ -1327,7 +1500,19 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function ExecMoveHome( bNearV, bMchSplit)
|
||||
-- risalita a Zmax
|
||||
ExecMoveZmax( bMchSplit)
|
||||
ExecMoveZmax( bMchSplit, true)
|
||||
-- se testa sotto e macchina a 3 teste
|
||||
if GetHeadSet( EMT.HEAD) == 2 and IsHeadExisting( 3) then
|
||||
if not SimulMoveAxis( 'X2', EgtIf( EMT.HEAD == 'H22', SafeX2, ParkX2), MCH_SIM_STEP.RAPID) then
|
||||
EgtOutLog( 'Error on MoveHome : X2')
|
||||
end
|
||||
-- se gruppo truciolatore a 4 assi
|
||||
if EgtGetHeadId( 'H39') then
|
||||
if not SimulMoveAxis( 'Z2', ParkInLavZ2, MCH_SIM_STEP.RAPID) then
|
||||
EgtOutLog( 'Error on MoveHome : Z2')
|
||||
end
|
||||
end
|
||||
end
|
||||
EMT.TO_ZMAX = nil
|
||||
-- se richiesto, avvicino i rulli
|
||||
if bNearV then
|
||||
@@ -1341,19 +1526,19 @@ function ExecMoveHome( bNearV, bMchSplit)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecMoveZmax( bMchSplit)
|
||||
function ExecMoveZmax( bMchSplit, bGoToHome)
|
||||
-- set della testa
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- posizioni correnti degli assi testa
|
||||
local CurrX = EgtGetAxisPos( EgtIf( nSetHead == 1, 'X1', 'X2'))
|
||||
local CurrZ = EgtGetAxisPos( EgtIf( nSetHead == 1, 'Z1', 'Z2'))
|
||||
local CurrC = EgtGetAxisPos( EgtIf( nSetHead == 1, 'C1', 'C2'))
|
||||
local CurrB = EgtGetAxisPos( EgtIf( nSetHead == 1, 'B1', 'B2'))
|
||||
local CurrX = EgtGetAxisPos( 'X'..nSetHead)
|
||||
local CurrZ = EgtGetAxisPos( 'Z'..nSetHead)
|
||||
local CurrC = EgtGetAxisPos( 'C'..nSetHead)
|
||||
local CurrB = EgtGetAxisPos( 'B'..nSetHead)
|
||||
-- posizioni home degli assi testa
|
||||
local HomeX = EgtGetAxisHomePos( EgtIf( nSetHead == 1, 'X1', 'X2'))
|
||||
local HomeZ = EgtGetAxisHomePos( EgtIf( nSetHead == 1, 'Z1', 'Z2'))
|
||||
local HomeC = EgtGetAxisHomePos( EgtIf( nSetHead == 1, 'C1', 'C2'))
|
||||
local HomeB = EgtGetAxisHomePos( EgtIf( nSetHead == 1, 'B1', 'B2'))
|
||||
local HomeX = EgtGetAxisHomePos( 'X'..nSetHead)
|
||||
local HomeZ = EgtGetAxisHomePos( 'Z'..nSetHead)
|
||||
local HomeC = EgtGetAxisHomePos( 'C'..nSetHead)
|
||||
local HomeB = EgtGetAxisHomePos( 'B'..nSetHead)
|
||||
-- verifico se necessario ruotare la testa
|
||||
local bRot = ( abs( HomeC - CurrC) > 1 or abs( HomeB - CurrB) > 1)
|
||||
-- se necessario ruotare la testa, allargo i carrelli
|
||||
@@ -1381,6 +1566,9 @@ function ExecMoveZmax( bMchSplit)
|
||||
SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', MyMaxZ1, MCH_SIM_STEP.RAPID)
|
||||
if bGoToHome then
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- salgo in Z sicurezza raddrizzando la B
|
||||
@@ -1410,10 +1598,30 @@ function ExecMoveZmax( bMchSplit)
|
||||
else
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- solo se è macchina a 3 teste con gruppo truciolatore 4 assi, devo stare più alto
|
||||
if EgtGetHeadId( 'H39') then
|
||||
SimulMoveAxis( 'Z2', ParkInLavZ2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti testa 3
|
||||
else
|
||||
SimulMoveAxes( 'Z3', MaxZ3, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B3', ParkB3, MCH_SIM_STEP.COLLROT)
|
||||
if EgtGetHeadId( 'H39') then
|
||||
SimulMoveAxes( 'Z3', MaxZ3, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B3', ParkB3, MCH_SIM_STEP.COLLROT)
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
local MyMaxZ3 = EgtGetAxisMax( 'Z3')
|
||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
||||
if abs( HomeC - CurrC) > 1 or abs( HomeB - CurrB) > 1 then
|
||||
SimulMoveAxis( 'X3', SafeX3RotAxis, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z3', SafeZ3RotAxis, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'C3', HomeC, MCH_SIM_STEP.COLLROT, 'B3', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z3', MyMaxZ3, MCH_SIM_STEP.RAPID)
|
||||
if bGoToHome then
|
||||
SimulMoveAxis( 'X3', ParkX3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
else
|
||||
EmtSetLastError( 1212, "HEAD not managed")
|
||||
end
|
||||
end
|
||||
EMT.ZMAX = true
|
||||
end
|
||||
@@ -1567,7 +1775,7 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
|
||||
local MoveV1 = ParkV1 - PosV1
|
||||
local DiffY1 = MyParkY1 - PosY1
|
||||
local MoveY1 = EgtIf( DiffY1 > 0.1, MoveV1, 0)
|
||||
local TryMoveY1 = ParkV1 - PosT - EgtIf( bSpliCut or EMT.FALL, EMT.LT, 0)
|
||||
local TryMoveY1 = min( ParkV1 - PosT - EgtIf( bSpliCut or EMT.FALL, EMT.LT, 0), MaxY1 - PosY1 - 10)
|
||||
if ( PosT > ParkV2 - ExtraParkV and PosT < ParkV1 and PosY1 + TryMoveY1 < MaxY1) then MoveY1 = max( MoveY1, TryMoveY1) end
|
||||
-- se appena eseguito taglio di separazione
|
||||
if bSpliCut then
|
||||
@@ -1597,7 +1805,7 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
|
||||
local MoveV2 = ParkV2 - PosV2
|
||||
local DiffY2 = MyParkY2 - PosY2
|
||||
local MoveY2 = EgtIf( DiffY2 < -0.1, MoveV2, 0)
|
||||
local TryMoveY2 = ParkV2 - PosT - EMT.LT
|
||||
local TryMoveY2 = max( ParkV2 - PosT - EMT.LT, MinY2 - PosY2 + 10)
|
||||
if ( PosT + EMT.LT < ParkV1 + ExtraParkV and PosT + EMT.LT > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end
|
||||
if not SimulMoveAxes( 'T', PosT + MoveY2, MCH_SIM_STEP.RAPID,
|
||||
'V1', ParkV1, MCH_SIM_STEP.RAPID,
|
||||
@@ -1845,11 +2053,20 @@ 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))
|
||||
-- recupero identificativo della posizione sul TC
|
||||
local TcPosId = EgtGetTcPosId( sTcPos or '')
|
||||
if not TcPosId then return end
|
||||
-- ciclo sulle possibili uscite
|
||||
for i = 1, 100 do
|
||||
-- recupero il gruppo dell'utensile
|
||||
local TcExitId = EgtGetFirstNameInGroup( TcPosId, 'T'..tostring( i))
|
||||
if not TcExitId then break end
|
||||
-- imposto lo stato di visualizzazione
|
||||
EgtSetStatus( TcExitId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF))
|
||||
end
|
||||
-- recupero eventuale gruppo ausiliario da visualizzare/nascondere
|
||||
local TcHSId = EgtGetFirstNameInGroup( TcPosId, sTcPos..'_HS')
|
||||
if TcHSId then EgtSetStatus( TcHSId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -1857,7 +2074,11 @@ function LoadFirstTool( nHSet, sTcPosDef)
|
||||
if nHSet ~= 1 and nHSet ~= 2 then return end
|
||||
EgtUnloadTool( EgtIf( nHSet == 1, 'H11', 'H21'), 1)
|
||||
if GetHeadSetFromTcPos( sTcPosDef) ~= nHSet then return end
|
||||
local sTool, sHead, sTcPos, sTTotLen, sBlockedAxis = FindFirstToolOnHeadSet( nHSet)
|
||||
local sTool, sHead, sTcPos, sTTotLen, sTotDiam, sBlockedAxis = FindFirstToolOnHeadSet( nHSet)
|
||||
-- se primo utensile motosega, non lo carico e visualizzo quello di default
|
||||
if sHead == 'H13' then
|
||||
sTool = nil
|
||||
end
|
||||
if not sTool then
|
||||
local vTools = EgtGetToolsInCurrSetupPos( sTcPosDef)
|
||||
if vTools and vTools[1] then
|
||||
@@ -1869,7 +2090,7 @@ function LoadFirstTool( nHSet, sTcPosDef)
|
||||
if sTool then
|
||||
-- imposto correttamente i dati di testa
|
||||
local OrigEMC = EMC
|
||||
EMC = { HEAD = sHead, TOOL = sTool, TCPOS = sTcPos, TOTLEN = sTTotLen, BLOCKEDAXIS = sBlockedAxis}
|
||||
EMC = { HEAD = sHead, TOOL = sTool, TCPOS = sTcPos, TOTLEN = sTTotLen, TOTDIAM = sTotDiam, BLOCKEDAXIS = sBlockedAxis}
|
||||
OnSetHead()
|
||||
EMC = OrigEMC
|
||||
if sBlockedAxis then
|
||||
@@ -1882,6 +2103,19 @@ function LoadFirstTool( nHSet, sTcPosDef)
|
||||
-- carico l'utensile
|
||||
EgtLoadTool( sHead, 1, sTool)
|
||||
ShowToolInTcPos( sTcPos, false)
|
||||
-- salvo utensili caricati
|
||||
if nHSet == 1 then
|
||||
EMT.PREVTOOL_H1 = sTool
|
||||
EMT.PREVHEAD_H1 = sHead
|
||||
EMT.PREVTCPOS_H1 = sTcPos
|
||||
EMT.PREVTTOTLEN_H1 = sTTotLen
|
||||
-- per gruppo testa 2
|
||||
elseif nHSet == 2 then
|
||||
EMT.PREVTOOL_H2 = sTool
|
||||
EMT.PREVHEAD_H2 = sHead
|
||||
EMT.PREVTCPOS_H2 = sTcPos
|
||||
EMT.PREVTTOTLEN_H2 = sTTotLen
|
||||
end
|
||||
end
|
||||
return sTool
|
||||
end
|
||||
@@ -2295,7 +2529,7 @@ function FindFirstToolOnHeadSet( nHSet)
|
||||
local CurrMachId = EgtGetCurrMachining()
|
||||
local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
||||
-- cerco lavorazione con utensile su gruppo testa indicato
|
||||
local sTool, sHead, sTcPos, sTTotLen, sBlockedAxis
|
||||
local sTool, sHead, sTcPos, sTTotLen, sTotDiam, sBlockedAxis
|
||||
local OpId = EgtGetFirstActiveOperation()
|
||||
while OpId do
|
||||
local nType = EgtGetOperationType( OpId)
|
||||
@@ -2305,9 +2539,15 @@ function FindFirstToolOnHeadSet( nHSet)
|
||||
if EgtTdbSetCurrTool( sTest) then
|
||||
sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||
if GetHeadSet( sHead) == nHSet then
|
||||
sTool = sTest
|
||||
sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
|
||||
-- aggregato lama non si può mai preselezionare e viene sempre scaricato, quindi non sarà mai già caricato
|
||||
if nHSet == 2 and sTcPos == 'T201' then
|
||||
sTcPos = nil
|
||||
break
|
||||
end
|
||||
sTool = sTest
|
||||
sTTotLen = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||
sTotDiam = EgtTdbGetCurrToolParam( MCH_TP.TOTDIAM)
|
||||
sBlockedAxis = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
break
|
||||
end
|
||||
@@ -2320,7 +2560,7 @@ function FindFirstToolOnHeadSet( nHSet)
|
||||
EgtSetCurrMachining( CurrMachId or GDB_ID.NULL)
|
||||
EgtTdbSetCurrTool( CurrTool or '')
|
||||
-- restituisco risultato
|
||||
return sTool, sHead, sTcPos, sTTotLen, sBlockedAxis
|
||||
return sTool, sHead, sTcPos, sTTotLen, sTotDiam, sBlockedAxis
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -2365,6 +2605,33 @@ function GetNextChainSawingVirtualAxis( MchId)
|
||||
return dPosA
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetNextMultiDrillVirtualAxis( MchId)
|
||||
-- recupero la lavorazione successiva
|
||||
local NextMchId
|
||||
if MchId then
|
||||
NextMchId = EgtGetNextActiveOperation( MchId)
|
||||
else
|
||||
NextMchId = EgtGetFirstActiveOperation()
|
||||
end
|
||||
while NextMchId and EgtGetOperationType( NextMchId) == MCH_OY.DISP do
|
||||
NextMchId = EgtGetNextActiveOperation( NextMchId)
|
||||
end
|
||||
-- verifico sia un taglio con sega a catena
|
||||
if EgtGetOperationType( NextMchId) ~= MCH_OY.DRILLING then
|
||||
return nil
|
||||
end
|
||||
-- la imposto come lavorazione corrente
|
||||
EgtSetCurrMachining( NextMchId)
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
local dPosA = GetCurrMultiDrillVirtualAxis()
|
||||
-- ripristino la lavorazione corrente
|
||||
if MchId then
|
||||
EgtSetCurrMachining( MchId)
|
||||
end
|
||||
return dPosA
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetCurrSawingVirtualAxis()
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
@@ -2411,12 +2678,19 @@ function GetStartMachiningXaxis( nMchId)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function IsLastPath( nPathId)
|
||||
return not EgtGetNext( nPathId)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2)
|
||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then
|
||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1))
|
||||
elseif sHead == 'H21' or sHead == 'H22' then
|
||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1))
|
||||
elseif sHead == 'H38' then
|
||||
return ( abs( dAng1 - dAng1p) > 1 or abs( dAng2 - dAng2p) > 1)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -54,6 +54,9 @@ function OnSpecialGetMaxZ()
|
||||
elseif nSetHead == 2 then
|
||||
EMC.R1p = ParkC2
|
||||
EMC.R2p = ParkB2
|
||||
elseif nSetHead == 3 then
|
||||
EMC.R1p = ParkC3
|
||||
EMC.R2p = ParkB3
|
||||
end
|
||||
end
|
||||
local vtT = Vector3d( EMC.TDIR)
|
||||
@@ -74,6 +77,8 @@ function OnSpecialGetMaxZ()
|
||||
EMC.MAXZ = MaxZ1Blade - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130)
|
||||
elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then
|
||||
EMC.MAXZ = ParkZ1 + 200
|
||||
elseif vtTp:getZ() > 0.5 or vtT:getZ() > 0.5 then
|
||||
EMC.MAXZ = ParkZ1 + 100
|
||||
else
|
||||
EMC.MAXZ = ParkZ1 + 1
|
||||
end
|
||||
@@ -92,6 +97,8 @@ function OnSpecialGetMaxZ()
|
||||
EMC.MAXZ = MaxZ1Blade - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130)
|
||||
elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then
|
||||
EMC.MAXZ = ParkZ1 + 200
|
||||
elseif vtTp:getZ() > 0.5 or vtT:getZ() > 0.5 then
|
||||
EMC.MAXZ = ParkZ1 + 100
|
||||
else
|
||||
EMC.MAXZ = ParkZ1 + 1
|
||||
end
|
||||
@@ -111,14 +118,16 @@ function OnSpecialGetMaxZ()
|
||||
local vMZ = {{ Tz=0.85, Ez=390}, { Tz=0.5, Ez=280}, { Tz=-0.01, Ez=160}}
|
||||
EMC.MAXZ = ParkZ2 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||
end
|
||||
elseif EMC.HEAD == 'H38' then
|
||||
EMC.MAXZ = SafeZ3RotAxis
|
||||
end
|
||||
end
|
||||
|
||||
---------------------- OnSpecialMoveZup -----------------------------
|
||||
function OnSpecialMoveZup()
|
||||
|
||||
|
||||
--EgtOutLog( 'OnSpecialMoveZup : ' .. EMC.HEAD .. '.' .. tostring( EMC.EXIT))
|
||||
|
||||
|
||||
-- Inizializzazioni
|
||||
EMC.ERR = 0
|
||||
EMC.MODIF = false
|
||||
@@ -135,7 +144,7 @@ function OnSpecialMoveZup()
|
||||
if EMC.HEAD == 'H11' or EMC.HEAD == 'H21' or EMC.HEAD == 'H22' then
|
||||
;
|
||||
-- se lama
|
||||
else
|
||||
elseif EMC.HEAD == 'H12' or EMC.HEAD == 'H16' then
|
||||
-- riporto i valori tra -179 e + 180
|
||||
local dCheckAxR1 = EMC.R1
|
||||
if dCheckAxR1 < -180 then
|
||||
@@ -180,6 +189,12 @@ function OnSpecialMoveZup()
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif EMC.HEAD == 'H38' then
|
||||
EMC.L3 = SafeZ3RotAxis
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
else
|
||||
; -- non si fa nulla
|
||||
end
|
||||
end
|
||||
|
||||
@@ -194,7 +209,7 @@ local SIC_V = 50 -- sicurezza da testa
|
||||
local MIN_ENG_V = 115 -- ingombro asse Z
|
||||
local MIN_ENG_RACK_V = 161 -- ingombro asse Z con cremagliera
|
||||
local MIN_ENG_XZ2_V = 180 -- ingombro assi XZ sotto
|
||||
local MIN_Z2_FOR_ENG_XZ2_V = 270 -- quota Z2 da cui considerare ingombro assi XZ sotto
|
||||
local MIN_Z2_FOR_ENG_XZ2_V = 250 + EgtIf( MaxZ2 > 1100, 300, 0) -- quota Z2 da cui considerare ingombro assi XZ sotto
|
||||
local AGG_V = MinDeltaYV -- ingombro rulli pressori + sicurezza
|
||||
local MaxLenSmT = 1500 -- massima lunghezza pezzo scaricato con nastri verdi
|
||||
local DIST_Y1MAX_LOAD = 100 -- distanza carrello Y1 da massimo asse al carico
|
||||
@@ -574,7 +589,11 @@ function OnPostApplyMachining()
|
||||
|
||||
-- Verifico flag di separazione e fase di scarico
|
||||
local sNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
|
||||
local bPreSplit = ( false and sNotes:find( 'Presplit', 1, true) ~= nil)
|
||||
|
||||
-- bPreSplit sempre a falso per obbligare a pinzare il pezzo con 1 morsa anche se iniziato il taglio che dividerà grezzo e finito (in genere per sezioni grandi con 2 tagli di lama)
|
||||
-- Tra un taglio e l'altro infatti c'e' inversione del braccio e quindi un'apertura delle rulliere. Se pinzano entrambe le pinze, potrebbero esserci problemi di collisone rulli-morse
|
||||
local bPreSplit = false --( sNotes:find( 'Presplit', 1, true) ~= nil)
|
||||
|
||||
local bSplitting = ( sNotes:find( 'Split', 1, true) ~= nil)
|
||||
local bPreCut = ( sNotes:find( 'Precut', 1, true) ~= nil)
|
||||
local bCutting = ( sNotes:find( 'Cut', 1, true) ~= nil)
|
||||
@@ -655,6 +674,14 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
-- Verifico se lavorazione pareti
|
||||
local bWall = ( EgtGetInfo( EgtGetCurrMachGroup() or GDB_ID.NULL, 'Wall', 'd') == 1)
|
||||
|
||||
-- mi salvo info lavorazione su una lista
|
||||
local AuxInfoMach = {}
|
||||
AuxInfoMach.bPreSplit = bPreSplit
|
||||
AuxInfoMach.bSplitting = bSplitting
|
||||
AuxInfoMach.bPreCut = bPreCut
|
||||
AuxInfoMach.bCutting = bCutting
|
||||
AuxInfoMach.bUnload = bUnload
|
||||
|
||||
-- Assegno flag di pezzo separato dal resto del grezzo
|
||||
SPLIT = IsEndPhase( EMC.PHASE)
|
||||
|
||||
@@ -741,7 +768,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
local dPosT = LoadT
|
||||
local vCmd = SpecCalcLoad( dPosT, dDistFront, max( dDistBack, MinJoin, EMC.LB - ( MaxY1 - MinY1) + 6))
|
||||
EMC.LOAD = true
|
||||
local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
||||
local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
||||
EMC.LOAD = nil
|
||||
if bSplitting and EMC.ERR == 18 then
|
||||
table.insert( vCmd, { 22, dRollBack, -dRollFront})
|
||||
@@ -754,7 +781,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
|
||||
-- Se altrimenti non eseguito SPLIT, eseguo calcoli per carrelli
|
||||
elseif not SPLIT then
|
||||
local vCmd = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
||||
local vCmd = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
||||
-- Se non ci sono spostamenti, confermo i parametri di aggancio e di posizione roller
|
||||
if SpecTestOnlyRemarkInCmds( vCmd) then
|
||||
table.insert( vCmd, { 21, EgtIf( EMC.Y1DELTA, EMC.Y1DELTA, 0), EgtIf( EMC.Y2DELTA, EMC.Y2DELTA, 0)})
|
||||
@@ -883,7 +910,7 @@ function SpecialCalcMachiningEncumbrance( nMchId, bPreCut)
|
||||
EgtSetAxisPos( 'A2', vAxMid[6])
|
||||
end
|
||||
b3Enc = EgtGetBBoxGlob( EgtGetAxisId( 'C2'), GDB_BB.ONLY_VISIBLE)
|
||||
else -- 'H31'
|
||||
else -- testa 3
|
||||
EgtSetAxisPos( 'C3', vAxMid[4])
|
||||
EgtSetAxisPos( 'B3', vAxMid[5])
|
||||
b3Enc = EgtGetBBoxGlob( EgtGetAxisId( 'C3'), GDB_BB.ONLY_VISIBLE)
|
||||
@@ -991,7 +1018,11 @@ function SpecCalcLoad( dPosT, dDistFront, dDistBack)
|
||||
local dNewY1min = max( EMC.LB - dDistBack, MinOther + AggLoad + EMC.HCING + EMC.HOVM)
|
||||
local dNewY1max = min( ( MaxY1 - MinY1) - 5, EMC.LB - MinJoin)
|
||||
if dNewY1min > dNewY1max then return nil end
|
||||
local dNewY1Delta = EgtClamp( BD.CHAR_LOAD_DIST or 3000, 0.75 * dNewY1min + 0.25 * dNewY1max, 0.25 * dNewY1min + 0.75 * dNewY1max)
|
||||
-- minimo posizionamento pinza 1 per permettere scarico del restante
|
||||
local dMinLengthRestToUnload = abs( MinY1) + abs( MinV1) + abs( MaxV2) + abs( MaxY2) + MinJoin + AggLoad + EMC.LT + 10
|
||||
-- calcolo posizionamento con i coefficienti, ma verifico che sia tra il minimo e il massimo pinzabile
|
||||
local dNewY1DeltaMax = EgtClamp( 0.25 * dNewY1min + 0.75 * dNewY1max, dMinLengthRestToUnload, dNewY1max)
|
||||
local dNewY1Delta = EgtClamp( BD.CHAR_LOAD_DIST or 3000, 0.75 * dNewY1min + 0.25 * dNewY1max, dNewY1DeltaMax)
|
||||
local dNewY2Delta = nil
|
||||
local dNewY1 = dPosT + dNewY1Delta
|
||||
local vCmd = {}
|
||||
@@ -1035,7 +1066,7 @@ function SpecCalcLoad( dPosT, dDistFront, dDistBack)
|
||||
end -- SpecAdjustLoad [L]
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
||||
function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
||||
|
||||
local MinFrontJoin = MinJoin + EMC.HCING + EMC.HOVM
|
||||
local MyMinOther = MinOther + EgtIf( EMC.CNT == 1, AggLoad, 0)
|
||||
@@ -1069,11 +1100,19 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
||||
WorkTab.dY1DeltaMaxF = min( EMC.LB - MinJoin, MaxY1 + dDistFront + dRollFront + AGG_V)
|
||||
WorkTab.dY2DeltaMinF = nil
|
||||
WorkTab.dY2DeltaMaxF = nil
|
||||
if dY1DeltaMaxSP then WorkTab.dY1DeltaMaxF = min( WorkTab.dY1DeltaMaxF, dY1DeltaMaxSP) end
|
||||
WorkTab.dV1PosF = dRollBack
|
||||
WorkTab.bV1CloseF = false
|
||||
WorkTab.dV2PosF = -dRollFront
|
||||
WorkTab.bV2CloseF = false
|
||||
|
||||
-- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
|
||||
if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
|
||||
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF)
|
||||
end
|
||||
end
|
||||
|
||||
-- verifico validità intervallo ammesso per Y1
|
||||
if WorkTab.dY1DeltaMinF > WorkTab.dY1DeltaMaxF + 10 * GEO.EPS_SMALL then
|
||||
EMC.ERR = 18
|
||||
@@ -1110,6 +1149,13 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
||||
WorkTab.dV2PosF = -dRollFront
|
||||
WorkTab.bV2CloseF = false
|
||||
|
||||
-- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
|
||||
if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
|
||||
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF)
|
||||
end
|
||||
end
|
||||
|
||||
-- verifico validità intervallo ammesso per Y1
|
||||
if WorkTab.dY1DeltaMinF > WorkTab.dY1DeltaMaxF + 10 * GEO.EPS_SMALL then
|
||||
EMC.ERR = 18
|
||||
@@ -1988,7 +2034,7 @@ local function PosY2Y1B( TabI, vCmd)
|
||||
if TabI.dY2PosI > MinY2 and
|
||||
TabI.dY2PosI > TabI.dTPosI + MinJoin + EMC.HOVM + EMC.HCING - 10 * GEO.EPS_SMALL then
|
||||
-- allontanamento morse, trascinamento trave con Y2
|
||||
MaxDispl( TabI, vCmd, 'M2')
|
||||
MaxDispl( TabI, vCmd, 'M2')
|
||||
else
|
||||
-- accentramento morse, trascinamento trave con Y1
|
||||
MaxDispl( TabI, vCmd, 'M3')
|
||||
+3
-3
@@ -25,9 +25,9 @@ REM copio i sorgenti nel percorso temporaneo per i compilati
|
||||
ROBOCOPY . %fullPathSource%\bin\%machineName%\ /E /XF "Compile.bat" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt"
|
||||
|
||||
REM copio i file compilati nel percorso temporaneo per i compilati
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-PF1250.mlpe Common-PF1250.mlpe
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-PF1250.mlse Common-PF1250.mlse
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-PF1250.TPA.mlpe Common-PF1250.TPA.mlpe
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common_PF1250.mlpe Common_PF1250.mlpe
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common_PF1250.mlse Common_PF1250.mlse
|
||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common_PF1250.TPA.mlpe Common_PF1250.TPA.mlpe
|
||||
|
||||
REM comprimo i file compilati in uno zip pronto per essere distribuito
|
||||
tar.exe acvf %fullPathZip%\%machineName%.zip -C %fullPathSource%\bin\ %machineName%\*.*
|
||||
|
||||
+69
-64
@@ -22,48 +22,16 @@
|
||||
-- 2022/07/01 ver 2.4g1 Migliorata gestione AggLoad in simulazione e generazione.
|
||||
-- 2022/11/03 ver 2.4k1 Aggiunta gestione distanza sega a catena da parametro utensile.
|
||||
-- 2023/02/21 ver 2.5b1 Corretto posizionamento COLLISION di V1 e V2.
|
||||
-- 2023/05/09 ver 2.5e2 Correzione riposizionamento carrelli su split con pezzi a caduta.
|
||||
-- 2023/05/18 ver 2.5e3 Corretta gestione TC vari.
|
||||
-- 2023/06/28 ver 2.5f1 Migliorie e correzioni nel posizionamento carrelli per feature di coda lunghe (Rossini).
|
||||
-- 2023/09/29 ver 2.5i1 In BeamData e mlde aggiunta la lettura di alcuni parametri da Ts3Data.
|
||||
-- 2023/10/12 ver 2.5j1 Sistemazioni per testa sotto più bassa quando in home.
|
||||
-- 2023/10/29 ver 2.5j2 Correzione per calcolo se V1 e V2 vanno lasciati aperti e quindi in parcheggio (GetVnToCloseTPA).
|
||||
-- 2023/11/21 ver 2.5k1 Gestione lavorazione in doppio da PF1250rl
|
||||
-- Gestione seconda lama da PF1250rl
|
||||
-- Piccole modifiche per allineamento a PF1250rl
|
||||
-- 2023/12/04 ver 2.5l1 In dinamica pinze risultati finali non più accelerazioni ma tempi rampa in ms (P7, P8 e P9 di M115).
|
||||
-- 2023/12/05 ver 2.5l2 In dinamica pinze corretto typo in nomi variabili.
|
||||
-- 2023/12/05 ver 2.5l3 In M111 si scrive il DeltaY (distanza testa trave - pinzaY1) come commento
|
||||
-- 2023/12/05 ver 2.5l4 Corretto segno calcolo posizione seconda testa in lavorazioni in doppio
|
||||
-- 2023/12/11 ver 2.5l5 Allineamento movimento in zmax come PF1250rl
|
||||
-- 2024/01/18 ver 2.6a1 Correzione gestione apertura/chiusura rulli sul fine barra (#1630) e in generale.
|
||||
-- 2024/01/22 ver 2.6a2 Modificato solido collisionee asse Z
|
||||
-- Prima versione post common PF1250
|
||||
-- Allineamento con common ver. 2.6a3
|
||||
-- 2024/01/25 ver 2.6a3 Allineamento con common ver. 2.6a4
|
||||
-- 2024/02/07 ver 2.6b1 Allineamento con common ver. 2.6b1
|
||||
-- 2024/02/07 ver 2.6b2 Gestione motosega lunga in MLDE e nuova funzione calcolo asse A per nuovi script
|
||||
-- 2024/02/09 ver 2.6b3 In BeamData aggiunta funzione GetBlockedAxis che sostituisce la GetChainSawBlockedAxis.
|
||||
-- 2024/02/23 ver 2.6b4 Allineamento con common ver. 2.6b4; in mlde aggiunte chiamate EgtAddToPackagePath
|
||||
-- 2024/02/29 ver 2.6c1 Allineamento con common ver. 2.6c1
|
||||
-- 2024/03/04 ver 2.6c2 Modificato log con nome macchina
|
||||
-- Allineamento con common ver. 2.6c2
|
||||
-- 2024/03/14 ver 2.6c3 Allineamento con common ver. 2.6c4
|
||||
-- 2024/03/27 ver 2.6c4 Allineamento con common ver. 2.6c5
|
||||
-- Modificate collisioni traversa. Ora non comprende carro X1 che ha il proprio
|
||||
-- Aggiunto variabile 'ParkLongB1' posizione parcheggio per punte lunghe
|
||||
-- 2024/04/12 ver 2.6d1 Allineamento con common ver. 2.6d1
|
||||
-- Aggiunto parametro ForceToCloseRollersGate
|
||||
-- 2024/04/23 ver 2.6d2 Allineamento con common ver. 2.6d2
|
||||
-- Aggiunta variabile MaxZ1Blade e relativa gestione
|
||||
-- Aggiunto solido collisione in NGE
|
||||
|
||||
-------------------------------------
|
||||
-- NOTE VERSIONI SUCCESSIVE IN GIT --
|
||||
-------------------------------------
|
||||
|
||||
-- Intestazioni
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
PP_VER = '2.6d2'
|
||||
PP_VER = '2.7b2'
|
||||
PP_NVER = '2.7.2.2'
|
||||
MIN_MACH_VER = '2.5k1'
|
||||
MACH_NAME = 'Essetre-PF1250'
|
||||
|
||||
@@ -128,7 +96,7 @@ SawB2Offs = 0
|
||||
MinX1 = 0
|
||||
MaxX1 = 3300
|
||||
MinZ1 = -1550
|
||||
MaxZ1 = -100
|
||||
MaxZ1 = 0
|
||||
MaxZ1Blade = -100
|
||||
MinC1 = -275
|
||||
MaxC1 = 275
|
||||
@@ -137,6 +105,7 @@ MaxB1 = 127
|
||||
MinB1b = -119
|
||||
MaxB1b = 119
|
||||
ParkX1 = 250
|
||||
ParkTc1X1 = 250
|
||||
ParkTc2X1 = 3100
|
||||
ParkZ1 = -545
|
||||
ParkC1 = -90
|
||||
@@ -164,8 +133,11 @@ MinC2 = -275
|
||||
MaxC2 = 275
|
||||
MinB2 = -127
|
||||
MaxB2 = 127
|
||||
MinB2b = -119
|
||||
MaxB2b = 119
|
||||
ParkX2 = -100
|
||||
SafeX2 = -400
|
||||
SafeX2RotAxis = -1000
|
||||
ParkZ2 = 0
|
||||
ParkC2 = -90
|
||||
ParkB2 = -90
|
||||
@@ -173,12 +145,12 @@ MinDistToolX1X2 = 40
|
||||
TurnerOffs = 120.0
|
||||
AggLoad = 50
|
||||
DeltaTabY = 2467.0
|
||||
DeltaTabZ = -1137.5 + MillOffs -- per TPA : -1128.0 + MillOffs -- per NUM : -958.0
|
||||
DeltaTabZ = -1128 + MillOffs -- per TPA : -1128.0 + MillOffs -- per NUM : -958.0
|
||||
DeltaRulliTraveZ = -903
|
||||
DimTabY = 1400
|
||||
DimTabX = 24000
|
||||
Delta2TabY = -967.3
|
||||
Delta2TabZ = 395.2 - Mill2Offs -- per TPA : 378.0 - Mill2Offs -- per NUM : 208.0
|
||||
Delta2TabY = -1185.9
|
||||
Delta2TabZ = 693 - Mill2Offs -- per TPA : 378.0 - Mill2Offs -- per NUM : 208.0
|
||||
Head2X = 0
|
||||
Head2Y = DeltaTabY - Delta2TabY
|
||||
Head2Z = DeltaTabZ - Delta2TabZ
|
||||
@@ -190,11 +162,12 @@ MaxForzaPinze = 1000 -- [Kgf]
|
||||
Tc2Active = true
|
||||
SecondSaw = true
|
||||
SecondChain = false -- magazzino seconda sega a catena
|
||||
TcSpecialTools = false -- magarzzino per utensili speciali. In genere truciolatore
|
||||
TcSpecialTools = false -- magazzino per utensili speciali. In genere truciolatore
|
||||
TcAggreBladeUnder = false -- lama su aggregato per testa da sotto
|
||||
EmitAccClamps = true
|
||||
WriteAllCoordsOnFirstM101 = true
|
||||
ForceToCloseRollersGate = false
|
||||
Motors23KW = false
|
||||
|
||||
-- Aggiornamento con dati da TechnoEssetre7
|
||||
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PF1250.data"
|
||||
@@ -236,6 +209,8 @@ if EgtExistsFile( sDataBeam) then
|
||||
if Machine.Offsets.C2_POS then MaxC2 = Machine.Offsets.C2_POS end
|
||||
if Machine.Offsets.B2_NEG then MinB2 = Machine.Offsets.B2_NEG end
|
||||
if Machine.Offsets.B2_POS then MaxB2 = Machine.Offsets.B2_POS end
|
||||
if Machine.Offsets.B2_NEG1 then MinB2b = Machine.Offsets.B2_NEG1 end
|
||||
if Machine.Offsets.B2_POS1 then MaxB2b = Machine.Offsets.B2_POS1 end
|
||||
if Machine.Offsets.MIN_Y1 then MinMchY1 = Machine.Offsets.MIN_Y1 end
|
||||
if Machine.Offsets.MAX_Y1 then MaxMchY1 = Machine.Offsets.MAX_Y1 end
|
||||
if Machine.Offsets.PARK_Y1 then ParkMchY1 = Machine.Offsets.PARK_Y1 end
|
||||
@@ -271,6 +246,9 @@ if EgtExistsFile( sDataBeam) then
|
||||
if Machine.Offsets.MINPRESS then MinForzaPinze = Machine.Offsets.MINPRESS end
|
||||
if Machine.Offsets.MAXPRESS then MaxForzaPinze = Machine.Offsets.MAXPRESS end
|
||||
if Machine.Offsets.CHIUDI_PINZE_2_3_SCAMBIO then ForceToCloseRollersGate = Machine.Offsets.CHIUDI_PINZE_2_3_SCAMBIO == 1 end
|
||||
if Machine.Offsets.WOOD_DENSITY then WoodDensity = Machine.Offsets.WOOD_DENSITY end
|
||||
if Machine.Offsets.MOTORS23KW then Motors23KW = Machine.Offsets.MOTORS23KW == 1 end
|
||||
|
||||
-- aggiustamenti
|
||||
MinY1 = MinV1 + MinDeltaYV
|
||||
MaxY1 = MaxMchY1
|
||||
@@ -281,7 +259,7 @@ if EgtExistsFile( sDataBeam) then
|
||||
ParkV2 = MinV2
|
||||
ParkY2 = ParkV2 - MinDeltaYV
|
||||
UnloadSmT = UnloadT - 300
|
||||
MaxZ1Blade = min( MaxZ1Blade, MaxZ1)
|
||||
MaxZ1Blade = min( MaxZ1Blade, -100)
|
||||
Head2Y = DeltaTabY - Delta2TabY
|
||||
Head2Z = DeltaTabZ - Delta2TabZ
|
||||
ParkCSawZ1 = min( ParkCSawZ1, MaxZ1)
|
||||
@@ -289,6 +267,7 @@ if EgtExistsFile( sDataBeam) then
|
||||
end
|
||||
end
|
||||
SecondSaw = ( SecondSaw and Tc2Active)
|
||||
local vtOffset23KW = Vector3d( 0, 0, EgtIf( Motors23KW, 37, 0))
|
||||
|
||||
EmtGeneral {
|
||||
File='Essetre-PF1250.nge',
|
||||
@@ -298,9 +277,11 @@ EmtGeneral {
|
||||
ExitMaxAdjust = 300,
|
||||
ExitMaxRotAdj = 0.5,
|
||||
AngDeltaMinForHome = 80,
|
||||
Special = 'Common-PF1250.mlse',
|
||||
Processor = 'Common-PF1250.mlpe'}
|
||||
local sBaseAux = {'BASE/SOLID', 'BASE/CONVOYER', 'BASE/COLLISION', 'BASE/TC1', 'BASE/TCR', 'BASE/TC3'}
|
||||
Special = 'Common_PF1250.mlse',
|
||||
Processor = 'Common_PF1250.mlpe'}
|
||||
-- in base alla corsa macchina, si carica la rulliera di carico/scarico appropriata
|
||||
local sGeomConvoyer = EgtIf( MaxY1 > 6500, '_8M', '_5M')
|
||||
local sBaseAux = {'BASE/SOLID', 'BASE/CONVOYER'..sGeomConvoyer, 'BASE/COLLISION', 'BASE/TC1', 'BASE/TCR', 'BASE/TC3'}
|
||||
if Tc2Active then table.insert( sBaseAux, 5, 'BASE/TC2') end
|
||||
local BaseId = EmtBase {
|
||||
Name = 'Base',
|
||||
@@ -319,7 +300,7 @@ local X1Id = EmtAxis {
|
||||
Geo = 'X1_AXIS/GEO',
|
||||
Aux = {'X1_AXIS/SOLID', 'X1_AXIS/COLLISION'}}
|
||||
-- *** Testa 1 ***
|
||||
EmtAxis {
|
||||
local Z1Id = EmtAxis {
|
||||
Name = 'Z1',
|
||||
Parent = 'X1',
|
||||
Token = 'Z',
|
||||
@@ -339,8 +320,8 @@ EmtAxis {
|
||||
Pos = Point3d(0.0,0.0,503.0),
|
||||
Stroke = {MinC1, MaxC1},
|
||||
Home = ParkC1,
|
||||
Geo = 'C1_AXIS/GEO',
|
||||
Aux = {'C1_AXIS/SOLID', 'C1_AXIS/COLLISION'}}
|
||||
Geo = EgtIf( Motors23KW, 'C1_AXIS_23KW/GEO', 'C1_AXIS/GEO'),
|
||||
Aux = {EgtIf( Motors23KW, 'C1_AXIS_23KW/SOLID', 'C1_AXIS/SOLID'), EgtIf( Motors23KW, 'C1_AXIS_23KW/COLLISION', 'C1_AXIS/COLLISION')}}
|
||||
EmtAxis {
|
||||
Name = 'B1',
|
||||
Parent = 'C1',
|
||||
@@ -350,8 +331,8 @@ EmtAxis {
|
||||
Pos = Point3d(-108.4,0.0,MillOffs),
|
||||
Stroke = {MinB1, MaxB1},
|
||||
Home = ParkB1,
|
||||
Geo = 'B1_AXIS/GEO',
|
||||
Aux = {'B1_AXIS/SOLID', 'B1_AXIS/COLLISION'}}
|
||||
Geo = EgtIf( Motors23KW, 'B1_AXIS_23KW/GEO', 'B1_AXIS/GEO'),
|
||||
Aux = {EgtIf( Motors23KW, 'B1_AXIS_23KW/SOLID', 'B1_AXIS/SOLID'), EgtIf( Motors23KW, 'B1_AXIS_23KW/COLLISION', 'B1_AXIS/COLLISION')}}
|
||||
-- Frese
|
||||
local H11Id = EmtHead {
|
||||
Name = 'H11',
|
||||
@@ -432,7 +413,7 @@ local Z2Id = EmtAxis {
|
||||
Token = 'Z',
|
||||
Type = MCH_AT.LINEAR,
|
||||
Dir = Z_AX(),
|
||||
Pos = Point3d(291.0,-140.1,-2056.3),
|
||||
Pos = Point3d(291.0,-140.1,-2356.3),
|
||||
Stroke = {MinZ2, MaxZ2},
|
||||
Home = ParkZ2,
|
||||
Invert = true,
|
||||
@@ -444,7 +425,7 @@ local X2Id = EmtAxis {
|
||||
Token = 'X',
|
||||
Type = MCH_AT.LINEAR,
|
||||
Dir = Y_AX(),
|
||||
Pos = Point3d(115.8,3065.9,-1738.0),
|
||||
Pos = Point3d(115.8,3065.9,-2038.0),
|
||||
Stroke = {MinX2, MaxX2},
|
||||
Home = ParkX2,
|
||||
Geo = 'X2_AXIS/GEO',
|
||||
@@ -458,8 +439,8 @@ local C2Id = EmtAxis {
|
||||
Pos = Point3d( Head2X, Head2Y, Head2Z-485),
|
||||
Stroke = {MinC2, MaxC2},
|
||||
Home = ParkC2,
|
||||
Geo = 'C2_AXIS/GEO',
|
||||
Aux = {'C2_AXIS/SOLID', 'C2_AXIS/COLLISION'}}
|
||||
Geo = EgtIf( Motors23KW, 'C2_AXIS_23KW/GEO', 'C2_AXIS/GEO'),
|
||||
Aux = {EgtIf( Motors23KW, 'C2_AXIS_23KW/SOLID', 'C2_AXIS/SOLID'), EgtIf( Motors23KW, 'C2_AXIS_23KW/COLLISION', 'C2_AXIS/COLLISION')}}
|
||||
local B2Id = EmtAxis {
|
||||
Name = 'B2',
|
||||
Parent = 'C2',
|
||||
@@ -469,14 +450,15 @@ local B2Id = EmtAxis {
|
||||
Pos = Point3d( Head2X, Head2Y, Head2Z-Mill2Offs),
|
||||
Stroke = {MinB2, MaxB2},
|
||||
Home = ParkB2,
|
||||
Geo = 'B2_AXIS/GEO',
|
||||
Aux = {'B2_AXIS/SOLID', 'B2_AXIS/COLLISION'}}
|
||||
local vtMoveZ2 = Vector3d( 0, 0, Head2Z + 1181.0)
|
||||
EgtMove( EgtGetFirstNameInGroup( Z2Id, 'SOLID'), vtMoveZ2, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( Z2Id, 'COLLISION'), vtMoveZ2, GDB_RT.GLOB)
|
||||
local vtMoveX2 = Vector3d( 0, Head2Y - 3635.9, Head2Z + 1181.0)
|
||||
EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), vtMoveX2, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( X2Id, 'COLLISION'), vtMoveX2, GDB_RT.GLOB)
|
||||
Geo = EgtIf( Motors23KW, 'B2_AXIS_23KW/GEO', 'B2_AXIS/GEO'),
|
||||
Aux = {EgtIf( Motors23KW, 'B2_AXIS_23KW/SOLID', 'B2_AXIS/SOLID'), EgtIf( Motors23KW, 'B2_AXIS_23KW/COLLISION', 'B2_AXIS/COLLISION')}}
|
||||
|
||||
local vtMoveZ2 = Vector3d( 0, 0, Head2Z + 1481.0)
|
||||
EgtMove( EgtGetFirstNameInGroup( Z2Id, 'SOLID'), vtMoveZ2 - vtOffset23KW, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( Z2Id, 'COLLISION'), vtMoveZ2 - vtOffset23KW, GDB_RT.GLOB)
|
||||
local vtMoveX2 = Vector3d( 0, Head2Y - 3635.9, Head2Z + 1481.0)
|
||||
EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), vtMoveX2 - vtOffset23KW, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( X2Id, 'COLLISION'), vtMoveX2 - vtOffset23KW, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( C2Id, 'SOLID'), vtMoveX2, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( C2Id, 'COLLISION'), vtMoveX2, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( B2Id, 'SOLID'), vtMoveX2, GDB_RT.GLOB)
|
||||
@@ -819,8 +801,10 @@ EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC3') or GDB_ID.NULL, vtMovB, GDB_RT.G
|
||||
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TCR') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( X1Id, 'SOLID'), vtMovB, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( X1Id, 'COLLISION'), vtMovB, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( Z1Id, 'SOLID'), vtOffset23KW, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( Z1Id, 'COLLISION'), vtOffset23KW, GDB_RT.GLOB)
|
||||
local vtMove = Vector3d( 0, ( DeltaTabY - 2450.0), ( DeltaTabZ + 958.0))
|
||||
EgtMove( EgtGetFirstNameInGroup( BaseId, 'CONVOYER'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( BaseId, 'CONVOYER'..sGeomConvoyer), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( Y1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( PY1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||
EgtMove( EgtGetFirstNameInGroup( Y2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||
@@ -895,6 +879,7 @@ function OnSetHead()
|
||||
local CSawPosA = GetCurrChainSawingVirtualAxis()
|
||||
EmtModifyAxisHome( 'X1', ParkCSawX1)
|
||||
EmtModifyAxisHome( 'Z1', GetChainSawZHomeFromVirtualAxis( CSawPosA, EMC.TOTLEN))
|
||||
EmtModifyAxisStroke( 'Z1', {MinZ1, MaxZ1})
|
||||
EmtModifyAxisStroke( 'C1', {MinC1, MaxC1})
|
||||
EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( CSawPosA, EMC.TOTLEN))
|
||||
EmtModifyAxisHome( 'B1', EgtIf( EMC.TOTLEN < MinLengthLongCSaw, ParkCSawB1, ParkLongCSawB1))
|
||||
@@ -908,6 +893,12 @@ function OnSetHead()
|
||||
EmtModifyAxisHome( 'C1', ParkC1)
|
||||
EmtModifyAxisHome( 'B1', ParkB1)
|
||||
EmtModifyAxisDirection( 'B1', Vector3d( cos( Saw2C1Offs), sin( Saw2C1Offs), 0))
|
||||
elseif EMC.HEAD == 'H21' then
|
||||
if not EMC.TOTDIAM or EMC.TOTDIAM > 300 then
|
||||
EmtModifyAxisStroke( 'B2', {MinB2b, MaxB2b})
|
||||
else
|
||||
EmtModifyAxisStroke( 'B2', {MinB2, MaxB2})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -960,6 +951,20 @@ function GetHeadSetFromTcPos( sTcPos)
|
||||
return 0, 0
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione che ritorna bool per dire se esiste o meno al testa richiesta
|
||||
function IsHeadExisting( nHeadSet)
|
||||
if nHeadSet == 1 then
|
||||
return H11Id ~= nil
|
||||
elseif nHeadSet == 2 then
|
||||
return H21Id ~= nil
|
||||
elseif nHeadSet == 3 then
|
||||
return H31Id ~= nil
|
||||
else
|
||||
return ''
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione che ritorna il nome della testa in base alla posizione utensile (ATT: deve rispecchiare il setup)
|
||||
function GetAdjHeadFromTcPos( nHeadSet, sTcPos)
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,50 @@
|
||||
; Commento per evitare BOM con UTF-8
|
||||
;Index = Type, Description, Default Value
|
||||
; Type : b=boolean, d=double, l=lenght, s=string
|
||||
|
||||
[Drilling]
|
||||
|
||||
[Sawing]
|
||||
|
||||
[Milling]
|
||||
0=d,MaxElev,0
|
||||
1=d,OutRaw,0
|
||||
2=d,SideElev,0
|
||||
3=d,TrimExt,0
|
||||
4=sr,VtFaceUse,0,0,0
|
||||
|
||||
[Pocketing]
|
||||
0=d,MaxElev,0
|
||||
1=b,Open,0
|
||||
2=d,OpenMinSave,0
|
||||
3=d,OpenOutRaw,0
|
||||
4=d,MaxOptSize,0
|
||||
|
||||
[Mortising]
|
||||
0=d,MaxElev,0
|
||||
|
||||
[Chiseling]
|
||||
|
||||
[SawRoughing]
|
||||
|
||||
[SawFinishing]
|
||||
|
||||
[GenMachining]
|
||||
0=l,LinTol,0.1
|
||||
1=l,MaxLen,2
|
||||
2=s,Type,ZigZag
|
||||
3=d,SideAng,90
|
||||
4=l,Step,10
|
||||
5=l,OffsProj,0
|
||||
6=l,LiTang,0
|
||||
7=l,LiOrth,0
|
||||
8=l,LiElev,0
|
||||
9=l,LoTang,0
|
||||
10=l,LoOrth,0
|
||||
11=l,LoElev,0
|
||||
12=b,DirFromGuide,1
|
||||
|
||||
[SurfRoughing]
|
||||
|
||||
[SurfFinishing]
|
||||
0=b,SkipMaxDown,1
|
||||
@@ -0,0 +1,41 @@
|
||||
; Commento per evitare BOM con UTF-8
|
||||
; Index, Type, Description, Value
|
||||
; Index = 0,1,..,n
|
||||
; Type : d=double, l=lenght, s=string, b=boolean, dr=double recalc, sr= string recalc, lr=lenght recalc, br=boolean recalc, th=toolholder
|
||||
; Description : STEP, SIDESTEP, ...
|
||||
|
||||
[DRILL_STD]
|
||||
0=th,TH,
|
||||
1=d,STEP
|
||||
2=s,DOUBLE
|
||||
|
||||
[SAW_STD]
|
||||
0=th,TH,
|
||||
1=d,STEP
|
||||
2=d,SIDESTEP
|
||||
3=b,LONGCUT
|
||||
|
||||
[SAW_FLAT]
|
||||
0=th,TH,
|
||||
1=d,STEP
|
||||
2=d,SIDESTEP
|
||||
3=b,LONGCUT
|
||||
|
||||
[MILL_STD]
|
||||
0=th,TH,
|
||||
1=d,STEP
|
||||
2=d,SIDESTEP
|
||||
3=d,SIDEDEPTH
|
||||
4=s,DOUBLE
|
||||
|
||||
[MILL_NOTIP]
|
||||
0=th,TH,
|
||||
1=d,STEP
|
||||
2=d,SIDESTEP
|
||||
3=d,SIDEDEPTH
|
||||
4=s,DOUBLE
|
||||
|
||||
[MORTISE_STD]
|
||||
0=b,MORTISE
|
||||
1=d,STEP
|
||||
2=d,SIDESTEP
|
||||
+125
@@ -1,5 +1,130 @@
|
||||
==== Common_PF1250 Update Log ====
|
||||
|
||||
Versione 2.7b2 (04/02/2025)
|
||||
- (SIM-GEN) Piccola modifica nel calcolo posizione dei rulli di pinzaggio.
|
||||
|
||||
Versione 2.7b1 (03/02/2025)
|
||||
- (SIM) Corretta simulazioen che non mandava testa in home in caso di utensile lungo. Generazione era già ok. Ticket#2280
|
||||
|
||||
Versione 2.7a2 (28/01/2025)
|
||||
- (SIM-GEN) In MLSE aggiunta piccola correzione quota Z in caso di direzione Z tra 0.5 e 0.707.
|
||||
|
||||
Versione 2.7a1 (17/01/2025)
|
||||
- (GEN) Piccola correzione posizione X in preselezione utensile
|
||||
- (GEN) Corretto primo punto X preselezione utensile. Ticket#2183 e #2250
|
||||
|
||||
Versione 2.6l7 (19/12/2024)
|
||||
- (SIM) HOTFIX : corretto posizione Z zero alla selezione dell'utensile in caso di motosega. Ticket#2235
|
||||
|
||||
Versione 2.6l6 (18/12/2024)
|
||||
- (MLDE-SIM-GEN) Aggiunta variabile 'SafeX2RotAxis' in sostituzione della 'ParkMchY2' che era usata impropriamente
|
||||
|
||||
Versione 2.6l5 (17/12/2024)
|
||||
- (SIM) Corretta posizione iniziale testa 2. Ticket#2228
|
||||
|
||||
Versione 2.6l4 (16/12/2024)
|
||||
- (SIM-GEN) In MLSE ripristinati vecchi valori indici calcolo Z massima. In alcuni casi peggioravano la situazione.
|
||||
|
||||
Versione 2.6l3 (16/12/2024)
|
||||
- (SIM) Corretto scarico utensile se aggregato. Se non presente utensile di default, non seleziona nulla.
|
||||
- (SIM-GEN) In MLSE ritoccati indici calcolo Z massima. Ticket#2210
|
||||
|
||||
Versione 2.6l2 (13/12/2024)
|
||||
- (SIM) Corretta chiamata calcolo asse virtuale
|
||||
|
||||
Versione 2.6l1 (13/12/2024)
|
||||
- (SIM) Gestione caricamento utensili in caso di testa con uscita multipla.
|
||||
- (SIM) Corretto errore di collisione per errata simulazione cambio utensile da lama a motosega.
|
||||
- (SIM-GEN) Corretta gestione in caso di prima lavorazione con motosega.
|
||||
- (GEN) Non si fa preselezione della testa 3
|
||||
- (GEN) Corretta emissione coordinata rotazione testa 3 in zona sicura
|
||||
- (SIM-GEN) A fine barra, testa 3 sempre in home
|
||||
- (GEN) Controllo esistenza terzo asse ausiliario
|
||||
- (GEN) Corretto primo movimento in X quando si parte con testa 3. Ticket#2216
|
||||
- (GEN) Se su testa 1 c'è un aggregato e si utilizzerà la testa 3, si scarica aggregato e si prende utensile di default. Ticket#2222
|
||||
- (GEN) Durante utilizzo della testa 3, non si preselezionano altre teste. Ticket#2220
|
||||
- (SIM-GEN) Se lavorazione con testa dedicata lama e su testa 1 c'era aggregato, viene scaricato. Ticket#2216
|
||||
|
||||
Versione 2.6k3 (26/11/2024)
|
||||
- (GEN) Corretta modifica fatta in versione 2.6k2. Ticket#2183
|
||||
|
||||
Versione 2.6k2 (25/11/2024)
|
||||
- (GEN) Se si preseleziona su testa 1 un utensile lungo, non si va alla X successiva di lavoro ma si resta in home. Infatti potrebbe toccare le paratie in caso di scambio pezzo. Ticket#2183
|
||||
|
||||
Versione 2.6k1 (04/11/2024)
|
||||
- (SIM-GEN) Gestione terza testa 5 assi dedicata lama (H38)
|
||||
|
||||
Versione 2.6j3 (25/10/2024)
|
||||
- (GEN) Piccola correzione per capire se testa 3 presente
|
||||
- (SIM-GEN) In caso di lavorazione successiva alla prima, rivisto primo posizionamento alla quota Z di lavoro se precedentemente spostati a quota rotazione assi rotanti.
|
||||
|
||||
Versione 2.6j2 (23/10/2024)
|
||||
- (MLDE-SIM) Aggiunto parametro ParkTc1X1 in MLDE per simulazione quota parcheggio Testa 1 su TC1.
|
||||
- (SIM-GEN) Per movimento a ZMAX si considera utensile attuale o precedente
|
||||
- (SIM-GEN) Prima versione con gestione testa 3 dedicata lama
|
||||
|
||||
Versione 2.6j1 (01/10/2024)
|
||||
- (GEN) Migliorato calcolo chiusura paratia rulli con aggiornamento lunghezza della barra in caso di ultimo taglio e grezzo residuo in coda. Ticket#2017
|
||||
- (NGE-SIM) Aggiunta gestione solidi collisione per TC verticali e TC rotante sotto
|
||||
- (GEN) Per lavorazione in doppio: messaggio bloccante in caso di extra-corsa durante un movimento standard su piano generico della lavorazione.
|
||||
|
||||
Versione 2.6i1 (10/09/2024)
|
||||
- (GEN) Se diametro utensile più del truciolatore standard grande, non si preseleziona. Ticket#2028
|
||||
|
||||
Versione 2.6h2 (28/08/2024)
|
||||
- (SIM-GEN) Quando si aprono i rulli, se la trave non può seguire i rulli perchè la pinza andrebbe in extra-corsa, si sposta comunque la pinza fino al massimo della sua corsa. Ticket#1949
|
||||
- (GEN) La testa veniva spostata a quota X sicurezza rotazione assi rotanti prima di aprire le rulliere. Ticket#1991
|
||||
|
||||
Versione 2.6h1 (07/08/2024)
|
||||
- (GEN) Gestione creazione piano generico in caso il primo movimento della lavorazione sia un arco. Ticket#1891
|
||||
- (SIM-GEN) Migliorata gestione riposizionamenti fatta con la 2.6g1. Ticket#1836
|
||||
- (MLDE-SIM-GEN) Rinominato file da "Common-" a "Common_" per uniformità con i file common delle altre macchine. Serve modifica a MLDE macchina.
|
||||
|
||||
Versione 2.6g5 (24/07/2024)
|
||||
- (SIM) Per OnSetHead chiamata da simulazione, aggiunta lettura TOTDIAM. Serve per limitare corse assi testa sotto. Ticket#1946
|
||||
|
||||
Versione 2.6g4 (23/07/2024)
|
||||
- (SIM) Corretta ultima modifica per controllo collisioni testa non utilizzata. Trovava collisioni in lavorazioni in doppio.
|
||||
|
||||
Versione 2.6g3 (22/07/2024)
|
||||
- (SIM) Si aggiunge al controllo collisioni anche Tool e ToolHolder della testa non utilizzata. Ticket#1937
|
||||
- (SIM-GEN) In caso di grezzo piuttosto piccolo, concesso pinzaggio fino al massimo possibile, oltre al calcolo con coefficienti. Ticket#1942
|
||||
|
||||
Versione 2.6g2 (12/07/2024)
|
||||
- (SIM-GEN) Corretto movimento testa sotto che andava in collisione tra una lavorazione e la successiva se tra le due c'era un riposizionamento pinze. Ticket#1925
|
||||
|
||||
Versione 2.6g1 (08/07/2024)
|
||||
- (SIM-GEN) Corretto movimento che pinzava nel vuoto durante riposizionamento. Ticket#1836
|
||||
|
||||
Versione 2.6f2 (06/06/2024)
|
||||
- (GEN) Quando si va a ZMAX, si azzerano tutte le coordinate ".pp". Scriveva una Z bassa quando era a Z massima. Ticket#1839
|
||||
|
||||
Versione 2.6f1 (03/06/2024)
|
||||
- (SIM-GEN) Migliorata gestione approccio al pezzo con lama aggregato da sotto. Va al minimo in X solo se necessario.
|
||||
|
||||
Versione 2.6e6 (28/05/2024)
|
||||
- (GEN) Aggiunta possibilità di scrivere nome utensile doppio anche in lavorazione con parametro "TOOLDOUBLE". Note sulla lavorazione hanno precedenza su note utensile.
|
||||
- (GEN) Ripristinato controllo extra-corsa per testa 2 in caso di lavorazioni in doppio in Y (si era perso in un vecchio commit)
|
||||
- (SIM-GEN) Corretto movimento testa sotto su prima lavorazione. Ruotava a parcheggio invece di andare a quota sicurezza rotazione assi.
|
||||
|
||||
Versione 2.6e5 (23/05/2024)
|
||||
- (GEN) Controllo extra-corsa per testa 2 in caso di lavorazioni in doppio in Y
|
||||
- (GEN) Corretta lettura e salvataggio coordinala asse L2 con coordinate rispetto origine. Prima erano locali e sbagliava alcuni calcoli
|
||||
- (SIM-GEN) Se lavorazione con testa 2 e stesso utensile, piccola correzione che manda a parcheggio se cambiano assi rotanti solo se si trova a ZMAX
|
||||
|
||||
Versione 2.6e4 (15/05/2024)
|
||||
- (SIM-GEN) Miglioramento gestione lama su aggregato da sotto
|
||||
|
||||
Versione 2.6e3 (09/05/2024)
|
||||
- (SIM) Corretto prelievo lama 2 (H16). Prima di visualizzare utensile, si sposta la Z alla quota massima. Prima trovava collisione in caso utensile precedente non lama (perchè era già oltre la quota massima).
|
||||
|
||||
Versione 2.6e2 (06/05/2024)
|
||||
- (GEN) In parcheggio paratie/pinze, viene considerato sovramateriale di testa. Simulazione era corretta. Ticket#1789
|
||||
|
||||
Versione 2.6e1 (30/04/2024)
|
||||
- (SIM-GEN) Per macchina a 3 teste, ripristinato posizionamento testa 2 tramite parametro ParkInLavZ2. La gestione era stata persa dal common.
|
||||
- (MLDE-GEN) Gestione facoltativa parametro WOOD_DENSITY settabile in Ts3. In MLDE, mettere il valore di WOOD_DENSITY nella nostra variabile 'WoodDensity'.
|
||||
|
||||
Versione 2.6d2 (23/04/2024)
|
||||
- (MLDE-GEN) Aggiunto parametro 'IS_TEST_MACHINE' FACOLTATIVO. Se non esiste o 'false' è macchina standard, se 'true' è una macchina utilizzata per i test Egalware interni
|
||||
- (GEN) Chiamando la macchina con un nome che termini con '.TEST' si abilita come macchina per test interni, equivalente a settare 'IS_TEST_MACHINE' (che comunque rimane)
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_PF1250', -- nome script PP standard
|
||||
VERSION = '2.6d2', -- versione script
|
||||
VERSION = '2.7b2', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user