' ' libreria : VBlib ' file : ComCNOsai ' ' funzioni : connessione con CN OSAI come classe v1.1 ' ' copyright 2008-2017 C.Viviani ' Imports Microsoft.Win32 Public Class ComCNOsai #Region "STRUCT CN" ' ---------------------------------------------------------------------------- ' Struttura dati utilizzata per gestione lettura e scrittura variabili su CN ' ---------------------------------------------------------------------------- Public Structure stVAR Dim szVarName As String Dim nAddress As Integer Dim nBit As Integer Dim nNumCn As Integer End Structure #End Region #Region "VARIABILI ISTANZA" ' ----------------------- ' Dichiarazione costanti ' ----------------------- Public Const ERRORVALUE = -9999 ' valore assegnato alla variabile in caso di errore durante la lettura ' funzione boot enquiry : BootPhaseEnquiry_C Public Const EMERG_SWITCH_PHASE As Short = 1 Public Const HW_BOOT_PHASE As Short = 2 Public Const SW_BOOT_PHASE As Short = 3 Public Const SYSTEM_UP_PHASE As Short = 4 Public Const SERVER_MODE_PHASE As Short = 5 Public Const REMOTE_SETUP_PHASE As Short = 6 Public Const SERVICE_MODE_PHASE As Short = 7 Public Const AX_PARAM_VERIFY_PHASE As Short = 8 ' error codes Public Const AB_NO_ERROR = &H0 Public Const AB_INIT_ERROR = &H101 Public Const AB_CHANNEL_NOT_OPENED = &H102 Public Const AB_WRONG_SESSION_NUMBER = &H103 Public Const AB_TOO_MANY_OPENED_SESSION = &H104 Public Const AB_REMOTE_CNC_ERROR = &H105 Public Const AB_NAME_TOO_LONG = &H106 Public Const AB_COMMAND_IN_EXECUTION = &H107 Public Const AB_CHANNELS_BUSY = &H108 Public Const AB_WRONG_PROCESS_NUMBER = &H109 Public Const AB_WRONG_SELECT_MODE = &H10A Public Const AB_PARAM_OUT_OF_RANGE = &H10B Public Const AB_CALLBACK_MUST_BE_NULL = &H10C Public Const AB_WRONG_SYNC_CODE = &H10D Public Const AB_BUFFER_SIZE_ERROR = &H10E ' netbios error codes Public Const AB_NETB_NETWORK_ERROR = &H200 Public Const AB_NETB_DUP_LOCAL_NAME = &H201 Public Const AB_NETB_NAME_TABLE_FULL = &H202 Public Const AB_NETB_LOCAL_SESS_TAB_FULL = &H203 Public Const AB_NETB_NO_BODY_LISTENING = &H204 Public Const AB_NETB_NO_ASW_FROM_REMOTE = &H205 Public Const AB_NETB_NAME_USED_ON_REMOTE = &H206 Public Const AB_NETB_NAME_DELETED = &H207 Public Const AB_NETB_NAME_CONFLICT = &H208 Public Const AB_NETB_INCOMPAT_REMOTE_DEV = &H209 Public Const AB_NETB_TIMEOUT = &H20A Public Const AB_NETB_SESSION_ERR = &H20B ' Session closed Public Const AB_USER_ERROR = &H300 Public Const NO_WAIT_CNC_ANSWER = 1 Public Const WAIT_CNC_ANSWER = 2 Public Const ON_ = 1 Public Const OFF_ = 0 ' 10 Series modes Public Const MDI = 1 Public Const AUTO = 2 Public Const SEMI = 3 Public Const MANJOG = 4 Public Const INCJOG = 5 Public Const PROFILE = 6 Public Const HOME = 7 ' 10 Series Status Public Const IDLE_ As Byte = 1 Public Const CYCLE_ As Byte = 2 Public Const HOLDA_ As Byte = 3 Public Const RUNH_ As Byte = 4 Public Const HRUN_ As Byte = 5 Public Const ERRO_ As Byte = 6 Public Const WAIT_ As Byte = 7 Public Const RESET_ As Byte = 8 Public Const EMERG_ As Byte = 9 Public Const INPUT_ As Byte = 10 ' 10 Series SubStatus Public Const MAS = 6 Public Const MBR = 4 Public Const NUM_ELEM_SEL_AXI = 9 ' Axes Position type selector Public Const PROGPOS = 1 ' Programmed positions Public Const INTPOS = 2 ' Interpolated positions Public Const TRANSDPOS = 3 ' Transducer Position Public Const ERRPOS = 4 ' Following Errors Public Const MAIN_PROGR_NAME_LEN = 55 Protected Const ERRORE_OSAI = 0 ' --------------------- ' Variabili di Istanza ' --------------------- Protected mConnected As Boolean ' Indica se il Cn è connesso o meno Protected mSessionOpened As Short ' Indica il numero di sessione aperta Protected mNomeCN As String ' Indica il nome del cn da aprire Protected mDebug As Boolean ' Indica se la connessione è debug o meno Protected mVersion As Short ' indica la versione del Cn Protected mErrClass As Long ' Indice della classe d'errore Protected mErrNum As Long ' Indice della classe d'errore Protected mErrMsg As String ' Stringa per gestione messaggi errore Protected mCommunicationError as Boolean ' Boolean che indica se è avvenuto un errore di comunicazione Private Server As New CndexLinkDotNet.Cndex() ' Istanza del server per comunicazione con CN #End Region #Region "COSTRUTTORE" '------------------------- ' Definizione Costruttore '------------------------- Public Sub New(ByVal szCN As String, ByVal bIsDebug As Boolean, Optional ByVal sVersion As Short = 2) ' Inizializzazione variabili Connected = False SessionOpened = -1 ErrClass = 0 ErrNum = 0 ErrMsg = "" ' Set variabili da parametri NomeCn = szCN Debug = bIsDebug Version = sVersion End Sub #End Region #Region "PROPRIETA" ' ---------------------------------- ' Indica se il CN è connesso o meno ' ---------------------------------- Public Property Connected() As Boolean Get Return mConnected End Get Set(ByVal value As Boolean) mConnected = value End Set End Property ' ----------------------------- ' Indice della classe d'errore ' ----------------------------- Public Property ErrClass() As Long Get Return mErrClass End Get Set(ByVal value As Long) mErrClass = value End Set End Property ' --------------------------- ' Indice del numero d'errore ' --------------------------- Public Property ErrNum() As Long Get Return mErrNum End Get Set(ByVal value As Long) mErrNum = value End Set End Property ' --------------------------------------- ' Indica il numero della sessione aperta ' --------------------------------------- Public Property SessionOpened() As Short Get Return mSessionOpened End Get Set(ByVal value As Short) mSessionOpened = value End Set End Property ' --------------------------------- ' Indica la stringa di connessione ' --------------------------------- Public Property NomeCn() As String Get Return mNomeCN End Get Set(ByVal value As String) mNomeCN = value End Set End Property ' -------------------------------- ' Indica se la connesione è Debug ' -------------------------------- Public Property Debug() As Boolean Get Return mDebug End Get Set(ByVal value As Boolean) mDebug = value End Set End Property ' -------------------------------- ' Indica la versione Osai ' 1 = Prima di versione WinNbi 3.0 (Gasper,Nasi,ABB etc) ' 2 = Versione WinNbi > 3.0 con OS XP ' 3 = Versione WinNbi > 3.0 con OS 7 ' 4 = Open Control ' -------------------------------- Public Property Version() As Short Get Return mVersion End Get Set(ByVal value As Short) mVersion = value End Set End Property ' -------------------------------- ' Stringa per gestione errori ' -------------------------------- Public Property ErrMsg() As String Get Return mErrMsg End Get Set(ByVal value As String) mErrMsg = value End Set End Property ' ------------------------------------------------------------ ' Boolean che indica se c'è stato un errore di comunicazione ' ------------------------------------------------------------ Public Property Communication() As Boolean Get Return mCommunicationError End Get Set(ByVal value As Boolean) mCommunicationError = value End Set End Property #End Region #Region "METODI - Open/close connection" '------------------------------ ' Lettura messaggio DIS '------------------------------ Public Overridable Function ReadDisMsg(Optional ByVal nProcess As Integer = 1, Optional ByVal nMac As Integer = 1) As String Dim szResult As String = "" ' Stringa risultato Dim n_ret_state As Short ' se macchina collegata e non in debug If (Not (Debug)) Then n_ret_state = Server.ReadPartProgramMsg_C(SessionOpened, nProcess, szResult, ErrClass, ErrNum) If (n_ret_state = ERRORE_OSAI) Then ErrMsg = "Error on reading DIS Messages " & vbCrLf & what_happened() 'MsgBox(ErrMsg) Return CShort(ERRORVALUE).ToString ' In uscita setto variabile a ERRORVALUE errore Else ' return con il valore letto Return szResult End If End If Return szResult End Function ' ------------------------------ ' Apertura sessione con CN Osai ' ------------------------------ Public Overridable Function OpenSession() As Boolean Dim nSession As Short = 0 Select Case Debug Case False ' Se non sono in Debug = 0 nSession = Server.OpenSession_C(NomeCn, SessionOpened, ErrClass, ErrNum) ' Apro la sessione If (nSession <> ERRORE_OSAI) Then Connected = True ' Setto connesso = true Else Connected = False ' Setto connesso = false ErrMsg = "Error on open session" & vbCrLf & what_happened() End If Case True ' Se sono in Debug = 1 Connected = True ' Connessione sempre OK End Select Return Connected End Function ' ------------------------------ ' Chiusura sessione con CN Osai ' ------------------------------ Public Overridable Function CloseSession() As Boolean Dim nSession As Short Dim bOk As Boolean Select Case Debug Case False ' Se non sono in Debug = 0 nSession = Server.CloseSession_C(SessionOpened, ErrClass, ErrNum) ' Chiudo la sessione If (nSession <> ERRORE_OSAI) Then bOk = True Else ErrMsg = "Error on closing session" & vbCrLf & what_happened() bOk = False End If Case True ' Se sono in Debug = 1 bOk = True End Select Connected = False Return bOk End Function ' ------------------------------ ' Verifica che il CN sia running ' ------------------------------ Public Overridable Function Is_NC_running() As Boolean Dim n_ret_state As Short Dim n_boot_Phase As Short n_ret_state = Server.BootPhaseEnquiry_C(SessionOpened, n_boot_Phase, ErrClass, ErrNum) If (n_ret_state = ERRORE_OSAI) Then ErrMsg = "Error on BootPhaseEnquiry_C" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum) Return False Exit Function End If If n_boot_Phase <> SYSTEM_UP_PHASE Then Return False Else Return (True) End If End Function ' ------------------------------ ' START PartProgram ' ------------------------------ Public Overridable Function StartPP() As Boolean Dim n_ret_state As Short Dim bOk As Boolean Select Case Debug Case False ' Se non sono in Debug = 0 n_ret_state = Server.Cycle_C(SessionOpened, 1, 1, ErrClass, ErrNum) ' Chiudo la sessione If (n_ret_state = ERRORE_OSAI) Then ErrMsg = "Error on Cycle_C" & vbCrLf & vbCrLf & what_happened() bOk = False Else bOk = True End If Case True ' Se sono in Debug = 1 bOk = True End Select Return bOk End Function #End Region #Region "METODI - NC copy post Vista ...." '------------------------------ ' Copia file da Pc a Cn post Vista .... ritorna zero in caso di errore. '------------------------------ Public Overridable Function CopyFileToNC(ByVal sz_logical_drive As String, ByVal sz_source_filename As String, ByVal sz_dest_filename As String) As Short Dim n_ret_state As Short Select Case Debug Case False ' Se non sono in Debug = 0 n_ret_state = Server.LogFSTransferFileW_C(sz_logical_drive, sz_source_filename, NomeCn, sz_dest_filename, ErrClass, ErrNum) If (n_ret_state > 0) Then ' ritorna zero in caso di errore. Else ErrMsg = "Error on CopyFileToNC" & vbCrLf & what_happened() MsgBox(ErrMsg) End If Case True ' Se sono in Debug = 1 n_ret_state = 1 ' Connessione sempre OK End Select Return n_ret_state End Function '------------------------------ ' Copia file da Cn a PC post Vista .... '------------------------------ Public Overridable Function CopyFileFromNc(ByVal sz_logical_drive As String, ByVal sz_source_filename As String, ByVal sz_dest_filename As String) As Short Dim n_ret_state As Short Select Case Debug Case False ' Se non sono in Debug = 0 n_ret_state = Server.LogFSTransferFileW_C(NomeCn, sz_source_filename, sz_logical_drive, sz_dest_filename, ErrClass, ErrNum) If (n_ret_state > 0) Then Else ErrMsg = "Error on CopyFileFromNc" & vbCrLf & what_happened() MsgBox(ErrMsg) End If Case True ' Se sono in Debug = 1 n_ret_state = 1 ' Connessione sempre OK End Select Return n_ret_state End Function '------------------------------ ' Delete file su Cn post Vista .... '------------------------------ Public Overridable Function DeleteFileOnNC(ByVal sz_pathname As String, ByVal sz_filename As String) As Short Dim n_ret_state As Short Dim n_hidden_drives As Long Dim n_user_drives As Long Dim n As Short Dim sz_drive_name As String Dim sz_drive_path As String Select Case Debug Case False ' Se non sono in Debug = 0 n_ret_state = Server.LogFSGetNumDrive_C(SessionOpened, n_hidden_drives, n_user_drives, ErrClass, ErrNum) sz_drive_name = "" sz_drive_path = "" n = 0 'n_ret_state = Server.LogFSGetDriveList_C(SessionOpened, sz_drive_name, n, ErrClass, ErrNum) 'n_ret_state = Server.LogFSSetSecurityLevel_C(SessionOpened, "OEM", CndexLinkDotNet.Cndex.SECURITY_LEVEL_C.SECURITY_LEV_OEM_ADMIN_C, n, ErrClass, ErrNum) 'n_ret_state = Server.LogFSGetDrivePath_C(SessionOpened, sz_drive_name, sz_drive_path, CndexLinkDotNet.Cndex.SECURITY_LEVEL_C.SECURITY_LEV_OEM_ADMIN_C, ErrClass, ErrNum) n_ret_state = Server.LogFSRemoveFile_C(SessionOpened, sz_pathname, sz_filename, ErrClass, ErrNum) If (n_ret_state > 0) Then Else ErrMsg = "Error on DeleteFileOnNC" & vbCrLf & what_happened() MsgBox(ErrMsg) End If Case True ' Se sono in Debug = 1 n_ret_state = 1 ' Connessione sempre OK End Select Return n_ret_state End Function #End Region #Region "METODI - Lettura/scrittura variabili CN" '------------------------------ ' Lettura variabile Bool su Cn '------------------------------ Public Overridable Function ReadBoolVar(ByVal szVar As stVAR, Optional ByVal nProcess As Integer = 1) As Short Dim nValues(0) As Short ' Array (lo vuole la libreria Osai) che conterrà il valore letto 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) ' se macchina collegata e non in debug If (Not (Debug)) Then nValues(0) = 0 nComOk = Server.ReadVarWord_C(SessionOpened, CndexLinkDotNet.Cndex.GW_CODE, nProcess, szVar.nAddress, nNumVarToBeReaded, nValues, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on reading bool variable" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum) Return CShort(ERRORVALUE) ' In uscita setto variabile a ERRORVALUE errore Else If ((nValues(0) And (2 ^ szVar.nBit)) <> 0) Then ' Maschera per controllare solo il bit che mi interessa nValues(0) = 1 Else nValues(0) = 0 End If ' return con il valore letto Return nValues(0) End If Else ' gestione se debug ' ritorno valore fittzio Return 1 End If End Function ' ------------------------------- ' Scrittura variabile Bool su Cn '--------------------------------- Public Overridable Function WriteBoolVar(ByVal szVar As stVAR, ByVal nValue As Short, Optional ByVal nProcess As Integer = 1) As Boolean Dim nComOk As Short ' Se 1 scrittura OK Se 0 lettura KO ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.WriteVarWordBit_C(SessionOpened, CndexLinkDotNet.Cndex.GW_CODE, nProcess, szVar.nAddress, szVar.nBit, nValue, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on writing bool 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 Short su Cn '------------------------------ Public Overridable Function ReadShortVar(ByVal szVar As stVAR, Optional ByVal nProcess As Integer = 1) As Short Dim nValues(0) As Short ' Array (lo vuole la libreria Osai) che conterrà il valore letto 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) ' se macchina collegata e non in debug If (Not (Debug)) Then nValues(0) = 0 nComOk = Server.ReadVarWord_C(SessionOpened, CndexLinkDotNet.Cndex.GW_CODE, nProcess, szVar.nAddress, nNumVarToBeReaded, nValues, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on ReadVarWord_C" & vbCrLf & what_happened() Return CShort(ERRORVALUE) ' In uscita setto variabile a ERRORVALUE errore Else ' return con il valore letto Return nValues(0) End If Else ' gestione se debug ' ritorno true Return 1 End If End Function ' ------------------------------- ' Scrittura variabile Short su Cn '--------------------------------- Public Overridable Function WriteShortVar(ByVal szVar As stVAR, ByVal nValue As Short, Optional ByVal nProcess As Integer = 1) As Boolean Dim nComOk As Short ' Se 1 scritt. OK Se 0 lettura KO Dim nValues(0) As Short ' Array (lo vuole la libreria Osai) che conterrà il valore letto Dim nNumVarToBeWrited As Integer = 1 ' Numero di variabili da leggere (fisso a 1) nValues(0) = nValue ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.WriteVarWord_C(SessionOpened, CndexLinkDotNet.Cndex.GW_CODE, nProcess, szVar.nAddress, nNumVarToBeWrited, nValues, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on writing short variable" & vbCrLf & what_happened() 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 G Double su Cn '-------------------------------- Public Overridable Function ReadDoubleVar(ByVal szVar As stVAR, Optional ByVal nProcess As Integer = 1) As Double Dim nValues(0) As Double ' Array (lo vuole la libreria Osai) che conterrà il valore letto 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) ' se macchina collegata e non in debug If (Not (Debug)) Then nValues(0) = 0 nComOk = Server.ReadVarDouble_C(SessionOpened, CndexLinkDotNet.Cndex.GD_CODE, nProcess, szVar.nAddress, nNumVarToBeReaded, nValues, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on reading double variable" & vbCrLf & what_happened() Return CDbl(ERRORVALUE) ' In uscita setto variabile a ERRORVALUE errore Else ' return con il valore letto Return nValues(0) End If Else ' gestione se debug ' ritorno true Return 1.0 End If End Function ' --------------------------------- ' Scrittura variabile G Double su Cn '---------------------------------- Public Overridable Function WriteDoubleVar(ByVal szVar As stVAR, ByVal nValue As Double, Optional ByVal nProcess As Integer = 1) As Boolean Dim nComOk As Short ' Se 1 scritt. OK Se 0 lettura KO Dim nValues(0) As Double ' Array (lo vuole la libreria Osai) che conterrà il valore letto Dim nNumVarToBeWrited As Integer = 1 ' Numero di variabili da leggere (fisso a 1) nValues(0) = nValue ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.WriteVarDouble_C(SessionOpened, CndexLinkDotNet.Cndex.GD_CODE, nProcess, szVar.nAddress, nNumVarToBeWrited, nValues, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on writing double variable" & vbCrLf & what_happened() 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 (Double) su Cn '----------------------------------- Public Overridable Function ReadVarE(ByVal szVar As stVAR, Optional ByVal nProcess As Integer = 1) As Double Dim nValues(0) As Double ' Array (lo vuole la libreria Osai) che conterrà il valore letto 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) ' se macchina collegata e non in debug If (Not (Debug)) Then nValues(0) = 0 nComOk = Server.ReadVarDouble_C(SessionOpened, CndexLinkDotNet.Cndex.E_CODE, nProcess, szVar.nAddress, nNumVarToBeReaded, nValues, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on reading double variable" & vbCrLf & what_happened() Return CDbl(ERRORVALUE) ' In uscita setto variabile a ERRORVALUE errore Else ' return con il valore letto Return nValues(0) End If Else ' gestione se debug ' ritorno valore fittizio Return 1.0 End If End Function ' --------------------------------- ' Scrittura variabile E (Double) su Cn '---------------------------------- Public Overridable Function WriteVarE(ByVal szVar As stVAR, ByVal nValue As Double, Optional ByVal nProcess As Integer = 1) As Boolean Dim nComOk As Short ' Se 1 scr. OK ; Se 0 scrittura KO Dim nValues(0) As Double ' Array (lo vuole la libreria Osai) che conterrà il valore letto Dim nNumVarToBeWrited As Integer = 1 ' Numero di variabili da leggere (fisso a 1) nValues(0) = nValue ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.WriteVarDouble_C(SessionOpened, CndexLinkDotNet.Cndex.E_CODE, nProcess, szVar.nAddress, nNumVarToBeWrited, nValues, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on writing double variable" & vbCrLf & what_happened() 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 L (Double) su Cn '----------------------------------- Public Overridable Function ReadVarL(ByVal szVar As stVAR, Optional ByVal nProcess As Integer = 1) As Double ' sulla serie 10 per leggere una variabile L occorre leggere un record della USER TABLE Dim nComOk As Short ' Se 1 lettura OK ; Se 0 lettura KO Dim UserRecord As CndexLinkDotNet.Cndex.USER_TABLE = Nothing Dim nRecNumber As Short ' da 1 a 100 Dim nRecIndex As Short ' da 1 a 4 all interno del record Dim value As Double ' se macchina collegata e non in debug If (Not (Debug)) Then nRecNumber = (szVar.nAddress / 4) + 1 nRecIndex = (szVar.nAddress Mod 4) + 1 nComOk = Server.GetUserTabRecord_C(SessionOpened, nRecNumber, UserRecord, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on reading L variable" & vbCrLf & what_happened() Return -99999.99 ' In uscita setto variabile a ERRORVALUE errore Else Select Case nRecIndex Case 1 value = UserRecord.user1 Case 2 value = UserRecord.user2 Case 3 value = UserRecord.user3 Case 4 value = UserRecord.user4 End Select Return value End If ' se sono in debug Else Return 0.0 End If ' End Function ' --------------------------------- ' Scrittura variabile L (Double) su Cn '---------------------------------- Public Overridable Function WriteVarL(ByVal szVar As stVAR, ByVal nValue As Double, Optional ByVal nProcess As Integer = 1) As Boolean ' sulla serie 10 per scrivere una variabile L occorre leggere un record della USER TABLE, sostituire il valore e riscrivere il record Dim nComOk As Short ' Se 1 lettura OK ; Se 0 lettura KO Dim UserRecord As CndexLinkDotNet.Cndex.USER_TABLE = Nothing Dim nRecNumber As Short ' da 1 a 100 Dim nRecIndex As Short ' da 1 a 4 all interno del record ' se macchina collegata e non in debug If (Not (Debug)) Then nRecNumber = (szVar.nAddress / 4) + 1 nRecIndex = (szVar.nAddress Mod 4) + 1 nComOk = Server.GetUserTabRecord_C(SessionOpened, nRecNumber, UserRecord, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on read L variable" & vbCrLf & what_happened() Return False ' In uscita setto variabile a ERRORVALUE errore Else Select Case nRecIndex Case 1 UserRecord.user1 = nValue Case 2 UserRecord.user2 = nValue Case 3 UserRecord.user3 = nValue Case 4 UserRecord.user4 = nValue End Select nComOk = Server.SetUserTabRecord_C(SessionOpened, nRecNumber, UserRecord, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on writing L variable" & vbCrLf & what_happened() Return False ' In uscita setto variabile a ERRORVALUE errore Else Return True End If End If Else ' se sono in debug Return True End If ' End Function '-------------------------------- ' Lettura variabile SC su Cn '-------------------------------- Public Overridable 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 Dim szText As String = "" ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.ReadVarText_C(SessionOpened, CndexLinkDotNet.Cndex.SC_CODE, nProcess, nIndex, nNumChar, szValue, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on reading SC variable" & vbCrLf & what_happened() 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 Overridable 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 scritt. OK Se 0 lettura KO ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.WriteVarText_C(SessionOpened, CndexLinkDotNet.Cndex.SC_CODE, nProcess, nIndex, nNumChar, szText, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on writing SC variable" & vbCrLf & what_happened() 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 MW ( word ) su Cn '-------------------------------- Public Overridable Function ReadVarMW(ByVal szVar As stVAR, Optional ByVal nProcess As Integer = 1) As UShort Dim nValues(0) As Short ' Array (lo vuole la libreria Osai) che conterrà  il valore letto Dim nComOk As Short ' Se 1 scr. OK Se 0 lettura KO Dim nNumVarToRead As Short = 1 ' Numero di variabili da leggere (fisso a 1) ' se macchina collegata e non in debug If (Not (Debug)) Then nValues(0) = 0 nComOk = Server.ReadVarWord_C(SessionOpened, CndexLinkDotNet.Cndex.MW_CODE, nProcess, szVar.nAddress, nNumVarToRead, nValues, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on reading MW variable" & vbCrLf & what_happened() Return (9999) ' In uscita setto variabile a ERRORVALUE errore Else ' return con il valore letto Return nValues(0) End If Else ' gestione se debug ' ritorno true Return 1 End If End Function '-------------------------------- ' Lettura multi variabile MW su Cn '-------------------------------- Public Overridable Function ReadMultipleVarMW(ByVal nAddress As Integer, ByRef nValues() As Short, ByVal nNumVarToRead As Short, Optional ByVal nProcess As Integer = 1) As Boolean Dim nComOk As Short ' Se 1 scr. OK Se 0 lettura KO ' se macchina collegata e non in debug If (Not (Debug)) Then nValues(0) = 0 nComOk = Server.ReadVarWord_C(SessionOpened, CndexLinkDotNet.Cndex.MW_CODE, nProcess, nAddress, nNumVarToRead, nValues, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on reading multiple MW variable" & vbCrLf & what_happened() Return False ' In uscita setto variabile a ERRORVALUE errore Else Return True End If Else ' gestione se debug Return True End If End Function #End Region #Region "METODI - Info da CN e varie" ' --------------------------------- ' Lettura Warning Msg '---------------------------------- Public Overridable Function ReadWarning(ByRef szText As String) As Boolean Dim nComOk As Short ' Se 1 lettura OK Se 0 lettura KO ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.ReadWarningMsg_C(SessionOpened, szText, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on reading Warning Messages" & vbCrLf & what_happened() 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 programma corrente '---------------------------------- Public Overridable Function GetActiveProgram(ByVal nProcess As Integer) As String Dim szMainPrg As String = "" Dim szSubProgram 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 = Server.GetActivePartProgram_C(SessionOpened, nProcess, 1, szMainPrg, szSubProgram, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on GetActivePartProgram_C" & vbCrLf & what_happened() Return "Error" ' In uscita setto variabile a ERRORVALUE errore Else szMainPrg = Replace(szMainPrg, vbNullChar, "") ' Pulisco i caratteri farlocchi ... Return szMainPrg End If ' se sono in debug Else Return "OK" End If ' Endif gestione macchina collegata End Function ' --------------------------------------------------------------- ' Ritorna True se lo stato del CN è IDLE '---------------------------------------------------------------- Public Overridable Function IsResetStatus(Optional ByVal nProcess As Integer = 1) As Boolean Dim RetVal As Short Dim ncInfo As New CndexLinkDotNet.Cndex.GETINFO1DATA RetVal = Server.GetNcInfo1_C(SessionOpened, nProcess, ncInfo, ErrClass, ErrNum) If RetVal > 0 Then If ncInfo.mode_select = 0 Then Return True Else Return False End If Else 'MsgBox("Error in IsResetStatus" & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum)) Return 0 End If End Function ' --------------------------------- ' Lettura info CN 1 '---------------------------------- Public Overridable Function NcInfo1(ByRef ncInfo As CndexLinkDotNet.Cndex.GETINFO1DATA, Optional ByVal nProcess As Integer = 1) As Boolean Dim nComOk As Short ' Se 1 lettura OK Se 0 lettura KO ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.GetNcInfo1_C(SessionOpened, nProcess, ncInfo, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on reading NcInfo1" & vbCrLf & what_happened() 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 info CN 2 '---------------------------------- Public Overridable Function NcInfo2(ByRef ncInfo As CndexLinkDotNet.Cndex.GETINFO2DATA, Optional ByVal nProcess As Integer = 1) As Boolean Dim nComOk As Short ' Se 1 lettura OK Se 0 lettura KO ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.GetNcInfo2_C(SessionOpened, nProcess, ncInfo, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on reading NcInfo2" & vbCrLf & what_happened() 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 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; ma poi 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 Overridable 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 ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.GetProcessStatus_C(SessionOpened, nProcess, ncInfo, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on GetProcessStatus_C" & vbCrLf & what_happened() 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 dati assi '---------------------------------- Public Overridable Function GetAxesValue(ByRef AxesData() As CndexLinkDotNet.Cndex.GETINTDATA, ByVal AsciiNameAxe As Byte, ByVal nTypeCoord As Integer, Optional ByVal nProcess As Integer = 1) As Boolean Dim nComOk As Short ' Se 1 lettura OK Se 0 lettura KO ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.GetAxesPosition_C(SessionOpened, nProcess, AsciiNameAxe, nTypeCoord, 1, AxesData, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on reading Axes Data" & vbCrLf & what_happened() 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 stato macchina su processo passato per parametro '-------------------------------------------------- Public Overridable Function GetMachineStatus(Optional ByVal nProcess As Integer = 1) As Byte Dim RetVal As Short Dim ncInfo As New CndexLinkDotNet.Cndex.GETINFO1DATA ' se macchina collegata e non in debug If (Not (Debug)) Then RetVal = Server.GetNcInfo1_C(SessionOpened, nProcess, ncInfo, ErrClass, ErrNum) If RetVal > 0 Then Return ncInfo.status Else ErrMsg = "Error on reading Machine Status" & vbCrLf & what_happened() Return 0 End If ' se sono in debug Else Return True End If End Function ' ------------------------------------------------- ' Lettura modalità  macchina su processo passato per parametro '-------------------------------------------------- Public Overridable Function GetModeSelected(Optional ByVal nProcess As Integer = 1) As Byte Dim RetVal As Short Dim ncInfo As New CndexLinkDotNet.Cndex.GETINFO1DATA ' se macchina collegata e non in debug If (Not (Debug)) Then RetVal = Server.GetNcInfo1_C(SessionOpened, nProcess, ncInfo, ErrClass, ErrNum) If RetVal > 0 Then Return ncInfo.mode_select Else ErrMsg = "Error on reading Machine Mode" & vbCrLf & what_happened() Return 0 End If ' se sono in debug Else Return True End If End Function ' --------------------------------- ' CN in modalità  AUTO '---------------------------------- Public Overridable Function SetAutoMode(Optional ByVal nProcess As Integer = 1) As Boolean Dim nComOk As Short ' Se 1 OK ; Se 0 KO ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.SetProcessMode_C(SessionOpened, nProcess, 2, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = "Error on SetAutoMode" & vbCrLf & what_happened() 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 ' --------------------------------- ' Seleziona part program da rendere attivo '---------------------------------- Public Overridable Function ActivateProgramOnNC(ByRef szNamePrg As String, Optional ByVal nProcess As Integer = 1) As Boolean ' returns TRUE if activate OK Dim nComOk As Short ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.SelectPartProgram_C(SessionOpened, nProcess, szNamePrg, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = Message.msg(112) & szNamePrg & vbCrLf & what_happened() 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 Public Overridable Function ActivatePP(ByVal szPartPrg As String, Optional ByVal nProcess As UShort = 1) As Short Return ActivateProgramOnNC(szPartPrg, nProcess) End Function ' --------------------------------- ' Setta modalità CN Edit, Auto, MDI, .... '---------------------------------- Public Overridable Function SetMode(ByVal nMode As Short, Optional ByVal nProcess As Integer = 1) As Boolean Dim nComOk As Short ' Se 1 lettura OK Se 0 lettura KO ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.SetProcessMode_C(SessionOpened, nProcess, nMode, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = Message.msg(119) & 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 ' --------------------------------- ' Stringa MDI da eseguire '---------------------------------- Public Overridable Function SetMdiString(ByRef szString As String, Optional ByVal nProcess As Integer = 1) As Boolean Dim nComOk As Short ' Se 1 lettura OK Se 0 lettura KO ' se macchina collegata e non in debug If (Not (Debug)) Then nComOk = Server.SetMdiString_C(SessionOpened, nProcess, szString, ErrClass, ErrNum) If (nComOk = ERRORE_OSAI) Then ErrMsg = Message.msg(120) & 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 #End Region #Region " funzione nuove per open series, qui vuote" Public Overridable Function GetActualTool(Optional ByVal nProcess As Integer = 1) As Double Return 0 End Function Public Overridable Function GetActualCorr(Optional ByVal nProcess As Integer = 1) As UShort Return 0 End Function Public Overridable Function GetFeedOverride(Optional ByVal nProcess As Integer = 1) As UShort Return 0 End Function Public Overridable Function GetRapidOverride(Optional ByVal nProcess As Integer = 1) As UShort Return 0 End Function Public Overridable Function GetSpeedOverride(Optional ByVal nProcess As Integer = 1) As UShort Return 0 End Function Public Overridable Function GetProgrammedRapid(Optional ByVal nProcess As Integer = 1) As Double Return 0.0 End Function Public Overridable Function GetProgrammedFeed(Optional ByVal nProcess As Integer = 1) As Double Return 0.0 End Function Public Overridable Function GetProgrammedSpeed(Optional ByVal nProcess As Integer = 1) As Double Return 0.0 End Function Public Overridable Function GetActualFeed(Optional ByVal nProcess As Integer = 1) As Double Return 0.0 End Function Public Overridable Function GetActualSpeed(Optional ByVal nProcess As Integer = 1) As Double Return 0.0 End Function Public Overridable Function GetActualToolLen(ByVal nRecord As UInteger) As Double Dim n_ret As Short Dim pRecordBuff As CndexLinkDotNet.Cndex.OFFSET_TABLE If (Not (Debug)) Then n_ret = Server.GetOffsetTabRecord_C(SessionOpened, nRecord, pRecordBuff, ErrClass, ErrNum) If (n_ret = ERRORE_OSAI) Then ErrMsg = Message.msg(120) & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum) Return -999998.999 ' In uscita setto variabile a ERRORVALUE errore Else Return pRecordBuff.tactl1 End If Else ' se sono in debug Return 10.0 End If ' Endif gestione macchina collegata End Function Public Overridable Function GetActualToolDiam(ByVal nRecord As UInteger) As Double Dim n_ret As Short Dim pRecordBuff As CndexLinkDotNet.Cndex.OFFSET_TABLE If (Not (Debug)) Then n_ret = Server.GetOffsetTabRecord_C(SessionOpened, nRecord, pRecordBuff, ErrClass, ErrNum) If (n_ret = ERRORE_OSAI) Then ErrMsg = Message.msg(120) & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum) Return -999997.999 ' In uscita setto variabile a ERRORVALUE errore Else Return pRecordBuff.tdiameter End If Else ' se sono in debug Return 20.0 End If ' Endif gestione macchina collegata End Function Public Overridable Function GetActualToolDiam2(ByVal nRecord As UInteger) As Double Dim n_ret As Short Dim pRecordBuff As CndexLinkDotNet.Cndex.OFFSET_TABLE If (Not (Debug)) Then n_ret = Server.GetOffsetTabRecord_C(SessionOpened, nRecord, pRecordBuff, ErrClass, ErrNum) If (n_ret = ERRORE_OSAI) Then ErrMsg = Message.msg(120) & vbCrLf & "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum) Return -999997.999 ' In uscita setto variabile a ERRORVALUE errore Else Return pRecordBuff.tcacdiam End If Else ' se sono in debug Return 20.0 End If ' Endif gestione macchina collegata End Function Public Overridable Function PutFile(ByRef szPathFile As String, ByVal szTargetPath As String, ByRef nErrClass As UInteger, ByRef nErrNum As UInteger, ByRef FileSize As Integer) As Integer Return 0 End Function Public Overridable Function ReadPPLines(ByVal nProcess As Integer, ByRef EightLines() As String, ByRef nErrClass As UInteger, ByRef nErrNum As UInteger) As Boolean Return True End Function #End Region #Region "Controllo win Nbi" ''' ''' Verifica se è installata la WINNBI e se è una versione compatibile con .NET ''' ''' Versione compatibile con framework .NET Shared Function GetWinnbi(Optional ByRef DotNet As Boolean = False) As Boolean Dim DotNetMinVersion As New System.Version("3.1.1") Dim readValue() As String Dim Ver As System.Version Dim key As RegistryKey Dim b_ret As Boolean b_ret = False Try 'leggo le versioni installate key = Registry.LocalMachine.OpenSubKey("SOFTWARE\OSAI\WinNBI") readValue = key.GetSubKeyNames 'verifico che ci sia al massimo una versione installata If readValue.Count > 1 Then MessageBox.Show("more versions of WinNBI found." & vbNewLine & "Please ckeck keys in HKEY_LOCAL_MACHINE\SOFTWARE\OSAI\WinNBI", "Error on GetWinnbi", MessageBoxButtons.OK, MessageBoxIcon.Error) End If 'MsgBox("readValue(0) = " & readValue(0) & vbCrLf & "readValue.Count = " & readValue.Count.ToString) ' in XP la 4.0.1 mi ritorna 3.2 ....errore di lunghezza If readValue(0).Length < 4 Then readValue(0) = readValue(0) & "0" End If 'La precisione di Osai nel rilasciare le versioni !! ' If readValue(0) = "3.05" Then readValue(0) = "3.0.5" ' If readValue(0) = "3.03" Then readValue(0) = "3.0.3" If (readValue(0).Substring(0, 3) = "3.0") And (readValue(0).Substring(3, 1) <> ".") Then readValue(0) = Replace(readValue(0), "3.0", "3.0.") End If For Each szVersion As String In readValue Ver = New System.Version(szVersion) 'se versione compatibile con framework .NET If Ver >= DotNetMinVersion Then DotNet = True End If 'se entro almeno una volta ho trovato almeno una versione installata b_ret = True Next 'DotNet = False '!! Catch e As Exception If Not b_force_S10WLK32 Then MsgBox("Unable to get WinNbi version... " & e.ToString, MsgBoxStyle.Critical, "error in GetWinnbi") End If b_ret = False End Try Return b_ret End Function ''' ''' restituisce la versione installata di WINNBI ''' Shared Function GetWinnbi_version() As String Dim readValue() As String Dim key As RegistryKey Try 'leggo le versioni installate key = Registry.LocalMachine.OpenSubKey("SOFTWARE\OSAI\WinNBI") readValue = key.GetSubKeyNames 'La precisione di Osai nel rilasciare le versioni !! If readValue(0) = "3.05" Then readValue(0) = "3.0.5" If readValue(0) = "3.03" Then readValue(0) = "3.0.3" Return readValue(0) Catch e As Exception MsgBox("Unable to get WinNbi version... " & e.ToString, "error in GetWinnbi_version") Return "0.9.99" End Try End Function #End Region #Region "Explain what happened" ' Error codes for NETBIOS class (class 3) ' ' 0x0001 Illegal buffer length ' 0x0003 Illegal command ' 0x0005 Command timed out ' 0x0006 Message incomplete, issue another command ' 0x0007 Illegal buffer address ' 0x0008 Session number out of range ' 0x0009 No resource available ' 0x000a Session closed ' 0x000b Command cancelled ' 0x000d Duplicate name ' 0x000e Name table full ' 0x000f No deletions, name has active sessions ' 0x0011 Local session table full ' 0x0012 Remote session table full ' 0x0013 Illegal name number ' 0x0014 No callname ' 0x0015 Cannot put * in NCB_NAME ' 0x0016 Name in use on remote adapter ' 0x0017 Name deleted ' 0x0018 Session ended abnormally ' 0x0019 Name conflict detected ' 0x0021 Interface busy, IRET before retrying ' 0x0022 Too many commands outstanding, retry later ' 0x0023 Ncb_lana_num field invalid ' 0x0024 Command completed while cancel occurring ' 0x0026 Command not valid to cancel ' 0x0030 Name defined by anther local process ' 0x0034 Environment undefined. RESET required ' 0x0035 Required OS resources exhausted ' 0x0036 Max number of applications exceeded ' 0x0037 No saps available for netbios ' 0x0038 Requested resources are not available ' 0x0039 Invalid ncb address or length > segment ' 0x003B Invalid NCB DDID ' 0x003C Lock of user area failed ' 0x003f NETBIOS not loaded ' 0x0040 System error Const NETBIOS_class As Integer = 3 Const No_callname_err As Integer = 20 ' 0x0014 No callname Const CNC_Error_class As Integer = 4 Const CL4_Syntax_error As Integer = 1 Const CL4_Format_error As Integer = 8 Const CL4_Undefined_symbol As Integer = 9 Const CL4_Duplicated_label As Integer = 53 Const CL4_Label_too_long As Integer = 55 Const CL4_Sub_Table_overflow As Integer = 56 Const CL4_Label_Table_overflow As Integer = 57 Const CL4_Part_program_handling_error As Integer = 65 Const CL4_Part_program_not_found As Integer = 66 Const CNDEX_INTERFACE_class As Integer = 10 Const ERR_SERVER_ALREADY_CREATED As Integer = 1 ' CNDEX server already created Const ERR_CREATING_SERVER_OBJECT As Integer = 2 ' Error creating CNDEX server Const ERR_SERVER_NOT_CREATED As Integer = 3 ' CNDEX server never created or already released Const ERR_INVALID_PARAMETER As Integer = 4 ' Invalid value for one or more parameters Const ERR_OPTION_NOT_ENABLED As Integer = 5 ' The COMMUNICATION option is not enabled for connected CNC Function what_happened() As String Dim sz_return As String sz_return = "Class: " & Str(ErrClass) & " Number: 0x" & Hex(ErrNum) Select Case ErrClass Case NETBIOS_class ' --------------------------- class3 - NETBIOS ----------------- Select Case ErrNum Case No_callname_err sz_return = "Please verify connection ( cable etc. )" & vbCrLf & vbCrLf & "( No call name - Class 3 err 0x14 )" End Select Case CNC_Error_class ' --------------------------- class4 - CNC_Error ----------------- Select Case ErrNum Case CL4_Syntax_error sz_return = "Syntax error" & vbCrLf & vbCrLf & "( Class 4 err 1 )" Case CL4_Format_error sz_return = "Format error" & vbCrLf & vbCrLf & "( Class 4 err 8 )" Case CL4_Undefined_symbol sz_return = "Undefined symbol" & vbCrLf & vbCrLf & "( Class 4 err 9 )" Case CL4_Duplicated_label sz_return = "Duplicated label" & vbCrLf & vbCrLf & "( Class 4 err 53 )" Case CL4_Label_too_long sz_return = "Label too long" & vbCrLf & vbCrLf & "( Class 4 err 55 )" Case CL4_Sub_Table_overflow sz_return = "Subroutine Table overflow" & vbCrLf & vbCrLf & "( Class 4 err 56 )" Case CL4_Label_Table_overflow sz_return = "Label Table overflow" & vbCrLf & vbCrLf & "( Class 4 err 57 )" Case CL4_Part_program_handling_error sz_return = "Part_program_handling_error" & vbCrLf & vbCrLf & "( Class 4 err 65 )" Case CL4_Part_program_not_found sz_return = "Part_program_not_found" & vbCrLf & vbCrLf & "( Class 4 err 66 )" End Select ' class4 - CNC_Error Case CNDEX_INTERFACE_class ' --------------------------- class 10 - CNDEX_INTERFACE ----------------- Select Case ErrNum Case ERR_SERVER_ALREADY_CREATED sz_return = "CNDEX server already created ( Class 10 err 1 )" Case ERR_CREATING_SERVER_OBJECT sz_return = "Error creating CNDEX server ( Class 10 err 2 )" Case ERR_SERVER_NOT_CREATED sz_return = "CNDEX server never created or already released ( Class 10 err 3 )" Case ERR_INVALID_PARAMETER sz_return = "Invalid value for one or more parameters ( Class 10 err 4 )" Case ERR_OPTION_NOT_ENABLED sz_return = vbCrLf & "The 'A06 CndexLink communication' option is not enabled on connected CNC ( Class 10 err 5 )" End Select End Select Return sz_return End Function #End Region End Class