Compare commits
111 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 785e4490ea | |||
| 971fcc0c07 | |||
| db7cb8c1b1 | |||
| 80fdaf23f4 | |||
| b832df5767 | |||
| 2b167ea927 | |||
| deaac78103 | |||
| 5f95d9821e | |||
| 8d7a29dd38 | |||
| 793fe00cc9 | |||
| e3107c9c30 | |||
| 33e5254ba4 | |||
| 3aceb8783d | |||
| dabb95858e | |||
| 636ce9eb01 | |||
| 306bef076c | |||
| 9499cdb2c4 | |||
| a14a637ec1 | |||
| b1486a762e | |||
| 0ce94917c4 | |||
| 3149c70b9c | |||
| 6ad6bc5e7f | |||
| 3757642127 | |||
| a133ab3514 | |||
| 910ad63d34 | |||
| 3b7ac164a1 | |||
| daf84e06b3 | |||
| ff1c51f68b | |||
| f164c8a046 | |||
| d1f5219be9 | |||
| e08a18811f | |||
| 758082ad22 | |||
| 745e6092b7 | |||
| 10db138855 | |||
| c2177f36bf | |||
| 76f6ed3346 | |||
| a89bf46837 | |||
| 688ec6e221 | |||
| 13a69fea58 | |||
| 75355f60f1 | |||
| 7922a3bb17 | |||
| 46665cf1fc | |||
| f50132446b | |||
| be5d362383 | |||
| 2acf712f28 | |||
| c7e7afd93a | |||
| 6cf09ac6a5 | |||
| 6a68e0484a | |||
| 37952d64d4 | |||
| ab82e63af3 | |||
| ed92ae901e | |||
| a3c8c97c56 | |||
| 0a792883ad | |||
| 548fdb7647 | |||
| 54b3402785 | |||
| cca7f64f51 | |||
| 391e33d176 | |||
| 5aae40068c | |||
| 0cf16eae0e | |||
| 63916ec50f | |||
| d53ebb1da6 | |||
| 51924f71ea | |||
| 2a44fc8635 | |||
| 5e7c3d7681 | |||
| 3f4feabbd9 | |||
| 90d7c59e97 | |||
| 2b3d65fd56 | |||
| 0ea9ef4266 | |||
| 2510bf8379 | |||
| 6c6e883a4c | |||
| 2be44e3499 | |||
| db4f901e2b | |||
| 99300bbb53 | |||
| a9134f502d | |||
| d226d1a5c1 | |||
| 5ea1bd718d | |||
| 5146f304b6 | |||
| 313a621eab | |||
| 34d1b6ea9c | |||
| 5c55da537e | |||
| 123c1d57fa | |||
| 6f52a41cb0 | |||
| cb1f97ba3b | |||
| b660adc8e8 | |||
| f0b2ce3720 | |||
| 975bc40d2b | |||
| 01105a8c6a | |||
| 3c1a1e5407 | |||
| e5ae54cc98 | |||
| 09e2dd991d | |||
| 66c94aece6 | |||
| 9f2e302d32 | |||
| a1f053e1d8 | |||
| 48105a3f4f | |||
| 45ab9ee317 | |||
| 011de630f7 | |||
| 326de943b7 | |||
| b52feb5fd2 | |||
| 81ae21d006 | |||
| 7948ed102e | |||
| 60f987b23f | |||
| e647919eaa | |||
| 0bc8997ae2 | |||
| 408fb467d1 | |||
| 7ce5c020fc | |||
| 23a5b99a90 | |||
| 9acba47f91 | |||
| 3c327abd4d | |||
| 4709c55227 | |||
| b01a097fb2 | |||
| 672cc5ff90 |
+318
@@ -0,0 +1,318 @@
|
|||||||
|
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_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
|
||||||
|
|
||||||
|
# helper copia script verso cartella di rete S:\ delle cartelle bin
|
||||||
|
.ReplicaS: &ReplicaS
|
||||||
|
- |
|
||||||
|
net use S: /delete
|
||||||
|
SLEEP 2
|
||||||
|
net use S: $env:NET_SHARE_S /u:$env:NET_USERQ $SDRIVE_PASSWD
|
||||||
|
ROBOCOPY /MIR $env:BASE_PATH S:\LucaM\MachinesDeploy\$env:MACH_NAME\$env:MACH_VERS\ /XD "bin" /XD "$env:MACH_NAME_TEST"
|
||||||
|
SLEEP 2
|
||||||
|
net use S: /delete
|
||||||
|
|
||||||
|
# helper copia script verso cartella di rete R:\
|
||||||
|
.ReplicaR: &ReplicaR
|
||||||
|
- |
|
||||||
|
net use R: /delete
|
||||||
|
SLEEP 2
|
||||||
|
net use R: $env:NET_SHARE_R /u:$env:NET_USERQ $ZDRIVE_PASSWD
|
||||||
|
echo "-----------------------"
|
||||||
|
echo " Copia macchina su R"
|
||||||
|
echo "-----------------------"
|
||||||
|
$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
|
||||||
|
- |
|
||||||
|
net use R: /delete
|
||||||
|
SLEEP 2
|
||||||
|
net use R: $env:NET_SHARE_R /u:$env:NET_USERQ $ZDRIVE_PASSWD
|
||||||
|
echo "-----------------------"
|
||||||
|
echo " Copia macchina su R - DEV"
|
||||||
|
echo "-----------------------"
|
||||||
|
$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
|
||||||
|
|
||||||
|
#helper copia sorgenti da R a percorso temporaneo
|
||||||
|
.CreateBaseFolder: &CreateBaseFolder
|
||||||
|
- |
|
||||||
|
net use R: /delete
|
||||||
|
SLEEP 2
|
||||||
|
net use R: $env:NET_SHARE_R /u:$env:NET_USERQ $ZDRIVE_PASSWD
|
||||||
|
echo "-----------------------"
|
||||||
|
echo " Recupero file non git da R e copia su macchina virtuale"
|
||||||
|
echo "-----------------------"
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# helper compilazione LUA a 32 e 64 bit
|
||||||
|
.LuaCompile: &LuaCompile
|
||||||
|
- |
|
||||||
|
Set-Alias lua54 C:\Tools\Lua32\luac54
|
||||||
|
echo "-----------------------"
|
||||||
|
echo " Copia file su macchina virtuale"
|
||||||
|
echo "-----------------------"
|
||||||
|
ROBOCOPY . "$env:SRC_PATH" /E /XF "*.bat" /XF "*.yml" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt" /XD ".vscode"
|
||||||
|
ROBOCOPY . "$env:TEST_PATH" /E /XF "*.bat" /XF "*.yml" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt" /XD ".vscode"
|
||||||
|
Rename-Item -Path "$env:TEST_PATH\$env:MACH_NAME.mlde" -NewName "$env:MACH_NAME_TEST.mlde"
|
||||||
|
Rename-Item -Path "$env:TEST_PATH\$env:MACH_NAME.ini" -NewName "$env:MACH_NAME_TEST.ini"
|
||||||
|
ROBOCOPY . "$env:SRC_PATH\bin\$env:MACH_NAME\" /E /XF "*.bat" /XF "*.yml" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt" /XD ".vscode"
|
||||||
|
echo "-----------------------"
|
||||||
|
echo " Compilazione file *.lua 32/64bit"
|
||||||
|
echo "-----------------------"
|
||||||
|
$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 e costruttore
|
||||||
|
.machName-fix: &machName-fix
|
||||||
|
- |
|
||||||
|
echo "-----------------------"
|
||||||
|
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
|
||||||
|
- |
|
||||||
|
echo "-----------------------"
|
||||||
|
echo " Calcolo versione"
|
||||||
|
echo "-----------------------"
|
||||||
|
|
||||||
|
# calcolo versione formato stringa
|
||||||
|
$fPath = "$env:MACH_NAME.mlde";
|
||||||
|
$vLine = Select-String -path $fPath -Pattern '^PP_VER';
|
||||||
|
$comp = $vLine -split "=";
|
||||||
|
$env:MACH_VERS = $comp[1].Replace("'","").Trim()
|
||||||
|
# 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
|
||||||
|
- |
|
||||||
|
echo "-----------------------"
|
||||||
|
echo " Calcolo versione - DEV"
|
||||||
|
echo "-----------------------"
|
||||||
|
$commitAuthor = $CI_COMMIT_AUTHOR -split " "
|
||||||
|
$commitAuthor = $commitAuthor[0].Trim()
|
||||||
|
$env:MACH_VERS = $commitAuthor
|
||||||
|
# display versione
|
||||||
|
Write-Output $env:MACH_VERS
|
||||||
|
|
||||||
|
# helper creazione folders
|
||||||
|
.folder-fix: &folder-fix
|
||||||
|
- |
|
||||||
|
echo "-----------------------"
|
||||||
|
echo " Creazione cartelle su macchina virtuale"
|
||||||
|
echo "-----------------------"
|
||||||
|
$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";
|
||||||
|
Write-Output $env:BASE_PATH;
|
||||||
|
if (Test-Path $env:BASE_PATH) { Remove-Item -Path "$env:BASE_PATH\*" -R -Force };
|
||||||
|
Write-Output $env:TEST_PATH;
|
||||||
|
|
||||||
|
# helper compressione e pulizia folders
|
||||||
|
.ZipClean: &ZipClean
|
||||||
|
- |
|
||||||
|
" Compressione file su macchina virtuale"
|
||||||
|
$7zipPath = $env:ProgramFiles+"\7-Zip\7z.exe";
|
||||||
|
if (-not (Test-Path -Path $7zipPath -PathType Leaf)) {
|
||||||
|
throw "7 zip file '$7zipPath' not found"
|
||||||
|
}
|
||||||
|
Set-Alias 7zip $7zipPath
|
||||||
|
$Target = "$env:BASE_PATH\$env:MACH_NAME.zip"
|
||||||
|
cd "$env:SRC_PATH\bin\"
|
||||||
|
$Source = "*"
|
||||||
|
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
|
||||||
|
- |
|
||||||
|
Write-Output "Test done!"
|
||||||
|
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- build
|
||||||
|
# - test
|
||||||
|
# - deploy
|
||||||
|
|
||||||
|
LuaCompile:build:
|
||||||
|
stage: build
|
||||||
|
only:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
|
before_script:
|
||||||
|
- *machName-fix
|
||||||
|
- *version-fix
|
||||||
|
- *folder-fix
|
||||||
|
script:
|
||||||
|
- *CreateBaseFolder
|
||||||
|
- *LuaCompile
|
||||||
|
- *ZipClean
|
||||||
|
- *ReplicaR
|
||||||
|
- *ReplicaStor01
|
||||||
|
- *SendToVersionsLog
|
||||||
|
|
||||||
|
LuaCompileDev:build:
|
||||||
|
stage: build
|
||||||
|
only:
|
||||||
|
- develop
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
|
before_script:
|
||||||
|
- *machName-fix
|
||||||
|
- *version-fix_DEV
|
||||||
|
- *folder-fix
|
||||||
|
script:
|
||||||
|
- *CreateBaseFolder
|
||||||
|
- *LuaCompile
|
||||||
|
- *ZipClean
|
||||||
|
- *ReplicaR_DEV
|
||||||
|
|
||||||
|
# LuaCompile:test:
|
||||||
|
# stage: test
|
||||||
|
# needs: ["LuaCompile:build"]
|
||||||
|
# only:
|
||||||
|
# - main
|
||||||
|
# - master
|
||||||
|
# - develop
|
||||||
|
# tags:
|
||||||
|
# - win
|
||||||
|
# before_script:
|
||||||
|
# - *version-fix
|
||||||
|
# - *folder-fix
|
||||||
|
# script:
|
||||||
|
# - *LuaCompile
|
||||||
|
# - *RunTest
|
||||||
|
|
||||||
|
# LuaCompile:deploy:
|
||||||
|
# stage: deploy
|
||||||
|
# needs: ["LuaCompile:test"]
|
||||||
|
# only:
|
||||||
|
# - main
|
||||||
|
# - master
|
||||||
|
# tags:
|
||||||
|
# - win
|
||||||
|
# before_script:
|
||||||
|
# - *version-fix
|
||||||
|
# - *folder-fix
|
||||||
|
# script:
|
||||||
|
# - *LuaCompile
|
||||||
|
# - *ZipClean
|
||||||
|
# - *ReplicaR
|
||||||
|
|
||||||
+111
-17
@@ -1,4 +1,4 @@
|
|||||||
-- BeamData.lua by Egaltech s.r.l. 2022/03/20
|
-- BeamData.lua by Egaltech s.r.l. 2024/03/28
|
||||||
-- Raccolta dati generali per Travi
|
-- Raccolta dati generali per Travi
|
||||||
|
|
||||||
EgtOutLog( ' FAST-BeamData started', 1)
|
EgtOutLog( ' FAST-BeamData started', 1)
|
||||||
@@ -8,6 +8,9 @@ local BeamData = {
|
|||||||
GO_FAST = 0, -- flag abilitazione modalità veloce (0=no, 1=carrelli, 2=anche cambio utensili)
|
GO_FAST = 0, -- flag abilitazione modalità veloce (0=no, 1=carrelli, 2=anche cambio utensili)
|
||||||
RIGHT_LOAD = false, -- flag carico da destra
|
RIGHT_LOAD = false, -- flag carico da destra
|
||||||
ROT90 = false, -- flag abilitazione rotazione 90 gradi
|
ROT90 = false, -- flag abilitazione rotazione 90 gradi
|
||||||
|
ROT180 = true, -- flag abilitazione rotazione 180 gradi
|
||||||
|
NEWCLAMPING = false, -- flag abilitazione nuovo metodo riposizionamento carrelli
|
||||||
|
FASTCLAMPING= true, -- flag abilitazione riduzione numero riposizionamenti al carico e durante grande trascinamento
|
||||||
MIN_WIDTH = 40, -- larghezza minima del grezzo
|
MIN_WIDTH = 40, -- larghezza minima del grezzo
|
||||||
MIN_HEIGHT = 40, -- altezza minima del grezzo
|
MIN_HEIGHT = 40, -- altezza minima del grezzo
|
||||||
MAX_WIDTH = 240, -- larghezza massima del grezzo
|
MAX_WIDTH = 240, -- larghezza massima del grezzo
|
||||||
@@ -43,7 +46,7 @@ local BeamData = {
|
|||||||
MAX_DIST_HTFEA = 50.0, -- massima distanza di feature da testa o coda per essere considerata tale
|
MAX_DIST_HTFEA = 50.0, -- massima distanza di feature da testa o coda per essere considerata tale
|
||||||
MAX_LEN_HTFEA = 2000.0, -- massima lunghezza di feature di testa o coda
|
MAX_LEN_HTFEA = 2000.0, -- massima lunghezza di feature di testa o coda
|
||||||
LONGCUT_ENDLEN = 600, -- lunghezza lavoro estremi iniziale e finale (std=600)
|
LONGCUT_ENDLEN = 600, -- lunghezza lavoro estremi iniziale e finale (std=600)
|
||||||
LONGCUT_MAXLEN = 1200, -- lunghezza massima sezione di taglio longitudinale (std=1200)
|
LONGCUT_MAXLEN = 1200, -- lunghezza massima sezione di taglio longitudinale
|
||||||
MAX_LEN_RIDGELAP_FROM_BOTTOM = 141, -- massima lunghezza ridgelap lavorabile da sotto
|
MAX_LEN_RIDGELAP_FROM_BOTTOM = 141, -- massima lunghezza ridgelap lavorabile da sotto
|
||||||
MAX_LEN_RIDGELAP_FROM_BOTTOM_HBEAM = 96, -- massima lunghezza ridgelap lavorabile da sotto con trave alta
|
MAX_LEN_RIDGELAP_FROM_BOTTOM_HBEAM = 96, -- massima lunghezza ridgelap lavorabile da sotto con trave alta
|
||||||
DIM_TO_CENTER_STRIP = 0, -- larghezza minima trave per inseriemento codolo nel centro del trave; 0 = automatico
|
DIM_TO_CENTER_STRIP = 0, -- larghezza minima trave per inseriemento codolo nel centro del trave; 0 = automatico
|
||||||
@@ -52,6 +55,8 @@ local BeamData = {
|
|||||||
RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo
|
RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo
|
||||||
RAW_OFFSET = 2000, -- spostamento grezzo rimanente dopo split
|
RAW_OFFSET = 2000, -- spostamento grezzo rimanente dopo split
|
||||||
VICE_MINH = 110, -- altezza minima della morsa
|
VICE_MINH = 110, -- altezza minima della morsa
|
||||||
|
VICE_MAXH = 370, -- altezza massima zona pinzaggio orizzontale
|
||||||
|
ENABLE_TOOL_BETWEEN_VICES = false, -- abilita calcolo pinze permettendo di avere l'utensile tra di esse (ovviamente lontano da bordi in Y)
|
||||||
OFFSET_DRILL_TENON = 0, -- offset fori su tenoni verso base degli stessi (0=non fare)
|
OFFSET_DRILL_TENON = 0, -- offset fori su tenoni verso base degli stessi (0=non fare)
|
||||||
USER_HOLE_DIAM = 0, -- diametro foro per L20
|
USER_HOLE_DIAM = 0, -- diametro foro per L20
|
||||||
MAX_TOOL_LEN_FOR_HOR_MACH = 311, -- massima lunghezza utensile per poter fare forature (fresature) oltre i 10 gradi dalla verticale
|
MAX_TOOL_LEN_FOR_HOR_MACH = 311, -- massima lunghezza utensile per poter fare forature (fresature) oltre i 10 gradi dalla verticale
|
||||||
@@ -66,7 +71,11 @@ local BeamData = {
|
|||||||
MAX_LEN_BH_FROM_BOTTOM = 195, -- massima lunghezza lavorabile da un lato di block haus da sotto
|
MAX_LEN_BH_FROM_BOTTOM = 195, -- massima lunghezza lavorabile da un lato di block haus da sotto
|
||||||
MAX_DIST_BH_FROM_BOTTOM = 395, -- massima distanza tra naso mandrino e sopra della trave senza collisione
|
MAX_DIST_BH_FROM_BOTTOM = 395, -- massima distanza tra naso mandrino e sopra della trave senza collisione
|
||||||
BH_MACHINE = false, -- flag che indica la tipologia di macchina configurata BlockHaus
|
BH_MACHINE = false, -- flag che indica la tipologia di macchina configurata BlockHaus
|
||||||
ANG_TRASM = false -- presenza rinvio angolare per lavorazioni da sotto
|
ANG_TRASM = false, -- presenza rinvio angolare per lavorazioni da sotto
|
||||||
|
PRECUT_HEAD = true, -- flag abilitazione pretaglio grezzo a zero in testa
|
||||||
|
PRECUT_TAIL = true, -- flag abilitazione pretaglio grezzo a zero in coda
|
||||||
|
MIN_HEIGHT_ADDED_CUTS = 400, -- altezza minima pezzo per effettuare tagli orizzontali aggiuntivi in testa e coda
|
||||||
|
GAIN_RECLAMPING = 1000 -- in caso di scarso pinzaggio, mm da recuperare con pinzaggio ulteriore prima di spostare
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Aggiornamento con dati da TechnoEssetre7
|
-- Aggiornamento con dati da TechnoEssetre7
|
||||||
@@ -82,15 +91,27 @@ if EgtExistsFile( sData) then
|
|||||||
local Machine = dofile( sData)
|
local Machine = dofile( sData)
|
||||||
if Machine then
|
if Machine then
|
||||||
if Machine.Offsets then
|
if Machine.Offsets then
|
||||||
BeamData.ANG_TRASM = ( Machine.Offsets.SECSUP and Machine.Offsets.SECSUP >= 3)
|
BeamData.ANG_TRASM = ( Machine.Offsets.SECSUP and Machine.Offsets.SECSUP >= 3)
|
||||||
BeamData.BH_MACHINE = ( Machine.Offsets.BLOCKHAUS == 1)
|
BeamData.BH_MACHINE = ( Machine.Offsets.BLOCKHAUS == 1)
|
||||||
BeamData.MINRAW_S = max( BeamData.MINRAW_S, Machine.Offsets.MINRAW_S or BeamData.MINRAW_S)
|
BeamData.MINRAW_S = max( BeamData.MINRAW_S, Machine.Offsets.MINRAW_S or BeamData.MINRAW_S)
|
||||||
BeamData.MINRAW_L = max( BeamData.MINRAW_L, Machine.Offsets.MINRAW_L or BeamData.MINRAW_L)
|
BeamData.MINRAW_L = max( BeamData.MINRAW_L, Machine.Offsets.MINRAW_L or BeamData.MINRAW_L)
|
||||||
BeamData.CUT_EXTRA = Machine.Offsets.CUT_EXTRA or BeamData.CUT_EXTRA
|
BeamData.CUT_EXTRA = Machine.Offsets.CUT_EXTRA or BeamData.CUT_EXTRA
|
||||||
BeamData.CUT_EXTRA_MIN = Machine.Offsets.CUT_EXTRA_MIN or BeamData.CUT_EXTRA_MIN
|
BeamData.CUT_EXTRA_MIN = Machine.Offsets.CUT_EXTRA_MIN or BeamData.CUT_EXTRA_MIN
|
||||||
BeamData.DIM_STRIP_SMALL = Machine.Offsets.DIM_STRIP_SMALL or BeamData.DIM_STRIP_SMALL
|
BeamData.DIM_STRIP_SMALL = Machine.Offsets.DIM_STRIP_SMALL or BeamData.DIM_STRIP_SMALL
|
||||||
BeamData.DIM_TO_CENTER_STRIP = Machine.Offsets.DIM_TO_CENTER_STRIP or BeamData.DIM_TO_CENTER_STRIP
|
BeamData.DIM_TO_CENTER_STRIP = Machine.Offsets.DIM_TO_CENTER_STRIP or BeamData.DIM_TO_CENTER_STRIP
|
||||||
BeamData.MAXDIAM_POCK_CORNER = Machine.Offsets.MAXDIAM_POCK_CORNER or BeamData.MAXDIAM_POCK_CORNER
|
BeamData.MAXDIAM_POCK_CORNER = Machine.Offsets.MAXDIAM_POCK_CORNER or BeamData.MAXDIAM_POCK_CORNER
|
||||||
|
BeamData.LONGCUT_ENDLEN = Machine.Offsets.LONGCUT_ENDLEN or BeamData.LONGCUT_ENDLEN
|
||||||
|
BeamData.LONGCUT_MAXLEN = Machine.Offsets.LONGCUT_MAXLEN or BeamData.LONGCUT_MAXLEN
|
||||||
|
BeamData.ADVANCE_TAIL_OFFS = Machine.Offsets.ADVANCE_TAIL_OFFS or BeamData.ADVANCE_TAIL_OFFS
|
||||||
|
BeamData.LEN_VERY_SHORT_PART = Machine.Offsets.LEN_VERY_SHORT_PART or BeamData.LEN_VERY_SHORT_PART
|
||||||
|
BeamData.LEN_SHORT_PART = Machine.Offsets.LEN_SHORT_PART or BeamData.LEN_SHORT_PART
|
||||||
|
if Machine.Offsets.PRECUT_HEAD_DISABLE then BeamData.PRECUT_HEAD = ( Machine.Offsets.PRECUT_HEAD_DISABLE == 0) end
|
||||||
|
if Machine.Offsets.PRECUT_TAIL_DISABLE then BeamData.PRECUT_TAIL = ( Machine.Offsets.PRECUT_TAIL_DISABLE == 0) end
|
||||||
|
if Machine.Offsets.MIN_HEIGHT_ADDED_CUTS then BeamData.MIN_HEIGHT_ADDED_CUTS = min( Machine.Offsets.MIN_HEIGHT_ADDED_CUTS, BeamData.MIN_HEIGHT_ADDED_CUTS) end
|
||||||
|
if Machine.Offsets.NEWCLAMPING ~= nil then BeamData.NEWCLAMPING = ( Machine.Offsets.NEWCLAMPING == 1) end
|
||||||
|
if Machine.Offsets.FASTCLAMPING ~= nil then BeamData.FASTCLAMPING = ( Machine.Offsets.FASTCLAMPING == 1) end
|
||||||
|
if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end
|
||||||
|
if Machine.Offsets.ROT180 ~= nil then BeamData.ROT180 = ( Machine.Offsets.ROT180 == 1) end
|
||||||
end
|
end
|
||||||
if Machine.Trave then
|
if Machine.Trave then
|
||||||
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
|
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
|
||||||
@@ -111,9 +132,19 @@ if EgtExistsFile( sData) then
|
|||||||
BeamData.MAX_LEN_SCRAP_START = 100000
|
BeamData.MAX_LEN_SCRAP_START = 100000
|
||||||
end
|
end
|
||||||
BeamData.USER_HOLE_DIAM = Machine.User.L020_DIAM_HOLE or BeamData.USER_HOLE_DIAM
|
BeamData.USER_HOLE_DIAM = Machine.User.L020_DIAM_HOLE or BeamData.USER_HOLE_DIAM
|
||||||
|
BeamData.ENABLE_TOOL_BETWEEN_VICES = ( Machine.User.ENABLE_TOOL_BETWEEN_VICES == 1) or BeamData.ENABLE_TOOL_BETWEEN_VICES
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function GetMaxLenRidgeLapFromBottom( dHRaw)
|
||||||
|
if dHRaw < BeamData.MIN_DIM_HBEAM then
|
||||||
|
return BeamData.MAX_LEN_RIDGELAP_FROM_BOTTOM + 0.01
|
||||||
|
else
|
||||||
|
return BeamData.MAX_LEN_RIDGELAP_FROM_BOTTOM_HBEAM + 0.01
|
||||||
|
end
|
||||||
|
end
|
||||||
|
BeamData.GetMaxLenRidgeLapFromBottom = GetMaxLenRidgeLapFromBottom
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function GetBlockedAxis( sHead, nToolType, sBlockedAxis)
|
local function GetBlockedAxis( sHead, nToolType, sBlockedAxis)
|
||||||
@@ -144,14 +175,77 @@ end
|
|||||||
BeamData.GetBlockedAxis = GetBlockedAxis
|
BeamData.GetBlockedAxis = GetBlockedAxis
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function GetMaxLenRidgeLapFromBottom( dHRaw)
|
local function GetChainSawInitAngs( vtN, vtO, nInd)
|
||||||
if dHRaw < BeamData.MIN_DIM_HBEAM then
|
if nInd == 1 then
|
||||||
return BeamData.MAX_LEN_RIDGELAP_FROM_BOTTOM + 0.01
|
return ''
|
||||||
else
|
else
|
||||||
return BeamData.MAX_LEN_RIDGELAP_FROM_BOTTOM_HBEAM + 0.01
|
return EgtIf( vtN:getY() > 0, 'C=180', 'C=-180')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
BeamData.GetMaxLenRidgeLapFromBottom = GetMaxLenRidgeLapFromBottom
|
BeamData.GetChainSawInitAngs = GetChainSawInitAngs
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function GetSetupInfo( sHead)
|
||||||
|
local SetupInfo = {}
|
||||||
|
|
||||||
|
-- dati comuni
|
||||||
|
SetupInfo.bIsCSymmetric = false
|
||||||
|
SetupInfo.dCAxisEncumbrance = 180
|
||||||
|
SetupInfo.bToolOnAggregate = false
|
||||||
|
|
||||||
|
-- testa 5 assi da sopra
|
||||||
|
if sHead == 'H1' then
|
||||||
|
SetupInfo.bIsTopHead = true
|
||||||
|
SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead
|
||||||
|
SetupInfo.dMaxNegativeAngle = sin( -45)
|
||||||
|
-- lama su testa 5 assi da sopra
|
||||||
|
elseif sHead == 'H2' then
|
||||||
|
SetupInfo.bIsTopHead = true
|
||||||
|
SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead
|
||||||
|
SetupInfo.dMaxNegativeAngle = sin( -45)
|
||||||
|
-- motosega
|
||||||
|
elseif sHead == 'H3' then
|
||||||
|
SetupInfo.bIsTopHead = true
|
||||||
|
SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead
|
||||||
|
SetupInfo.dMaxNegativeAngle = 0
|
||||||
|
-- rinvio angolare 90° (considerato come fosse una testa da sotto)
|
||||||
|
elseif sHead == 'H5' then
|
||||||
|
SetupInfo.bToolOnAggregate = true
|
||||||
|
SetupInfo.bIsBottomHead = true
|
||||||
|
SetupInfo.bIsTopHead = not SetupInfo.bIsBottomHead
|
||||||
|
SetupInfo.dMaxPositiveAngle = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
return SetupInfo
|
||||||
|
end
|
||||||
|
BeamData.GetSetupInfo = GetSetupInfo
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function GetMaxMatReductionBladeCut( sHead, vtDir)
|
||||||
|
local MaxMatReductionBladeCut = 0
|
||||||
|
-- la lama è montata solo su H2, non si controllano altre teste
|
||||||
|
if sHead == 'H2' then
|
||||||
|
if BeamData.NEWTOPC == nil or BeamData.NEWTOPC then
|
||||||
|
MaxMatReductionBladeCut = -65
|
||||||
|
end
|
||||||
|
if AreSameVectorApprox( vtDir, X_AX()) then
|
||||||
|
MaxMatReductionBladeCut = MaxMatReductionBladeCut + 175
|
||||||
|
elseif AreSameVectorApprox( vtDir, -X_AX()) then
|
||||||
|
MaxMatReductionBladeCut = MaxMatReductionBladeCut + 175
|
||||||
|
elseif AreSameVectorApprox( vtDir, Y_AX()) then
|
||||||
|
MaxMatReductionBladeCut = MaxMatReductionBladeCut + 175
|
||||||
|
elseif AreSameVectorApprox( vtDir, -Y_AX()) then
|
||||||
|
MaxMatReductionBladeCut = MaxMatReductionBladeCut + 175
|
||||||
|
elseif AreSameVectorApprox( vtDir, Z_AX()) then
|
||||||
|
MaxMatReductionBladeCut = 80
|
||||||
|
elseif AreSameVectorApprox( vtDir, -Z_AX()) then
|
||||||
|
MaxMatReductionBladeCut = 80
|
||||||
|
end
|
||||||
|
MaxMatReductionBladeCut = MaxMatReductionBladeCut + BeamData.COLL_SIC
|
||||||
|
end
|
||||||
|
return MaxMatReductionBladeCut + BeamData.COLL_SIC
|
||||||
|
end
|
||||||
|
BeamData.GetMaxMatReductionBladeCut = GetMaxMatReductionBladeCut
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
return BeamData
|
return BeamData
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ Name=Offsets
|
|||||||
30=l,OFFSETZ_RINV_1,347,OFFSETZ_RINV_1
|
30=l,OFFSETZ_RINV_1,347,OFFSETZ_RINV_1
|
||||||
31=l,OFFSETX_RINV_2,150,OFFSETX_RINV_2
|
31=l,OFFSETX_RINV_2,150,OFFSETX_RINV_2
|
||||||
32=l,OFFSETZ_RINV_2,347,OFFSETZ_RINV_2
|
32=l,OFFSETZ_RINV_2,347,OFFSETZ_RINV_2
|
||||||
|
33=l,MIN_JOIN_SS,100,MIN_JOIN_SS
|
||||||
|
|
||||||
[2]
|
[2]
|
||||||
Name=Trave
|
Name=Trave
|
||||||
@@ -50,3 +51,4 @@ Name=User
|
|||||||
3=d,OPTIMIZATIONS_LENGTH_SLICES,100,SLICES_LENGTH
|
3=d,OPTIMIZATIONS_LENGTH_SLICES,100,SLICES_LENGTH
|
||||||
4=l,L020_DIAM_HOLE,20,L020_HOLE_DIAM
|
4=l,L020_DIAM_HOLE,20,L020_HOLE_DIAM
|
||||||
5=l,L040_OFFSET_P1,0,L040_ON_TENON_OFFSET
|
5=l,L040_OFFSET_P1,0,L040_ON_TENON_OFFSET
|
||||||
|
6=d,ENABLE_TOOL_BETWEEN_VICES,0,ENABLE_TOOL_BETWEEN_VICES
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
3=Pocket
|
3=Pocket
|
||||||
4=Pocket_AT
|
4=Pocket_AT
|
||||||
5=AngleDrill
|
5=AngleDrill
|
||||||
|
6=Predrill
|
||||||
|
|
||||||
[Milling]
|
[Milling]
|
||||||
1=Prof
|
1=Prof
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[BEAM]
|
||||||
|
StartOffset=10
|
||||||
|
Offset=5.4
|
||||||
@@ -3,10 +3,11 @@
|
|||||||
|
|
||||||
-- carico librerie
|
-- carico librerie
|
||||||
local INFO_STD_PP = require( 'Version')
|
local INFO_STD_PP = require( 'Version')
|
||||||
|
local BD = require( 'BeamData')
|
||||||
|
|
||||||
-- Variabili di modulo
|
-- Variabili di modulo
|
||||||
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
||||||
local MACHINE_INFO = 'PP_VER ver.'..PP_VER
|
local MACHINE_INFO = MACH_NAME..' ver.'..PP_VER
|
||||||
local TEST_USE = false
|
local TEST_USE = false
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -41,13 +42,17 @@ function OnProgramStart()
|
|||||||
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL
|
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL
|
||||||
local nPatt = EgtGetInfo( BtlInfoId, 'PATTID', 'i') or 40
|
local nPatt = EgtGetInfo( BtlInfoId, 'PATTID', 'i') or 40
|
||||||
EmtOutput( '%'..EgtNumToString( nPatt, 0)..'.0')
|
EmtOutput( '%'..EgtNumToString( nPatt, 0)..'.0')
|
||||||
|
|
||||||
|
-- aggiungo prefisso per commentae commenti iniziali se la macchina è utilizzata per fare i test
|
||||||
|
local sPrefixCommentLine = '' ; if IS_TEST_MACHINE or EgtEndsWith( EgtGetCurrMachineDir(), '.TEST') then sPrefixCommentLine = '//' end
|
||||||
|
|
||||||
if EMT.INFO then
|
if EMT.INFO then
|
||||||
EmtOutput( '('..EMT.INFO..')')
|
EmtOutput( sPrefixCommentLine..'('..EMT.INFO..')')
|
||||||
else
|
else
|
||||||
EmtOutput( '(Program Start)')
|
EmtOutput( '(Program Start)')
|
||||||
end
|
end
|
||||||
EmtOutput( '('.. CSP_INFO..')')
|
EmtOutput( sPrefixCommentLine..'('.. CSP_INFO..')')
|
||||||
EmtOutput( '('.. MACHINE_INFO..')\n')
|
EmtOutput( sPrefixCommentLine..'('.. MACHINE_INFO..')\n')
|
||||||
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
||||||
if TEST_USE then
|
if TEST_USE then
|
||||||
EmtOutput( 'M28')
|
EmtOutput( 'M28')
|
||||||
@@ -178,7 +183,7 @@ function OnDispositionEnd()
|
|||||||
-- calcolo dati pinze
|
-- calcolo dati pinze
|
||||||
local MinAccPinze = 0.3
|
local MinAccPinze = 0.3
|
||||||
local MaxAccPinze = 4
|
local MaxAccPinze = 4
|
||||||
local KgMtCubo= 550 -- densità legno in Kg / metro cubo
|
local KgMtCubo= WoodDensity or 550 -- densità legno in Kg / metro cubo
|
||||||
local Massa = ( HTrave * STrave * LBarra * KgMtCubo ) / 1000000000
|
local Massa = ( HTrave * STrave * LBarra * KgMtCubo ) / 1000000000
|
||||||
local FMaxPinze = EMT.FMAXPINZE
|
local FMaxPinze = EMT.FMAXPINZE
|
||||||
local ForzaAtrito = 700 / 2 -- Serve per regolare P32 (700 valore reale pistone)
|
local ForzaAtrito = 700 / 2 -- Serve per regolare P32 (700 valore reale pistone)
|
||||||
@@ -490,6 +495,7 @@ function OnMachiningEnd()
|
|||||||
EMT.AUXTYPE = nil
|
EMT.AUXTYPE = nil
|
||||||
EMT.U_STD = nil
|
EMT.U_STD = nil
|
||||||
EMT.PREVTOOL = EMT.TOOL
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
|
EMT.PREVHEAD = EMT.HEAD
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -499,6 +505,11 @@ function OnPathStart()
|
|||||||
-- primo posizionamento sempre in globale
|
-- primo posizionamento sempre in globale
|
||||||
EMT.REFLOC = nil
|
EMT.REFLOC = nil
|
||||||
EMT.IPLGL = false
|
EMT.IPLGL = false
|
||||||
|
|
||||||
|
-- salvo precedenti rotanti
|
||||||
|
EMT.R1pp = EMT.R1p
|
||||||
|
EMT.R2pp = EMT.R2p
|
||||||
|
|
||||||
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
||||||
EmtResetPrev()
|
EmtResetPrev()
|
||||||
EMT.AUXCMD = {}
|
EMT.AUXCMD = {}
|
||||||
@@ -592,6 +603,8 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnRapid()
|
function OnRapid()
|
||||||
|
-- recupero prossimo utensile
|
||||||
|
EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTTCPOS = FindNextTool()
|
||||||
MyBackupAxes()
|
MyBackupAxes()
|
||||||
-- se primo movimento della lavorazione, gestione speciale
|
-- se primo movimento della lavorazione, gestione speciale
|
||||||
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
||||||
@@ -609,25 +622,55 @@ function OnRapid()
|
|||||||
if not EMT.ZMAX and #EMT.AUXSTR > 0 then
|
if not EMT.ZMAX and #EMT.AUXSTR > 0 then
|
||||||
EmitZmax()
|
EmitZmax()
|
||||||
EMT.ZMAX = true
|
EMT.ZMAX = true
|
||||||
|
bHeadFirst = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- primo posizionamento
|
||||||
|
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||||
|
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
|
if EMT.PREVHEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||||
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
||||||
|
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
end
|
||||||
|
|
||||||
if not EMT.LOAD then
|
if not EMT.LOAD then
|
||||||
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
|
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
|
||||||
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
||||||
end
|
end
|
||||||
-- primo posizionamento
|
|
||||||
EmtResetPrev()
|
-- ricavo i dati per la lavorazione
|
||||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
|
||||||
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
|
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||||
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
||||||
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
||||||
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..
|
|
||||||
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
if ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||||
sOut = sOut .. ' EH1'
|
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||||
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
end
|
end
|
||||||
|
EmtResetPrev()
|
||||||
|
-- se sono su pezzi alti e movimento da emettere, per sicurezza a Z massima
|
||||||
|
local MyZPos = EMT.L3
|
||||||
|
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||||
|
MyZPos = MyZHome
|
||||||
|
end
|
||||||
|
local sOut = 'G101' .. EmtGetAxis( 'L2') .. ' Z' .. EmtLenToString( MyZPos, 3) ..
|
||||||
|
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
-- faccio backup dati in caso mi servano per lavorazione successiva
|
||||||
|
EMT.PREVsEE = sEE ; EMT.PREVsEL = sEL ; EMT.PREVsER = sER ; EMT.PREVsET = sET ; EMT.PREVsES = sES
|
||||||
|
|
||||||
if EMT.LOAD or bHeadFirst then
|
if EMT.LOAD or bHeadFirst then
|
||||||
sOut = sOut..' L0=0'
|
sOut = sOut..' L0=0'
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
@@ -793,12 +836,47 @@ function OnRapid()
|
|||||||
EmtAdjustRotaryAxes()
|
EmtAdjustRotaryAxes()
|
||||||
EmitZmax()
|
EmitZmax()
|
||||||
EMT.ZMAX = true
|
EMT.ZMAX = true
|
||||||
|
-- se pezzi alti e devo cambiare utensile su testa con CU, porto la testa vicino al cambio utensile
|
||||||
|
if EMT.ST > BeamHeightForFixRot and EMT.HEAD == 'H1' and EMT.TOOL ~= EMT.NEXTTOOL and EMT.NEXTHEAD ~= 'H2' then
|
||||||
|
local dBAxis = 90
|
||||||
|
local dCAxis = EgtIf( BD.RIGHT_LOAD, 90, -90)
|
||||||
|
local sEE = ' EE3'
|
||||||
|
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
||||||
|
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
||||||
|
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
|
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
||||||
|
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOut)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
||||||
|
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOut)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
end
|
||||||
-- se altrimenti movimento in Home
|
-- se altrimenti movimento in Home
|
||||||
elseif EMT.FLAG == 4 then
|
elseif EMT.FLAG == 4 then
|
||||||
-- non previsto
|
-- non previsto
|
||||||
-- se altrimenti rotazione a Z max
|
-- se altrimenti rotazione a Z max per lavorazione successiva
|
||||||
elseif EMT.FLAG == 5 then
|
elseif EMT.FLAG == 5 then
|
||||||
-- viene gestito all'inizio della lavorazione successiva
|
EMT.REFLOC = nil
|
||||||
|
EMT.IPLGL = false
|
||||||
|
MyAdjustLinearAxes()
|
||||||
|
EmtAdjustRotaryAxes()
|
||||||
|
EmtResetPrev()
|
||||||
|
-- ricavo i dati per la lavorazione
|
||||||
|
local sEE = ' EE3'
|
||||||
|
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
||||||
|
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
||||||
|
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
|
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..
|
||||||
|
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOut)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
-- altrimenti errore
|
-- altrimenti errore
|
||||||
else
|
else
|
||||||
EmtSetLastError( 1212, "Unknown Rapid flag")
|
EmtSetLastError( 1212, "Unknown Rapid flag")
|
||||||
@@ -890,13 +968,46 @@ function OnArc()
|
|||||||
local sFeed = EmtGetFeed()
|
local sFeed = EmtGetFeed()
|
||||||
-- tipo arco
|
-- tipo arco
|
||||||
local sArc = 'G' .. EgtNumToString(EMT.MOVE,0)
|
local sArc = 'G' .. EgtNumToString(EMT.MOVE,0)
|
||||||
-- emetto arco
|
-- se arco molto grande, approssimo con una retta
|
||||||
EmtOutput( sArc..sAxes..sRad..sFeed)
|
if EMT.RR > 99999 then
|
||||||
|
EmtOutput( "G1"..sAxes..sFeed)
|
||||||
|
else
|
||||||
|
EmtOutput( sArc..sAxes..sRad..sFeed)
|
||||||
|
end
|
||||||
|
|
||||||
-- aggiorno valori come precedenti
|
-- aggiorno valori come precedenti
|
||||||
EmtUpdatePrev()
|
EmtUpdatePrev()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function FindNextTool()
|
||||||
|
-- salvo stato iniziale
|
||||||
|
local CurrMachId = EgtGetCurrMachining()
|
||||||
|
local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
||||||
|
-- cerco lavorazione con utensile su gruppo testa indicato
|
||||||
|
local sTool, sHead, sTcPos
|
||||||
|
local OpId = EgtGetNextActiveOperation( CurrMachId or EMT.MCHID)
|
||||||
|
while OpId do
|
||||||
|
local nType = EgtGetOperationType( OpId)
|
||||||
|
if nType ~= MCH_OY.NONE and nType ~= MCH_OY.DISP then
|
||||||
|
if EgtSetCurrMachining( OpId) then
|
||||||
|
sTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||||
|
if EgtTdbSetCurrTool( sTool) then
|
||||||
|
sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||||
|
sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
OpId = EgtGetNextActiveOperation( OpId)
|
||||||
|
end
|
||||||
|
-- ripristino stato iniziale
|
||||||
|
EgtSetCurrMachining( CurrMachId or GDB_ID.NULL)
|
||||||
|
EgtTdbSetCurrTool( CurrTool or '')
|
||||||
|
-- restituisco risultato
|
||||||
|
return sTool, sHead, sTcPos
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function CalcCharStatus( sCmd, bSkipPress)
|
function CalcCharStatus( sCmd, bSkipPress)
|
||||||
-- aperto
|
-- aperto
|
||||||
@@ -1421,7 +1532,10 @@ function MyAdjustLinearAxes()
|
|||||||
|
|
||||||
if EMT.REFLOC then
|
if EMT.REFLOC then
|
||||||
local vtE
|
local vtE
|
||||||
if EMT.HEAD ~= 'H3' then
|
-- su NUM aggregati non gestiti
|
||||||
|
if EMT.HEAD == 'H5' or EMT.HEAD == 'H6' or EMT.HEAD == 'H7' then
|
||||||
|
EmtSetLastError( 1211, "Aggregates not managed")
|
||||||
|
elseif EMT.HEAD ~= 'H3' then
|
||||||
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef
|
vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef
|
||||||
@@ -1536,7 +1650,7 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function GetET( sHead, sTcPos, dAxR3)
|
function GetET( sHead, sTcPos, dAxR3)
|
||||||
if sHead == 'H1' then
|
if sHead == 'H1' or sHead == 'H5' or sHead == 'H6' or sHead == 'H7' then
|
||||||
return ' E'..sTcPos
|
return ' E'..sTcPos
|
||||||
elseif sHead == 'H2' then
|
elseif sHead == 'H2' then
|
||||||
return ' ET42'
|
return ' ET42'
|
||||||
@@ -3,10 +3,11 @@
|
|||||||
|
|
||||||
-- carico librerie
|
-- carico librerie
|
||||||
local INFO_STD_PP = require( 'Version')
|
local INFO_STD_PP = require( 'Version')
|
||||||
|
local BD = require( 'BeamData')
|
||||||
|
|
||||||
-- Variabili di modulo
|
-- Variabili di modulo
|
||||||
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
||||||
local MACHINE_INFO = 'PP_VER ver.'..PP_VER
|
local MACHINE_INFO = MACH_NAME..' ver.'..PP_VER
|
||||||
local TEST_USE = false
|
local TEST_USE = false
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -41,13 +42,17 @@ function OnProgramStart()
|
|||||||
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL
|
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL
|
||||||
local nPatt = EgtGetInfo( BtlInfoId, 'PATTID', 'i') or 40
|
local nPatt = EgtGetInfo( BtlInfoId, 'PATTID', 'i') or 40
|
||||||
EmtOutput( '%'..EgtNumToString( nPatt, 0)..'.0')
|
EmtOutput( '%'..EgtNumToString( nPatt, 0)..'.0')
|
||||||
|
|
||||||
|
-- aggiungo prefisso per commentae commenti iniziali se la macchina è utilizzata per fare i test
|
||||||
|
local sPrefixCommentLine = '' ; if IS_TEST_MACHINE or EgtEndsWith( EgtGetCurrMachineDir(), '.TEST') then sPrefixCommentLine = '//' end
|
||||||
|
|
||||||
if EMT.INFO then
|
if EMT.INFO then
|
||||||
EmtOutput( '('..EMT.INFO..')')
|
EmtOutput( sPrefixCommentLine..'('..EMT.INFO..')')
|
||||||
else
|
else
|
||||||
EmtOutput( '(Program Start)')
|
EmtOutput( '(Program Start)')
|
||||||
end
|
end
|
||||||
EmtOutput( '('.. CSP_INFO..')')
|
EmtOutput( sPrefixCommentLine..'('.. CSP_INFO..')')
|
||||||
EmtOutput( '('.. MACHINE_INFO..')\n')
|
EmtOutput( sPrefixCommentLine..'('.. MACHINE_INFO..')\n')
|
||||||
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
||||||
if TEST_USE then
|
if TEST_USE then
|
||||||
EmtOutput( 'M28')
|
EmtOutput( 'M28')
|
||||||
@@ -133,6 +138,18 @@ function OnToolData()
|
|||||||
if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end
|
if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end
|
||||||
local sOut = 'L11='..EgtNumToString( EMT.SMAX, 0)..' L12='..EmtLenToString( ( EMT.TDIST or ChSawLen), 1)..' G76H9998.1N301N304'
|
local sOut = 'L11='..EgtNumToString( EMT.SMAX, 0)..' L12='..EmtLenToString( ( EMT.TDIST or ChSawLen), 1)..' G76H9998.1N301N304'
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
|
-- emissione dati rinvio
|
||||||
|
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
|
||||||
|
local nPos = EgtIf( EMT.HEAD == 'H5', 91, 93)
|
||||||
|
if EMT.EXIT == 2 then nPos = nPos + 1 end
|
||||||
|
local sPos = 'N2' .. tostring(nPos)
|
||||||
|
local sOut = 'L11=' .. EmtLenToString( EMT.SMAX, 3) .. ' L12=' .. EmtLenToString( AngTr1Offs, 1)..' G76H9998.1'..sPos..sPos
|
||||||
|
EmtOutput( sOut)
|
||||||
|
-- emissione dati sega a catena
|
||||||
|
elseif EMT.HEAD == 'H7' then
|
||||||
|
local sOut = 'L11='..EgtNumToString( EMT.SMAX, 0)..' L12='..EmtLenToString( ( 154.5), 1)..' G76H9998.1N121N121'
|
||||||
|
EmtOutput( sOut)
|
||||||
|
-- altro non previsto
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -151,7 +168,7 @@ function OnDispositionStart()
|
|||||||
' EG'..EmtLenToString( SawOffs, 2)..' EI'..EmtLenToString( ParkY, 2)..' EL'..EmtLenToString( ParkV, 2)..
|
' EG'..EmtLenToString( SawOffs, 2)..' EI'..EmtLenToString( ParkY, 2)..' EL'..EmtLenToString( ParkV, 2)..
|
||||||
' EM'..EmtLenToString( TurnerOffs, 2)..' EN'..EmtLenToString( -DeltaTabY, 2)..' EO'..EmtLenToString( DeltaTabZ, 2)
|
' EM'..EmtLenToString( TurnerOffs, 2)..' EN'..EmtLenToString( -DeltaTabY, 2)..' EO'..EmtLenToString( DeltaTabZ, 2)
|
||||||
if SecondSupport >= 3 then
|
if SecondSupport >= 3 then
|
||||||
sOut = sOut ..' EP'..EmtLenToString( AngTr1Len, 2) ..' EQ'..EmtLenToString( AngTr1Offs + MillOffs,2)
|
sOut = sOut ..' EP'..EmtLenToString( AngTr1Len, 2) ..' EQ'..EmtLenToString( AngTr1Offs,2)
|
||||||
end
|
end
|
||||||
EmtOutput( '\n' .. sOut .. '\n')
|
EmtOutput( '\n' .. sOut .. '\n')
|
||||||
-- carico barra
|
-- carico barra
|
||||||
@@ -418,6 +435,10 @@ function OnMachiningStart()
|
|||||||
-- sistemazione speed
|
-- sistemazione speed
|
||||||
if EMT.HEAD == 'H2' then
|
if EMT.HEAD == 'H2' then
|
||||||
EMT.S = EMT.S * 6
|
EMT.S = EMT.S * 6
|
||||||
|
elseif EMT.HEAD == 'H5' and EMT.EXIT == 1 then
|
||||||
|
EMT.S = -EMT.S
|
||||||
|
elseif EMT.HEAD == 'H6' and EMT.EXIT == 1 then
|
||||||
|
EMT.S = -EMT.S
|
||||||
end
|
end
|
||||||
-- determino subito se taglio di separazione di pezzo a caduta
|
-- determino subito se taglio di separazione di pezzo a caduta
|
||||||
EMT.PREFALLCUT = nil
|
EMT.PREFALLCUT = nil
|
||||||
@@ -517,6 +538,7 @@ function OnMachiningEnd()
|
|||||||
EMT.AUXTYPE = nil
|
EMT.AUXTYPE = nil
|
||||||
EMT.U_STD = nil
|
EMT.U_STD = nil
|
||||||
EMT.PREVTOOL = EMT.TOOL
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
|
EMT.PREVHEAD = EMT.HEAD
|
||||||
EMT.PREVR3 = EMT.R3
|
EMT.PREVR3 = EMT.R3
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -527,6 +549,11 @@ function OnPathStart()
|
|||||||
-- primo posizionamento sempre in globale
|
-- primo posizionamento sempre in globale
|
||||||
EMT.REFLOC = nil
|
EMT.REFLOC = nil
|
||||||
EMT.IPLGL = false
|
EMT.IPLGL = false
|
||||||
|
|
||||||
|
-- salvo precedenti rotanti
|
||||||
|
EMT.R1pp = EMT.R1p
|
||||||
|
EMT.R2pp = EMT.R2p
|
||||||
|
|
||||||
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
||||||
EmtResetPrev()
|
EmtResetPrev()
|
||||||
EMT.AUXCMD = {}
|
EMT.AUXCMD = {}
|
||||||
@@ -620,6 +647,8 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnRapid()
|
function OnRapid()
|
||||||
|
-- recupero prossimo utensile
|
||||||
|
EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTTCPOS = FindNextTool()
|
||||||
MyBackupAxes()
|
MyBackupAxes()
|
||||||
-- se primo movimento della lavorazione, gestione speciale
|
-- se primo movimento della lavorazione, gestione speciale
|
||||||
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
||||||
@@ -638,25 +667,78 @@ function OnRapid()
|
|||||||
EmitZmax( EMT.TOOL ~= EMT.PREVTOOL)
|
EmitZmax( EMT.TOOL ~= EMT.PREVTOOL)
|
||||||
EMT.ZMAX = true
|
EMT.ZMAX = true
|
||||||
EMT.PREVTOOL = EMT.TOOL
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
|
bHeadFirst = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- primo posizionamento
|
||||||
|
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||||
|
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
|
if EMT.PREVHEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||||
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
||||||
|
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
end
|
||||||
|
|
||||||
if not EMT.LOAD then
|
if not EMT.LOAD then
|
||||||
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
|
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
|
||||||
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
||||||
end
|
end
|
||||||
-- primo posizionamento
|
|
||||||
EmtResetPrev()
|
-- ricavo i dati per la lavorazione
|
||||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
|
||||||
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
|
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||||
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
|
||||||
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
local sEL = ' EL'
|
||||||
|
-- se motosega
|
||||||
|
if EMT.HEAD == 'H3' then
|
||||||
|
sEL = sEL..EmtLenToString( ( EMT.TDIST or ChSawLen), 3)
|
||||||
|
-- se aggregato
|
||||||
|
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' or EMT.HEAD == 'H7' then
|
||||||
|
sEL = sEL..EmtLenToString( AngTr1Offs, 3)
|
||||||
|
-- se testa normale ( H1 or H2)
|
||||||
|
else
|
||||||
|
sEL = sEL..EmtLenToString( EMT.TLEN, 3)
|
||||||
|
end
|
||||||
|
|
||||||
|
local sER = ' ER'
|
||||||
|
-- se motosega
|
||||||
|
if EMT.HEAD == 'H3' then
|
||||||
|
sER = sER..EmtLenToString( EMT.TLEN, 3)
|
||||||
|
-- se aggregato
|
||||||
|
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' or EMT.HEAD == 'H7' then
|
||||||
|
sER = sER..EmtLenToString( EMT.TLEN + AngTr1Len, 3)
|
||||||
|
-- se testa normale ( H1 or H2)
|
||||||
|
else
|
||||||
|
sER = sER..EmtLenToString( EMT.TDIAM / 2, 3)
|
||||||
|
end
|
||||||
|
|
||||||
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..
|
|
||||||
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
if ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||||
sOut = sOut .. ' EH1'
|
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||||
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
end
|
end
|
||||||
|
EmtResetPrev()
|
||||||
|
-- se sono su pezzi alti e movimento da emettere, per sicurezza a Z massima
|
||||||
|
local MyZPos = EMT.L3
|
||||||
|
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||||
|
MyZPos = MyZHome
|
||||||
|
end
|
||||||
|
local sOut = 'G101' .. EmtGetAxis( 'L2') .. ' Z' .. EmtLenToString( MyZPos, 3) ..
|
||||||
|
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
-- faccio backup dati in caso mi servano per lavorazione successiva
|
||||||
|
EMT.PREVsEE = sEE ; EMT.PREVsEL = sEL ; EMT.PREVsER = sER ; EMT.PREVsET = sET ; EMT.PREVsES = sES
|
||||||
|
|
||||||
if EMT.LOAD or bHeadFirst then
|
if EMT.LOAD or bHeadFirst then
|
||||||
sOut = sOut .. ' L0=0'
|
sOut = sOut .. ' L0=0'
|
||||||
if EMT.LOAD or #EMT.AUXSTR > 0 then
|
if EMT.LOAD or #EMT.AUXSTR > 0 then
|
||||||
@@ -768,7 +850,7 @@ function OnRapid()
|
|||||||
sOut = 'G112 EA'..sA..' EB'..sB..EmtGetAxis('L1')..' EY'..sY..' EV'..sV..' EF'..GetFmaxClamp()
|
sOut = 'G112 EA'..sA..' EB'..sB..EmtGetAxis('L1')..' EY'..sY..' EV'..sV..' EF'..GetFmaxClamp()
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
-- se taglio di coda senza residuo da scaricare, emetto M175 per accelerare il carico della barra successiva
|
-- se taglio di coda senza residuo da scaricare, emetto M175 per accelerare il carico della barra successiva
|
||||||
if EMT.MCHUSERNOTES and EMT.MCHUSERNOTES:find( 'Cut') then
|
if EMT.MCHUSERNOTES and EMT.MCHUSERNOTES:find( 'Cut') and ( IsEndPhase( EMT.PHASE+1) or IsEnd2Phase( EMT.PHASE+1)) then
|
||||||
EmtOutput( '(M175)')
|
EmtOutput( '(M175)')
|
||||||
end
|
end
|
||||||
if not bHeadFirst then
|
if not bHeadFirst then
|
||||||
@@ -832,12 +914,47 @@ function OnRapid()
|
|||||||
EmtAdjustRotaryAxes()
|
EmtAdjustRotaryAxes()
|
||||||
EmitZmax( false)
|
EmitZmax( false)
|
||||||
EMT.ZMAX = true
|
EMT.ZMAX = true
|
||||||
|
-- se pezzi alti e devo cambiare utensile su testa con CU, porto la testa vicino al cambio utensile
|
||||||
|
if EMT.ST > BeamHeightForFixRot and EMT.HEAD == 'H1' and EMT.TOOL ~= EMT.NEXTTOOL and EMT.NEXTHEAD ~= 'H2' then
|
||||||
|
local dBAxis = 90
|
||||||
|
local dCAxis = EgtIf( BD.RIGHT_LOAD, 90, -90)
|
||||||
|
local sEE = ' EE3'
|
||||||
|
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
||||||
|
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
||||||
|
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
|
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
||||||
|
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOut)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
||||||
|
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOut)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
end
|
||||||
-- se altrimenti movimento in Home
|
-- se altrimenti movimento in Home
|
||||||
elseif EMT.FLAG == 4 then
|
elseif EMT.FLAG == 4 then
|
||||||
-- non previsto
|
-- non previsto
|
||||||
-- se altrimenti rotazione a Z max
|
-- se altrimenti rotazione a Z max per lavorazione successiva
|
||||||
elseif EMT.FLAG == 5 then
|
elseif EMT.FLAG == 5 then
|
||||||
-- viene gestito all'inizio della lavorazione successiva
|
EMT.REFLOC = nil
|
||||||
|
EMT.IPLGL = false
|
||||||
|
MyAdjustLinearAxes()
|
||||||
|
EmtAdjustRotaryAxes()
|
||||||
|
EmtResetPrev()
|
||||||
|
-- ricavo i dati per la lavorazione
|
||||||
|
local sEE = ' EE3'
|
||||||
|
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
||||||
|
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
||||||
|
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
|
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..
|
||||||
|
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOut)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
-- altrimenti errore
|
-- altrimenti errore
|
||||||
else
|
else
|
||||||
EmtSetLastError( 1212, "Unknown Rapid flag")
|
EmtSetLastError( 1212, "Unknown Rapid flag")
|
||||||
@@ -903,6 +1020,11 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnArc()
|
function OnArc()
|
||||||
|
-- con aggregato non si possono fare archi. Deve essere tutto spezzato
|
||||||
|
if EMT.HEAD == 'H5' or EMT.HEAD == 'H6' or EMT.HEAD == 'H7' then
|
||||||
|
EmtSetLastError( 1211, "With aggregate, the arcs must be splitted")
|
||||||
|
end
|
||||||
|
|
||||||
MyBackupAxes()
|
MyBackupAxes()
|
||||||
EMT.TLAST = EMT.L1
|
EMT.TLAST = EMT.L1
|
||||||
-- non modale su archi
|
-- non modale su archi
|
||||||
@@ -929,18 +1051,51 @@ function OnArc()
|
|||||||
local sFeed = EmtGetFeed()
|
local sFeed = EmtGetFeed()
|
||||||
-- tipo arco
|
-- tipo arco
|
||||||
local sArc = 'G' .. EgtNumToString(EMT.MOVE,0)
|
local sArc = 'G' .. EgtNumToString(EMT.MOVE,0)
|
||||||
-- emetto arco
|
-- se arco molto grande, approssimo con una retta
|
||||||
EmtOutput( sArc..sAxes..sRad..sFeed)
|
if EMT.RR > 99999 then
|
||||||
|
EmtOutput( "G1"..sAxes..sFeed)
|
||||||
|
else
|
||||||
|
EmtOutput( sArc..sAxes..sRad..sFeed)
|
||||||
|
end
|
||||||
|
|
||||||
-- aggiorno valori come precedenti
|
-- aggiorno valori come precedenti
|
||||||
EmtUpdatePrev()
|
EmtUpdatePrev()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function FindNextTool()
|
||||||
|
-- salvo stato iniziale
|
||||||
|
local CurrMachId = EgtGetCurrMachining()
|
||||||
|
local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
||||||
|
-- cerco lavorazione con utensile su gruppo testa indicato
|
||||||
|
local sTool, sHead, sTcPos
|
||||||
|
local OpId = EgtGetNextActiveOperation( CurrMachId or EMT.MCHID)
|
||||||
|
while OpId do
|
||||||
|
local nType = EgtGetOperationType( OpId)
|
||||||
|
if nType ~= MCH_OY.NONE and nType ~= MCH_OY.DISP then
|
||||||
|
if EgtSetCurrMachining( OpId) then
|
||||||
|
sTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||||
|
if EgtTdbSetCurrTool( sTool) then
|
||||||
|
sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||||
|
sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
OpId = EgtGetNextActiveOperation( OpId)
|
||||||
|
end
|
||||||
|
-- ripristino stato iniziale
|
||||||
|
EgtSetCurrMachining( CurrMachId or GDB_ID.NULL)
|
||||||
|
EgtTdbSetCurrTool( CurrTool or '')
|
||||||
|
-- restituisco risultato
|
||||||
|
return sTool, sHead, sTcPos
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function CalcDinamicaPinze( dH, dS, dL)
|
function CalcDinamicaPinze( dH, dS, dL)
|
||||||
local MinTempoAcc = 0.3 -- [s]
|
local MinTempoAcc = 0.3 -- [s]
|
||||||
local MaxTempoAcc = 4.0 -- [s]
|
local MaxTempoAcc = 4.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 Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg]
|
||||||
local FMaxPinze = EMT.FMAXPINZE -- Feed massima pinze [mm/min]
|
local FMaxPinze = EMT.FMAXPINZE -- Feed massima pinze [mm/min]
|
||||||
local ForzaAttrito = 350 * 9.8 * 0.2 -- Forza chiusura pinze [Kgf] * g * Coeff_Attrito -> [N]
|
local ForzaAttrito = 350 * 9.8 * 0.2 -- Forza chiusura pinze [Kgf] * g * Coeff_Attrito -> [N]
|
||||||
@@ -1482,16 +1637,29 @@ function MyAdjustLinearAxes()
|
|||||||
|
|
||||||
if EMT.REFLOC then
|
if EMT.REFLOC then
|
||||||
local vtE
|
local vtE
|
||||||
if EMT.HEAD ~= 'H3' then
|
if EMT.HEAD == 'H1' or EMT.HEAD == 'H2' then
|
||||||
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef
|
vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef
|
||||||
else
|
elseif EMT.HEAD == 'H3' then
|
||||||
local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs
|
local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
|
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
|
||||||
vtE = vtAux * LenAux - Z_AX() * LenRef
|
vtE = vtAux * LenAux - Z_AX() * LenRef
|
||||||
|
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
|
||||||
|
local LenAux = AngTr1Offs + MillOffs
|
||||||
|
local LenRef = MillOffs
|
||||||
|
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
|
||||||
|
vtE = vtAux * LenAux - Z_AX() * LenRef
|
||||||
|
elseif EMT.HEAD == 'H7' then
|
||||||
|
local LenAux = AngTrBHOffs + MillOffs
|
||||||
|
local LenRef = MillOffs
|
||||||
|
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
|
||||||
|
vtE = vtAux * LenAux - Z_AX() * LenRef
|
||||||
|
else
|
||||||
|
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
|
||||||
end
|
end
|
||||||
|
|
||||||
EMT.L1 = EMT.L1 - vtE:getX()
|
EMT.L1 = EMT.L1 - vtE:getX()
|
||||||
EMT.L2 = EMT.L2 - DeltaTabY - vtE:getY()
|
EMT.L2 = EMT.L2 - DeltaTabY - vtE:getY()
|
||||||
EMT.L3 = EMT.L3 - DeltaTabZ - vtE:getZ()
|
EMT.L3 = EMT.L3 - DeltaTabZ - vtE:getZ()
|
||||||
@@ -1531,7 +1699,7 @@ function CalcInterpPlane()
|
|||||||
local ptS = Point3d( xS, 0, 0)
|
local ptS = Point3d( xS, 0, 0)
|
||||||
-- calcolo per piano generico
|
-- calcolo per piano generico
|
||||||
local vtE
|
local vtE
|
||||||
if EMT.HEAD ~= 'H3' then
|
if EMT.HEAD == 'H1' or EMT.HEAD == 'H2' then
|
||||||
vtE = Vector3d( EMT.EXTR)
|
vtE = Vector3d( EMT.EXTR)
|
||||||
else
|
else
|
||||||
vtE = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
|
vtE = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
|
||||||
@@ -1582,7 +1750,7 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function GetET( sHead, sTcPos, dAxR3)
|
function GetET( sHead, sTcPos, dAxR3)
|
||||||
if sHead == 'H1' then
|
if sHead == 'H1' or sHead == 'H5' or sHead == 'H6' or sHead == 'H7' then
|
||||||
return ' E'..sTcPos
|
return ' E'..sTcPos
|
||||||
elseif sHead == 'H2' then
|
elseif sHead == 'H2' then
|
||||||
return ' ET42'
|
return ' ET42'
|
||||||
@@ -3,10 +3,11 @@
|
|||||||
|
|
||||||
-- carico librerie
|
-- carico librerie
|
||||||
local INFO_STD_PP = require( 'Version')
|
local INFO_STD_PP = require( 'Version')
|
||||||
|
local BD = require( 'BeamData')
|
||||||
|
|
||||||
-- Variabili di modulo
|
-- Variabili di modulo
|
||||||
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
||||||
local MACHINE_INFO = 'PP_VER ver.'..PP_VER
|
local MACHINE_INFO = MACH_NAME..' ver.'..PP_VER
|
||||||
local TEST_USE = false
|
local TEST_USE = false
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -38,14 +39,18 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnProgramStart()
|
function OnProgramStart()
|
||||||
|
|
||||||
|
-- aggiungo prefisso per commentae commenti iniziali se la macchina è utilizzata per fare i test
|
||||||
|
local sPrefixCommentLine = '' ; if IS_TEST_MACHINE or EgtEndsWith( EgtGetCurrMachineDir(), '.TEST') then sPrefixCommentLine = '//' end
|
||||||
|
|
||||||
-- Intestazioni
|
-- Intestazioni
|
||||||
if EMT.INFO then
|
if EMT.INFO then
|
||||||
ParkLine( '('..EMT.INFO..')')
|
ParkLine( sPrefixCommentLine..'('..EMT.INFO..')')
|
||||||
else
|
else
|
||||||
ParkLine( '(Program Start)')
|
ParkLine( '(Program Start)')
|
||||||
end
|
end
|
||||||
ParkLine( '('.. CSP_INFO..')')
|
ParkLine( sPrefixCommentLine..'('.. CSP_INFO..')')
|
||||||
ParkLine( '('.. MACHINE_INFO..')')
|
ParkLine( sPrefixCommentLine..'('.. MACHINE_INFO..')')
|
||||||
|
|
||||||
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
||||||
if TEST_USE then
|
if TEST_USE then
|
||||||
@@ -146,7 +151,12 @@ function OnToolData()
|
|||||||
local sOut = 'M992 P1=' .. EgtNumToString( nPos, 0) .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
|
local sOut = 'M992 P1=' .. EgtNumToString( nPos, 0) .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
|
||||||
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
|
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
|
||||||
ParkLine( sOut)
|
ParkLine( sOut)
|
||||||
-- altro non previsto
|
-- emissione dati sega a catena
|
||||||
|
elseif EMT.HEAD == 'H7' then
|
||||||
|
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
|
||||||
|
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
|
||||||
|
ParkLine( sOut)
|
||||||
|
-- altro non previsto
|
||||||
else
|
else
|
||||||
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
|
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
|
||||||
end
|
end
|
||||||
@@ -206,19 +216,12 @@ function OnDispositionEnd()
|
|||||||
local HTrave = EMT.HT
|
local HTrave = EMT.HT
|
||||||
local STrave = EMT.ST
|
local STrave = EMT.ST
|
||||||
local HOverM = EMT.HOVM
|
local HOverM = EMT.HOVM
|
||||||
|
|
||||||
-- calcolo dati pinze
|
-- calcolo dati pinze
|
||||||
local MinAccPinze = 0.3
|
local TempAccPinze, TempMinAccPinze, RidFeed = CalcDinamicaPinze( HTrave, STrave, LBarra)
|
||||||
local MaxAccPinze = 4
|
local TempAccPinz1, TempMinAccPinz1, RidFeed1 = CalcDinamicaPinze( HTrave, STrave, LBarra - LTrave)
|
||||||
local KgMtCubo= 550 -- densità legno in Kg / metro cubo
|
local TempAccPinz2, TempMinAccPinz2, RidFeed2 = CalcDinamicaPinze( HTrave, STrave, LTrave)
|
||||||
local Massa = ( HTrave * STrave * LBarra * KgMtCubo ) / 1000000000
|
|
||||||
local FMaxPinze = EMT.FMAXPINZE
|
|
||||||
local ForzaAtrito = 700 / 2 -- Serve per regolare P32 (700 valore reale pistone)
|
|
||||||
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAtrito) / 1000)
|
|
||||||
if ( TempoAcc < MinAccPinze) then TempoAcc = MinAccPinze end
|
|
||||||
if ( TempoAcc > MaxAccPinze) then TempoAcc = MaxAccPinze end
|
|
||||||
local AccPinze = FMaxPinze / ( 60 * TempoAcc)
|
|
||||||
local RidFeed = 100 / Massa * 100
|
|
||||||
if ( RidFeed > 100) then RidFeed = 100 end
|
|
||||||
if IdTrave >= 0 then
|
if IdTrave >= 0 then
|
||||||
local sPrt = '( *** Part '.. EgtNumToString( IdTrave, 0) ..' ***)'
|
local sPrt = '( *** Part '.. EgtNumToString( IdTrave, 0) ..' ***)'
|
||||||
local sOut = '( SN=' .. IdTrave .. ' LBarra=' .. EmtLenToString( LBarra, 3) .. ' L='..EmtLenToString( LTrave, 3) ..
|
local sOut = '( SN=' .. IdTrave .. ' LBarra=' .. EmtLenToString( LBarra, 3) .. ' L='..EmtLenToString( LTrave, 3) ..
|
||||||
@@ -247,7 +250,8 @@ function OnDispositionEnd()
|
|||||||
-- se carico barra
|
-- se carico barra
|
||||||
if EMT.LOAD or EMT.RELOAD then
|
if EMT.LOAD or EMT.RELOAD then
|
||||||
sOut = 'M115 P1=' .. EmtLenToString( LBarra, 2) .. ' P2=' .. EmtLenToString( HTrave, 2) .. ' P3=' .. EmtLenToString( STrave, 2) ..
|
sOut = 'M115 P1=' .. EmtLenToString( LBarra, 2) .. ' P2=' .. EmtLenToString( HTrave, 2) .. ' P3=' .. EmtLenToString( STrave, 2) ..
|
||||||
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( nLoad90) .. ' P6=' .. EmtLenToString( LTrave, 2)
|
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( nLoad90) .. ' P6=' .. EmtLenToString( LTrave, 2) ..
|
||||||
|
' P7=' .. EgtNumToString( TempAccPinze, 2) .. ' P8=' .. EgtNumToString( TempAccPinz2, 2) .. ' P9=' .. EgtNumToString( TempAccPinz1, 2)
|
||||||
if EMT.LOAD then
|
if EMT.LOAD then
|
||||||
ParkLine( sOut)
|
ParkLine( sOut)
|
||||||
SetStartValue( 1, LBarra)
|
SetStartValue( 1, LBarra)
|
||||||
@@ -261,7 +265,8 @@ function OnDispositionEnd()
|
|||||||
-- altrimenti recupero rimanenza
|
-- altrimenti recupero rimanenza
|
||||||
else
|
else
|
||||||
sOut = 'M115 P1=' .. EmtLenToString( LBarra, 2) .. ' P2=' .. EmtLenToString( HTrave, 2) .. ' P3=' .. EmtLenToString( STrave, 2) ..
|
sOut = 'M115 P1=' .. EmtLenToString( LBarra, 2) .. ' P2=' .. EmtLenToString( HTrave, 2) .. ' P3=' .. EmtLenToString( STrave, 2) ..
|
||||||
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( nLoad90) .. ' P6=' .. EmtLenToString( EgtIf( IdTrave >= 0, LTrave, LBarra), 2)
|
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( nLoad90) .. ' P6=' .. EmtLenToString( EgtIf( IdTrave >= 0, LTrave, LBarra), 2) ..
|
||||||
|
' P7=' .. EgtNumToString( TempAccPinze, 2) .. ' P8=' .. EgtNumToString( TempAccPinz2, 2) .. ' P9=' .. EgtNumToString( TempAccPinz1, 2)
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
EmtOutput( 'M112'..' P1='..EmtLenToString( LoadT, 3).. ' P5=1 P6='..EmtLenToString( EMT.YPOS, 3)..' P7='..EmtLenToString( ParkV, 3) ..' P9='..GetFmaxClamp())
|
EmtOutput( 'M112'..' P1='..EmtLenToString( LoadT, 3).. ' P5=1 P6='..EmtLenToString( EMT.YPOS, 3)..' P7='..EmtLenToString( ParkV, 3) ..' P9='..GetFmaxClamp())
|
||||||
-- aggiorno dati aggancio carrelli alla trave
|
-- aggiorno dati aggancio carrelli alla trave
|
||||||
@@ -511,6 +516,8 @@ function OnMachiningEnd()
|
|||||||
EMT.AUXTYPE = nil
|
EMT.AUXTYPE = nil
|
||||||
EMT.U_STD = nil
|
EMT.U_STD = nil
|
||||||
EMT.PREVTOOL = EMT.TOOL
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
|
EMT.PREVHEAD = EMT.HEAD
|
||||||
|
EMT.PREVS = EMT.S
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -521,6 +528,11 @@ function OnPathStart()
|
|||||||
-- primo posizionamento sempre in globale
|
-- primo posizionamento sempre in globale
|
||||||
EMT.REFLOC = nil
|
EMT.REFLOC = nil
|
||||||
EMT.IPLGL = false
|
EMT.IPLGL = false
|
||||||
|
|
||||||
|
-- salvo precedenti rotanti
|
||||||
|
EMT.R1pp = EMT.R1p
|
||||||
|
EMT.R2pp = EMT.R2p
|
||||||
|
|
||||||
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
||||||
EmtResetPrev()
|
EmtResetPrev()
|
||||||
EMT.AUXCMD = {}
|
EMT.AUXCMD = {}
|
||||||
@@ -619,6 +631,8 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnRapid()
|
function OnRapid()
|
||||||
|
-- recupero prossimo utensile
|
||||||
|
EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTTCPOS = FindNextTool()
|
||||||
MyBackupAxes()
|
MyBackupAxes()
|
||||||
-- se primo movimento della lavorazione, gestione speciale
|
-- se primo movimento della lavorazione, gestione speciale
|
||||||
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
||||||
@@ -634,22 +648,49 @@ function OnRapid()
|
|||||||
if not ( EMT.LOAD or EMT.RELOAD) then
|
if not ( EMT.LOAD or EMT.RELOAD) then
|
||||||
if not EMT.ZMAX and #EMT.AUXSTR > 0 then
|
if not EMT.ZMAX and #EMT.AUXSTR > 0 then
|
||||||
EmitZmax()
|
EmitZmax()
|
||||||
|
bHeadFirst = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- primo posizionamento
|
||||||
|
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||||
|
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
|
if EMT.PREVHEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||||
|
local sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, 3) .. ' P3=' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' P4=' .. EgtNumToString( EMT.R2pp, 3) .. ' P5=' .. EgtNumToString( EMT.R1pp, 3) ..
|
||||||
|
' P6=' .. EgtNumToString( EMT.PREVTCPOS, 3) .. ' P7=' .. EgtNumToString( EMT.PREVS, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'M101 P1=2')
|
||||||
|
EmtOutput( 'M101 P1=3')
|
||||||
|
end
|
||||||
|
|
||||||
if not EMT.LOAD then
|
if not EMT.LOAD then
|
||||||
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '['), '%)', ']')
|
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '['), '%)', ']')
|
||||||
EmtOutput( '( * ' .. sOut .. ' * )')
|
EmtOutput( '( * ' .. sOut .. ' * )')
|
||||||
end
|
end
|
||||||
-- primo posizionamento
|
|
||||||
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
|
if ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||||
|
local sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, 3) .. ' P3=' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' P4=' .. EgtNumToString( EMT.R2, 3) .. ' P5=' .. EgtNumToString( EMT.R1, 3) ..
|
||||||
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'M101 P1=2')
|
||||||
|
EmtOutput( 'M101 P1=3')
|
||||||
|
end
|
||||||
|
-- resetto valori precedenti
|
||||||
EmtResetPrev()
|
EmtResetPrev()
|
||||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
local MyZPos = EMT.L3
|
||||||
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, 3) .. ' P3=' .. EmtLenToString( EMT.L3, 3) ..
|
-- se sono su pezzi alti e movimento da emettere, per sicurezza a Z massima
|
||||||
|
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||||
|
MyZPos = MyZHome
|
||||||
|
end
|
||||||
|
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, 3) .. ' P3=' .. EmtLenToString( MyZPos, 3) ..
|
||||||
' P4=' .. EgtNumToString( EMT.R2, 3) .. ' P5=' .. EgtNumToString( EMT.R1, 3) ..
|
' P4=' .. EgtNumToString( EMT.R2, 3) .. ' P5=' .. EgtNumToString( EMT.R1, 3) ..
|
||||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
|
||||||
sOut = sOut .. ' P12=1'
|
|
||||||
end
|
|
||||||
if EMT.LOAD then
|
if EMT.LOAD then
|
||||||
ParkLine( sOut)
|
ParkLine( sOut)
|
||||||
else
|
else
|
||||||
@@ -741,7 +782,7 @@ function OnRapid()
|
|||||||
sB = '2'
|
sB = '2'
|
||||||
end
|
end
|
||||||
-- se taglio di coda senza residuo da scaricare, emetto M175 per accelerare il carico della barra successiva
|
-- se taglio di coda senza residuo da scaricare, emetto M175 per accelerare il carico della barra successiva
|
||||||
if EMT.MCHUSERNOTES and EMT.MCHUSERNOTES:find( 'Cut') then
|
if EMT.MCHUSERNOTES and EMT.MCHUSERNOTES:find( 'Cut') and ( IsEndPhase( EMT.PHASE+1) or IsEnd2Phase( EMT.PHASE+1)) then
|
||||||
EmtOutput( 'M175')
|
EmtOutput( 'M175')
|
||||||
end
|
end
|
||||||
if bHeadFirst then
|
if bHeadFirst then
|
||||||
@@ -816,12 +857,42 @@ function OnRapid()
|
|||||||
EmtAdjustRotaryAxes()
|
EmtAdjustRotaryAxes()
|
||||||
EmitZmax( true)
|
EmitZmax( true)
|
||||||
EMT.ZMAX = true
|
EMT.ZMAX = true
|
||||||
|
-- se pezzi alti e devo cambiare utensile su testa con CU, porto la testa vicino al cambio utensile
|
||||||
|
if EMT.ST > BeamHeightForFixRot and EMT.HEAD == 'H1' and EMT.TOOL ~= EMT.NEXTTOOL and EMT.NEXTHEAD ~= 'H2' then
|
||||||
|
local dBAxis = 90
|
||||||
|
local dCAxis = EgtIf( BD.RIGHT_LOAD, 90, -90)
|
||||||
|
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, 3) .. ' P3=' .. EmtLenToString( EMT.L3, 3) ..
|
||||||
|
' P4=' .. EgtNumToString( dBAxis, 3) .. ' P5=' .. EgtNumToString( dCAxis, 3) ..
|
||||||
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=3'
|
||||||
|
EmtOutput( sOut)
|
||||||
|
EmtOutput( 'M101 P1=2')
|
||||||
|
EmtOutput( 'M101 P1=3')
|
||||||
|
sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, 3) .. ' P3=' .. EmtLenToString( EMT.L3, 3) ..
|
||||||
|
' P4=' .. EgtNumToString( dBAxis, 3) .. ' P5=' .. EgtNumToString( dCAxis, 3) ..
|
||||||
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=3'
|
||||||
|
EmtOutput( sOut)
|
||||||
|
EmtOutput( 'M101 P1=2')
|
||||||
|
EmtOutput( 'M101 P1=3')
|
||||||
|
end
|
||||||
-- se altrimenti movimento in Home
|
-- se altrimenti movimento in Home
|
||||||
elseif EMT.FLAG == 4 then
|
elseif EMT.FLAG == 4 then
|
||||||
-- non previsto
|
-- non previsto
|
||||||
-- se altrimenti rotazione a Z max
|
-- se altrimenti rotazione a Z max per lavorazione successiva
|
||||||
elseif EMT.FLAG == 5 then
|
elseif EMT.FLAG == 5 then
|
||||||
-- viene gestito all'inizio della lavorazione successiva
|
EMT.REFLOC = nil
|
||||||
|
EMT.IPLGL = false
|
||||||
|
MyAdjustLinearAxes()
|
||||||
|
EmtAdjustRotaryAxes()
|
||||||
|
EmtResetPrev()
|
||||||
|
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, 3) .. ' P3=' .. EmtLenToString( EMT.L3, 3) ..
|
||||||
|
' P4=' .. EgtNumToString( EMT.R2, 3) .. ' P5=' .. EgtNumToString( EMT.R1, 3) ..
|
||||||
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=3'
|
||||||
|
EmtOutput( sOut)
|
||||||
|
EmtOutput( 'M101 P1=2')
|
||||||
|
EmtOutput( 'M101 P1=3')
|
||||||
-- altrimenti errore
|
-- altrimenti errore
|
||||||
else
|
else
|
||||||
error( "Unknown Rapid flag")
|
error( "Unknown Rapid flag")
|
||||||
@@ -948,6 +1019,57 @@ function OnArc()
|
|||||||
EmtUpdatePrev()
|
EmtUpdatePrev()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function FindNextTool()
|
||||||
|
-- salvo stato iniziale
|
||||||
|
local CurrMachId = EgtGetCurrMachining()
|
||||||
|
local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
||||||
|
-- cerco lavorazione con utensile su gruppo testa indicato
|
||||||
|
local sTool, sHead, sTcPos
|
||||||
|
local OpId = EgtGetNextActiveOperation( CurrMachId or EMT.MCHID)
|
||||||
|
while OpId do
|
||||||
|
local nType = EgtGetOperationType( OpId)
|
||||||
|
if nType ~= MCH_OY.NONE and nType ~= MCH_OY.DISP then
|
||||||
|
if EgtSetCurrMachining( OpId) then
|
||||||
|
sTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||||
|
if EgtTdbSetCurrTool( sTool) then
|
||||||
|
sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||||
|
sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
OpId = EgtGetNextActiveOperation( OpId)
|
||||||
|
end
|
||||||
|
-- ripristino stato iniziale
|
||||||
|
EgtSetCurrMachining( CurrMachId or GDB_ID.NULL)
|
||||||
|
EgtTdbSetCurrTool( CurrTool or '')
|
||||||
|
-- restituisco risultato
|
||||||
|
return sTool, sHead, sTcPos
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function CalcDinamicaPinze( dH, dS, dL)
|
||||||
|
local MinTempoAcc = 0.3 -- [s]
|
||||||
|
local MaxTempoAcc = 4.0 -- [s]
|
||||||
|
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]
|
||||||
|
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAttrito) / 1000)
|
||||||
|
if ( TempoAcc < MinTempoAcc) then TempoAcc = MinTempoAcc end
|
||||||
|
if ( TempoAcc > MaxTempoAcc) then TempoAcc = MaxTempoAcc end
|
||||||
|
local AccMaxPinze = FMaxPinze / ( 60 * MinTempoAcc)
|
||||||
|
local AccPinze = FMaxPinze / ( 60 * TempoAcc)
|
||||||
|
local RidFeed = 100 / Massa * 100
|
||||||
|
if RidFeed > 100 then
|
||||||
|
RidFeed = 100
|
||||||
|
elseif RidFeed < 10 then
|
||||||
|
RidFeed = 10
|
||||||
|
end
|
||||||
|
return TempoAcc * 1000, MinTempoAcc * 1000, RidFeed
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function CalcCharStatus( sCmd, bSkipPress)
|
function CalcCharStatus( sCmd, bSkipPress)
|
||||||
-- aperto
|
-- aperto
|
||||||
@@ -1523,12 +1645,18 @@ function MyAdjustLinearAxes()
|
|||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
|
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
|
||||||
vtE = vtAux * LenAux - Z_AX() * LenRef
|
vtE = vtAux * LenAux - Z_AX() * LenRef
|
||||||
elseif EMT.HEAD == 'H5' then
|
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
|
||||||
local Len = EMT.TLEN + AngTr1Len
|
local Len = EMT.TLEN + AngTr1Len
|
||||||
local LenAux = MillOffs + AngTr1Offs
|
local LenAux = MillOffs + AngTr1Offs
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2)
|
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2)
|
||||||
vtE = Vector3d( EMT.EXTR) * Len + vtAux * LenAux - Z_AX() * LenRef
|
vtE = Vector3d( EMT.EXTR) * Len + vtAux * LenAux - Z_AX() * LenRef
|
||||||
|
elseif EMT.HEAD == 'H7' then
|
||||||
|
local Len = EMT.TLEN + AngTrBHLen
|
||||||
|
local LenAux = MillOffs + AngTrBHOffs
|
||||||
|
local LenRef = MillOffs
|
||||||
|
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2)
|
||||||
|
vtE = Vector3d( EMT.EXTR) * Len + vtAux * LenAux - Z_AX() * LenRef
|
||||||
else
|
else
|
||||||
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
|
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
|
||||||
end
|
end
|
||||||
@@ -1565,6 +1693,8 @@ function AdjustToolKinematic()
|
|||||||
return EgtIf( EMT.EXIT == 1, '11', '12')
|
return EgtIf( EMT.EXIT == 1, '11', '12')
|
||||||
elseif EMT.HEAD == 'H6' then
|
elseif EMT.HEAD == 'H6' then
|
||||||
return EgtIf( EMT.EXIT == 1, '21', '22')
|
return EgtIf( EMT.EXIT == 1, '21', '22')
|
||||||
|
elseif EMT.HEAD == 'H7' then
|
||||||
|
return '31'
|
||||||
else
|
else
|
||||||
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
|
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
|
||||||
end
|
end
|
||||||
@@ -1613,6 +1743,8 @@ function AdjustTcPos( bLen3)
|
|||||||
sPos = '0' .. sPos
|
sPos = '0' .. sPos
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- salvo posizione
|
||||||
|
EMT.PREVTCPOS = sPos
|
||||||
return sPos
|
return sPos
|
||||||
end
|
end
|
||||||
|
|
||||||
+213
-107
@@ -1,4 +1,4 @@
|
|||||||
-- Processore macchina Essetre-FAST by EgalWare s.r.l. 2024/02/23
|
-- Processore macchina Essetre-FAST by EgalWare s.r.l. 2024/03/09
|
||||||
|
|
||||||
-- Intestazioni
|
-- Intestazioni
|
||||||
require( 'EmtGenerator')
|
require( 'EmtGenerator')
|
||||||
@@ -15,11 +15,11 @@ BIG_TOOL_DIAM = 300
|
|||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local sBaseDir = EgtGetCurrMachineDir()
|
local sBaseDir = EgtGetCurrMachineDir()
|
||||||
if NumericalControl == 'NUM' then
|
if NumericalControl == 'NUM' then
|
||||||
dofile( sBaseDir .. '\\Common-FAST.NUM.mlpe')
|
dofile( sBaseDir .. '\\Common_FAST.NUM.mlpe')
|
||||||
elseif NumericalControl == 'TPA' then
|
elseif NumericalControl == 'TPA' then
|
||||||
dofile( sBaseDir .. '\\Common-FAST.TPA.mlpe')
|
dofile( sBaseDir .. '\\Common_FAST.TPA.mlpe')
|
||||||
elseif NumericalControl == 'NUM_PLUS' then
|
elseif NumericalControl == 'NUM_PLUS' then
|
||||||
dofile( sBaseDir .. '\\Common-FAST.NUM_PLUS.mlpe')
|
dofile( sBaseDir .. '\\Common_FAST.NUM_PLUS.mlpe')
|
||||||
else
|
else
|
||||||
EmtSetLastError( 1201, 'Numerical Control error : unkwnown type')
|
EmtSetLastError( 1201, 'Numerical Control error : unkwnown type')
|
||||||
end
|
end
|
||||||
@@ -105,6 +105,7 @@ function OnSimulStart()
|
|||||||
AddToCollisionCheck( 'B', 'COLLISION', EMT.COLLOBJ)
|
AddToCollisionCheck( 'B', 'COLLISION', EMT.COLLOBJ)
|
||||||
AddToCollisionCheck( 'C', 'COLLISION', EMT.COLLOBJ)
|
AddToCollisionCheck( 'C', 'COLLISION', EMT.COLLOBJ)
|
||||||
AddToCollisionCheck( 'H5', 'COLLISION', EMT.COLLOBJ)
|
AddToCollisionCheck( 'H5', 'COLLISION', EMT.COLLOBJ)
|
||||||
|
AddToCollisionCheck( 'H6', 'COLLISION', EMT.COLLOBJ)
|
||||||
AddToolToCollisionCheck( 'H2', 1, EMT.COLLOBJ)
|
AddToolToCollisionCheck( 'H2', 1, EMT.COLLOBJ)
|
||||||
AddToolHolderToCollisionCheck( 'H2', 1, EMT.COLLOBJ)
|
AddToolHolderToCollisionCheck( 'H2', 1, EMT.COLLOBJ)
|
||||||
DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4)
|
DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4)
|
||||||
@@ -130,7 +131,7 @@ function OnSimulStart()
|
|||||||
local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId or GDB_ID.NULL, McdData[i].Sub) or GDB_ID.NULL, McdData[i].Name)
|
local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId or GDB_ID.NULL, McdData[i].Sub) or GDB_ID.NULL, McdData[i].Name)
|
||||||
if nId then
|
if nId then
|
||||||
table.insert( EMT.MCODET, nId)
|
table.insert( EMT.MCODET, nId)
|
||||||
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is ok', 4)
|
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' (' .. tostring( nId) .. ') is ok', 4)
|
||||||
else
|
else
|
||||||
nMcdNullCnt = nMcdNullCnt + 1
|
nMcdNullCnt = nMcdNullCnt + 1
|
||||||
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4)
|
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4)
|
||||||
@@ -152,7 +153,8 @@ function OnSimulDispositionStarting()
|
|||||||
EmtUnlinkAllRawPartsFromGroups()
|
EmtUnlinkAllRawPartsFromGroups()
|
||||||
if EMT.PHASE > 1 then
|
if EMT.PHASE > 1 then
|
||||||
if IsStartOrRestPhase( EMT.PHASE) then
|
if IsStartOrRestPhase( EMT.PHASE) then
|
||||||
EgtSetAxisPos( 'T', LoadT)
|
local ParkT = GetParkT()
|
||||||
|
EgtSetAxisPos( 'T', ParkT)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -211,20 +213,24 @@ function OnSimulDispositionStart()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- determino la risoluzione dello Zmap
|
-- determino la risoluzione dello Zmap
|
||||||
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
|
||||||
local dTol = 4.71
|
local dTol = 4.71
|
||||||
if dArea < CoeffVM * 0.15e6 then
|
if EmtGetVMillStep then
|
||||||
dTol = 0.71
|
dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), 4.71)
|
||||||
elseif dArea < CoeffVM * 0.3e6 then
|
else
|
||||||
dTol = 1.01
|
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
||||||
elseif dArea < CoeffVM * 0.6e6 then
|
if dArea < 0.075e6 then
|
||||||
dTol = 1.51
|
dTol = 0.71
|
||||||
elseif dArea < CoeffVM * 1.2e6 then
|
elseif dArea < 0.15e6 then
|
||||||
dTol = 1.97
|
dTol = 1.01
|
||||||
elseif dArea < CoeffVM * 2.4e6 then
|
elseif dArea < 0.3e6 then
|
||||||
dTol = 2.81
|
dTol = 1.51
|
||||||
elseif dArea < CoeffVM * 4.8e6 then
|
elseif dArea < 0.6e6 then
|
||||||
dTol = 3.77
|
dTol = 1.97
|
||||||
|
elseif dArea < 1.2e6 then
|
||||||
|
dTol = 2.81
|
||||||
|
elseif dArea < 2.4e6 then
|
||||||
|
dTol = 3.77
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- creo lo Zmap
|
-- creo lo Zmap
|
||||||
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
||||||
@@ -358,6 +364,8 @@ function OnSimulDispositionStart()
|
|||||||
EgtOutText( 'Barra non ruotata')
|
EgtOutText( 'Barra non ruotata')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- verifico posizione di carico
|
||||||
|
local ParkT = GetParkT()
|
||||||
-- indice primo grezzo della fase
|
-- indice primo grezzo della fase
|
||||||
local nOrd = GetPhaseOrd( EMT.PHASE)
|
local nOrd = GetPhaseOrd( EMT.PHASE)
|
||||||
-- ricerco vettore movimento per i successivi
|
-- ricerco vettore movimento per i successivi
|
||||||
@@ -365,7 +373,7 @@ function OnSimulDispositionStart()
|
|||||||
local nRawId = EgtGetFirstRawPart()
|
local nRawId = EgtGetFirstRawPart()
|
||||||
while nRawId do
|
while nRawId do
|
||||||
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then
|
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then
|
||||||
vtMove = Vector3d( - LoadT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0)
|
vtMove = Vector3d( - ParkT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
nRawId = EgtGetNextRawPart( nRawId)
|
nRawId = EgtGetNextRawPart( nRawId)
|
||||||
@@ -386,6 +394,8 @@ function OnSimulDispositionStart()
|
|||||||
end
|
end
|
||||||
-- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y
|
-- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y
|
||||||
else
|
else
|
||||||
|
-- verifico posizione di carico
|
||||||
|
local ParkT = GetParkT()
|
||||||
-- indice primo grezzo della fase
|
-- indice primo grezzo della fase
|
||||||
local nOrd = GetPhaseOrd( EMT.PHASE)
|
local nOrd = GetPhaseOrd( EMT.PHASE)
|
||||||
-- ricerco vettore movimento per i successivi
|
-- ricerco vettore movimento per i successivi
|
||||||
@@ -393,7 +403,7 @@ function OnSimulDispositionStart()
|
|||||||
local nRawId = EgtGetFirstRawPart()
|
local nRawId = EgtGetFirstRawPart()
|
||||||
while nRawId do
|
while nRawId do
|
||||||
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then
|
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then
|
||||||
vtMove = Vector3d( - LoadT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0)
|
vtMove = Vector3d( - ParkT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
nRawId = EgtGetNextRawPart( nRawId)
|
nRawId = EgtGetNextRawPart( nRawId)
|
||||||
@@ -456,8 +466,10 @@ function OnSimulToolSelect( dPosA)
|
|||||||
EMT.TOTDIAM = EgtTdbGetCurrToolParam( MCH_TP.TOTDIAM)
|
EMT.TOTDIAM = EgtTdbGetCurrToolParam( MCH_TP.TOTDIAM)
|
||||||
-- se non è chiamato da altro script (non c'è parametro)
|
-- se non è chiamato da altro script (non c'è parametro)
|
||||||
if not dPosA then
|
if not dPosA then
|
||||||
-- se attivo Vmill
|
-- se utensile non flottante, abilito per Vmill
|
||||||
SetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL)
|
if not EMT.TFLOAT then
|
||||||
|
EmtSetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL)
|
||||||
|
end
|
||||||
-- se attivo Collision Check
|
-- se attivo Collision Check
|
||||||
EMT.SAFEDIST = COLL_SAFE_DIST
|
EMT.SAFEDIST = COLL_SAFE_DIST
|
||||||
if EMT.COLLOBJ then
|
if EMT.COLLOBJ then
|
||||||
@@ -477,8 +489,8 @@ function OnSimulToolSelect( dPosA)
|
|||||||
EMT.A1n = 'Y'
|
EMT.A1n = 'Y'
|
||||||
EMT.A2n = 'V'
|
EMT.A2n = 'V'
|
||||||
end
|
end
|
||||||
-- carico utensile se non lama su sua testa o dummy
|
-- carico utensile se non lama
|
||||||
if EMT.HEAD ~= 'H2' and EMT.HEAD ~= 'H4' then
|
if EMT.HEAD ~= 'H2' then
|
||||||
-- se sega a catena, imposto subito angolo scelto per asse virtuale A
|
-- se sega a catena, imposto subito angolo scelto per asse virtuale A
|
||||||
if EMT.HEAD == 'H3' then
|
if EMT.HEAD == 'H3' then
|
||||||
if not dPosA then
|
if not dPosA then
|
||||||
@@ -503,9 +515,12 @@ function OnSimulToolSelect( dPosA)
|
|||||||
-- imposto il valore di A
|
-- imposto il valore di A
|
||||||
EgtSetAxisPos( 'A', dPosA)
|
EgtSetAxisPos( 'A', dPosA)
|
||||||
if abs( dPosA) < 0.1 then
|
if abs( dPosA) < 0.1 then
|
||||||
EgtSetAxisPos( 'C', 0)
|
EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0))
|
||||||
end
|
end
|
||||||
EgtSetAxisPos( 'B', 0)
|
EgtSetAxisPos( 'B', 0)
|
||||||
|
-- se aggregato per fresa tipo blockhaus
|
||||||
|
elseif EMT.HEAD == 'H7' then
|
||||||
|
EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0))
|
||||||
end
|
end
|
||||||
-- se punta lunga
|
-- se punta lunga
|
||||||
if EMT.TOTLEN > LONG_TOOL_MINLEN then
|
if EMT.TOTLEN > LONG_TOOL_MINLEN then
|
||||||
@@ -514,6 +529,12 @@ function OnSimulToolSelect( dPosA)
|
|||||||
EgtSetAxisPos( 'B', 0)
|
EgtSetAxisPos( 'B', 0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- se TC 1
|
||||||
|
if GetTCSet( EMT.TCPOS) == 1 then
|
||||||
|
EgtSetAxisPos( 'B', 90)
|
||||||
|
else
|
||||||
|
EgtSetAxisPos( 'B', -90)
|
||||||
|
end
|
||||||
-- breve pausa
|
-- breve pausa
|
||||||
EgtPause( 100)
|
EgtPause( 100)
|
||||||
EgtOutText( '')
|
EgtOutText( '')
|
||||||
@@ -529,86 +550,99 @@ function OnSimulToolDeselect()
|
|||||||
-- se prossimo utensile non definito, è disposizione ed esco
|
-- se prossimo utensile non definito, è disposizione ed esco
|
||||||
if EMT.NEXTTOOL == '' then return end
|
if EMT.NEXTTOOL == '' then return end
|
||||||
-- se cambia uscita su rinvio non devo fare alcunché
|
-- se cambia uscita su rinvio non devo fare alcunché
|
||||||
if EMT.HEAD == 'H5' and EMT.NEXTHEAD == 'H5' then return end
|
if ( EMT.HEAD == 'H5' and EMT.NEXTHEAD == 'H5') or ( EMT.HEAD == 'H6' and EMT.NEXTHEAD == 'H6') then return end
|
||||||
-- se sega a catena o rinvio o punta lunga o utensile di grosso diametro, devo cambiare
|
-- se sega a catena o rinvio o punta lunga o utensile di grosso diametro, devo cambiare
|
||||||
if EMT.HEAD == 'H3' or EMT.HEAD == 'H5' or ( EMT.HEAD == 'H1' and ( EMT.TOTLEN > LONG_TOOL_MINLEN or EMT.TOTDIAM > BIG_TOOL_DIAM)) then
|
if EMT.HEAD == 'H3' or EMT.HEAD == 'H5' or EMT.HEAD == 'H6' or EMT.HEAD == 'H7' or ( EMT.HEAD == 'H1' and ( EMT.TOTLEN > LONG_TOOL_MINLEN or EMT.TOTDIAM > BIG_TOOL_DIAM)) then
|
||||||
EgtOutText( 'Tool change in progress...')
|
EgtOutText( 'Tool change in progress...')
|
||||||
local RapSimStep = 4 * EMT.SIMSTEP
|
|
||||||
local RapSimRotStep = RapSimStep / 10
|
|
||||||
local CollSimRotStep = min( RapSimRotStep, 5)
|
|
||||||
-- movimento scarico sega a catena
|
-- movimento scarico sega a catena
|
||||||
if EMT.HEAD == 'H3' then
|
if EMT.HEAD == 'H3' then
|
||||||
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
|
if EMT.HB > BeamHeightForFixRot then
|
||||||
|
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
||||||
|
end
|
||||||
local dPosA = EgtGetAxisPos( 'A')
|
local dPosA = EgtGetAxisPos( 'A')
|
||||||
if abs( dPosA) < 0.1 then
|
if abs( dPosA) < 0.1 then
|
||||||
SimulMoveAxes( 'B', 0, CollSimRotStep, 'C', EgtIf( RIGHT_LOAD, 180, 0), CollSimRotStep)
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 180, 0), MCH_SIM_STEP.COLLROT)
|
||||||
else
|
else
|
||||||
SimulMoveAxes( 'B', 0, CollSimRotStep, 'C', EgtIf( RIGHT_LOAD, 90, -90), CollSimRotStep)
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||||
end
|
end
|
||||||
SimulMoveAxis( 'X', 0, RapSimStep)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
-- movimento scarico rinvio
|
-- movimento scarico rinvio
|
||||||
elseif EMT.HEAD == 'H5' then
|
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
|
||||||
SimulMoveAxes( 'B', 0, CollSimRotStep, 'C', -90, CollSimRotStep)
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'X', 0, RapSimStep)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
|
-- movimento scarico aggregato BlockHaus
|
||||||
|
elseif EMT.HEAD == 'H7' then
|
||||||
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
|
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
||||||
-- movimento scarico punta lunga su T111
|
-- movimento scarico punta lunga su T111
|
||||||
elseif EMT.TOTLEN > LONG_TOOL_MINLEN then
|
elseif EMT.TOTLEN > LONG_TOOL_MINLEN then
|
||||||
-- se su cambio utensile T111
|
-- se su cambio utensile T111
|
||||||
if EMT.TCPOS == 'T111' then
|
if EMT.TCPOS == 'T111' then
|
||||||
SimulMoveAxis( 'X', 0, RapSimStep)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxes( 'B', 0, CollSimRotStep, 'C', 0, CollSimRotStep)
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', 0, MCH_SIM_STEP.COLLROT)
|
||||||
-- altrimenti posizioni standard rastrelliera
|
-- altrimenti posizioni standard rastrelliera
|
||||||
else
|
else
|
||||||
SimulMoveAxis( 'X', 0, RapSimStep)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxes( 'B', 90, CollSimRotStep, 'C', -90, CollSimRotStep)
|
if GetTCSet( EMT.TCPOS) == 1 then
|
||||||
|
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
||||||
|
else
|
||||||
|
SimulMoveAxes( 'B', -90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- movimento scarico utensile di grosso diametro (su T111)
|
-- movimento scarico utensile di grosso diametro (su T111)
|
||||||
else
|
else
|
||||||
local dPosB = EgtGetAxisPos( 'B')
|
local dPosB = EgtGetAxisPos( 'B')
|
||||||
local dNewB = EgtIf( dPosB < 0, -90, 90)
|
local dNewB = EgtIf( dPosB < 0, -90, 90)
|
||||||
SimulMoveAxes( 'B', dNewB, CollSimRotStep, 'C', EgtIf( RIGHT_LOAD, 180, 0), CollSimRotStep)
|
SimulMoveAxes( 'B', dNewB, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 180, 0), MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'X', 0, RapSimStep)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
end
|
end
|
||||||
-- breve pausa
|
-- breve pausa
|
||||||
EgtPause( 100)
|
EgtPause( 100)
|
||||||
-- nascondo utensile su testa e lo visualizzo su TcPos
|
-- nascondo utensile su testa e lo visualizzo su TcPos
|
||||||
EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN)
|
EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN)
|
||||||
ShowToolInTcPos( EMT.TCPOS_1, true)
|
ShowToolInTcPos( EMT.TCPOS_1, true)
|
||||||
|
|
||||||
-- movimento per carico utensile
|
-- movimento per carico utensile
|
||||||
if EMT.NEXTHEAD ~= 'H3' and EMT.NEXTHEAD ~= 'H5' then
|
if EMT.NEXTHEAD ~= 'H3' and EMT.NEXTHEAD ~= 'H5' and EMT.NEXTHEAD ~= 'H6' then
|
||||||
SimulMoveAxes( 'B', 90, RapSimRotStep, 'C', EgtIf( RIGHT_LOAD, 90, -90), RapSimRotStep)
|
SimulMoveAxes( 'B', EgtIf( GetTCSet( EMT.TCPOS) == 1, 90, -90), MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
||||||
else
|
else
|
||||||
SimulMoveAxes( 'B', 0, RapSimRotStep, 'C', EgtIf( RIGHT_LOAD, 90, -90), RapSimRotStep)
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
||||||
end
|
end
|
||||||
-- se segue lama, carico utensile di default
|
-- se segue lama, carico utensile di default
|
||||||
if EMT.NEXTHEAD == 'H2' then
|
if EMT.NEXTHEAD == 'H2' then
|
||||||
local sDefTool = GetDefaultToolName()
|
local sDefTool = GetDefaultToolName()
|
||||||
EgtLoadTool( 'H1', 1, sDefTool)
|
|
||||||
EMT.TOOL_1 = sDefTool
|
EMT.TOOL_1 = sDefTool
|
||||||
EMT.TCPOS_1 = GetToolTcPos( EMT.TOOL_1)
|
EMT.TCPOS_1 = GetToolTcPos( EMT.TOOL_1)
|
||||||
|
-- se TC 1
|
||||||
|
if GetTCSet( EMT.TCPOS_1) == 1 then
|
||||||
|
EgtSetAxisPos( 'B', 90)
|
||||||
|
else
|
||||||
|
EgtSetAxisPos( 'B', -90)
|
||||||
|
end
|
||||||
|
EgtLoadTool( 'H1', 1, sDefTool)
|
||||||
-- lo nascondo sul portautensili
|
-- lo nascondo sul portautensili
|
||||||
ShowToolInTcPos( EMT.TCPOS_1, false)
|
ShowToolInTcPos( EMT.TCPOS_1, false)
|
||||||
end
|
end
|
||||||
EgtOutText( '')
|
EgtOutText( '')
|
||||||
-- deposito utensile se prossimo non lama su sua testa o dummy
|
-- deposito utensile se prossimo non lama su sua testa
|
||||||
elseif EMT.NEXTHEAD ~= 'H2' and EMT.NEXTHEAD ~= 'H4' then
|
elseif EMT.NEXTHEAD ~= 'H2' then
|
||||||
if EMT.NEXTTOOL ~= EMT.TOOL_1 then
|
if EMT.NEXTTOOL ~= EMT.TOOL_1 then
|
||||||
EgtOutText( 'Tool change in progress...')
|
EgtOutText( 'Tool change in progress...')
|
||||||
local RapSimStep = 4 * EMT.SIMSTEP
|
|
||||||
local RapSimRotStep = RapSimStep / 10
|
|
||||||
local CollSimRotStep = min( RapSimRotStep, 10)
|
|
||||||
-- simulo movimento
|
-- simulo movimento
|
||||||
SimulMoveAxes( 'B', 90, CollSimRotStep, 'C', EgtIf( RIGHT_LOAD, 90, -90), CollSimRotStep)
|
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'X', 0, RapSimStep)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
-- breve pausa
|
-- breve pausa
|
||||||
EgtPause( 100)
|
EgtPause( 100)
|
||||||
ShowToolInTcPos( EMT.TCPOS_1, true)
|
ShowToolInTcPos( EMT.TCPOS_1, true)
|
||||||
-- se segue sega a catena
|
-- se segue sega a catena
|
||||||
if EMT.NEXTHEAD == 'H3' or EMT.NEXTHEAD == 'H5' then
|
if EMT.NEXTHEAD == 'H3' or EMT.NEXTHEAD == 'H5' or EMT.NEXTHEAD == 'H6' then
|
||||||
-- se non lama, nascondo l'utensile corrente
|
-- se non lama, nascondo l'utensile corrente
|
||||||
if EMT.HEAD ~= 'H2' then
|
if EMT.HEAD ~= 'H2' then
|
||||||
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.OFF)
|
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.OFF)
|
||||||
end
|
end
|
||||||
-- eseguo movimento opportuno
|
-- eseguo movimento opportuno
|
||||||
SimulMoveAxes( 'B', 0, RapSimRotStep, 'C', EgtIf( RIGHT_LOAD, 90, -90), RapSimRotStep)
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
||||||
-- se altrimenti lama su cambio utensile
|
-- se altrimenti lama su cambio utensile
|
||||||
elseif EMT.NEXTHEAD == 'H1' and SpecialBH and EMT.NEXTTCPOS == 'T111' then
|
elseif EMT.NEXTHEAD == 'H1' and SpecialBH and EMT.NEXTTCPOS == 'T111' then
|
||||||
-- se non lama, nascondo l'utensile corrente
|
-- se non lama, nascondo l'utensile corrente
|
||||||
@@ -616,7 +650,7 @@ function OnSimulToolDeselect()
|
|||||||
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.OFF)
|
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.OFF)
|
||||||
end
|
end
|
||||||
-- eseguo movimento opportuno
|
-- eseguo movimento opportuno
|
||||||
SimulMoveAxes( 'B', -90, RapSimRotStep, 'C', 0, RapSimRotStep)
|
SimulMoveAxes( 'B', -90, MCH_SIM_STEP.RAPROT, 'C', 0, MCH_SIM_STEP.RAPROT)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
EMT.TOOL_1 = nil
|
EMT.TOOL_1 = nil
|
||||||
@@ -664,6 +698,7 @@ function OnSimulMachiningEnd()
|
|||||||
EMT.FALL = false
|
EMT.FALL = false
|
||||||
end
|
end
|
||||||
EMT.PREVHEAD = EMT.HEAD
|
EMT.PREVHEAD = EMT.HEAD
|
||||||
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
EMT.PREVEXIT = EMT.EXIT
|
EMT.PREVEXIT = EMT.EXIT
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -673,35 +708,8 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnSimulPathEnd()
|
function OnSimulPathEnd()
|
||||||
-- se attivo VMILL, lavorazione ed è richiesto di eliminare gli sfridi
|
-- rimozione eventuali sfridi
|
||||||
if EMT.VMILL and #EMT.VMILL > 0 and not EMT.OPEISDISP and EMT.VMRS then
|
ExecRemoveScraps()
|
||||||
EgtOutLog( 'OnSimulPathEnd', 5)
|
|
||||||
local vMillId = EMT.VMILL[1]
|
|
||||||
local nPart = EgtVolZmapPartCount( vMillId)
|
|
||||||
if nPart > 1 then
|
|
||||||
-- ricerca del pezzo con massimo volume
|
|
||||||
local nPartMax = 0
|
|
||||||
local dVolMax = 0
|
|
||||||
for i = 1, nPart do
|
|
||||||
local dVol = EgtVolZmapPartVolume( vMillId, i - 1)
|
|
||||||
if dVol > dVolMax then
|
|
||||||
dVolMax = dVol
|
|
||||||
nPartMax = i
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- eliminazione di tutti i pezzi piccoli
|
|
||||||
for i = nPart, 1, -1 do
|
|
||||||
if i ~= nPartMax then
|
|
||||||
local b3Vmill = EgtVolZmapGetPartBBoxGlob( vMillId, i - 1, GDB_BB.STANDARD)
|
|
||||||
if b3Vmill:getDimX() < 1200 then
|
|
||||||
EgtRemoveVolZmapPart( vMillId, i - 1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- aggiorno visualizzazione
|
|
||||||
EgtDraw()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -778,23 +786,69 @@ function OnSimulMoveStart()
|
|||||||
if EMT.MCHFIRST then
|
if EMT.MCHFIRST then
|
||||||
EgtOutText( '')
|
EgtOutText( '')
|
||||||
EMT.MCHFIRST = false
|
EMT.MCHFIRST = false
|
||||||
|
local bZmax = ( EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
-- con pezzi alti aggiorno gli assi rotanti prima di muovermi sopra il pezzo
|
-- con pezzi alti aggiorno gli assi rotanti prima di muovermi sopra il pezzo
|
||||||
if not EMT.LOAD and EMT.MOVE == 0 and EMT.HB > BeamHeightForFixRot then
|
if not EMT.LOAD and EMT.MOVE == 0 and EMT.HB > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||||
local RapSimStep = 4 * EMT.SIMSTEP
|
-- se motosega mi muovo a X di sicurezza per ruotare
|
||||||
SimulMoveAxes( 'C', EMT.R1, RapSimStep/10, 'B', EMT.R2, RapSimStep/10)
|
if ( EMT.HEAD == 'H3' or ( bZmax and EMT.TOTLEN > 200)) then
|
||||||
|
SimulMoveAxes( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID, 'C', EMT.R1, MCH_SIM_STEP.COLLROT, 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
EMT.POSTROT = nil
|
EMT.POSTROT = nil
|
||||||
end
|
end
|
||||||
|
-- se aggregato flottante su inizio attacco va compresso
|
||||||
|
if EMT.TFLOAT and not EMT.TFLOAT_CMP and EMT.MOVE == 1 and EgtGetName( EMT.MOVEID) == 'LI' then
|
||||||
|
-- recupero lunghezza
|
||||||
|
local dOffsL = - EgtGetMachiningParam( MCH_MP.OFFSL)
|
||||||
|
-- imposto compressione della parte flottante
|
||||||
|
SetFloatPos( EMT.HEAD, dOffsL)
|
||||||
|
-- imposto dati utensile in posizione compressa
|
||||||
|
EmtSetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL, 2, -dOffsL)
|
||||||
|
-- dichiaro che è compresso (assegnando Id entità di movimento)
|
||||||
|
EMT.TFLOAT_CMP = EMT.MOVEID
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
--function OnSimulMoveEnd()
|
function OnSimulMoveEnd()
|
||||||
--end
|
-- se termine di passata con lama
|
||||||
|
if EMT.FLAG == 301 then
|
||||||
|
-- rimozione eventuali sfridi
|
||||||
|
ExecRemoveScraps()
|
||||||
|
end
|
||||||
|
-- se utensile flottante e movimento di compressione
|
||||||
|
if EMT.TFLOAT and EMT.MOVEID == EMT.TFLOAT_CMP then
|
||||||
|
-- verifico ci sia stata collisione tra ghiera flottante (portautensile e pezzo)
|
||||||
|
if not EMT.TFLOAT_TH_COMPR_COLL then
|
||||||
|
local sErr = 'CUTID='..tostring( EMT.CUTID)..'; TASKID='..tostring( EMT.TASKID)..'; Mach='..EMT.MCHNAME..'; Floating Ring not compressed on approach'
|
||||||
|
EmtSetLastError( 1222, sErr)
|
||||||
|
EgtOutLog( 'Error : ' .. sErr, 1)
|
||||||
|
else
|
||||||
|
EgtOutLog( 'Floating Ring compressed on approach (MOVEID='..EgtNumToString( EMT.MOVEID)..')', 1)
|
||||||
|
end
|
||||||
|
EMT.TFLOAT_TH_COMPR_COLL = nil
|
||||||
|
end
|
||||||
|
-- se aggregato flottante su fine uscita va rilasciato
|
||||||
|
if EMT.TFLOAT and EMT.TFLOAT_CMP and EMT.MOVE == 1 and EgtGetName( EMT.MOVEID) == 'LO' and EgtGetName( EgtGetNext( EMT.MOVEID) or GDB_ID.NULL) ~= 'LO' then
|
||||||
|
-- reset compressione della parte flottante
|
||||||
|
SetFloatPos( EMT.HEAD, 0)
|
||||||
|
-- dichiaro che è rilasciato
|
||||||
|
EMT.TFLOAT_CMP = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnSimulCollision()
|
function OnSimulCollision()
|
||||||
-- se prima collisione della lavorazione, la segnalo
|
-- se prima collisione della lavorazione, la segnalo
|
||||||
if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then
|
if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then
|
||||||
|
-- speciale per utensile flottante (suo holder contro il grezzo)
|
||||||
|
if EMT.TFLOAT and EMT.TFLOAT_CMP and EMT.SIMCOBIND == 1002 and EMT.SIMVMID == EMT.VMILL[1] then
|
||||||
|
if EMT.MOVEID == EMT.TFLOAT_CMP then
|
||||||
|
EMT.TFLOAT_TH_COMPR_COLL = true
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
-- standard
|
||||||
local Class = ''
|
local Class = ''
|
||||||
if EMT.SIMCOBIND == 1001 then
|
if EMT.SIMCOBIND == 1001 then
|
||||||
Class = 'T_H1'
|
Class = 'T_H1'
|
||||||
@@ -814,7 +868,6 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function ExecAuxCmd( sCmd)
|
function ExecAuxCmd( sCmd)
|
||||||
local RapSimStep = 4 * EMT.SIMSTEP
|
|
||||||
local Cmd = EgtSplitString( sCmd)
|
local Cmd = EgtSplitString( sCmd)
|
||||||
if Cmd[1] == '0' then
|
if Cmd[1] == '0' then
|
||||||
if Cmd[2] == 'Unloading' then
|
if Cmd[2] == 'Unloading' then
|
||||||
@@ -824,7 +877,7 @@ function ExecAuxCmd( sCmd)
|
|||||||
end
|
end
|
||||||
EgtOutText( EgtIf( Cmd[3], Cmd[3], Cmd[2]))
|
EgtOutText( EgtIf( Cmd[3], Cmd[3], Cmd[2]))
|
||||||
elseif Cmd[1] == '1' then
|
elseif Cmd[1] == '1' then
|
||||||
if not SimulMoveAxis( Cmd[2], tonumber( Cmd[3]), RapSimStep) then
|
if not SimulMoveAxis( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID) then
|
||||||
if VerifyYVStroke( Cmd[2], tonumber( Cmd[3])) == nil then
|
if VerifyYVStroke( Cmd[2], tonumber( Cmd[3])) == nil then
|
||||||
EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd)
|
EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd)
|
||||||
end
|
end
|
||||||
@@ -838,8 +891,8 @@ function ExecAuxCmd( sCmd)
|
|||||||
-- Verifico movimento carrello con trave agganciata
|
-- Verifico movimento carrello con trave agganciata
|
||||||
VerifyOneChariotSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5])
|
VerifyOneChariotSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5])
|
||||||
-- Eseguo il movimento
|
-- Eseguo il movimento
|
||||||
local _, bOk, bOk2 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), RapSimStep,
|
local _, bOk, bOk2 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||||
Cmd[4], tonumber( Cmd[5]), RapSimStep)
|
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID)
|
||||||
if not ( bOk and bOk2) then
|
if not ( bOk and bOk2) then
|
||||||
local nI = EgtIf( not bOk, 2, 4)
|
local nI = EgtIf( not bOk, 2, 4)
|
||||||
if VerifyYVStroke( Cmd[nI], tonumber( Cmd[nI+1])) == nil then
|
if VerifyYVStroke( Cmd[nI], tonumber( Cmd[nI+1])) == nil then
|
||||||
@@ -850,9 +903,9 @@ function ExecAuxCmd( sCmd)
|
|||||||
-- Verifico movimento carrelli con trave agganciata
|
-- Verifico movimento carrelli con trave agganciata
|
||||||
VerifyTwoChariotsSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5], Cmd[6], Cmd[7])
|
VerifyTwoChariotsSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5], Cmd[6], Cmd[7])
|
||||||
-- Eseguo il movimento
|
-- Eseguo il movimento
|
||||||
local _, bOk, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), RapSimStep,
|
local _, bOk, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||||
Cmd[4], tonumber( Cmd[5]), RapSimStep,
|
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID,
|
||||||
Cmd[6], tonumber( Cmd[7]), RapSimStep)
|
Cmd[6], tonumber( Cmd[7]), MCH_SIM_STEP.RAPID)
|
||||||
if not ( bOk and bOk2 and bOk3) then
|
if not ( bOk and bOk2 and bOk3) then
|
||||||
local nI = EgtIf( not bOk, 2, EgtIf( not bOk2, 4, 6))
|
local nI = EgtIf( not bOk, 2, EgtIf( not bOk2, 4, 6))
|
||||||
if VerifyYVStroke( Cmd[nI], tonumber( Cmd[nI+1])) == nil then
|
if VerifyYVStroke( Cmd[nI], tonumber( Cmd[nI+1])) == nil then
|
||||||
@@ -864,14 +917,14 @@ function ExecAuxCmd( sCmd)
|
|||||||
if Cmd[2] ~= '0' then
|
if Cmd[2] ~= '0' then
|
||||||
dPY = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
dPY = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
||||||
end
|
end
|
||||||
SimulMoveAxis( 'PY', dPY, RapSimStep)
|
SimulMoveAxis( 'PY', dPY, MCH_SIM_STEP.RAPID)
|
||||||
SetPYLight( Cmd[2] ~= '0')
|
SetPYLight( Cmd[2] ~= '0')
|
||||||
elseif Cmd[1] == '12' then
|
elseif Cmd[1] == '12' then
|
||||||
local dPV = MaxOpen
|
local dPV = MaxOpen
|
||||||
if Cmd[2] ~= '0' then
|
if Cmd[2] ~= '0' then
|
||||||
dPV = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
dPV = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
||||||
end
|
end
|
||||||
SimulMoveAxis( 'PV', dPV, RapSimStep)
|
SimulMoveAxis( 'PV', dPV, MCH_SIM_STEP.RAPID)
|
||||||
SetPVLight( Cmd[2] ~= '0')
|
SetPVLight( Cmd[2] ~= '0')
|
||||||
elseif Cmd[1] == '21' then
|
elseif Cmd[1] == '21' then
|
||||||
local nYDelta = tonumber( Cmd[2])
|
local nYDelta = tonumber( Cmd[2])
|
||||||
@@ -894,6 +947,39 @@ function ExecAuxCmd( sCmd)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function ExecRemoveScraps()
|
||||||
|
-- se attivo VMILL, lavorazione ed è richiesto di eliminare gli sfridi
|
||||||
|
if EMT.VMILL and #EMT.VMILL > 0 and not EMT.OPEISDISP and EMT.VMRS then
|
||||||
|
EgtOutLog( 'OnSimulPathEnd', 5)
|
||||||
|
local vMillId = EMT.VMILL[1]
|
||||||
|
local nPart = EgtVolZmapPartCount( vMillId)
|
||||||
|
if nPart > 1 then
|
||||||
|
-- ricerca del pezzo con massimo volume
|
||||||
|
local nPartMax = 0
|
||||||
|
local dVolMax = 0
|
||||||
|
for i = 1, nPart do
|
||||||
|
local dVol = EgtVolZmapPartVolume( vMillId, i - 1)
|
||||||
|
if dVol > dVolMax then
|
||||||
|
dVolMax = dVol
|
||||||
|
nPartMax = i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- eliminazione di tutti i pezzi piccoli
|
||||||
|
for i = nPart, 1, -1 do
|
||||||
|
if i ~= nPartMax then
|
||||||
|
local b3Vmill = EgtVolZmapGetPartBBoxGlob( vMillId, i - 1, GDB_BB.STANDARD)
|
||||||
|
if b3Vmill:getDimX() < 1200 then
|
||||||
|
EgtRemoveVolZmapPart( vMillId, i - 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- aggiorno visualizzazione
|
||||||
|
EgtDraw()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function ExecUnloading()
|
function ExecUnloading()
|
||||||
if EMT.VMILL and #EMT.VMILL > 0 then
|
if EMT.VMILL and #EMT.VMILL > 0 then
|
||||||
@@ -903,21 +989,25 @@ function ExecUnloading()
|
|||||||
-- li sposto per lasciare spazio al nuovo pezzo
|
-- li sposto per lasciare spazio al nuovo pezzo
|
||||||
local nId = EgtGetFirstInGroup( nVmGrpId)
|
local nId = EgtGetFirstInGroup( nVmGrpId)
|
||||||
while nId do
|
while nId do
|
||||||
EgtMove( nId, Vector3d( 0, EgtIf( RIGHT_LOAD, ( EMT.SB + 50.0), -( EMT.SB + 50.0)), 0), GDB_RT.GLOB)
|
EgtMove( nId, Vector3d( 0, EgtIf( BD.RIGHT_LOAD, ( EMT.SB + 50.0), -( EMT.SB + 50.0)), 0), GDB_RT.GLOB)
|
||||||
nId = EgtGetNext( nId)
|
nId = EgtGetNext( nId)
|
||||||
end
|
end
|
||||||
-- creo un nuovo layer e vi inserisco il nuovo pezzo
|
-- creo un nuovo layer e vi inserisco il nuovo pezzo
|
||||||
local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( vMillId))
|
local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( vMillId))
|
||||||
EgtRelocate( vMillId, nLayId)
|
EgtRelocate( vMillId, nLayId)
|
||||||
local vtMove = Vector3d( 0, EgtIf( RIGHT_LOAD, 450, -450), 0)
|
local vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 450, -450), 0)
|
||||||
if EMT.FALL then vtMove = Vector3d( -500, 0, EgtIf( RIGHT_LOAD, 750, -750)) end
|
if EMT.FALL then vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 500, -500), -750) end
|
||||||
EgtMove( nLayId, vtMove, GDB_RT.GLOB)
|
EgtMove( nLayId, vtMove, GDB_RT.GLOB)
|
||||||
EgtSetLevel( vMillId, GDB_LV.USER)
|
EgtSetLevel( vMillId, GDB_LV.USER)
|
||||||
-- aggiungo gli spigoli
|
-- aggiungo gli spigoli
|
||||||
local nFirstId, nCount = EgtVolZmapGetEdges( vMillId, nLayId)
|
if EgtVolZmapSetShowEdges then
|
||||||
if nFirstId then
|
EgtVolZmapSetShowEdges( vMillId, true)
|
||||||
for nId = nFirstId, nFirstId + nCount - 1 do
|
else
|
||||||
EgtSetColor( nId, Color3d( 96, 96, 96))
|
local nFirstId, nCount = EgtVolZmapGetEdges( vMillId, nLayId)
|
||||||
|
if nFirstId then
|
||||||
|
for nId = nFirstId, nFirstId + nCount - 1 do
|
||||||
|
EgtSetColor( nId, Color3d( 96, 96, 96))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- rilascio Vmill
|
-- rilascio Vmill
|
||||||
@@ -1511,6 +1601,12 @@ function IsStartOrRestPhase( nPhase)
|
|||||||
return ( sVal == 'START' or sVal == 'REST')
|
return ( sVal == 'START' or sVal == 'REST')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function IsEndPhase( nPhase)
|
||||||
|
local sVal = GetPhaseType( nPhase)
|
||||||
|
return ( sVal == 'END')
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function IsMidPhase( nPhase)
|
function IsMidPhase( nPhase)
|
||||||
local sVal = GetPhaseType( nPhase)
|
local sVal = GetPhaseType( nPhase)
|
||||||
@@ -1544,6 +1640,16 @@ function GetPhaseRot( nPhase)
|
|||||||
return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ROT', 'i') or 0)
|
return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ROT', 'i') or 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function GetParkT()
|
||||||
|
local dTmp = EgtGetInfo( EMT.DISPID, 'TPOS', 'd') or EgtGetInfo( EMT.DISPID, 'TPARK', 'd')
|
||||||
|
if dTmp then
|
||||||
|
return dTmp
|
||||||
|
else
|
||||||
|
return LoadT
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- *** END GENERAL ***
|
-- *** END GENERAL ***
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
+1003
-227
File diff suppressed because it is too large
Load Diff
+5
-5
@@ -25,11 +25,11 @@ 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"
|
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
|
REM copio i file compilati nel percorso temporaneo per i compilati
|
||||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.mlpe Common-FAST.mlpe
|
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.mlpe -s Common-FAST.mlpe
|
||||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.mlse Common-FAST.mlse
|
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.mlse -s Common-FAST.mlse
|
||||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.NUM.mlpe Common-FAST.NUM.mlpe
|
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.NUM.mlpe -s Common-FAST.NUM.mlpe
|
||||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.NUM_PLUS.mlpe Common-FAST.NUM_PLUS.mlpe
|
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.NUM_PLUS.mlpe -s Common-FAST.NUM_PLUS.mlpe
|
||||||
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.TPA.mlpe Common-FAST.TPA.mlpe
|
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.TPA.mlpe -s Common-FAST.TPA.mlpe
|
||||||
|
|
||||||
REM comprimo i file compilati in uno zip pronto per essere distribuito
|
REM comprimo i file compilati in uno zip pronto per essere distribuito
|
||||||
tar.exe acvf %fullPathZip%\%machineName%.zip -C %fullPathSource%\bin\ %machineName%\*.*
|
tar.exe acvf %fullPathZip%\%machineName%.zip -C %fullPathSource%\bin\ %machineName%\*.*
|
||||||
|
|||||||
+14
-3
@@ -59,6 +59,7 @@ H5.1=AngTransm.nge
|
|||||||
H5.2=AngTransm.nge
|
H5.2=AngTransm.nge
|
||||||
H6.1=AngTransm.nge
|
H6.1=AngTransm.nge
|
||||||
H6.2=AngTransm.nge
|
H6.2=AngTransm.nge
|
||||||
|
H7.1=AngTransmBH.nge
|
||||||
|
|
||||||
[Machinings]
|
[Machinings]
|
||||||
Drilling=1
|
Drilling=1
|
||||||
@@ -67,10 +68,14 @@ Milling=1
|
|||||||
Pocketing=1
|
Pocketing=1
|
||||||
Mortising=1
|
Mortising=1
|
||||||
Chiseling=0
|
Chiseling=0
|
||||||
SawRoughing=0
|
|
||||||
SawFinishing=0
|
|
||||||
GenMachining=0
|
GenMachining=0
|
||||||
SurfFinishing=0
|
SurfRoughing=1
|
||||||
|
SurfFinishing=1
|
||||||
|
5AxMilling=1
|
||||||
|
|
||||||
|
[5AxMilling]
|
||||||
|
5AxScript1=5AxProject
|
||||||
|
5AxScript2=5AxPocketProject
|
||||||
|
|
||||||
[Machining]
|
[Machining]
|
||||||
InitScript=InitMach.lua
|
InitScript=InitMach.lua
|
||||||
@@ -88,6 +93,12 @@ H2=6615
|
|||||||
H3=6616
|
H3=6616
|
||||||
; Angular transmission
|
; Angular transmission
|
||||||
H5=6603
|
H5=6603
|
||||||
|
; Angular transmission
|
||||||
|
H6=6603
|
||||||
|
; Angular transmission
|
||||||
|
H7=6617
|
||||||
|
; Floating Aggregate
|
||||||
|
H8=6619
|
||||||
|
|
||||||
[SetUp]
|
[SetUp]
|
||||||
Default=Standard
|
Default=Standard
|
||||||
|
|||||||
+258
-103
@@ -1,4 +1,4 @@
|
|||||||
-- Descrizione macchina Essetre-FAST by EgalTech s.r.l. 2024/01/19
|
-- Descrizione macchina Essetre-FAST by EgalTech s.r.l. 2024/12/23
|
||||||
-- 2021/12/29 DS ver 2.3l4 Per NUM non va considerato MillOffs negli offset in Z.
|
-- 2021/12/29 DS ver 2.3l4 Per NUM non va considerato MillOffs negli offset in Z.
|
||||||
-- 2022/01/27 DS ver 2.4a2 Modifiche per tagli testa/coda su pezzi alti.
|
-- 2022/01/27 DS ver 2.4a2 Modifiche per tagli testa/coda su pezzi alti.
|
||||||
-- 2022/02/10 DS ver 2.4a3 Ridotto di 10mm pinzaggio con pezzi alti ma sottili.
|
-- 2022/02/10 DS ver 2.4a3 Ridotto di 10mm pinzaggio con pezzi alti ma sottili.
|
||||||
@@ -17,34 +17,17 @@
|
|||||||
-- 2022/12/05 DS ver 2.4l1 In OnLinear di genera CN per Num e NumPlus eliminato recupero sovramateriale di testa EMT.X_OFF dopo riutilizzo EMT.L1o.
|
-- 2022/12/05 DS ver 2.4l1 In OnLinear di genera CN per Num e NumPlus eliminato recupero sovramateriale di testa EMT.X_OFF dopo riutilizzo EMT.L1o.
|
||||||
-- 2023/01/23 DS Ver.2.5a2 In simulazione corretta visualizzazione Sega a catena.
|
-- 2023/01/23 DS Ver.2.5a2 In simulazione corretta visualizzazione Sega a catena.
|
||||||
-- 2023/02/09 DS Ver.2.5b1 Correzioni NumPlus per parametri G115 e EG2/EG3 al cambio orientazione sega a catena.
|
-- 2023/02/09 DS Ver.2.5b1 Correzioni NumPlus per parametri G115 e EG2/EG3 al cambio orientazione sega a catena.
|
||||||
-- 2023/03/20 DS Ver.2.5c1 Inserita gestione fresa BH al posto della lama.
|
-------------------------------------
|
||||||
-- 2023/07/26 DS ver.2.5g1 Per NUM e NUM_PLUS aggiunta gestione rotazione in alto su pezzi alti (G101 EH1) come per TPA in versione 2.3f2.
|
-- NOTE VERSIONI SUCCESSIVE IN GIT --
|
||||||
-- 2023/07/26 DS ver.2.5g2 Per NUM e NUM_PLUS tolta segnalazione errore rotazione a Zmax per pezzi alti non gestita (era su EMT.FLAG == 5).
|
-------------------------------------
|
||||||
-- 2023/07/27 DS ver.2.5g3 Il parametro di cui alle modifiche precedenti ora viene emesso solo se anche EMT.FLAG2==1.
|
|
||||||
-- 2023/08/17 DS ver 2.5h2 Possibilità di nuova gestione SawCOffs e SawBOffs con flag NewBCOffs.
|
|
||||||
-- 2023/08/22 DS ver 2.5h3 Eliminata nuova gestione di 2.5h2 perchè inclinando la direzione utensile rispetto al primo rotante limitava le direzioni raggiungibili.
|
|
||||||
-- 2023/09/29 ver 2.5i1 In BeamData e mlde aggiunta la lettura di alcuni parametri da Ts3Data.
|
|
||||||
-- 2023/10/18 DS ver 2.5j1 Con SpliRot ora si assegna da primo movimento di M111/G111 a EE/P8 il corretto valore 2.
|
|
||||||
-- 2023/10/19 DS ver 2.5j2 Per NUM_PLUS correzione per scarico con pezzo dopo oppure passando da Y a V per eliminare ET2 e scommentare ET2004.
|
|
||||||
-- 2023/10/21 DS ver 2.5j3 Gestione caso speciale di rotazione dopo separazione senza lavorazioni sul posizionamento finale.
|
|
||||||
-- 2023/11/04 DS ver 2.5k1 Eliminata testa H4. Aggiunta visualizzazione rinvio su TC.Aggiunta gestione MIN_MACH_VER per simulazione e generazione.
|
|
||||||
-- 2023/12/13 AV ver.2.5l1 Piccola correzione per errore digitazione variabile in calcolo riposizionamento carrelli (SpecAdjustCarrB3)
|
|
||||||
-- Corretto segno di una variabile in calcolo posizionamento carrelli
|
|
||||||
-- 2023/12/15 AV ver.2.5l2 Migliorato calcolo stima tempi di lavorazione
|
|
||||||
-- 2024/01/19 DS ver 2.6a1 Piccola modifica per direzione preferenziale rinvio da sotto (per evitare di accedere dal lato della barra).
|
|
||||||
-- 2024/01/29 DS ver 2.6a2 In portautensili per mortasa e sega a catena aggiunti ingombri dello stesso.
|
|
||||||
-- 2024/02/09 LM ver 2.6b1 In BeamData aggiunta funzione GetBlockedAxis che sostituisce la GetChainSawBlockedAxis.
|
|
||||||
-- 2024/02/23 AV ver 2.6c1 Prima versione con post-processore common
|
|
||||||
-- Allineamento con common ver. 2.6c1
|
|
||||||
-- 2024/02/23 AV ver 2.6c2 Rimossa chiamata funzione EgtGetSourceDir
|
|
||||||
-- Allineamento con common ver. 2.6c2
|
|
||||||
|
|
||||||
require( 'EmtGenerator')
|
require( 'EmtGenerator')
|
||||||
EgtEnableDebug( false)
|
EgtEnableDebug( true)
|
||||||
|
|
||||||
PP_VER = '2.6c2'
|
PP_VER = '2.7a1'
|
||||||
|
PP_NVER = '2.7.1.1'
|
||||||
MIN_MACH_VER = '2.5k1'
|
MIN_MACH_VER = '2.5k1'
|
||||||
|
MACH_NAME = 'Essetre-FAST'
|
||||||
|
|
||||||
-- Carico i dati globali
|
-- Carico i dati globali
|
||||||
local sMachDir = EgtGetCurrMachineDir()
|
local sMachDir = EgtGetCurrMachineDir()
|
||||||
@@ -60,7 +43,7 @@ if INFO_STD_PP.MIN_MACH_VER_PP_COMMON > MIN_MACH_VER then
|
|||||||
MIN_MACH_VER = INFO_STD_PP.MIN_MACH_VER_PP_COMMON
|
MIN_MACH_VER = INFO_STD_PP.MIN_MACH_VER_PP_COMMON
|
||||||
end
|
end
|
||||||
|
|
||||||
EgtOutLog ( '**PP_VER ver.'..PP_VER..'**'..INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION, 1)
|
EgtOutLog ( '** ' .. MACH_NAME..' '..PP_VER..' ** ( '..INFO_STD_PP.NAME..': '..INFO_STD_PP.VERSION..' - MinMach: '.. MIN_MACH_VER ..') **', 1)
|
||||||
|
|
||||||
-- Parametri macchina
|
-- Parametri macchina
|
||||||
NumericalControl = 'TPA' -- NUM o TPA o NUM_PLUS
|
NumericalControl = 'TPA' -- NUM o TPA o NUM_PLUS
|
||||||
@@ -88,6 +71,8 @@ SawCOffs = 0
|
|||||||
ChSawLen = 90.0
|
ChSawLen = 90.0
|
||||||
AngTr1Offs = 170
|
AngTr1Offs = 170
|
||||||
AngTr1Len = 150
|
AngTr1Len = 150
|
||||||
|
AngTrBHOffs = 154.5
|
||||||
|
AngTrBHLen = 90
|
||||||
TurnerOffs = 200.0
|
TurnerOffs = 200.0
|
||||||
DeltaTabY = 898.0
|
DeltaTabY = 898.0
|
||||||
DeltaTabZ = -1017.8 + MillOffs -- per TPA : -1013.3 + MillOffs -- per NUM : -838.4
|
DeltaTabZ = -1017.8 + MillOffs -- per TPA : -1013.3 + MillOffs -- per NUM : -838.4
|
||||||
@@ -102,8 +87,10 @@ SecondSupport = 0
|
|||||||
SpecialBH = false
|
SpecialBH = false
|
||||||
MaxUnloadLen = 0
|
MaxUnloadLen = 0
|
||||||
BeamHeightForFixRot = 9999 -- per abilitare assegnare 500
|
BeamHeightForFixRot = 9999 -- per abilitare assegnare 500
|
||||||
CoeffVM = 0.5
|
|
||||||
NewTopC = true
|
NewTopC = true
|
||||||
|
SafeXRotAxes = 150
|
||||||
|
AggreBlockHaus = true
|
||||||
|
SecondToolChanger = true
|
||||||
|
|
||||||
-- leggo e aggiorno con parametri da BeamData
|
-- leggo e aggiorno con parametri da BeamData
|
||||||
if BD then
|
if BD then
|
||||||
@@ -154,6 +141,8 @@ if EgtExistsFile( sData) then
|
|||||||
AngTr1Len = Machine.Offsets.OFFSETX_RINV_1 or AngTr1Len
|
AngTr1Len = Machine.Offsets.OFFSETX_RINV_1 or AngTr1Len
|
||||||
--if Machine.Offsets.OFFSETZ_RINV_2 then AngTr2Offs = Machine.Offsets.OFFSETZ_RINV_2 - EgtIf( NumericalControl == 'TPA', MillOffs, 0) end
|
--if Machine.Offsets.OFFSETZ_RINV_2 then AngTr2Offs = Machine.Offsets.OFFSETZ_RINV_2 - EgtIf( NumericalControl == 'TPA', MillOffs, 0) end
|
||||||
--AngTr2Len = Machine.Offsets.OFFSETX_RINV_2 or AngTr2Len
|
--AngTr2Len = Machine.Offsets.OFFSETX_RINV_2 or AngTr2Len
|
||||||
|
if Machine.Offsets.OFFSETZ_RINV_BH then AngTrBHOffs = Machine.Offsets.OFFSETZ_RINV_BH - EgtIf( NumericalControl == 'TPA', MillOffs, 0) end
|
||||||
|
AngTrBHLen = Machine.Offsets.OFFSETX_RINV_BH or AngTrBHLen
|
||||||
TurnerOffs = Machine.Offsets.OFFSETRIB or TurnerOffs
|
TurnerOffs = Machine.Offsets.OFFSETRIB or TurnerOffs
|
||||||
if Machine.Offsets.OFFSETX then DeltaTabY = - Machine.Offsets.OFFSETX end
|
if Machine.Offsets.OFFSETX then DeltaTabY = - Machine.Offsets.OFFSETX end
|
||||||
if Machine.Offsets.OFFSETZ then DeltaTabZ = Machine.Offsets.OFFSETZ + EgtIf( NumericalControl == 'TPA', MillOffs, 0) end
|
if Machine.Offsets.OFFSETZ then DeltaTabZ = Machine.Offsets.OFFSETZ + EgtIf( NumericalControl == 'TPA', MillOffs, 0) end
|
||||||
@@ -162,11 +151,24 @@ if EgtExistsFile( sData) then
|
|||||||
if Machine.Offsets.RIB_AUTO then AutomaticRotation = ( Machine.Offsets.RIB_AUTO == 1) end
|
if Machine.Offsets.RIB_AUTO then AutomaticRotation = ( Machine.Offsets.RIB_AUTO == 1) end
|
||||||
if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end
|
if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end
|
||||||
if Machine.Offsets.DEFTCPOS then DefTcPos = ( 'T' .. Machine.Offsets.DEFTCPOS) end
|
if Machine.Offsets.DEFTCPOS then DefTcPos = ( 'T' .. Machine.Offsets.DEFTCPOS) end
|
||||||
|
if Machine.Offsets.WOOD_DENSITY then WoodDensity = Machine.Offsets.WOOD_DENSITY end
|
||||||
|
if Machine.Offsets.MIN_JOIN_VV then MinJoinVV = Machine.Offsets.MIN_JOIN_VV end
|
||||||
|
if Machine.Offsets.MIN_JOIN_SS then MinJoinSS = Machine.Offsets.MIN_JOIN_SS end
|
||||||
|
if Machine.Offsets.MIN_JOIN_LS then MinJoinLS = Machine.Offsets.MIN_JOIN_LS end
|
||||||
|
if Machine.Offsets.MIN_JOIN_SL then MinJoinSL = Machine.Offsets.MIN_JOIN_SL end
|
||||||
|
if Machine.Offsets.MIN_JOIN_LL then MinJoinLL = Machine.Offsets.MIN_JOIN_LL end
|
||||||
|
if Machine.Offsets.NEWTOPC then NewTopC = ( Machine.Offsets.NEWTOPC == 1) end
|
||||||
|
if Machine.Offsets.AGGRE_BH then AggreBlockHaus = ( Machine.Offsets.AGGRE_BH == 1) end
|
||||||
|
if Machine.Offsets.SEC_TC then SecondToolChanger = ( Machine.Offsets.SEC_TC == 1) end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if SpecialBH then SecondSupport = 0 end
|
if SpecialBH then SecondSupport = 0 end
|
||||||
|
|
||||||
|
-- compongo i gruppi appartenenti alla base
|
||||||
|
local sBaseAux = {'BASE/SOLID', 'BASE/TC', 'BASE/SIGN', 'BASE/COLLISION'}
|
||||||
|
if SecondToolChanger then table.insert( sBaseAux, 5, 'BASE/TC2') end
|
||||||
|
|
||||||
EmtGeneral {
|
EmtGeneral {
|
||||||
File='Essetre-FAST.nge',
|
File='Essetre-FAST.nge',
|
||||||
Offset = Vector3d( 0, 1150.16, -1500.0),
|
Offset = Vector3d( 0, 1150.16, -1500.0),
|
||||||
@@ -175,12 +177,13 @@ EmtGeneral {
|
|||||||
ExitMaxAdjust = 30,
|
ExitMaxAdjust = 30,
|
||||||
ExitMaxRotAdj = 0.5,
|
ExitMaxRotAdj = 0.5,
|
||||||
AngDeltaMinForHome = 165,
|
AngDeltaMinForHome = 165,
|
||||||
Special = 'Common-FAST.mlse',
|
Special = 'Common_FAST.mlse',
|
||||||
Processor = 'Common-FAST.mlpe'}
|
Processor = 'Common_FAST.mlpe'}
|
||||||
local BaseId = EmtBase {
|
local BaseId = EmtBase {
|
||||||
Name = 'Base',
|
Name = 'Base',
|
||||||
Geo='BASE/GEO',
|
Geo='BASE/GEO',
|
||||||
Aux={'BASE/SOLID', 'BASE/TC', 'BASE/SIGN', 'BASE/COLLISION'}}
|
Aux = sBaseAux}
|
||||||
|
|
||||||
local XId = EmtAxis {
|
local XId = EmtAxis {
|
||||||
Name = 'X',
|
Name = 'X',
|
||||||
Parent = 'Base',
|
Parent = 'Base',
|
||||||
@@ -213,9 +216,18 @@ local CId = EmtAxis {
|
|||||||
Geo = 'C_AXIS/GEO',
|
Geo = 'C_AXIS/GEO',
|
||||||
Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION'}}
|
Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION'}}
|
||||||
if NewTopC then
|
if NewTopC then
|
||||||
local SolidTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'SOLID'), 'TOP')
|
local vtMove = Vector3d( 65,0,0)
|
||||||
|
local SolidArmId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'SOLID'), 'ARM')
|
||||||
|
if EgtSurfTmMoveFacet then
|
||||||
|
EgtSurfTmMoveFacet( SolidArmId, 11, vtMove, GDB_RT.GLOB)
|
||||||
|
else
|
||||||
|
EgtSurfTmMoveVertex( SolidArmId, 23, EgtSurfTmGetVertex( SolidArmId, 23, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB)
|
||||||
|
EgtSurfTmMoveVertex( SolidArmId, 25, EgtSurfTmGetVertex( SolidArmId, 25, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB)
|
||||||
|
EgtSurfTmMoveVertex( SolidArmId, 35, EgtSurfTmGetVertex( SolidArmId, 35, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB)
|
||||||
|
EgtSurfTmMoveVertex( SolidArmId, 36, EgtSurfTmGetVertex( SolidArmId, 36, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB)
|
||||||
|
end
|
||||||
local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP')
|
local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP')
|
||||||
EgtMove( { SolidTopId, CollTopId}, Vector3d( 65,0,0), GDB_RT.GLOB)
|
EgtMove( CollTopId, vtMove, GDB_RT.GLOB)
|
||||||
EgtSetName( CollTopId, 'BOX')
|
EgtSetName( CollTopId, 'BOX')
|
||||||
else
|
else
|
||||||
local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP')
|
local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP')
|
||||||
@@ -293,21 +305,21 @@ end
|
|||||||
-- Eventuale rinvio angolare
|
-- Eventuale rinvio angolare
|
||||||
if SecondSupport >= 3 then
|
if SecondSupport >= 3 then
|
||||||
local H5Id = EmtHead {
|
local H5Id = EmtHead {
|
||||||
Name = 'H5',
|
Name = 'H5',
|
||||||
Parent = 'B',
|
Parent = 'B',
|
||||||
HSet = 'H1',
|
HSet = 'H1',
|
||||||
Type = MCH_HT.MULTI,
|
Type = MCH_HT.MULTI,
|
||||||
ExitNbr = 2,
|
ExitNbr = 2,
|
||||||
Pos1 = Point3d( 0, -AngTr1Len, -AngTr1Offs),
|
Pos1 = Point3d( 0, -AngTr1Len, -AngTr1Offs),
|
||||||
TDir1 = Y_AX(),
|
TDir1 = Y_AX(),
|
||||||
Pos2 = Point3d( 0, AngTr1Len, -AngTr1Offs),
|
Pos2 = Point3d( 0, AngTr1Len, -AngTr1Offs),
|
||||||
TDir2 = -Y_AX(),
|
TDir2 = -Y_AX(),
|
||||||
ADir = Z_AX(),
|
ADir = Z_AX(),
|
||||||
Rot1W = 0.2,
|
Rot1W = 0.2,
|
||||||
Rot2Stroke = { -120, 120},
|
Rot2Stroke = { -120, 120},
|
||||||
OthColl = { 'H2', 'B/SOLID', 'C/SOLID'},
|
OthColl = { 'H2', 'B/SOLID', 'C/SOLID'},
|
||||||
Geo = 'H5_HEAD/GEO',
|
Geo = 'H5_HEAD/GEO',
|
||||||
Aux = {'H5_HEAD/SOLID', 'H5_HEAD/COLLISION'}}
|
Aux = {'H5_HEAD/SOLID', 'H5_HEAD/COLLISION'}}
|
||||||
EgtSetInfo( H5Id, 'AGB_TYPE', 2)
|
EgtSetInfo( H5Id, 'AGB_TYPE', 2)
|
||||||
EgtSetInfo( H5Id, 'AGB_DMAX', 240)
|
EgtSetInfo( H5Id, 'AGB_DMAX', 240)
|
||||||
EgtSetInfo( H5Id, 'AGB_ENCH', 44)
|
EgtSetInfo( H5Id, 'AGB_ENCH', 44)
|
||||||
@@ -315,6 +327,23 @@ if SecondSupport >= 3 then
|
|||||||
EgtSetInfo( H5Id, 'AGB_MDIR', X_AX())
|
EgtSetInfo( H5Id, 'AGB_MDIR', X_AX())
|
||||||
EgtSetInfo( H5Id, 'ZMAXONROT', '1,15')
|
EgtSetInfo( H5Id, 'ZMAXONROT', '1,15')
|
||||||
end
|
end
|
||||||
|
-- Eventuale aggregato per lavorazioni BlockHaus
|
||||||
|
if AggreBlockHaus then
|
||||||
|
local H7Id = EmtHead {
|
||||||
|
Name = 'H7',
|
||||||
|
Parent = 'B',
|
||||||
|
HSet = 'H1',
|
||||||
|
Type = MCH_HT.STD,
|
||||||
|
Pos = Point3d( AngTrBHLen, 0, -AngTrBHOffs),
|
||||||
|
TDir = -X_AX(),
|
||||||
|
ADir = X_AX(),
|
||||||
|
Rot1W = 0.2,
|
||||||
|
SolCh = MCH_SCC.ADIR_NEAR,
|
||||||
|
OthColl = {'H2', 'B/SOLID', 'C/SOLID'},
|
||||||
|
Geo = 'H7_HEAD/GEO',
|
||||||
|
Aux = {'H7_HEAD/SOLID', 'H7_HEAD/COLLISION'}}
|
||||||
|
end
|
||||||
|
|
||||||
-- Morse
|
-- Morse
|
||||||
local YId = EmtAxis {
|
local YId = EmtAxis {
|
||||||
Name = 'Y',
|
Name = 'Y',
|
||||||
@@ -445,22 +474,83 @@ EmtTcPos {
|
|||||||
TDir = -X_AX(),
|
TDir = -X_AX(),
|
||||||
ADir = -Y_AX(),
|
ADir = -Y_AX(),
|
||||||
Geo = 'BASE/T10'}
|
Geo = 'BASE/T10'}
|
||||||
EmtTcPos {
|
if AggreBlockHaus then
|
||||||
Name = 'T11',
|
local TcpSsId = EmtTcPos {
|
||||||
Parent = 'Base',
|
Name = 'T11',
|
||||||
Pos = Point3d( 523.8, 88.0, -877.5),
|
|
||||||
TDir = -X_AX(),
|
|
||||||
ADir = -Y_AX(),
|
|
||||||
Geo = 'BASE/T11'}
|
|
||||||
if not SpecialBH then
|
|
||||||
EmtTcPos {
|
|
||||||
Name = 'T101',
|
|
||||||
Parent = 'Base',
|
Parent = 'Base',
|
||||||
Pos = Point3d( -510.4, 113.2, -160.8),
|
Pos = Point3d( 678.3, -1.963, -877.5),
|
||||||
TDir = X_AX(),
|
TDir = Y_AX(),
|
||||||
ADir = Z_AX(),
|
ADir = -X_AX(),
|
||||||
Geo = 'BASE/T101'}
|
Geo = 'BASE/T121',
|
||||||
|
Aux = 'BASE/T121_HS'}
|
||||||
else
|
else
|
||||||
|
EmtTcPos {
|
||||||
|
Name = 'T11',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = Point3d( 523.8, 88.0, -877.5),
|
||||||
|
TDir = -X_AX(),
|
||||||
|
ADir = -Y_AX(),
|
||||||
|
Geo = 'BASE/T11'}
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ToolChanger 2
|
||||||
|
if SecondToolChanger then
|
||||||
|
EmtTcPos {
|
||||||
|
Name = 'T21',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = Point3d( -503.2, 88.0, 172.5),
|
||||||
|
TDir = X_AX(),
|
||||||
|
ADir = -Y_AX(),
|
||||||
|
Geo = 'BASE/T21'}
|
||||||
|
EmtTcPos {
|
||||||
|
Name = 'T22',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = Point3d( -503.2, 88.0, 67.5),
|
||||||
|
TDir = X_AX(),
|
||||||
|
ADir = -Y_AX(),
|
||||||
|
Geo = 'BASE/T22'}
|
||||||
|
EmtTcPos {
|
||||||
|
Name = 'T23',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = Point3d( -503.2, 88.0, -37.5),
|
||||||
|
TDir = X_AX(),
|
||||||
|
ADir = -Y_AX(),
|
||||||
|
Geo = 'BASE/T23'}
|
||||||
|
EmtTcPos {
|
||||||
|
Name = 'T24',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = Point3d( -503.2, 88.0, -142.5),
|
||||||
|
TDir = X_AX(),
|
||||||
|
ADir = -Y_AX(),
|
||||||
|
Geo = 'BASE/T24'}
|
||||||
|
EmtTcPos {
|
||||||
|
Name = 'T25',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = Point3d( -503.2, 88.0, -247.5),
|
||||||
|
TDir = X_AX(),
|
||||||
|
ADir = -Y_AX(),
|
||||||
|
Geo = 'BASE/T25'}
|
||||||
|
EmtTcPos {
|
||||||
|
Name = 'T26',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = Point3d( -503.2, 88.0, -352.5),
|
||||||
|
TDir = X_AX(),
|
||||||
|
ADir = -Y_AX(),
|
||||||
|
Geo = 'BASE/T26'}
|
||||||
|
EmtTcPos {
|
||||||
|
Name = 'T27',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = Point3d( -503.2, 88.0, -457.5),
|
||||||
|
TDir = X_AX(),
|
||||||
|
ADir = -Y_AX(),
|
||||||
|
Geo = 'BASE/T27'}
|
||||||
|
EmtTcPos {
|
||||||
|
Name = 'T28',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = Point3d( -503.2, 88.0, -562.5),
|
||||||
|
TDir = X_AX(),
|
||||||
|
ADir = -Y_AX(),
|
||||||
|
Geo = 'BASE/T28'}
|
||||||
EmtTcPos {
|
EmtTcPos {
|
||||||
Name = 'T101',
|
Name = 'T101',
|
||||||
Parent = 'Base',
|
Parent = 'Base',
|
||||||
@@ -468,48 +558,66 @@ else
|
|||||||
TDir = X_AX(),
|
TDir = X_AX(),
|
||||||
ADir = Z_AX(),
|
ADir = Z_AX(),
|
||||||
Geo = 'BASE/T101S'}
|
Geo = 'BASE/T101S'}
|
||||||
end
|
else
|
||||||
if SecondSupport == 1 then
|
if not SpecialBH then
|
||||||
-- supporto per punta
|
EmtTcPos {
|
||||||
EmtTcPos {
|
Name = 'T101',
|
||||||
Name = 'T111',
|
Parent = 'Base',
|
||||||
Parent = 'Base',
|
Pos = Point3d( -510.4, 113.2, -160.8),
|
||||||
Pos = Point3d( -510.4, 113.2, -329.8),
|
TDir = X_AX(),
|
||||||
TDir = Z_AX(),
|
ADir = Z_AX(),
|
||||||
ADir = X_AX(),
|
Geo = 'BASE/T101'}
|
||||||
Geo = 'BASE/T111'}
|
else
|
||||||
elseif SecondSupport == 2 then
|
EmtTcPos {
|
||||||
-- supporto per mortasatrice
|
Name = 'T101',
|
||||||
local TcpSsId = EmtTcPos {
|
Parent = 'Base',
|
||||||
Name = 'T111',
|
Pos = Point3d( -510.4, 113.2, -1160.8),
|
||||||
Parent = 'Base',
|
TDir = X_AX(),
|
||||||
Pos = Point3d( -510.4, 113.2, -430.8),
|
ADir = Z_AX(),
|
||||||
TDir = X_AX(),
|
Geo = 'BASE/T101S'}
|
||||||
ADir = Z_AX(),
|
end
|
||||||
Geo = 'BASE/T111M'}
|
if SecondSupport == 1 then
|
||||||
EgtSetInfo( TcpSsId, 'Mortiser', true)
|
-- supporto per punta
|
||||||
elseif SecondSupport == 3 then
|
EmtTcPos {
|
||||||
-- supporto per rinvio angolare
|
Name = 'T111',
|
||||||
local TcpSsId = EmtTcPos {
|
Parent = 'Base',
|
||||||
Name = 'T91',
|
Pos = Point3d( -510.4, 113.2, -329.8),
|
||||||
Parent = 'Base',
|
TDir = Z_AX(),
|
||||||
ExitNbr = 2,
|
ADir = X_AX(),
|
||||||
Pos1 = Point3d( -510.4-150, 113.2, -329.8-170),
|
Geo = 'BASE/T111'}
|
||||||
TDir1 = X_AX(),
|
elseif SecondSupport == 2 then
|
||||||
Pos2 = Point3d( -510.4+150, 113.2, -329.8-170),
|
-- supporto per mortasatrice
|
||||||
TDir2 = -X_AX(),
|
local TcpSsId = EmtTcPos {
|
||||||
ADir = Z_AX(),
|
Name = 'T111',
|
||||||
Geo = 'BASE/T91',
|
Parent = 'Base',
|
||||||
Aux = 'BASE/T91_HS'}
|
Pos = Point3d( -510.4, 113.2, -430.8),
|
||||||
end
|
TDir = X_AX(),
|
||||||
if SpecialBH then
|
ADir = Z_AX(),
|
||||||
EmtTcPos {
|
Geo = 'BASE/T111M'}
|
||||||
Name = 'T111',
|
EgtSetInfo( TcpSsId, 'Mortiser', true)
|
||||||
Parent = 'Base',
|
elseif SecondSupport == 3 then
|
||||||
Pos = Point3d( -810.4, 113.2, -329.8),
|
-- supporto per rinvio angolare
|
||||||
TDir = Y_AX(),
|
local TcpSsId = EmtTcPos {
|
||||||
ADir = X_AX(),
|
Name = 'T91',
|
||||||
Geo = 'BASE/T111S'}
|
Parent = 'Base',
|
||||||
|
ExitNbr = 2,
|
||||||
|
Pos1 = Point3d( -710.4-150, 113.2, -329.8-170),
|
||||||
|
TDir1 = X_AX(),
|
||||||
|
Pos2 = Point3d( -710.4+150, 113.2, -329.8-170),
|
||||||
|
TDir2 = -X_AX(),
|
||||||
|
ADir = Z_AX(),
|
||||||
|
Geo = 'BASE/T91',
|
||||||
|
Aux = 'BASE/T91_HS'}
|
||||||
|
end
|
||||||
|
if SpecialBH then
|
||||||
|
EmtTcPos {
|
||||||
|
Name = 'T111',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = Point3d( -810.4, 113.2, -329.8),
|
||||||
|
TDir = Y_AX(),
|
||||||
|
ADir = X_AX(),
|
||||||
|
Geo = 'BASE/T111S'}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Aggiusto posizioni geometriche
|
-- Aggiusto posizioni geometriche
|
||||||
@@ -596,6 +704,52 @@ function GetPVLight()
|
|||||||
return ( EgtGetInfo( PVLightId, 'On') == '1')
|
return ( EgtGetInfo( PVLightId, 'On') == '1')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
---------------------------- Cambio Utensile ------------------------
|
||||||
|
function GetTCSet( sTcPos)
|
||||||
|
-- TC 1
|
||||||
|
if sTcPos == 'T1' or sTcPos == 'T2' or sTcPos == 'T3' or sTcPos == 'T4' or sTcPos == 'T5' or
|
||||||
|
sTcPos == 'T6' or sTcPos == 'T7' or sTcPos == 'T8' or sTcPos == 'T9' or sTcPos == 'T10' or sTcPos == 'T11' then
|
||||||
|
return 1
|
||||||
|
-- TC 2
|
||||||
|
elseif sTcPos == 'T21' or sTcPos == 'T22' or sTcPos == 'T23' or sTcPos == 'T24' or
|
||||||
|
sTcPos == 'T25' or sTcPos == 'T26' or sTcPos == 'T27' or sTcPos == 'T28' then
|
||||||
|
return 2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-- Funzione per impostare la posizione del rinvio flottante
|
||||||
|
function SetFloatPos( sHead, dPos)
|
||||||
|
-- recupero Id testa
|
||||||
|
local nHeadId = EgtGetHeadId( sHead)
|
||||||
|
if not nHeadId then return false end
|
||||||
|
-- se ci sono entità flottanti nel ToolHolder
|
||||||
|
local nRefId = EgtGetFirstNameInGroup( nHeadId, '_T1')
|
||||||
|
local vtTool = EgtFR( nRefId, GDB_ID.ROOT):getVersZ()
|
||||||
|
local nObjId = EgtGetFirstGroupInGroup( EgtGetFirstNameInGroup( nHeadId, 'T1'))
|
||||||
|
local FloatEntities = EgtGetInfoInGroup( nObjId, 'Float')
|
||||||
|
if FloatEntities and #FloatEntities > 0 then
|
||||||
|
-- il porta-utensile flottante non può comprimersi più di 10mm
|
||||||
|
if dPos > 10 then
|
||||||
|
local sErr = 'Floating Ring compressed more than 10mm'
|
||||||
|
EmtSetLastError( 1222, sErr)
|
||||||
|
EgtOutLog( 'Error : ' .. sErr, 1)
|
||||||
|
end
|
||||||
|
local dFloat = EgtGetInfo( FloatEntities[1], 'Float', 'd')
|
||||||
|
if abs( dPos - dFloat) > 10 * GEO.EPS_SMALL then
|
||||||
|
local vtMove = ( dPos - dFloat) * vtTool
|
||||||
|
-- sposto tutte le entità flottanti
|
||||||
|
for i = 1, #FloatEntities do
|
||||||
|
EgtMove( FloatEntities[i], vtMove, GDB_RT.GLOB)
|
||||||
|
EgtSetInfo( FloatEntities[i], 'Float', dPos)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- Funzione per resettare tutte le attivazioni della macchina
|
-- Funzione per resettare tutte le attivazioni della macchina
|
||||||
function OnResetMachine()
|
function OnResetMachine()
|
||||||
@@ -603,6 +757,7 @@ function OnResetMachine()
|
|||||||
EmtUnlinkAllFixturesFromGroups()
|
EmtUnlinkAllFixturesFromGroups()
|
||||||
SetPYLight( false)
|
SetPYLight( false)
|
||||||
SetPVLight( false)
|
SetPVLight( false)
|
||||||
|
SetFloatPos( 'H1', 0)
|
||||||
-- nascondo Vmill
|
-- nascondo Vmill
|
||||||
local nRawId = EgtGetFirstRawPart()
|
local nRawId = EgtGetFirstRawPart()
|
||||||
while nRawId do
|
while nRawId do
|
||||||
|
|||||||
Binary file not shown.
@@ -0,0 +1,48 @@
|
|||||||
|
; 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]
|
||||||
|
|
||||||
|
[GenMachining]
|
||||||
|
|
||||||
|
[SurfRoughing]
|
||||||
|
|
||||||
|
[SurfFinishing]
|
||||||
|
0=b,SkipMaxDown,1
|
||||||
|
|
||||||
|
[5AxMilling]
|
||||||
|
0=l,LinTol,0.01
|
||||||
|
1=l,MaxLen,10
|
||||||
|
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
|
||||||
+26
-12
@@ -24,7 +24,7 @@ local INVALIDPOS = ""
|
|||||||
local POS = "Pos"
|
local POS = "Pos"
|
||||||
|
|
||||||
-- Geom Set
|
-- Geom Set
|
||||||
local GS = {}
|
local GS = {{"H1", "H7", "H8"}}
|
||||||
|
|
||||||
-- Configurazione posizioni
|
-- Configurazione posizioni
|
||||||
local PositionTable={{Pos = "Pos1", TcPos = "T1", Head = "H1", Group = "G1"},
|
local PositionTable={{Pos = "Pos1", TcPos = "T1", Head = "H1", Group = "G1"},
|
||||||
@@ -40,20 +40,34 @@ local PositionTable={{Pos = "Pos1", TcPos = "T1", Head = "H1", Group = "G1"},
|
|||||||
{Pos = "Pos11", TcPos = "T11", Head = "H1", Group = "G1"},
|
{Pos = "Pos11", TcPos = "T11", Head = "H1", Group = "G1"},
|
||||||
{Pos = "Pos12", TcPos = "T42", Head = "H2", Group = "G1"},
|
{Pos = "Pos12", TcPos = "T42", Head = "H2", Group = "G1"},
|
||||||
{Pos = "Pos13", TcPos = "T101", Head = "H3", Group = "G2"}}
|
{Pos = "Pos13", TcPos = "T101", Head = "H3", Group = "G2"}}
|
||||||
local SecSuppId = EgtGetTcPosId( 'T111')
|
|
||||||
if SecSuppId then
|
local IsTC2Active = ( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'TC2') ~= nil)
|
||||||
local bMortiser = EgtGetInfo( SecSuppId, 'Mortiser', 'b')
|
if IsTC2Active then
|
||||||
if bMortiser then
|
local PositionTableTC2={{Pos = "Pos14", TcPos = "T21", Head = "H1", Group = "G3"},
|
||||||
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H3", Group = "G2"})
|
{Pos = "Pos15", TcPos = "T22", Head = "H1", Group = "G3"},
|
||||||
else
|
{Pos = "Pos16", TcPos = "T23", Head = "H1", Group = "G3"},
|
||||||
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H1", Group = "G2"})
|
{Pos = "Pos17", TcPos = "T24", Head = "H1", Group = "G3"},
|
||||||
|
{Pos = "Pos18", TcPos = "T25", Head = "H1", Group = "G3"},
|
||||||
|
{Pos = "Pos19", TcPos = "T26", Head = "H1", Group = "G3"},
|
||||||
|
{Pos = "Pos20", TcPos = "T27", Head = "H1", Group = "G3"},
|
||||||
|
{Pos = "Pos21", TcPos = "T28", Head = "H1", Group = "G3"}}
|
||||||
|
EgtJoinTables( PositionTable, PositionTableTC2)
|
||||||
|
else
|
||||||
|
local SecSuppId = EgtGetTcPosId( 'T111')
|
||||||
|
if SecSuppId then
|
||||||
|
local bMortiser = EgtGetInfo( SecSuppId, 'Mortiser', 'b')
|
||||||
|
if bMortiser then
|
||||||
|
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H3", Group = "G2"})
|
||||||
|
else
|
||||||
|
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H1", Group = "G2"})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if EgtGetHeadId( 'H5') then
|
||||||
|
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T91", Head = "H5", Group = "G2"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if EgtGetHeadId( 'H5') then
|
|
||||||
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T91", Head = "H5", Group = "G2"})
|
|
||||||
end
|
|
||||||
|
|
||||||
local UsePositionHead = true
|
local UsePositionHead = false
|
||||||
|
|
||||||
local function IsInGeomSet( ToolHead, PosHead)
|
local function IsInGeomSet( ToolHead, PosHead)
|
||||||
for GsIndex = 1, #GS do
|
for GsIndex = 1, #GS do
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,43 @@
|
|||||||
|
; 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
|
||||||
|
5=dr,TOOL_OVERHANG
|
||||||
|
|
||||||
|
[MILL_NOTIP]
|
||||||
|
0=th,TH,
|
||||||
|
1=d,STEP
|
||||||
|
2=d,SIDESTEP
|
||||||
|
3=d,SIDEDEPTH
|
||||||
|
4=s,DOUBLE
|
||||||
|
5=dr,TOOL_OVERHANG
|
||||||
|
|
||||||
|
[MORTISE_STD]
|
||||||
|
0=b,MORTISE
|
||||||
|
1=d,STEP
|
||||||
|
2=d,SIDESTEP
|
||||||
+120
-7
@@ -1,11 +1,124 @@
|
|||||||
==== Common_FAST Update Log ====
|
==== Common_FAST Update Log ====
|
||||||
|
|
||||||
Versione 2.6c1 (23/02/2024)
|
Versione 2.7a1 (07/01/2024)
|
||||||
- (ALL) Prima versione post-proc comune FAST e FASTrl
|
- (MLDE-SIM-GEN) Nuovo aggregato 90° (H7) per fresa tipo BlockHaus. Ticket#2142
|
||||||
- (ALL) "BeamData" caricato come libreria con 'require' anziché come file con 'dofile'
|
- (SIM-GEN) Aumentati limiti massimi di pinzaggio minimo
|
||||||
- (SIM) Aggiunta funzioni "OnSimulInit" e "OnSimulExit" per orientare vista corretta in caso di macchina con carico destro. N.B.= serve CAM5 2.6b4
|
|
||||||
- (ALL) In BeamData aggiunto flag per direzione carico RIGHT_LOAD
|
Versione 2.6l1 (02/12/2024)
|
||||||
- (ALL) Aggiornamento 'Compile.bat' con nuovi nomi file
|
- (SIM) Corretto movimento VMILL durante scarico pezzo piccolo a caduta
|
||||||
|
- (SIM-GEN) Per decidere posizione parcheggio barra dopo separazione, si considera lunghezza coda del pezzo in lavoro per evitare collisioni. Ticket#2168
|
||||||
|
|
||||||
|
Versione 2.6k1 (11/11/2024)
|
||||||
|
- (GEN) Aggiunta gestione aggregato a T per NUM
|
||||||
|
- (SIM) Tolta gestione testa dummy H4
|
||||||
|
- (SIM-GEN) Aggiustato parametro in calcolo ingombro lavorazione. Ticket#2163
|
||||||
|
|
||||||
|
Versione 2.6j10 (25/10/2024)
|
||||||
|
- (SIM-GEN) Miglioria 2.6j9. Si ribadisce pinza in presa sempre, all'inizio, in base a quella attiva
|
||||||
|
|
||||||
|
Versione 2.6j9 (22/10/2024)
|
||||||
|
- (SIM-GEN) Miglioria 2.6j6. Oltre al passo pellegrino si ribadisce anche quando è scambio diretto
|
||||||
|
|
||||||
|
Versione 2.6j8 (21/10/2024)
|
||||||
|
- (SIM-GEN) Corretto problema tolleranza aggiunto con versione 2.6j7
|
||||||
|
|
||||||
|
Versione 2.6j7 (18/10/2024)
|
||||||
|
- (SIM-GEN) In nuova disposizione carrelli, aggiunta tolleranza di 100 EPS quando si calcola minimo posizionamento
|
||||||
|
|
||||||
|
Versione 2.6j6 (17/10/2024)
|
||||||
|
- (GEN) Si ribadisce che la pinza era in presa, prima di cominciare con lo scambio del passo del pellegrino. Ticket#2121
|
||||||
|
|
||||||
|
Versione 2.6j5 (17/10/2024)
|
||||||
|
- (SIM-GEN) Piccola correzione nuovo riposizionamento. Nel taglio dello scarto finale riposizionava nel vuoto. Ticket#2115
|
||||||
|
|
||||||
|
Versione 2.6j4 (15/10/2024)
|
||||||
|
- (SIM-GEN) Piccola correzione nuovo riposizionamento. Non considerava i 50mm di tolleranza su primo pinzaggio dopo ribaltamento
|
||||||
|
- (SIM-GEN) Gestione attivazione pressore verticale in nuovo riposizionamento
|
||||||
|
|
||||||
|
Versione 2.6j3 (11/10/2024)
|
||||||
|
- (GEN) Corretta scrittura macro start/attesa movimenti per NUM. Veniva scritto codice per TPA.
|
||||||
|
|
||||||
|
Versione 2.6j2 (03/10/2024)
|
||||||
|
- (SIM-GEN) Piccola correzione calcolo posizione carrello durante riposizionamento, nuova gestione
|
||||||
|
|
||||||
|
Versione 2.6j1 (01/10/2024)
|
||||||
|
- (SIM-GEN) Sistemato calcolo in nuova disposzione carrelli
|
||||||
|
|
||||||
|
Versione 2.6i6 (25/09/2024)
|
||||||
|
- (GEN) Migliorata gestione movimenti per portare testa vicino a cambio utensile se trave alta. Ticket#2066
|
||||||
|
|
||||||
|
Versione 2.6i5 (24/09/2024)
|
||||||
|
- (SIM-GEN) Tolto controllo su lunghezza maggiore di 200mm introdotto con 2.6i2 perchè non completamente funzionante
|
||||||
|
- (GEN) Gestione in OnRapid() di EMT.FLAG=5 (rotazione a Z max per lavorazione successiva). Ora allineata alla simulazione
|
||||||
|
|
||||||
|
Versione 2.6i4 (24/09/2024)
|
||||||
|
- (SIM-GEN) Aggiunto ripinzaggio extra in caso servisse un grande spostamento e si sta pinzando poco.
|
||||||
|
L'aggiunta del ripinzaggio dipende da FASTCLAMPING (che deve essere disattiva). Viene aggiunta GAIN_RECLAMPING per decidere il guadagno in mm del ripinzaggio.
|
||||||
|
|
||||||
|
Versione 2.6i3 (23/09/2024)
|
||||||
|
- (SIM-GEN) Aggiunta nuova strategia riposizionamento morse
|
||||||
|
- (SIM-GEN) Aggiunta lettura flag NEWCLAMPING in BeamData, per abilitare nuova strategia riposizionamento. Se false o nil, funziona con metodo vecchio.
|
||||||
|
- (SIM-GEN) Aggiunta lettura flag FASTCLAMPING. Se false, al carico prende al massimo 1000mm, per evitare collisioni durante ciclo di lettura laser e prima lavorazione.
|
||||||
|
|
||||||
|
Versione 2.6i2 (16/09/2024)
|
||||||
|
- (SIM-GEN) Se utensili più lunghi di 200mm, si ruota in home e poi si approccia il pezzo. Ticket#2038
|
||||||
|
- (SIM-GEN) Aumentata distanza ingombro da 650mm a 660mm. In casi di utensile abbastanza lungo poteva andare in colisione. Ticket#2041
|
||||||
|
|
||||||
|
Versione 2.6i1 (02/09/2024)
|
||||||
|
- (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.6g1 (03/07/2024)
|
||||||
|
- (GEN) Corretto chiamata macro precarico in caso di taglio finale, ma con ribaltamento successivo. Ora si chiama solo se la fase successiva è una "END". Ticket#1881
|
||||||
|
- (GEN) Per controllo NUM, se arco maggiore di 99999mm, si approssima con una retta. Ticket#1888
|
||||||
|
|
||||||
|
Versione 2.6e3 (06/05/2024)
|
||||||
|
- (MLDE-SIM-GEN) Gestione facoltativa parametri MIN_JOIN_xx settabili in Ts3. Ticket#1794
|
||||||
|
|
||||||
|
Versione 2.6e2 (06/05/2024)
|
||||||
|
- (SIM-GEN) Modificata tolleranza calcolo ingombri lavorazioni per posizionamento pinze. Ticket#1790
|
||||||
|
|
||||||
|
Versione 2.6e1 (30/04/2024)
|
||||||
|
- (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 (18/04/2024)
|
||||||
|
- (SIM-GEN) In MLSE, quando c'è una rotazione, viene settato EMT.CNT=1 per considerare i 50mm di compensazione laser.
|
||||||
|
- (SIM) Nel file di log dove c'è stampa gruppi di collisione, viene scritto anche ID del gruppo
|
||||||
|
|
||||||
|
Versione 2.6d1 (15/04/2024)
|
||||||
|
- (GEN) Aggiunta gestione aggregato doppia uscita per controllo NUM_PLUS
|
||||||
|
- (GEN) Con aggregato con si possono fare archi, se OnArc con aggregato, dà errore.
|
||||||
|
- (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)
|
||||||
|
|
||||||
|
Versione 2.6c8 (28/03/2024)
|
||||||
|
- (MLSE) Possibilità di lavorazione da X- tra le pinze, se abilitata da flag (User.ENABLE_TOOL_BETWEEN_VICES == 1).
|
||||||
|
- (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
|
||||||
|
|
||||||
|
Versione 2.6c7 (12/03/2024)
|
||||||
|
- (SIM) Miglioramento visualizzazione spigoli VMILL alla fine della simulazione. Funzione: EgtVolZmapSetShowEdges. N.B.= serve CAM5 2.6c2 NON OBBLIGATORIO
|
||||||
|
- (GEN) Corretto problema di movimento pinze assieme a discesa asse Z (Ticket #1710)
|
||||||
|
|
||||||
|
Versione 2.6c6 (04/03/2024)
|
||||||
|
- (MLDE-GEN) Aggiunta variabile 'MACH_NAME' in MLDE con nome macchina
|
||||||
|
|
||||||
|
Versione 2.6c5 (29/02/2024)
|
||||||
|
- (GEN) Aggiunto comando di wait fine M101/G101 in caso di movimento in zona sicurezza per motosega
|
||||||
|
- (GEN) Gestione accelerazioni pinze in M115 ( solo per TPA)
|
||||||
|
- (SIM) Gestione rimozione VMILL per tagli a cubetti a zig-zag
|
||||||
|
|
||||||
|
Versione 2.6c4 (27/02/2024)
|
||||||
|
- (MLDE-SIM-GEN) Con pezzi molto alti '> BeamHeightForFixRot', aggiunto parametro 'SafeXRotAxes' per ruotare motosega in zona sicura lontano dal pezzo
|
||||||
|
- (SIM) Nelle funzioni movimentaizone assi, utilizzate costanti 'MCH_SIM_STEP'
|
||||||
|
|
||||||
|
Versione 2.6c3 (23/02/2024)
|
||||||
|
- (SIM) Corretta lettura parametro RIGHT_LOAD
|
||||||
|
- (SIM-GEN) Rimossa chiamata funzione EgtGetSourceDir rimasta in MLPE
|
||||||
|
|
||||||
Versione 2.6c2 (23/02/2024)
|
Versione 2.6c2 (23/02/2024)
|
||||||
- (ALL) Rimossa chiamata funzione EgtGetSourceDir
|
- (SIM-GEN) Rimossa chiamata funzione EgtGetSourceDir
|
||||||
|
|
||||||
|
Versione 2.6c1 (23/02/2024)
|
||||||
|
- (SIM-GEN) Prima versione post-proc comune FAST e FASTrl
|
||||||
|
- (SIM-GEN) "BeamData" caricato come libreria con 'require' anziché come file con 'dofile'
|
||||||
|
- (SIM) Aggiunta funzioni "OnSimulInit" e "OnSimulExit" per orientare vista corretta in caso di macchina con carico destro. N.B.= serve CAM5 2.6b4
|
||||||
|
- (SIM-GEN) In BeamData aggiunto flag per direzione carico RIGHT_LOAD
|
||||||
|
- (SIM-GEN) Aggiornamento 'Compile.bat' con nuovi nomi file
|
||||||
+3
-3
@@ -1,9 +1,9 @@
|
|||||||
-- Version.lua by EgalWare s.r.l. 2024/02/23
|
-- Version.lua by EgalWare s.r.l. 2024/12/23
|
||||||
-- Gestione della versione dei file comuni post-processori macchine FAST e FASTrl di Essetre
|
-- Gestione della versione dei file comuni post-processori macchine FAST e FASTrl di Essetre
|
||||||
|
|
||||||
local InfoCommon_STD_PP = {
|
local InfoCommon_STD_PP = {
|
||||||
NAME = 'Common-FAST', -- nome script PP standard
|
NAME = 'Common_FAST', -- nome script PP standard
|
||||||
VERSION = '2.6c1', -- versione script
|
VERSION = '2.7a1', -- versione script
|
||||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user