378 lines
12 KiB
VB.net
378 lines
12 KiB
VB.net
'
|
|
' libreria : VBlib
|
|
' file : ComCNOsaiVB6
|
|
'
|
|
' funzioni : connessione con CN OSAI come classe - override metodi per vecchie versioni WinNbi
|
|
'
|
|
' copyright 2008-2016 C.Viviani
|
|
'
|
|
Imports Microsoft.Win32
|
|
|
|
Public Class ComCNOSAIVB6
|
|
|
|
Inherits ComCNOsai
|
|
|
|
Public Sub New(ByRef szRemoteName As String, ByRef b_debug As Boolean)
|
|
|
|
MyBase.New(szRemoteName, b_debug)
|
|
|
|
End Sub
|
|
|
|
Public Overrides Function OpenSession() As Boolean
|
|
|
|
Dim nReturn As Short
|
|
|
|
'mi connetto al server Cndex
|
|
nReturn = ConnectServer_C("", mErrClass, mErrNum)
|
|
|
|
If nReturn = ERRORE_OSAI Then
|
|
Connected = False
|
|
ErrMsg = "Error on ConnectServer_C" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)
|
|
Else
|
|
'apro una sessione col CN
|
|
Connected = True
|
|
nReturn = OpenSession_C(NomeCn, SessionOpened, mErrClass, mErrNum)
|
|
|
|
If nReturn = ERRORE_OSAI Then
|
|
Connected = False
|
|
ErrMsg = "Error on OpenSession_C" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)
|
|
End If
|
|
End If
|
|
|
|
Return Connected
|
|
|
|
End Function
|
|
|
|
Public Overrides Function CloseSession() As Boolean
|
|
Dim nReturn As Short
|
|
Dim bOk As Boolean
|
|
|
|
bOk = True
|
|
|
|
'chiudo la sessione
|
|
nReturn = CloseSession_C(SessionOpened, mErrClass, mErrNum)
|
|
If nReturn = ERRORE_OSAI Then
|
|
ErrMsg = "Error on CloseSession_C" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)
|
|
Connected = False
|
|
bOk = False
|
|
Else
|
|
Connected = False
|
|
End If
|
|
|
|
'rilascio il server Cndex
|
|
nReturn = ReleaseServer_C(mErrClass, mErrNum)
|
|
If nReturn = ERRORE_OSAI Then
|
|
ErrMsg = "Error on ReleaseServer_C" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)
|
|
Connected = False
|
|
bOk = False
|
|
Else
|
|
Connected = False
|
|
End If
|
|
|
|
Return bOk
|
|
|
|
End Function
|
|
|
|
'------------------------------
|
|
' Lettura variabile Short su Cn
|
|
'------------------------------
|
|
Public Overrides Function ReadShortVar(ByVal szVar As stVAR, Optional ByVal nProcess As Integer = 1) As Short
|
|
|
|
Dim nValues As Short
|
|
Dim pVar As PLVARDESC
|
|
Dim nComOk As Short ' Se 1 lettura OK Se 0 lettura KO
|
|
Dim nNumVarToBeReaded As Integer = 1 ' Numero di variabili da leggere (fisso a 1)
|
|
|
|
pVar.Code = CndexLinkUserVB6.GW_CODE
|
|
pVar.Index = szVar.nAddress
|
|
|
|
' se macchina collegata e non in debug
|
|
If (Not (Debug)) Then
|
|
|
|
nComOk = GetPLVarWord_C(SessionOpened, nNumVarToBeReaded, pVar, nValues, ErrClass, ErrNum)
|
|
|
|
If (nComOk = ERRORE_OSAI) Then
|
|
|
|
ErrMsg = "Error on GetPLVarWord_C" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)
|
|
Return CShort(ERRORVALUE) ' In uscita setto variabile a ERRORVALUE errore
|
|
|
|
Else
|
|
|
|
' return con il valore letto
|
|
Return nValues
|
|
|
|
End If
|
|
|
|
|
|
Else ' gestione se debug
|
|
|
|
' ritorno true
|
|
Return 1
|
|
|
|
End If
|
|
|
|
End Function
|
|
|
|
'--------------------------------
|
|
' Lettura multi variabile MW su Cn
|
|
'--------------------------------
|
|
Public Overrides Function ReadMultipleVarMW(ByVal nAddress As Integer, ByRef nValues() As Short, ByVal nNumVarToRead As Short, Optional ByVal nProcess As Integer = 1) As Boolean
|
|
|
|
Dim pVar As PLVARDESC
|
|
Dim nComOk As Short ' Se 1 lettura OK Se 0 lettura KO
|
|
|
|
pVar.Code = CndexLinkUserVB6.MW_CODE
|
|
pVar.Index = nAddress
|
|
|
|
' se macchina collegata e non in debug
|
|
If (Not (Debug)) Then
|
|
|
|
nComOk = GetPLVarWord_M_C(SessionOpened, nNumVarToRead, pVar, nValues, ErrClass, ErrNum)
|
|
|
|
If (nComOk = ERRORE_OSAI) Then
|
|
|
|
ErrMsg = "Error on GetPLVarWord_M_C" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)
|
|
Return False
|
|
|
|
Else
|
|
|
|
' return con il valore letto
|
|
Return True
|
|
|
|
End If
|
|
|
|
|
|
Else ' gestione se debug
|
|
|
|
' ritorno true
|
|
Return True
|
|
|
|
End If
|
|
|
|
End Function
|
|
|
|
' -------------------------------
|
|
' Scrittura variabile Short su Cn
|
|
'---------------------------------
|
|
Public Overrides Function WriteShortVar(ByVal szVar As stVAR, ByVal nValue As Short, Optional ByVal nProcess As Integer = 1) As Boolean
|
|
|
|
Dim pVar As PLVARDESC
|
|
Dim nComOk As Short ' Se 1 scritt. OK Se 0 lettura KO
|
|
Dim nNumVarToBeWrited As Integer = 1 ' Numero di variabili da leggere (fisso a 1)
|
|
|
|
If (Not (Debug)) Then ' Se macchina collegata
|
|
|
|
pVar.Bit = szVar.nBit
|
|
pVar.Code = CndexLinkUserVB6.GW_CODE
|
|
pVar.Index = szVar.nAddress
|
|
nComOk = SetPLVarWord_C(SessionOpened, nNumVarToBeWrited, pVar, nValue, ErrClass, ErrNum)
|
|
|
|
If (nComOk = ERRORE_OSAI) Then
|
|
|
|
ErrMsg = "Error on SetPLVarWord_C" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)
|
|
Return False
|
|
|
|
Else
|
|
|
|
Return True
|
|
|
|
End If
|
|
|
|
Else ' gestione in debug
|
|
|
|
Return True
|
|
|
|
End If
|
|
|
|
|
|
End Function
|
|
|
|
'--------------------------------
|
|
' Lettura variabile SC su Cn
|
|
'--------------------------------
|
|
Public Overrides Function ReadSCVar(ByVal nIndex As Integer, ByVal nNumChar As Integer, Optional ByVal nProcess As Integer = 1) As String
|
|
|
|
Dim szValue As String = " "
|
|
Dim nComOk As Short ' Se 1 lettura OK Se 0 lettura KO
|
|
|
|
' se macchina collegata e non in debug
|
|
If (Not (Debug)) Then
|
|
|
|
nComOk = GetVarSC_C(SessionOpened, nProcess, nIndex, nNumChar, szValue, ErrClass, ErrNum)
|
|
|
|
If (nComOk = ERRORE_OSAI) Then
|
|
ErrMsg = "Error on reading SC variable" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)
|
|
Return "" ' In uscita setto variabile a ERRORVALUE errore
|
|
Else
|
|
' return con il valore letto
|
|
Return szValue
|
|
End If
|
|
|
|
|
|
Else ' gestione se debug
|
|
|
|
' ritorno true
|
|
Return "SC VAR - DEBUG"
|
|
|
|
End If
|
|
|
|
|
|
End Function
|
|
|
|
' ---------------------------------
|
|
' Scrittura variabile SC su Cn
|
|
'----------------------------------
|
|
Public Overrides Function WriteSCVar(ByVal nIndex As Integer, ByVal nNumChar As Integer, ByVal szText As String, Optional ByVal nProcess As Integer = 1) As Boolean
|
|
|
|
Dim nComOk As Short ' Se 1 scrittura OK Se 0 scrittura KO
|
|
|
|
' se macchina collegata e non in debug
|
|
If (Not (Debug)) Then
|
|
|
|
nComOk = SetVarSC_C(SessionOpened, nProcess, nIndex, nNumChar, szText, ErrClass, ErrNum)
|
|
|
|
If (nComOk = ERRORE_OSAI) Then
|
|
|
|
ErrMsg = "Error on writing SC variable" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)
|
|
Return False ' In uscita setto variabile a ERRORVALUE errore
|
|
|
|
Else
|
|
|
|
Return True
|
|
|
|
End If
|
|
|
|
' se sono in debug
|
|
Else
|
|
|
|
Return True
|
|
|
|
End If ' Endif gestione macchina collegata
|
|
|
|
End Function
|
|
|
|
'------------------------------
|
|
' Lettura variabile E su Cn
|
|
'------------------------------
|
|
Public Overrides Function ReadVarE(ByVal szVar As stVAR, Optional ByVal nProcess As Integer = 1) As Double
|
|
|
|
Dim dValues As Double
|
|
Dim pVar As PLVARDESC
|
|
Dim nComOk As Short ' Se 1 lettura OK Se 0 lettura KO
|
|
Dim nNumVarToBeReaded As Integer = 1 ' Numero di variabili da leggere (fisso a 1)
|
|
|
|
pVar.Code = CndexLinkUserVB6.GW_CODE
|
|
pVar.Index = szVar.nAddress
|
|
|
|
' se macchina collegata e non in debug
|
|
If (Not (Debug)) Then
|
|
|
|
nComOk = GetVarE_C(SessionOpened, nProcess, szVar.nAddress, nNumVarToBeReaded, dValues, ErrClass, ErrNum)
|
|
|
|
If (nComOk = ERRORE_OSAI) Then
|
|
|
|
ErrMsg = "Error on GetVarE_C" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)
|
|
Return CShort(ERRORVALUE) ' In uscita setto variabile a ERRORVALUE errore
|
|
|
|
Else
|
|
|
|
' return con il valore letto
|
|
Return dValues
|
|
|
|
End If
|
|
|
|
|
|
Else ' gestione se debug
|
|
|
|
' ritorno true
|
|
Return 1
|
|
|
|
End If
|
|
|
|
End Function
|
|
|
|
|
|
'------------------------------
|
|
' Lettura process stato info Cn
|
|
'------------------------------
|
|
'
|
|
' ha causato molto dispiacere il fatto che se uso la Server.GetProcessStatus_C con winnbi < 3.1.1
|
|
' dà una UNRESOLVED a run time della GetProcessStatus_C8 ( notare l' "8" finale ) nella CNDEXLINK.DLL
|
|
'
|
|
' soluzione : con Win Nbi recenti, uso Server.GetProcessStatus_C ; con Winnbi vecchi, faccio override
|
|
' di questa funzione USANDO LA STRUTTURA NUOVA CndexLinkDotNet.Cndex.PROCDATA ( altrimenti non è possibile
|
|
' fare override; uso una variabile locale tipo vecchio ( PROCDATA ) e in caso di esito positivo,
|
|
' copio i dati risultanti.
|
|
'
|
|
' Attenzione : si ha lo stesso problema anche con la Server.GetNcInfo1_C ma curiosamente non con le funzioni
|
|
' di lettura scrittura variabili CN .... boh !!
|
|
|
|
Public Overrides Function NcProcessStatus(ByRef ncInfo As CndexLinkDotNet.Cndex.PROCDATA, Optional ByVal nProcess As Integer = 1) As Boolean
|
|
|
|
Dim nComOk As Short ' Se 1 lettura OK Se 0 lettura KO
|
|
Dim geppodata As PROCDATA ' trucco sporchissimo : la versione dotnet richiede un altro tipo di dati...
|
|
|
|
' se macchina collegata e non in debug
|
|
If (Not (Debug)) Then
|
|
|
|
nComOk = GetProcessStatus_C(SessionOpened, nProcess, geppodata, ErrClass, ErrNum)
|
|
|
|
If (nComOk = ERRORE_OSAI) Then
|
|
|
|
ErrMsg = "Error on GetProcessStatus_C" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)
|
|
Return False ' In uscita setto variabile a ERRORVALUE errore
|
|
|
|
Else
|
|
ncInfo.Status = geppodata.status
|
|
ncInfo.SubStatus = geppodata.substatus
|
|
|
|
Return True
|
|
|
|
End If
|
|
|
|
' se sono in debug
|
|
Else
|
|
|
|
Return True
|
|
|
|
End If ' Endif gestione macchina collegata
|
|
|
|
End Function
|
|
|
|
' -------------------------------------------------
|
|
' Lettura stato macchina su processo passato per parametro
|
|
'--------------------------------------------------
|
|
Public Overrides Function GetMachineStatus(Optional ByVal nProcess As Integer = 1) As Byte
|
|
'
|
|
' se non andasse, usare NcProcessStatus e prendere solo lo stato......
|
|
|
|
Dim RetVal As Short
|
|
|
|
Dim geppodata As PROCDATA ' trucco sporchissimo : la versione dotnet richiede un altro tipo di dati...
|
|
|
|
' se macchina collegata e non in debug
|
|
If (Not (Debug)) Then
|
|
|
|
RetVal = GetProcessStatus_C(SessionOpened, nProcess, geppodata, ErrClass, ErrNum)
|
|
|
|
If RetVal > 0 Then
|
|
Return Convert.ToByte(geppodata.status)
|
|
|
|
Else
|
|
ErrMsg = "Error on GetMachineStatus" & vbCrLf & what_happened()
|
|
Return 255
|
|
|
|
End If
|
|
' se sono in debug
|
|
Else
|
|
Return True
|
|
End If
|
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
End Class
|
|
|