Files
mapo-iob-test/Test-OSAI/Modules/M_cn_connection.vb
T
Samuele Locatelli 6c13590778 Refresh OSAI e S7
2021-12-01 16:48:05 +01:00

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