459 lines
12 KiB
VB.net
459 lines
12 KiB
VB.net
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
|