448 lines
14 KiB
Plaintext
448 lines
14 KiB
Plaintext
-- Descrizione macchina Essetre-90580012 by EgalTech s.r.l. 2024/09/23
|
|
-- Macchina Progress (parte Wall).
|
|
-- 2023/09/01 DS ver 2.5i1 Primo rilascio partendo da 90580017.
|
|
-- 2023/09/05 DS ver 2.5i2 Sistemazioni varie. Sottratto circa 30 da G1xx.
|
|
-- 2023/09/06 DS ver 2.5i3 Impostata origine 3.
|
|
-- 2023/09/18 DS ver 2.5i4 Aggiunta gestione due tavole accoppiate.
|
|
-- 2023/09/20 DS ver 2.5i5 Grezzi larghi fino a 3520. Rifatta lavorazione lama in DB per eliminare problema ultimo step.
|
|
-- 2023/09/20 DS ver 2.5i6 Corretta gestione posizione seconda tavola. Corretto spostamento solidi collisione testa lama.
|
|
-- 2024/02/09 AV ver 2.6b1 Forzato posizionamento pezzo sempre in origine 1
|
|
-- Aggiunto magazzino per trucioaltore 600x20mm
|
|
-- Tavole azzerate a X negativo (per Essetre Y positivo)
|
|
-- 2024/02/10 DS ver 2.6b2 Sistemazione estremi assi Y.
|
|
-- Aumentato interasse tra le tavole quando accoppiate
|
|
-- 2024/02/15 AV ver 2.6b3 Cambiato id motosega EU101->104 (Prima era EU41)
|
|
-- Corretta posizione parcheggio in base al nuovo lato di carico
|
|
-- 2024/10/04 AV ver 2.6j1 Modificato controllo collisione tavola. Ora permessi 10mm
|
|
-- 2024/11/28 LM ver 2.6k1 In WallData aggiunto parametri MIN_Z_SAW e CUT_VZ_MIN
|
|
|
|
require( 'EmtGenerator')
|
|
EgtEnableDebug( false)
|
|
|
|
PP_VER = '2.7h1'
|
|
PP_NVER = '2.7.8.1'
|
|
|
|
-- Parametri macchina
|
|
NumericalControl = 'NUM' -- NUM o TPA
|
|
MinY = 10000.0
|
|
MaxY = 35500.0
|
|
MinY2 = 0.0
|
|
MaxY2 = 25500.0
|
|
MinX1 = -5440.0
|
|
MaxX1 = -690.0
|
|
MinZ1 = -1345.0
|
|
MaxZ1 = 0.0
|
|
SafeZ1 = -800.0
|
|
MinB1 = -127.0
|
|
MaxB1 = 127.0
|
|
MinC1 = -275.0
|
|
MaxC1 = 275.0
|
|
MillOffs = 170.0
|
|
ChSawLen = 91.0
|
|
ParkChSawX1 = ( MinX1 + MaxX1) / 2
|
|
ParkChSawZ1 = -400 -- OLD: -250
|
|
ParkChSawC1 = 90
|
|
MinX2 = -4750.0
|
|
MaxX2 = 0.0
|
|
MinZ2 = -1155.0
|
|
MaxZ2 = 0.0
|
|
MinB2 = 0.0
|
|
MaxB2 = 90.0
|
|
MinC2 = -275.0
|
|
MaxC2 = 275.0
|
|
SawDeltaX = 104.5
|
|
SawDeltaY = 0.0
|
|
SawDeltaZ = -253.0
|
|
SawOffs = 154.0
|
|
DimTabX = 10000.0
|
|
DimTabY = 3500.0
|
|
DeltaTabX = 12207.5
|
|
DeltaTabY = -4789.3
|
|
DeltaTabZ = -1150.0
|
|
DimTab2X = 10000.0
|
|
DimTab2Y = 3500.0
|
|
DeltaTab2X = 12207.5
|
|
DeltaTab2Y = -4789.3
|
|
DeltaTab2Z = -1150.0
|
|
GantryTabs = 11000.0
|
|
OffsetTabs = 332
|
|
CoeffVM = 0.75
|
|
|
|
-- Aggiornamento con dati da TechnoEssetre7
|
|
local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-90580012.data"
|
|
local sData = EgtGetCurrMachineDir().."\\Wall\\Ts3Data.lua"
|
|
if EgtExistsFile( sTs3Data) then
|
|
EgtCopyFile( sTs3Data, sData)
|
|
local sTs3DataOld = sTs3Data..'.old'
|
|
EgtEraseFile( sTs3DataOld)
|
|
EgtRenameFile( sTs3Data, sTs3DataOld)
|
|
end
|
|
|
|
if EgtExistsFile( sData) then
|
|
local Machine = dofile( sData)
|
|
if Machine and Machine.Offsets then
|
|
local MchOffs = Machine.Offsets
|
|
NumericalControl = EgtIf( MchOffs.TIPO_CN ~= 1, 'NUM', 'TPA')
|
|
if MchOffs.MAX_Y then MinY = -MchOffs.MAX_Y end
|
|
if MchOffs.MIN_Y then MaxY = -MchOffs.MIN_Y end
|
|
if MchOffs.MAX_Y2 then MinY2 = -MchOffs.MAX_Y2 end
|
|
if MchOffs.MIN_Y2 then MaxY2 = -MchOffs.MIN_Y2 end
|
|
MinX1 = MchOffs.MIN_X or MinX1
|
|
MaxX1 = MchOffs.MAX_X or MaxX1
|
|
MinZ1 = MchOffs.MIN_Z or MinZ1
|
|
MaxZ1 = MchOffs.MAX_Z or MaxZ1
|
|
MinB1 = MchOffs.MIN_B or MinB1
|
|
MaxB1 = MchOffs.MAX_B or MaxB1
|
|
MinC1 = MchOffs.MIN_C or MinC1
|
|
MaxC1 = MchOffs.MAX_C or MaxC1
|
|
MinX2 = MchOffs.MIN_U or MinX2
|
|
MaxX2 = MchOffs.MAX_U or MaxX2
|
|
MinZ2 = MchOffs.MIN_W or MinZ2
|
|
MaxZ2 = MchOffs.MAX_W or MaxZ2
|
|
MinB2 = MchOffs.MIN_V or MinB2
|
|
MaxB2 = MchOffs.MAX_V or MaxB2
|
|
MinC2 = MchOffs.MIN_A or MinC2
|
|
MaxC2 = MchOffs.MAX_A or MaxC2
|
|
MillOffs = MchOffs.PIVOT_MILL or MillOffs
|
|
SawOffs = MchOffs.PIVOT_SAW or SawOffs
|
|
if MchOffs.ZERO_Y_MILL and MchOffs.OFFSET_ZERO2_Y then DeltaTabX = -MchOffs.ZERO_Y_MILL - MchOffs.OFFSET_ZERO2_Y end
|
|
if MchOffs.ZERO_X_MILL and MchOffs.OFFSET_ZERO2_X then DeltaTabY = MchOffs.ZERO_X_MILL + MchOffs.OFFSET_ZERO2_X end
|
|
DeltaTabZ = MchOffs.ZERO_Z_MILL or DeltaTabZ
|
|
DeltaTab2X = DeltaTabX
|
|
DeltaTab2Y = DeltaTabY
|
|
DeltaTab2Z = DeltaTabZ
|
|
if MchOffs.ZERO_Y_MILL and MchOffs.ZERO_Y_SAW then SawDeltaX = - ( MchOffs.ZERO_Y_MILL - MchOffs.ZERO_Y_SAW) end
|
|
if MchOffs.ZERO_X_MILL and MchOffs.ZERO_X_SAW then SawDeltaY = ( MchOffs.ZERO_X_MILL - MchOffs.ZERO_X_SAW) end
|
|
if MchOffs.ZERO_Z_MILL and MchOffs.ZERO_Z_SAW then SawDeltaZ = ( MchOffs.ZERO_Z_MILL - MchOffs.ZERO_Z_SAW) end
|
|
GantryTabs = MchOffs.GANTRY_TABLES or GantryTabs
|
|
end
|
|
end
|
|
|
|
-- Spostamenti della lama rispetto al disegno
|
|
local SawOffsX = SawDeltaX - 104.5
|
|
local SawOffsY = SawDeltaY - 0
|
|
local SawOffsZ = SawDeltaZ + 253.0
|
|
|
|
EmtGeneral {
|
|
File='Essetre-90580012.nge',
|
|
Offset = Vector3d( -783.5, -5820.00, -1778.0),
|
|
AxisMaxAdjust = 300,
|
|
ExitMaxAdjust = 300,
|
|
Special = 'Essetre-WALL.mlse',
|
|
Processor = 'Essetre-WALL.mlpe'}
|
|
local BaseId = EmtBase {
|
|
Name = 'Base',
|
|
Geo='BASE/GEO',
|
|
Aux={'BASE/TRAVERSA', 'BASE/SUBTABLE', 'BASE/COLLISION', 'BASE/TC', 'BASE/TCR', 'BASE/TCR2'}}
|
|
local vtMove = Vector3d( DeltaTabX - 12207.5, DeltaTabY + 4789.3, DeltaTabZ + 1150)
|
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'SUBTABLE'), vtMove, GDB_RT.GLOB)
|
|
-- Tavola 1
|
|
local YId = EmtAxis {
|
|
Name = 'Y',
|
|
Parent = 'Base',
|
|
Invert = true,
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = -X_AX(),
|
|
Pos = Point3d( 0, 0, 0),
|
|
Stroke = {MinY, MaxY},
|
|
Home = MaxY,
|
|
Geo = 'Y_AXIS/GEO',
|
|
Aux = {'Y_AXIS/SOLID'}}
|
|
EgtMove( YId, vtMove, GDB_RT.GLOB)
|
|
local TabId = EmtTable {
|
|
Name = 'Tab',
|
|
Parent = 'Y',
|
|
Type = MCH_TT.FLAT,
|
|
Ref1 = Point3d( DeltaTabX, DeltaTabY, DeltaTabZ),
|
|
Geo = 'TABLE/GEO',
|
|
Aux = {'TABLE/GEO2', 'TABLE/SOLID', 'TABLE/COLLISION'}}
|
|
-- Tavola 2
|
|
local Y2Id = EmtAxis {
|
|
Name = 'Y2',
|
|
Parent = 'Base',
|
|
Invert = true,
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = -X_AX(),
|
|
Pos = Point3d( 0, 0, 0),
|
|
Stroke = {MinY2, MaxY2},
|
|
Home = MinY2,
|
|
Geo = 'Y2_AXIS/GEO',
|
|
Aux = {'Y2_AXIS/SOLID'}}
|
|
EgtMove( Y2Id, vtMove, GDB_RT.GLOB)
|
|
EmtTable {
|
|
Name = 'Tab2',
|
|
Parent = 'Y2',
|
|
Type = MCH_TT.FLAT,
|
|
Ref1 = Point3d( DeltaTab2X, DeltaTab2Y, DeltaTab2Z),
|
|
Geo = 'TABLE2/GEO',
|
|
Aux = {'TABLE2/SOLID', 'TABLE2/COLLISION'}}
|
|
-- Testa per frese
|
|
EmtAxis {
|
|
Name = 'X1',
|
|
Parent = 'Base',
|
|
Token = 'X',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Y_AX(),
|
|
Pos = Point3d( 0, 0, 0),
|
|
Stroke = {MinX1, MaxX1},
|
|
Home = MinX1,
|
|
Geo = 'X1_AXIS/GEO',
|
|
Aux = {'X1_AXIS/SOLID'}}
|
|
EmtAxis {
|
|
Name = 'Z1',
|
|
Parent = 'X1',
|
|
Token = 'Z',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d( 0, 0, 0),
|
|
Stroke = {MinZ1, MaxZ1},
|
|
Home = 0,
|
|
Geo = 'Z1_AXIS/GEO',
|
|
Aux = {'Z1_AXIS/SOLID'}}
|
|
EmtAxis {
|
|
Name = 'C1',
|
|
Parent = 'Z1',
|
|
Token = 'C',
|
|
Type = MCH_AT.ROTARY,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d( 0, 0, 0),
|
|
Stroke = {MinC1, MaxC1},
|
|
Home = 0,
|
|
Geo = 'C1_AXIS/GEO',
|
|
Aux = {'C1_AXIS/SOLID', 'C1_AXIS/COLLISION'}}
|
|
EmtAxis {
|
|
Name = 'B1',
|
|
Parent = 'C1',
|
|
Token = 'B',
|
|
Type = MCH_AT.ROTARY,
|
|
Dir = -X_AX(),
|
|
Pos = Point3d( 0, 0, MillOffs),
|
|
Stroke = {MinB1, MaxB1},
|
|
Home = 0,
|
|
Geo = 'B1_AXIS/GEO',
|
|
Aux = {'B1_AXIS/SOLID', 'B1_AXIS/COLLISION'}}
|
|
EmtHead {
|
|
Name = 'H1',
|
|
Parent = 'B1',
|
|
HSet = 'H1',
|
|
Type = MCH_HT.STD,
|
|
Pos = Point3d( 0, 0, 0),
|
|
TDir = Z_AX(),
|
|
ADir = Y_AX(),
|
|
Rot1W = 0.1,
|
|
OthColl = {'B1/SOLID', 'C1/SOLID'},
|
|
Geo = 'H1_HEAD/GEO'}
|
|
-- Sega a catena
|
|
-- attenzione: gestita solo la home per la posizione 104, unica abilitata. Se si aggiungono altre posizioni, la home sarà da modificare nella OnSetHead
|
|
EmtAxis {
|
|
Name = 'A1',
|
|
Parent = 'B1',
|
|
Token = '**',
|
|
Type = MCH_AT.ROTARY,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d( 0, 0, 0),
|
|
Stroke = { -90, 180},
|
|
Home = 90,
|
|
Geo = 'A1_AXIS/GEO'}
|
|
local H3Id = EmtHead {
|
|
Name = 'H3',
|
|
Parent = 'A1',
|
|
HSet = 'H1',
|
|
Type = MCH_HT.STD,
|
|
Pos = Point3d( 0, 0, -ChSawLen),
|
|
TDir = X_AX(),
|
|
ADir = Z_AX(),
|
|
Rot1W = 0.1,
|
|
SolCh = MCH_SCC.ADIR_NEAR,
|
|
OthColl = {'B1/SOLID', 'C1/SOLID'},
|
|
Geo = 'H3_HEAD/GEO'}
|
|
EgtSetInfo( H3Id, 'ZSAFEDELTA', 60)
|
|
-- Testa per Lama
|
|
local X2Id = EmtAxis {
|
|
Name = 'X2',
|
|
Parent = 'Base',
|
|
Token = 'X',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Y_AX(),
|
|
Pos = Point3d( 0, 0, 0),
|
|
Stroke = {MinX2, MaxX2},
|
|
Home = MaxX2,
|
|
Geo = 'X2_AXIS/GEO',
|
|
Aux = {'X2_AXIS/SOLID'}}
|
|
EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, 0), GDB_RT.GLOB)
|
|
local Z2Id = EmtAxis {
|
|
Name = 'Z2',
|
|
Parent = 'X2',
|
|
Token = 'Z',
|
|
Type = MCH_AT.LINEAR,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d( 0, 0, 0),
|
|
Stroke = {MinZ2, MaxZ2},
|
|
Home = 0,
|
|
Geo = 'Z2_AXIS/GEO',
|
|
Aux = {'Z2_AXIS/SOLID'}}
|
|
EgtMove( EgtGetFirstNameInGroup( Z2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB)
|
|
local C2Id = EmtAxis {
|
|
Name = 'C2',
|
|
Parent = 'Z2',
|
|
Token = 'C',
|
|
Type = MCH_AT.ROTARY,
|
|
Dir = Z_AX(),
|
|
Pos = Point3d( SawDeltaX, SawDeltaY, 0),
|
|
Stroke = {MinC2, MaxC2},
|
|
Home = 0,
|
|
Geo = 'C2_AXIS/GEO',
|
|
Aux = {'C2_AXIS/SOLID', 'C2_AXIS/COLLISION'}}
|
|
EgtMove( EgtGetFirstNameInGroup( C2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( C2Id, 'COLLISION'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB)
|
|
local B2Id = EmtAxis {
|
|
Name = 'B2',
|
|
Parent = 'C2',
|
|
Token = 'B',
|
|
Type = MCH_AT.ROTARY,
|
|
Dir = -X_AX(),
|
|
Pos = Point3d( SawDeltaX, SawDeltaY, SawDeltaZ + SawOffs),
|
|
Stroke = {MinB2, MaxB2},
|
|
Home = 90,
|
|
Geo = 'B2_AXIS/GEO',
|
|
Aux = {'B2_AXIS/SOLID', 'B2_AXIS/COLLISION'}}
|
|
EgtMove( EgtGetFirstNameInGroup( B2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB)
|
|
EgtMove( EgtGetFirstNameInGroup( B2Id, 'COLLISION'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB)
|
|
local H2Id = EmtHead {
|
|
Name = 'H2',
|
|
Parent = 'B2',
|
|
HSet = 'H2',
|
|
Type = MCH_HT.STD,
|
|
Pos = Point3d( SawDeltaX, SawDeltaY, SawDeltaZ),
|
|
TDir = Z_AX(),
|
|
ADir = -Y_AX(),
|
|
Rot1W = 0.2,
|
|
OthColl = {'B2/SOLID', 'C2/SOLID'},
|
|
Geo = 'H2_HEAD/GEO'}
|
|
-- ToolChanger
|
|
local ptTC = Point3d( -616.3,-3892.7,-63.0)
|
|
EmtTcPos {
|
|
Name = 'T1',
|
|
Parent = 'Base',
|
|
Pos = ptTC,
|
|
TDir = Z_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T1'}
|
|
EmtTcPos {
|
|
Name = 'T2',
|
|
Parent = 'Base',
|
|
Pos = ptTC + 102.5 * Y_AX(),
|
|
TDir = Z_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T2'}
|
|
EmtTcPos {
|
|
Name = 'T3',
|
|
Parent = 'Base',
|
|
Pos = ptTC + 2 * 102.5 * Y_AX(),
|
|
TDir = Z_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T3'}
|
|
EmtTcPos {
|
|
Name = 'T4',
|
|
Parent = 'Base',
|
|
Pos = ptTC + 3 * 102.5 * Y_AX(),
|
|
TDir = Z_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T4'}
|
|
EmtTcPos {
|
|
Name = 'T5',
|
|
Parent = 'Base',
|
|
Pos = ptTC + 4 * 102.5 * Y_AX(),
|
|
TDir = Z_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T5'}
|
|
EmtTcPos {
|
|
Name = 'T6',
|
|
Parent = 'Base',
|
|
Pos = ptTC + 5 * 102.5 * Y_AX(),
|
|
TDir = Z_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T6'}
|
|
EmtTcPos {
|
|
Name = 'T7',
|
|
Parent = 'Base',
|
|
Pos = ptTC + 6 * 102.5 * Y_AX(),
|
|
TDir = Z_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T7'}
|
|
EmtTcPos {
|
|
Name = 'T8',
|
|
Parent = 'Base',
|
|
Pos = ptTC + 7 * 102.5 * Y_AX(),
|
|
TDir = Z_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T8'}
|
|
EmtTcPos {
|
|
Name = 'T9',
|
|
Parent = 'Base',
|
|
Pos = ptTC + 8 * 102.5 * Y_AX(),
|
|
TDir = Z_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T9'}
|
|
local ptTCR = Point3d( -611.0,-5033.7,-197.0)
|
|
EmtTcPos {
|
|
Name = 'T101',
|
|
Parent = 'Base',
|
|
Pos = ptTCR - ChSawLen * Z_AX(),
|
|
TDir = X_AX(),
|
|
ADir = Z_AX(),
|
|
Geo = 'BASE/T101'}
|
|
local ptTCR2 = Point3d( -901.3,-4392.7,-79)
|
|
EmtTcPos {
|
|
Name = 'T201',
|
|
Parent = 'Base',
|
|
Pos = ptTCR2,
|
|
TDir = Z_AX(),
|
|
ADir = X_AX(),
|
|
Geo = 'BASE/T201'}
|
|
---------------------------------------------------------------------
|
|
-- Funzioni richiamate per modificare i dati macchina in casi particolari
|
|
--function OnSetTable()
|
|
--end
|
|
|
|
---------------------------------------------------------------------
|
|
function OnSetHead()
|
|
if EMC.HEAD == 'H1' then
|
|
EmtModifyAxisHome( 'X1', MinX1)
|
|
EmtModifyAxisHome( 'Z1', MaxZ1)
|
|
EmtModifyAxisHome( 'C1', 0)
|
|
elseif EMC.HEAD == 'H3' then
|
|
EmtModifyAxisHome( 'X1', ParkChSawX1)
|
|
EmtModifyAxisHome( 'Z1', ParkChSawZ1)
|
|
EmtModifyAxisHome( 'C1', ParkChSawC1)
|
|
local dDist = EgtIf( EMC.DIST and abs( EMC.DIST) > 1, EMC.DIST, ChSawLen)
|
|
EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -dDist))
|
|
if not EMC.VER or EMC.VER < '2.5h2' then
|
|
local vtMove = Point3d( 0, 0, -dDist) - Point3d( EMC.EXITPOS)
|
|
local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT))
|
|
EgtMove( ExitId, vtMove)
|
|
end
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
-- Funzione per resettare tutte le attivazioni della macchina
|
|
function OnResetMachine()
|
|
EmtUnlinkAllRawPartsFromGroups()
|
|
EmtUnlinkAllFixturesFromGroups()
|
|
-- nascondo Vmill
|
|
local nRawId = EgtGetFirstRawPart()
|
|
while nRawId do
|
|
local nVmId = EgtGetFirstNameInGroup( nRawId, 'VMill')
|
|
local nId = EgtGetFirstInGroup( nRawId)
|
|
while nId do
|
|
EgtSetStatus( nId, EgtIf( nId ~= nVmId, GDB_ST.ON, GDB_ST.OFF))
|
|
nId = EgtGetNext( nId)
|
|
end
|
|
nRawId = EgtGetNextRawPart( nRawId)
|
|
end
|
|
EgtSetStatus( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') or GDB_ID.NULL, GDB_ST.OFF)
|
|
-- visualizzo geometria ausiliaria tavola
|
|
EgtSetStatus( EgtGetFirstNameInGroup( TabId, 'GEO2') or GDB_ID.NULL, GDB_ST.ON)
|
|
end
|