Imports System.Collections.ObjectModel Imports EgtUILib Public Module CurrentMachine ' Nome macchina corrente Private m_sMachineName As String = String.Empty ' Direttorio macchina corrente Private m_sMachDir As String = String.Empty ' File ini della macchina Private m_sMachIniFile As String = String.Empty ' Estensione dei file programma pezzo (detti anche file Iso) Private m_sIsoFileExt As String = String.Empty ' Incremento da dare all'asse C per far coincidere la linea della lama con l'asse X Private m_dDeltaC As Double = 0 ' Dati su linea di produzione Private m_bProdLine As Boolean = False Private m_sVarProg1 As String = "E80021" Private m_nProg1 As Integer = 901 Private m_sVarProg2 As String = "E80022" Private m_nProg2 As Integer = 902 Private m_sLineDataDir As String = "" Private m_sVarProjCopy As String = "E80025" ' Numero e tipo di utensili correntemente disponibili sulla macchina Private m_MountedToolConfig As MountedToolConfigs = MountedToolConfigs.SAW ' Distanza di sicurezza Private m_dSafeZ As Double = 0 ' Dati per nesting Private m_bReducedCut As Boolean = True Private m_bAligned As Boolean = True ' Massimo diametro lama per utilizzo ventose movimento pezzi Private m_dMaxSawDiamForVac As Double = 630 ' Massimo diametro lama per tastatura grezzo Private m_dMaxSawDiamForProbe As Double = 630 ' Flag che indicano stato tipologia utensili (attivo/non attivo) Private m_bSaw As Boolean = False Private m_bDrill As Boolean = False Private m_bMill As Boolean = False ' Flag per visualizzazione TcPos e Testa/uscita Private m_bShowToolChanger As Boolean = False Private m_bShowHeadExit As Boolean = False ' Flag che indicano presenza tipologia lavorazioni (attivo/non attivo) Private m_bSawing As Boolean = False Private m_bDrilling As Boolean = False Private m_bMilling As Boolean = False Private m_bSawRoughing As Boolean = False Private m_bSawFinishing As Boolean = False ' Variabili che contengono il nome degli utensili disponibili per tipo Private m_sCurrSaw(0) As String Private m_sCurrDrill(0) As String Private m_sCurrMill(0) As String ' Variabili che contengono le lavorazioni correntemente attive (utilizzate per definire lavorazioni nel programma) Private m_sCurrSawing As String = String.Empty Private m_sCurrDrilling As String = String.Empty Private m_sCurrMilling As String = String.Empty Private m_sCurrSawRoughing As String = String.Empty Private m_sCurrSawFinishing As String = String.Empty Private m_sCurrSawSideFinishing As String = String.Empty ' Spessore sottopezzo Private m_dAdditionalTable As Double = 0 ' Flag home finale per tagli diretti Private m_bDirectCutsFinalHome As Boolean = True ' Numero portautensili presenti Private m_ToolChangerNbr As Integer = 0 ' Lista portautensili Private m_ToolChanger As New List(Of ToolChangerPos) ' Numero portautensili manuali Private m_ManualToolChangerNbr As Integer = 0 ' Lista portautensili Private m_ManualToolChanger As New List(Of ToolChangerPos) ' Lista dei materiali Private m_Materials As New ObservableCollection(Of Material) ' Massimo id della lista materiali nel file ini Private m_MaxIdMat As Integer = 0 ' Materiale correntemente attivo (dell'ultimo grezzo impostato) Private m_CurrMat As Material = Nothing ' Indica se la macchina ha il tastatore della lastra Private m_HasRawProbe As Boolean = True ' Tipi di attrezzaggio Public Enum MountedToolConfigs As Integer SAW = 0 SAWANDAUXTOOL = 1 MANUALTOOLCHANGER = 2 TOOLCHANGER = 3 End Enum ' Massimo numero di utensili su Tc automatico Public MAX_TC_TOOLS As Integer = 60 ' Massimo numero di utensili su Tc manuale Public MAX_TCMAN_TOOLS As Integer = 60 #Region "Proprietà che leggono e scrivono i valori anche da o su file ini" Public ReadOnly Property sMachineName As String Get Return m_sMachineName End Get End Property Public ReadOnly Property sMachDir As String Get Return m_sMachDir End Get End Property Public ReadOnly Property sMachIniFile As String Get Return m_sMachIniFile End Get End Property Public ReadOnly Property sIsoFileExt As String Get Return m_sIsoFileExt End Get End Property Public ReadOnly Property dDeltaC As Double Get Return m_dDeltaC End Get End Property Public ReadOnly Property bProdLine As Boolean Get Return m_bProdLine End Get End Property Public ReadOnly Property sVarProg1 As String Get Return m_sVarProg1 End Get End Property Public ReadOnly Property nProg1 As Integer Get Return m_nProg1 End Get End Property Public ReadOnly Property sVarProg2 As String Get Return m_sVarProg2 End Get End Property Public ReadOnly Property nProg2 As Integer Get Return m_nProg2 End Get End Property Public ReadOnly Property sLineDataDir As String Get Return m_sLineDataDir End Get End Property Public ReadOnly Property sVarProjCopy As String Get Return m_sVarProjCopy End Get End Property Public ReadOnly Property MountedToolConfig As MountedToolConfigs Get Return m_MountedToolConfig End Get End Property Public ReadOnly Property dMaxSawDiamForVac As Double Get Return m_dMaxSawDiamForVac End Get End Property Public ReadOnly Property dMaxSawDiamForProbe As Double Get Return m_dMaxSawDiamForProbe End Get End Property Public Property dSafeZ As Double Get If EgtMdbGetGeneralParam(MCH_GP.SAFEZ, m_dSafeZ) Then Return m_dSafeZ Else Return Nothing End If End Get Set(value As Double) If EgtMdbSetGeneralParam(MCH_GP.SAFEZ, m_dSafeZ) And EgtMdbSave() Then m_dSafeZ = value End If End Set End Property Public Property bReducedCut As Boolean Get Return m_bReducedCut End Get Set(value As Boolean) If WritePrivateProfileString(S_MACH_NEST, K_MACH_REDUCEDCUT, If(value, "1", "0"), sMachIniFile) Then m_bReducedCut = value End If End Set End Property Public Property bAligned As Boolean Get Return m_bAligned End Get Set(value As Boolean) If WritePrivateProfileString(S_MACH_NEST, K_MACH_NEST_ALIGNED, If(value, "1", "0"), sMachIniFile) Then m_bAligned = value End If End Set End Property Public ReadOnly Property bSaw As Boolean Get Return m_bSaw End Get End Property Public ReadOnly Property bDrill As Boolean Get Return m_bDrill End Get End Property Public ReadOnly Property bMill As Boolean Get Return m_bMill End Get End Property Public ReadOnly Property bShowToolChanger As Boolean Get Return m_bShowToolChanger End Get End Property Public ReadOnly Property bShowHeadExit As Boolean Get Return m_bShowHeadExit End Get End Property Public ReadOnly Property bSawing As Boolean Get Return m_bSawing End Get End Property Public ReadOnly Property bDrilling As Boolean Get Return m_bDrilling End Get End Property Public ReadOnly Property bMilling As Boolean Get Return m_bMilling End Get End Property Public ReadOnly Property bSawRoughing As Boolean Get Return m_bSawRoughing End Get End Property Public ReadOnly Property bSawFinishing As Boolean Get Return m_bSawFinishing End Get End Property Public Property sCurrSaw As String Get Return m_sCurrSaw(0) End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRSAW, value, sMachIniFile) Then m_sCurrSaw(0) = value End If End Set End Property Public Property sCurrDrill As String Get Return m_sCurrDrill(0) End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRDRILL, value, sMachIniFile) Then m_sCurrDrill(0) = value End If End Set End Property Public Property sCurrMill As String Get Return m_sCurrMill(0) End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRMILL, value, sMachIniFile) Then m_sCurrMill(0) = value End If End Set End Property Public Property sCurrSawing As String Get Return m_sCurrSawing End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRSAWING, value, sMachIniFile) Then m_sCurrSawing = value End If End Set End Property Public Property sCurrDrilling As String Get Return m_sCurrDrilling End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRDRILLING, value, sMachIniFile) Then m_sCurrDrilling = value End If End Set End Property Public Property sCurrMilling As String Get Return m_sCurrMilling End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRMILLING, value, sMachIniFile) Then m_sCurrMilling = value End If End Set End Property Public Property sCurrSawRoughing As String Get Return m_sCurrSawRoughing End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRSAWROUGHING, value, sMachIniFile) Then m_sCurrSawRoughing = value End If End Set End Property Public Property sCurrSawFinishing As String Get Return m_sCurrSawFinishing End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRSAWFINISHING, value, sMachIniFile) Then m_sCurrSawFinishing = value End If End Set End Property Public Property sCurrSawSideFinishing As String Get Return m_sCurrSawSideFinishing End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRSAWSIDEFINISHING, value, sMachIniFile) Then m_sCurrSawSideFinishing = value End If End Set End Property Public Property dAdditionalTable As Double Get Return m_dAdditionalTable End Get Set(value As Double) If Math.Abs(value - m_dAdditionalTable) > EPS_SMALL And WritePrivateProfileString(S_TABLE, K_ADDITIONALTABLE, DoubleToString(value, 3), sMachIniFile) Then ' Aggiorno il valore corrente m_dAdditionalTable = value ' Aggiorno il progetto corrente AdjustAdditionalTable() End If End Set End Property Public Property bDirectCutsFinalHome As Boolean Get Return m_bDirectCutsFinalHome End Get Set(value As Boolean) If WritePrivateProfileString(S_MACH_DIRECTCUTS, K_FINALHOME, If(value, "1", "0"), sMachIniFile) Then m_bDirectCutsFinalHome = value End If End Set End Property Public ReadOnly Property ToolChangerNbr As Integer Get Return m_ToolChangerNbr End Get End Property Public ReadOnly Property ToolChanger As List(Of ToolChangerPos) Get Return m_ToolChanger End Get End Property Public ReadOnly Property ToolChangerName(Index As Integer) As String Get If Index >= 0 And Index < m_ToolChanger.Count Then Return m_ToolChanger(Index).sName Else Return String.Empty End If End Get End Property Public WriteOnly Property ToolPos(Index As Integer) As String Set(value As String) If value <> m_ToolChanger(Index).sTool Then m_ToolChanger(Index).sTool = value WritePrivateProfileString(S_TOOLCHANGER, K_POS & Index + 1, value, sMachIniFile) End If End Set End Property Public ReadOnly Property ManualToolChangerNbr As Integer Get Return m_ManualToolChangerNbr End Get End Property Public ReadOnly Property ManualToolChanger As List(Of ToolChangerPos) Get Return m_ManualToolChanger End Get End Property Public ReadOnly Property ManualToolChangerName(Index As Integer) As String Get If Index >= 0 And Index < m_ManualToolChanger.Count Then Return m_ManualToolChanger(Index).sName Else Return String.Empty End If End Get End Property Public WriteOnly Property ManualToolPos(Index As Integer) As String Set(value As String) If value <> m_ManualToolChanger(Index).sTool Then m_ManualToolChanger(Index).sTool = value WritePrivateProfileString(S_TOOLCHANGER, K_MANUALPOS & Index + 1, value, sMachIniFile) End If End Set End Property Public ReadOnly Property Materials As ObservableCollection(Of Material) Get Return m_Materials End Get End Property Public Sub AddMaterial(value As Material) For Each Material In Materials If Material.nId = value.nId Then Exit Sub End If Next WritePrivateProfileMaterial(S_MATERIALS, K_MATERIAL & m_MaxIdMat + 1, value, sMachIniFile) m_MaxIdMat += 1 Materials.Add(value) End Sub Public Sub RemoveMaterial(value As Material) ' Se è il materiale corrente lo tolgo If Not IsNothing(CurrMat) AndAlso CurrMat.nId = value.nId Then CurrMat = Nothing End If ' Rimuovo il materiale dall'elenco Dim Index As Integer For Index = 0 To Materials.Count - 1 If Materials(Index).nId = value.nId Then m_Materials.Remove(Materials(Index)) Exit For End If Next Dim TempMat As Material = Nothing For I = Index To m_MaxIdMat - 1 GetPrivateProfileMaterial(S_MATERIALS, K_MATERIAL & I + 2, TempMat, sMachIniFile) WritePrivateProfileMaterial(S_MATERIALS, K_MATERIAL & I + 1, TempMat, sMachIniFile) Next WritePrivateProfileMaterial(S_MATERIALS, K_MATERIAL & m_MaxIdMat, Nothing, sMachIniFile) m_MaxIdMat -= 1 ' Rimuovo il materiale dall'elenco di tutte le lavorazioni Dim MachiningName As String = String.Empty Dim bFound As Boolean = EgtMdbGetFirstMachining(MCH_MY.SAWING, MachiningName) While bFound EgtMdbSetCurrMachining(MachiningName) SearchAndRemoveMat(value.nId) bFound = EgtMdbGetNextMachining(MCH_MY.SAWING, MachiningName) End While bFound = EgtMdbGetFirstMachining(MCH_MY.DRILLING, MachiningName) While bFound EgtMdbSetCurrMachining(MachiningName) SearchAndRemoveMat(value.nId) bFound = EgtMdbGetNextMachining(MCH_MY.DRILLING, MachiningName) End While bFound = EgtMdbGetFirstMachining(MCH_MY.MILLING, MachiningName) While bFound EgtMdbSetCurrMachining(MachiningName) SearchAndRemoveMat(value.nId) bFound = EgtMdbGetNextMachining(MCH_MY.DRILLING, MachiningName) End While End Sub ' Funzione che dato l'Id di un materiale lo rimuove dalla lavorazione corrente Public Sub SearchAndRemoveMat(valueId As Integer) Dim SysNotes As String = String.Empty EgtMdbGetCurrMachiningParam(MCH_MP.SYSNOTES, SysNotes) If SysNotes <> String.Empty Then Dim MachiningMaterials() = SysNotes.Split(";".ToCharArray) SysNotes = String.Empty For Each Material In MachiningMaterials Dim Param() As String = Material.Split(",".ToCharArray) If Param(0) <> valueId.ToString Then SysNotes &= Material & ";" End If Next If SysNotes(SysNotes.Length - 1) = ";" Then SysNotes = SysNotes.Substring(0, SysNotes.Length - 1) End If EgtMdbSetCurrMachiningParam(MCH_MP.SYSNOTES, SysNotes) End If EgtMdbSaveCurrMachining() End Sub Public Property CurrMat As Material Get Return m_CurrMat End Get Set(value As Material) Dim CurrMatId As String = If(Not IsNothing(value), value.nId.ToString, "") WritePrivateProfileString(S_MATERIALS, K_CURRMATERIAL, CurrMatId, sMachIniFile) m_CurrMat = value End Set End Property Public ReadOnly Property bHasRawProbe As Boolean Get Return m_HasRawProbe End Get End Property #End Region Sub InitCurrentMachine(sMachinesRootDir As String, sMachineName As String, bKeyProdLine As Boolean, bKeyMill As Boolean) 'Nome macchina corrente m_sMachineName = sMachineName ' Impostazione direttorio macchina m_sMachDir = sMachinesRootDir & "\" & sMachineName ' Impostazione path MachIni file m_sMachIniFile = sMachinesRootDir & "\" & sMachineName & "\" & sMachineName & ".ini" ' Leggo flag incremento asse C m_dDeltaC = GetPrivateProfileDouble(S_AXES, K_DELTA_C, 0.0, sMachIniFile) ' Leggo estensione del file programma pezzo GetPrivateProfileString(S_PARTPROGRAM, K_EXTENSION, "xpi", m_sIsoFileExt, sMachIniFile) If m_sIsoFileExt(0) <> "." Then m_sIsoFileExt = "." & m_sIsoFileExt ' Leggo se linea di produzione e parametri relativi m_bProdLine = (GetPrivateProfileInt(S_PRODUCTIONLINE, K_ACTIVE, 0, sMachIniFile) <> 0) If m_bProdLine And Not bKeyProdLine Then m_bProdLine = False EgtOutLog("Error - Production line requested but not key enabled") End If GetPrivateProfileString(S_PRODUCTIONLINE, K_VARPROG1, "", m_sVarProg1, sMachIniFile) m_nProg1 = GetPrivateProfileInt(S_PRODUCTIONLINE, K_NAMEPROG1, 0, sMachIniFile) GetPrivateProfileString(S_PRODUCTIONLINE, K_VARPROG2, "", m_sVarProg2, sMachIniFile) m_nProg2 = GetPrivateProfileInt(S_PRODUCTIONLINE, K_NAMEPROG2, 0, sMachIniFile) GetPrivateProfileString(S_PRODUCTIONLINE, K_LINEDATADIR, "", m_sLineDataDir, sMachIniFile) GetPrivateProfileString(S_PRODUCTIONLINE, K_VARPROJCOPY, "", m_sVarProjCopy, sMachIniFile) ' Parametri per nesting dalla macchina m_bReducedCut = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_REDUCEDCUT, 0, sMachIniFile) <> 0) m_bAligned = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_NEST_ALIGNED, 0, sMachIniFile) <> 0) ' Leggo configurazione degli utensili in macchina m_MountedToolConfig = GetPrivateProfileInt(S_TOOLS, K_MOUNTEDTOOLCONFIG, 0, sMachIniFile) ' Leggo flag presenza tipologie utensili ' lama m_bSaw = (GetPrivateProfileInt(S_TOOLS, K_SAWBLADE, 0, sMachIniFile) > 0) ' foretto m_bDrill = (GetPrivateProfileInt(S_TOOLS, K_DRILLBIT, 0, sMachIniFile) > 0) ' fresa m_bMill = (GetPrivateProfileInt(S_TOOLS, K_MILL, 0, sMachIniFile) > 0) And bKeyMill ' Leggo abilitazione visualizzazione TcPos e Head/exit m_bShowToolChanger = (GetPrivateProfileInt(S_TOOLS, K_SHOWTOOLCHANGER, 0, sMachIniFile) > 0) m_bShowHeadExit = (GetPrivateProfileInt(S_TOOLS, K_SHOWHEADEXIT, 0, sMachIniFile) > 0) ' Leggo limiti diametro lama per altre operazioni m_dMaxSawDiamForVac = GetPrivateProfileDouble(S_TOOLS, K_MAXSAWDIAMFORVAC, 630, sMachIniFile) m_dMaxSawDiamForProbe = GetPrivateProfileDouble(S_TOOLS, K_MAXSAWDIAMFORPROBE, 630, sMachIniFile) ' Leggo flag presenza tipologie lavorazioni ' lama m_bSawing = (GetPrivateProfileInt(S_MACHININGS, K_SAWING, 0, sMachIniFile) > 0) ' foretto m_bDrilling = (GetPrivateProfileInt(S_MACHININGS, K_DRILLING, 0, sMachIniFile) > 0) ' fresa m_bMilling = (GetPrivateProfileInt(S_MACHININGS, K_MILLING, 0, sMachIniFile) > 0) And bKeyMill ' sgrossatura con lama m_bSawRoughing = (GetPrivateProfileInt(S_MACHININGS, K_SAWROUGHING, 0, sMachIniFile) > 0) ' finitura con lama m_bSawFinishing = (GetPrivateProfileInt(S_MACHININGS, K_SAWFINISHING, 0, sMachIniFile) > 0) ' Leggo utensili correnti ' lama GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, Nothing, m_sCurrSaw(0), sMachIniFile) ' foretto GetPrivateProfileString(S_MACH_MACH, K_CURRDRILL, Nothing, m_sCurrDrill(0), sMachIniFile) ' fresa GetPrivateProfileString(S_MACH_MACH, K_CURRMILL, Nothing, m_sCurrMill(0), sMachIniFile) ' Leggo lavorazioni correnti ' lama GetPrivateProfileString(S_MACH_MACH, K_CURRSAWING, Nothing, m_sCurrSawing, sMachIniFile) ' foretto GetPrivateProfileString(S_MACH_MACH, K_CURRDRILLING, Nothing, m_sCurrDrilling, sMachIniFile) ' fresa GetPrivateProfileString(S_MACH_MACH, K_CURRMILLING, Nothing, m_sCurrMilling, sMachIniFile) ' sgrossatura con lama GetPrivateProfileString(S_MACH_MACH, K_CURRSAWROUGHING, Nothing, m_sCurrSawRoughing, sMachIniFile) ' finitura con lama GetPrivateProfileString(S_MACH_MACH, K_CURRSAWFINISHING, Nothing, m_sCurrSawFinishing, sMachIniFile) ' spatolatura con lama GetPrivateProfileString(S_MACH_MACH, K_CURRSAWSIDEFINISHING, Nothing, m_sCurrSawSideFinishing, sMachIniFile) ' Leggo numero di portautensili m_ToolChangerNbr = GetPrivateProfileInt(S_TOOLCHANGER, K_NUMBER, 0, sMachIniFile) m_ToolChangerNbr = Math.Min(m_ToolChangerNbr, MAX_TC_TOOLS) ' Leggo da file ini nomi e utensili presenti in portautensili For Index As Integer = 1 To m_ToolChangerNbr Dim sName As String = String.Empty Dim sTool As String = String.Empty GetPrivateProfileString(S_TOOLCHANGER, K_NAME & Index, Nothing, sName, sMachIniFile) GetPrivateProfileString(S_TOOLCHANGER, K_POS & Index, Nothing, sTool, sMachIniFile) m_ToolChanger.Add(New ToolChangerPos(Index, sName, sTool)) Next ' Leggo numero portautensili manuali m_ManualToolChangerNbr = GetPrivateProfileInt(S_TOOLCHANGER, K_MANUALNUMBER, 0, sMachIniFile) m_ManualToolChangerNbr = Math.Min(m_ManualToolChangerNbr, MAX_TCMAN_TOOLS) ' Leggo da file ini nomi e utensili manuali presenti For Index = 1 To m_ManualToolChangerNbr Dim sName As String = String.Empty Dim sTool As String = String.Empty GetPrivateProfileString(S_TOOLCHANGER, K_MANUALNAME & Index, Nothing, sName, sMachIniFile) GetPrivateProfileString(S_TOOLCHANGER, K_MANUALPOS & Index, Nothing, sTool, sMachIniFile) m_ManualToolChanger.Add(New ToolChangerPos(Index, sName, sTool)) Next ' Leggo altezza sopratavola m_dAdditionalTable = GetPrivateProfileDouble(S_TABLE, K_ADDITIONALTABLE, 0, sMachIniFile) ' Leggo flag per posizione home alla fine dei tagli diretti m_bDirectCutsFinalHome = (GetPrivateProfileInt(S_MACH_DIRECTCUTS, K_FINALHOME, 1, sMachIniFile) <> 0) ' Creo materiale di default e lo aggiungo alla lista ' m_Materials.Add(New Material(0, "Generico")) ' Leggo la lista dei materiali Dim Material As Material = Nothing Dim nIndex As Integer = 1 While (GetPrivateProfileMaterial(S_MATERIALS, K_MATERIAL & nIndex, Material, sMachIniFile)) m_Materials.Add(Material) nIndex += 1 End While ' Salvo massimo indice a cui sono arrivato per usarlo quando devo aggiungere nuovi elementi alla lista m_MaxIdMat = nIndex - 1 ' Leggo materiale correntemente attivo Dim CurrMatId As Integer = GetPrivateProfileInt(S_MATERIALS, K_CURRMATERIAL, 0, sMachIniFile) For Each Material In Materials If Material.nId = CurrMatId Then m_CurrMat = Material Exit For End If Next ' leggo se la macchina ha il tastatore dello spessore tavola m_HasRawProbe = (GetPrivateProfileInt(S_MACH_PROBING, K_ENABLERAWPROBE, 1, sMachIniFile) <> 0) End Sub Public Function IsVacuumMovePossible() As Boolean ' Recupero diametro lama corrente EgtTdbSetCurrTool(sCurrSaw) Dim dToolDiam As Double = 0 EgtTdbGetCurrToolParam(MCH_TP.DIAM, dToolDiam) ' Confronto con massimo ammesso Return (dToolDiam <= dMaxSawDiamForVac) End Function Public Function IsRawProbingPossible() As Boolean ' Recupero diametro lama corrente EgtTdbSetCurrTool(sCurrSaw) Dim dToolDiam As Double = 0 EgtTdbGetCurrToolParam(MCH_TP.DIAM, dToolDiam) ' Confronto con massimo ammesso Return (dToolDiam <= dMaxSawDiamForProbe) End Function Public Function GetPrivateProfileMaterial( ByVal lpAppName As String, ByVal lpKeyName As String, ByRef Material As Material, ByVal lpFileName As String) As Boolean Dim sVal As String = String.Empty GetPrivateProfileString(lpAppName, lpKeyName, "", sVal, lpFileName) Dim sItems() As String = sVal.Split(",".ToCharArray) If sItems.Count() = 2 Then Dim nId As Integer = 0 StringToInt(sItems(0), nId) Material = New Material(nId, sItems(1)) Return True End If Return False End Function Public Function WritePrivateProfileMaterial( ByVal lpAppName As String, ByVal lpKeyName As String, ByVal Material As Material, ByVal lpFileName As String) As Boolean Dim MatStr As String = Nothing If Not IsNothing(Material) Then MatStr = Material.nId.ToString & "," & Material.sName End If If WritePrivateProfileString(lpAppName, lpKeyName, MatStr, sMachIniFile) Then Return True End If Return False End Function End Module Public Class ToolChangerPos Private m_nPosition As Integer Private m_sName As String = String.Empty Private m_sTool As String = String.Empty Public ReadOnly Property nPosition As Integer Get Return m_nPosition End Get End Property Public ReadOnly Property sName As String Get Return m_sName End Get End Property Public Property sTool As String Get Return m_sTool End Get Set(value As String) m_sTool = value End Set End Property Sub New(sPosition As Integer, sName As String, sTool As String) m_nPosition = sPosition m_sName = sName m_sTool = sTool End Sub End Class Public Class Material Private m_nId As Integer Private m_sName As String Public ReadOnly Property nId As Integer Get Return m_nId End Get End Property Public Property sName As String Get Return m_sName End Get Set(value As String) m_sName = value End Set End Property Sub New(sName As String, MaterialList As ObservableCollection(Of Material)) Dim nMaxId As Integer = 0 For Each Material In MaterialList If Material.nId > nMaxId Then nMaxId = Material.nId End If Next m_nId = nMaxId + 1 m_sName = sName End Sub Sub New(nId As Integer, sName As String) m_nId = nId m_sName = sName End Sub End Class