Files
Mapo-IOB-WIN/CMSCncLib/CNC/CNC.FANUC/CNC.FANUC.vb
T
2018-11-19 19:38:38 +01:00

1820 lines
68 KiB
VB.net

Imports CMSCncLib.Config.Settings
Namespace 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 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
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
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
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 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
_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
Select Case _CncScreen_connectionType
Case FANUC.ConnectionType.Ethernet
Me.CncScreen_ProcessName = "CNCScrnE"
Case FANUC.ConnectionType.Hssb
Me.CncScreen_ProcessName = "CNCScrn"
End Select
End Sub
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
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))
_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
''' <summary>
''' Get class series of CNC: 16 or 30
''' </summary>
''' <returns>Series</returns>
''' <remarks>After, use Is16Series and Is30Series for discriminate</remarks>
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
''' <summary>
''' Legge le memorie di configurazione dal cn
''' </summary>
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
''' <summary>
''' Legge il numero del processo attivo
''' </summary>
''' <returns>Processo attivo</returns>
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
''' <summary>
''' Legge o scrive Boolean da MEMORIE PLC
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemType">Tipo di memoria Fanuc</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="MemBit">Bit della memoria</param>
''' <param name="Value">Valore da scrivere su scrittura e letto su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive Byte da MEMORIE PLC
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemType">Tipo di memoria Fanuc</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive Byte da MEMORIE PLC
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemType">Tipo di memoria Fanuc</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="Value">Valore da scrivere su scrittura o letto su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive Word da MEMORIE PLC
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemType">Tipo di memoria Fanuc</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive Short da MEMORIE PLC
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemType">Tipo di memoria Fanuc</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive Word da MEMORIE PLC
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemType">Tipo di memoria Fanuc</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="Value">Valore da scrivere su scrittura o letto su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive Short da MEMORIE PLC
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemType">Tipo di memoria Fanuc</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="Value">Valore da scrivere su scrittura o letto su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge DWord da MEMORIE PLC
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemType">Tipo di memoria Fanuc</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge DWord da MEMORIE PLC
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemType">Tipo di memoria Fanuc</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="Value">Valore da scrivere su scrittura o letto su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge Integer da MEMORIE PLC
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemType">Tipo di memoria Fanuc</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge Integer da MEMORIE PLC
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemType">Tipo di memoria Fanuc</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="Value">Valore da scrivere su scrittura o letto su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive Length and Radius Offset da tabella Utensili CN
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="ToolOffsetNumber">Numero dell'offset utensile</param>
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
''' <summary>
''' Cancella la tabella Utensili CN
''' </summary>
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
''' <summary>
''' Legge o scrive Parametri Interi
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="Axis">0: assigns no axis, -1: assigns all axes </param>
''' <param name="ParamIndex">Indice di memoria</param>
''' <param name="Size">1 byte, 2 word, 3 dword</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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 : 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
''' <summary>
''' Legge o scrive Parametri Interi
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MemIndex">Indice di memoria</param>
''' <param name="Size">1 byte, 2 word, 3 dword</param>
''' <param name="Value">Valore da scrivere su scrittura o letto su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive le variabile Custom Macro
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MacroIndex">Indice di memoria</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
Next
Return True
End Function
''' <summary>
''' Legge o scrive le variabile Custom Macro
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MacroIndex">Indice di memoria</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive le variabile Custom Macro
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MacroIndex">Indice di memoria</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive le variabile Custom Macro
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MacroIndex">Indice di memoria</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive le variabile P Code Macro
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MacroIndex">Indice di memoria</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
''' <summary>
''' Legge o scrive le variabile P Code Macro
''' </summary>
''' <param name="bWrite">Se True SCRIVE, se False LEGGE</param>
''' <param name="MacroIndex">Indice di memoria</param>
''' <param name="Value">Matrice di valori da scrivere su scrittura o letti su lettura</param>
''' <returns>True se andata a buon fine</returns>
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
Public Overloads Function F_CheckRetError_Cnc(ByVal nReturn As Short, ByVal Position As String) As Boolean
Dim szErrorDesc As String
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
Return True 'presenza errore
End If
Return False 'assenza errori
End Function
Public Overloads Function F_CheckRetError_Pmc(ByVal nReturn As Short, ByVal Position As String) As Boolean
Dim szErrorDesc As String
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
Dim nPathIdx As Integer
Dim nNumAxisRead As Integer
Dim nReturn As Integer
Dim posizAssi As Focas1.ODBPOS
'leggo il numero del processo attivo
nPathIdx = GetActivePath()
'leggo num max assi dal cn
nNumAxisRead = Focas1.MAX_AXIS
If Is30Series Then
' 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
Return posizAssi
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
Dim nPathIdx As Integer
Dim nNumAxisRead As Integer
Dim nReturn As Integer
Dim caricoAssi As Focas1.ODBSVLOAD
'leggo il numero del processo attivo
nPathIdx = GetActivePath()
'leggo num max assi dal cn
nNumAxisRead = Focas1.MAX_AXIS
If Is30Series Then
' 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
Return caricoAssi
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
Dim nPathIdx As Integer
Dim nNumAxisRead As Integer
Dim nReturn As Integer
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
If Is30Series Then
' 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
Return feedData
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!!!
Dim nPathIdx As Integer
Dim nNumAxisRead As Integer
Dim nReturn As Integer
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
If Is30Series Then
' 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
Return allData
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
Dim nPathIdx As Integer
Dim nNumAxisRead As Integer
Dim nReturn As Integer
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
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)
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
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
Dim nPathIdx As Integer
Dim nNumAxisRead As Integer
Dim nReturn As Integer
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
' vettore num allarmi MAX da leggere......
Dim numAllarmi As Int16
numAllarmi = 512
If Is30Series Then
Try
' 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")
Return New Focas1.ODBALMMSG2
End If
Catch ex As Exception
End Try
End If
Return allData
End Function
Public Function getPathGCodeMod() As Focas1.ODBGCD
' RIFERIMENTO:
' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Misc\cnc_rdgcode.htm
Dim nPathIdx As Integer
Dim nNumAxisRead As Integer
Dim nReturn As Integer
Dim actGCode As Focas1.ODBGCD
' inizializzo
actGCode = New Focas1.ODBGCD
'leggo il numero del processo attivo
nPathIdx = GetActivePath()
'leggo num max assi dal cn
nNumAxisRead = Focas1.MAX_AXIS
If Is30Series Then
' leggo tutto!!! 0-27 (28 elementi)
nReturn = Focas1.cnc_rdgcode(nLibHandle(nPathIdx), -1, 1, 37, 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
Return actGCode
End Function
Public Function getPathGCode1Shot() As Focas1.ODBGCD
' RIFERIMENTO:
' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Misc\cnc_rdgcode.htm
Dim nPathIdx As Integer
Dim nNumAxisRead As Integer
Dim nReturn As Integer
Dim actGCode As Focas1.ODBGCD
' inizializzo
actGCode = New Focas1.ODBGCD
'leggo il numero del processo attivo
nPathIdx = GetActivePath()
'leggo num max assi dal cn
nNumAxisRead = Focas1.MAX_AXIS
If Is30Series Then
' leggo tutto!!! 0-27 (28 elementi)
nReturn = Focas1.cnc_rdgcode(nLibHandle(nPathIdx), -2, 1, 4, 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
Return actGCode
End Function
Public Function getPathTTCoord() As Focas1.ODB5AXMAN
' RIFERIMENTO:
' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rd5axmandt.htm
Dim nPathIdx As Integer
Dim nNumAxisRead As Integer
Dim nReturn As Integer
Dim ttCoord As Focas1.ODB5AXMAN
' inizializzo
ttCoord = New Focas1.ODB5AXMAN
'leggo il numero del processo attivo
nPathIdx = GetActivePath()
'leggo num max assi dal cn
nNumAxisRead = Focas1.MAX_AXIS
If Is30Series Then
' leggo tutto!!!
nReturn = Focas1.cnc_rd5axmandt(nLibHandle(nPathIdx), 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
Return ttCoord
End Function
Public Function getSpindleSpeed() As Focas1.ODBSPEED
' RIFERIMENTO:
' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdspeed.htm
Dim nPathIdx As Integer
Dim nNumAxisRead As Integer
Dim nReturn As Integer
Dim speedAssi As Focas1.ODBSPEED
'leggo il numero del processo attivo
nPathIdx = GetActivePath()
'leggo num max assi dal cn
nNumAxisRead = Focas1.MAX_AXIS
If Is30Series Then
' leggo tutto!!!
nReturn = Focas1.cnc_rdspeed(nLibHandle(nPathIdx), -1, 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
Return speedAssi
End Function
#End Region
End Class
End Namespace