Imports CndexLinkDotNet
Imports Microsoft.Win32
Imports CMSControl.App.Runtime
Imports CMSControl.Config.Settings
Imports T_memType = System.Collections.Generic.Dictionary(Of System.Int32, System.Collections.Generic.Dictionary(Of System.Int32, System.Object))
Imports T_memDim = System.Collections.Generic.Dictionary(Of System.Int32, System.Object)
Namespace CNC
Public Class OSAI_OPEN
Inherits OSAI
'Variabili per Web Service OPENcontrol
Protected _szIpAddress As String
Friend OPENws As OPENcontrol.OPENcontrolPortTypeClient
Private nReturn As Short
Protected Const MAXRET = 3
Public Enum O_Table
TOOL_TABLE_ID = 1
OFFSET_TABLE_ID = 2
ORIGIN_TABLE_ID = 3
USER_TABLE_ID = 4
End Enum
Public Overrides Property Licenza() As Integer
Get
Dim uiLicence(0) As UInteger
'leggo dal cn il valore
Me.O_RW_DWord(R, MemTypeWord.GW_CODE, 303, uiLicence)
Return UnsignedToInteger(uiLicence(0))
End Get
Set(ByVal value As Integer)
'setto sul cn il valore
Dim uiLicence(0) As UInteger
uiLicence(0) = IntegerToUnsigned(value)
Me.O_RW_DWord(W, MemTypeWord.GW_CODE, 303, uiLicence)
End Set
End Property
Public Overrides Property LicenzaScaduta() As Boolean
Get
Dim bLicenzaScaduta As Boolean
'leggo dal cn il valore
Me.O_RW_Boolean(R, MemTypeWord.GW_CODE, 302, 0, bLicenzaScaduta)
Return bLicenzaScaduta
End Get
Set(ByVal value As Boolean)
'setto sul cn il valore
Me.O_RW_Boolean(W, MemTypeWord.GW_CODE, 302, 0, value)
End Set
End Property
Public Sub New(ByRef szIpAddress As String)
_Type = NcType.OSAI
_szIpAddress = szIpAddress
Dim conf As String = "OPENcontrol"
Dim url As String = "http://" & szIpAddress & ":8080"
Try
OPENws = New OPENcontrol.OPENcontrolPortTypeClient(conf, url)
Catch ex As Exception
MsgBox(ex.Message)
End Try
'Definisco l'area della Cnc Window
SetCncWindowSize()
'Inizializzo le variabili
Me._Descrizione = "NC OSAI OPENcontrol" & vbNewLine
Me._Descrizione = Me._Descrizione & "IpAddress: " & _szIpAddress
End Sub
Public Overrides Sub Connect(Optional ByRef szStatus As String = "")
Dim BootPhaseEnquiryR As New OPENcontrol.BootPhaseEnquiryR
Dim BootPhaseEnquiry As OPENcontrol.BootPhaseEnquiry
Dim szReturn As String = ""
Dim usValue(0) As UShort
Dim TimeStart As Date
BootPhaseEnquiry = New OPENcontrol.BootPhaseEnquiry()
'leggo in che fase di boot mi trovo
Try
BootPhaseEnquiryR = OPENws.BootPhaseEnquiry(BootPhaseEnquiry)
Catch ex As System.ServiceModel.EndpointNotFoundException
_bConnected = False
Throw New CmsNcException(ex.Message)
Catch ex As System.ServiceModel.CommunicationException
_bConnected = False
Throw New CmsNcException(ex.Message)
End Try
If O_CheckRetError(BootPhaseEnquiryR.retval, BootPhaseEnquiryR.ErrClass, BootPhaseEnquiryR.ErrNum, String.Format("BootPhaseEnquiry({0}) Connect CNC.OSAI_OPEN", BootPhaseEnquiry), szReturn) Then
_bConnected = False
Throw New CmsNcException(szReturn)
Else
'verifico che il sistema si trovi in una fase operativa "stabile"
Log.WI("OK BootPhaseEnquiry CNC.OSAI_OPEN", "Phase=" & BootPhaseEnquiryR.Phase, CLog.Lev.Secondary)
If BootPhaseEnquiryR.Phase = 4 Then 'SYSTEM_UP_PHASE
'leggo matricola e verifico che sia diversa da zero
TimeStart = Now
Do
Select Case Settings.MemoryMapping
Case MemoryMapping.ElsManager, _
MemoryMapping.ToolManager
'Matricola
usValue(0) = 0 'non esiste mappatura elsmangaer e toolmanager in OPENcontrol
MsgBox("Non esiste implementazione con questa mappatura su OSAI OPENcontrol", MsgBoxStyle.Critical)
End
Case MemoryMapping.Default, _
MemoryMapping.ToolTable
'Matricola
nReturn = O_RW_Word(R, MemTypeWord.MW_CODE, 3403, usValue)
End Select
If usValue(0) > 0 Then
Threading.Thread.Sleep(500)
Exit Do
End If
If (Now - TimeStart).Seconds > 30 Then
Select Case MsgBox("Matricola non inizializzata in 30 secondi: Verificare inizializzazione PLC", MsgBoxStyle.Exclamation + MsgBoxStyle.RetryCancel)
Case MsgBoxResult.Retry : TimeStart = Now
Case MsgBoxResult.Cancel : Exit Do
End Select
End If
Log.WI("OK Connect CNC.OSAI_OPEN but SERIAL NUMBER NOT YET INITIALIZED", , CLog.Lev.Secondary)
Application.DoEvents()
Threading.Thread.Sleep(500) 'aspetto 500ms prima di ritentare
Application.DoEvents()
Loop
_bConnected = True
Log.WI("OK Connect CNC.OSAI_OPEN", "Connected=" & _bConnected, CLog.Lev.Secondary)
Else
_bConnected = False
Log.WI("OK Connect CNC.OSAI_OPEN but PHASE NOT OK", "Phase=" & BootPhaseEnquiryR.Phase & " Connected=" & _bConnected, CLog.Lev.Secondary)
Throw New CmsNcException("ERR BootPhase NOT OK CNC.OSAI_OPEN")
End If
End If
End Sub
Public Overrides Sub Disconnect(Optional ByRef szStatus As String = "")
_bConnected = False
End Sub
'''
''' Legge le memorie di configurazione dal cn
'''
Public Overrides Sub GetStaticData()
Dim nValue(0) As Integer
Dim sValue(0) As Short
Dim ucValue(0) As Byte
If Not bStaticDataReaded Then
'Try
Select Case Settings.MemoryMapping
Case MemoryMapping.ElsManager
Case MemoryMapping.Default, _
MemoryMapping.ToolManager, _
MemoryMapping.ToolTable
'Matricola
nReturn = O_RW_Short(R, MemTypeWord.MW_CODE, 3403, sValue)
Me._Matricola = sValue(0)
'Teste
nReturn = O_RW_Short(R, MemTypeWord.MW_CODE, 3405, sValue)
Me._Teste = sValue(0)
'Magazzini
nReturn = O_RW_Short(R, MemTypeWord.MW_CODE, 3407, sValue)
Me._Magazzini = sValue(0)
'Manine per Magazzino
ReDim Me._ManineMagazzino(Me._Magazzini - 1)
ReDim ucValue(19)
nReturn = O_RW_Byte(R, MemTypeWord.MW_CODE, 2900, LOW_ORDER, ucValue)
Array.Copy(ucValue, Me._ManineMagazzino, Me._ManineMagazzino.Length)
ReDim ucValue(0)
'Magazzini Con Attrezzaggio Automatico (maschera)
O_RW_Integer(R, MemTypeWord.MW_CODE, 4060, nValue)
Me._MagazziniConAttrezzaggioAutomatico = nValue(0)
End Select
Me._MaxUtensiliGestibili = 300 'TODO IMPLEMENTARE
Me._MaxIdUtensile = 300 'TODO IMPLEMENTARE
Select Case Settings.MemoryMapping
Case MemoryMapping.ElsManager
Case MemoryMapping.ToolManager
Case MemoryMapping.Default, _
MemoryMapping.ToolTable
'ZoomSpeed
nReturn = O_RW_Short(R, MemTypeWord.MW_CODE, 3425, sValue)
If sValue(0) > 0 And sValue(0) <= 100 Then
Me._ZoomSpeed = sValue(0)
Else
Me._ZoomSpeed = 1
End If
End Select
bStaticDataReaded = True
'Catch ex As CmsNcException
' Me.CncException(ex.Message)
'End Try
End If
End Sub
'''
''' Legge o scrive Boolean da MEMORIE PLC
'''
''' Se True SCRIVE, se False LEGGE
''' Tipo di memoria Osai
''' Indice di memoria
''' Bit della memoria
''' Valore da scrivere su scrittura e letto su lettura
''' True se andata a buon fine
Public Overloads Overrides Function O_RW_Boolean(ByVal bWrite As Boolean, ByVal MemType As MemTypeWord, ByVal MemIndex As Integer, ByVal MemBit As Integer, ByRef Value As Boolean) As Boolean
Dim szReturn As String = ""
Dim nRetry As Integer
Retry: nRetry += 1
Try
If bWrite Then ' *** Write
Dim myWriteVarWordBitR As OPENcontrol.WriteVarWordBitR
Dim myWriteVarWordBit As New OPENcontrol.WriteVarWordBit
myWriteVarWordBit.Code = MemType
myWriteVarWordBit.Index = MemIndex
myWriteVarWordBit.BitIndex = MemBit
myWriteVarWordBit.BitValue = IIf(Value, 1, 0)
myWriteVarWordBitR = OPENws.WriteVarWordBit(myWriteVarWordBit)
If O_CheckRetError(myWriteVarWordBitR.retval, myWriteVarWordBitR.ErrClass, myWriteVarWordBitR.ErrNum, String.Format("WriteVarWordBit({0},{1}) O_RW_Boolean CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Else ' ************* Read
Dim myReadVarWordR As OPENcontrol.ReadVarWordR
Dim myReadVarWord As New OPENcontrol.ReadVarWord
myReadVarWord.Code = MemType
myReadVarWord.Index = MemIndex
myReadVarWord.NumVar = 1
myReadVarWordR = OPENws.ReadVarWord(myReadVarWord)
If O_CheckRetError(myReadVarWordR.retval, myReadVarWordR.ErrClass, myReadVarWordR.ErrNum, String.Format("ReadVarWord({0},{1}) O_RW_Boolean CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
If (myReadVarWordR.Value(0) And (2 ^ MemBit)) = (2 ^ MemBit) Then 'True
Value = True
Else 'False
Value = False
End If
End If
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
Catch ex As System.TimeoutException
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
'''
''' Legge o scrive Byte da MEMORIE PLC
'''
''' Se True SCRIVE, se False LEGGE
''' Tipo di memoria Osai
''' Indice di memoria
''' Ordine di partenza LOW_ORDER = 0 HIGH_ORDER = 1
''' Matrice di valori da scrivere su scrittura o letti su lettura
''' True se andata a buon fine
Public Overloads Overrides Function O_RW_Byte(ByVal bWrite As Boolean, ByVal MemType As MemTypeWord, ByVal MemIndex As Integer, ByVal MemOrderStart As Integer, ByRef Value() As Byte) As Boolean
Dim szReturn As String = ""
Dim bStartHigh As Boolean = MemOrderStart
Dim bEndDispari As Boolean = (Value.Length + MemOrderStart) Mod 2
Dim cStart, cEnd As Byte
Dim ValueTmp(((Value.Length + MemOrderStart) \ 2) + ((Value.Length + MemOrderStart) Mod 2) - 1) As UShort
Dim nRetry As Integer
Retry: nRetry += 1
Try
If bWrite Then ' *** Write
'se comincio con hi leggo la prima memo
If bStartHigh Then
Dim ValStartTmp(0) As UShort
O_RW_Word(R, MemType, MemIndex, ValStartTmp)
cStart = WordToByte(ValStartTmp(0), LOW_ORDER)
End If
'se finisco dispari, leggo l'ultima memo
If bEndDispari Then
Dim ValEndTmp(0) As UShort
O_RW_Word(R, MemType, MemIndex + ValueTmp.Length - 1, ValEndTmp)
cEnd = WordToByte(ValEndTmp(0), HIGH_ORDER)
End If
For i = 0 To ValueTmp.Length - 1
Dim cLow, cHigh As Byte
'Low
If i = 0 AndAlso bStartHigh Then
cLow = cStart
Else
cLow = Value(i * 2 - MemOrderStart)
End If
'High
If i = (ValueTmp.Length - 1) AndAlso bEndDispari Then
cHigh = cEnd
Else
cHigh = Value(i * 2 + 1 - MemOrderStart)
End If
ValueTmp(i) = ByteToWord(cLow, cHigh)
Next
O_RW_Word(W, MemType, MemIndex, ValueTmp)
Else ' ************* Read
Dim myReadVarWordR As OPENcontrol.ReadVarWordR
Dim myReadVarWord As New OPENcontrol.ReadVarWord
myReadVarWord.Code = MemType
myReadVarWord.Index = MemIndex
myReadVarWord.NumVar = ValueTmp.Length
myReadVarWordR = OPENws.ReadVarWord(myReadVarWord)
If O_CheckRetError(myReadVarWordR.retval, myReadVarWordR.ErrClass, myReadVarWordR.ErrNum, String.Format("ReadVarWord({0},{1}) O_RW_Byte CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
For i = 0 To Value.Length - 1
Value(i) = WordToByte(myReadVarWordR.Value((i + MemOrderStart) \ 2), (i + MemOrderStart) Mod 2)
Next
End If
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
Catch ex As System.TimeoutException
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
'''
''' Legge o scrive Word da MEMORIE PLC
'''
''' Se True SCRIVE, se False LEGGE
''' Tipo di memoria Osai
''' Indice di memoria
''' Matrice di valori da scrivere su scrittura o letti su lettura
''' True se andata a buon fine
Public Overloads Overrides Function O_RW_Word(ByVal bWrite As Boolean, ByVal MemType As MemTypeWord, ByVal MemIndex As Integer, ByRef Value() As UShort) As Boolean
Dim szReturn As String = ""
Dim nRetry As Integer
Retry: nRetry += 1
Try
If bWrite Then ' *** Write
Dim myWriteVarWordR As OPENcontrol.WriteVarWordR
Dim myWriteVarWord As New OPENcontrol.WriteVarWord
myWriteVarWord.Code = MemType
myWriteVarWord.Index = MemIndex
myWriteVarWord.NumVar = Value.Length
ReDim myWriteVarWord.Value(Value.Length - 1)
Array.Copy(Value, myWriteVarWord.Value, Value.Length)
myWriteVarWordR = OPENws.WriteVarWord(myWriteVarWord)
If O_CheckRetError(myWriteVarWordR.retval, myWriteVarWordR.ErrClass, myWriteVarWordR.ErrNum, String.Format("WriteVarWord({0},{1}) O_RW_Word CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Else ' ************* Read
Dim myReadVarWordR As OPENcontrol.ReadVarWordR
Dim myReadVarWord As New OPENcontrol.ReadVarWord
myReadVarWord.Code = MemType
myReadVarWord.Index = MemIndex
myReadVarWord.NumVar = Value.Length
myReadVarWordR = OPENws.ReadVarWord(myReadVarWord)
If O_CheckRetError(myReadVarWordR.retval, myReadVarWordR.ErrClass, myReadVarWordR.ErrNum, String.Format("ReadVarWord({0},{1}) O_RW_Word CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Array.Copy(myReadVarWordR.Value, Value, Value.Length)
End If
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
Catch ex As System.TimeoutException
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
'''
''' Legge o scrive Short da MEMORIE PLC
'''
''' Se True SCRIVE, se False LEGGE
''' Tipo di memoria Osai
''' Indice di memoria
''' Matrice di valori da scrivere su scrittura o letti su lettura
''' True se andata a buon fine
Public Overloads Overrides Function O_RW_Short(ByVal bWrite As Boolean, ByVal MemType As MemTypeWord, ByVal MemIndex As Integer, ByRef Value() As Short) As Boolean
Dim szReturn As String = ""
Dim nRetry As Integer
Retry: nRetry += 1
Try
If bWrite Then ' *** Write
Dim myWriteVarWordR As OPENcontrol.WriteVarWordR
Dim myWriteVarWord As New OPENcontrol.WriteVarWord
myWriteVarWord.Code = MemType
myWriteVarWord.Index = MemIndex
myWriteVarWord.NumVar = Value.Length
ReDim myWriteVarWord.Value(Value.Length - 1)
For i = 0 To Value.Length - 1
myWriteVarWord.Value(i) = ShortToUnsigned(Value(i))
Next
myWriteVarWordR = OPENws.WriteVarWord(myWriteVarWord)
If O_CheckRetError(myWriteVarWordR.retval, myWriteVarWordR.ErrClass, myWriteVarWordR.ErrNum, String.Format("WriteVarWord({0},{1}) O_RW_Short CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Else ' ************* Read
Dim myReadVarWordR As OPENcontrol.ReadVarWordR
Dim myReadVarWord As New OPENcontrol.ReadVarWord
myReadVarWord.Code = MemType
myReadVarWord.Index = MemIndex
myReadVarWord.NumVar = Value.Length
myReadVarWordR = OPENws.ReadVarWord(myReadVarWord)
If O_CheckRetError(myReadVarWordR.retval, myReadVarWordR.ErrClass, myReadVarWordR.ErrNum, String.Format("ReadVarWord({0},{1}) O_RW_Short CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
For i = 0 To Value.Length - 1
Value(i) = UnsignedToShort(myReadVarWordR.Value(i))
Next
End If
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
Catch ex As System.TimeoutException
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
'''
''' Legge o scrive Integer da MEMORIE PLC
'''
''' Se True SCRIVE, se False LEGGE
''' Tipo di memoria Osai
''' Indice di memoria
''' Matrice di valori da scrivere su scrittura o letti su lettura
''' True se andata a buon fine
Public Overloads Overrides Function O_RW_DWord(ByVal bWrite As Boolean, ByVal MemType As MemTypeWord, ByVal MemIndex As Integer, ByRef Value() As UInteger) As Boolean
Dim szReturn As String = ""
Dim ValueTmp(Value.Length * 2 - 1) As UShort
Dim nRetry As Integer
Retry: nRetry += 1
Try
If bWrite Then ' *** Write
Dim myWriteVarWordR As OPENcontrol.WriteVarWordR
Dim myWriteVarWord As New OPENcontrol.WriteVarWord
myWriteVarWord.Code = MemType
myWriteVarWord.Index = MemIndex
myWriteVarWord.NumVar = ValueTmp.Length
For i = 0 To Value.Length - 1
ValueTmp(i * 2) = DWordToWord(Value(i), LOW_ORDER)
ValueTmp(i * 2 + 1) = DWordToWord(Value(i), HIGH_ORDER)
Next
ReDim myWriteVarWord.Value(ValueTmp.Length - 1)
Array.Copy(ValueTmp, myWriteVarWord.Value, ValueTmp.Length)
myWriteVarWordR = OPENws.WriteVarWord(myWriteVarWord)
If O_CheckRetError(myWriteVarWordR.retval, myWriteVarWordR.ErrClass, myWriteVarWordR.ErrNum, String.Format("WriteVarWord({0},{1}) O_RW_DWord CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Else ' ************* Read
Dim myReadVarWordR As OPENcontrol.ReadVarWordR
Dim myReadVarWord As New OPENcontrol.ReadVarWord
myReadVarWord.Code = MemType
myReadVarWord.Index = MemIndex
myReadVarWord.NumVar = ValueTmp.Length
myReadVarWordR = OPENws.ReadVarWord(myReadVarWord)
If O_CheckRetError(myReadVarWordR.retval, myReadVarWordR.ErrClass, myReadVarWordR.ErrNum, String.Format("ReadVarWord({0},{1}) O_RW_DWord CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
Else
For i = 0 To Value.Length - 1
Value(i) = WordsToDWord(myReadVarWordR.Value(i * 2), myReadVarWordR.Value(i * 2 + 1))
Next
End If
End If
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
Catch ex As System.TimeoutException
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
'''
''' Legge o scrive Integer da MEMORIE PLC
'''
''' Se True SCRIVE, se False LEGGE
''' Tipo di memoria Osai
''' Indice di memoria
''' Matrice di valori da scrivere su scrittura o letti su lettura
''' True se andata a buon fine
Public Overloads Overrides Function O_RW_Integer(ByVal bWrite As Boolean, ByVal MemType As MemTypeWord, ByVal MemIndex As Integer, ByRef Value() As Integer) As Boolean
Dim szReturn As String = ""
Dim ValueTmp(Value.Length * 2 - 1) As UShort
Dim nRetry As Integer
Retry: nRetry += 1
Try
If bWrite Then ' *** Write
Dim myWriteVarWordR As OPENcontrol.WriteVarWordR
Dim myWriteVarWord As New OPENcontrol.WriteVarWord
myWriteVarWord.Code = MemType
myWriteVarWord.Index = MemIndex
myWriteVarWord.NumVar = ValueTmp.Length
For i = 0 To Value.Length - 1
ValueTmp(i * 2) = IntegerToWord(Value(i), LOW_ORDER)
ValueTmp(i * 2 + 1) = IntegerToWord(Value(i), HIGH_ORDER)
Next
ReDim myWriteVarWord.Value(ValueTmp.Length - 1)
Array.Copy(ValueTmp, myWriteVarWord.Value, ValueTmp.Length)
myWriteVarWordR = OPENws.WriteVarWord(myWriteVarWord)
If O_CheckRetError(myWriteVarWordR.retval, myWriteVarWordR.ErrClass, myWriteVarWordR.ErrNum, String.Format("WriteVarDWord({0},{1}) O_RW_DWord CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Else ' ************* Read
Dim myReadVarWordR As OPENcontrol.ReadVarWordR
Dim myReadVarWord As New OPENcontrol.ReadVarWord
myReadVarWord.Code = MemType
myReadVarWord.Index = MemIndex
myReadVarWord.NumVar = ValueTmp.Length
myReadVarWordR = OPENws.ReadVarWord(myReadVarWord)
If O_CheckRetError(myReadVarWordR.retval, myReadVarWordR.ErrClass, myReadVarWordR.ErrNum, String.Format("ReadVarDWord({0},{1}) O_RW_DWord CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
Else
For i = 0 To Value.Length - 1
Value(i) = WordsToInteger(myReadVarWordR.Value(i * 2), myReadVarWordR.Value(i * 2 + 1))
Next
End If
End If
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
Catch ex As System.TimeoutException
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
'''
''' Legge o scrive Double da MEMORIE PLC
'''
''' Se True SCRIVE, se False LEGGE
''' Tipo di memoria Osai
''' Indice di memoria
''' Matrice di valori da scrivere su scrittura o letti su lettura
''' True se andata a buon fine
Public Overloads Overrides Function O_RW_Double(ByVal bWrite As Boolean, ByVal MemType As MemTypeDouble, ByVal MemIndex As Integer, ByRef Value() As Double) As Boolean
Dim szReturn As String = ""
Dim nRetry As Integer
Retry: nRetry += 1
Try
If bWrite Then ' *** Write
Dim myWriteVarDoubleR As OPENcontrol.WriteVarDoubleR
Dim myWriteVarDouble As New OPENcontrol.WriteVarDouble
myWriteVarDouble.Code = MemType
myWriteVarDouble.Index = MemIndex
myWriteVarDouble.NumVar = Value.Length
ReDim myWriteVarDouble.Value(Value.Length - 1)
Array.Copy(Value, myWriteVarDouble.Value, Value.Length)
myWriteVarDoubleR = OPENws.WriteVarDouble(myWriteVarDouble)
If O_CheckRetError(myWriteVarDoubleR.retval, myWriteVarDoubleR.ErrClass, myWriteVarDoubleR.ErrNum, String.Format("WriteVarDouble({0},{1}) O_RW_Double CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Else ' ************* Read
Dim myReadVarDoubleR As OPENcontrol.ReadVarDoubleR
Dim myReadVarDouble As New OPENcontrol.ReadVarDouble
myReadVarDouble.Code = MemType
myReadVarDouble.Index = MemIndex
myReadVarDouble.NumVar = Value.Length
myReadVarDoubleR = OPENws.ReadVarDouble(myReadVarDouble)
If O_CheckRetError(myReadVarDoubleR.retval, myReadVarDoubleR.ErrClass, myReadVarDoubleR.ErrNum, String.Format("ReadVarDouble({0},{1}) O_RW_Double CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Array.Copy(myReadVarDoubleR.Value, Value, Value.Length)
End If
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
Catch ex As System.TimeoutException
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
'''
''' Legge o scrive Stringhe da MEMORIE SC
'''
''' Se True SCRIVE, se False LEGGE
''' Indice di memoria
''' Lunghezza caratteri
''' Stringa da scrivere su scrittura o leggere su lettura
''' True se andata a buon fine
Public Overloads Overrides Function O_RW_Text(ByVal bWrite As Boolean, ByVal MemType As MemTypeText, ByVal MemIndex As Integer, ByVal MemLength As Integer, ByRef Value As String) As Boolean
Dim szReturn As String = ""
Dim nRetry As Integer
Retry: nRetry += 1
Try
If bWrite Then ' *** Write
Dim myWriteVarTextR As OPENcontrol.WriteVarTextR
Dim myWriteVarText As New OPENcontrol.WriteVarText
myWriteVarText.Code = MemType
myWriteVarText.Index = MemIndex
myWriteVarText.Len = MemLength
myWriteVarText.Text = Value
myWriteVarText.Process = 1 'serve per le variabili SC
myWriteVarTextR = OPENws.WriteVarText(myWriteVarText)
If O_CheckRetError(myWriteVarTextR.retval, myWriteVarTextR.ErrClass, myWriteVarTextR.ErrNum, String.Format("WriteVarText({0},{1}) O_RW_Text CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Else ' ************* Read
Dim myReadVarTextR As OPENcontrol.ReadVarTextR
Dim myReadVarText As New OPENcontrol.ReadVarText
myReadVarText.Code = MemType
myReadVarText.Index = MemIndex
myReadVarText.Size = MemLength
myReadVarText.Process = 1 'serve per le variabili SC
myReadVarTextR = OPENws.ReadVarText(myReadVarText)
If O_CheckRetError(myReadVarTextR.retval, myReadVarTextR.ErrClass, myReadVarTextR.ErrNum, String.Format("ReadVarText({0},{1}) O_RW_Text CNC.OSAI_OPEN", [Enum].GetName(MemType.GetType, MemType), MemIndex), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Value = myReadVarTextR.Text
End If
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
Catch ex As System.TimeoutException
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
'''
''' Legge o scrive Length and Radius Offset da tabella Utensili CN
'''
''' Se True SCRIVE, se False LEGGE
''' Numero dell'offset utensile
Public Overrides Function O_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) As Boolean
Dim szReturn As String = ""
Dim nRetry As Integer
Retry: nRetry += 1
Try
If bWrite Then ' *** Write
'leggo il correttore per usarlo come template
Dim myGetOffsetTabRecordIIR As OPENcontrol.GetOffsetTabRecordIIR
Dim myGetOffsetTabRecordII As New OPENcontrol.GetOffsetTabRecordII
myGetOffsetTabRecordII.RecordNum = ToolOffsetNumber
myGetOffsetTabRecordIIR = OPENws.GetOffsetTabRecordII(myGetOffsetTabRecordII)
If O_CheckRetError(myGetOffsetTabRecordIIR.retval, myGetOffsetTabRecordIIR.ErrClass, myGetOffsetTabRecordIIR.ErrNum, String.Format("GetOffsetTabRecordII({0}) O_RW_ToolOffset CNC.OSAI_OPEN", ToolOffsetNumber), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Dim mySetOffsetTabRecordIIR As OPENcontrol.SetOffsetTabRecordIIR
Dim mySetOffsetTabRecordII As New OPENcontrol.SetOffsetTabRecordII
mySetOffsetTabRecordII.RecordNum = ToolOffsetNumber
mySetOffsetTabRecordII.RecordBuff = myGetOffsetTabRecordIIR.RecordBuff
'modifico i valori che mi interesssano
mySetOffsetTabRecordII.RecordBuff.DiaVal(0).ActChangeVal = CutterRadius_Wear
mySetOffsetTabRecordII.RecordBuff.DiaVal(0).ValOrig = CutterRadius_Geometry
mySetOffsetTabRecordII.RecordBuff.LenVal(0).ActChangeVal = ToolLenght_Wear
mySetOffsetTabRecordII.RecordBuff.LenVal(0).ValOrig = ToolLenght_Geometry
'scrivo il correttore
mySetOffsetTabRecordIIR = OPENws.SetOffsetTabRecordII(mySetOffsetTabRecordII)
If O_CheckRetError(mySetOffsetTabRecordIIR.retval, mySetOffsetTabRecordIIR.ErrClass, mySetOffsetTabRecordIIR.ErrNum, String.Format("SetOffsetTabRecordII({0}) O_RW_ToolOffset CNC.OSAI_OPEN", ToolOffsetNumber), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Else ' ************* Read
Dim myGetOffsetTabRecordIIR As OPENcontrol.GetOffsetTabRecordIIR
Dim myGetOffsetTabRecordII As New OPENcontrol.GetOffsetTabRecordII
myGetOffsetTabRecordII.RecordNum = ToolOffsetNumber
myGetOffsetTabRecordIIR = OPENws.GetOffsetTabRecordII(myGetOffsetTabRecordII)
If O_CheckRetError(myGetOffsetTabRecordIIR.retval, myGetOffsetTabRecordIIR.ErrClass, myGetOffsetTabRecordIIR.ErrNum, String.Format("GetOffsetTabRecordII({0}) O_RW_ToolOffset CNC.OSAI_OPEN", ToolOffsetNumber), szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
CutterRadius_Wear = myGetOffsetTabRecordIIR.RecordBuff.DiaVal(0).ActChangeVal
CutterRadius_Geometry = myGetOffsetTabRecordIIR.RecordBuff.DiaVal(0).ValOrig
ToolLenght_Wear = myGetOffsetTabRecordIIR.RecordBuff.LenVal(0).ActChangeVal
ToolLenght_Geometry = myGetOffsetTabRecordIIR.RecordBuff.LenVal(0).ValOrig
End If
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
End Try
'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 Function
'''
''' Blocca l'accesso alla tabella dei correttori
'''
''' =True: Blocca la tabella, =False: Sblocca la tabella
''' True se andata a buon fine
Public Overrides Function O_LockOffsetTable(ByVal Lock As Boolean) As Boolean
Static bLocked As Boolean
Dim szReturn As String = ""
Dim nRetry As Integer
Retry: nRetry += 1
Try
If Lock Then
If Not bLocked Then
Dim myLockTableIIR As OPENcontrol.LockTableIIR
Dim myLockTableII As New OPENcontrol.LockTableII
myLockTableII.TableNum = O_Table.OFFSET_TABLE_ID
myLockTableIIR = OPENws.LockTableII(myLockTableII)
If O_CheckRetError(myLockTableIIR.retval, myLockTableIIR.ErrClass, myLockTableIIR.ErrNum, String.Format("LockTableII({0}) O_LockOffsetTable CNC.OSAI_OPEN", myLockTableII.TableNum), szReturn) Then
'Throw New CmsNcException(szReturn)
Return False
End If
bLocked = True
End If
Else
Dim myUnLockTableIIR As OPENcontrol.UnLockTableIIR
Dim myUnLockTableII As New OPENcontrol.UnLockTableII
myUnLockTableII.TableNum = O_Table.OFFSET_TABLE_ID
myUnLockTableIIR = OPENws.UnLockTableII(myUnLockTableII)
If O_CheckRetError(myUnLockTableIIR.retval, myUnLockTableIIR.ErrClass, myUnLockTableIIR.ErrNum, String.Format("UnLockTableII({0}) O_LockOffsetTable CNC.OSAI_OPEN", myUnLockTableII.TableNum), szReturn) Then
'Throw New CmsNcException(szReturn)
Return False
End If
bLocked = False
End If
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
'''
''' Legge il numero del processo attivo
'''
''' Valore di ritorno del processo selezionato
''' True se andata a buon fine
Public Overloads Overrides Function O_GetSelectedProcess(ByRef ProcessId As Short) As Boolean
Dim szReturn As String = ""
Dim myGetSelectedProcessR As OPENcontrol.GetSelectedProcessR
Dim myGetSelectedProcess As New OPENcontrol.GetSelectedProcess
Dim nRetry As Integer
Retry: nRetry += 1
Try
myGetSelectedProcessR = OPENws.GetSelectedProcess(myGetSelectedProcess)
If O_CheckRetError(myGetSelectedProcessR.retval, myGetSelectedProcessR.ErrClass, myGetSelectedProcessR.ErrNum, "GetSelectedProcess() O_GetSelectedProcess CNC.OSAI_OPEN", szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
ProcessId = UnsignedToShort(myGetSelectedProcessR.ProcNum)
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
'''
''' Legge la riga del programma attivo
'''
''' Riga in esecuzione del programma attivo
''' True se andata a buon fine
Public Overloads Overrides Function O_GetActiveLineProgram(ByRef Line As String) As Boolean
Dim szReturn As String = ""
Dim myGetPartProgramLinesR As OPENcontrol.GetPartProgramLinesR
Dim myGetPartProgramLines As New OPENcontrol.GetPartProgramLines
Dim ProcessId As Short
Dim nRetry As Integer
Retry: nRetry += 1
Try
O_GetSelectedProcess(ProcessId)
myGetPartProgramLines.ProcNum = ProcessId
myGetPartProgramLinesR = OPENws.GetPartProgramLines(myGetPartProgramLines)
If O_CheckRetError(myGetPartProgramLinesR.retval, myGetPartProgramLinesR.ErrClass, myGetPartProgramLinesR.ErrNum, "GetPartProgramLines() O_GetActiveLineProgram CNC.OSAI_OPEN", szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
Line = myGetPartProgramLinesR.PPLine2
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
'''
''' Legge la tabella assi
'''
''' Processo selezionato
''' Valore di ritorno Assi del processo selezionato
''' True se andata a buon fine
Public Overloads Overrides Function O_GetAxisTab(ByVal ProcessId As Short, ByRef AxisTable() As Char, ByRef AxisIdTable() As Short) As Boolean
Dim szReturn As String = ""
Dim i, j As Integer
Dim myGetAxesInfo3R As OPENcontrol.GetAxesInfo3R
Dim myGetAxesInfo3 As New OPENcontrol.GetAxesInfo3
Dim nRetry As Integer
Retry: nRetry += 1
Try
myGetAxesInfo3.AxesNum = 64
myGetAxesInfo3R = OPENws.GetAxesInfo3(myGetAxesInfo3)
If O_CheckRetError(myGetAxesInfo3R.retval, myGetAxesInfo3R.ErrClass, myGetAxesInfo3R.ErrNum, "GetAxesInfo3() O_RW_Word CNC.OSAI_OPEN", szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
For i = 0 To 63
If myGetAxesInfo3R.AxOwnerList(i) = ProcessId Then
If (myGetAxesInfo3R.AxNameList(i) < Asc("a") Or myGetAxesInfo3R.AxNameList(i) > Asc("z")) And myGetAxesInfo3R.AxNameList(i) <> Asc("S") Then
AxisTable(j) = Chr(myGetAxesInfo3R.AxNameList(i))
AxisIdTable(j) = i + 1
j += 1
End If
'ElseIf myGetAxesInfo3R.AxOwnerList(i) = &HFFFF& Then 'Non esco perchè gli assi potrebbero non essere in fila
' Exit For
End If
Next i
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
End Class
End Namespace