diff --git a/CAM/CamAuto.vb b/CAM/CamAuto.vb index 8c6f429..58f00fe 100644 --- a/CAM/CamAuto.vb +++ b/CAM/CamAuto.vb @@ -154,6 +154,7 @@ Friend Module CamAuto Return ResetAllMachinings(nWarn) End Function + ' Ricalcola tutte le lavorazioni Friend Function ResetAllMachinings(ByRef nWarn As Integer) As Boolean ' Cancello tutte le lavorazioni EraseMachinings(GDB_ID.NULL) @@ -170,6 +171,7 @@ Friend Module CamAuto Return True End Function + ' Elimina da ogni entità il nome della lavorazione asseganta Friend Function RestoreDef_Machinig(Optional bOnlySideAng As Boolean = True) Dim sSawingTilted As String = m_MainWindow.m_CurrentMachine.sCurrSawingTilted Dim bApplySawingTilted As Boolean = m_MainWindow.m_CurrentMachine.bApplySawingTilted @@ -180,6 +182,11 @@ Friend Module CamAuto Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP) Dim nEntId As Integer = EgtGetFirstInGroup(nIdLayerOutLoop) SetResetDef_Machining(nEntId, sSawingTilted, bApplySawingTilted, bOnlySideAng) + 'nIdLayerOutLoop = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP & ".orig") + 'If nIdLayerOutLoop <> GDB_ID.NULL Then + ' nEntId = EgtGetFirstInGroup(nIdLayerOutLoop) + ' SetResetDef_Machining(nEntId, sSawingTilted, bApplySawingTilted, bOnlySideAng) + 'End If nIdPart = EgtGetNextPart(nIdPart) End While Dim nRawId As Integer = CamAuto.GetCurrentRaw() @@ -189,6 +196,11 @@ Friend Module CamAuto Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP) Dim nEntId As Integer = EgtGetFirstInGroup(nIdLayerOutLoop) SetResetDef_Machining(nEntId, sSawingTilted, bApplySawingTilted, bOnlySideAng) + nIdLayerOutLoop = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP & ".orig") + If nIdLayerOutLoop <> GDB_ID.NULL Then + nEntId = EgtGetFirstInGroup(nIdLayerOutLoop) + SetResetDef_Machining(nEntId, sSawingTilted, bApplySawingTilted, bOnlySideAng) + End If nIdPart = EgtGetNextPartInRawPart(nIdPart) End While Return bOk diff --git a/Constants/ConstMachIni.vb b/Constants/ConstMachIni.vb index 081fbaf..baa38ba 100644 --- a/Constants/ConstMachIni.vb +++ b/Constants/ConstMachIni.vb @@ -12,24 +12,34 @@ Public Const K_SIMULATIONAXESNUM As String = "SimulationAxesNum" Public Const K_L1NAME As String = "L1Name" Public Const K_L1ID As String = "L1Id" + Public Const K_L1TYPE As String = "L1Type" Public Const K_L2NAME As String = "L2Name" Public Const K_L2ID As String = "L2Id" + Public Const K_L2TYPE As String = "L2Type" Public Const K_L3NAME As String = "L3Name" Public Const K_L3ID As String = "L3Id" + Public Const K_L3TYPE As String = "L3Type" Public Const K_R1NAME As String = "R1Name" Public Const K_R1ID As String = "R1Id" + Public Const K_R1TYPE As String = "R1Type" Public Const K_R2NAME As String = "R2Name" Public Const K_R2ID As String = "R2Id" + Public Const K_R2TYPE As String = "R2Type" Public Const K_A6NAME As String = "A6Name" Public Const K_A6ID As String = "A6Id" + Public Const K_A6TYPE As String = "A6Type" Public Const K_A7NAME As String = "A7Name" Public Const K_A7ID As String = "A7Id" + Public Const K_A7TYPE As String = "A7Type" Public Const K_A8NAME As String = "A8Name" Public Const K_A8ID As String = "A8Id" + Public Const K_A8TYPE As String = "A8Type" Public Const K_A9NAME As String = "A9Name" Public Const K_A9ID As String = "A9Id" + Public Const K_A9TYPE As String = "A9Type" Public Const K_A10NAME As String = "A10Name" Public Const K_A10ID As String = "A10Id" + Public Const K_A10TYPE As String = "A10Type" Public Const K_DELTA_C As String = "DeltaC" Public Const K_ININCHES As String = "InInches" Public Const K_CPOS As String = "CPos" diff --git a/DrawImport/SideAngleUc.xaml.vb b/DrawImport/SideAngleUc.xaml.vb index 38506b6..9270d01 100644 --- a/DrawImport/SideAngleUc.xaml.vb +++ b/DrawImport/SideAngleUc.xaml.vb @@ -1465,7 +1465,7 @@ Public Class SideAngleUC EgtSetInfo(CurrEntity.nGeomId, INFO_SIDE_ANGLE, dSideAngle) EgtSetInfo(CurrEntity.nGeomId, INFO_ORIG_SIDE_ANGLE, dSideAngle) Dim sSawingTilted As String = m_MainWindow.m_CurrentMachine.sCurrSawingTilted - If Not String.IsNullOrEmpty(sSawingTilted) Then + If Not String.IsNullOrEmpty(sSawingTilted) And m_MainWindow.m_CurrentMachine.bApplySawingTilted Then EgtSetInfo(CurrEntity.nGeomId, DEF_MACHINING_TILTED, sSawingTilted) End If ' Cancello inclinazione nell'apposito campo info diff --git a/Machine/MachineStatusUC.xaml.vb b/Machine/MachineStatusUC.xaml.vb index 6e47167..76816b7 100644 --- a/Machine/MachineStatusUC.xaml.vb +++ b/Machine/MachineStatusUC.xaml.vb @@ -236,6 +236,10 @@ Public Class MachineStatusUC End Sub Sub DisplayPosition() + Dim nNumDec As Integer = -3 + If m_MainWindow.m_CNCommunication.GetMachineInInches() Then + nNumDec = -4 + End If ' Recupero le posizioni macchina Dim dL1, dL2, dL3, dR1, dR2, dA6, dA7, dA8, dA9, dA10 As Double m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2, dA6, dA7, dA8, dA9, dA10) @@ -247,33 +251,37 @@ Public Class MachineStatusUC dL3 = ptTip.z End If ' Visualizzazione - Axis1TxBx.Text = LenToString(dL1, -3, True) - Axis2TxBx.Text = LenToString(dL2, -3, True) - Axis3TxBx.Text = LenToString(dL3, -3, True) + Axis1TxBx.Text = LenToString(dL1, nNumDec, True) + Axis2TxBx.Text = LenToString(dL2, nNumDec, True) + Axis3TxBx.Text = LenToString(dL3, nNumDec, True) Axis4TxBx.Text = DoubleToString(dR1, -3) Axis5TxBx.Text = DoubleToString(dR2, -3) If m_AxesNumber >= 6 Then Axis6TxBx.Text = DoubleToString(dA6, -3) - If m_AxesNumber >= 7 Then Axis7TxBx.Text = LenToString(dA7, -3, True) - If m_AxesNumber >= 8 Then Axis8TxBx.Text = LenToString(dA8, -3, True) - If m_AxesNumber >= 9 Then Axis9TxBx.Text = LenToString(dA9, -3, True) - If m_AxesNumber >= 10 Then Axis10TxBx.Text = LenToString(dA10, -3, True) + If m_AxesNumber >= 7 Then Axis7TxBx.Text = LenToString(dA7, nNumDec, True) + If m_AxesNumber >= 8 Then Axis8TxBx.Text = LenToString(dA8, nNumDec, True) + If m_AxesNumber >= 9 Then Axis9TxBx.Text = LenToString(dA9, nNumDec, True) + If m_AxesNumber >= 10 Then Axis10TxBx.Text = LenToString(dA10, nNumDec, True) End Sub Sub DisplayPositionDelta() + Dim nNumDec As Integer = -3 + If m_MainWindow.m_CNCommunication.GetMachineInInches() Then + nNumDec = -4 + End If ' Recupero le posizioni macchina Dim dL1, dL2, dL3, dR1, dR2, dA6, dA7, dA8, dA9, dA10 As Double m_MainWindow.m_CNCommunication.GetAxesDeltas(dL1, dL2, dL3, dR1, dR2, dA6, dA7, dA8, dA9, dA10) ' Visualizzazione - DeltaAxis1TxBx.Text = LenToString(dL1, -3, True) - DeltaAxis2TxBx.Text = LenToString(dL2, -3, True) - DeltaAxis3TxBx.Text = LenToString(dL3, -3, True) + DeltaAxis1TxBx.Text = LenToString(dL1, nNumDec, True) + DeltaAxis2TxBx.Text = LenToString(dL2, nNumDec, True) + DeltaAxis3TxBx.Text = LenToString(dL3, nNumDec, True) DeltaAxis4TxBx.Text = DoubleToString(dR1, -3) DeltaAxis5TxBx.Text = DoubleToString(dR2, -3) If m_AxesNumber >= 6 Then DeltaAxis6TxBx.Text = DoubleToString(dA6, -3) - If m_AxesNumber >= 7 Then DeltaAxis7TxBx.Text = LenToString(dA7, -3, True) - If m_AxesNumber >= 8 Then DeltaAxis8TxBx.Text = LenToString(dA8, -3, True) - If m_AxesNumber >= 9 Then DeltaAxis9TxBx.Text = LenToString(dA9, -3, True) - If m_AxesNumber >= 10 Then DeltaAxis10TxBx.Text = LenToString(dA10, -3, True) + If m_AxesNumber >= 7 Then DeltaAxis7TxBx.Text = LenToString(dA7, nNumDec, True) + If m_AxesNumber >= 8 Then DeltaAxis8TxBx.Text = LenToString(dA8, nNumDec, True) + If m_AxesNumber >= 9 Then DeltaAxis9TxBx.Text = LenToString(dA9, nNumDec, True) + If m_AxesNumber >= 10 Then DeltaAxis10TxBx.Text = LenToString(dA10, nNumDec, True) End Sub Sub DisplayFeed() @@ -335,16 +343,16 @@ Public Class MachineStatusUC Sub DisplayActiveMode(Mode As Integer) Select Case Mode - Case 0 - MachineStatusImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("\Resources\MachineStatusImage\Auto.png", UriKind.Relative)) - Case 1 - MachineStatusImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("\Resources\MachineStatusImage\Single.png", UriKind.Relative)) - Case 2 - MachineStatusImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("\Resources\MachineStatusImage\Mdi.png", UriKind.Relative)) - Case 7 - MachineStatusImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("\Resources\MachineStatusImage\Manual.png", UriKind.Relative)) - Case 8 - MachineStatusImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("\Resources\MachineStatusImage\Home.png", UriKind.Relative)) + Case 0 + MachineStatusImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("\Resources\MachineStatusImage\Auto.png", UriKind.Relative)) + Case 1 + MachineStatusImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("\Resources\MachineStatusImage\Single.png", UriKind.Relative)) + Case 2 + MachineStatusImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("\Resources\MachineStatusImage\Mdi.png", UriKind.Relative)) + Case 7 + MachineStatusImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("\Resources\MachineStatusImage\Manual.png", UriKind.Relative)) + Case 8 + MachineStatusImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("\Resources\MachineStatusImage\Home.png", UriKind.Relative)) End Select End Sub diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index e87642a..b6e0023 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -62,5 +62,5 @@ Imports System.Windows ' by using the '*' as shown below: ' - - + + diff --git a/NcComm/CNCommunication.vb b/NcComm/CNCommunication.vb index 86d0bc7..5fd589a 100644 --- a/NcComm/CNCommunication.vb +++ b/NcComm/CNCommunication.vb @@ -73,6 +73,11 @@ Public Class CNCommunication Private m_nA10 As Integer = 9 Private m_bInInches As Boolean = False ' Solo per comandi diretti (assi sempre in mm) + ' NUVO! ver. 2.7h2: m_sA1=nome (in grafica), tipo (Linear/Rotary), m_nA1=indice (nel vettore CN) + Private m_ListAxesData As New List(Of AxisData) + Public Function GetListAxesData() As List(Of AxisData) + Return m_ListAxesData + End Function Friend Sub CNCommunication_Initialization() @@ -164,83 +169,149 @@ Public Class CNCommunication End If End Sub +#Region "ver 2.7h2 NUOVA LETTURA ASSI" + + ' Dal nome della chiave cerca di estrarre la definizione del tipo di asse + Private Sub GetDefaultTypeAxis(sKeyAxis As String, ByRef bIsLinear As Boolean) + ' non è stato definito il tipo asse: cerco di assegnarlo di default + Dim sMsg As String = String.Empty + If sKeyAxis.StartsWith("L") Then + sMsg = "Linear" + bIsLinear = True + ElseIf sKeyAxis.StartsWith("R") Then + sMsg = "Rotary" + bIsLinear = False + Else + sMsg = "Linear" + bIsLinear = True + End If + EgtOutLog("In file *.ini machine in section '[Axes]' axis type '" & sKeyAxis & "' has been defined by default as " & sMsg) + End Sub + + ' Legge da file *.ini macchina la definizione del tipo di asse + Private Function GetTypeAxis(sKeyAxis As String) + Dim bIsLinear As Boolean = True + Dim sValue As String = String.Empty + GetPrivateProfileString(S_AXES, sKeyAxis, "", sValue, m_MainWindow.GetMachIniFile()) + If Not String.IsNullOrEmpty(sValue) Then + If sValue.ToLower = "linear" Then + bIsLinear = True + ElseIf sValue.ToLower = "rotary" Then + bIsLinear = False + Else + GetDefaultTypeAxis(sKeyAxis, bIsLinear) + End If + Else + GetDefaultTypeAxis(sKeyAxis, bIsLinear) + End If + ' Ritorno il booleano che definisce il tipo di asse che è stato letto + Return bIsLinear + End Function + + ' Imposto il vettore dei tipi asse macchina + Private Sub SetArrayAxisIsLinear() + For Each Item As AxisData In m_ListAxesData + m_CN.b_axis_is_linear(Item.nIndex) = Item.bIsLinear + Next + End Sub + + ' Legge da file *.ini macchina il nome dell'asse, se non esiste impone il valore di default e restituisce FALSE + Private Function SetNameAxis(sKeyAxis As String, sAxisDefaultName As String, ByRef sAxisName As String) As Boolean + Dim bAxisExist As Boolean = False + Dim sValue As String = String.Empty + bAxisExist = (GetPrivateProfileString(S_AXES, sKeyAxis, "", sValue, m_MainWindow.GetMachIniFile()) > 0) + If String.IsNullOrEmpty(sValue) Then + sAxisName = sAxisDefaultName + Else + sAxisName = sValue + End If + Return bAxisExist + End Function + + Private Function SetIndexAxis(sKeyAxis As String, nAxisDefaultIndex As Integer, ByRef nAxisIndex As String) As Boolean + Dim bAxisExist As Boolean = True + nAxisIndex = GetPrivateProfileInt(S_AXES, sKeyAxis, nAxisDefaultIndex, m_MainWindow.GetMachIniFile()) + If Not m_CN.VerifyAxis(nAxisIndex) Then + nAxisIndex = -1 + m_bAxesOk = False + EgtOutLog("Error on " & sKeyAxis) + bAxisExist = False + End If + Return bAxisExist + End Function + Private Sub ReadAxesData() ' Nomi e indici degli assi macchina: definisco il nome degli assi da satampare nella pagina MachineStatusUC m_bAxesOk = True - GetPrivateProfileString(S_AXES, K_L1NAME, "X", m_sA1, m_MainWindow.GetMachIniFile()) - m_nA1 = GetPrivateProfileInt(S_AXES, K_L1ID, 0, m_MainWindow.GetMachIniFile()) - If Not m_CN.VerifyAxis(m_nA1) Then - m_nA1 = -1 - m_bAxesOk = False - EgtOutLog("Error on L1ID") + Dim bAxisExist As Boolean = False + bAxisExist = SetNameAxis(K_L1NAME, "X", m_sA1) + If SetIndexAxis(K_L1ID, 0, m_nA1) Then + ' aggiungo l'asse alla lista degli assi + If bAxisExist Then m_ListAxesData.Add(New AxisData(GetTypeAxis(K_L1TYPE), m_sA1, m_nA1)) End If - GetPrivateProfileString(S_AXES, K_L2NAME, "Y", m_sA2, m_MainWindow.GetMachIniFile()) - m_nA2 = GetPrivateProfileInt(S_AXES, K_L2ID, 1, m_MainWindow.GetMachIniFile()) - If Not m_CN.VerifyAxis(m_nA2) Then - m_nA2 = -1 - m_bAxesOk = False - EgtOutLog("Error on L2ID") + + bAxisExist = SetNameAxis(K_L2NAME, "Y", m_sA2) + If SetIndexAxis(K_L2ID, 1, m_nA2) Then + ' aggiungo l'asse alla lista degli assi + If bAxisExist Then m_ListAxesData.Add(New AxisData(GetTypeAxis(K_L2TYPE), m_sA2, m_nA2)) End If - GetPrivateProfileString(S_AXES, K_L3NAME, "Z", m_sA3, m_MainWindow.GetMachIniFile()) - m_nA3 = GetPrivateProfileInt(S_AXES, K_L3ID, 2, m_MainWindow.GetMachIniFile()) - If Not m_CN.VerifyAxis(m_nA3) Then - m_nA3 = -1 - m_bAxesOk = False - EgtOutLog("Error on L3ID") + + bAxisExist = SetNameAxis(K_L3NAME, "Z", m_sA3) + If SetIndexAxis(K_L3ID, 2, m_nA3) Then + ' aggiungo l'asse alla lista degli assi + If bAxisExist Then m_ListAxesData.Add(New AxisData(GetTypeAxis(K_L3TYPE), m_sA3, m_nA3)) End If - GetPrivateProfileString(S_AXES, K_R1NAME, "C", m_sA4, m_MainWindow.GetMachIniFile()) - m_nA4 = GetPrivateProfileInt(S_AXES, K_R1ID, 8, m_MainWindow.GetMachIniFile()) - If Not m_CN.VerifyAxis(m_nA4) Then - m_nA4 = -1 - m_bAxesOk = False - EgtOutLog("Error on R1ID") + + bAxisExist = SetNameAxis(K_R1NAME, "C", m_sA4) + If SetIndexAxis(K_R1ID, 8, m_nA4) Then + ' aggiungo l'asse alla lista degli assi + If bAxisExist Then m_ListAxesData.Add(New AxisData(GetTypeAxis(K_R1TYPE), m_sA4, m_nA4)) End If - GetPrivateProfileString(S_AXES, K_R2NAME, "B", m_sA5, m_MainWindow.GetMachIniFile()) - m_nA5 = GetPrivateProfileInt(S_AXES, K_R2ID, 7, m_MainWindow.GetMachIniFile()) - If Not m_CN.VerifyAxis(m_nA5) Then - m_nA5 = -1 - m_bAxesOk = False - EgtOutLog("Error on R2ID") + + bAxisExist = SetNameAxis(K_R2NAME, "B", m_sA5) + If SetIndexAxis(K_R2ID, 7, m_nA5) Then + ' aggiungo l'asse alla lista degli assi + If bAxisExist Then m_ListAxesData.Add(New AxisData(GetTypeAxis(K_R2TYPE), m_sA5, m_nA5)) End If - GetPrivateProfileString(S_AXES, K_A6NAME, "A", m_sA6, m_MainWindow.GetMachIniFile()) - m_nA6 = GetPrivateProfileInt(S_AXES, K_A6ID, 6, m_MainWindow.GetMachIniFile()) - If Not m_CN.VerifyAxis(m_nA6) Then - m_nA6 = -1 - m_bAxesOk = False - EgtOutLog("Error on A6ID") + + bAxisExist = SetNameAxis(K_A6NAME, "A", m_sA6) + If SetIndexAxis(K_A6ID, 6, m_nA6) Then + ' aggiungo l'asse alla lista degli assi + If bAxisExist Then m_ListAxesData.Add(New AxisData(GetTypeAxis(K_A6TYPE), m_sA6, m_nA6)) End If - GetPrivateProfileString(S_AXES, K_A7NAME, "U", m_sA7, m_MainWindow.GetMachIniFile()) - m_nA7 = GetPrivateProfileInt(S_AXES, K_A7ID, 3, m_MainWindow.GetMachIniFile()) - If Not m_CN.VerifyAxis(m_nA7) Then - m_nA7 = -1 - m_bAxesOk = False - EgtOutLog("Error on A7ID") + + bAxisExist = SetNameAxis(K_A7NAME, "U", m_sA7) + If SetIndexAxis(K_A7ID, 3, m_nA7) Then + ' aggiungo l'asse alla lista degli assi + If bAxisExist Then m_ListAxesData.Add(New AxisData(GetTypeAxis(K_A7TYPE), m_sA7, m_nA7)) End If - GetPrivateProfileString(S_AXES, K_A8NAME, "V", m_sA8, m_MainWindow.GetMachIniFile()) - m_nA8 = GetPrivateProfileInt(S_AXES, K_A8ID, 4, m_MainWindow.GetMachIniFile()) - If Not m_CN.VerifyAxis(m_nA8) Then - m_nA8 = -1 - m_bAxesOk = False - EgtOutLog("Error on A8ID") + + bAxisExist = SetNameAxis(K_A8NAME, "V", m_sA8) + If SetIndexAxis(K_A8ID, 4, m_nA8) Then + ' aggiungo l'asse alla lista degli assi + If bAxisExist Then m_ListAxesData.Add(New AxisData(GetTypeAxis(K_A8TYPE), m_sA8, m_nA8)) End If - GetPrivateProfileString(S_AXES, K_A9NAME, "W", m_sA9, m_MainWindow.GetMachIniFile()) - m_nA9 = GetPrivateProfileInt(S_AXES, K_A9ID, 5, m_MainWindow.GetMachIniFile()) - If Not m_CN.VerifyAxis(m_nA9) Then - m_nA9 = -1 - m_bAxesOk = False - EgtOutLog("Error on A9ID") + + bAxisExist = SetNameAxis(K_A9NAME, "W", m_sA9) + If SetIndexAxis(K_A9ID, 5, m_nA9) Then + ' aggiungo l'asse alla lista degli assi + If bAxisExist Then m_ListAxesData.Add(New AxisData(GetTypeAxis(K_A9TYPE), m_sA9, m_nA9)) End If - GetPrivateProfileString(S_AXES, K_A10NAME, "P", m_sA10, m_MainWindow.GetMachIniFile()) - m_nA10 = GetPrivateProfileInt(S_AXES, K_A10ID, 5, m_MainWindow.GetMachIniFile()) - If Not m_CN.VerifyAxis(m_nA10) Then - m_nA10 = -1 - m_bAxesOk = False - EgtOutLog("Error on A10ID") + + bAxisExist = SetNameAxis(K_A10NAME, "P", m_sA10) + If SetIndexAxis(K_A10ID, 5, m_nA10) Then + ' aggiungo l'asse alla lista degli assi + If bAxisExist Then m_ListAxesData.Add(New AxisData(GetTypeAxis(K_A10TYPE), m_sA10, m_nA10)) End If + ' Unità di misura m_bInInches = (GetPrivateProfileInt(S_AXES, K_ININCHES, 0, m_MainWindow.GetMachIniFile()) <> 0) + ' Crea il vettore che ad ogni posizione definisce il tipo di asse assegnato + SetArrayAxisIsLinear() End Sub +#End Region ' ver 2.7h2 nuova gestione + Private Sub KillSimensCom(sProcessName As String) Dim sAppName As String = Path.GetFileNameWithoutExtension(sProcessName) Dim pList() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses @@ -1808,4 +1879,16 @@ Public Class IndexArrayToBit m_sNameVar = NameVar End Sub +End Class + +' Utlizzata per definire la lista degli assi impostati in macchina +Public Class AxisData + Public bIsLinear As Boolean + Public sName As String + Public nIndex As Integer + Sub New(_bIsLinear As Boolean, _sName As String, _nINdex As Integer) + bIsLinear = _bIsLinear + sName = _sName + nIndex = _nINdex + End Sub End Class \ No newline at end of file diff --git a/NcComm/CN_generico.vb b/NcComm/CN_generico.vb index f7b8ea0..c101733 100644 --- a/NcComm/CN_generico.vb +++ b/NcComm/CN_generico.vb @@ -131,6 +131,8 @@ Public MustInherit Class CN_generico Public d_axis_position(MAX_AXES) As Double Public d_axis_delta(MAX_AXES) As Double Public b_axis_valid(MAX_AXES) As Boolean + ' ver. 2.7h2: gestione del tipo di asse per eseguire una corretta conversione dei dati inch/mm + Public b_axis_is_linear(MAX_AXES) As Boolean Public d_DReadELS_value As Double Public n_DReadELS_handle As Short diff --git a/NcComm/M_Fanuc_hi.vb b/NcComm/M_Fanuc_hi.vb index e18ac75..7a89c24 100644 --- a/NcComm/M_Fanuc_hi.vb +++ b/NcComm/M_Fanuc_hi.vb @@ -6,47 +6,49 @@ Imports EgtUILib Namespace Fanuc - Public Class Fanuc - Inherits CN_generico + Public Class Fanuc + Inherits CN_generico + 'Riferimento alla MainWindow + Private m_MainWindow As MainWindow = Application.Current.MainWindow #Region " Structures" - Public Structure NC_var_Int_str_Type - Dim index As Short - Dim offset As Short - Dim address As String - End Structure - Public Structure NC_var_Bit_str_Type - Dim index As Short - Dim offset As Short - Dim bit_no As Short - Dim address As String - End Structure + Public Structure NC_var_Int_str_Type + Dim index As Short + Dim offset As Short + Dim address As String + End Structure + Public Structure NC_var_Bit_str_Type + Dim index As Short + Dim offset As Short + Dim bit_no As Short + Dim address As String + End Structure #End Region - Const A_AXIS As Short = 6 + Const A_AXIS As Short = 6 - Const Vmminch As Double = 1000.0 - Const NumCifreDecP4 As Double = 1000.0 + Const Vmminch As Double = 1000.0 + Const NumCifreDecP4 As Double = 1000.0 - Const MAX_NC_VAR As Short = 100 + Const MAX_NC_VAR As Short = 100 #Region " Variabili " - ' Private aTimer As System.Timers.Timer + ' Private aTimer As System.Timers.Timer - Private nCount As Integer = 0 - Private b_busy As Boolean = False - Private b_OM_pos As Boolean = True + Private nCount As Integer = 0 + Private b_busy As Boolean = False + Private b_OM_pos As Boolean = True - Private Nc_var_int(MAX_NC_VAR) As NC_var_Int_str_Type - Private Nc_var_bit(MAX_NC_VAR) As NC_var_Bit_str_Type + Private Nc_var_int(MAX_NC_VAR) As NC_var_Int_str_Type + Private Nc_var_bit(MAX_NC_VAR) As NC_var_Bit_str_Type - Private n_Nc_var_int_defined As Short - Private n_Nc_var_bit_defined As Short + Private n_Nc_var_int_defined As Short + Private n_Nc_var_bit_defined As Short - Private m_CnDataVar_Index(NUM_DATA) As Integer - Private m_nCnDataVarNum As Integer = 0 + Private m_CnDataVar_Index(NUM_DATA) As Integer + Private m_nCnDataVarNum As Integer = 0 #End Region @@ -56,17 +58,17 @@ Namespace Fanuc #Region " Constructor" - Sub New() - n_state = 0 - sz_NC_error_messages = New List(Of String) - End Sub + Sub New() + n_state = 0 + sz_NC_error_messages = New List(Of String) + End Sub #End Region #Region " PRIVATE DA FARE !!" - Function timer_read_var() As Int16 + Function timer_read_var() As Int16 - Dim nret As Int16 = -1 + Dim nret As Int16 = -1 #If False Then ' ' alla brutta de dios vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv @@ -97,711 +99,711 @@ Namespace Fanuc ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #End If - Call Read_Nc_var_structures() + Call Read_Nc_var_structures() - Return nret + Return nret - End Function + End Function - Private Function set_NC_mode(n_mode As Integer) As Int16 - Dim nret As Integer = -1 - ' Nicola: 29/03/2023 - ' - ' trascodifica !!!!! da mettere anche nella SET MODE !!!!! - ' - Select Case n_mode + Private Function set_NC_mode(n_mode As Integer) As Int16 + Dim nret As Integer = -1 + ' Nicola: 29/03/2023 + ' + ' trascodifica !!!!! da mettere anche nella SET MODE !!!!! + ' + Select Case n_mode - Case 0 ' Auto - n_mode = 1 ' NUM dice 2 per Auto + Case 0 ' Auto + n_mode = 1 ' NUM dice 2 per Auto - Case 1 ' EDIT - n_mode = 3 ' NUM dice .. ? + Case 1 ' EDIT + n_mode = 3 ' NUM dice .. ? - Case 2 ' MDI - n_mode = 0 ' NUM dice 2 per MDI + Case 2 ' MDI + n_mode = 0 ' NUM dice 2 per MDI - Case 7 ' JOG-Manual - n_mode = 5 ' NUM dice 2 per Manual + Case 7 ' JOG-Manual + n_mode = 5 ' NUM dice 2 per Manual - Case Else - n_mode = -99 + Case Else + n_mode = -99 - End Select + End Select - Dim bret As Boolean = NC_write_var_short(s_addr_set_nc_mode, CShort(n_mode)) + Dim bret As Boolean = NC_write_var_short(s_addr_set_nc_mode, CShort(n_mode)) - If Not bret Then - EgtOutLog("Error in set_NC_mode(" & n_mode.ToString() & ")") - Else - nret = 0 - End If + If Not bret Then + EgtOutLog("Error in set_NC_mode(" & n_mode.ToString() & ")") + Else + nret = 0 + End If - Return nret + Return nret - 'nret = WriteObjectVarious2(n_portNC, Mode, n_mode) ' 0 AUTO 1 SEQUENZIALE 2 IMD 7 MANUALE + 'nret = WriteObjectVarious2(n_portNC, Mode, n_mode) ' 0 AUTO 1 SEQUENZIALE 2 IMD 7 MANUALE - 'If nret <> 0 Then - ' EgtOutLog("Error in set_NC_mode(" & n_mode.ToString() & ") : " & nret.ToString()) - 'End If + 'If nret <> 0 Then + ' EgtOutLog("Error in set_NC_mode(" & n_mode.ToString() & ") : " & nret.ToString()) + 'End If - End Function + End Function - Private Function set_MDI_command(sz_command As String) As Int16 - Dim b_ret As Boolean - Dim n_ret As Short + Private Function set_MDI_command(sz_command As String) As Int16 + Dim b_ret As Boolean + Dim n_ret As Short - ' !!!!! SET THE NC TO THE MDI MODE + ' !!!!! SET THE NC TO THE MDI MODE - b_ret = F_MDI_write_program(sz_command) ' create the command + b_ret = F_MDI_write_program(sz_command) ' create the command - If b_ret Then + If b_ret Then - ' START CYCLE-2 + ' START CYCLE-2 - n_ret = F_cycle_start() + n_ret = F_cycle_start() - If b_ret Then - Return 0 - Else - EgtOutLog(" set_MDI_command 3 " & M_Fanuc.sz_Err_Msg) - Return -3 - End If + If b_ret Then + Return 0 + Else + EgtOutLog(" set_MDI_command 3 " & M_Fanuc.sz_Err_Msg) + Return -3 + End If - Else - EgtOutLog(" set_MDI_command 2 " & M_Fanuc.sz_Err_Msg) - Return -2 - End If + Else + EgtOutLog(" set_MDI_command 2 " & M_Fanuc.sz_Err_Msg) + Return -2 + End If - End Function + End Function #End Region #Region " Metodi pubblici DA FARE !!!" - Public Overrides Sub ReadEls_Add_Parameter(sz_var As String, n_par As Short) - Read_Variable(sz_var, CN_generico.Type.TDouble, 0, 0, d_DReadELS_value, "") - n_DReadELS_handle = n_par - End Sub - ' - ' call DVariables_WriteVariables("E80000;E80001" , "1;2" ) - ' - Public Overrides Sub DVariables_WriteVariables(sz_parameters As String, sz_values As String) - ' num vecchio erano vuote - End Sub + Public Overrides Sub ReadEls_Add_Parameter(sz_var As String, n_par As Short) + Read_Variable(sz_var, CN_generico.Type.TDouble, 0, 0, d_DReadELS_value, "") + n_DReadELS_handle = n_par + End Sub + ' + ' call DVariables_WriteVariables("E80000;E80001" , "1;2" ) + ' + Public Overrides Sub DVariables_WriteVariables(sz_parameters As String, sz_values As String) + ' num vecchio erano vuote + End Sub - Public Overrides Sub DVariables_WriteVariables2(sz_parameters As String, sz_values As String) - DVariables_WriteVariables3(sz_parameters, CN_generico.Type.TDouble, 0, 0, sz_values, "") - ' num vecchio erano vuote - End Sub - ' - ' Write var - ' - Public Overrides Function Write_var_1(sz_par As String, lvalue As Long) As Int16 + Public Overrides Sub DVariables_WriteVariables2(sz_parameters As String, sz_values As String) + DVariables_WriteVariables3(sz_parameters, CN_generico.Type.TDouble, 0, 0, sz_values, "") + ' num vecchio erano vuote + End Sub + ' + ' Write var + ' + Public Overrides Function Write_var_1(sz_par As String, lvalue As Long) As Int16 - Dim nret As Int16 = -1 + Dim nret As Int16 = -1 - Return nret + Return nret - End Function - ' - ' MDI command - ' - Public Overrides Function MDI_command() As Short + End Function + ' + ' MDI command + ' + Public Overrides Function MDI_command() As Short - Dim nret As Int16 = set_MDI_command(sz_ManualDataInput) + Dim nret As Int16 = set_MDI_command(sz_ManualDataInput) - If nret <> 0 Then - EgtOutLog("Error Execute MDI Command :" & nret.ToString()) - End If + If nret <> 0 Then + EgtOutLog("Error Execute MDI Command :" & nret.ToString()) + End If - Return nret + Return nret - End Function - ' - ' Set Feed Hold - ' - Public Overrides Function DGeneralFunctions_FeedHold() As Int16 + End Function + ' + ' Set Feed Hold + ' + Public Overrides Function DGeneralFunctions_FeedHold() As Int16 - Dim nret As Int16 = -1 + Dim nret As Int16 = -1 - If NC_pulse_bit(s_addr_feedhold) Then - nret = 0 - End If + If NC_pulse_bit(s_addr_feedhold) Then + nret = 0 + End If - Return nret + Return nret - End Function - ' - ' Set NC mode - ' - Public Overrides Function DGeneralFunctions_WriteCncMode(nmode As Short) As Int16 + End Function + ' + ' Set NC mode + ' + Public Overrides Function DGeneralFunctions_WriteCncMode(nmode As Short) As Int16 - ' Non controllare global_state, lo fa già la set_NC_mode - Return set_NC_mode(nmode) + ' Non controllare global_state, lo fa già la set_NC_mode + Return set_NC_mode(nmode) - End Function - ' - ' is G24 active ? - ' - Public Overrides Function Is_G24_active() As Boolean + End Function + ' + ' is G24 active ? + ' + Public Overrides Function Is_G24_active() As Boolean - ' leggo lo stato di una variabile caricata dall'elenco NcData del file ini macchina - Return b5AxesActive + ' leggo lo stato di una variabile caricata dall'elenco NcData del file ini macchina + Return b5AxesActive - End Function + End Function #End Region #Region " Metodi pubblici FATTI" - Public Overrides Function Init() As Boolean + Public Overrides Function Init() As Boolean - Dim sz_tokens() As String, sz_temp As String, n_temp As Short + Dim sz_tokens() As String, sz_temp As String, n_temp As Short - n_state = 0 + n_state = 0 - ' Stringhe valide : "SIM;IN;HSSB" o "OK;MM;ET;192.168.1.139;8139;false;c:\partprg" + ' Stringhe valide : "SIM;IN;HSSB" o "OK;MM;ET;192.168.1.139;8139;false;c:\partprg" - sz_tokens = m_szCnDataVar(CnData.Comm).Split(";") + sz_tokens = m_szCnDataVar(CnData.Comm).Split(";") - M_Fanuc.bSimulation = False - sz_temp = Trim(sz_tokens(0)).ToUpper - If sz_temp.StartsWith("SI") Then bSimulation = True + M_Fanuc.bSimulation = False + sz_temp = Trim(sz_tokens(0)).ToUpper + If sz_temp.StartsWith("SI") Then bSimulation = True - M_Fanuc.b_machine_in_inches = False - sz_temp = Trim(sz_tokens(1)).ToUpper - If sz_temp.StartsWith("IN") Then M_Fanuc.b_machine_in_inches = True + M_Fanuc.b_machine_in_inches = False + sz_temp = Trim(sz_tokens(1)).ToUpper + If sz_temp.StartsWith("IN") Then M_Fanuc.b_machine_in_inches = True - M_Fanuc.cnc_info.Node_number = 0 - M_Fanuc.cnc_info.Handle = 0 - M_Fanuc.cnc_info.ConnectionStatus = CNC_Connection_Status_Type.NOT_CONNECTED + M_Fanuc.cnc_info.Node_number = 0 + M_Fanuc.cnc_info.Handle = 0 + M_Fanuc.cnc_info.ConnectionStatus = CNC_Connection_Status_Type.NOT_CONNECTED - ' cnc_info.ConnectionType = M_fanuc.CNC_Connection_Type.Ethernet - ' cnc_info.IPAddress = "192.168.1.10" - ' cnc_info.Port = 8193 + ' cnc_info.ConnectionType = M_fanuc.CNC_Connection_Type.Ethernet + ' cnc_info.IPAddress = "192.168.1.10" + ' cnc_info.Port = 8193 - sz_temp = Trim(sz_tokens(2)).ToUpper + sz_temp = Trim(sz_tokens(2)).ToUpper - If sz_temp.StartsWith("ET") Then - M_Fanuc.cnc_info.ConnectionType = CNC_Connection_Type.Ethernet - M_Fanuc.cnc_info.IPAddress = sz_tokens(3) - If Short.TryParse(sz_tokens(4), n_temp) Then - M_Fanuc.cnc_info.Port = n_temp - End If + If sz_temp.StartsWith("ET") Then + M_Fanuc.cnc_info.ConnectionType = CNC_Connection_Type.Ethernet + M_Fanuc.cnc_info.IPAddress = sz_tokens(3) + If Short.TryParse(sz_tokens(4), n_temp) Then + M_Fanuc.cnc_info.Port = n_temp + End If - Else - M_Fanuc.cnc_info.ConnectionType = CNC_Connection_Type.HSSB - End If + Else + M_Fanuc.cnc_info.ConnectionType = CNC_Connection_Type.HSSB + End If - Dim nret As Integer = M_Fanuc.NC_connect(M_Fanuc.cnc_info) - If nret <> Focas1.EW_OK Then Return False + Dim nret As Integer = M_Fanuc.NC_connect(M_Fanuc.cnc_info) + If nret <> Focas1.EW_OK Then Return False - n_state = 2 + n_state = 2 - ' Create a timer and set an half second interval. - ' aTimer = New System.Timers.Timer() + ' Create a timer and set an half second interval. + ' aTimer = New System.Timers.Timer() - Dim nRefresh As Integer = 200 - Dim nTemp As Integer - If Integer.TryParse(m_szCnDataVar(CnData.Refresh), nTemp) Then - nRefresh = nTemp - End If + Dim nRefresh As Integer = 200 + Dim nTemp As Integer + If Integer.TryParse(m_szCnDataVar(CnData.Refresh), nTemp) Then + nRefresh = nTemp + End If - ' aTimer.Interval = nRefresh + ' aTimer.Interval = nRefresh - ' Hook up the Elapsed event for the timer. - ' AddHandler aTimer.Elapsed, AddressOf OnTimedEvent + ' Hook up the Elapsed event for the timer. + ' AddHandler aTimer.Elapsed, AddressOf OnTimedEvent - ' aTimer.AutoReset = True ' Have the timer fire repeated events (true is the default) + ' aTimer.AutoReset = True ' Have the timer fire repeated events (true is the default) - ' aTimer.Enabled = True ' Start the timer + ' aTimer.Enabled = True ' Start the timer - For n As Integer = 0 To 7 - b_axis_valid(n) = True - Next + For n As Integer = 0 To 7 + b_axis_valid(n) = True + Next - Call Init_NC_var_structures() + Call Init_NC_var_structures() - Return n_state >= 2 + Return n_state >= 2 - End Function + End Function - Public Overrides Function Stop_Connection() As Boolean + Public Overrides Function Stop_Connection() As Boolean - Dim msga As String + Dim msga As String - ' aTimer.Stop() + ' aTimer.Stop() - Dim nRet As Short = M_Fanuc.NC_disconnect() + Dim nRet As Short = M_Fanuc.NC_disconnect() - If nRet <> 0 Then - msga = "Error in NC_disconnect : " & nRet.ToString - ' EgtOutLog(msga) - End If + If nRet <> 0 Then + msga = "Error in NC_disconnect : " & nRet.ToString + ' EgtOutLog(msga) + End If - Return True + Return True - End Function - ' - ' Set DPOsition Mode OP/OM - ' - Public Overrides Sub set_OP_OM(n As Short) + End Function + ' + ' Set DPOsition Mode OP/OM + ' + Public Overrides Sub set_OP_OM(n As Short) - b_OM_pos = (n = 0) + b_OM_pos = (n = 0) - End Sub - ' - ' da PC a CN - ' - Public Overrides Function Download_NC_prog(sz_PC_filename As String, sz_NC_filename As String) As Int16 + End Sub + ' + ' da PC a CN + ' + Public Overrides Function Download_NC_prog(sz_PC_filename As String, sz_NC_filename As String) As Int16 - Dim b_ret As Boolean, n_ret As Short = -99 + Dim b_ret As Boolean, n_ret As Short = -99 - b_ret = M_Fanuc.Send_file_to_nc(sz_PC_filename, "", sz_NC_filename) + b_ret = M_Fanuc.Send_file_to_nc(sz_PC_filename, "", sz_NC_filename) - If b_ret Then Return 0 + If b_ret Then Return 0 - Return n_ret + Return n_ret - End Function - ' - ' da CN a pc - ' - Public Overrides Function Upload_NC_prog(sz_PC_filename As String, sz_NC_filename As String) As Int16 + End Function + ' + ' da CN a pc + ' + Public Overrides Function Upload_NC_prog(sz_PC_filename As String, sz_NC_filename As String) As Int16 - Dim b_ret As Boolean, n_ret As Short = -99 + Dim b_ret As Boolean, n_ret As Short = -99 - b_ret = F_Receive_Prg(sz_PC_filename, sz_NC_filename) + b_ret = F_Receive_Prg(sz_PC_filename, sz_NC_filename) - If b_ret Then Return 0 + If b_ret Then Return 0 - Return n_ret + Return n_ret - End Function - ' - ' delete NC file - ' - Public Overrides Function Delete_NC_prog(sz_NC_filename As String) As Int16 + End Function + ' + ' delete NC file + ' + Public Overrides Function Delete_NC_prog(sz_NC_filename As String) As Int16 - Dim b_ret As Boolean, n_ret As Short = -99 + Dim b_ret As Boolean, n_ret As Short = -99 - b_ret = F_Delete_Prg(sz_NC_filename) + b_ret = F_Delete_Prg(sz_NC_filename) - If b_ret Then Return 0 + If b_ret Then Return 0 - Return n_ret + Return n_ret - End Function - ' - ' Activate program - ' returns 0 = OK ; > 0 error - ' - Public Overrides Function ActivateProgram(n_part_program As Integer) As Int16 + End Function + ' + ' Activate program + ' returns 0 = OK ; > 0 error + ' + Public Overrides Function ActivateProgram(n_part_program As Integer) As Int16 - Dim nret As Int16 = -1 + Dim nret As Int16 = -1 - If M_Fanuc.F_Select_Prg(n_part_program.ToString) Then Return Focas1.EW_OK + If M_Fanuc.F_Select_Prg(n_part_program.ToString) Then Return Focas1.EW_OK - 'If nret <> 0 Then - ' EgtOutLog("Error in Activate program : " & nret.ToString()) - 'End If + 'If nret <> 0 Then + ' EgtOutLog("Error in Activate program : " & nret.ToString()) + 'End If - Return nret + Return nret - End Function - ' - ' Set Cycle Start - ' - Public Overrides Function DGeneralFunctions_CycleStart() As Int16 + End Function + ' + ' Set Cycle Start + ' + Public Overrides Function DGeneralFunctions_CycleStart() As Int16 - Dim nret As Int16 = -1 + Dim nret As Int16 = -1 - If M_Fanuc.F_cycle_start() Then Return Focas1.EW_OK + If M_Fanuc.F_cycle_start() Then Return Focas1.EW_OK - Return nret + Return nret - End Function - ' - ' Set NC Reset - ' - Public Overrides Function DGeneralFunctions_Reset() As Int16 - Dim nret As Int16 = -1 + End Function + ' + ' Set NC Reset + ' + Public Overrides Function DGeneralFunctions_Reset() As Int16 + Dim nret As Int16 = -1 - If M_Fanuc.F_reset() Then Return Focas1.EW_OK + If M_Fanuc.F_reset() Then Return Focas1.EW_OK - Return nret + Return nret - End Function - ' - ' Read active mode - ' - Public Overrides Function read_active_mode() As Int16 + End Function + ' + ' Read active mode + ' + Public Overrides Function read_active_mode() As Int16 - Dim n_status As Short + Dim n_status As Short - If M_Fanuc.F_NC_status(n_status) Then + If M_Fanuc.F_NC_status(n_status) Then - ' - ' trascodifica !!!!! da mettere anche nella SET MODE !!!!! - ' + ' + ' trascodifica !!!!! da mettere anche nella SET MODE !!!!! + ' - Return Trascodifica_nc_mode(n_status) + Return Trascodifica_nc_mode(n_status) - Else - ' !! msg errore - Return -99 - End If + Else + ' !! msg errore + Return -99 + End If - End Function + End Function - Private Function Trascodifica_nc_mode(n_status As Short) As Int16 + Private Function Trascodifica_nc_mode(n_status As Short) As Int16 - Select Case n_status + Select Case n_status - Case 0 ' MDI - Return 2 ' NUM dice 2 per MDI + Case 0 ' MDI + Return 2 ' NUM dice 2 per MDI - Case 1 ' Auto - Return 0 ' NUM dice 2 per Auto + Case 1 ' Auto + Return 0 ' NUM dice 2 per Auto - Case 3 ' EDIT - Return 1 ' NUM dice 2 per Single + Case 3 ' EDIT + Return 1 ' NUM dice 2 per Single - Case 5 ' JOG-Manual - Return 7 ' NUM dice 2 per Manual + Case 5 ' JOG-Manual + Return 7 ' NUM dice 2 per Manual - Case Else - Return -99 + Case Else + Return -99 - End Select + End Select - End Function + End Function - Public Overrides Sub DVariables_WriteVariables3(szVarAddr As String, ParType As Short, nVarValue As Integer, lVarValue As Long, dVarValue As Double, sVarValue As String) + Public Overrides Sub DVariables_WriteVariables3(szVarAddr As String, ParType As Short, nVarValue As Integer, lVarValue As Long, dVarValue As Double, sVarValue As String) - Dim sz_temp As String, n_addr As Integer, b_ret As Boolean + Dim sz_temp As String, n_addr As Integer, b_ret As Boolean - Select Case ParType + Select Case ParType - Case Type.TDouble + Case Type.TDouble - If szVarAddr.StartsWith("#") Then + If szVarAddr.StartsWith("#") Then - sz_temp = szVarAddr.Replace("#", "") + sz_temp = szVarAddr.Replace("#", "") - If Integer.TryParse(sz_temp, n_addr) Then - b_ret = F_Write_macro(n_addr, dVarValue) + If Integer.TryParse(sz_temp, n_addr) Then + b_ret = F_Write_macro(n_addr, dVarValue) - End If + End If - End If + End If - Case Type.TBoolean - Case Type.TInteger - Case Type.TLong - Case Type.TString + Case Type.TBoolean + Case Type.TInteger + Case Type.TLong + Case Type.TString - End Select + End Select - End Sub + End Sub - Public Overrides Sub Read_Variable(szVarAddr As String, ParType As Integer, ByRef nVarValue As Integer, ByRef lVarValue As Long, ByRef dVarValue As Double, ByRef sVarValue As String) + Public Overrides Sub Read_Variable(szVarAddr As String, ParType As Integer, ByRef nVarValue As Integer, ByRef lVarValue As Long, ByRef dVarValue As Double, ByRef sVarValue As String) - Dim sz_temp As String, n_addr As Integer, b_ret As Boolean + Dim sz_temp As String, n_addr As Integer, b_ret As Boolean - Select Case ParType + Select Case ParType - Case Type.TDouble + Case Type.TDouble - If szVarAddr.StartsWith("#") Then + If szVarAddr.StartsWith("#") Then - sz_temp = szVarAddr.Replace("#", "") + sz_temp = szVarAddr.Replace("#", "") - If Integer.TryParse(sz_temp, n_addr) Then - b_ret = F_Read_macro(n_addr, dVarValue) + If Integer.TryParse(sz_temp, n_addr) Then + b_ret = F_Read_macro(n_addr, dVarValue) - End If + End If - End If + End If - Case Type.TBoolean - Case Type.TInteger - Case Type.TLong - Case Type.TString + Case Type.TBoolean + Case Type.TInteger + Case Type.TLong + Case Type.TString - End Select + End Select - End Sub - ' - ' allarmi - ' - Public Overrides Function get_plc_messages() As Int16 + End Sub + ' + ' allarmi + ' + Public Overrides Function get_plc_messages() As Int16 - Return get_errors() + Return get_errors() - End Function + End Function #End Region #Region " private fatti" - ' - ' private functions - ' - Private Sub Init_NC_var_structures() + ' + ' private functions + ' + Private Sub Init_NC_var_structures() - ' STAI ATTENTO !!! - ' n_Base_addr_int_vars = 59800 - ' n_Base_addr_byte_for_bits_vars = 59820 - ' n_num_var_int_to_read = 10 - ' n_num_var_byte_for_bits_to_read = 30 - ' s_addr_set_nc_mode = "D59825" + ' STAI ATTENTO !!! + ' n_Base_addr_int_vars = 59800 + ' n_Base_addr_byte_for_bits_vars = 59820 + ' n_num_var_int_to_read = 10 + ' n_num_var_byte_for_bits_to_read = 30 + ' s_addr_set_nc_mode = "D59825" - Dim sz_t As String, sz_data_type As String = "", n_address As Integer, n_bit As Integer + Dim sz_t As String, sz_data_type As String = "", n_address As Integer, n_bit As Integer - n_Nc_var_int_defined = 0 - n_Nc_var_bit_defined = 0 + n_Nc_var_int_defined = 0 + n_Nc_var_bit_defined = 0 - ' Creo lista nomi variabili PLC da leggere + ' Creo lista nomi variabili PLC da leggere - For nI As Integer = 0 To NUM_DATA - 1 + For nI As Integer = 0 To NUM_DATA - 1 - 'sz_t = m_szCnDataVar(nI) ' indirizzo variabile da configurare - If Not String.IsNullOrEmpty(m_szCnDataVar(nI)) AndAlso m_szCnDataVar(nI).Contains("PLC,") Then - m_szCnDataVar(nI) = m_szCnDataVar(nI).Replace("PLC,", "") - Else - m_CnDataVar_Index(m_nCnDataVarNum) = nI ' imposto indice variabile - m_nCnDataVarNum += 1 - Continue For - End If + 'sz_t = m_szCnDataVar(nI) ' indirizzo variabile da configurare + If Not String.IsNullOrEmpty(m_szCnDataVar(nI)) AndAlso m_szCnDataVar(nI).Contains("PLC,") Then + m_szCnDataVar(nI) = m_szCnDataVar(nI).Replace("PLC,", "") + Else + m_CnDataVar_Index(m_nCnDataVarNum) = nI ' imposto indice variabile + m_nCnDataVarNum += 1 + Continue For + End If - sz_t = m_szCnDataVar(nI) ' indirizzo variabile da configurare + sz_t = m_szCnDataVar(nI) ' indirizzo variabile da configurare - If Not String.IsNullOrWhiteSpace(sz_t) Then ' addres not null ? + If Not String.IsNullOrWhiteSpace(sz_t) Then ' addres not null ? - If sz_t.Contains(".") Then ' bit variable? + If sz_t.Contains(".") Then ' bit variable? - If Check_var_bit_address(sz_t, sz_data_type, n_address, n_bit) Then ' valid bit address ? + If Check_var_bit_address(sz_t, sz_data_type, n_address, n_bit) Then ' valid bit address ? - Nc_var_bit(n_Nc_var_bit_defined).offset = n_address - n_Base_addr_byte_for_bits_vars - Nc_var_bit(n_Nc_var_bit_defined).bit_no = n_bit - Nc_var_bit(n_Nc_var_bit_defined).address = sz_t - Nc_var_bit(n_Nc_var_bit_defined).index = nI - n_Nc_var_bit_defined = n_Nc_var_bit_defined + 1 ' incremento numero di variabili da leggere + Nc_var_bit(n_Nc_var_bit_defined).offset = n_address - n_Base_addr_byte_for_bits_vars + Nc_var_bit(n_Nc_var_bit_defined).bit_no = n_bit + Nc_var_bit(n_Nc_var_bit_defined).address = sz_t + Nc_var_bit(n_Nc_var_bit_defined).index = nI + n_Nc_var_bit_defined = n_Nc_var_bit_defined + 1 ' incremento numero di variabili da leggere - End If ' valid bit address + End If ' valid bit address - Else - If Check_var_address(sz_t, sz_data_type, n_address) Then ' valid int address ? + Else + If Check_var_address(sz_t, sz_data_type, n_address) Then ' valid int address ? - Nc_var_int(n_Nc_var_int_defined).offset = n_address - n_Base_addr_int_vars - Nc_var_int(n_Nc_var_int_defined).address = sz_t - Nc_var_int(n_Nc_var_int_defined).index = nI - n_Nc_var_int_defined = n_Nc_var_int_defined + 1 ' incremento numero di variabili da leggere + Nc_var_int(n_Nc_var_int_defined).offset = n_address - n_Base_addr_int_vars + Nc_var_int(n_Nc_var_int_defined).address = sz_t + Nc_var_int(n_Nc_var_int_defined).index = nI + n_Nc_var_int_defined = n_Nc_var_int_defined + 1 ' incremento numero di variabili da leggere - End If ' valid int address + End If ' valid int address - End If ' bit variable + End If ' bit variable - m_CnDataVar_Index(m_nCnDataVarNum) = nI ' imposto indice variabile - m_nCnDataVarNum += 1 ' incremento numero di variabili da leggere + m_CnDataVar_Index(m_nCnDataVarNum) = nI ' imposto indice variabile + m_nCnDataVarNum += 1 ' incremento numero di variabili da leggere - End If ' addres not null + End If ' addres not null - Next + Next - End Sub + End Sub - Sub Read_Nc_var_structures() + Sub Read_Nc_var_structures() - Dim n As Short, n_temp As Short, n_index As Short, n_num_bit As Short - Dim b_ret As Boolean - Dim buffer(300) As Short - Dim by_buffer(300) As Byte, by_temp As Byte - Dim b_temp As Boolean + Dim n As Short, n_temp As Short, n_index As Short, n_num_bit As Short + Dim b_ret As Boolean + Dim buffer(300) As Short + Dim by_buffer(300) As Byte, by_temp As Byte + Dim b_temp As Boolean - ' read int variables + ' read int variables - b_ret = F_Read_n_Int_From_PLC(n_Base_addr_int_vars, Convert_NC_Area_code("D"), buffer, n_num_var_int_to_read) - If Not b_ret Then - Exit Sub - End If + b_ret = F_Read_n_Int_From_PLC(n_Base_addr_int_vars, Convert_NC_Area_code("D"), buffer, n_num_var_int_to_read) + If Not b_ret Then + Exit Sub + End If - ' process int variables + ' process int variables - For n = 0 To (n_Nc_var_int_defined - 1) + For n = 0 To (n_Nc_var_int_defined - 1) - n_temp = buffer((Nc_var_int(n).offset) / 2) - n_index = Nc_var_int(n).index + n_temp = buffer((Nc_var_int(n).offset) / 2) + n_index = Nc_var_int(n).index - Select Case n_index + Select Case n_index - Case CnData.Mode ' (0) modo 0:AUTO;1:SEQ;2:MDI;3:RAPIDO;4:SERCH;5:EDIT;6:TEST;7:MANUALE; - ' nMachineMode = n_temp + Case CnData.Mode ' (0) modo 0:AUTO;1:SEQ;2:MDI;3:RAPIDO;4:SERCH;5:EDIT;6:TEST;7:MANUALE; + ' nMachineMode = n_temp - ' Applico transcodifica - nMachineMode = Trascodifica_nc_mode(n_temp) + ' Applico transcodifica + nMachineMode = Trascodifica_nc_mode(n_temp) - Case CnData.JogIncr ' (1) Tipo man. 0:0.1 u; 1:1 u; 2:10 u; 3:100 u; 4:1 mm; 5:10 mm; 6:ILL; 8:HANDWEEL; 9:0.01 u; 10:0.001 u; - ' ... + Case CnData.JogIncr ' (1) Tipo man. 0:0.1 u; 1:1 u; 2:10 u; 3:100 u; 4:1 mm; 5:10 mm; 6:ILL; 8:HANDWEEL; 9:0.01 u; 10:0.001 u; + ' ... - Case CnData.Feed ' (2) - d_DInterpo_Prog_Feed = CDbl(n_temp) ' d_DInterpo_Prog_Feed + Case CnData.Feed ' (2) + d_DInterpo_Prog_Feed = CDbl(n_temp) ' d_DInterpo_Prog_Feed - Case CnData.FeedOvr ' (3) Potenziom. Feed = * 0.47059 - d_DInterpo_Feed_override = CDbl(n_temp) - b_feed_changed = True + Case CnData.FeedOvr ' (3) Potenziom. Feed = * 0.47059 + d_DInterpo_Feed_override = CDbl(n_temp) + b_feed_changed = True - Case CnData.Speed ' (4) Speed - d_spindle_eff(0) = CDbl(n_temp) + Case CnData.Speed ' (4) Speed + d_spindle_eff(0) = CDbl(n_temp) - Case CnData.SpeedOvr ' (5) Potenziom. speed = ... - n_spindle_override(0) = n_temp + Case CnData.SpeedOvr ' (5) Potenziom. speed = ... + n_spindle_override(0) = n_temp - Case CnData.Power ' (6) Ampère = * 0.01 - d_spindle_power = CDbl(n_temp) - b_spindle_power_changed = True - - Case CnData.PowerOvr ' (10) valore assorbimento massimo mandrino con l'utensile corrente - bPowerOvr = CDbl(n_temp) - b_spindle_power_changed = True - - Case CnData.DoorClosed ' (20) Stato porte - nDoorClosedState = n_temp - - Case CnData.EnableZone ' (53) - nEnableZone = n_temp - - Case CnData.EnablePC ' (54) - nEnablePc = n_temp - - End Select - - Next - - ' read bit variables as bytes - - b_ret = F_Read_n_Bytes_From_PLC(n_Base_addr_byte_for_bits_vars, Convert_NC_Area_code("D"), by_buffer, n_num_var_byte_for_bits_to_read) - If Not b_ret Then - Exit Sub - End If - - ' process bit variables - - For n = 0 To (n_Nc_var_bit_defined - 1) - - by_temp = by_buffer(Nc_var_bit(n).offset) - n_index = Nc_var_bit(n).index - n_num_bit = Nc_var_bit(n).bit_no - - b_temp = Get_bit2(by_temp, n_num_bit) - - - Select Case n_index - - Case CnData.Spindle ' (7) Stato rotazione mandrino - bSpindleState = b_temp - Case CnData.Coolant ' (8) Stato acqua - bCoolantState = b_temp - Case CnData.Laser ' (9) Stato laser punto - bLaserState = b_temp - Case CnData.InternalCoolant ' (13) Stato acqua interna - bInternalCoolantState = b_temp - Case CnData.ExternCoolant ' (14) Stato acqua esterna - bExternCoolantState = b_temp - Case CnData.CBAxes ' (15) Stato ativazione assi c e b - bCBAxesState = b_temp - Case CnData.AirBlow ' (16) Stato soffio utensile - bAirBlowState = b_temp - Case CnData.Home ' (17) Stato home - bHomeState = b_temp - Case CnData.TableUp ' (18) Stato tavolo su - bTableUpState = b_temp - Case CnData.TableDown ' (19) Stato tavolo giu' - bTableDownState = b_temp + Case CnData.Power ' (6) Ampère = * 0.01 + d_spindle_power = CDbl(n_temp) + b_spindle_power_changed = True + + Case CnData.PowerOvr ' (10) valore assorbimento massimo mandrino con l'utensile corrente + bPowerOvr = CDbl(n_temp) + b_spindle_power_changed = True + + Case CnData.DoorClosed ' (20) Stato porte + nDoorClosedState = n_temp + + Case CnData.EnableZone ' (53) + nEnableZone = n_temp + + Case CnData.EnablePC ' (54) + nEnablePc = n_temp + + End Select + + Next + + ' read bit variables as bytes + + b_ret = F_Read_n_Bytes_From_PLC(n_Base_addr_byte_for_bits_vars, Convert_NC_Area_code("D"), by_buffer, n_num_var_byte_for_bits_to_read) + If Not b_ret Then + Exit Sub + End If + + ' process bit variables + + For n = 0 To (n_Nc_var_bit_defined - 1) + + by_temp = by_buffer(Nc_var_bit(n).offset) + n_index = Nc_var_bit(n).index + n_num_bit = Nc_var_bit(n).bit_no + + b_temp = Get_bit2(by_temp, n_num_bit) + + + Select Case n_index + + Case CnData.Spindle ' (7) Stato rotazione mandrino + bSpindleState = b_temp + Case CnData.Coolant ' (8) Stato acqua + bCoolantState = b_temp + Case CnData.Laser ' (9) Stato laser punto + bLaserState = b_temp + Case CnData.InternalCoolant ' (13) Stato acqua interna + bInternalCoolantState = b_temp + Case CnData.ExternCoolant ' (14) Stato acqua esterna + bExternCoolantState = b_temp + Case CnData.CBAxes ' (15) Stato ativazione assi c e b + bCBAxesState = b_temp + Case CnData.AirBlow ' (16) Stato soffio utensile + bAirBlowState = b_temp + Case CnData.Home ' (17) Stato home + bHomeState = b_temp + Case CnData.TableUp ' (18) Stato tavolo su + bTableUpState = b_temp + Case CnData.TableDown ' (19) Stato tavolo giu' + bTableDownState = b_temp - Case CnData.LimitZ ' (21) Stato limitazione asse Z - bLimitZState = b_temp - Case CnData.VacuumUp ' (22) Stato ventosa su' - bVacuumUp = b_temp - Case CnData.VacuumDown ' (23) Stato ventosa giu' - bVacuumDown = b_temp - Case CnData.Vacuum2Up ' (24) Stato ventosa2 su' - bVacuum2Up = b_temp - Case CnData.Vacuum2Down ' (25) Stato ventosa2 giu' - bVacuum2Down = b_temp - Case CnData.Vacuum1State ' (26) Stato ventosa 1 - bVacuum1State = b_temp - Case CnData.Vacuum2State ' (27) Stato ventosa 2 - bVacuum2State = b_temp - Case CnData.Vacuum3State ' (28) Stato ventosa 3 - bVacuum3State = b_temp - Case CnData.Vacuum4State ' (29) Stato ventosa 4 - bVacuum4State = b_temp - Case CnData.Vacuum5State ' (30) Stato ventosa 5 - bVacuum5State = b_temp - Case CnData.Vacuum6State ' (31) Stato ventosa 6 - bVacuum6State = b_temp - Case CnData.Vacuum135State ' (32) Stato ventose 135 - bVacuum135State = b_temp - Case CnData.Vacuum246State ' (33) Stato ventose 246 - bVacuum246State = b_temp - Case CnData.OpenAllState ' (34) Stato apertura ventose - bOpenAllState = b_temp - Case CnData.CloseAllState ' (35) Stato chiusura ventose - bCloseAllState = b_temp - Case CnData.Open123State ' (36) Stato apertura ventose - bOpen123State = b_temp - Case CnData.Open456State ' (37) Stato apertura ventose - bOpen456State = b_temp - Case CnData.Close123State ' (38) Stato chiusura ventose - bClose123State = b_temp - Case CnData.Close456State ' (39) Stato chiusura ventose - bClose456State = b_temp - Case CnData.BlowState ' (40) Stato soffio ventose - bBlowState = b_temp - Case CnData.VacuumOn ' (41) Stato aspirazione ventose acceso - bVacuumOn = b_temp - Case CnData.BypassState ' (42) Stato bypass - bBypassState = b_temp - Case CnData.Vacuum0 ' (43) Stato rotazione ventosa 0 - bVacuum0 = b_temp - Case CnData.Vacuum90 ' (44) Stato rotazione ventosa 0 - bVacuum90 = b_temp - Case CnData.VacuumOff ' (45) Stato aspirazione ventose spento - bVacuumOff = b_temp + Case CnData.LimitZ ' (21) Stato limitazione asse Z + bLimitZState = b_temp + Case CnData.VacuumUp ' (22) Stato ventosa su' + bVacuumUp = b_temp + Case CnData.VacuumDown ' (23) Stato ventosa giu' + bVacuumDown = b_temp + Case CnData.Vacuum2Up ' (24) Stato ventosa2 su' + bVacuum2Up = b_temp + Case CnData.Vacuum2Down ' (25) Stato ventosa2 giu' + bVacuum2Down = b_temp + Case CnData.Vacuum1State ' (26) Stato ventosa 1 + bVacuum1State = b_temp + Case CnData.Vacuum2State ' (27) Stato ventosa 2 + bVacuum2State = b_temp + Case CnData.Vacuum3State ' (28) Stato ventosa 3 + bVacuum3State = b_temp + Case CnData.Vacuum4State ' (29) Stato ventosa 4 + bVacuum4State = b_temp + Case CnData.Vacuum5State ' (30) Stato ventosa 5 + bVacuum5State = b_temp + Case CnData.Vacuum6State ' (31) Stato ventosa 6 + bVacuum6State = b_temp + Case CnData.Vacuum135State ' (32) Stato ventose 135 + bVacuum135State = b_temp + Case CnData.Vacuum246State ' (33) Stato ventose 246 + bVacuum246State = b_temp + Case CnData.OpenAllState ' (34) Stato apertura ventose + bOpenAllState = b_temp + Case CnData.CloseAllState ' (35) Stato chiusura ventose + bCloseAllState = b_temp + Case CnData.Open123State ' (36) Stato apertura ventose + bOpen123State = b_temp + Case CnData.Open456State ' (37) Stato apertura ventose + bOpen456State = b_temp + Case CnData.Close123State ' (38) Stato chiusura ventose + bClose123State = b_temp + Case CnData.Close456State ' (39) Stato chiusura ventose + bClose456State = b_temp + Case CnData.BlowState ' (40) Stato soffio ventose + bBlowState = b_temp + Case CnData.VacuumOn ' (41) Stato aspirazione ventose acceso + bVacuumOn = b_temp + Case CnData.BypassState ' (42) Stato bypass + bBypassState = b_temp + Case CnData.Vacuum0 ' (43) Stato rotazione ventosa 0 + bVacuum0 = b_temp + Case CnData.Vacuum90 ' (44) Stato rotazione ventosa 0 + bVacuum90 = b_temp + Case CnData.VacuumOff ' (45) Stato aspirazione ventose spento + bVacuumOff = b_temp - Case CnData.LaserTrac ' (46) Stato laser tracciatura - bLaserTracState = b_temp + Case CnData.LaserTrac ' (46) Stato laser tracciatura + bLaserTracState = b_temp - Case CnData.XYJog ' (47) - bXYJog = b_temp - Case CnData.ZCJog ' (48) - bZCJog = b_temp - Case CnData.ZBJog ' (49) - bZBCJog = b_temp - Case CnData.PowerON ' (50) - bPowerON = b_temp - Case CnData.Remote ' (51) - bRemote = b_temp + Case CnData.XYJog ' (47) + bXYJog = b_temp + Case CnData.ZCJog ' (48) + bZCJog = b_temp + Case CnData.ZBJog ' (49) + bZBCJog = b_temp + Case CnData.PowerON ' (50) + bPowerON = b_temp + Case CnData.Remote ' (51) + bRemote = b_temp - Case CnData.Parking ' (52) - bParkingState = b_temp + Case CnData.Parking ' (52) + bParkingState = b_temp - Case CnData.nAxes ' (55) - b5AxesActive = b_temp + Case CnData.nAxes ' (55) + b5AxesActive = b_temp - End Select + End Select - Next + Next - End Sub + End Sub @@ -809,541 +811,557 @@ Namespace Fanuc - ' Private Sub OnTimedEvent(source As Object, e As System.Timers.ElapsedEventArgs) - Public Overrides Function Geppo() As Boolean + ' Private Sub OnTimedEvent(source As Object, e As System.Timers.ElapsedEventArgs) + Public Overrides Function Geppo() As Boolean - If Not b_busy Then - b_busy = True + If Not b_busy Then + b_busy = True - nCount += 1 + nCount += 1 - Read_machine_pos() ' leggo posizioni assi + Read_machine_pos() ' leggo posizioni assi - If nCount = 2 Or nCount = 4 Then - timer_read_var() ' leggo un mucchio di variabili in un colpo solo - End If + If nCount = 2 Or nCount = 4 Then + timer_read_var() ' leggo un mucchio di variabili in un colpo solo + End If - If nCount = 4 Then - nCount = 0 - get_errors() ' leggo eventueli errori PLC e CN - End If + If nCount = 4 Then + nCount = 0 + get_errors() ' leggo eventueli errori PLC e CN + End If - b_busy = False + b_busy = False - End If + End If - Return False - End Function + Return False + End Function - Private Function get_errors() As Int16 + Private Function get_errors() As Int16 - Dim n_errors As Short - Dim szt As String + Dim n_errors As Short + Dim szt As String - sz_NC_error_messages.Clear() - b_NC_error = False - ' - 'PLC errors .... ??? + sz_NC_error_messages.Clear() + b_NC_error = False + ' + 'PLC errors .... ??? - ' NC alarms + ' NC alarms - n_errors = M_Fanuc.F_get_cnc_alarms3() + n_errors = M_Fanuc.F_get_cnc_alarms3() - If n_errors <> BAD_RETURN_SH Then + If n_errors <> BAD_RETURN_SH Then - For i As Short = 0 To (M_Fanuc.AlarmMessageCount - 1) + For i As Short = 0 To (M_Fanuc.AlarmMessageCount - 1) - szt = M_Fanuc.AlarmNumber(i).ToString & " - " & M_Fanuc.AlarmMessage(i) - sz_NC_error_messages.Add(szt) + szt = M_Fanuc.AlarmNumber(i).ToString & " - " & M_Fanuc.AlarmMessage(i) + sz_NC_error_messages.Add(szt) - Next i + Next i - Else - Return BAD_RETURN_SH - End If + Else + Return BAD_RETURN_SH + End If - If n_errors > 0 Then b_NC_error = True + If n_errors > 0 Then b_NC_error = True - n_errors = F_get_operator_messages() + n_errors = F_get_operator_messages() - If n_errors <> BAD_RETURN_SH Then + If n_errors <> BAD_RETURN_SH Then - For i As Short = 0 To (M_Fanuc.OperatorMessageCount - 1) + For i As Short = 0 To (M_Fanuc.OperatorMessageCount - 1) - szt = M_Fanuc.OperatorMsgNumber(i).ToString & " - " & M_Fanuc.OperatorMessage(i) - sz_NC_error_messages.Add(szt) + szt = M_Fanuc.OperatorMsgNumber(i).ToString & " - " & M_Fanuc.OperatorMessage(i) + sz_NC_error_messages.Add(szt) - Next i + Next i - Else - Return BAD_RETURN_SH - End If + Else + Return BAD_RETURN_SH + End If - If (n_errors > 0) Or (b_NC_error) Then b_NC_error = True + If (n_errors > 0) Or (b_NC_error) Then b_NC_error = True - n_errors = F_get_PLC_messages() + n_errors = F_get_PLC_messages() - If n_errors <> BAD_RETURN_SH Then + If n_errors <> BAD_RETURN_SH Then - For i As Short = 0 To (n_errors - 1) + For i As Short = 0 To (n_errors - 1) - szt = lst_plc_messages(i) - sz_NC_error_messages.Add(szt) + szt = lst_plc_messages(i) + sz_NC_error_messages.Add(szt) - Next i + Next i - Else - Return BAD_RETURN_SH - End If + Else + Return BAD_RETURN_SH + End If - If (n_errors > 0) Or (b_NC_error) Then b_NC_error = True + If (n_errors > 0) Or (b_NC_error) Then b_NC_error = True - Return Focas1.EW_OK + Return Focas1.EW_OK - End Function + End Function - Function Read_machine_pos() As Int16 + Function Read_machine_pos() As Int16 - Dim b_ret As Boolean + Dim b_ret As Boolean - If b_OM_pos Then ' quote rispetto a 0 Macchina - b_ret = F_read_position_MACH() - Else ' quote rispetto a 0 Pezzo - b_ret = F_read_position_ABS() - End If + If b_OM_pos Then ' quote rispetto a 0 Macchina + b_ret = F_read_position_MACH() + Else ' quote rispetto a 0 Pezzo + b_ret = F_read_position_ABS() + End If - If Not b_ret Then - Dim sMsg As String = "Error in F_read_position_* : " & M_Fanuc.sz_Err_Msg - ' EgtOutLog(sMsg) - Return -1 - End If + If Not b_ret Then + Dim sMsg As String = "Error in F_read_position_* : " & M_Fanuc.sz_Err_Msg + ' EgtOutLog(sMsg) + Return -1 + End If - b_ret = F_read_position_DELTA() - If Not b_ret Then - Dim sMsg As String = "Error in F_read_position_DELTA* : " & M_Fanuc.sz_Err_Msg - ' EgtOutLog(sMsg) - Return -1 - End If + b_ret = F_read_position_DELTA() + If Not b_ret Then + Dim sMsg As String = "Error in F_read_position_DELTA* : " & M_Fanuc.sz_Err_Msg + ' EgtOutLog(sMsg) + Return -1 + End If + ' Se macchina in pollici, allora valori assi lineari in pollici + Dim LinCoeff As Double = If(m_MainWindow.m_CNCommunication.GetMachineInInches(), ONEINCH / 10, ONEMM) - For i As Short = 0 To (Focas1.MAX_AXIS - 1) ' si possono leggere come massimo 9 assi 0 -> 8 + For i As Short = 0 To (Focas1.MAX_AXIS - 1) ' si possono leggere come massimo 9 assi 0 -> 8 - If i < A_AXIS Then - d_axis_position(i) = M_Fanuc.l_pos_values(i) / Vmminch ' X - d_axis_delta(i) = M_Fanuc.l_delta_values(i) / Vmminch - Else - d_axis_position(i) = M_Fanuc.l_pos_values(i) / NumCifreDecP4 ' A - d_axis_delta(i) = M_Fanuc.l_delta_values(i) / Vmminch - End If + If i < A_AXIS Then + d_axis_position(i) = M_Fanuc.l_pos_values(i) / Vmminch ' X + d_axis_delta(i) = M_Fanuc.l_delta_values(i) / Vmminch + ' verifico se l'indice 'i' è associato ad un asse rotativo oppure lineare + If b_axis_is_linear(i) Then + d_axis_position(i) *= LinCoeff + d_axis_delta(i) *= LinCoeff + End If - Next + Else + d_axis_position(i) = M_Fanuc.l_pos_values(i) / NumCifreDecP4 ' A + d_axis_delta(i) = M_Fanuc.l_delta_values(i) / Vmminch + ' verifico se l'indice 'i' è associato ad un asse rotativo oppure lineare + If b_axis_is_linear(i) Then + d_axis_position(i) *= LinCoeff + d_axis_delta(i) *= LinCoeff + End If - If b_axis_events_enable Then - MyBase.OnNewPositionData() - MyBase.OnNewPosDeltaData() - End If + End If - Return 0 + Next - End Function + ' i primi 3 assi sono lineari + + If b_axis_events_enable Then + MyBase.OnNewPositionData() + MyBase.OnNewPosDeltaData() + End If + + Return 0 + + End Function #End Region #Region " Nuovi metodi pubblici" - Private sz_Data_type As String - Private n_address As Integer - Private n_end_address As Integer - Private n_bit As Integer + Private sz_Data_type As String + Private n_address As Integer + Private n_end_address As Integer + Private n_bit As Integer - Private bit_mask() As Byte = {&H1, &H2, &H4, &H8, &H10, &H20, &H40, &H80} - Private neg_bit_mask() As Byte = {&HFE, &HFD, &HFB, &HF7, &HEF, &HDF, &HBF, &H7F} + Private bit_mask() As Byte = {&H1, &H2, &H4, &H8, &H10, &H20, &H40, &H80} + Private neg_bit_mask() As Byte = {&HFE, &HFD, &HFB, &HF7, &HEF, &HDF, &HBF, &H7F} - Public Overrides Function NC_read_var_short(sz_VarAddr As String, ByRef value As Short) As Boolean + Public Overrides Function NC_read_var_short(sz_VarAddr As String, ByRef value As Short) As Boolean - Dim b_ret As Boolean = False - Dim Buffer As Short() + Dim b_ret As Boolean = False + Dim Buffer As Short() - ReDim Buffer(2) + ReDim Buffer(2) - If Check_var_address(sz_VarAddr, sz_Data_type, n_address) Then + If Check_var_address(sz_VarAddr, sz_Data_type, n_address) Then - b_ret = F_Read_n_Int_From_PLC(n_address, Convert_NC_Area_code(sz_Data_type), Buffer, 1) + b_ret = F_Read_n_Int_From_PLC(n_address, Convert_NC_Area_code(sz_Data_type), Buffer, 1) - If b_ret Then - value = Buffer(0) - Return True - Else - Return False - End If + If b_ret Then + value = Buffer(0) + Return True + Else + Return False + End If - Else - ' !!!!! error message - Return False + Else + ' !!!!! error message + Return False - End If + End If - End Function + End Function - Public Overrides Function NC_read_var_short_range(sz_VarStartAddr As String, sz_VarEndAddr As String, ByRef values() As Short) As Boolean + Public Overrides Function NC_read_var_short_range(sz_VarStartAddr As String, sz_VarEndAddr As String, ByRef values() As Short) As Boolean - Dim b_ret As Boolean = False - Dim Buffer As Short() - Dim n_bytes As Integer + Dim b_ret As Boolean = False + Dim Buffer As Short() + Dim n_bytes As Integer - If Check_var_address(sz_VarStartAddr, sz_Data_type, n_address) Then + If Check_var_address(sz_VarStartAddr, sz_Data_type, n_address) Then - If Check_var_address(sz_VarEndAddr, sz_Data_type, n_end_address) Then + If Check_var_address(sz_VarEndAddr, sz_Data_type, n_end_address) Then - n_bytes = n_end_address - n_address + 1 + n_bytes = n_end_address - n_address + 1 - ReDim Buffer(n_bytes) + ReDim Buffer(n_bytes) - b_ret = F_Read_n_Int_From_PLC(n_address, Convert_NC_Area_code(sz_Data_type), Buffer, n_bytes) + b_ret = F_Read_n_Int_From_PLC(n_address, Convert_NC_Area_code(sz_Data_type), Buffer, n_bytes) - If b_ret Then + If b_ret Then - For n As Short = 0 To (n_bytes - 1) - values(0) = Buffer(0) - Next - Return True + For n As Short = 0 To (n_bytes - 1) + values(0) = Buffer(0) + Next + Return True - Else - Return False - End If + Else + Return False + End If - Else - ' !!!!! error message - Return False + Else + ' !!!!! error message + Return False - End If - Else - ' !!!!! error message - Return False + End If + Else + ' !!!!! error message + Return False - End If + End If - End Function + End Function - Public Overrides Function NC_write_var_short(sz_VarAddr As String, ByRef value As Short) As Boolean + Public Overrides Function NC_write_var_short(sz_VarAddr As String, ByRef value As Short) As Boolean - Dim b_ret As Boolean = False - Dim Buffer As Short() + Dim b_ret As Boolean = False + Dim Buffer As Short() - ReDim Buffer(2) + ReDim Buffer(2) - Buffer(0) = value + Buffer(0) = value - If Check_var_address(sz_VarAddr, sz_Data_type, n_address) Then + If Check_var_address(sz_VarAddr, sz_Data_type, n_address) Then - b_ret = F_Write_n_Int_To_PLC(n_address, Convert_NC_Area_code(sz_Data_type), Buffer, 1) + b_ret = F_Write_n_Int_To_PLC(n_address, Convert_NC_Area_code(sz_Data_type), Buffer, 1) - If b_ret Then - Return True - Else - Return False - End If + If b_ret Then + Return True + Else + Return False + End If - Else - ' !!!!! error message - Return False + Else + ' !!!!! error message + Return False - End If + End If - Return False + Return False - End Function + End Function - Public Overrides Function NC_read_var_bit(sz_VarAddrBit As String, ByRef b_value As Boolean) As Boolean + Public Overrides Function NC_read_var_bit(sz_VarAddrBit As String, ByRef b_value As Boolean) As Boolean - Dim b_ret As Boolean = False - Dim Buffer As Byte() - Dim by_value As Byte + Dim b_ret As Boolean = False + Dim Buffer As Byte() + Dim by_value As Byte - Dim Area As PMCAreaType + Dim Area As PMCAreaType - ReDim Buffer(2) + ReDim Buffer(2) - If Check_var_bit_address(sz_VarAddrBit, sz_Data_type, n_address, n_bit) Then + If Check_var_bit_address(sz_VarAddrBit, sz_Data_type, n_address, n_bit) Then - Area = Convert_NC_Area_code(sz_Data_type) + Area = Convert_NC_Area_code(sz_Data_type) - b_ret = F_Read_n_Bytes_From_PLC(n_address, Area, Buffer, 1) + b_ret = F_Read_n_Bytes_From_PLC(n_address, Area, Buffer, 1) - If b_ret Then - by_value = Buffer(0) + If b_ret Then + by_value = Buffer(0) - b_value = Get_bit2(by_value, n_bit) + b_value = Get_bit2(by_value, n_bit) - Return b_ret - Else - Return False - End If + Return b_ret + Else + Return False + End If - Else - ' !!!!! error message - Return False + Else + ' !!!!! error message + Return False - End If + End If - Return False - End Function + Return False + End Function - Public Overrides Function NC_write_var_bit(sz_VarAddrBit As String, ByRef b_value As Boolean) As Boolean + Public Overrides Function NC_write_var_bit(sz_VarAddrBit As String, ByRef b_value As Boolean) As Boolean - Dim b_ret As Boolean = False - Dim Buffer As Byte() - Dim by_value As Byte + Dim b_ret As Boolean = False + Dim Buffer As Byte() + Dim by_value As Byte - Dim Area As PMCAreaType + Dim Area As PMCAreaType - ReDim Buffer(2) + ReDim Buffer(2) - If Check_var_bit_address(sz_VarAddrBit, sz_Data_type, n_address, n_bit) Then + If Check_var_bit_address(sz_VarAddrBit, sz_Data_type, n_address, n_bit) Then - Area = Convert_NC_Area_code(sz_Data_type) + Area = Convert_NC_Area_code(sz_Data_type) - b_ret = F_Read_n_Bytes_From_PLC(n_address, Area, Buffer, 1) + b_ret = F_Read_n_Bytes_From_PLC(n_address, Area, Buffer, 1) - If b_ret Then - by_value = Buffer(0) + If b_ret Then + by_value = Buffer(0) - Set_bit2(by_value, n_bit, b_value) + Set_bit2(by_value, n_bit, b_value) - Buffer(0) = by_value + Buffer(0) = by_value - b_ret = F_Write_n_Bytes_To_PLC(n_address, Area, Buffer, 1) + b_ret = F_Write_n_Bytes_To_PLC(n_address, Area, Buffer, 1) - Return b_ret - Else - Return False - End If + Return b_ret + Else + Return False + End If - Else - ' !!!!! error message - Return False + Else + ' !!!!! error message + Return False - End If + End If - Return False - End Function + Return False + End Function - Public Overrides Function NC_pulse_bit(sz_VarAddrBit As String) As Boolean + Public Overrides Function NC_pulse_bit(sz_VarAddrBit As String) As Boolean - Dim b_ret As Boolean = False - Dim Buffer As Byte() - Dim by_value As Byte, by_original As Byte + Dim b_ret As Boolean = False + Dim Buffer As Byte() + Dim by_value As Byte, by_original As Byte - Dim Area As PMCAreaType + Dim Area As PMCAreaType - ReDim Buffer(2) + ReDim Buffer(2) - If Check_var_bit_address(sz_VarAddrBit, sz_Data_type, n_address, n_bit) Then + If Check_var_bit_address(sz_VarAddrBit, sz_Data_type, n_address, n_bit) Then - Area = Convert_NC_Area_code(sz_Data_type) + Area = Convert_NC_Area_code(sz_Data_type) - b_ret = F_Read_n_Bytes_From_PLC(n_address, Area, Buffer, 1) + b_ret = F_Read_n_Bytes_From_PLC(n_address, Area, Buffer, 1) - If b_ret Then - by_value = Buffer(0) - by_original = by_value + If b_ret Then + by_value = Buffer(0) + by_original = by_value - Set_bit2(by_value, n_bit, True) + Set_bit2(by_value, n_bit, True) - Buffer(0) = by_value - b_ret = F_Write_n_Bytes_To_PLC(n_address, Area, Buffer, 1) - If b_ret Then - System.Threading.Thread.Sleep(50) - Buffer(0) = by_original - b_ret = F_Write_n_Bytes_To_PLC(n_address, Area, Buffer, 1) - End If + Buffer(0) = by_value + b_ret = F_Write_n_Bytes_To_PLC(n_address, Area, Buffer, 1) + If b_ret Then + System.Threading.Thread.Sleep(50) + Buffer(0) = by_original + b_ret = F_Write_n_Bytes_To_PLC(n_address, Area, Buffer, 1) + End If - End If + End If - Return b_ret + Return b_ret - Else - ' !!!!! error message - Return False + Else + ' !!!!! error message + Return False - End If + End If - End Function + End Function - Private Function Check_var_address(sz_VarAddr As String, ByRef sz_Data_type As String, ByRef n_address As Integer) As Boolean + Private Function Check_var_address(sz_VarAddr As String, ByRef sz_Data_type As String, ByRef n_address As Integer) As Boolean - Dim sz_address As String + Dim sz_address As String - Try + Try - sz_Data_type = sz_VarAddr.Substring(0, 1) ' primo carattere - sz_address = sz_VarAddr.Substring(1) ' dal secondo in poi + sz_Data_type = sz_VarAddr.Substring(0, 1) ' primo carattere + sz_address = sz_VarAddr.Substring(1) ' dal secondo in poi - If sz_address.Contains(".") Then - Return False - Else - If Integer.TryParse(sz_address, n_address) Then - Return True - Else - Return False - End If - End If + If sz_address.Contains(".") Then + Return False + Else + If Integer.TryParse(sz_address, n_address) Then + Return True + Else + Return False + End If + End If - Catch ex As Exception + Catch ex As Exception - Return False - End Try + Return False + End Try - Return True + Return True - End Function + End Function - Private Function Check_var_bit_address(sz_VarAddr As String, ByRef sz_Data_type As String, ByRef n_address As Integer, ByRef n_bit_address As Integer) As Boolean + Private Function Check_var_bit_address(sz_VarAddr As String, ByRef sz_Data_type As String, ByRef n_address As Integer, ByRef n_bit_address As Integer) As Boolean - Dim sz_tokens() As String - Dim sz_address As String + Dim sz_tokens() As String + Dim sz_address As String - Try - sz_Data_type = sz_VarAddr.Substring(0, 1) ' primo carattere - sz_address = sz_VarAddr.Substring(1) ' dal secondo in poi + Try + sz_Data_type = sz_VarAddr.Substring(0, 1) ' primo carattere + sz_address = sz_VarAddr.Substring(1) ' dal secondo in poi - If sz_address.Contains(".") Then + If sz_address.Contains(".") Then - sz_tokens = sz_address.Split(".") - If Integer.TryParse(sz_tokens(0), n_address) Then + sz_tokens = sz_address.Split(".") + If Integer.TryParse(sz_tokens(0), n_address) Then - If Integer.TryParse(sz_tokens(1), n_bit_address) Then - Return True - Else - Return False - End If - Else - Return False - End If + If Integer.TryParse(sz_tokens(1), n_bit_address) Then + Return True + Else + Return False + End If + Else + Return False + End If - Else - Return False - End If + Else + Return False + End If - Catch ex As Exception + Catch ex As Exception - Return False - End Try + Return False + End Try - Return True + Return True - End Function + End Function - Private Function Convert_NC_Area_code(sz_area As String) As Short + Private Function Convert_NC_Area_code(sz_area As String) As Short - Select Case sz_area + Select Case sz_area - Case "G" - Return PMCAreaType.G_AREA + Case "G" + Return PMCAreaType.G_AREA - Case "F" - Return PMCAreaType.F_AREA + Case "F" + Return PMCAreaType.F_AREA - Case "Y" - Return PMCAreaType.Y_AREA + Case "Y" + Return PMCAreaType.Y_AREA - Case "X" - Return PMCAreaType.X_AREA + Case "X" + Return PMCAreaType.X_AREA - Case "A" - Return PMCAreaType.A_AREA + Case "A" + Return PMCAreaType.A_AREA - Case "R" - Return PMCAreaType.R_AREA + Case "R" + Return PMCAreaType.R_AREA - Case "T" - Return PMCAreaType.T_AREA + Case "T" + Return PMCAreaType.T_AREA - Case "K" - Return PMCAreaType.K_AREA + Case "K" + Return PMCAreaType.K_AREA - Case "C" - Return PMCAreaType.C_AREA + Case "C" + Return PMCAreaType.C_AREA - Case "D" - Return PMCAreaType.D_AREA + Case "D" + Return PMCAreaType.D_AREA - Case Else - Return -1 + Case Else + Return -1 - End Select + End Select - End Function + End Function - Function Get_bit(b As Byte, n_bit As Short) As Boolean + Function Get_bit(b As Byte, n_bit As Short) As Boolean - Return (b And (1 << n_bit)) <> 0 + Return (b And (1 << n_bit)) <> 0 - End Function + End Function - Function Get_bit2(b As Byte, n_bit As Short) As Boolean + Function Get_bit2(b As Byte, n_bit As Short) As Boolean - Return (b And bit_mask(n_bit)) <> 0 + Return (b And bit_mask(n_bit)) <> 0 - End Function + End Function - Sub Set_bit2(ByRef b As Byte, n_bit As Short, b_val As Boolean) + Sub Set_bit2(ByRef b As Byte, n_bit As Short, b_val As Boolean) - If b_val Then - b = (b Or bit_mask(n_bit)) - Else - b = (b And neg_bit_mask(n_bit)) - End If + If b_val Then + b = (b Or bit_mask(n_bit)) + Else + b = (b And neg_bit_mask(n_bit)) + End If - End Sub + End Sub #End Region #Region " Metodi non utilizzati" - ' - ' Read Once position - ' returns 0 = OK ; > 0 error - ' - Public Overrides Function DPOsition_ReadOnce() As Int16 + ' + ' Read Once position + ' returns 0 = OK ; > 0 error + ' + Public Overrides Function DPOsition_ReadOnce() As Int16 - Return -1 + Return -1 - End Function + End Function - Public Overrides Function DTool_set_read_range(n_start As Short, n_stop As Short) As Int16 + Public Overrides Function DTool_set_read_range(n_start As Short, n_stop As Short) As Int16 - Dim nret As Int16 = -1 - Return nret + Dim nret As Int16 = -1 + Return nret - End Function + End Function - Public Overrides Function DTool_write_tool(n_tool_number As Short, Length_X As Double, Radius As Double, TipRadius_Z As Double, - DLength_X As Double, DTipRadius_Z As Double, - nDirection As Short, nType As Short, nH As Integer) As Int16 + Public Overrides Function DTool_write_tool(n_tool_number As Short, Length_X As Double, Radius As Double, TipRadius_Z As Double, + DLength_X As Double, DTipRadius_Z As Double, + nDirection As Short, nType As Short, nH As Integer) As Int16 - Return -1 + Return -1 - End Function + End Function - Public Overrides Function get_free_memory(n_zone As Int16) As Long + Public Overrides Function get_free_memory(n_zone As Int16) As Long - Return -1 + Return -1 - End Function + End Function #End Region - End Class + End Class End Namespace diff --git a/NcComm/M_MMFiles.vb b/NcComm/M_MMFiles.vb index b521ff0..46b8df1 100644 --- a/NcComm/M_MMFiles.vb +++ b/NcComm/M_MMFiles.vb @@ -734,15 +734,26 @@ Module M_MMFiles ' Copia delle quote degli assi For nI As Integer = 0 To (m_Axes_Id.Count() - 1) Dim nId As Short = m_Axes_Id(nI) - ' agli assi lineari devo applicare il coefficiente - If (nId Mod 10) < 3 Then - CurrCN.d_axis_position(nI) = SiemensRet.d_interf_axis_position(nId) * LinCoeff - CurrCN.d_axis_delta(nI) = SiemensRet.d_interf_axis_delta(nId) * LinCoeff - ' gli assi rotanti sono sempre in gradi - Else - CurrCN.d_axis_position(nI) = SiemensRet.d_interf_axis_position(nId) - CurrCN.d_axis_delta(nI) = SiemensRet.d_interf_axis_delta(nId) + + '' agli assi lineari devo applicare il coefficiente + 'If (nId Mod 10) < 3 Then + ' CurrCN.d_axis_position(nI) = SiemensRet.d_interf_axis_position(nId) * LinCoeff + ' CurrCN.d_axis_delta(nI) = SiemensRet.d_interf_axis_delta(nId) * LinCoeff + ' ' gli assi rotanti sono sempre in gradi + 'Else + ' CurrCN.d_axis_position(nI) = SiemensRet.d_interf_axis_position(nId) + ' CurrCN.d_axis_delta(nI) = SiemensRet.d_interf_axis_delta(nId) + 'End If + + ' ver 2.7h2 + CurrCN.d_axis_position(nI) = SiemensRet.d_interf_axis_position(nId) + CurrCN.d_axis_delta(nI) = SiemensRet.d_interf_axis_delta(nId) + ' verifico se l'indice 'i' è associato ad un asse rotativo oppure lineare + If CurrCN.b_axis_is_linear(nI) Then + CurrCN.d_axis_position(nI) *= LinCoeff + CurrCN.d_axis_delta(nI) *= LinCoeff End If + Next ' Copia variabili R diff --git a/Utility/Utility.vb b/Utility/Utility.vb index d3164ea..e0b4c50 100644 --- a/Utility/Utility.vb +++ b/Utility/Utility.vb @@ -45,140 +45,9 @@ Module Utility '-------------------------------------------------------------------------------------------------- #Region "INCHES FRACTIONS" - 'Enum FractionPattern - ' None - ' Feet_Inches - ' Inches - 'End Enum - - '' seleziona il tipo di Pattern con cui stamoare i dati + ' seleziona il tipo di Pattern di stampa dei dati Friend nCurrFractionPattern As FractionStringConverter.FractionPattern = FractionPattern.Feet_Inches Friend dPrecision As Double = 64 - - 'Friend Function StringFractionToStringDecimal(dVal As Double, dBase As Double) As String - ' Dim sSign As String = String.Empty - ' If dVal < 0 Then - ' sSign = "-" - ' dVal = Math.Abs(dVal) - ' End If - ' Dim sFraction As String = String.Empty - ' ' integer and decima part of the value - ' Dim dInteger As Double = Math.Floor(dVal) - ' Dim dFraction As Double = dVal - dInteger - ' ' the nearest decimal numerator - ' Dim dNumeretor As Double = dFraction * dBase - ' Dim dRound As Double = Math.Round(dNumeretor) - ' ' estimates the irreducible fraction - ' If dRound = 0 Then - ' ' no decimal part - ' ElseIf dRound = dBase Then - ' ' no decimal part - ' dInteger = dInteger + 1 - ' Else - ' ' simplify fraction - ' While dRound Mod 2 = 0 - ' dRound = dRound / 2 - ' dBase = dBase / 2 - ' End While - ' sFraction = DoubleToString(dRound, 0) & "/" & DoubleToString(dBase, 0) - ' End If - ' ' sVal: dFeet'dInteger"sFraction --- dInteger sFraction - ' Return WriteFraction(dInteger, sFraction) - 'End Function - - '' trasforma il valore da pollici a piedi - 'Private Sub ConvertInchesToFeet(ByRef dFeet As Double, ByRef dInches As Double) - ' If dInches = 0 Then Return - ' While dInches - 12 >= 0 - ' dFeet = dFeet + 1 - ' dInches = dInches - 12 - ' End While - 'End Sub - - '' stampa dati in funzione del pattern dichiarato - 'Private Function WriteFraction(ByVal dInches As Double, sFraction As String) As String - ' Dim sVal As String = String.Empty - ' Select Case nCurrFractionPattern - ' Case FractionPattern.Feet_Inches - ' Dim dFeet As Double = 0 - ' ConvertInchesToFeet(dFeet, dInches) - ' If dFeet > 0 Then - ' sVal = String.Format("{0}'{1}""{2}", DoubleToString(dFeet, 0), DoubleToString(dInches, 0), sFraction).Trim - ' Else - ' sVal = String.Format("{0}""{1}", DoubleToString(dInches, 0), sFraction).Trim - ' End If - ' Case FractionPattern.Inches - ' sVal = DoubleToString(dInches, 0) & " " & sFraction - ' sVal = String.Format("{0}""{1}", DoubleToString(dInches, 0), sFraction).Trim - ' End Select - ' Return sVal - 'End Function - - '' riceve la stringa sorgente e restituisce la nuova strunga in formato decimale (senza eseguire conversioni di unità) - 'Friend Function StringFractionToDouble(sVal As String, ByRef sValConverted As String) As Boolean - ' Dim dVal As Double = 0 - ' ' dato in ingresso: sVal = 2'3"23/32 - ' Dim sFeet As String = String.Empty - ' Dim sFeetPattern As String = "^.*?(?=')" - ' Dim dFeet As Double = 0 - ' Dim bOkFeet As Boolean = True - ' Dim bFeetExists As Boolean = False - ' Dim sInch As String = String.Empty - ' Dim sInchPattern As String = "(?<=')(.*?)(?="")" ' se la stringa contiene l'apice singolo - ' Dim sInchPattern1 As String = "(.*?)(?="")" ' se la stringa NON contiene l'apice singolo - ' Dim dInch As Double = 0 - ' Dim bOkInch As Boolean = True - ' Dim bInchExists As Boolean = False - ' Dim sFraction As String = String.Empty - ' Dim sFractionPattern As String = "(?<="")(.*)" ' se la stringa contiene l'apice doppio - ' Dim sFractionPattern1 As String = "(?<=')(.*)" ' se la stringa NON contiene l'apice doppio ma solo quello singolo - ' Dim dFraction As Double = 0 - ' Dim bOkFraction As Boolean = True - ' Dim bFractionExists As Boolean = False - - ' ' recupero il valore di Feet (2') - ' Dim sMyMatch As String = Regex.Match(sVal, sFeetPattern).Groups(1).Value - ' If Not String.IsNullOrEmpty(sMyMatch) Or Not String.IsNullOrWhiteSpace(sMyMatch) Then - ' sFeet = sMyMatch.Trim - ' bOkFeet = StringToDouble(sFeet, dFeet) - ' bFeetExists = True - ' End If - - ' ' recupero il valore di Inch (3") dopo i Feet - oppure direttamente i pollici - ' If bFeetExists Then - ' sMyMatch = Regex.Match(sVal, sInchPattern).Groups(1).Value - ' Else - ' sMyMatch = Regex.Match(sVal, sInchPattern1).Groups(1).Value - ' End If - ' If Not String.IsNullOrEmpty(sMyMatch) Or Not String.IsNullOrWhiteSpace(sMyMatch) Then - ' sInch = sMyMatch.Trim - ' bOkInch = StringToDouble(sInch, dInch) - ' bInchExists = True - ' End If - - ' ' recupero il valore frazionario (23/32) dopo i pollici - oppure dopo i feet - oppure direttamente i valore inteso come pollici - ' If bInchExists Then - ' sMyMatch = Regex.Match(sVal, sFractionPattern).Groups(1).Value - ' ElseIf bFeetExists And Not bInchExists Then - ' sMyMatch = Regex.Match(sVal, sFractionPattern1).Groups(1).Value - ' ElseIf Not bFeetExists And Not bInchExists Then - ' sMyMatch = sVal - ' End If - ' If Not String.IsNullOrEmpty(sMyMatch) Or Not String.IsNullOrWhiteSpace(sMyMatch) Then - ' sFraction = sMyMatch - ' bOkFraction = StringToDouble(sFraction, dFraction) - ' End If - - ' ' calcolo il valore decimale dell'espressione - ' If bOkFeet And bOkInch And bOkFraction Then - ' dVal = dFeet / 12 + dInch + dFraction - ' sValConverted = DoubleToString(dVal, 4) - ' Return True - ' Else - ' Return False - ' End If - 'End Function - #End Region ' Inches Fraction '--------------------------------------------------------------------------------------------------