Imports System.IO Module M_cn_connection #Region "ENUM States and Local Constants" #End Region #Region "Global Constants" Public Const SLEEP_TIME As Integer = 150 ' attesa connessione CN Public Const MAX_RETRY As Integer = 10 ' numero tentativi connessione CN #End Region #Region "Global Vars" ' oggetto Serie per connessione PC / CN Public CnOsai As ComCNOsai #End Region #Region "local vars " Private b_first_time As Boolean Private nret As Int16 ' Private send_mode As e_send_mode = e_send_mode.SM_SIMPLE Private b_even As Boolean = False Private n_prev_Value_NC_running As Byte Private sz_NC_Program_Name As String ' Private Start_time As DateTime ' Private Stop_time As DateTime #End Region ' --------------------------------------------------------- ' ---- Procedura per inizializzare connessione con CN ----- ' --------------------------------------------------------- ' --------------------------------------------------------- Sub StartConnection() Dim szCmdLink As String = "" Dim b_DotNet As Boolean Dim b_ok As Boolean = False FrmMain.Show() ' se non in debug If (Not IniRead.b_debug) Then FrmMain.LblConnected.Visible = True ' !! FrmMain.LblConnected.Text = "Step 1....." ' !! If IniRead.b_verbose Then Log.write(FrmMain.LblConnected.Text & " " & IniRead.szNameNC) FrmMain.LblConnected.Text = Message.msg(8) & IniRead.szNameNC ' MsgBox(Message.msg(8) & IniRead.szNameNC) ' connecting to End If ' istanzio l'oggetto CN If IniRead.b_force_S10WLK32 Or IniRead.b_open_control Or IniRead.b_no_WinNBI Then b_ok = True Else b_ok = ComCNOsai.GetWinnbi(b_DotNet) End If If b_ok Then If IniRead.b_open_control Then ' osai serie open ? CnOsai = New Open_Series(IniRead.szNameNC, IniRead.b_debug) Else If IniRead.b_force_S10WLK32 Then ' vecchissimi cn serie 10 non winnbi ? 'CnOsai = New ComCNOSAI_S10WLK32(IniRead.szNameNC, False) Else If IniRead.b_no_WinNBI Then ' forzo versione non .NET CnOsai = New ComCNOSAIVB6(IniRead.szNameNC, False) Else If b_DotNet Then ' win nbi con .Net CnOsai = New ComCNOsai(IniRead.szNameNC, False) Else CnOsai = New ComCNOSAIVB6(IniRead.szNameNC, False) End If ' win nbi con .Net End If ' forzo versione non .NET End If ' vecchissimi cn serie 10 non winnbi End If ' osai serie open If IniRead.b_verbose And Not IniRead.b_force_S10WLK32 And Not IniRead.b_open_control And Not IniRead.b_no_WinNBI Then FrmMain.LblConnected.Text = "Win nbi v." & ComCNOsai.GetWinnbi_version() & "New : " & b_DotNet.ToString Log.write("Win nbi v." & ComCNOsai.GetWinnbi_version() & "New : " & b_DotNet.ToString) ' MsgBox(ComCNOsai.GetWinnbi_version() & vbCrLf & "Nuova : " & b_DotNet.ToString, , "Win nbi version") End If b_ok = CnOsai.OpenSession() FrmMain.LblConnected.Visible = True ' connessione non ok If (CnOsai.Connected = False) Then FrmMain.LblConnected.Text = Message.msg(11) ' "NOT CONNECTED" FrmMain.LblConnected.ForeColor = Color.Red MsgBox(CnOsai.ErrMsg, MsgBoxStyle.Critical, Message.msg(10)) ' Nc connection Log.write(" Error connecting " & IniRead.szNameNC & " " & CnOsai.ErrMsg) Else FrmMain.LblConnected.Text = Message.msg(12) ' "NC connect ok " FrmMain.LblConnected.ForeColor = Color.Blue If IniRead.b_open_control Then ' if open control Else Do While Not CnOsai.Is_NC_running System.Threading.Thread.Sleep(SLEEP_TIME) Loop End If ' if open control End If ' connessione non ok Log.write(FrmMain.LblConnected.Text) Else MsgBox("Missing Win NBI", MsgBoxStyle.Critical, "Missing Win NBI") ' Nc connection End If Else ' se in debug FrmMain.LblConnected.Text = "DEBUG" FrmMain.LblConnected.ForeColor = Color.Orange End If End Sub Sub CheckConnection() ' un po' di letture per vedere se funziona Dim b_timeout As Boolean = False Dim n_retry As Integer Dim n_temp As Integer Dim Var_tmp As ComCNOsai.stVAR ' ' effetuo net use di sicurezza per evitare che il collegamento non sia stato ancora avvenuto ' szCmdLink = "net use " & Ini.DiskCn & " \\" & IniRead.szNameNc & "\PROGRA1" ' Shell(szCmdLink) ' System.Threading.Thread.Sleep(100) n_retry = 0 Var_tmp.nAddress = nVar_NC_state Var_tmp.nBit = 0 ' solo x evitare warning ... Var_tmp.nNumCn = 1 ' solo x evitare warning ... Var_tmp.szVarName = "" ' solo x evitare warning ... If (Not IniRead.b_debug) Then System.Threading.Thread.Sleep(SLEEP_TIME) If IniRead.b_verbose Then Log.write(" Check NC connection 1") ' If IniRead.b_force_S10WLK32 Then ' vecchissimi cn serie 10 non winnbi ? If IniRead.b_verbose Then Log.write("b_force_S10WLK32") ' Else b_timeout = True Do While n_retry < MAX_RETRY System.Threading.Thread.Sleep(SLEEP_TIME) Try n_temp = CnOsai.ReadShortVar(Var_tmp) Catch ex As Exception MsgBox(ex.Message,, "check connection ") End Try If n_temp <> ComCNOsai.ERRORVALUE Then b_timeout = False Exit Do End If n_retry = n_retry + 1 If IniRead.b_verbose Then Log.write(" Check NC connection 2 : " & FrmMain.LblConnected.Text) If Not (CnOsai Is Nothing) Then CnOsai.CloseSession() End If FrmMain.LblConnected.Text = Str(n_retry) If IniRead.b_verbose Then Log.write(" Check NC connection 3 : " & FrmMain.LblConnected.Text) System.Threading.Thread.Sleep(SLEEP_TIME) CnOsai.OpenSession() If CnOsai.Connected Then Else FrmMain.LblConnected.Text = Str(n_retry) & " -- " & CnOsai.ErrMsg If IniRead.b_verbose Then Log.write(" Check NC connection 4 ( bad ) : " & FrmMain.LblConnected.Text) End If Loop End If If b_timeout Then FrmMain.LblConnected.Text = Message.msg(13) ' " CANNOT CONNECT (2)" FrmMain.LblConnected.ForeColor = Color.OrangeRed MsgBox(CnOsai.ErrMsg, MsgBoxStyle.Critical, Message.msg(13)) ' CANNOT CONNECT (2) Log.write(Message.msg(13) & " - " & CnOsai.ErrMsg) End Else ' Imposto Label Connected con il nome del Channel utilizzato FrmMain.LblConnected.Text = FrmMain.LblConnected.Text + " (" + IniRead.szNameNC + ")" FrmMain.LblConnected.ForeColor = Color.DarkGreen Log.write(FrmMain.LblConnected.Text) End If End If End Sub ' ------------------------------------------------------------------------------- ' ---- interfaccia con simulazione della scrittura variabili CN ----------------- ' ------------------------------------------------------------------------------- Sub Write_NC_var(ByVal n_var As Integer, ByVal n_value As Integer) Dim Var_tmp As ComCNOsai.stVAR If Not IniRead.b_debug Then ' effettiva scrittura su CN Var_tmp.nAddress = n_var Var_tmp.nBit = 0 ' solo x evitare warning ... Var_tmp.nNumCn = 1 ' solo x evitare warning ... Var_tmp.szVarName = "" ' solo x evitare warning ... Call CnOsai.WriteShortVar(Var_tmp, n_value) Else ' simulation If n_var = IniRead.nVar_prg_1_ok Then If n_value = 0 Then FrmMain.LblSimPrgSent1.BackColor = Color.Azure Else FrmMain.LblSimPrgSent1.BackColor = Color.LawnGreen End If End If If n_var = IniRead.nVar_prg_2_ok Then If n_value = 0 Then FrmMain.LblSimPrgSent2.BackColor = Color.Azure Else FrmMain.LblSimPrgSent2.BackColor = Color.LawnGreen End If End If End If End Sub ' ------------------------------------------------------------------------------- ' ---- interfaccia con simulazione della lettura variabili CN ------------------- ' ------------------------------------------------------------------------------- Function Read_Nc_var(ByVal n_var As Integer) As Short Dim Var_tmp As ComCNOsai.stVAR Dim n_temp As Short If Not IniRead.b_debug Then ' effettiva lettura da CN Var_tmp.nAddress = n_var Var_tmp.nBit = 0 ' solo x evitare warning ... Var_tmp.nNumCn = 1 ' solo x evitare warning ... Var_tmp.szVarName = "" ' solo x evitare warning ... n_temp = CnOsai.ReadShortVar(Var_tmp) Else ' simulation n_temp = FrmMain.n_simulated_index ' read the state of the buttons .... End If Return n_temp End Function Sub Write_NC_L_var(ByVal n_var As Integer, ByVal d_value As Double) Dim Var_tmp As ComCNOsai.stVAR If Not IniRead.b_debug Then ' effettiva scrittura su CN Var_tmp.nAddress = n_var Var_tmp.nBit = 0 ' solo x evitare warning ... Var_tmp.nNumCn = 1 ' solo x evitare warning ... Var_tmp.szVarName = "" ' solo x evitare warning ... Call CnOsai.WriteVarL(Var_tmp, d_value) Else ' simulation End If End Sub Function Read_Nc_L_var(ByVal n_var) As Double Dim Var_tmp As ComCNOsai.stVAR Dim d_temp As Double If Not IniRead.b_debug Then ' effettiva lettura da CN Var_tmp.nAddress = n_var Var_tmp.nBit = 0 ' solo x evitare warning ... Var_tmp.nNumCn = 1 ' solo x evitare warning ... Var_tmp.szVarName = "" ' solo x evitare warning ... d_temp = CnOsai.ReadVarL(Var_tmp) Else ' simulation d_temp = 0.1234 End If Return d_temp End Function ' ------------------------------------------------------------------------------- ' ---- Controlla se CN è in RUN ------------------------------------------------- ' ------------------------------------------------------------------------------- Function Check_NC_running() As Boolean Dim info1 As CndexLinkDotNet.Cndex.GETINFO1DATA Dim ProcStat As CndexLinkDotNet.Cndex.PROCDATA Dim n_NC_status As Byte ' Dim n_NC_status_bis As Byte info1.rap_feed_ov = 0 ' per placare i warning ma non sembra funzionare.... Check_NC_running = True ' If (CnOsai.NcInfo1(info1)) Then ' n_NC_status = info1.status If (CnOsai.NcProcessStatus(ProcStat)) Then n_NC_status = ProcStat.Status Select Case n_NC_status Case ComCNOsai.EMERG_ Check_NC_running = False Case ComCNOsai.ERRO_ Check_NC_running = False Case ComCNOsai.RESET_ Check_NC_running = False Case ComCNOsai.IDLE_ Check_NC_running = False Case ComCNOsai.CYCLE_ Check_NC_running = True Case ComCNOsai.HOLDA_ Case ComCNOsai.RUNH_ Case ComCNOsai.HRUN_ End Select End If Return Check_NC_running End Function ' ------------------------------------------------------------------------------- ' ---- Get NC status ------------------------------------------------- ' ------------------------------------------------------------------------------- Function Get_NC_status(ByRef n_NC_sub_status As Short) As Short Dim info1 As CndexLinkDotNet.Cndex.GETINFO1DATA Dim ProcStat As CndexLinkDotNet.Cndex.PROCDATA Dim n_NC_status As Short info1.rap_feed_ov = 0 ' per placare i warning ma non sembra funzionare.... If (CnOsai.NcProcessStatus(ProcStat)) Then n_NC_status = ProcStat.Status n_NC_sub_status = ProcStat.SubStatus Else MsgBox(CnOsai.ErrMsg) End If Return n_NC_status End Function Function CN_error_class() As Long Return CnOsai.ErrClass End Function Function CN_error_num() As Long Return CnOsai.ErrNum End Function End Module