diff --git a/MTC_Adapter/.vs/MTC_Adapter/v15/sqlite3/storage.ide b/MTC_Adapter/.vs/MTC_Adapter/v15/sqlite3/storage.ide
new file mode 100644
index 0000000..9e02149
Binary files /dev/null and b/MTC_Adapter/.vs/MTC_Adapter/v15/sqlite3/storage.ide differ
diff --git a/MTC_Adapter/CMSCncLib/CNC/CNC.FANUC/CNC.FANUC.vb b/MTC_Adapter/CMSCncLib/CNC/CNC.FANUC/CNC.FANUC.vb
index 6915557..51ced23 100644
--- a/MTC_Adapter/CMSCncLib/CNC/CNC.FANUC/CNC.FANUC.vb
+++ b/MTC_Adapter/CMSCncLib/CNC/CNC.FANUC/CNC.FANUC.vb
@@ -2,1813 +2,1815 @@
Namespace CNC
- Partial Public Class FANUC
- Inherits CNC
+ Partial Public Class FANUC
+ Inherits CNC
- Const N_BYTE_TYPE = 0
- Const N_WORD_TYPE = 1
- Const N_DWORD_TYPE = 2
- Public Const G_PARAM = 0
- Public Const F_PARAM = 1
- Public Const Y_PARAM = 2
- Public Const X_PARAM = 3
- Public Const A_PARAM = 4
- Public Const R_PARAM = 5
- Public Const T_PARAM = 6
- Public Const K_PARAM = 7
- Public Const C_PARAM = 8
- Public Const D_PARAM = 9
- Public Const M_PARAM = 10
- Public Const N_PARAM = 11
- Public Const E_PARAM = 12
- Public Const Z_PARAM = 13
- Public Const CM_PARAM = 100
+ Const N_BYTE_TYPE = 0
+ Const N_WORD_TYPE = 1
+ Const N_DWORD_TYPE = 2
+ Public Const G_PARAM = 0
+ Public Const F_PARAM = 1
+ Public Const Y_PARAM = 2
+ Public Const X_PARAM = 3
+ Public Const A_PARAM = 4
+ Public Const R_PARAM = 5
+ Public Const T_PARAM = 6
+ Public Const K_PARAM = 7
+ Public Const C_PARAM = 8
+ Public Const D_PARAM = 9
+ Public Const M_PARAM = 10
+ Public Const N_PARAM = 11
+ Public Const E_PARAM = 12
+ Public Const Z_PARAM = 13
+ Public Const CM_PARAM = 100
- Const F_MAX_ITEM = 8
- Const F_MAX_MACRO = 5
+ Const F_MAX_ITEM = 8
+ Const F_MAX_MACRO = 5
- Public Enum MemType
- G = 0
- F = 1
- Y = 2
- X = 3
- A = 4
- R = 5
- T = 6
- K = 7
- C = 8
- D = 9
- M = 10
- N = 11
- E = 12
- Z = 13
- CM = 100
- End Enum
+ Public Enum MemType
+ G = 0
+ F = 1
+ Y = 2
+ X = 3
+ A = 4
+ R = 5
+ T = 6
+ K = 7
+ C = 8
+ D = 9
+ M = 10
+ N = 11
+ E = 12
+ Z = 13
+ CM = 100
+ End Enum
- Private _connectionType As ConnectionType
- Private _szIp As String
- Private _nPortIp As Integer
- Private _CncScreen_connectionType As ConnectionType
- Private _nPathActive As Integer
- Private _nMaxPath As Integer
- Private _bMultiProcess As Boolean
- Friend focas As Focas1
- Friend nLibHandle(1) As Integer
- 'Private _err As New Err
+ Private _connectionType As ConnectionType
+ Private _szIp As String
+ Private _nPortIp As Integer
+ Private _CncScreen_connectionType As ConnectionType
+ Private _nPathActive As Integer
+ Private _nMaxPath As Integer
+ Private _bMultiProcess As Boolean
+ Friend focas As Focas1
+ Friend nLibHandle(1) As Integer
+ 'Private _err As New Err
- Private CncScreen_ProcessName As String
+ Private CncScreen_ProcessName As String
- Public Enum ConnectionType
- Ethernet = 0
- Hssb = 1
- End Enum
+ Public Enum ConnectionType
+ Ethernet = 0
+ Hssb = 1
+ End Enum
- Private _Is16Series As Boolean
- Public ReadOnly Property Is16Series() As Boolean
- Get
- Return _Is16Series
- End Get
- End Property
- Private _Is30Series As Boolean = Not _Is16Series
- Public ReadOnly Property Is30Series() As Boolean
- Get
- Return _Is30Series
- End Get
- End Property
+ Private _Is16Series As Boolean
+ Public ReadOnly Property Is16Series() As Boolean
+ Get
+ Return _Is16Series
+ End Get
+ End Property
+ Private _Is30Series As Boolean = Not _Is16Series
+ Public ReadOnly Property Is30Series() As Boolean
+ Get
+ Return _Is30Series
+ End Get
+ End Property
- Public Overrides Property Licenza() As Integer
- Get
- Dim uiLicence As UInteger
- 'leggo dal cn il valore
- Me.F_RW_DWord(R, MemType.D, 7222, uiLicence)
- Return UnsignedToInteger(uiLicence)
- End Get
- Set(ByVal value As Integer)
- 'setto sul cn il valore
- Dim uiLicence As UInteger = IntegerToUnsigned(value)
- Me.F_RW_DWord(W, MemType.D, 7222, uiLicence)
- End Set
- End Property
+ Public Overrides Property Licenza() As Integer
+ Get
+ Dim uiLicence As UInteger
+ 'leggo dal cn il valore
+ Me.F_RW_DWord(R, MemType.D, 7222, uiLicence)
+ Return UnsignedToInteger(uiLicence)
+ End Get
+ Set(ByVal value As Integer)
+ 'setto sul cn il valore
+ Dim uiLicence As UInteger = IntegerToUnsigned(value)
+ Me.F_RW_DWord(W, MemType.D, 7222, uiLicence)
+ End Set
+ End Property
- Public Overrides Property LicenzaScaduta() As Boolean
- Get
- Dim bLicenzaScaduta As Boolean
- 'leggo dal cn il valore
- Me.F_RW_Boolean(R, MemType.D, 7217, 5, bLicenzaScaduta)
- Return bLicenzaScaduta
- End Get
- Set(ByVal value As Boolean)
- 'setto sul cn il valore
- Me.F_RW_Boolean(W, MemType.D, 7217, 5, value)
- End Set
- End Property
+ Public Overrides Property LicenzaScaduta() As Boolean
+ Get
+ Dim bLicenzaScaduta As Boolean
+ 'leggo dal cn il valore
+ Me.F_RW_Boolean(R, MemType.D, 7217, 5, bLicenzaScaduta)
+ Return bLicenzaScaduta
+ End Get
+ Set(ByVal value As Boolean)
+ 'setto sul cn il valore
+ Me.F_RW_Boolean(W, MemType.D, 7217, 5, value)
+ End Set
+ End Property
- Public Sub New(ByRef connectionType As ConnectionType, Optional ByRef szIp As String = "192.168.1.1",
- Optional ByRef nPortIp As Integer = 8193, Optional ByRef CncScreenHssb As ConnectionType = FANUC.ConnectionType.Ethernet)
- MyBase.New()
- _Type = NcType.FANUC
+ Public Sub New(ByRef connectionType As ConnectionType, Optional ByRef szIp As String = "192.168.1.1",
+ Optional ByRef nPortIp As Integer = 8193, Optional ByRef CncScreenHssb As ConnectionType = FANUC.ConnectionType.Ethernet)
+ MyBase.New()
+ _Type = NcType.FANUC
- Try
- focas = New Focas1
- Catch ex As Exception
- MsgBox(ex.Message)
- End Try
+ Try
+ focas = New Focas1
+ Catch ex As Exception
+ MsgBox(ex.Message)
+ End Try
- _connectionType = connectionType
- _szIp = szIp
- _nPortIp = nPortIp
- _CncScreen_connectionType = CncScreenHssb
+ _connectionType = connectionType
+ _szIp = szIp
+ _nPortIp = nPortIp
+ _CncScreen_connectionType = CncScreenHssb
- 'Inizializzo le variabili
- Me._Descrizione = "NC FANUC" & vbNewLine
- Select Case _connectionType
- Case FANUC.ConnectionType.Ethernet
- Me._Descrizione = Me._Descrizione & "Connection type: Ethernet" & vbNewLine &
- "Ip address: " & _szIp & vbNewLine &
- "Port: " & _nPortIp
- Case FANUC.ConnectionType.Hssb
- Me._Descrizione = Me._Descrizione & "Connection type: HSSB" & vbNewLine &
- "Hssb node: " & Hssb_node.ToString
- Case Else
- Me._Descrizione = Me._Descrizione & "Connection type: " & _connectionType.ToString & " !!!"
- End Select
+ 'Inizializzo le variabili
+ Me._Descrizione = "NC FANUC" & vbNewLine
+ Select Case _connectionType
+ Case FANUC.ConnectionType.Ethernet
+ Me._Descrizione = Me._Descrizione & "Connection type: Ethernet" & vbNewLine &
+ "Ip address: " & _szIp & vbNewLine &
+ "Port: " & _nPortIp
+ Case FANUC.ConnectionType.Hssb
+ Me._Descrizione = Me._Descrizione & "Connection type: HSSB" & vbNewLine &
+ "Hssb node: " & Hssb_node.ToString
+ Case Else
+ Me._Descrizione = Me._Descrizione & "Connection type: " & _connectionType.ToString & " !!!"
+ End Select
- Select Case _CncScreen_connectionType
- Case FANUC.ConnectionType.Ethernet
- Me.CncScreen_ProcessName = "CNCScrnE"
- Case FANUC.ConnectionType.Hssb
- Me.CncScreen_ProcessName = "CNCScrn"
- End Select
+ Select Case _CncScreen_connectionType
+ Case FANUC.ConnectionType.Ethernet
+ Me.CncScreen_ProcessName = "CNCScrnE"
+ Case FANUC.ConnectionType.Hssb
+ Me.CncScreen_ProcessName = "CNCScrn"
+ End Select
- End Sub
+ End Sub
- Public Overrides Sub Connect(Optional ByRef szStatus As String = "")
- Dim i As Integer
- Dim nReturn As Integer
+ Public Overrides Sub Connect(Optional ByRef szStatus As String = "")
+ Dim i As Integer
+ Dim nReturn As Integer
- Select Case _connectionType
- Case ConnectionType.Ethernet
- szStatus = "TRY cnc_allclibhndl3 Connect CNC.FANUC Ip=" & _szIp & " Port=" & _nPortIp
- nReturn = Focas1.cnc_allclibhndl3(_szIp, _nPortIp, 5, nLibHandle(1))
- If F_CheckRetError_Cnc(nReturn, "cnc_allclibhndl3 Connect CNC.FANUC") Then
- szStatus = "ERR cnc_allclibhndl3 Connect CNC.FANUC Return=" & nReturn
- Focas1.cnc_freelibhndl(nLibHandle(1))
- _bConnected = False
- Throw New CmsNcException("ERR cnc_allclibhndl3 Connect CNC.FANUC")
- Exit Sub
+ Select Case _connectionType
+ Case ConnectionType.Ethernet
+ szStatus = "TRY cnc_allclibhndl3 Connect CNC.FANUC Ip=" & _szIp & " Port=" & _nPortIp
+ nReturn = Focas1.cnc_allclibhndl3(_szIp, _nPortIp, 5, nLibHandle(1))
+ If F_CheckRetError_Cnc(nReturn, "cnc_allclibhndl3 Connect CNC.FANUC") Then
+ szStatus = "ERR cnc_allclibhndl3 Connect CNC.FANUC Return=" & nReturn
+ Focas1.cnc_freelibhndl(nLibHandle(1))
+ _bConnected = False
+ Throw New CmsNcException("ERR cnc_allclibhndl3 Connect CNC.FANUC")
+ Exit Sub
+ Else
+ 'leggo la serie del cnc
+ szStatus = "TRY F_GetCncSeries Connect CNC.FANUC"
+ F_GetCncSeries()
+ 'leggo il numero di processi e setto il primo
+ szStatus = "TRY cnc_getpath Connect CNC.FANUC"
+ nReturn = Focas1.cnc_getpath(nLibHandle(1), _nPathActive, _nMaxPath)
+ If F_CheckRetError_Cnc(nReturn, "cnc_getpath Connect CNC.FANUC") Then
+ szStatus = "ERR cnc_getpath Connect CNC.FANUC Return=" & nReturn
+ Focas1.cnc_freelibhndl(nLibHandle(1))
+ _bConnected = False
+ Throw New CmsNcException("ERR cnc_getpath Connect CNC.FANUC")
+ Exit Sub
+ Else
+ If _nMaxPath > 1 Then
+ _bMultiProcess = True
+ nReturn = Focas1.cnc_setpath(nLibHandle(1), 1)
+ If F_CheckRetError_Cnc(nReturn, "cnc_setpath Connect CNC.FANUC") Then
+ szStatus = "ERR cnc_setpath Connect CNC.FANUC Return=" & nReturn
+ Focas1.cnc_freelibhndl(nLibHandle(1))
+ _bConnected = False
+ Throw New CmsNcException("ERR cnc_setpath Connect CNC.FANUC")
+ Exit Sub
+ Else
+ ReDim Preserve nLibHandle(_nMaxPath)
+ For i = 2 To _nMaxPath
+ szStatus = "TRY cnc_allclibhndl3 Connect CNC.FANUC to Path " & i & " Ip=" & _szIp & " Port=" & _nPortIp
+ nReturn = Focas1.cnc_allclibhndl3(_szIp, _nPortIp, 5, nLibHandle(i))
+ If F_CheckRetError_Cnc(nReturn, "cnc_allclibhndl3 Connect CNC.FANUC to Path " & i) Then
+ szStatus = "ERR cnc_allclibhndl3 Connect CNC.FANUC to Path " & i & " Return=" & nReturn
+ Focas1.cnc_freelibhndl(nLibHandle(i))
+ _bConnected = False
+ Throw New CmsNcException("ERR cnc_allclibhndl3 Connect CNC.FANUC to Path " & i)
+ Exit Sub
Else
- 'leggo la serie del cnc
- szStatus = "TRY F_GetCncSeries Connect CNC.FANUC"
- F_GetCncSeries()
- 'leggo il numero di processi e setto il primo
- szStatus = "TRY cnc_getpath Connect CNC.FANUC"
- nReturn = Focas1.cnc_getpath(nLibHandle(1), _nPathActive, _nMaxPath)
- If F_CheckRetError_Cnc(nReturn, "cnc_getpath Connect CNC.FANUC") Then
- szStatus = "ERR cnc_getpath Connect CNC.FANUC Return=" & nReturn
- Focas1.cnc_freelibhndl(nLibHandle(1))
- _bConnected = False
- Throw New CmsNcException("ERR cnc_getpath Connect CNC.FANUC")
- Exit Sub
- Else
- If _nMaxPath > 1 Then
- _bMultiProcess = True
- nReturn = Focas1.cnc_setpath(nLibHandle(1), 1)
- If F_CheckRetError_Cnc(nReturn, "cnc_setpath Connect CNC.FANUC") Then
- szStatus = "ERR cnc_setpath Connect CNC.FANUC Return=" & nReturn
- Focas1.cnc_freelibhndl(nLibHandle(1))
- _bConnected = False
- Throw New CmsNcException("ERR cnc_setpath Connect CNC.FANUC")
- Exit Sub
- Else
- ReDim Preserve nLibHandle(_nMaxPath)
- For i = 2 To _nMaxPath
- szStatus = "TRY cnc_allclibhndl3 Connect CNC.FANUC to Path " & i & " Ip=" & _szIp & " Port=" & _nPortIp
- nReturn = Focas1.cnc_allclibhndl3(_szIp, _nPortIp, 5, nLibHandle(i))
- If F_CheckRetError_Cnc(nReturn, "cnc_allclibhndl3 Connect CNC.FANUC to Path " & i) Then
- szStatus = "ERR cnc_allclibhndl3 Connect CNC.FANUC to Path " & i & " Return=" & nReturn
- Focas1.cnc_freelibhndl(nLibHandle(i))
- _bConnected = False
- Throw New CmsNcException("ERR cnc_allclibhndl3 Connect CNC.FANUC to Path " & i)
- Exit Sub
- Else
- nReturn = Focas1.cnc_setpath(nLibHandle(i), i)
- If F_CheckRetError_Cnc(nReturn, "cnc_setpath Connect CNC.FANUCto Path " & i) Then
- szStatus = "ERR cnc_setpath Connect CNC.FANUC to Path " & i & " Return=" & nReturn
- Focas1.cnc_freelibhndl(nLibHandle(i))
- _bConnected = False
- Throw New CmsNcException("ERR cnc_setpath Connect CNC.FANUC to Path " & i)
- Exit Sub
- Else
- _bConnected = True
- End If
- End If
- Next i
- End If
-
- Else
- _bConnected = True
- End If
- End If
-
- End If
-
- Case ConnectionType.Hssb
- Hssb_node = HSSB_DEFAULT_NODE
-
- szStatus = "TRY cnc_allclibhndl2 Connect CNC.FANUC"
- nReturn = Focas1.cnc_allclibhndl2(Hssb_node, nLibHandle(1))
- If F_CheckRetError_Cnc(nReturn, "cnc_allclibhndl2 Connect CNC.FANUC") Then
- szStatus = "ERR cnc_allclibhndl2 Connect CNC.FANUC Return=" & nReturn
- Focas1.cnc_freelibhndl(nLibHandle(1))
+ nReturn = Focas1.cnc_setpath(nLibHandle(i), i)
+ If F_CheckRetError_Cnc(nReturn, "cnc_setpath Connect CNC.FANUCto Path " & i) Then
+ szStatus = "ERR cnc_setpath Connect CNC.FANUC to Path " & i & " Return=" & nReturn
+ Focas1.cnc_freelibhndl(nLibHandle(i))
_bConnected = False
- Throw New CmsNcException("ERR cnc_allclibhndl2 Connect CNC.FANUC")
+ Throw New CmsNcException("ERR cnc_setpath Connect CNC.FANUC to Path " & i)
Exit Sub
- Else
+ Else
_bConnected = True
+ End If
End If
+ Next i
+ End If
+
+ Else
+ _bConnected = True
+ End If
+ End If
+
+ End If
+
+ Case ConnectionType.Hssb
+ Hssb_node = HSSB_DEFAULT_NODE
+
+ szStatus = "TRY cnc_allclibhndl2 Connect CNC.FANUC"
+ nReturn = Focas1.cnc_allclibhndl2(Hssb_node, nLibHandle(1))
+ If F_CheckRetError_Cnc(nReturn, "cnc_allclibhndl2 Connect CNC.FANUC") Then
+ szStatus = "ERR cnc_allclibhndl2 Connect CNC.FANUC Return=" & nReturn
+ Focas1.cnc_freelibhndl(nLibHandle(1))
+ _bConnected = False
+ Throw New CmsNcException("ERR cnc_allclibhndl2 Connect CNC.FANUC")
+ Exit Sub
+ Else
+ _bConnected = True
+ End If
+ End Select
+
+ End Sub
+
+ Public Overrides Sub Disconnect(Optional ByRef szStatus As String = "")
+ Dim i As Integer
+ Dim nReturn As Integer
+
+ For i = 1 To UBound(nLibHandle)
+ nReturn = Focas1.cnc_freelibhndl(nLibHandle(i))
+ If nReturn <> Focas1.EW_OK Then
+ _bConnected = False '?
+ Else
+ _bConnected = False
+ End If
+ Next i
+ End Sub
+
+ '''
+ ''' Get class series of CNC: 16 or 30
+ '''
+ ''' Series
+ ''' After, use Is16Series and Is30Series for discriminate
+ Public Function F_GetCncSeries() As Integer
+ Dim nReturn As Integer
+ Dim nOdb As Focas1.ODBSYS
+ Dim nSeries As Integer
+
+ nOdb = New Focas1.ODBSYS
+ nReturn = Focas1.cnc_sysinfo(nLibHandle(1), nOdb)
+ If F_CheckRetError_Cnc(nReturn, "cnc_sysinfo F_GetCncSeries CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_sysinfo F_GetCncSeries CNC.FANUC")
+ Else
+ nSeries = Val(nOdb.cnc_type)
+ If nSeries >= 30 Then
+ _Is16Series = False
+ _Is30Series = True
+ Else
+ _Is16Series = True
+ _Is30Series = False
+ End If
+ End If
+
+ Return nSeries
+ End Function
+
+ '''
+ ''' Legge le memorie di configurazione dal cn
+ '''
+ Public Overrides Sub GetStaticData()
+ Dim usValue As UShort
+ Dim uiValue As UInteger
+ Dim cVal As Byte
+
+ If Not bStaticDataReaded Then
+
+ Try
+ 'Matricola
+ F_RW_Word(R, MemType.D, 4018, usValue)
+ Me._Matricola = usValue
+ 'Teste
+ F_RW_Word(R, MemType.D, 4032, usValue)
+ Me._Teste = usValue
+ 'Magazzini
+ F_RW_Word(R, MemType.D, 4036, usValue)
+ Me._Magazzini = usValue
+
+ 'Manine per Magazzino
+ ReDim Me._ManineMagazzino(Me._Magazzini - 1)
+ Select Case Settings.MemoryMapping
+ Case MemoryMapping.ElsManager
+ Dim usValueA(8 - 1) As UShort
+ Dim cValueB(12 - 1) As Byte
+ F_RW_Word(R, MemType.D, 4038, usValueA)
+ F_RW_Byte(R, MemType.D, 6780, cValueB)
+ For i = 0 To Me._Magazzini - 1
+ If i < 8 Then
+ _ManineMagazzino(i) = CInt(usValueA(i))
+ Else
+ _ManineMagazzino(i) = CInt(cValueB(i))
+ End If
+ Next
+ Case MemoryMapping.ToolManager,
+ MemoryMapping.ToolTable,
+ MemoryMapping.Default
+ Dim cValue(20 - 1) As Byte
+ F_RW_Byte(False, MemType.D, 3040, cValue)
+ For i = 0 To Me._Magazzini - 1
+ Me._ManineMagazzino(i) = CInt(cValue(i))
+ Next
+ End Select
+
+ 'Magazzini Con Attrezzaggio Automatico (maschera)
+ F_RW_DWord(R, MemType.D, 8819, uiValue)
+ Me._MagazziniConAttrezzaggioAutomatico = UnsignedToInteger(uiValue)
+
+ 'MaxUtensili
+ Dim odbtlinf As Focas1.ODBTLINF = New Focas1.ODBTLINF
+ 'Reads the memory type of tool offset, and the available number of it.
+ Focas1.cnc_rdtofsinfo(nLibHandle(1), odbtlinf)
+ If F_CheckRetError_Cnc(Focas1.cnc_rdtofsinfo(nLibHandle(1), odbtlinf), "cnc_rdtofsinfo GetStaticData CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_rdtofsinfo GetStaticData CNC.FANUC")
+ End If
+
+ Me._MaxUtensiliGestibili = odbtlinf.use_no
+ Me._MaxIdUtensile = odbtlinf.use_no
+
+ 'ZoomSpeed
+ Select Case Settings.MemoryMapping
+ Case MemoryMapping.ElsManager
+ F_RW_Byte(R, MemType.D, 6792, cVal)
+ Case MemoryMapping.ToolManager,
+ MemoryMapping.ToolTable,
+ MemoryMapping.Default
+ F_RW_Byte(R, MemType.D, 3330, cVal)
+ End Select
+ If cVal > 0 And cVal <= 100 Then
+ Me._ZoomSpeed = cVal
+ Else
+ Me._ZoomSpeed = 1
+ End If
+
+ bStaticDataReaded = True
+
+ Catch ex As CmsNcException
+ Me.CncException(ex.Message)
+ End Try
+
+ End If
+ End Sub
+
+ '''
+ ''' Legge il numero del processo attivo
+ '''
+ ''' Processo attivo
+ Public Function GetActivePath() As Integer
+ Dim bValue As Boolean
+ Dim nPathIdx As Integer
+
+ nPathIdx = 1
+
+ F_RW_Boolean(R, MemType.G, 63, 0, bValue)
+ If bValue Then nPathIdx = nPathIdx + 1
+
+ F_RW_Boolean(R, MemType.G, 62, 7, bValue)
+ If bValue Then nPathIdx = nPathIdx + 2
+
+ F_RW_Boolean(R, MemType.G, 408, 1, bValue)
+ If bValue Then nPathIdx = nPathIdx + 4
+
+ F_RW_Boolean(R, MemType.G, 408, 2, bValue)
+ If bValue Then nPathIdx = nPathIdx + 8
+
+ Return nPathIdx
+
+ ''leggo il numero del processo attivo
+ 'Dim nReturn, nPathActive, nMaxPath As Integer
+ 'nReturn = Focas1.cnc_getpath(FANUC_ref.nLibHandle(1), nPathActive, nMaxPath)
+ 'If nPathActive < 1 Or nPathActive > nMaxPath Then nPathActive = 1
+
+ '21/07/2015 Il codice sopra è ereditato da OpPaneled è funzionante
+ ' verificare se questo sopra commentato possa sostituirlo ed è più efficiente
+ End Function
+
+ '''
+ ''' Legge o scrive Boolean da MEMORIE PLC
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Tipo di memoria Fanuc
+ ''' Indice di memoria
+ ''' Bit della memoria
+ ''' Valore da scrivere su scrittura e letto su lettura
+ ''' True se andata a buon fine
+ Public Function F_RW_Boolean(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByVal MemBit As Integer, ByRef Value As Boolean) As Boolean
+ Dim iodb0 As Focas1.IODBPMC0
+ Dim nlength As Integer
+ Dim nReturn As Integer
+ Dim nValue As Short
+
+ iodb0 = New Focas1.IODBPMC0
+ iodb0.type_a = MemType
+ iodb0.type_d = N_BYTE_TYPE
+ iodb0.datano_s = MemIndex
+ iodb0.datano_e = MemIndex
+ nlength = 8 + 1
+
+ 'leggo la memoria
+ nReturn = Focas1.pmc_rdpmcrng(nLibHandle(1), iodb0.type_a, iodb0.type_d, iodb0.datano_s, iodb0.datano_e, nlength, iodb0)
+ If F_CheckRetError_Pmc(nReturn, "pmc_rdpmcrng F_RW_Boolean CNC.FANUC") Then
+ Throw New CmsNcException("ERR pmc_rdpmcrng F_RW_Boolean CNC.FANUC")
+ Return False
+ Else
+ nValue = iodb0.cdata(0)
+
+ If bWrite Then ' *** Write
+ If Value Then 'True
+ nValue = nValue Or (2 ^ MemBit)
+ Else 'False
+ nValue = nValue And Not (2 ^ MemBit)
+ End If
+ iodb0.cdata(0) = nValue
+ nReturn = Focas1.pmc_wrpmcrng(nLibHandle(1), nlength, iodb0)
+ If nReturn = Focas1.EW_SOCKET Then
+ Throw New CmsNcException("ERR pmc_wrpmcrng CNC.FANUC")
+ Return False
+ ElseIf nReturn <> Focas1.EW_OK Then
+ 'CMSCncLib.App.Runtime.Log.WW("ERR pmc_wrpmcrng on F_RW_Boolean CNC.FANUC", "Return=" & nReturn, True)
+ Return False
+ End If
+
+ Else ' ************* Read
+ If (nValue And (2 ^ MemBit)) = (2 ^ MemBit) Then 'True
+ Value = True
+ Else 'False
+ Value = False
+ End If
+ End If
+ End If
+
+ Return True
+ End Function
+
+ '''
+ ''' Legge o scrive Byte da MEMORIE PLC
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Tipo di memoria Fanuc
+ ''' Indice di memoria
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Byte(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value() As Byte) As Boolean
+ Dim iodb0 As Focas1.IODBPMC0
+ Dim nlength As Integer
+ Dim nReturn As Integer
+ Dim nQta As Integer
+ Dim nBlock As Integer
+ Dim nMod As Integer
+
+ If Value Is Nothing Then Throw New InvalidOperationException
+
+ 'Calcolo la dimesione dell'array
+ nBlock = Value.Length \ F_MAX_ITEM
+ nMod = Value.Length Mod F_MAX_ITEM
+ If nMod > 0 Then nBlock += 1
+
+ For b = 0 To nBlock - 1
+ If b < nBlock - 1 Then
+ nQta = F_MAX_ITEM
+ Else
+ nQta = IIf(nMod > 0, nMod, F_MAX_ITEM)
+ End If
+
+ 'Setto il tipo di memoria
+ iodb0 = New Focas1.IODBPMC0
+ iodb0.type_a = MemType
+ iodb0.type_d = N_BYTE_TYPE
+ iodb0.datano_s = MemIndex + b * F_MAX_ITEM
+ iodb0.datano_e = MemIndex + b * F_MAX_ITEM + nQta - 1
+ nlength = 8 + nQta
+
+ If bWrite Then ' *** Write
+ ReDim iodb0.cdata(8 - 1)
+ For i = 0 To nQta - 1
+ iodb0.cdata(i) = Value(i + b * F_MAX_ITEM)
+ Next
+ nReturn = Focas1.pmc_wrpmcrng(nLibHandle(1), nlength, iodb0)
+ If F_CheckRetError_Pmc(nReturn, "pmc_wrpmcrng F_RW_Byte CNC.FANUC") Then
+ Throw New CmsNcException("ERR pmc_wrpmcrng F_RW_Byte CNC.FANUC")
+ Return False
+ End If
+
+ Else ' ************* Read
+ nReturn = Focas1.pmc_rdpmcrng(nLibHandle(1), iodb0.type_a, iodb0.type_d, iodb0.datano_s, iodb0.datano_e, nlength, iodb0)
+ If F_CheckRetError_Pmc(nReturn, "pmc_rdpmcrng F_RW_Byte CNC.FANUC") Then
+ Throw New CmsNcException("ERR pmc_rdpmcrng F_RW_Byte CNC.FANUC")
+ Return False
+ Else
+ For i = 0 To nQta - 1
+ Value(i + b * F_MAX_ITEM) = iodb0.cdata(i)
+ Next
+ End If
+ End If
+ Next
+
+ Return True
+ End Function
+
+ '''
+ ''' Legge o scrive Byte da MEMORIE PLC
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Tipo di memoria Fanuc
+ ''' Indice di memoria
+ ''' Valore da scrivere su scrittura o letto su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Byte(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value As Byte) As Boolean
+ Dim bRet As Boolean
+ Dim cValue(0) As Byte
+ If bWrite Then cValue(0) = Value
+ bRet = F_RW_Byte(bWrite, MemType, MemIndex, cValue)
+ If Not bWrite Then Value = cValue(0)
+ Return bRet
+ End Function
+
+ '''
+ ''' Legge o scrive Word da MEMORIE PLC
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Tipo di memoria Fanuc
+ ''' Indice di memoria
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Word(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value() As UShort) As Boolean
+ Dim iodb1 As Focas1.IODBPMC1
+ Dim nlength As Integer
+ Dim nReturn As Integer
+ Dim nQta As Integer
+ Dim nBlock As Integer
+ Dim nMod As Integer
+
+ If Value Is Nothing Then Throw New InvalidOperationException
+
+ 'Calcolo la dimesione dell'array
+ nBlock = Value.Length \ F_MAX_ITEM
+ nMod = Value.Length Mod F_MAX_ITEM
+ If nMod > 0 Then nBlock += 1
+
+ For b = 0 To nBlock - 1
+ If b < nBlock - 1 Then
+ nQta = F_MAX_ITEM
+ Else
+ nQta = IIf(nMod > 0, nMod, F_MAX_ITEM)
+ End If
+
+ 'Setto il tipo di memoria
+ iodb1 = New Focas1.IODBPMC1
+ iodb1.type_a = MemType
+ iodb1.type_d = N_WORD_TYPE
+ iodb1.datano_s = MemIndex + (b * F_MAX_ITEM * 2)
+ iodb1.datano_e = MemIndex + (b * F_MAX_ITEM * 2) + (nQta * 2) - 1
+ nlength = 8 + (nQta * 2)
+
+ If bWrite Then ' *** Write
+ ReDim iodb1.idata(8 - 1)
+ For i = 0 To nQta - 1
+ iodb1.idata(i) = Value(i + b * F_MAX_ITEM)
+ Next
+ nReturn = Focas1.pmc_wrpmcrng(nLibHandle(1), nlength, iodb1)
+ If F_CheckRetError_Pmc(nReturn, "pmc_wrpmcrng F_RW_Word CNC.FANUC") Then
+ Throw New CmsNcException("ERR pmc_wrpmcrng F_RW_Word CNC.FANUC")
+ Return False
+ End If
+
+ Else ' ************* Read
+ nReturn = Focas1.pmc_rdpmcrng(nLibHandle(1), iodb1.type_a, iodb1.type_d, iodb1.datano_s, iodb1.datano_e, nlength, iodb1)
+ If F_CheckRetError_Pmc(nReturn, "pmc_rdpmcrng F_RW_Word CNC.FANUC") Then
+ Throw New CmsNcException("ERR pmc_rdpmcrng F_RW_Word CNC.FANUC")
+ Return False
+ Else
+ For i = 0 To nQta - 1
+ Value(i + b * F_MAX_ITEM) = iodb1.idata(i)
+ Next
+ End If
+ End If
+ Next
+
+ Return True
+ End Function
+
+ '''
+ ''' Legge o scrive Short da MEMORIE PLC
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Tipo di memoria Fanuc
+ ''' Indice di memoria
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Short(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value() As Short) As Boolean
+ Dim bReturn As Boolean
+ Dim usValue(Value.Length - 1) As UShort
+
+ If bWrite Then ' *** Write
+ For i = 0 To Value.Length - 1
+ usValue(i) = ShortToUnsigned(Value(i))
+ Next
+ bReturn = F_RW_Word(bWrite, MemType, MemIndex, usValue)
+
+ Else ' ************* Read
+ bReturn = F_RW_Word(bWrite, MemType, MemIndex, usValue)
+ For i = 0 To Value.Length - 1
+ Value(i) = UnsignedToShort(usValue(i))
+ Next
+ End If
+
+ Return bReturn
+ End Function
+
+ '''
+ ''' Legge o scrive Word da MEMORIE PLC
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Tipo di memoria Fanuc
+ ''' Indice di memoria
+ ''' Valore da scrivere su scrittura o letto su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Word(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value As UShort) As Boolean
+ Dim bRet As Boolean
+ Dim usValue(0) As UShort
+ If bWrite Then usValue(0) = Value
+ bRet = F_RW_Word(bWrite, MemType, MemIndex, usValue)
+ If Not bWrite Then Value = usValue(0)
+ Return bRet
+ End Function
+
+ '''
+ ''' Legge o scrive Short da MEMORIE PLC
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Tipo di memoria Fanuc
+ ''' Indice di memoria
+ ''' Valore da scrivere su scrittura o letto su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Short(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value As Short) As Boolean
+ Dim bRet As Boolean
+ Dim sValue(0) As Short
+ If bWrite Then sValue(0) = Value
+ bRet = F_RW_Short(bWrite, MemType, MemIndex, sValue)
+ If Not bWrite Then Value = sValue(0)
+ Return bRet
+ End Function
+
+ '''
+ ''' Legge DWord da MEMORIE PLC
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Tipo di memoria Fanuc
+ ''' Indice di memoria
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_DWord(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value() As UInteger) As Boolean
+ Dim iodb2 As Focas1.IODBPMC2
+ Dim nlength As Integer
+ Dim nReturn As Integer
+ Dim nQta As Integer
+ Dim nBlock As Integer
+ Dim nMod As Integer
+
+ If Value Is Nothing Then Throw New InvalidOperationException
+
+ 'Calcolo la dimesione dell'array
+ nBlock = Value.Length \ F_MAX_ITEM
+ nMod = Value.Length Mod F_MAX_ITEM
+ If nMod > 0 Then nBlock += 1
+
+ For b = 0 To nBlock - 1
+ If b < nBlock - 1 Then
+ nQta = F_MAX_ITEM
+ Else
+ nQta = IIf(nMod > 0, nMod, F_MAX_ITEM)
+ End If
+
+ 'Setto il tipo di memoria
+ iodb2 = New Focas1.IODBPMC2
+ iodb2.type_a = MemType
+ iodb2.type_d = N_DWORD_TYPE
+ iodb2.datano_s = MemIndex + (b * F_MAX_ITEM * 4)
+ iodb2.datano_e = MemIndex + (b * F_MAX_ITEM * 4) + (nQta * 4) - 1
+ nlength = 8 + (nQta * 4)
+
+ If bWrite Then ' *** Write
+ ReDim iodb2.ldata(8 - 1)
+ For i = 0 To nQta - 1
+ iodb2.ldata(i) = Value(i + b * F_MAX_ITEM)
+ Next
+ nReturn = Focas1.pmc_wrpmcrng(nLibHandle(1), nlength, iodb2)
+ If F_CheckRetError_Pmc(nReturn, "pmc_wrpmcrng F_RW_DWord CNC.FANUC") Then
+ Throw New CmsNcException("ERR pmc_wrpmcrng F_RW_DWord CNC.FANUC")
+ Return False
+ End If
+
+ Else ' ************* Read
+ nReturn = Focas1.pmc_rdpmcrng(nLibHandle(1), iodb2.type_a, iodb2.type_d, iodb2.datano_s, iodb2.datano_e, nlength, iodb2)
+ If F_CheckRetError_Pmc(nReturn, "pmc_rdpmcrng F_RW_DWord CNC.FANUC") Then
+ Throw New CmsNcException("ERR pmc_rdpmcrng F_RW_DWord CNC.FANUC")
+ Return False
+ Else
+ For i = 0 To nQta - 1
+ Value(i + b * F_MAX_ITEM) = iodb2.ldata(i)
+ Next
+ End If
+ End If
+ Next
+
+ Return True
+ End Function
+
+ '''
+ ''' Legge DWord da MEMORIE PLC
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Tipo di memoria Fanuc
+ ''' Indice di memoria
+ ''' Valore da scrivere su scrittura o letto su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_DWord(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value As UInteger) As Boolean
+ Dim bRet As Boolean
+ Dim uiValue(0) As UInteger
+ If bWrite Then uiValue(0) = Value
+ bRet = F_RW_DWord(bWrite, MemType, MemIndex, uiValue)
+ If Not bWrite Then Value = uiValue(0)
+ Return bRet
+ End Function
+
+ '''
+ ''' Legge Integer da MEMORIE PLC
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Tipo di memoria Fanuc
+ ''' Indice di memoria
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Integer(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value() As Integer) As Boolean
+ Dim iodb2 As Focas1.IODBPMC2
+ Dim nlength As Integer
+ Dim nReturn As Integer
+ Dim nQta As Integer
+ Dim nBlock As Integer
+ Dim nMod As Integer
+
+ If Value Is Nothing Then Throw New InvalidOperationException
+
+ 'Calcolo la dimesione dell'array
+ nBlock = Value.Length \ F_MAX_ITEM
+ nMod = Value.Length Mod F_MAX_ITEM
+ If nMod > 0 Then nBlock += 1
+
+ For b = 0 To nBlock - 1
+ If b < nBlock - 1 Then
+ nQta = F_MAX_ITEM
+ Else
+ nQta = IIf(nMod > 0, nMod, F_MAX_ITEM)
+ End If
+
+ 'Setto il tipo di memoria
+ iodb2 = New Focas1.IODBPMC2
+ iodb2.type_a = MemType
+ iodb2.type_d = N_DWORD_TYPE
+ iodb2.datano_s = MemIndex + (b * F_MAX_ITEM * 4)
+ iodb2.datano_e = MemIndex + (b * F_MAX_ITEM * 4) + (nQta * 4) - 1
+ nlength = 8 + (nQta * 4)
+
+ If bWrite Then ' *** Write
+ ReDim iodb2.ldata(8 - 1)
+ For i = 0 To nQta - 1
+ iodb2.ldata(i) = Value(i + b * F_MAX_ITEM)
+ Next
+ nReturn = Focas1.pmc_wrpmcrng(nLibHandle(1), nlength, iodb2)
+ If F_CheckRetError_Pmc(nReturn, "pmc_wrpmcrng F_RW_Integer CNC.FANUC") Then
+ Throw New CmsNcException("ERR pmc_wrpmcrng F_RW_Integer CNC.FANUC")
+ Return False
+ End If
+
+ Else ' ************* Read
+ nReturn = Focas1.pmc_rdpmcrng(nLibHandle(1), iodb2.type_a, iodb2.type_d, iodb2.datano_s, iodb2.datano_e, nlength, iodb2)
+ If F_CheckRetError_Pmc(nReturn, "pmc_rdpmcrng F_RW_Integer CNC.FANUC") Then
+ Throw New CmsNcException("ERR pmc_rdpmcrng F_RW_Integer CNC.FANUC")
+ Return False
+ Else
+ For i = 0 To nQta - 1
+ Value(i + b * F_MAX_ITEM) = WordsToInteger(iodb2.ldata(i) And &HFFFF, (iodb2.ldata(i) And &HFFFF0000) >> 16)
+ Next
+ End If
+ End If
+ Next
+
+ Return True
+ End Function
+
+ '''
+ ''' Legge Integer da MEMORIE PLC
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Tipo di memoria Fanuc
+ ''' Indice di memoria
+ ''' Valore da scrivere su scrittura o letto su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Integer(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value As Integer) As Boolean
+ Dim bRet As Boolean
+ Dim iValue(0) As Integer
+ If bWrite Then iValue(0) = Value
+ bRet = F_RW_Integer(bWrite, MemType, MemIndex, iValue)
+ If Not bWrite Then Value = iValue(0)
+ Return bRet
+ End Function
+
+ '''
+ ''' Legge o scrive Length and Radius Offset da tabella Utensili CN
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Numero dell'offset utensile
+ Public Overloads Sub F_RW_ToolOffset(ByVal bWrite As Boolean, ByVal ToolOffsetNumber As Integer, ByRef CutterRadius_Wear As Double, ByRef CutterRadius_Geometry As Double, ByRef ToolLenght_Wear As Double, ByRef ToolLenght_Geometry As Double)
+ Dim iodbpsd_1 As Focas1.IODBPSD_1
+ Dim odbtofs As Focas1.ODBTOFS
+ Dim nReturn As Integer
+ Dim bNcInInch As Boolean
+ Dim bTtInInch As Boolean
+ Dim valid_fig As Short
+ Dim dec_fig_in(31) As Short
+ Dim dec_fig_out(31) As Short
+
+ iodbpsd_1 = New Focas1.IODBPSD_1
+ odbtofs = New Focas1.ODBTOFS
+
+ 'Leggo se il CN è impostato in Inch (parametro 0.2)
+ nReturn = Focas1.cnc_rdparam(nLibHandle(1), 0, 0, 4 + 1, iodbpsd_1)
+ If F_CheckRetError_Cnc(nReturn, "cnc_rdparam F_RW_LengthOffset CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_rdparam F_RW_LengthOffset CNC.FANUC")
+ End If
+ bNcInInch = (iodbpsd_1.cdata And MASK_BIT2) = MASK_BIT2
+
+ 'Leggo se ToolTable è impostato in Inch
+ bTtInInch = Config.Options.CurrentOptions.ToolTable_Inch
+
+ 'leggo le cifre decimali
+ nReturn = Focas1.cnc_getfigure(nLibHandle(1), 1, valid_fig, dec_fig_in, dec_fig_out)
+ If F_CheckRetError_Cnc(nReturn, "cnc_getfigure F_RW_LengthOffset CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_getfigure F_RW_LengthOffset CNC.FANUC")
+ End If
+
+ If bWrite Then ' *** Write
+ For i = 0 To 3
+ Dim dblTmp As Double
+ Dim nTmp As Integer
+ Select Case i
+ Case 0 : dblTmp = CutterRadius_Wear
+ Case 1 : dblTmp = CutterRadius_Geometry
+ Case 2 : dblTmp = ToolLenght_Wear
+ Case 3 : dblTmp = ToolLenght_Geometry
+ End Select
+ 'moltiplico per le cifre decimali
+ dblTmp *= 10 ^ dec_fig_in(0)
+ 'riporto all'unità di misura di Nc
+ If bNcInInch And Not bTtInInch Then
+ nTmp = dblTmp / 25.4
+ ElseIf Not bNcInInch And bTtInInch Then
+ nTmp = dblTmp * 25.4
+ Else
+ nTmp = dblTmp
+ End If
+ nReturn = Focas1.cnc_wrtofs(nLibHandle(1), ToolOffsetNumber, i, 8, nTmp)
+ If F_CheckRetError_Pmc(nReturn, "cnc_wrtofs F_RW_ToolOffset CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_wrtofs F_RW_ToolOffset CNC.FANUC")
+ End If
+ Next
+
+ Else ' ************* Read
+ For i = 0 To 3
+ nReturn = Focas1.cnc_rdtofs(nLibHandle(1), ToolOffsetNumber, i, 8, odbtofs)
+ If F_CheckRetError_Pmc(nReturn, "cnc_rdtofs F_RW_ToolOffset CNC.FANUC") OrElse (odbtofs.datano <> ToolOffsetNumber Or odbtofs.type <> i) Then
+ Throw New CmsNcException("ERR cnc_rdtofs F_RW_ToolOffset CNC.FANUC")
+ Else
+ Dim dblTmp As Double
+ 'riporto all'unità di misura di ToolTable
+ If bNcInInch And Not bTtInInch Then
+ dblTmp = odbtofs.data * 25.4
+ ElseIf Not bNcInInch And bTtInInch Then
+ dblTmp = odbtofs.data / 25.4
+ Else
+ dblTmp = odbtofs.data
+ End If
+ 'divido per le cifre decimali
+ dblTmp /= 10 ^ dec_fig_in(0)
+ 'memorizzo il dato
+ Select Case i
+ Case 0 : CutterRadius_Wear = dblTmp
+ Case 1 : CutterRadius_Geometry = dblTmp
+ Case 2 : ToolLenght_Wear = dblTmp
+ Case 3 : ToolLenght_Geometry = dblTmp
End Select
-
- End Sub
-
- Public Overrides Sub Disconnect(Optional ByRef szStatus As String = "")
- Dim i As Integer
- Dim nReturn As Integer
-
- For i = 1 To UBound(nLibHandle)
- nReturn = Focas1.cnc_freelibhndl(nLibHandle(i))
- If nReturn <> Focas1.EW_OK Then
- _bConnected = False '?
- Else
- _bConnected = False
- End If
- Next i
- End Sub
-
- '''
- ''' Get class series of CNC: 16 or 30
- '''
- ''' Series
- ''' After, use Is16Series and Is30Series for discriminate
- Public Function F_GetCncSeries() As Integer
- Dim nReturn As Integer
- Dim nOdb As Focas1.ODBSYS
- Dim nSeries As Integer
-
- nOdb = New Focas1.ODBSYS
- nReturn = Focas1.cnc_sysinfo(nLibHandle(1), nOdb)
- If F_CheckRetError_Cnc(nReturn, "cnc_sysinfo F_GetCncSeries CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_sysinfo F_GetCncSeries CNC.FANUC")
- Else
- nSeries = Val(nOdb.cnc_type)
- If nSeries >= 30 Then
- _Is16Series = False
- _Is30Series = True
- Else
- _Is16Series = True
- _Is30Series = False
- End If
- End If
-
- Return nSeries
- End Function
-
- '''
- ''' Legge le memorie di configurazione dal cn
- '''
- Public Overrides Sub GetStaticData()
- Dim usValue As UShort
- Dim uiValue As UInteger
- Dim cVal As Byte
-
- If Not bStaticDataReaded Then
-
- Try
- 'Matricola
- F_RW_Word(R, MemType.D, 4018, usValue)
- Me._Matricola = usValue
- 'Teste
- F_RW_Word(R, MemType.D, 4032, usValue)
- Me._Teste = usValue
- 'Magazzini
- F_RW_Word(R, MemType.D, 4036, usValue)
- Me._Magazzini = usValue
-
- 'Manine per Magazzino
- ReDim Me._ManineMagazzino(Me._Magazzini - 1)
- Select Case Settings.MemoryMapping
- Case MemoryMapping.ElsManager
- Dim usValueA(8 - 1) As UShort
- Dim cValueB(12 - 1) As Byte
- F_RW_Word(R, MemType.D, 4038, usValueA)
- F_RW_Byte(R, MemType.D, 6780, cValueB)
- For i = 0 To Me._Magazzini - 1
- If i < 8 Then
- _ManineMagazzino(i) = CInt(usValueA(i))
- Else
- _ManineMagazzino(i) = CInt(cValueB(i))
- End If
- Next
- Case MemoryMapping.ToolManager,
- MemoryMapping.ToolTable,
- MemoryMapping.Default
- Dim cValue(20 - 1) As Byte
- F_RW_Byte(False, MemType.D, 3040, cValue)
- For i = 0 To Me._Magazzini - 1
- Me._ManineMagazzino(i) = CInt(cValue(i))
- Next
- End Select
-
- 'Magazzini Con Attrezzaggio Automatico (maschera)
- F_RW_DWord(R, MemType.D, 8819, uiValue)
- Me._MagazziniConAttrezzaggioAutomatico = UnsignedToInteger(uiValue)
-
- 'MaxUtensili
- Dim odbtlinf As Focas1.ODBTLINF = New Focas1.ODBTLINF
- 'Reads the memory type of tool offset, and the available number of it.
- Focas1.cnc_rdtofsinfo(nLibHandle(1), odbtlinf)
- If F_CheckRetError_Cnc(Focas1.cnc_rdtofsinfo(nLibHandle(1), odbtlinf), "cnc_rdtofsinfo GetStaticData CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_rdtofsinfo GetStaticData CNC.FANUC")
- End If
-
- Me._MaxUtensiliGestibili = odbtlinf.use_no
- Me._MaxIdUtensile = odbtlinf.use_no
-
- 'ZoomSpeed
- Select Case Settings.MemoryMapping
- Case MemoryMapping.ElsManager
- F_RW_Byte(R, MemType.D, 6792, cVal)
- Case MemoryMapping.ToolManager,
- MemoryMapping.ToolTable,
- MemoryMapping.Default
- F_RW_Byte(R, MemType.D, 3330, cVal)
- End Select
- If cVal > 0 And cVal <= 100 Then
- Me._ZoomSpeed = cVal
- Else
- Me._ZoomSpeed = 1
- End If
-
- bStaticDataReaded = True
-
- Catch ex As CmsNcException
- Me.CncException(ex.Message)
- End Try
-
- End If
- End Sub
-
- '''
- ''' Legge il numero del processo attivo
- '''
- ''' Processo attivo
- Public Function GetActivePath() As Integer
- Dim bValue As Boolean
- Dim nPathIdx As Integer
-
- nPathIdx = 1
-
- F_RW_Boolean(R, MemType.G, 63, 0, bValue)
- If bValue Then nPathIdx = nPathIdx + 1
-
- F_RW_Boolean(R, MemType.G, 62, 7, bValue)
- If bValue Then nPathIdx = nPathIdx + 2
-
- F_RW_Boolean(R, MemType.G, 408, 1, bValue)
- If bValue Then nPathIdx = nPathIdx + 4
-
- F_RW_Boolean(R, MemType.G, 408, 2, bValue)
- If bValue Then nPathIdx = nPathIdx + 8
-
- Return nPathIdx
-
- ''leggo il numero del processo attivo
- 'Dim nReturn, nPathActive, nMaxPath As Integer
- 'nReturn = Focas1.cnc_getpath(FANUC_ref.nLibHandle(1), nPathActive, nMaxPath)
- 'If nPathActive < 1 Or nPathActive > nMaxPath Then nPathActive = 1
-
- '21/07/2015 Il codice sopra è ereditato da OpPaneled è funzionante
- ' verificare se questo sopra commentato possa sostituirlo ed è più efficiente
- End Function
-
- '''
- ''' Legge o scrive Boolean da MEMORIE PLC
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Tipo di memoria Fanuc
- ''' Indice di memoria
- ''' Bit della memoria
- ''' Valore da scrivere su scrittura e letto su lettura
- ''' True se andata a buon fine
- Public Function F_RW_Boolean(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByVal MemBit As Integer, ByRef Value As Boolean) As Boolean
- Dim iodb0 As Focas1.IODBPMC0
- Dim nlength As Integer
- Dim nReturn As Integer
- Dim nValue As Short
-
- iodb0 = New Focas1.IODBPMC0
- iodb0.type_a = MemType
- iodb0.type_d = N_BYTE_TYPE
- iodb0.datano_s = MemIndex
- iodb0.datano_e = MemIndex
- nlength = 8 + 1
-
- 'leggo la memoria
- nReturn = Focas1.pmc_rdpmcrng(nLibHandle(1), iodb0.type_a, iodb0.type_d, iodb0.datano_s, iodb0.datano_e, nlength, iodb0)
- If F_CheckRetError_Pmc(nReturn, "pmc_rdpmcrng F_RW_Boolean CNC.FANUC") Then
- Throw New CmsNcException("ERR pmc_rdpmcrng F_RW_Boolean CNC.FANUC")
- Return False
- Else
- nValue = iodb0.cdata(0)
-
- If bWrite Then ' *** Write
- If Value Then 'True
- nValue = nValue Or (2 ^ MemBit)
- Else 'False
- nValue = nValue And Not (2 ^ MemBit)
- End If
- iodb0.cdata(0) = nValue
- nReturn = Focas1.pmc_wrpmcrng(nLibHandle(1), nlength, iodb0)
- If nReturn = Focas1.EW_SOCKET Then
- Throw New CmsNcException("ERR pmc_wrpmcrng CNC.FANUC")
- Return False
- ElseIf nReturn <> Focas1.EW_OK Then
- 'CMSCncLib.App.Runtime.Log.WW("ERR pmc_wrpmcrng on F_RW_Boolean CNC.FANUC", "Return=" & nReturn, True)
- Return False
- End If
-
- Else ' ************* Read
- If (nValue And (2 ^ MemBit)) = (2 ^ MemBit) Then 'True
- Value = True
- Else 'False
- Value = False
- End If
- End If
- End If
-
- Return True
- End Function
-
- '''
- ''' Legge o scrive Byte da MEMORIE PLC
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Tipo di memoria Fanuc
- ''' Indice di memoria
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Byte(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value() As Byte) As Boolean
- Dim iodb0 As Focas1.IODBPMC0
- Dim nlength As Integer
- Dim nReturn As Integer
- Dim nQta As Integer
- Dim nBlock As Integer
- Dim nMod As Integer
-
- If Value Is Nothing Then Throw New InvalidOperationException
-
- 'Calcolo la dimesione dell'array
- nBlock = Value.Length \ F_MAX_ITEM
- nMod = Value.Length Mod F_MAX_ITEM
- If nMod > 0 Then nBlock += 1
-
- For b = 0 To nBlock - 1
- If b < nBlock - 1 Then
- nQta = F_MAX_ITEM
- Else
- nQta = IIf(nMod > 0, nMod, F_MAX_ITEM)
- End If
-
- 'Setto il tipo di memoria
- iodb0 = New Focas1.IODBPMC0
- iodb0.type_a = MemType
- iodb0.type_d = N_BYTE_TYPE
- iodb0.datano_s = MemIndex + b * F_MAX_ITEM
- iodb0.datano_e = MemIndex + b * F_MAX_ITEM + nQta - 1
- nlength = 8 + nQta
-
- If bWrite Then ' *** Write
- ReDim iodb0.cdata(8 - 1)
- For i = 0 To nQta - 1
- iodb0.cdata(i) = Value(i + b * F_MAX_ITEM)
- Next
- nReturn = Focas1.pmc_wrpmcrng(nLibHandle(1), nlength, iodb0)
- If F_CheckRetError_Pmc(nReturn, "pmc_wrpmcrng F_RW_Byte CNC.FANUC") Then
- Throw New CmsNcException("ERR pmc_wrpmcrng F_RW_Byte CNC.FANUC")
- Return False
- End If
-
- Else ' ************* Read
- nReturn = Focas1.pmc_rdpmcrng(nLibHandle(1), iodb0.type_a, iodb0.type_d, iodb0.datano_s, iodb0.datano_e, nlength, iodb0)
- If F_CheckRetError_Pmc(nReturn, "pmc_rdpmcrng F_RW_Byte CNC.FANUC") Then
- Throw New CmsNcException("ERR pmc_rdpmcrng F_RW_Byte CNC.FANUC")
- Return False
- Else
- For i = 0 To nQta - 1
- Value(i + b * F_MAX_ITEM) = iodb0.cdata(i)
- Next
- End If
- End If
- Next
-
- Return True
- End Function
-
- '''
- ''' Legge o scrive Byte da MEMORIE PLC
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Tipo di memoria Fanuc
- ''' Indice di memoria
- ''' Valore da scrivere su scrittura o letto su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Byte(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value As Byte) As Boolean
- Dim bRet As Boolean
- Dim cValue(0) As Byte
- If bWrite Then cValue(0) = Value
- bRet = F_RW_Byte(bWrite, MemType, MemIndex, cValue)
- If Not bWrite Then Value = cValue(0)
- Return bRet
- End Function
-
- '''
- ''' Legge o scrive Word da MEMORIE PLC
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Tipo di memoria Fanuc
- ''' Indice di memoria
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Word(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value() As UShort) As Boolean
- Dim iodb1 As Focas1.IODBPMC1
- Dim nlength As Integer
- Dim nReturn As Integer
- Dim nQta As Integer
- Dim nBlock As Integer
- Dim nMod As Integer
-
- If Value Is Nothing Then Throw New InvalidOperationException
-
- 'Calcolo la dimesione dell'array
- nBlock = Value.Length \ F_MAX_ITEM
- nMod = Value.Length Mod F_MAX_ITEM
- If nMod > 0 Then nBlock += 1
-
- For b = 0 To nBlock - 1
- If b < nBlock - 1 Then
- nQta = F_MAX_ITEM
- Else
- nQta = IIf(nMod > 0, nMod, F_MAX_ITEM)
- End If
-
- 'Setto il tipo di memoria
- iodb1 = New Focas1.IODBPMC1
- iodb1.type_a = MemType
- iodb1.type_d = N_WORD_TYPE
- iodb1.datano_s = MemIndex + (b * F_MAX_ITEM * 2)
- iodb1.datano_e = MemIndex + (b * F_MAX_ITEM * 2) + (nQta * 2) - 1
- nlength = 8 + (nQta * 2)
-
- If bWrite Then ' *** Write
- ReDim iodb1.idata(8 - 1)
- For i = 0 To nQta - 1
- iodb1.idata(i) = Value(i + b * F_MAX_ITEM)
- Next
- nReturn = Focas1.pmc_wrpmcrng(nLibHandle(1), nlength, iodb1)
- If F_CheckRetError_Pmc(nReturn, "pmc_wrpmcrng F_RW_Word CNC.FANUC") Then
- Throw New CmsNcException("ERR pmc_wrpmcrng F_RW_Word CNC.FANUC")
- Return False
- End If
-
- Else ' ************* Read
- nReturn = Focas1.pmc_rdpmcrng(nLibHandle(1), iodb1.type_a, iodb1.type_d, iodb1.datano_s, iodb1.datano_e, nlength, iodb1)
- If F_CheckRetError_Pmc(nReturn, "pmc_rdpmcrng F_RW_Word CNC.FANUC") Then
- Throw New CmsNcException("ERR pmc_rdpmcrng F_RW_Word CNC.FANUC")
- Return False
- Else
- For i = 0 To nQta - 1
- Value(i + b * F_MAX_ITEM) = iodb1.idata(i)
- Next
- End If
- End If
- Next
-
- Return True
- End Function
-
- '''
- ''' Legge o scrive Short da MEMORIE PLC
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Tipo di memoria Fanuc
- ''' Indice di memoria
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Short(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value() As Short) As Boolean
- Dim bReturn As Boolean
- Dim usValue(Value.Length - 1) As UShort
-
- If bWrite Then ' *** Write
- For i = 0 To Value.Length - 1
- usValue(i) = ShortToUnsigned(Value(i))
- Next
- bReturn = F_RW_Word(bWrite, MemType, MemIndex, usValue)
-
- Else ' ************* Read
- bReturn = F_RW_Word(bWrite, MemType, MemIndex, usValue)
- For i = 0 To Value.Length - 1
- Value(i) = UnsignedToShort(usValue(i))
- Next
- End If
-
- Return bReturn
- End Function
-
- '''
- ''' Legge o scrive Word da MEMORIE PLC
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Tipo di memoria Fanuc
- ''' Indice di memoria
- ''' Valore da scrivere su scrittura o letto su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Word(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value As UShort) As Boolean
- Dim bRet As Boolean
- Dim usValue(0) As UShort
- If bWrite Then usValue(0) = Value
- bRet = F_RW_Word(bWrite, MemType, MemIndex, usValue)
- If Not bWrite Then Value = usValue(0)
- Return bRet
- End Function
-
- '''
- ''' Legge o scrive Short da MEMORIE PLC
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Tipo di memoria Fanuc
- ''' Indice di memoria
- ''' Valore da scrivere su scrittura o letto su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Short(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value As Short) As Boolean
- Dim bRet As Boolean
- Dim sValue(0) As Short
- If bWrite Then sValue(0) = Value
- bRet = F_RW_Short(bWrite, MemType, MemIndex, sValue)
- If Not bWrite Then Value = sValue(0)
- Return bRet
- End Function
-
- '''
- ''' Legge DWord da MEMORIE PLC
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Tipo di memoria Fanuc
- ''' Indice di memoria
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_DWord(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value() As UInteger) As Boolean
- Dim iodb2 As Focas1.IODBPMC2
- Dim nlength As Integer
- Dim nReturn As Integer
- Dim nQta As Integer
- Dim nBlock As Integer
- Dim nMod As Integer
-
- If Value Is Nothing Then Throw New InvalidOperationException
-
- 'Calcolo la dimesione dell'array
- nBlock = Value.Length \ F_MAX_ITEM
- nMod = Value.Length Mod F_MAX_ITEM
- If nMod > 0 Then nBlock += 1
-
- For b = 0 To nBlock - 1
- If b < nBlock - 1 Then
- nQta = F_MAX_ITEM
- Else
- nQta = IIf(nMod > 0, nMod, F_MAX_ITEM)
- End If
-
- 'Setto il tipo di memoria
- iodb2 = New Focas1.IODBPMC2
- iodb2.type_a = MemType
- iodb2.type_d = N_DWORD_TYPE
- iodb2.datano_s = MemIndex + (b * F_MAX_ITEM * 4)
- iodb2.datano_e = MemIndex + (b * F_MAX_ITEM * 4) + (nQta * 4) - 1
- nlength = 8 + (nQta * 4)
-
- If bWrite Then ' *** Write
- ReDim iodb2.ldata(8 - 1)
- For i = 0 To nQta - 1
- iodb2.ldata(i) = Value(i + b * F_MAX_ITEM)
- Next
- nReturn = Focas1.pmc_wrpmcrng(nLibHandle(1), nlength, iodb2)
- If F_CheckRetError_Pmc(nReturn, "pmc_wrpmcrng F_RW_DWord CNC.FANUC") Then
- Throw New CmsNcException("ERR pmc_wrpmcrng F_RW_DWord CNC.FANUC")
- Return False
- End If
-
- Else ' ************* Read
- nReturn = Focas1.pmc_rdpmcrng(nLibHandle(1), iodb2.type_a, iodb2.type_d, iodb2.datano_s, iodb2.datano_e, nlength, iodb2)
- If F_CheckRetError_Pmc(nReturn, "pmc_rdpmcrng F_RW_DWord CNC.FANUC") Then
- Throw New CmsNcException("ERR pmc_rdpmcrng F_RW_DWord CNC.FANUC")
- Return False
- Else
- For i = 0 To nQta - 1
- Value(i + b * F_MAX_ITEM) = iodb2.ldata(i)
- Next
- End If
- End If
- Next
-
- Return True
- End Function
-
- '''
- ''' Legge DWord da MEMORIE PLC
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Tipo di memoria Fanuc
- ''' Indice di memoria
- ''' Valore da scrivere su scrittura o letto su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_DWord(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value As UInteger) As Boolean
- Dim bRet As Boolean
- Dim uiValue(0) As UInteger
- If bWrite Then uiValue(0) = Value
- bRet = F_RW_DWord(bWrite, MemType, MemIndex, uiValue)
- If Not bWrite Then Value = uiValue(0)
- Return bRet
- End Function
-
- '''
- ''' Legge Integer da MEMORIE PLC
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Tipo di memoria Fanuc
- ''' Indice di memoria
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Integer(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value() As Integer) As Boolean
- Dim iodb2 As Focas1.IODBPMC2
- Dim nlength As Integer
- Dim nReturn As Integer
- Dim nQta As Integer
- Dim nBlock As Integer
- Dim nMod As Integer
-
- If Value Is Nothing Then Throw New InvalidOperationException
-
- 'Calcolo la dimesione dell'array
- nBlock = Value.Length \ F_MAX_ITEM
- nMod = Value.Length Mod F_MAX_ITEM
- If nMod > 0 Then nBlock += 1
-
- For b = 0 To nBlock - 1
- If b < nBlock - 1 Then
- nQta = F_MAX_ITEM
- Else
- nQta = IIf(nMod > 0, nMod, F_MAX_ITEM)
- End If
-
- 'Setto il tipo di memoria
- iodb2 = New Focas1.IODBPMC2
- iodb2.type_a = MemType
- iodb2.type_d = N_DWORD_TYPE
- iodb2.datano_s = MemIndex + (b * F_MAX_ITEM * 4)
- iodb2.datano_e = MemIndex + (b * F_MAX_ITEM * 4) + (nQta * 4) - 1
- nlength = 8 + (nQta * 4)
-
- If bWrite Then ' *** Write
- ReDim iodb2.ldata(8 - 1)
- For i = 0 To nQta - 1
- iodb2.ldata(i) = Value(i + b * F_MAX_ITEM)
- Next
- nReturn = Focas1.pmc_wrpmcrng(nLibHandle(1), nlength, iodb2)
- If F_CheckRetError_Pmc(nReturn, "pmc_wrpmcrng F_RW_Integer CNC.FANUC") Then
- Throw New CmsNcException("ERR pmc_wrpmcrng F_RW_Integer CNC.FANUC")
- Return False
- End If
-
- Else ' ************* Read
- nReturn = Focas1.pmc_rdpmcrng(nLibHandle(1), iodb2.type_a, iodb2.type_d, iodb2.datano_s, iodb2.datano_e, nlength, iodb2)
- If F_CheckRetError_Pmc(nReturn, "pmc_rdpmcrng F_RW_Integer CNC.FANUC") Then
- Throw New CmsNcException("ERR pmc_rdpmcrng F_RW_Integer CNC.FANUC")
- Return False
- Else
- For i = 0 To nQta - 1
- Value(i + b * F_MAX_ITEM) = WordsToInteger(iodb2.ldata(i) And &HFFFF, (iodb2.ldata(i) And &HFFFF0000) >> 16)
- Next
- End If
- End If
- Next
-
- Return True
- End Function
-
- '''
- ''' Legge Integer da MEMORIE PLC
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Tipo di memoria Fanuc
- ''' Indice di memoria
- ''' Valore da scrivere su scrittura o letto su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Integer(ByVal bWrite As Boolean, ByVal MemType As MemType, ByVal MemIndex As Integer, ByRef Value As Integer) As Boolean
- Dim bRet As Boolean
- Dim iValue(0) As Integer
- If bWrite Then iValue(0) = Value
- bRet = F_RW_Integer(bWrite, MemType, MemIndex, iValue)
- If Not bWrite Then Value = iValue(0)
- Return bRet
- End Function
-
- '''
- ''' Legge o scrive Length and Radius Offset da tabella Utensili CN
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Numero dell'offset utensile
- Public Overloads Sub F_RW_ToolOffset(ByVal bWrite As Boolean, ByVal ToolOffsetNumber As Integer, ByRef CutterRadius_Wear As Double, ByRef CutterRadius_Geometry As Double, ByRef ToolLenght_Wear As Double, ByRef ToolLenght_Geometry As Double)
- Dim iodbpsd_1 As Focas1.IODBPSD_1
- Dim odbtofs As Focas1.ODBTOFS
- Dim nReturn As Integer
- Dim bNcInInch As Boolean
- Dim bTtInInch As Boolean
- Dim valid_fig As Short
- Dim dec_fig_in(31) As Short
- Dim dec_fig_out(31) As Short
-
- iodbpsd_1 = New Focas1.IODBPSD_1
- odbtofs = New Focas1.ODBTOFS
-
- 'Leggo se il CN è impostato in Inch (parametro 0.2)
- nReturn = Focas1.cnc_rdparam(nLibHandle(1), 0, 0, 4 + 1, iodbpsd_1)
- If F_CheckRetError_Cnc(nReturn, "cnc_rdparam F_RW_LengthOffset CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_rdparam F_RW_LengthOffset CNC.FANUC")
- End If
- bNcInInch = (iodbpsd_1.cdata And MASK_BIT2) = MASK_BIT2
-
- 'Leggo se ToolTable è impostato in Inch
- bTtInInch = Config.Options.CurrentOptions.ToolTable_Inch
-
- 'leggo le cifre decimali
- nReturn = Focas1.cnc_getfigure(nLibHandle(1), 1, valid_fig, dec_fig_in, dec_fig_out)
- If F_CheckRetError_Cnc(nReturn, "cnc_getfigure F_RW_LengthOffset CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_getfigure F_RW_LengthOffset CNC.FANUC")
- End If
-
- If bWrite Then ' *** Write
- For i = 0 To 3
- Dim dblTmp As Double
- Dim nTmp As Integer
- Select Case i
- Case 0 : dblTmp = CutterRadius_Wear
- Case 1 : dblTmp = CutterRadius_Geometry
- Case 2 : dblTmp = ToolLenght_Wear
- Case 3 : dblTmp = ToolLenght_Geometry
- End Select
- 'moltiplico per le cifre decimali
- dblTmp *= 10 ^ dec_fig_in(0)
- 'riporto all'unità di misura di Nc
- If bNcInInch And Not bTtInInch Then
- nTmp = dblTmp / 25.4
- ElseIf Not bNcInInch And bTtInInch Then
- nTmp = dblTmp * 25.4
- Else
- nTmp = dblTmp
- End If
- nReturn = Focas1.cnc_wrtofs(nLibHandle(1), ToolOffsetNumber, i, 8, nTmp)
- If F_CheckRetError_Pmc(nReturn, "cnc_wrtofs F_RW_ToolOffset CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_wrtofs F_RW_ToolOffset CNC.FANUC")
- End If
- Next
-
- Else ' ************* Read
- For i = 0 To 3
- nReturn = Focas1.cnc_rdtofs(nLibHandle(1), ToolOffsetNumber, i, 8, odbtofs)
- If F_CheckRetError_Pmc(nReturn, "cnc_rdtofs F_RW_ToolOffset CNC.FANUC") OrElse (odbtofs.datano <> ToolOffsetNumber Or odbtofs.type <> i) Then
- Throw New CmsNcException("ERR cnc_rdtofs F_RW_ToolOffset CNC.FANUC")
- Else
- Dim dblTmp As Double
- 'riporto all'unità di misura di ToolTable
- If bNcInInch And Not bTtInInch Then
- dblTmp = odbtofs.data * 25.4
- ElseIf Not bNcInInch And bTtInInch Then
- dblTmp = odbtofs.data / 25.4
- Else
- dblTmp = odbtofs.data
- End If
- 'divido per le cifre decimali
- dblTmp /= 10 ^ dec_fig_in(0)
- 'memorizzo il dato
- Select Case i
- Case 0 : CutterRadius_Wear = dblTmp
- Case 1 : CutterRadius_Geometry = dblTmp
- Case 2 : ToolLenght_Wear = dblTmp
- Case 3 : ToolLenght_Geometry = dblTmp
- End Select
- End If
- Next
-
- End If
-
- End Sub
-
- '''
- ''' Cancella la tabella Utensili CN
- '''
- Public Sub F_Clear_ToolOffsets()
-
- 'Memo di tipo C
-
- Dim nMaxUt As Integer
- Dim iodbto_1_3 As Focas1.IODBTO_1_3
- Dim ofs_3 As Focas1.OFS_3 'OFS_3 Modificato per permettere di eleiminare tutti e 100 gli utensili
- Dim nReturn As Integer
-
- iodbto_1_3 = New Focas1.IODBTO_1_3
- ofs_3 = New Focas1.OFS_3
-
- nMaxUt = CMSCncLib.CNC.Runtime.NC.MaxIdUtensile
-
- Dim n As Integer
- n = nMaxUt \ 100
- n += IIf(nMaxUt Mod 100, 1, 0)
-
-
- For j = 1 To n
-
- iodbto_1_3.datano_s = ((j - 1) * 100) + 1
- If nMaxUt < iodbto_1_3.datano_s + 100 Then
- iodbto_1_3.datano_e = nMaxUt
- Else
- iodbto_1_3.datano_e = iodbto_1_3.datano_s + 99
- End If
- iodbto_1_3.ofs = ofs_3
-
- For i As Integer = 0 To 3
- iodbto_1_3.type = i
- nReturn = Focas1.cnc_wrtofsr(nLibHandle(1), 8 + 4 * (iodbto_1_3.datano_e - iodbto_1_3.datano_s + 1), iodbto_1_3)
- If F_CheckRetError_Pmc(nReturn, "cnc_wrtofsr F_Clear_ToolOffsets CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_wrtofsr F_Clear_ToolOffsets CNC.FANUC")
- End If
- Next
- Next
-
-
- End Sub
-
-
- '''
- ''' Legge o scrive Parametri Interi
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' 0: assigns no axis, -1: assigns all axes
- ''' Indice di memoria
- ''' 1 byte, 2 word, 3 dword
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Param_Integer(ByVal bWrite As Boolean, ByVal Axis As Integer, ByVal ParamIndex As Integer, ByVal Size As Integer, ByRef Value() As Object) As Boolean
- Dim iodbpsd1 As Focas1.IODBPSD_1 = Nothing
- Dim iodbpsd3 As Focas1.IODBPSD_3 = Nothing
- Dim nOdb As Focas1.ODBSYS
- Dim nlength As Integer
- Dim nQta As Integer
- Dim nReturn As Integer
- Dim nMemSize As Integer
-
- If bWrite And Value Is Nothing Then Throw New InvalidOperationException
-
- 'Seleziono la dimensione della memoria
+ End If
+ Next
+
+ End If
+
+ End Sub
+
+ '''
+ ''' Cancella la tabella Utensili CN
+ '''
+ Public Sub F_Clear_ToolOffsets()
+
+ 'Memo di tipo C
+
+ Dim nMaxUt As Integer
+ Dim iodbto_1_3 As Focas1.IODBTO_1_3
+ Dim ofs_3 As Focas1.OFS_3 'OFS_3 Modificato per permettere di eleiminare tutti e 100 gli utensili
+ Dim nReturn As Integer
+
+ iodbto_1_3 = New Focas1.IODBTO_1_3
+ ofs_3 = New Focas1.OFS_3
+
+ nMaxUt = CMSCncLib.CNC.Runtime.NC.MaxIdUtensile
+
+ Dim n As Integer
+ n = nMaxUt \ 100
+ n += IIf(nMaxUt Mod 100, 1, 0)
+
+
+ For j = 1 To n
+
+ iodbto_1_3.datano_s = ((j - 1) * 100) + 1
+ If nMaxUt < iodbto_1_3.datano_s + 100 Then
+ iodbto_1_3.datano_e = nMaxUt
+ Else
+ iodbto_1_3.datano_e = iodbto_1_3.datano_s + 99
+ End If
+ iodbto_1_3.ofs = ofs_3
+
+ For i As Integer = 0 To 3
+ iodbto_1_3.type = i
+ nReturn = Focas1.cnc_wrtofsr(nLibHandle(1), 8 + 4 * (iodbto_1_3.datano_e - iodbto_1_3.datano_s + 1), iodbto_1_3)
+ If F_CheckRetError_Pmc(nReturn, "cnc_wrtofsr F_Clear_ToolOffsets CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_wrtofsr F_Clear_ToolOffsets CNC.FANUC")
+ End If
+ Next
+ Next
+
+
+ End Sub
+
+
+ '''
+ ''' Legge o scrive Parametri Interi
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' 0: assigns no axis, -1: assigns all axes
+ ''' Indice di memoria
+ ''' 1 byte, 2 word, 3 dword
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Param_Integer(ByVal bWrite As Boolean, ByVal Axis As Integer, ByVal ParamIndex As Integer, ByVal Size As Integer, ByRef Value() As Object) As Boolean
+ Dim iodbpsd1 As Focas1.IODBPSD_1 = Nothing
+ Dim iodbpsd3 As Focas1.IODBPSD_3 = Nothing
+ Dim nOdb As Focas1.ODBSYS
+ Dim nlength As Integer
+ Dim nQta As Integer
+ Dim nReturn As Integer
+ Dim nMemSize As Integer
+
+ If bWrite And Value Is Nothing Then Throw New InvalidOperationException
+
+ 'Seleziono la dimensione della memoria
+ Select Case Size
+ Case 1 : nMemSize = 1
+ Case 2 : nMemSize = 2
+ Case 3 : nMemSize = 4
+ Case Else : Throw New InvalidOperationException
+ End Select
+
+ 'Setto se parametro singolo o su ogni asse
+ If Axis >= 0 Then
+ iodbpsd1 = New Focas1.IODBPSD_1
+ nQta = 1
+ nlength = 4 + (nMemSize * nQta)
+ Else 'If Axis = -1 Then
+ iodbpsd3 = New Focas1.IODBPSD_3
+ nOdb = New Focas1.ODBSYS
+ nReturn = Focas1.cnc_sysinfo(nLibHandle(1), nOdb)
+ nQta = nOdb.axes.Length
+ nlength = 4 + (nMemSize * nQta)
+ End If
+
+ If bWrite Then ' *** Write
+ If nQta = 1 Then
+ iodbpsd1.datano = ParamIndex
+ Select Case Size
+ Case 1 : iodbpsd1.cdata = Value(0)
+ Case 2 : iodbpsd1.idata = Value(0)
+ Case 3 : iodbpsd1.ldata = Value(0)
+ End Select
+ Else
+ iodbpsd3.datano = ParamIndex
+ For i = 0 To nQta - 1
Select Case Size
- Case 1 : nMemSize = 1
- Case 2 : nMemSize = 2
- Case 3 : nMemSize = 4
- Case Else : Throw New InvalidOperationException
+ Case 1 : iodbpsd3.cdatas(i) = Value(i)
+ Case 2 : iodbpsd3.idatas(i) = Value(i)
+ Case 3 : iodbpsd3.ldatas(i) = Value(i)
End Select
+ Next
+ End If
- 'Setto se parametro singolo o su ogni asse
- If Axis >= 0 Then
- iodbpsd1 = New Focas1.IODBPSD_1
- nQta = 1
- nlength = 4 + (nMemSize * nQta)
- Else 'If Axis = -1 Then
- iodbpsd3 = New Focas1.IODBPSD_3
- nOdb = New Focas1.ODBSYS
- nReturn = Focas1.cnc_sysinfo(nLibHandle(1), nOdb)
- nQta = nOdb.axes.Length
- nlength = 4 + (nMemSize * nQta)
- End If
+ If nQta = 1 Then
+ nReturn = Focas1.cnc_wrparam(nLibHandle(1), nlength, iodbpsd1)
+ Else
+ nReturn = Focas1.cnc_wrparam(nLibHandle(1), nlength, iodbpsd3)
+ End If
+ If F_CheckRetError_Cnc(nReturn, "cnc_wrparam F_RW_Param_DWord CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_wrparam F_RW_Param_DWord CNC.FANUC")
+ Return False
+ End If
- If bWrite Then ' *** Write
- If nQta = 1 Then
- iodbpsd1.datano = ParamIndex
- Select Case Size
- Case 1 : iodbpsd1.cdata = Value(0)
- Case 2 : iodbpsd1.idata = Value(0)
- Case 3 : iodbpsd1.ldata = Value(0)
- End Select
- Else
- iodbpsd3.datano = ParamIndex
- For i = 0 To nQta - 1
- Select Case Size
- Case 1 : iodbpsd3.cdatas(i) = Value(i)
- Case 2 : iodbpsd3.idatas(i) = Value(i)
- Case 3 : iodbpsd3.ldatas(i) = Value(i)
- End Select
- Next
- End If
-
- If nQta = 1 Then
- nReturn = Focas1.cnc_wrparam(nLibHandle(1), nlength, iodbpsd1)
- Else
- nReturn = Focas1.cnc_wrparam(nLibHandle(1), nlength, iodbpsd3)
- End If
- If F_CheckRetError_Cnc(nReturn, "cnc_wrparam F_RW_Param_DWord CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_wrparam F_RW_Param_DWord CNC.FANUC")
- Return False
- End If
-
- Else ' ************* Read
- If nQta = 1 Then
- nReturn = Focas1.cnc_rdparam(nLibHandle(1), ParamIndex, Axis, nlength, iodbpsd1)
- Else
- nReturn = Focas1.cnc_rdparam(nLibHandle(1), ParamIndex, Axis, nlength, iodbpsd3)
- End If
- If F_CheckRetError_Pmc(nReturn, "cnc_rdparam F_RW_Param_DWord CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_rdparam F_RW_Param_DWord CNC.FANUC")
- Return False
- Else
- If nQta = 1 Then
- Select Case Size
- Case 1 : Value(0) = iodbpsd1.cdata
- Case 2 : Value(0) = iodbpsd1.idata
- Case 3 : Value(0) = iodbpsd1.ldata
- End Select
- Else
- For i = 0 To nQta - 1
- Select Case Size
- Case 1 : Value(i) = iodbpsd3.cdatas
- Case 2 : Value(i) = iodbpsd3.idatas
- Case 3 : Value(i) = iodbpsd3.ldatas
- End Select
- Next
- End If
- End If
- End If
-
- Return True
- End Function
-
- '''
- ''' Legge o scrive Parametri Interi
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Indice di memoria
- ''' 1 byte, 2 word, 3 dword
- ''' Valore da scrivere su scrittura o letto su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Param_Integer(ByVal bWrite As Boolean, ByVal MemIndex As Integer, ByVal Size As Integer, ByRef Value As Object) As Boolean
- Dim bRet As Boolean
- Dim oValue(0) As Object
- If bWrite Then oValue(0) = Value
- bRet = F_RW_Param_Integer(bWrite, 0, MemIndex, Size, oValue)
- If Not bWrite Then Value = oValue(0)
- Return bRet
- End Function
-
-
-
- '''
- ''' Legge o scrive le variabile Custom Macro
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Indice di memoria
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Macro_Short(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value() As Short) As Boolean
- Dim iodbmr As Focas1.IODBMR
- Dim nlength As Integer
- Dim nReturn As Integer
- Dim nQta As Integer
- Dim nBlock As Integer
- Dim nMod As Integer
- Dim nActivePath As Integer
-
- If Value Is Nothing Then Throw New InvalidOperationException
-
- nActivePath = GetActivePath()
-
- 'Calcolo la dimesione dell'array
- nBlock = Value.Length \ F_MAX_MACRO
- nMod = Value.Length Mod F_MAX_MACRO
- If nMod > 0 Then nBlock += 1
-
- For b = 0 To nBlock - 1
- If b < nBlock - 1 Then
- nQta = F_MAX_MACRO
- Else
- nQta = IIf(nMod > 0, nMod, F_MAX_MACRO)
- End If
-
- 'Setto il tipo di memoria
- iodbmr = New Focas1.IODBMR
- iodbmr.datano_s = MacroIndex + (b * F_MAX_MACRO)
- iodbmr.datano_e = MacroIndex + (b * F_MAX_MACRO) + nQta - 1
- nlength = 8 + (nQta * 8)
-
- If bWrite Then ' *** Write
- iodbmr.data = New Focas1.IODBMR1
- iodbmr.data.data1 = New Focas1.IODBMR_data
- iodbmr.data.data2 = New Focas1.IODBMR_data
- iodbmr.data.data3 = New Focas1.IODBMR_data
- iodbmr.data.data4 = New Focas1.IODBMR_data
- iodbmr.data.data5 = New Focas1.IODBMR_data
-
- If nQta >= 1 Then iodbmr.data.data1.mcr_val = Value(0 + b * F_MAX_MACRO)
- If nQta >= 2 Then iodbmr.data.data2.mcr_val = Value(1 + b * F_MAX_MACRO)
- If nQta >= 3 Then iodbmr.data.data3.mcr_val = Value(2 + b * F_MAX_MACRO)
- If nQta >= 4 Then iodbmr.data.data4.mcr_val = Value(3 + b * F_MAX_MACRO)
- If nQta >= 5 Then iodbmr.data.data5.mcr_val = Value(4 + b * F_MAX_MACRO)
-
- nReturn = Focas1.cnc_wrmacror(nLibHandle(nActivePath), MacroIndex, iodbmr)
- If F_CheckRetError_Cnc(nReturn, "cnc_wrmacror F_RW_Macro_Short CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_wrmacror F_RW_Macro_Short CNC.FANUC")
- Return False
- End If
-
- Else ' ************* Read
- nReturn = Focas1.cnc_rdmacror(nLibHandle(nActivePath), iodbmr.datano_s, iodbmr.datano_e, nlength, iodbmr)
-
- If F_CheckRetError_Cnc(nReturn, "cnc_rdmacror F_RW_Macro_Short CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_rdmacror F_RW_Macro_Short CNC.FANUC")
- Return False
- Else
- If nQta >= 1 Then Value(0 + b * F_MAX_MACRO) = iodbmr.data.data1.mcr_val / (10 ^ iodbmr.data.data1.dec_val)
- If nQta >= 2 Then Value(1 + b * F_MAX_MACRO) = iodbmr.data.data2.mcr_val / (10 ^ iodbmr.data.data2.dec_val)
- If nQta >= 3 Then Value(2 + b * F_MAX_MACRO) = iodbmr.data.data3.mcr_val / (10 ^ iodbmr.data.data3.dec_val)
- If nQta >= 4 Then Value(3 + b * F_MAX_MACRO) = iodbmr.data.data4.mcr_val / (10 ^ iodbmr.data.data4.dec_val)
- If nQta >= 5 Then Value(4 + b * F_MAX_MACRO) = iodbmr.data.data5.mcr_val / (10 ^ iodbmr.data.data5.dec_val)
- End If
- End If
+ Else ' ************* Read
+ If nQta = 1 Then
+ nReturn = Focas1.cnc_rdparam(nLibHandle(1), ParamIndex, Axis, nlength, iodbpsd1)
+ Else
+ nReturn = Focas1.cnc_rdparam(nLibHandle(1), ParamIndex, Axis, nlength, iodbpsd3)
+ End If
+ If F_CheckRetError_Pmc(nReturn, "cnc_rdparam F_RW_Param_DWord CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_rdparam F_RW_Param_DWord CNC.FANUC")
+ Return False
+ Else
+ If nQta = 1 Then
+ Select Case Size
+ Case 1 : Value(0) = iodbpsd1.cdata
+ Case 2 : Value(0) = iodbpsd1.idata
+ Case 3 : Value(0) = iodbpsd1.ldata
+ End Select
+ Else
+ For i = 0 To nQta - 1
+ Select Case Size
+ Case 1 : Value(i) = iodbpsd3.cdatas
+ Case 2 : Value(i) = iodbpsd3.idatas
+ Case 3 : Value(i) = iodbpsd3.ldatas
+ End Select
Next
+ End If
+ End If
+ End If
- Return True
- End Function
+ Return True
+ End Function
- '''
- ''' Legge o scrive le variabile Custom Macro
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Indice di memoria
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Macro_Short(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value As Short) As Boolean
- Dim bRet As Boolean
- Dim sValue(0) As Short
- If bWrite Then sValue(0) = Value
- bRet = F_RW_Macro_Short(bWrite, MacroIndex, sValue)
- If Not bWrite Then Value = sValue(0)
- Return bRet
- End Function
-
- Private Function GetNumDec(ByVal dVal As Double) As Short
- ' Determino il numero di decimali più adatto, in base al valore
- ' (per evitare l'overflow durante le operazioni di moltiplicazione)
- If dVal < -99999999 Or dVal > 99999999 Then
- GetNumDec = 0
- ElseIf dVal < -9999999 Or dVal > 9999999 Then
- GetNumDec = 1
- ElseIf dVal < -999999 Or dVal > 999999 Then
- GetNumDec = 2
- ElseIf dVal < -99999 Or dVal > 99999 Then
- GetNumDec = 3
- ElseIf dVal < -9999 Or dVal > 9999 Then
- GetNumDec = 4
- ElseIf dVal < -999 Or dVal > 999 Then
- GetNumDec = 5
- ElseIf dVal < -99 Or dVal > 99 Then
- GetNumDec = 6
- ElseIf dVal < -9 Or dVal > 9 Then
- GetNumDec = 7
- Else
- GetNumDec = 8
- End If
- End Function
+ '''
+ ''' Legge o scrive Parametri Interi
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Indice di memoria
+ ''' 1 byte, 2 word, 3 dword
+ ''' Valore da scrivere su scrittura o letto su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Param_Integer(ByVal bWrite As Boolean, ByVal MemIndex As Integer, ByVal Size As Integer, ByRef Value As Object) As Boolean
+ Dim bRet As Boolean
+ Dim oValue(0) As Object
+ If bWrite Then oValue(0) = Value
+ bRet = F_RW_Param_Integer(bWrite, 0, MemIndex, Size, oValue)
+ If Not bWrite Then Value = oValue(0)
+ Return bRet
+ End Function
- '''
- ''' Legge o scrive le variabile Custom Macro
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Indice di memoria
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Macro_Double(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value() As Double) As Boolean
- Dim iodbmr As Focas1.IODBMR
- Dim nlength As Integer
- Dim nReturn As Integer
- Dim nQta As Integer
- Dim nBlock As Integer
- Dim nMod As Integer
- Dim nActivePath As Integer
- If Value Is Nothing Then Throw New InvalidOperationException
+ '''
+ ''' Legge o scrive le variabile Custom Macro
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Indice di memoria
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Macro_Short(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value() As Short) As Boolean
+ Dim iodbmr As Focas1.IODBMR
+ Dim nlength As Integer
+ Dim nReturn As Integer
+ Dim nQta As Integer
+ Dim nBlock As Integer
+ Dim nMod As Integer
+ Dim nActivePath As Integer
- nActivePath = GetActivePath()
+ If Value Is Nothing Then Throw New InvalidOperationException
- 'Calcolo la dimesione dell'array
- nBlock = Value.Length \ F_MAX_MACRO
- nMod = Value.Length Mod F_MAX_MACRO
- If nMod > 0 Then nBlock += 1
+ nActivePath = GetActivePath()
- For b = 0 To nBlock - 1
- If b < nBlock - 1 Then
- nQta = F_MAX_MACRO
- Else
- nQta = IIf(nMod > 0, nMod, F_MAX_MACRO)
- End If
+ 'Calcolo la dimesione dell'array
+ nBlock = Value.Length \ F_MAX_MACRO
+ nMod = Value.Length Mod F_MAX_MACRO
+ If nMod > 0 Then nBlock += 1
- 'Setto il tipo di memoria
- iodbmr = New Focas1.IODBMR
- iodbmr.datano_s = MacroIndex + (b * F_MAX_MACRO)
- iodbmr.datano_e = MacroIndex + (b * F_MAX_MACRO) + nQta - 1
- nlength = 8 + (nQta * 8)
+ For b = 0 To nBlock - 1
+ If b < nBlock - 1 Then
+ nQta = F_MAX_MACRO
+ Else
+ nQta = IIf(nMod > 0, nMod, F_MAX_MACRO)
+ End If
- If bWrite Then ' *** Write
- iodbmr.data = New Focas1.IODBMR1
- iodbmr.data.data1 = New Focas1.IODBMR_data
- iodbmr.data.data2 = New Focas1.IODBMR_data
- iodbmr.data.data3 = New Focas1.IODBMR_data
- iodbmr.data.data4 = New Focas1.IODBMR_data
- iodbmr.data.data5 = New Focas1.IODBMR_data
+ 'Setto il tipo di memoria
+ iodbmr = New Focas1.IODBMR
+ iodbmr.datano_s = MacroIndex + (b * F_MAX_MACRO)
+ iodbmr.datano_e = MacroIndex + (b * F_MAX_MACRO) + nQta - 1
+ nlength = 8 + (nQta * 8)
- ' Determino il numero di decimali più adatto, in base al valore
- ' (per evitare l'overflow durante le operazioni di moltiplicazione)
- If nQta >= 1 Then iodbmr.data.data1.dec_val = GetNumDec(Value(0 + b * F_MAX_MACRO))
- If nQta >= 2 Then iodbmr.data.data2.dec_val = GetNumDec(Value(1 + b * F_MAX_MACRO))
- If nQta >= 3 Then iodbmr.data.data3.dec_val = GetNumDec(Value(2 + b * F_MAX_MACRO))
- If nQta >= 4 Then iodbmr.data.data4.dec_val = GetNumDec(Value(3 + b * F_MAX_MACRO))
- If nQta >= 5 Then iodbmr.data.data5.dec_val = GetNumDec(Value(4 + b * F_MAX_MACRO))
+ If bWrite Then ' *** Write
+ iodbmr.data = New Focas1.IODBMR1
+ iodbmr.data.data1 = New Focas1.IODBMR_data
+ iodbmr.data.data2 = New Focas1.IODBMR_data
+ iodbmr.data.data3 = New Focas1.IODBMR_data
+ iodbmr.data.data4 = New Focas1.IODBMR_data
+ iodbmr.data.data5 = New Focas1.IODBMR_data
- If nQta >= 1 Then iodbmr.data.data1.mcr_val = Value(0 + b * F_MAX_MACRO) * (10 ^ iodbmr.data.data1.dec_val)
- If nQta >= 2 Then iodbmr.data.data2.mcr_val = Value(1 + b * F_MAX_MACRO) * (10 ^ iodbmr.data.data2.dec_val)
- If nQta >= 3 Then iodbmr.data.data3.mcr_val = Value(2 + b * F_MAX_MACRO) * (10 ^ iodbmr.data.data3.dec_val)
- If nQta >= 4 Then iodbmr.data.data4.mcr_val = Value(3 + b * F_MAX_MACRO) * (10 ^ iodbmr.data.data4.dec_val)
- If nQta >= 5 Then iodbmr.data.data5.mcr_val = Value(4 + b * F_MAX_MACRO) * (10 ^ iodbmr.data.data5.dec_val)
+ If nQta >= 1 Then iodbmr.data.data1.mcr_val = Value(0 + b * F_MAX_MACRO)
+ If nQta >= 2 Then iodbmr.data.data2.mcr_val = Value(1 + b * F_MAX_MACRO)
+ If nQta >= 3 Then iodbmr.data.data3.mcr_val = Value(2 + b * F_MAX_MACRO)
+ If nQta >= 4 Then iodbmr.data.data4.mcr_val = Value(3 + b * F_MAX_MACRO)
+ If nQta >= 5 Then iodbmr.data.data5.mcr_val = Value(4 + b * F_MAX_MACRO)
- nReturn = Focas1.cnc_wrmacror(nLibHandle(nActivePath), MacroIndex, iodbmr)
+ nReturn = Focas1.cnc_wrmacror(nLibHandle(nActivePath), MacroIndex, iodbmr)
+ If F_CheckRetError_Cnc(nReturn, "cnc_wrmacror F_RW_Macro_Short CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_wrmacror F_RW_Macro_Short CNC.FANUC")
+ Return False
+ End If
- If F_CheckRetError_Cnc(nReturn, "cnc_wrmacror F_RW_Macro_Double CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_wrmacror F_RW_Macro_Double CNC.FANUC")
- Return False
- End If
+ Else ' ************* Read
+ nReturn = Focas1.cnc_rdmacror(nLibHandle(nActivePath), iodbmr.datano_s, iodbmr.datano_e, nlength, iodbmr)
- Else ' ************* Read
- nReturn = Focas1.cnc_rdmacror(nLibHandle(nActivePath), iodbmr.datano_s, iodbmr.datano_e, nlength, iodbmr)
+ If F_CheckRetError_Cnc(nReturn, "cnc_rdmacror F_RW_Macro_Short CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_rdmacror F_RW_Macro_Short CNC.FANUC")
+ Return False
+ Else
+ If nQta >= 1 Then Value(0 + b * F_MAX_MACRO) = iodbmr.data.data1.mcr_val / (10 ^ iodbmr.data.data1.dec_val)
+ If nQta >= 2 Then Value(1 + b * F_MAX_MACRO) = iodbmr.data.data2.mcr_val / (10 ^ iodbmr.data.data2.dec_val)
+ If nQta >= 3 Then Value(2 + b * F_MAX_MACRO) = iodbmr.data.data3.mcr_val / (10 ^ iodbmr.data.data3.dec_val)
+ If nQta >= 4 Then Value(3 + b * F_MAX_MACRO) = iodbmr.data.data4.mcr_val / (10 ^ iodbmr.data.data4.dec_val)
+ If nQta >= 5 Then Value(4 + b * F_MAX_MACRO) = iodbmr.data.data5.mcr_val / (10 ^ iodbmr.data.data5.dec_val)
+ End If
+ End If
+ Next
- If F_CheckRetError_Cnc(nReturn, "cnc_rdmacror F_RW_Macro_Double CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_rdmacror F_RW_Macro_Double CNC.FANUC")
- Return False
- Else
- If nQta >= 1 Then Value(0 + b * F_MAX_MACRO) = iodbmr.data.data1.mcr_val / (10 ^ iodbmr.data.data1.dec_val)
- If nQta >= 2 Then Value(1 + b * F_MAX_MACRO) = iodbmr.data.data2.mcr_val / (10 ^ iodbmr.data.data2.dec_val)
- If nQta >= 3 Then Value(2 + b * F_MAX_MACRO) = iodbmr.data.data3.mcr_val / (10 ^ iodbmr.data.data3.dec_val)
- If nQta >= 4 Then Value(3 + b * F_MAX_MACRO) = iodbmr.data.data4.mcr_val / (10 ^ iodbmr.data.data4.dec_val)
- If nQta >= 5 Then Value(4 + b * F_MAX_MACRO) = iodbmr.data.data5.mcr_val / (10 ^ iodbmr.data.data5.dec_val)
- End If
- End If
- Next
+ Return True
+ End Function
- Return True
- End Function
+ '''
+ ''' Legge o scrive le variabile Custom Macro
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Indice di memoria
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Macro_Short(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value As Short) As Boolean
+ Dim bRet As Boolean
+ Dim sValue(0) As Short
+ If bWrite Then sValue(0) = Value
+ bRet = F_RW_Macro_Short(bWrite, MacroIndex, sValue)
+ If Not bWrite Then Value = sValue(0)
+ Return bRet
+ End Function
- '''
- ''' Legge o scrive le variabile Custom Macro
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Indice di memoria
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_Macro_Double(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value As Double) As Boolean
- Dim bRet As Boolean
- Dim sValue(0) As Double
- If bWrite Then sValue(0) = Value
- bRet = F_RW_Macro_Double(bWrite, MacroIndex, sValue)
- If Not bWrite Then Value = sValue(0)
- Return bRet
- End Function
-
- '''
- ''' Legge o scrive le variabile P Code Macro
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Indice di memoria
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_PCodeMacro_Short(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value() As Short) As Boolean
- Dim iodbpr As Focas1.IODBPR
- Dim nlength As Integer
- Dim nReturn As Integer
- Dim nQta As Integer
- Dim nBlock As Integer
- Dim nMod As Integer
- Dim nActivePath As Integer
-
- If Value Is Nothing Then Throw New InvalidOperationException
-
- nActivePath = GetActivePath()
-
- 'Calcolo la dimesione dell'array
- nBlock = Value.Length \ F_MAX_MACRO
- nMod = Value.Length Mod F_MAX_MACRO
- If nMod > 0 Then nBlock += 1
-
- For b = 0 To nBlock - 1
- If b < nBlock - 1 Then
- nQta = F_MAX_MACRO
- Else
- nQta = IIf(nMod > 0, nMod, F_MAX_MACRO)
- End If
-
- 'Setto il tipo di memoria
- iodbpr = New Focas1.IODBPR
- iodbpr.datano_s = MacroIndex + (b * F_MAX_MACRO)
- iodbpr.datano_e = MacroIndex + (b * F_MAX_MACRO) + nQta - 1
- nlength = 12 + (nQta * 8)
-
- If bWrite Then ' *** Write
- iodbpr.data = New Focas1.IODBPR1
- iodbpr.data.data1 = New Focas1.IODBPR_data
- iodbpr.data.data2 = New Focas1.IODBPR_data
- iodbpr.data.data3 = New Focas1.IODBPR_data
- iodbpr.data.data4 = New Focas1.IODBPR_data
- iodbpr.data.data5 = New Focas1.IODBPR_data
-
- If nQta >= 1 Then iodbpr.data.data1.mcr_val = Value(0 + b * F_MAX_MACRO)
- If nQta >= 2 Then iodbpr.data.data2.mcr_val = Value(1 + b * F_MAX_MACRO)
- If nQta >= 3 Then iodbpr.data.data3.mcr_val = Value(2 + b * F_MAX_MACRO)
- If nQta >= 4 Then iodbpr.data.data4.mcr_val = Value(3 + b * F_MAX_MACRO)
- If nQta >= 5 Then iodbpr.data.data5.mcr_val = Value(4 + b * F_MAX_MACRO)
-
- nReturn = Focas1.cnc_wrpmacror(nLibHandle(nActivePath), MacroIndex, iodbpr)
- If F_CheckRetError_Cnc(nReturn, "cnc_wrpmacror F_RW_PCodeMacro_Short CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_wrpmacror F_RW_PCodeMacro_Short CNC.FANUC")
- Return False
- End If
-
- Else ' ************* Read
- nReturn = Focas1.cnc_rdpmacror(nLibHandle(nActivePath), iodbpr.datano_s, iodbpr.datano_e, nlength, iodbpr)
-
- If F_CheckRetError_Cnc(nReturn, "cnc_rdmacror F_RW_Macro_Short CNC.FANUC") Then
- Throw New CmsNcException("ERR cnc_rdmacror F_RW_Macro_Short CNC.FANUC")
- Return False
- Else
- If nQta >= 1 Then Value(0 + b * F_MAX_MACRO) = iodbpr.data.data1.mcr_val / (10 ^ iodbpr.data.data1.dec_val)
- If nQta >= 2 Then Value(1 + b * F_MAX_MACRO) = iodbpr.data.data2.mcr_val / (10 ^ iodbpr.data.data2.dec_val)
- If nQta >= 3 Then Value(2 + b * F_MAX_MACRO) = iodbpr.data.data3.mcr_val / (10 ^ iodbpr.data.data3.dec_val)
- If nQta >= 4 Then Value(3 + b * F_MAX_MACRO) = iodbpr.data.data4.mcr_val / (10 ^ iodbpr.data.data4.dec_val)
- If nQta >= 5 Then Value(4 + b * F_MAX_MACRO) = iodbpr.data.data5.mcr_val / (10 ^ iodbpr.data.data5.dec_val)
- End If
- End If
- Next
-
- Return True
- End Function
+ Private Function GetNumDec(ByVal dVal As Double) As Short
+ ' Determino il numero di decimali più adatto, in base al valore
+ ' (per evitare l'overflow durante le operazioni di moltiplicazione)
+ If dVal < -99999999 Or dVal > 99999999 Then
+ GetNumDec = 0
+ ElseIf dVal < -9999999 Or dVal > 9999999 Then
+ GetNumDec = 1
+ ElseIf dVal < -999999 Or dVal > 999999 Then
+ GetNumDec = 2
+ ElseIf dVal < -99999 Or dVal > 99999 Then
+ GetNumDec = 3
+ ElseIf dVal < -9999 Or dVal > 9999 Then
+ GetNumDec = 4
+ ElseIf dVal < -999 Or dVal > 999 Then
+ GetNumDec = 5
+ ElseIf dVal < -99 Or dVal > 99 Then
+ GetNumDec = 6
+ ElseIf dVal < -9 Or dVal > 9 Then
+ GetNumDec = 7
+ Else
+ GetNumDec = 8
+ End If
+ End Function
- '''
- ''' Legge o scrive le variabile P Code Macro
- '''
- ''' Se True SCRIVE, se False LEGGE
- ''' Indice di memoria
- ''' Matrice di valori da scrivere su scrittura o letti su lettura
- ''' True se andata a buon fine
- Public Overloads Function F_RW_PCodeMacro_Short(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value As Short) As Boolean
- Dim bRet As Boolean
- Dim sValue(0) As Short
- If bWrite Then sValue(0) = Value
- bRet = F_RW_PCodeMacro_Short(bWrite, MacroIndex, sValue)
- If Not bWrite Then Value = sValue(0)
- Return bRet
- End Function
+ '''
+ ''' Legge o scrive le variabile Custom Macro
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Indice di memoria
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Macro_Double(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value() As Double) As Boolean
+ Dim iodbmr As Focas1.IODBMR
+ Dim nlength As Integer
+ Dim nReturn As Integer
+ Dim nQta As Integer
+ Dim nBlock As Integer
+ Dim nMod As Integer
+ Dim nActivePath As Integer
+
+ If Value Is Nothing Then Throw New InvalidOperationException
+
+ nActivePath = GetActivePath()
+
+ 'Calcolo la dimesione dell'array
+ nBlock = Value.Length \ F_MAX_MACRO
+ nMod = Value.Length Mod F_MAX_MACRO
+ If nMod > 0 Then nBlock += 1
+
+ For b = 0 To nBlock - 1
+ If b < nBlock - 1 Then
+ nQta = F_MAX_MACRO
+ Else
+ nQta = IIf(nMod > 0, nMod, F_MAX_MACRO)
+ End If
+
+ 'Setto il tipo di memoria
+ iodbmr = New Focas1.IODBMR
+ iodbmr.datano_s = MacroIndex + (b * F_MAX_MACRO)
+ iodbmr.datano_e = MacroIndex + (b * F_MAX_MACRO) + nQta - 1
+ nlength = 8 + (nQta * 8)
+
+ If bWrite Then ' *** Write
+ iodbmr.data = New Focas1.IODBMR1
+ iodbmr.data.data1 = New Focas1.IODBMR_data
+ iodbmr.data.data2 = New Focas1.IODBMR_data
+ iodbmr.data.data3 = New Focas1.IODBMR_data
+ iodbmr.data.data4 = New Focas1.IODBMR_data
+ iodbmr.data.data5 = New Focas1.IODBMR_data
+
+ ' Determino il numero di decimali più adatto, in base al valore
+ ' (per evitare l'overflow durante le operazioni di moltiplicazione)
+ If nQta >= 1 Then iodbmr.data.data1.dec_val = GetNumDec(Value(0 + b * F_MAX_MACRO))
+ If nQta >= 2 Then iodbmr.data.data2.dec_val = GetNumDec(Value(1 + b * F_MAX_MACRO))
+ If nQta >= 3 Then iodbmr.data.data3.dec_val = GetNumDec(Value(2 + b * F_MAX_MACRO))
+ If nQta >= 4 Then iodbmr.data.data4.dec_val = GetNumDec(Value(3 + b * F_MAX_MACRO))
+ If nQta >= 5 Then iodbmr.data.data5.dec_val = GetNumDec(Value(4 + b * F_MAX_MACRO))
+
+ If nQta >= 1 Then iodbmr.data.data1.mcr_val = Value(0 + b * F_MAX_MACRO) * (10 ^ iodbmr.data.data1.dec_val)
+ If nQta >= 2 Then iodbmr.data.data2.mcr_val = Value(1 + b * F_MAX_MACRO) * (10 ^ iodbmr.data.data2.dec_val)
+ If nQta >= 3 Then iodbmr.data.data3.mcr_val = Value(2 + b * F_MAX_MACRO) * (10 ^ iodbmr.data.data3.dec_val)
+ If nQta >= 4 Then iodbmr.data.data4.mcr_val = Value(3 + b * F_MAX_MACRO) * (10 ^ iodbmr.data.data4.dec_val)
+ If nQta >= 5 Then iodbmr.data.data5.mcr_val = Value(4 + b * F_MAX_MACRO) * (10 ^ iodbmr.data.data5.dec_val)
+
+ nReturn = Focas1.cnc_wrmacror(nLibHandle(nActivePath), MacroIndex, iodbmr)
+
+ If F_CheckRetError_Cnc(nReturn, "cnc_wrmacror F_RW_Macro_Double CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_wrmacror F_RW_Macro_Double CNC.FANUC")
+ Return False
+ End If
+
+ Else ' ************* Read
+ nReturn = Focas1.cnc_rdmacror(nLibHandle(nActivePath), iodbmr.datano_s, iodbmr.datano_e, nlength, iodbmr)
+
+ If F_CheckRetError_Cnc(nReturn, "cnc_rdmacror F_RW_Macro_Double CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_rdmacror F_RW_Macro_Double CNC.FANUC")
+ Return False
+ Else
+ If nQta >= 1 Then Value(0 + b * F_MAX_MACRO) = iodbmr.data.data1.mcr_val / (10 ^ iodbmr.data.data1.dec_val)
+ If nQta >= 2 Then Value(1 + b * F_MAX_MACRO) = iodbmr.data.data2.mcr_val / (10 ^ iodbmr.data.data2.dec_val)
+ If nQta >= 3 Then Value(2 + b * F_MAX_MACRO) = iodbmr.data.data3.mcr_val / (10 ^ iodbmr.data.data3.dec_val)
+ If nQta >= 4 Then Value(3 + b * F_MAX_MACRO) = iodbmr.data.data4.mcr_val / (10 ^ iodbmr.data.data4.dec_val)
+ If nQta >= 5 Then Value(4 + b * F_MAX_MACRO) = iodbmr.data.data5.mcr_val / (10 ^ iodbmr.data.data5.dec_val)
+ End If
+ End If
+ Next
+
+ Return True
+ End Function
+
+ '''
+ ''' Legge o scrive le variabile Custom Macro
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Indice di memoria
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_Macro_Double(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value As Double) As Boolean
+ Dim bRet As Boolean
+ Dim sValue(0) As Double
+ If bWrite Then sValue(0) = Value
+ bRet = F_RW_Macro_Double(bWrite, MacroIndex, sValue)
+ If Not bWrite Then Value = sValue(0)
+ Return bRet
+ End Function
+
+ '''
+ ''' Legge o scrive le variabile P Code Macro
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Indice di memoria
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_PCodeMacro_Short(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value() As Short) As Boolean
+ Dim iodbpr As Focas1.IODBPR
+ Dim nlength As Integer
+ Dim nReturn As Integer
+ Dim nQta As Integer
+ Dim nBlock As Integer
+ Dim nMod As Integer
+ Dim nActivePath As Integer
+
+ If Value Is Nothing Then Throw New InvalidOperationException
+
+ nActivePath = GetActivePath()
+
+ 'Calcolo la dimesione dell'array
+ nBlock = Value.Length \ F_MAX_MACRO
+ nMod = Value.Length Mod F_MAX_MACRO
+ If nMod > 0 Then nBlock += 1
+
+ For b = 0 To nBlock - 1
+ If b < nBlock - 1 Then
+ nQta = F_MAX_MACRO
+ Else
+ nQta = IIf(nMod > 0, nMod, F_MAX_MACRO)
+ End If
+
+ 'Setto il tipo di memoria
+ iodbpr = New Focas1.IODBPR
+ iodbpr.datano_s = MacroIndex + (b * F_MAX_MACRO)
+ iodbpr.datano_e = MacroIndex + (b * F_MAX_MACRO) + nQta - 1
+ nlength = 12 + (nQta * 8)
+
+ If bWrite Then ' *** Write
+ iodbpr.data = New Focas1.IODBPR1
+ iodbpr.data.data1 = New Focas1.IODBPR_data
+ iodbpr.data.data2 = New Focas1.IODBPR_data
+ iodbpr.data.data3 = New Focas1.IODBPR_data
+ iodbpr.data.data4 = New Focas1.IODBPR_data
+ iodbpr.data.data5 = New Focas1.IODBPR_data
+
+ If nQta >= 1 Then iodbpr.data.data1.mcr_val = Value(0 + b * F_MAX_MACRO)
+ If nQta >= 2 Then iodbpr.data.data2.mcr_val = Value(1 + b * F_MAX_MACRO)
+ If nQta >= 3 Then iodbpr.data.data3.mcr_val = Value(2 + b * F_MAX_MACRO)
+ If nQta >= 4 Then iodbpr.data.data4.mcr_val = Value(3 + b * F_MAX_MACRO)
+ If nQta >= 5 Then iodbpr.data.data5.mcr_val = Value(4 + b * F_MAX_MACRO)
+
+ nReturn = Focas1.cnc_wrpmacror(nLibHandle(nActivePath), MacroIndex, iodbpr)
+ If F_CheckRetError_Cnc(nReturn, "cnc_wrpmacror F_RW_PCodeMacro_Short CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_wrpmacror F_RW_PCodeMacro_Short CNC.FANUC")
+ Return False
+ End If
+
+ Else ' ************* Read
+ nReturn = Focas1.cnc_rdpmacror(nLibHandle(nActivePath), iodbpr.datano_s, iodbpr.datano_e, nlength, iodbpr)
+
+ If F_CheckRetError_Cnc(nReturn, "cnc_rdmacror F_RW_Macro_Short CNC.FANUC") Then
+ Throw New CmsNcException("ERR cnc_rdmacror F_RW_Macro_Short CNC.FANUC")
+ Return False
+ Else
+ If nQta >= 1 Then Value(0 + b * F_MAX_MACRO) = iodbpr.data.data1.mcr_val / (10 ^ iodbpr.data.data1.dec_val)
+ If nQta >= 2 Then Value(1 + b * F_MAX_MACRO) = iodbpr.data.data2.mcr_val / (10 ^ iodbpr.data.data2.dec_val)
+ If nQta >= 3 Then Value(2 + b * F_MAX_MACRO) = iodbpr.data.data3.mcr_val / (10 ^ iodbpr.data.data3.dec_val)
+ If nQta >= 4 Then Value(3 + b * F_MAX_MACRO) = iodbpr.data.data4.mcr_val / (10 ^ iodbpr.data.data4.dec_val)
+ If nQta >= 5 Then Value(4 + b * F_MAX_MACRO) = iodbpr.data.data5.mcr_val / (10 ^ iodbpr.data.data5.dec_val)
+ End If
+ End If
+ Next
+
+ Return True
+ End Function
- Public Overloads Function F_CheckRetError_Cnc(ByVal nReturn As Short, ByVal Position As String) As Boolean
- Dim szErrorDesc As String
+ '''
+ ''' Legge o scrive le variabile P Code Macro
+ '''
+ ''' Se True SCRIVE, se False LEGGE
+ ''' Indice di memoria
+ ''' Matrice di valori da scrivere su scrittura o letti su lettura
+ ''' True se andata a buon fine
+ Public Overloads Function F_RW_PCodeMacro_Short(ByVal bWrite As Boolean, ByVal MacroIndex As Integer, ByRef Value As Short) As Boolean
+ Dim bRet As Boolean
+ Dim sValue(0) As Short
+ If bWrite Then sValue(0) = Value
+ bRet = F_RW_PCodeMacro_Short(bWrite, MacroIndex, sValue)
+ If Not bWrite Then Value = sValue(0)
+ Return bRet
+ End Function
- If nReturn <> Focas1.EW_OK Then
- 'Seleziono il messaggio
- Select Case nReturn
- Case Focas1.EW_PROTOCOL : szErrorDesc = "Protocol error (Ethernet version only)"
- Case Focas1.EW_SOCKET : szErrorDesc = "Socket error (Ethernet version only)"
- Case Focas1.EW_NODLL : szErrorDesc = "DLL file error"
- Case Focas1.EW_BUS : szErrorDesc = "Bus error (HSSB version only)"
- Case Focas1.EW_SYSTEM2 : szErrorDesc = "System error (2) (HSSB version only)"
- Case Focas1.EW_HSSB : szErrorDesc = "Communication error of HSSB (HSSB version only)"
- Case Focas1.EW_HANDLE : szErrorDesc = "Handle number error"
- Case Focas1.EW_VERSION : szErrorDesc = "Version mismatch between the CNC/PMC and library"
- Case Focas1.EW_UNEXP : szErrorDesc = "Abnormal library state"
- Case Focas1.EW_SYSTEM : szErrorDesc = "System error (HSSB version only)"
- Case Focas1.EW_PARITY : szErrorDesc = "Shared RAM parity error (HSSB version only)"
- Case Focas1.EW_MMCSYS : szErrorDesc = "FANUC drivers installation error (HSSB version only)"
- Case Focas1.EW_RESET : szErrorDesc = "Reset or stop request"
- Case Focas1.EW_BUSY : szErrorDesc = "Busy"
- Case Focas1.EW_OK : szErrorDesc = "Normal termination"
- Case Focas1.EW_FUNC : szErrorDesc = "Error(function is not executed, or not available)"
- Case Focas1.EW_LENGTH : szErrorDesc = "Error(data block length error, error of number of data)"
- Case Focas1.EW_NUMBER : szErrorDesc = "Error(data number error)"
- Case Focas1.EW_ATTRIB : szErrorDesc = "Error(data attribute error)"
- Case Focas1.EW_DATA : szErrorDesc = "Error(data error)"
- Case Focas1.EW_NOOPT : szErrorDesc = "Error(no option)"
- Case Focas1.EW_PROT : szErrorDesc = "Error(write protection)"
- Case Focas1.EW_OVRFLOW : szErrorDesc = "Error(memory overflow)"
- Case Focas1.EW_PARAM : szErrorDesc = "Error(CNC parameter error)"
- Case Focas1.EW_BUFFER : szErrorDesc = "Error(buffer empty/full)"
- Case Focas1.EW_PATH : szErrorDesc = "Error(path number error)"
- Case Focas1.EW_MODE : szErrorDesc = "Error(CNC mode error)"
- Case Focas1.EW_REJECT : szErrorDesc = "Error(CNC execution rejection)"
- Case Focas1.EW_DTSRVR : szErrorDesc = "Error(Data server error)"
- Case Focas1.EW_ALARM : szErrorDesc = "Error(alarm)"
- Case Focas1.EW_STOP : szErrorDesc = "Error(stop)"
- Case Focas1.EW_PASSWD : szErrorDesc = "Error(State of data protection)"
- Case Else : szErrorDesc = "- ERRORE CNC INESISTENTE -"
- End Select
- 'Stampo il messaggio
- 'If Config.Settings.Settings.Debug > 0 Then
- ' impostato a true x mostrare errore
- If False Then
- 'If nReturn <> Focas1.EW_SOCKET Then 'tranne su errore di connessione
- 'CMSCncLib.App.Runtime..Log.WW("ERR pmc_wrpmcrng on F_RW_DWord CNC.FANUC", "Return=" & nReturn, True)
- MsgBox(szErrorDesc & vbLf & "Occurred in: " & Position, MsgBoxStyle.Exclamation + MsgBoxStyle.ApplicationModal, "Error on Fanuc CNC Data Window")
- 'End If
- End If
+ Public Overloads Function F_CheckRetError_Cnc(ByVal nReturn As Short, ByVal Position As String) As Boolean
+ Dim szErrorDesc As String
- Return True 'presenza errore
- End If
+ If nReturn <> Focas1.EW_OK Then
+ 'Seleziono il messaggio
+ Select Case nReturn
+ Case Focas1.EW_PROTOCOL : szErrorDesc = "Protocol error (Ethernet version only)"
+ Case Focas1.EW_SOCKET : szErrorDesc = "Socket error (Ethernet version only)"
+ Case Focas1.EW_NODLL : szErrorDesc = "DLL file error"
+ Case Focas1.EW_BUS : szErrorDesc = "Bus error (HSSB version only)"
+ Case Focas1.EW_SYSTEM2 : szErrorDesc = "System error (2) (HSSB version only)"
+ Case Focas1.EW_HSSB : szErrorDesc = "Communication error of HSSB (HSSB version only)"
+ Case Focas1.EW_HANDLE : szErrorDesc = "Handle number error"
+ Case Focas1.EW_VERSION : szErrorDesc = "Version mismatch between the CNC/PMC and library"
+ Case Focas1.EW_UNEXP : szErrorDesc = "Abnormal library state"
+ Case Focas1.EW_SYSTEM : szErrorDesc = "System error (HSSB version only)"
+ Case Focas1.EW_PARITY : szErrorDesc = "Shared RAM parity error (HSSB version only)"
+ Case Focas1.EW_MMCSYS : szErrorDesc = "FANUC drivers installation error (HSSB version only)"
+ Case Focas1.EW_RESET : szErrorDesc = "Reset or stop request"
+ Case Focas1.EW_BUSY : szErrorDesc = "Busy"
+ Case Focas1.EW_OK : szErrorDesc = "Normal termination"
+ Case Focas1.EW_FUNC : szErrorDesc = "Error(function is not executed, or not available)"
+ Case Focas1.EW_LENGTH : szErrorDesc = "Error(data block length error, error of number of data)"
+ Case Focas1.EW_NUMBER : szErrorDesc = "Error(data number error)"
+ Case Focas1.EW_ATTRIB : szErrorDesc = "Error(data attribute error)"
+ Case Focas1.EW_DATA : szErrorDesc = "Error(data error)"
+ Case Focas1.EW_NOOPT : szErrorDesc = "Error(no option)"
+ Case Focas1.EW_PROT : szErrorDesc = "Error(write protection)"
+ Case Focas1.EW_OVRFLOW : szErrorDesc = "Error(memory overflow)"
+ Case Focas1.EW_PARAM : szErrorDesc = "Error(CNC parameter error)"
+ Case Focas1.EW_BUFFER : szErrorDesc = "Error(buffer empty/full)"
+ Case Focas1.EW_PATH : szErrorDesc = "Error(path number error)"
+ Case Focas1.EW_MODE : szErrorDesc = "Error(CNC mode error)"
+ Case Focas1.EW_REJECT : szErrorDesc = "Error(CNC execution rejection)"
+ Case Focas1.EW_DTSRVR : szErrorDesc = "Error(Data server error)"
+ Case Focas1.EW_ALARM : szErrorDesc = "Error(alarm)"
+ Case Focas1.EW_STOP : szErrorDesc = "Error(stop)"
+ Case Focas1.EW_PASSWD : szErrorDesc = "Error(State of data protection)"
+ Case Else : szErrorDesc = "- ERRORE CNC INESISTENTE -"
+ End Select
- Return False 'assenza errori
- End Function
+ 'Stampo il messaggio
+ 'If Config.Settings.Settings.Debug > 0 Then
+ ' impostato a true x mostrare errore
+ If False Then
+ 'If nReturn <> Focas1.EW_SOCKET Then 'tranne su errore di connessione
+ 'CMSCncLib.App.Runtime..Log.WW("ERR pmc_wrpmcrng on F_RW_DWord CNC.FANUC", "Return=" & nReturn, True)
+ MsgBox(szErrorDesc & vbLf & "Occurred in: " & Position, MsgBoxStyle.Exclamation + MsgBoxStyle.ApplicationModal, "Error on Fanuc CNC Data Window")
+ 'End If
+ End If
- Public Overloads Function F_CheckRetError_Pmc(ByVal nReturn As Short, ByVal Position As String) As Boolean
- Dim szErrorDesc As String
+ Return True 'presenza errore
+ End If
- If nReturn <> Focas1.EW_OK Then
- 'Seleziono il messaggio
- Select Case nReturn
- Case Focas1.EW_PROTOCOL : szErrorDesc = "Protocol error (Ethernet version only)"
- Case Focas1.EW_SOCKET : szErrorDesc = "Socket error (Ethernet version only)"
- Case Focas1.EW_NODLL : szErrorDesc = "DLL file error"
- Case Focas1.EW_BUS : szErrorDesc = "Bus error (HSSB version only)"
- Case Focas1.EW_SYSTEM2 : szErrorDesc = "System error (2) (HSSB version only)"
- Case Focas1.EW_HSSB : szErrorDesc = "Communication error of HSSB (HSSB version only)"
- Case Focas1.EW_HANDLE : szErrorDesc = "Handle number error"
- Case Focas1.EW_VERSION : szErrorDesc = "Version mismatch between the CNC/PMC and library"
- Case Focas1.EW_UNEXP : szErrorDesc = "Abnormal library state"
- Case Focas1.EW_SYSTEM : szErrorDesc = "System error (HSSB version only)"
- Case Focas1.EW_PARITY : szErrorDesc = "Shared RAM parity error (HSSB version only)"
- Case Focas1.EW_MMCSYS : szErrorDesc = "FANUC drivers installation error (HSSB version only)"
- Case Focas1.EW_OK : szErrorDesc = "Normal termination"
- Case Focas1.EW_NOPMC : szErrorDesc = "Error(No PMC)"
- Case Focas1.EW_LENGTH : szErrorDesc = "Error(data block length error)"
- Case Focas1.EW_RANGE : szErrorDesc = "Error(address range error)"
- Case Focas1.EW_TYPE : szErrorDesc = "Error(address type/data type error)"
- Case Focas1.EW_DATA : szErrorDesc = "Error(data error)"
- Case Focas1.EW_NOOPT : szErrorDesc = "Error(no option)"
- Case Focas1.EW_BUFFER : szErrorDesc = "Error(buffer empty/full)"
- Case Focas1.EW_PASSWD : szErrorDesc = "Error(State of data protection)"
- Case Else : szErrorDesc = "- ERRORE PMC INESISTENTE -"
- End Select
+ Return False 'assenza errori
+ End Function
- ''Stampo il messaggio
- 'If (Config.Settings.Settings.Debug > 0) Then
- ' 'If nReturn <> Focas1.EW_SOCKET Then 'tranne su errore di connessione
- ' 'CMSCncLib.App.Runtime..Log.WW("ERR pmc_wrpmcrng on F_RW_DWord CNC.FANUC", "Return=" & nReturn, True)
- ' MsgBox(szErrorDesc & vbLf & "Occurred in: " & Position, MsgBoxStyle.Exclamation + MsgBoxStyle.ApplicationModal, "Error on Fanuc CNC Data Window")
- ' 'End If
- 'End If
- Return True 'presenza errore
- End If
+ Public Overloads Function F_CheckRetError_Pmc(ByVal nReturn As Short, ByVal Position As String) As Boolean
+ Dim szErrorDesc As String
- Return False 'assenza errori
- End Function
+ If nReturn <> Focas1.EW_OK Then
+ 'Seleziono il messaggio
+ Select Case nReturn
+ Case Focas1.EW_PROTOCOL : szErrorDesc = "Protocol error (Ethernet version only)"
+ Case Focas1.EW_SOCKET : szErrorDesc = "Socket error (Ethernet version only)"
+ Case Focas1.EW_NODLL : szErrorDesc = "DLL file error"
+ Case Focas1.EW_BUS : szErrorDesc = "Bus error (HSSB version only)"
+ Case Focas1.EW_SYSTEM2 : szErrorDesc = "System error (2) (HSSB version only)"
+ Case Focas1.EW_HSSB : szErrorDesc = "Communication error of HSSB (HSSB version only)"
+ Case Focas1.EW_HANDLE : szErrorDesc = "Handle number error"
+ Case Focas1.EW_VERSION : szErrorDesc = "Version mismatch between the CNC/PMC and library"
+ Case Focas1.EW_UNEXP : szErrorDesc = "Abnormal library state"
+ Case Focas1.EW_SYSTEM : szErrorDesc = "System error (HSSB version only)"
+ Case Focas1.EW_PARITY : szErrorDesc = "Shared RAM parity error (HSSB version only)"
+ Case Focas1.EW_MMCSYS : szErrorDesc = "FANUC drivers installation error (HSSB version only)"
+ Case Focas1.EW_OK : szErrorDesc = "Normal termination"
+ Case Focas1.EW_NOPMC : szErrorDesc = "Error(No PMC)"
+ Case Focas1.EW_LENGTH : szErrorDesc = "Error(data block length error)"
+ Case Focas1.EW_RANGE : szErrorDesc = "Error(address range error)"
+ Case Focas1.EW_TYPE : szErrorDesc = "Error(address type/data type error)"
+ Case Focas1.EW_DATA : szErrorDesc = "Error(data error)"
+ Case Focas1.EW_NOOPT : szErrorDesc = "Error(no option)"
+ Case Focas1.EW_BUFFER : szErrorDesc = "Error(buffer empty/full)"
+ Case Focas1.EW_PASSWD : szErrorDesc = "Error(State of data protection)"
+ Case Else : szErrorDesc = "- ERRORE PMC INESISTENTE -"
+ End Select
+
+ ''Stampo il messaggio
+ 'If (Config.Settings.Settings.Debug > 0) Then
+ ' 'If nReturn <> Focas1.EW_SOCKET Then 'tranne su errore di connessione
+ ' 'CMSCncLib.App.Runtime..Log.WW("ERR pmc_wrpmcrng on F_RW_DWord CNC.FANUC", "Return=" & nReturn, True)
+ ' MsgBox(szErrorDesc & vbLf & "Occurred in: " & Position, MsgBoxStyle.Exclamation + MsgBoxStyle.ApplicationModal, "Error on Fanuc CNC Data Window")
+ ' 'End If
+ 'End If
+ Return True 'presenza errore
+ End If
+
+ Return False 'assenza errori
+ End Function
#Region "Funzioni specifiche IOT"
- Public Function getAllAxisPos() As Focas1.ODBPOS
- ' RIFERIMENTO:
- ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdposition.htm
+ Public Function getAllAxisPos() As Focas1.ODBPOS
+ ' RIFERIMENTO:
+ ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdposition.htm
- Dim nPathIdx As Integer
- Dim nNumAxisRead As Integer
- Dim nReturn As Integer
+ Dim nPathIdx As Integer
+ Dim nNumAxisRead As Integer
+ Dim nReturn As Integer
- Dim posizAssi As Focas1.ODBPOS
+ Dim posizAssi As Focas1.ODBPOS
- 'leggo il numero del processo attivo
- nPathIdx = GetActivePath()
- 'leggo num max assi dal cn
- nNumAxisRead = Focas1.MAX_AXIS
+ 'leggo il numero del processo attivo
+ nPathIdx = GetActivePath()
+ 'leggo num max assi dal cn
+ nNumAxisRead = Focas1.MAX_AXIS
- If Is30Series Then
+ If Is30Series Then
- ' leggo tutto!!!
- nReturn = Focas1.cnc_rdposition(nLibHandle(nPathIdx), -1, nNumAxisRead, posizAssi)
+ ' leggo tutto!!!
+ nReturn = Focas1.cnc_rdposition(nLibHandle(nPathIdx), -1, nNumAxisRead, posizAssi)
- If F_CheckRetError_Cnc(nReturn, "cnc_rdposition RefreshAxisPosition CNC.FANUC.CMS_CncLib") Then
- Throw New CmsNcException("ERR cnc_rdposition RefreshAxisPosition CNC.FANUC.CMS_CncLib")
- End If
- End If
+ If F_CheckRetError_Cnc(nReturn, "cnc_rdposition RefreshAxisPosition CNC.FANUC.CMS_CncLib") Then
+ Throw New CmsNcException("ERR cnc_rdposition RefreshAxisPosition CNC.FANUC.CMS_CncLib")
+ End If
+ End If
- Return posizAssi
+ Return posizAssi
- End Function
+ End Function
- Public Function getAllAxisLoad() As Focas1.ODBSVLOAD
- ' RIFERIMENTO:
- ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdsvmeter.htm
+ Public Function getAllAxisLoad() As Focas1.ODBSVLOAD
+ ' RIFERIMENTO:
+ ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdsvmeter.htm
- Dim nPathIdx As Integer
- Dim nNumAxisRead As Integer
- Dim nReturn As Integer
+ Dim nPathIdx As Integer
+ Dim nNumAxisRead As Integer
+ Dim nReturn As Integer
- Dim caricoAssi As Focas1.ODBSVLOAD
+ Dim caricoAssi As Focas1.ODBSVLOAD
- 'leggo il numero del processo attivo
- nPathIdx = GetActivePath()
- 'leggo num max assi dal cn
- nNumAxisRead = Focas1.MAX_AXIS
+ 'leggo il numero del processo attivo
+ nPathIdx = GetActivePath()
+ 'leggo num max assi dal cn
+ nNumAxisRead = Focas1.MAX_AXIS
- If Is30Series Then
+ If Is30Series Then
- ' leggo tutto!!!
- nReturn = Focas1.cnc_rdsvmeter(nLibHandle(nPathIdx), nNumAxisRead, caricoAssi)
+ ' leggo tutto!!!
+ nReturn = Focas1.cnc_rdsvmeter(nLibHandle(nPathIdx), nNumAxisRead, caricoAssi)
- If F_CheckRetError_Cnc(nReturn, "cnc_rdsvmeter RefreshAxisMeter CNC.FANUC.CMS_CncLib") Then
- Throw New CmsNcException("ERR cnc_rdsvmeter RefreshAxisMeter CNC.FANUC.CMS_CncLib")
- End If
- End If
+ If F_CheckRetError_Cnc(nReturn, "cnc_rdsvmeter RefreshAxisMeter CNC.FANUC.CMS_CncLib") Then
+ Throw New CmsNcException("ERR cnc_rdsvmeter RefreshAxisMeter CNC.FANUC.CMS_CncLib")
+ End If
+ End If
- Return caricoAssi
+ Return caricoAssi
- End Function
+ End Function
- Public Function getGlobalFeedrate() As Focas1.ODBACT
- ' RIFERIMENTO:
- ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_actf.htm
+ Public Function getGlobalFeedrate() As Focas1.ODBACT
+ ' RIFERIMENTO:
+ ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_actf.htm
- Dim nPathIdx As Integer
- Dim nNumAxisRead As Integer
- Dim nReturn As Integer
+ Dim nPathIdx As Integer
+ Dim nNumAxisRead As Integer
+ Dim nReturn As Integer
- Dim feedData As Focas1.ODBACT
- ' inizializzo
- feedData = New Focas1.ODBACT
+ Dim feedData As Focas1.ODBACT
+ ' inizializzo
+ feedData = New Focas1.ODBACT
- 'leggo il numero del processo attivo
- nPathIdx = GetActivePath()
- 'leggo num max assi dal cn
- nNumAxisRead = Focas1.MAX_AXIS
+ 'leggo il numero del processo attivo
+ nPathIdx = GetActivePath()
+ 'leggo num max assi dal cn
+ nNumAxisRead = Focas1.MAX_AXIS
- If Is30Series Then
+ If Is30Series Then
- ' leggo feed globale
- nReturn = Focas1.cnc_actf(nLibHandle(nPathIdx), feedData)
+ ' leggo feed globale
+ nReturn = Focas1.cnc_actf(nLibHandle(nPathIdx), feedData)
- If F_CheckRetError_Cnc(nReturn, "cnc_actf RefreshActFeedRate CNC.FANUC.CMS_CncLib") Then
- Throw New CmsNcException("ERR cnc_actf RefreshActFeedRate CNC.FANUC.CMS_CncLib")
- End If
- End If
+ If F_CheckRetError_Cnc(nReturn, "cnc_actf RefreshActFeedRate CNC.FANUC.CMS_CncLib") Then
+ Throw New CmsNcException("ERR cnc_actf RefreshActFeedRate CNC.FANUC.CMS_CncLib")
+ End If
+ End If
- Return feedData
+ Return feedData
- End Function
+ End Function
- Public Function getSpindleLoad() As Focas1.ODBSPN
- ' RIFERIMENTO:
- ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdspload.htm
- ' RICHIEDE DRIVER ESTESO!!! NON VA!!!
+ Public Function getSpindleLoad() As Focas1.ODBSPN
+ ' RIFERIMENTO:
+ ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdspload.htm
+ ' RICHIEDE DRIVER ESTESO!!! NON VA!!!
- Dim nPathIdx As Integer
- Dim nNumAxisRead As Integer
- Dim nReturn As Integer
+ Dim nPathIdx As Integer
+ Dim nNumAxisRead As Integer
+ Dim nReturn As Integer
- Dim allData As Focas1.ODBSPN
- ' inizializzo
- allData = New Focas1.ODBSPN
+ Dim allData As Focas1.ODBSPN
+ ' inizializzo
+ allData = New Focas1.ODBSPN
- 'leggo il numero del processo attivo
- nPathIdx = GetActivePath()
- 'leggo num max assi dal cn
- nNumAxisRead = Focas1.MAX_AXIS
+ 'leggo il numero del processo attivo
+ nPathIdx = GetActivePath()
+ 'leggo num max assi dal cn
+ nNumAxisRead = Focas1.MAX_AXIS
- If Is30Series Then
+ If Is30Series Then
- ' leggo feed globale
- nReturn = Focas1.cnc_rdspload(nLibHandle(nPathIdx), -1, allData)
+ ' leggo feed globale
+ nReturn = Focas1.cnc_rdspload(nLibHandle(nPathIdx), -1, allData)
- If F_CheckRetError_Cnc(nReturn, "cnc_rdspload RefreshAllSpindleLoad CNC.FANUC.CMS_CncLib") Then
- Throw New CmsNcException("ERR cnc_rdspload RefreshAllSpindleLoad CNC.FANUC.CMS_CncLib")
- End If
- End If
+ If F_CheckRetError_Cnc(nReturn, "cnc_rdspload RefreshAllSpindleLoad CNC.FANUC.CMS_CncLib") Then
+ Throw New CmsNcException("ERR cnc_rdspload RefreshAllSpindleLoad CNC.FANUC.CMS_CncLib")
+ End If
+ End If
- Return allData
+ Return allData
- End Function
+ End Function
- Public Function getAllDynData() As Focas1.ODBDY2_1
- ' RIFERIMENTO:
- ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rddynamic2.htm
+ Public Function getAllDynData() As Focas1.ODBDY2_1
+ ' RIFERIMENTO:
+ ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rddynamic2.htm
- Dim nPathIdx As Integer
- Dim nNumAxisRead As Integer
- Dim nReturn As Integer
+ Dim nPathIdx As Integer
+ Dim nNumAxisRead As Integer
+ Dim nReturn As Integer
- Dim allData As Focas1.ODBDY2_1
- ' inizializzo
- allData = New Focas1.ODBDY2_1
+ Dim allData As Focas1.ODBDY2_1
+ ' inizializzo
+ allData = New Focas1.ODBDY2_1
- 'leggo il numero del processo attivo
- nPathIdx = GetActivePath()
- 'leggo num max assi dal cn
- nNumAxisRead = Focas1.MAX_AXIS
+ 'leggo il numero del processo attivo
+ nPathIdx = GetActivePath()
+ 'leggo num max assi dal cn
+ nNumAxisRead = Focas1.MAX_AXIS
- If Is30Series Then
+ If Is30Series Then
- nReturn = Focas1.cnc_rddynamic2(nLibHandle(nPathIdx), 1, 28 + 4 * (4 * 1), allData)
- '!!! non funziona: con -1 LEGGE 1 SOLO ASSE!!!
- 'nReturn = Focas1.cnc_rddynamic2(nLibHandle(nPathIdx), -1, 28 + 4 * (4 * nNumAxisRead), allData)
+ nReturn = Focas1.cnc_rddynamic2(nLibHandle(nPathIdx), 1, 28 + 4 * (4 * 1), allData)
+ '!!! non funziona: con -1 LEGGE 1 SOLO ASSE!!!
+ 'nReturn = Focas1.cnc_rddynamic2(nLibHandle(nPathIdx), -1, 28 + 4 * (4 * nNumAxisRead), allData)
- If F_CheckRetError_Cnc(nReturn, "cnc_rddynamic2 RefreshAllData CNC.FANUC.CMS_CncLib") Then
- Throw New CmsNcException("ERR cnc_rddynamic2 RefreshAllData CNC.FANUC.CMS_CncLib")
- End If
- End If
+ If F_CheckRetError_Cnc(nReturn, "cnc_rddynamic2 RefreshAllData CNC.FANUC.CMS_CncLib") Then
+ Throw New CmsNcException("ERR cnc_rddynamic2 RefreshAllData CNC.FANUC.CMS_CncLib")
+ End If
+ End If
- Return allData
+ Return allData
- End Function
+ End Function
- Public Function getCncAlarm() As Focas1.ODBALMMSG2
- ' RIFERIMENTO:
- ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Misc\cnc_rdalmmsg2.htm
- ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Misc\cnc_rdalminfo.htm
+ Public Function getCncAlarm() As Focas1.ODBALMMSG2
+ ' RIFERIMENTO:
+ ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Misc\cnc_rdalmmsg2.htm
+ ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Misc\cnc_rdalminfo.htm
- Dim nPathIdx As Integer
- Dim nNumAxisRead As Integer
- Dim nReturn As Integer
+ Dim nPathIdx As Integer
+ Dim nNumAxisRead As Integer
+ Dim nReturn As Integer
- Dim allData As Focas1.ODBALMMSG2
- ' inizializzo
- allData = New Focas1.ODBALMMSG2
+ Dim allData As Focas1.ODBALMMSG2
+ ' inizializzo
+ allData = New Focas1.ODBALMMSG2
- 'leggo il numero del processo attivo
- nPathIdx = GetActivePath()
- 'leggo num max assi dal cn
- nNumAxisRead = Focas1.MAX_AXIS
+ 'leggo il numero del processo attivo
+ nPathIdx = GetActivePath()
+ 'leggo num max assi dal cn
+ nNumAxisRead = Focas1.MAX_AXIS
- ' vettore num allarmi MAX da leggere......
- Dim numAllarmi As Int16
- numAllarmi = 512
+ ' vettore num allarmi MAX da leggere......
+ Dim numAllarmi As Int16
+ numAllarmi = 512
- If Is30Series Then
+ If Is30Series Then
- ' leggo tutto!!!
- nReturn = Focas1.cnc_rdalmmsg2(nLibHandle(nPathIdx), -1, numAllarmi, allData)
+ ' leggo tutto!!!
+ nReturn = Focas1.cnc_rdalmmsg2(nLibHandle(nPathIdx), -1, numAllarmi, allData)
- If F_CheckRetError_Cnc(nReturn, "cnc_rdalmmsg2 GetCncAlarm CNC.FANUC.CMS_CncLib") Then
- Throw New CmsNcException("ERR cnc_rdalmmsg2 GetCncAlarm CNC.FANUC.CMS_CncLib")
- End If
- End If
+ If F_CheckRetError_Cnc(nReturn, "cnc_rdalmmsg2 GetCncAlarm CNC.FANUC.CMS_CncLib") Then
+ Throw New CmsNcException("ERR cnc_rdalmmsg2 GetCncAlarm CNC.FANUC.CMS_CncLib")
+ Return New Focas1.ODBALMMSG2
+ End If
- Return allData
+ End If
- End Function
+ Return allData
- Public Function getPathGCodeMod() As Focas1.ODBGCD
- ' RIFERIMENTO:
- ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Misc\cnc_rdgcode.htm
+ End Function
- Dim nPathIdx As Integer
- Dim nNumAxisRead As Integer
- Dim nReturn As Integer
+ Public Function getPathGCodeMod() As Focas1.ODBGCD
+ ' RIFERIMENTO:
+ ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Misc\cnc_rdgcode.htm
- Dim actGCode As Focas1.ODBGCD
- ' inizializzo
- actGCode = New Focas1.ODBGCD
+ Dim nPathIdx As Integer
+ Dim nNumAxisRead As Integer
+ Dim nReturn As Integer
- 'leggo il numero del processo attivo
- nPathIdx = GetActivePath()
- 'leggo num max assi dal cn
- nNumAxisRead = Focas1.MAX_AXIS
+ Dim actGCode As Focas1.ODBGCD
+ ' inizializzo
+ actGCode = New Focas1.ODBGCD
- If Is30Series Then
+ 'leggo il numero del processo attivo
+ nPathIdx = GetActivePath()
+ 'leggo num max assi dal cn
+ nNumAxisRead = Focas1.MAX_AXIS
- ' leggo tutto!!! 0-27 (28 elementi)
- nReturn = Focas1.cnc_rdgcode(nLibHandle(nPathIdx), -1, 1, 37, actGCode)
+ If Is30Series Then
- If F_CheckRetError_Cnc(nReturn, "cnc_rdgcode RefreshPathGCode CNC.FANUC.CMS_CncLib") Then
- Throw New CmsNcException("ERR cnc_rdgcode RefreshPathGCode CNC.FANUC.CMS_CncLib")
- End If
- End If
+ ' leggo tutto!!! 0-27 (28 elementi)
+ nReturn = Focas1.cnc_rdgcode(nLibHandle(nPathIdx), -1, 1, 37, actGCode)
- Return actGCode
+ If F_CheckRetError_Cnc(nReturn, "cnc_rdgcode RefreshPathGCode CNC.FANUC.CMS_CncLib") Then
+ Throw New CmsNcException("ERR cnc_rdgcode RefreshPathGCode CNC.FANUC.CMS_CncLib")
+ End If
+ End If
- End Function
+ Return actGCode
- Public Function getPathGCode1Shot() As Focas1.ODBGCD
- ' RIFERIMENTO:
- ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Misc\cnc_rdgcode.htm
+ End Function
- Dim nPathIdx As Integer
- Dim nNumAxisRead As Integer
- Dim nReturn As Integer
+ Public Function getPathGCode1Shot() As Focas1.ODBGCD
+ ' RIFERIMENTO:
+ ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Misc\cnc_rdgcode.htm
- Dim actGCode As Focas1.ODBGCD
- ' inizializzo
- actGCode = New Focas1.ODBGCD
+ Dim nPathIdx As Integer
+ Dim nNumAxisRead As Integer
+ Dim nReturn As Integer
- 'leggo il numero del processo attivo
- nPathIdx = GetActivePath()
- 'leggo num max assi dal cn
- nNumAxisRead = Focas1.MAX_AXIS
+ Dim actGCode As Focas1.ODBGCD
+ ' inizializzo
+ actGCode = New Focas1.ODBGCD
- If Is30Series Then
+ 'leggo il numero del processo attivo
+ nPathIdx = GetActivePath()
+ 'leggo num max assi dal cn
+ nNumAxisRead = Focas1.MAX_AXIS
- ' leggo tutto!!! 0-27 (28 elementi)
- nReturn = Focas1.cnc_rdgcode(nLibHandle(nPathIdx), -2, 1, 4, actGCode)
+ If Is30Series Then
- If F_CheckRetError_Cnc(nReturn, "cnc_rdgcode RefreshPathGCode CNC.FANUC.CMS_CncLib") Then
- Throw New CmsNcException("ERR cnc_rdgcode RefreshPathGCode CNC.FANUC.CMS_CncLib")
- End If
- End If
+ ' leggo tutto!!! 0-27 (28 elementi)
+ nReturn = Focas1.cnc_rdgcode(nLibHandle(nPathIdx), -2, 1, 4, actGCode)
- Return actGCode
+ If F_CheckRetError_Cnc(nReturn, "cnc_rdgcode RefreshPathGCode CNC.FANUC.CMS_CncLib") Then
+ Throw New CmsNcException("ERR cnc_rdgcode RefreshPathGCode CNC.FANUC.CMS_CncLib")
+ End If
+ End If
- End Function
+ Return actGCode
- Public Function getPathTTCoord() As Focas1.ODB5AXMAN
- ' RIFERIMENTO:
- ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rd5axmandt.htm
+ End Function
- Dim nPathIdx As Integer
- Dim nNumAxisRead As Integer
- Dim nReturn As Integer
+ Public Function getPathTTCoord() As Focas1.ODB5AXMAN
+ ' RIFERIMENTO:
+ ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rd5axmandt.htm
- Dim ttCoord As Focas1.ODB5AXMAN
- ' inizializzo
- ttCoord = New Focas1.ODB5AXMAN
+ Dim nPathIdx As Integer
+ Dim nNumAxisRead As Integer
+ Dim nReturn As Integer
- 'leggo il numero del processo attivo
- nPathIdx = GetActivePath()
- 'leggo num max assi dal cn
- nNumAxisRead = Focas1.MAX_AXIS
+ Dim ttCoord As Focas1.ODB5AXMAN
+ ' inizializzo
+ ttCoord = New Focas1.ODB5AXMAN
- If Is30Series Then
+ 'leggo il numero del processo attivo
+ nPathIdx = GetActivePath()
+ 'leggo num max assi dal cn
+ nNumAxisRead = Focas1.MAX_AXIS
- ' leggo tutto!!!
- nReturn = Focas1.cnc_rd5axmandt(nLibHandle(nPathIdx), ttCoord)
+ If Is30Series Then
- If F_CheckRetError_Cnc(nReturn, "cnc_rd3dtooltip RefreshPathTTCoord CNC.FANUC.CMS_CncLib") Then
- Throw New CmsNcException("ERR cnc_rd3dtooltip RefreshPathTTCoord CNC.FANUC.CMS_CncLib")
- End If
- End If
+ ' leggo tutto!!!
+ nReturn = Focas1.cnc_rd5axmandt(nLibHandle(nPathIdx), ttCoord)
- Return ttCoord
+ If F_CheckRetError_Cnc(nReturn, "cnc_rd3dtooltip RefreshPathTTCoord CNC.FANUC.CMS_CncLib") Then
+ Throw New CmsNcException("ERR cnc_rd3dtooltip RefreshPathTTCoord CNC.FANUC.CMS_CncLib")
+ End If
+ End If
- End Function
+ Return ttCoord
- Public Function getSpindleSpeed() As Focas1.ODBSPEED
- ' RIFERIMENTO:
- ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdspeed.htm
+ End Function
- Dim nPathIdx As Integer
- Dim nNumAxisRead As Integer
- Dim nReturn As Integer
+ Public Function getSpindleSpeed() As Focas1.ODBSPEED
+ ' RIFERIMENTO:
+ ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdspeed.htm
- Dim speedAssi As Focas1.ODBSPEED
+ Dim nPathIdx As Integer
+ Dim nNumAxisRead As Integer
+ Dim nReturn As Integer
- 'leggo il numero del processo attivo
- nPathIdx = GetActivePath()
- 'leggo num max assi dal cn
- nNumAxisRead = Focas1.MAX_AXIS
+ Dim speedAssi As Focas1.ODBSPEED
- If Is30Series Then
+ 'leggo il numero del processo attivo
+ nPathIdx = GetActivePath()
+ 'leggo num max assi dal cn
+ nNumAxisRead = Focas1.MAX_AXIS
- ' leggo tutto!!!
- nReturn = Focas1.cnc_rdspeed(nLibHandle(nPathIdx), -1, speedAssi)
+ If Is30Series Then
- If F_CheckRetError_Cnc(nReturn, "cnc_rdspeed RefreshAxisSpeed CNC.FANUC.CMS_CncLib") Then
- Throw New CmsNcException("ERR cnc_rdspeed RefreshAxisSpeed CNC.FANUC.CMS_CncLib")
- End If
- End If
+ ' leggo tutto!!!
+ nReturn = Focas1.cnc_rdspeed(nLibHandle(nPathIdx), -1, speedAssi)
- Return speedAssi
+ If F_CheckRetError_Cnc(nReturn, "cnc_rdspeed RefreshAxisSpeed CNC.FANUC.CMS_CncLib") Then
+ Throw New CmsNcException("ERR cnc_rdspeed RefreshAxisSpeed CNC.FANUC.CMS_CncLib")
+ End If
+ End If
- End Function
+ Return speedAssi
+
+ End Function
#End Region
- End Class
+ End Class
End Namespace
\ No newline at end of file
diff --git a/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs b/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs
index a959f2b..9be619d 100644
--- a/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs
+++ b/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs
@@ -845,10 +845,17 @@ namespace MTC_Adapter
parentForm.commPlcActive = true;
inizio = DateTime.Now;
- allarmiCNC = FANUC_ref.getCncAlarm();
- if (utils.CRB("recTime")) TimingData.addResult("R-CNC-ALARMS", DateTime.Now.Subtract(inizio).Ticks);
+ try
+ {
+ allarmiCNC = FANUC_ref.getCncAlarm();
+ if (utils.CRB("recTime")) TimingData.addResult("R-CNC-ALARMS", DateTime.Now.Subtract(inizio).Ticks);
+ checkCNCAlarms();
+ }
+ catch (Exception exc)
+ {
+ lg.Error(string.Format("Errore in recupero Allarmi CNC{0}{1}", Environment.NewLine, exc));
+ }
parentForm.commPlcActive = false;
- checkCNCAlarms();
}
else
{