Imports System.Collections.ObjectModel Imports EgtUILib Public Class CurrentMachine ' Riferimento alla MainWindow Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) ' 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 ' Ritardo tra reset e invio programma per NUM Private m_nResetSendDelay As Integer = 1000 ' 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 ' 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 As String = String.Empty Private m_sCurrDrill As String = String.Empty Private m_sCurrMill As String = String.Empty Private m_sCurrDripSaw As String = String.Empty ' 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 Private m_sCurrDripSawing 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 Friend Enum MountedToolConfigs As Integer SAW = 0 SAWANDAUXTOOL = 1 MANUALTOOLCHANGER = 2 TOOLCHANGER = 3 End Enum ' Massimo numero di utensili su Tc Friend MAX_TC_TOOLS As Integer = 60 ' Massimo numero di utensili su Tc manuale Friend MAX_TCMAN_TOOLS As Integer = 60 #Region "Proprietà che leggono e scrivono i valori anche da o su file ini" Friend ReadOnly Property sMachineName As String Get Return m_sMachineName End Get End Property Friend ReadOnly Property sMachDir As String Get Return m_sMachDir End Get End Property Friend ReadOnly Property sMachIniFile As String Get Return m_sMachIniFile End Get End Property Friend ReadOnly Property sIsoFileExt As String Get Return m_sIsoFileExt End Get End Property Friend ReadOnly Property dDeltaC As Double Get Return m_dDeltaC End Get End Property Friend ReadOnly Property nResetSendDelay As Integer Get Return m_nResetSendDelay End Get End Property Friend ReadOnly Property bProdLine As Boolean Get Return m_bProdLine End Get End Property Friend ReadOnly Property sVarProg1 As String Get Return m_sVarProg1 End Get End Property Friend ReadOnly Property nProg1 As Integer Get Return m_nProg1 End Get End Property Friend ReadOnly Property sVarProg2 As String Get Return m_sVarProg2 End Get End Property Friend ReadOnly Property nProg2 As Integer Get Return m_nProg2 End Get End Property Friend ReadOnly Property sLineDataDir As String Get Return m_sLineDataDir End Get End Property Friend ReadOnly Property sVarProjCopy As String Get Return m_sVarProjCopy End Get End Property Friend ReadOnly Property MountedToolConfig As MountedToolConfigs Get Return m_MountedToolConfig End Get End Property Friend ReadOnly Property dMaxSawDiamForVac As Double Get Return m_dMaxSawDiamForVac End Get End Property Friend ReadOnly Property dMaxSawDiamForProbe As Double Get Return m_dMaxSawDiamForProbe End Get End Property Friend 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 Friend ReadOnly Property bSaw As Boolean Get Return m_bSaw End Get End Property Friend ReadOnly Property bDrill As Boolean Get Return m_bDrill End Get End Property Friend ReadOnly Property bMill As Boolean Get Return m_bMill End Get End Property Friend ReadOnly Property bShowToolChanger As Boolean Get Return m_bShowToolChanger End Get End Property Friend ReadOnly Property bShowHeadExit As Boolean Get Return m_bShowHeadExit End Get End Property Friend ReadOnly Property bSawing As Boolean Get Return m_bSawing End Get End Property Friend ReadOnly Property bDrilling As Boolean Get Return m_bDrilling End Get End Property Friend ReadOnly Property bMilling As Boolean Get Return m_bMilling End Get End Property Friend ReadOnly Property bSawRoughing As Boolean Get Return m_bSawRoughing End Get End Property Friend ReadOnly Property bSawFinishing As Boolean Get Return m_bSawFinishing End Get End Property Friend Property sCurrSaw As String Get Return m_sCurrSaw End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRSAW, value, sMachIniFile) Then m_sCurrSaw = value m_MainWindow.m_CurrentProjectPageUC.ToolTxBx.Text = value End If End Set End Property Friend Property sCurrDrill As String Get Return m_sCurrDrill End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRDRILL, value, sMachIniFile) Then m_sCurrDrill = value End If End Set End Property Friend Property sCurrMill As String Get Return m_sCurrMill End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRMILL, value, sMachIniFile) Then m_sCurrMill = value End If End Set End Property Friend Property sCurrDripSaw As String Get Return m_sCurrDripSaw End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRDRIPSAW, value, sMachIniFile) Then m_sCurrDripSaw = value End If End Set End Property Friend 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 Friend 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 Friend 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 Friend 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 Friend 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 Friend 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 Friend Property sCurrDripSawing As String Get Return m_sCurrDripSawing End Get Set(value As String) If WritePrivateProfileString(S_MACH_MACH, K_CURRDRIPSAWING, value, sMachIniFile) Then m_sCurrDripSawing = value End If End Set End Property Friend 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 m_MainWindow.m_CurrentProjectPageUC.AdjustAdditionalTable() End If End Set End Property Friend 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 Friend ReadOnly Property ToolChangerNbr As Integer Get Return m_ToolChangerNbr End Get End Property Friend ReadOnly Property ToolChanger As List(Of ToolChangerPos) Get Return m_ToolChanger End Get End Property Friend 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 Friend 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 Friend ReadOnly Property ManualToolChangerNbr As Integer Get Return m_ManualToolChangerNbr End Get End Property Friend ReadOnly Property ManualToolChanger As List(Of ToolChangerPos) Get Return m_ManualToolChanger End Get End Property Friend 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 Friend 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 Friend ReadOnly Property Materials As ObservableCollection(Of Material) Get Return m_Materials End Get End Property Friend 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 Friend 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 Friend 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 Friend 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 Function SetCurrMatByName(sMatName As String) As Boolean ' Se stringa vuota If String.IsNullOrWhiteSpace(sMatName) Then Return False ' Cerco il nome nella lista dei materiali For Index = 0 To Materials.Count - 1 If String.Compare(Materials(Index).sName, sMatName, True) = 0 Then CurrMat = Materials(Index) End If Next Return False End Function Friend ReadOnly Property bHasRawProbe As Boolean Get Return m_HasRawProbe End Get End Property #End Region Sub New() ' Leggo da file ini nome macchina corrente GetPrivateProfileString(S_MACH, K_CURRMACH, "", m_sMachineName, m_MainWindow.GetIniFile()) ' Impostazione direttorio macchina m_sMachDir = m_MainWindow.GetMachinesRootDir & "\" & sMachineName ' Impostazione path MachIni file m_sMachIniFile = m_MainWindow.GetMachinesRootDir & "\" & sMachineName & "\" & sMachineName & ".ini" ' 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 flag incremento asse C m_dDeltaC = GetPrivateProfileDouble(S_AXES, K_DELTA_C, 0.0, sMachIniFile) ' Leggo ritardo tra reset e send per NUM m_nResetSendDelay = GetPrivateProfileInt(S_NCNUM, K_RESETSENDDELAY, 1000, sMachIniFile) ' Leggo se linea di produzione e parametri relativi m_bProdLine = (GetPrivateProfileInt(S_PRODUCTIONLINE, K_ACTIVE, 0, sMachIniFile) <> 0) If m_bProdLine And Not m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.PROCUCTION_LINE) 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, m_MainWindow.GetMachIniFile()) GetPrivateProfileString(S_PRODUCTIONLINE, K_VARPROG2, "", m_sVarProg2, sMachIniFile) m_nProg2 = GetPrivateProfileInt(S_PRODUCTIONLINE, K_NAMEPROG2, 0, m_MainWindow.GetMachIniFile()) GetPrivateProfileString(S_PRODUCTIONLINE, K_LINEDATADIR, "", m_sLineDataDir, sMachIniFile) GetPrivateProfileString(S_PRODUCTIONLINE, K_VARPROJCOPY, "", m_sVarProjCopy, sMachIniFile) ' 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 m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.ENABLE_MILL) ' 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 m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.ENABLE_MILL) ' 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, sMachIniFile) ' foretto GetPrivateProfileString(S_MACH_MACH, K_CURRDRILL, Nothing, m_sCurrDrill, sMachIniFile) ' fresa GetPrivateProfileString(S_MACH_MACH, K_CURRMILL, Nothing, m_sCurrMill, sMachIniFile) ' lama da sotto GetPrivateProfileString(S_MACH_MACH, K_CURRDRIPSAW, Nothing, m_sCurrDripSaw, 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) ' lama da sotto GetPrivateProfileString(S_MACH_MACH, K_CURRDRIPSAWING, Nothing, m_sCurrDripSawing, 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 Friend 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 Friend 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 Friend 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 Friend 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 Class 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 Friend 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