' ' 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